@oracle-agent/oracle 0.35.43 → 0.35.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-sessions.mjs +19 -19
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +28 -28
- package/dist/bin/oracle-data-mcp.mjs +19 -19
- package/dist/bin/oracle-gateway.mjs +42 -42
- package/dist/bin/oracle-investigate.mjs +5 -5
- package/dist/bin/oracle-launch-radar-shadow.mjs +6 -6
- package/dist/bin/oracle-mev-arb-shadow.mjs +6 -6
- package/dist/bin/oracle-mev-shadow.mjs +6 -6
- package/dist/bin/oracle-public-server.mjs +5 -5
- package/dist/bin/oracle-route.mjs +18 -18
- package/dist/bin/oracle-scan.mjs +11 -11
- package/dist/bin/oracle.mjs +12 -12
- package/dist/cli/commands/agent-session.mjs +21 -21
- package/dist/cli/commands/airdrop.mjs +10 -10
- package/dist/cli/commands/chat.mjs +218 -217
- package/dist/cli/commands/data.mjs +244 -8
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +157 -153
- package/dist/cli/commands/extension-policy.mjs +1 -1
- package/dist/cli/commands/farm.mjs +17 -17
- package/dist/cli/commands/fees.mjs +3 -3
- package/dist/cli/commands/follow.mjs +17 -17
- package/dist/cli/commands/mcp.mjs +6 -6
- package/dist/cli/commands/mint.mjs +10 -10
- package/dist/cli/commands/model.mjs +222 -221
- package/dist/cli/commands/quickstart.mjs +7 -7
- package/dist/cli/commands/receipt.mjs +8 -8
- package/dist/cli/commands/resolve.mjs +10 -10
- package/dist/cli/commands/sign.mjs +11 -11
- package/dist/cli/commands/signer.mjs +20 -20
- package/dist/cli/commands/snipe.mjs +11 -11
- package/dist/cli/commands/strategy.mjs +5 -5
- package/dist/cli/commands/swap.mjs +11 -11
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +26 -26
- package/dist/data/names.mjs +3 -3
- package/dist/data/providers/farming.mjs +2 -2
- package/dist/data/providers/lp-destination-discovery.mjs +4 -4
- package/dist/index.mjs +44 -44
- package/dist/investigator/index.mjs +2 -2
- package/dist/launch-radar/index.mjs +5 -5
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +16 -16
- package/dist/nft/universal-mint-router.mjs +4 -4
- package/dist/notifications/index.mjs +7 -7
- package/dist/router/index.mjs +3 -3
- package/dist/router/prepare-bridge.mjs +2 -2
- package/dist/router/prepare-route.mjs +3 -3
- package/dist/scanner/index.mjs +4 -4
- package/dist/strategy/index.mjs +3 -3
- package/dist/tui/standalone-client.mjs +90 -88
- package/package.json +1 -1
- package/public/eval-report.json +347 -13
- package/public/oracle-splash/docs/browser-and-web/index.html +2 -2
- package/public/oracle-splash/docs/connectors/index.html +2 -2
- package/public/oracle-splash/docs/getting-started/index.html +2 -2
- package/public/oracle-splash/docs/index.html +3 -3
- package/public/oracle-splash/docs/reference/index.html +2 -2
- package/public/oracle-splash/docs/security/index.html +2 -2
- package/public/oracle-splash/docs/using-oracle/index.html +2 -2
- package/server.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var vn=Object.defineProperty;var ye=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var An=(e,t)=>{for(var n in t)vn(e,n,{get:t[n],enumerable:!0})};import ie from"node:net";import Pr from"node:dns";function Se(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let n=u=>{if(!u)return[];let p=u.split(":"),d=p.at(-1);if(d?.includes(".")){let w=d.split(".").map(Number);if(w.length!==4||w.some(h=>!Number.isInteger(h)||h<0||h>255))return null;p.splice(p.length-1,1,(w[0]<<8|w[1]).toString(16),(w[2]<<8|w[3]).toString(16))}return p.some(w=>!/^[0-9a-f]{1,4}$/.test(w))?null:p.map(w=>Number.parseInt(w,16))},[r,o]=t.split("::"),i=n(r),a=n(o);if(!i||!a)return null;let c=t.includes("::"),s=8-i.length-a.length;if(!c&&s!==0||c&&s<1)return null;let l=[...i,...Array(Math.max(0,s)).fill(0),...a];return l.length!==8?null:Uint8Array.from(l.flatMap(u=>[u>>8,u&255]))}function Ue(e,t,n){let r=Math.floor(n/8),o=n%8;for(let a=0;a<r;a+=1)if(e[a]!==t[a])return!1;if(!o)return!0;let i=255<<8-o;return(e[r]&i)===(t[r]&i)}function We(e){if(ie.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(ie.isIPv6(e)){let t=Se(e);if(!t)return!1;let n=Se("::ffff:0:0");return Ue(t,n,96)?We([...t.slice(12)].join(".")):Ue(t,Se("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>Ue(t,Se(o),i)):!1}return!1}function _r(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Or.has(n)||n.endsWith(".localhost")||n.endsWith(".internal"))return{ok:!1,error:`refused internal host ${n}`};let r=ie.isIP(n);return r!==0&&!We(n)?{ok:!1,error:`refused private address ${n}`}:{ok:!0,url:t,host:n,isLiteralIp:r!==0}}async function Ge(e,{lookupFn:t=Pr.promises.lookup}={}){let n=_r(e);if(!n.ok)return n;if(n.isLiteralIp)return{ok:!0,url:n.url,addresses:[{address:n.host,family:ie.isIPv6(n.host)?6:4}]};let r;try{r=await t(n.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${n.host} did not resolve`}}return!Array.isArray(r)||r.length===0||r.some(o=>!We(o.address))?{ok:!1,error:`refused: ${n.host} resolves to a non-public address`}:{ok:!0,url:n.url,addresses:r}}async function ze({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let n,r;try{let p=await t();n=p.Agent,r=p.fetch}catch(p){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${p?.message||p}`);return null}if(typeof n!="function"||typeof r!="function"){if(e)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let o=p=>String(p).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,a=p=>(Array.isArray(p)?p:[p]).map(d=>typeof d=="string"?{address:d}:d).filter(d=>d&&d.address).map(d=>({address:d.address,family:d.family||(ie.isIPv6(d.address)?6:4)})),c=(p,d,w)=>{i.set(o(p),a(typeof d=="string"?[{address:d,family:w}]:d))},s=p=>{let d=o(p);if(ie.isIP(d))return[{address:d,family:ie.isIPv6(d)?6:4}];let w=i.get(d);if(!w||!w.length)throw new Error(`refused: unpinned host ${p} during pinned fetch`);return w},l=new n({connect:{lookup(p,d,w){let h;try{h=s(p)}catch(v){return w(v)}return d?.all?w(null,h):w(null,h[0].address,h[0].family)}}}),u=Nr((p,d={})=>r(p,{...d,dispatcher:l}),c);return{dispatcher:l,fetch:u,pin:c,resolve:s,async close(){try{await l.destroy()}catch{}}}}function Nr(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Ve]=Object.freeze({pin:t}),e}function Ye(e){return typeof e=="function"&&typeof e[Ve]?.pin=="function"}function Nt(e,t,n){if(!Ye(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Ve].pin(t,n)}var Or,Ve,Rt=ye(()=>{Or=new Set(["localhost","metadata.google.internal","metadata.goog"]);Ve=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as Rr}from"node:crypto";import{types as Y}from"node:util";function $(e){return ee(`HTTP JSON body refused: ${e}`)}function Hr(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof Y[t]=="function"&&Y[t](e))}function qr(e){let t=[],n=0,r=0,o=0,i=0,a=new WeakSet,c=u=>{if(n+=Buffer.byteLength(u,"utf8"),n>V.bytes)throw $("serialized byte limit exceeded");t.push(u)},s=u=>{if(Buffer.byteLength(u,"utf8")>V.bytes)throw $("serialized byte limit exceeded");return JSON.stringify(u)},l=(u,p)=>{if(r+=1,r>V.nodes)throw $("node limit exceeded");if(p>V.depth)throw $("depth limit exceeded");if(u===null){c("null");return}if(typeof u=="string"){c(s(u));return}if(typeof u=="boolean"){c(u?"true":"false");return}if(typeof u=="number"){if(!Number.isFinite(u))throw $("non-finite number");c(Object.is(u,-0)?"0":String(u));return}if(typeof u!="object")throw $("unsupported non-JSON value");if(Y.isProxy(u))throw $("proxy value");if(Hr(u))throw $("unsupported exotic object");if(a.has(u))throw $("cyclic value");a.add(u);try{if(Object.getOwnPropertySymbols(u).length>0)throw $("symbol-keyed fields are unsupported");if(Array.isArray(u)){let h=Object.getPrototypeOf(u),v=0;for(;h!==null;){if(Y.isProxy(h))throw $("proxy array prototype");if(v+=1,v>V.depth)throw $("array prototype depth limit exceeded");h=Object.getPrototypeOf(h)}if(u.length>V.arrayLength)throw $("array length limit exceeded");for(let x=0;x<u.length;x+=1){let k=Object.getOwnPropertyDescriptor(u,String(x));if(!k||!Object.hasOwn(k,"value")||k.enumerable!==!0)throw $("array entries must be dense enumerable own data")}let y=0;for(let x in u){if(i+=1,i>V.fields)throw $("enumeration limit exceeded");if(Object.hasOwn(u,x)&&(y+=1,y>u.length))throw $("named array fields are unsupported")}if(y!==u.length)throw $("array entries must be dense enumerable own data");c("[");for(let x=0;x<u.length;x+=1)x&&c(","),l(Object.getOwnPropertyDescriptor(u,String(x)).value,p+1);c("]");return}let d=Object.getPrototypeOf(u);if(d!==Object.prototype&&d!==null)throw $("non-plain object");let w=[];for(let h in u){if(i+=1,i>V.fields)throw $("enumeration limit exceeded");if(!Object.hasOwn(u,h))continue;if(o+=1,o>V.fields)throw $("field limit exceeded");let v=Object.getOwnPropertyDescriptor(u,h);if(!v||!Object.hasOwn(v,"value")||v.enumerable!==!0)throw $("object fields must be enumerable own data");w.push([h,v.value])}c("{");for(let h=0;h<w.length;h+=1)h&&c(","),c(s(w[h][0])),c(":"),l(w[h][1],p+1);c("}")}finally{a.delete(u)}};return l(e,0),t.join("")}function Dr(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(Y.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let n=new Set;for(let r of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(r))throw new TypeError("HTTP header names must be valid tokens");let o=r.toLowerCase();if(n.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");n.add(o);let i=Object.getOwnPropertyDescriptor(e,r);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=i.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[r]=String(a)}return t}function Ur(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Wr(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let n=new URL(String(e),String(t));if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${n.protocol}`);return n.toString()}function Gr(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function xe(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Lt.get(e);return t||(t=Mt,Mt+=1,Lt.set(e,t)),`reference:${t}`}function Bt(e){if(!e||typeof e!="object"||Array.isArray(e)||!Object.hasOwn(e,"jsonrpc")||!Object.hasOwn(e,"method")||e.jsonrpc!=="2.0")return!1;let t=typeof e.method=="string"?e.method:"";return t?zr.has(t)||/^get[A-Z0-9_]/u.test(t)||/^is[A-Z0-9_]/u.test(t)||/^eth_get[A-Z0-9_]/u.test(t):!1}function jt(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{return!1}if(Array.isArray(n))return n.length>0&&n.every(Bt);if(!n||typeof n!="object")return!1;if(Object.hasOwn(n,"jsonrpc")||Object.hasOwn(n,"method"))return Bt(n);let r=Object.hasOwn(n,"type")?n.type:null;return typeof r=="string"&&Vr.has(r)&&(!Object.hasOwn(n,"action")||n.action==null)&&(!Object.hasOwn(n,"signature")||n.signature==null)&&(!Object.hasOwn(n,"nonce")||n.nonce==null)}function Yr(e,t,n,r={},o=null){let i=Rr("sha256"),a=(s,l)=>{let u=String(l);i.update(String(Buffer.byteLength(s,"utf8"))).update(":").update(s),i.update("=").update(String(Buffer.byteLength(u,"utf8"))).update(":").update(u).update(`
|
|
2
|
-
`)};a("method",e),a("url",t),Object.keys(n||{}).map((s,l)=>({name:s.toLowerCase(),order:l,value:String(n[s])})).sort((s,l)=>s.name.localeCompare(l.name)||s.order-l.order).forEach((s,l)=>{a(`header-name-${l}`,s.name),a(`header-value-${l}`,s.value)}),a("body",o??"-");for(let s of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${s}`,r[s]??"-");return i.digest("hex")}function Kr(e,t){let n=Number(t);return Number.isFinite(n)&&n>0?Math.min(n*1e3,$t):Math.min(250*2**e,$t)+Math.floor(Math.random()*100)}function ee(e,t={}){let n=new Error(e);return n.retryable=!1,Object.assign(n,t),n}function Je(e,t,n){return ee(`HTTP response from ${e} exceeded maxResponseBytes ${n} (${t})`,{oversize:!0})}function ae(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Xr(e){return e?e.byteLength??e.length??0:0}async function Zr(e,t,{url:n,truncate:r=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(ae(e),!r))throw Je(n,`content-length ${i}`,t);let a=e.body?.getReader?.();if(!a){let p=await e.text(),d=Buffer.byteLength(p,"utf8");if(d>t){if(!r)throw Je(n,`body ${d} bytes`,t);return Buffer.from(p,"utf8").subarray(0,t).toString("utf8")}return p}let c=[],s=0,l=!1;try{for(;;){let{value:p,done:d}=await a.read();if(d)break;if(p&&(c.push(Buffer.from(p)),s+=Xr(p),s>t)){l=!0;break}}}finally{if(l)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(l&&(typeof o=="function"&&o(),!r))throw Je(n,`streamed ${s} bytes`,t);let u=Buffer.concat(c);return(l?u.subarray(0,t):u).toString("utf8")}function Qr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function eo(e,{fetchImpl:t,method:n,headers:r,body:o,timeoutMs:i,lookupFn:a,realFetch:c,untrustedUrl:s=!1,maxResponseBytes:l=null,sameOriginRedirectsOnly:u=!1,importUndici:p,validateResponse:d,signal:w,redirectPolicy:h="follow",maxRedirects:v=Te}){let y=null,x=t,k=a?{lookupFn:a}:{};if(s&&!c&&!Ye(x))throw ee(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let S=new AbortController,g=setTimeout(()=>S.abort(),i),B=w?Ft?Ft([w,S.signal]):w:S.signal,F=async(b,{status:E=null}={})=>{let A=await Ge(b,k);if(!A.ok)throw ee(E==null?`HTTP refused ${b}: ${A.error}`:`HTTP redirect to ${b} ${A.error}`,E==null?{}:{status:E});let N=new URL(b).hostname;if(c){if(y&&(await y.close(),y=null),!y)try{y=await ze({requireUndici:!0,...p?{importUndici:p}:{}})}catch(f){throw ee(E==null?`HTTP refused ${b}: ${f?.message||f}`:`HTTP redirect to ${b} refused: ${f?.message||f}`,E==null?{}:{status:E})}y.pin(N,A.addresses),x=y.fetch}else Nt(x,N,A.addresses);return A};try{let b=String(e),E=Object.assign(Object.create(null),r||{});s&&await F(b);for(let A=0;A<=v;A+=1){let N=Object.assign(Object.create(null),{method:n,headers:E,body:o,signal:B,redirect:"manual",dispatcher:void 0}),f=await x(b,N);if((h==="error"||v===0)&&f.status>=300&&f.status<400)throw ae(f),ee(`HTTP ${f.status} ${n} redirect refused`,{status:f.status,redirectRefused:!0});if(jr.has(f.status)){let D=u===!0&&n==="POST"&&[307,308].includes(f.status)&&jt(n,o);if(n!=="GET"&&n!=="HEAD"&&!D){ae(f);let R=new Error(`HTTP ${f.status} ${n} ${b} redirected non-idempotent request`);throw R.status=f.status,R}if(A===v)throw ae(f),ee(`HTTP ${f.status} ${n} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let C=f.headers?.get?.("location"),L;try{L=Wr(C,b)}catch(R){throw ae(f),R}let z=!Gr(L,b);if(ae(f),z&&n==="POST"){let R=new Error(`HTTP ${f.status} ${n} cross-origin redirect refused`);throw R.status=f.status,R}if(z&&u){let R=new Error(`HTTP ${f.status} ${n} cross-origin redirect refused`);throw R.status=f.status,R.retryable=!1,R}if(z&&(E=Ur(E)),s)await F(L,{status:f.status});else if(z){let R=await Ge(L,k);if(!R.ok){let O=new Error(`HTTP redirect from ${b} ${R.error}`);throw O.status=f.status,O.retryable=!1,O}c&&R.addresses?.length&&(y||(y=await ze(p?{importUndici:p}:{})),y&&(y.pin(new URL(L).hostname,R.addresses),x=y.fetch))}b=L;continue}if(typeof d=="function")try{await d(f,{url:b})}catch(D){throw ae(f),ee(D?.message||String(D))}let I=await Zr(f,l,{url:b,onOversize:()=>S.abort()}),ne=Qr(I);if(!f.ok){let D=new Error(`HTTP ${f.status} ${n} ${b}`);throw D.status=f.status,D.retryAfter=f.headers?.get?.("retry-after")??null,D.body=ne??I.slice(0,300),D}return ne??I}throw new Error(`HTTP redirect loop for ${e}`)}catch(b){if(S.signal.aborted&&!me(w)){let E=b&&(typeof b=="object"||typeof b=="function")&&!Y.isProxy(b)?b:null,A=E?Object.getOwnPropertyDescriptor(E,"oversize"):null;if(!(A&&Object.hasOwn(A,"value")&&A.value===!0))try{if(!E)throw new TypeError("unsafe rejection");Object.defineProperties(E,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw b}finally{clearTimeout(g),y&&await y.close()}}async function he(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&Y.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let n=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let O of Object.getOwnPropertyNames(t)){let _=Object.getOwnPropertyDescriptor(t,O);if(!(O==="toJSON"&&_&&Object.hasOwn(_,"value")&&_.value===void 0)){if(!n.has(O))throw new TypeError("HTTP options contain unknown fields");if(!_||!_.enumerable||!Object.hasOwn(_,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let r=O=>{if(t==null||!Object.hasOwn(t,O))return;let _=Object.getOwnPropertyDescriptor(t,O);if(!_||!Object.hasOwn(_,"value"))throw new TypeError("HTTP options must contain own data properties");return _.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=r("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=r("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=r("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let c=r("redirectPolicy");if(c!==void 0&&c!=="follow"&&c!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let s=r("maxRedirects");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>Te))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${Te}`);if(c==="error"&&s!==void 0&&s!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let l=c??"follow",u=l==="error"?0:s??Te;for(let O of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let _=r(O);if(_!==void 0&&typeof _!="boolean")throw new TypeError(`HTTP ${O} must be boolean`)}let p=r("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let d=r("signal");if(d!==void 0){if(Y.isProxy(d)||!(d instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{me(d)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let O of["importUndici","lookupFn","validateResponse"]){let _=r(O);if(_!==void 0&&typeof _!="function")throw new TypeError(`HTTP ${O} must be a function`)}let w=r("fetchImpl"),h=w||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let v=i??12e3,y=(o||"GET").toUpperCase(),x=r("headers"),k=Dr(x),S=Object.assign(Object.create(null),k);Object.keys(S).some(O=>O.toLowerCase()==="accept")||(S.Accept="application/json");let g=r("body");g!=null&&typeof g!="string"&&(Object.keys(S).find(_=>_.toLowerCase()==="content-type")||(S["Content-Type"]="application/json"),g=qr(g));let B=a??$r,F=r("lookupFn"),b=!w,E=r("untrustedUrl")===!0,A=r("sameOriginRedirectsOnly")===!0,N=r("importUndici"),f=r("validateResponse"),I=d,ne=p??null,D=async()=>{let O;for(let _=0;_<=B;_++){I&&Lr.call(I);try{return await eo(e,{fetchImpl:h,method:y,headers:S,body:g,timeoutMs:v,lookupFn:F,realFetch:b,untrustedUrl:E,maxResponseBytes:ne,sameOriginRedirectsOnly:A,importUndici:N,validateResponse:f,signal:I,redirectPolicy:l,maxRedirects:u})}catch(re){O=re;let ce=Ne=>{if(!re||typeof re!="object"&&typeof re!="function"||Y.isProxy(re))return;let pe=Object.getOwnPropertyDescriptor(re,Ne);return pe&&Object.hasOwn(pe,"value")?pe.value:void 0},_e=ce("status"),Sn=ce("oracleTimeout")===!0||ce("name")==="AbortError"||ce("name")==="TimeoutError"||me(I),xn=new Set([408,425,429]),Tn=ce("retryable")===!1?!1:_e!=null?xn.has(_e)||Cr.has(_e)&&Ct.has(y):!Sn&&Ct.has(y);if(_===B||!Tn)throw re;let at=Kr(_,ce("retryAfter"));I?await new Promise((Ne,pe)=>{let st,de=()=>{clearTimeout(st),kt.call(I,"abort",de),pe(Br(I)||new DOMException("Aborted","AbortError"))};if(me(I)){de();return}st=setTimeout(()=>{kt.call(I,"abort",de),Ne()},at),Mr.call(I,"abort",de,{once:!0}),me(I)&&de()}):await Jr(at)}}throw O};if(!(r("dedupe")!==!1&&!I&&jt(y,g)))return D();let L=Yr(y,e,S,{untrustedUrl:E,maxResponseBytes:ne,sameOriginRedirectsOnly:A,redirectPolicy:l,maxRedirects:u,timeoutMs:v,retries:B,fetchImpl:xe(h),realFetch:b,lookupFn:xe(F),importUndici:xe(N),validateResponse:xe(f)},g),z=Ke.get(L);if(z)return z;let R=D().finally(()=>Ke.delete(L));return Ke.set(L,R),R}async function Ht(e,t,n){let r=Array.from(e),o=Math.max(1,Math.min(Number(t)||1,r.length||1)),i=new Array(r.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;a<r.length;){let c=a++;i[c]=await n(r[c],c)}})),i}var Cr,Ct,$r,$t,kr,Fr,Lr,Mr,kt,Ft,me,Br,jr,Te,Ti,V,Ke,Lt,Mt,zr,Vr,Jr,Xe=ye(()=>{Rt();Cr=new Set([408,425,429,500,502,503,504]),Ct=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),$r=2,$t=4e3,kr=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Fr=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Lr=AbortSignal.prototype.throwIfAborted,Mr=EventTarget.prototype.addEventListener,kt=EventTarget.prototype.removeEventListener,Ft=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,me=e=>e?kr.call(e):!1,Br=e=>e?Fr.call(e):void 0,jr=new Set([301,302,303,307,308]),Te=3,Ti=64*1024,V=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});Ke=new Map,Lt=new WeakMap,Mt=1;zr=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Vr=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);Jr=e=>new Promise(t=>setTimeout(t,e))});function et(e){return zt.get(Number(e))||null}function Vt(e,t=process.env){let n=et(e);if(!n)return null;for(let r of n.rpcEnv){let o=(t[r]||"").trim();if(o)return o}return null}function Yt(e){return zt.has(Number(e))}var Qe,zt,Kt=ye(()=>{Qe={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},zt=new Map(Object.values(Qe).map(e=>[e.chainId,e]))});var rt={};An(rt,{PUBLIC_RPC_FALLBACKS:()=>nt,erc20Allowance:()=>wo,erc20BalanceOf:()=>yo,resolveRpcUrl:()=>Ae,rpcBatch:()=>tn,rpcBlockNumber:()=>po,rpcCall:()=>K,rpcChainId:()=>fo,rpcGasPrice:()=>mo,rpcGetBalance:()=>ho,rpcHealth:()=>nn,rpcHealthAll:()=>bo,transactionReceipt:()=>go});import{Interface as io,getAddress as ao}from"ethers";function te(e,t){try{return ao(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function so(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function tt(e){return e==null?null:Number.parseInt(String(e),16)}function Ae(e,{rpcUrl:t,env:n=process.env}={}){if(t)return t;let r=Vt(e,n);return r||nt[Number(e)]||null}function Zt(e){let t=String(e||""),n=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!co.test(n))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return n}function uo(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Qt(e){if(e?.error)throw uo(e.error);return e?.result}function lo(e,t,n){return`${e}
|
|
1
|
+
var _n=Object.defineProperty;var fe=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(r){throw n=[r],r}};var Nn=(e,t)=>{for(var n in t)_n(e,n,{get:t[n],enumerable:!0})};import{AsyncLocalStorage as Cr}from"node:async_hooks";function xe(e){let t=$r.getStore();if(!t||t.closed||!kr.includes(e))return null;if(t.spans.length>=Fr)return t.droppedSpans++,null;let n={stage:e,startMs:t.now()-t.start,durationMs:null,outcome:"pending",status:null};return t.spans.push(n),(r,o=null)=>{t.closed||n.durationMs!==null||(n.durationMs=Math.max(0,t.now()-t.start-n.startMs),n.outcome=r==="succeeded"?"succeeded":"failed",n.status=Number.isInteger(o)&&o>=100&&o<=599?o:null)}}var $r,kr,Fr,$t=fe(()=>{$r=new Cr,kr=["http","retry","shared"],Fr=512});import ie from"node:net";import Mr from"node:dns";function ve(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let n=u=>{if(!u)return[];let p=u.split(":"),d=p.at(-1);if(d?.includes(".")){let y=d.split(".").map(Number);if(y.length!==4||y.some(h=>!Number.isInteger(h)||h<0||h>255))return null;p.splice(p.length-1,1,(y[0]<<8|y[1]).toString(16),(y[2]<<8|y[3]).toString(16))}return p.some(y=>!/^[0-9a-f]{1,4}$/.test(y))?null:p.map(y=>Number.parseInt(y,16))},[r,o]=t.split("::"),i=n(r),a=n(o);if(!i||!a)return null;let c=t.includes("::"),s=8-i.length-a.length;if(!c&&s!==0||c&&s<1)return null;let l=[...i,...Array(Math.max(0,s)).fill(0),...a];return l.length!==8?null:Uint8Array.from(l.flatMap(u=>[u>>8,u&255]))}function Ge(e,t,n){let r=Math.floor(n/8),o=n%8;for(let a=0;a<r;a+=1)if(e[a]!==t[a])return!1;if(!o)return!0;let i=255<<8-o;return(e[r]&i)===(t[r]&i)}function We(e){if(ie.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(ie.isIPv6(e)){let t=ve(e);if(!t)return!1;let n=ve("::ffff:0:0");return Ge(t,n,96)?We([...t.slice(12)].join(".")):Ge(t,ve("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>Ge(t,ve(o),i)):!1}return!1}function Br(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Lr.has(n)||n.endsWith(".localhost")||n.endsWith(".internal"))return{ok:!1,error:`refused internal host ${n}`};let r=ie.isIP(n);return r!==0&&!We(n)?{ok:!1,error:`refused private address ${n}`}:{ok:!0,url:t,host:n,isLiteralIp:r!==0}}async function ze(e,{lookupFn:t=Mr.promises.lookup}={}){let n=Br(e);if(!n.ok)return n;if(n.isLiteralIp)return{ok:!0,url:n.url,addresses:[{address:n.host,family:ie.isIPv6(n.host)?6:4}]};let r;try{r=await t(n.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${n.host} did not resolve`}}return!Array.isArray(r)||r.length===0||r.some(o=>!We(o.address))?{ok:!1,error:`refused: ${n.host} resolves to a non-public address`}:{ok:!0,url:n.url,addresses:r}}async function Ve({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let n,r;try{let p=await t();n=p.Agent,r=p.fetch}catch(p){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${p?.message||p}`);return null}if(typeof n!="function"||typeof r!="function"){if(e)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let o=p=>String(p).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,a=p=>(Array.isArray(p)?p:[p]).map(d=>typeof d=="string"?{address:d}:d).filter(d=>d&&d.address).map(d=>({address:d.address,family:d.family||(ie.isIPv6(d.address)?6:4)})),c=(p,d,y)=>{i.set(o(p),a(typeof d=="string"?[{address:d,family:y}]:d))},s=p=>{let d=o(p);if(ie.isIP(d))return[{address:d,family:ie.isIPv6(d)?6:4}];let y=i.get(d);if(!y||!y.length)throw new Error(`refused: unpinned host ${p} during pinned fetch`);return y},l=new n({connect:{lookup(p,d,y){let h;try{h=s(p)}catch(I){return y(I)}return d?.all?y(null,h):y(null,h[0].address,h[0].family)}}}),u=jr((p,d={})=>r(p,{...d,dispatcher:l}),c);return{dispatcher:l,fetch:u,pin:c,resolve:s,async close(){try{await l.destroy()}catch{}}}}function jr(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Ye]=Object.freeze({pin:t}),e}function Ke(e){return typeof e=="function"&&typeof e[Ye]?.pin=="function"}function kt(e,t,n){if(!Ke(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Ye].pin(t,n)}var Lr,Ye,Ft=fe(()=>{Lr=new Set(["localhost","metadata.google.internal","metadata.goog"]);Ye=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as Hr}from"node:crypto";import{types as K}from"node:util";function $(e){return te(`HTTP JSON body refused: ${e}`)}function Kr(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof K[t]=="function"&&K[t](e))}function Jr(e){let t=[],n=0,r=0,o=0,i=0,a=new WeakSet,c=u=>{if(n+=Buffer.byteLength(u,"utf8"),n>Y.bytes)throw $("serialized byte limit exceeded");t.push(u)},s=u=>{if(Buffer.byteLength(u,"utf8")>Y.bytes)throw $("serialized byte limit exceeded");return JSON.stringify(u)},l=(u,p)=>{if(r+=1,r>Y.nodes)throw $("node limit exceeded");if(p>Y.depth)throw $("depth limit exceeded");if(u===null){c("null");return}if(typeof u=="string"){c(s(u));return}if(typeof u=="boolean"){c(u?"true":"false");return}if(typeof u=="number"){if(!Number.isFinite(u))throw $("non-finite number");c(Object.is(u,-0)?"0":String(u));return}if(typeof u!="object")throw $("unsupported non-JSON value");if(K.isProxy(u))throw $("proxy value");if(Kr(u))throw $("unsupported exotic object");if(a.has(u))throw $("cyclic value");a.add(u);try{if(Object.getOwnPropertySymbols(u).length>0)throw $("symbol-keyed fields are unsupported");if(Array.isArray(u)){let h=Object.getPrototypeOf(u),I=0;for(;h!==null;){if(K.isProxy(h))throw $("proxy array prototype");if(I+=1,I>Y.depth)throw $("array prototype depth limit exceeded");h=Object.getPrototypeOf(h)}if(u.length>Y.arrayLength)throw $("array length limit exceeded");for(let x=0;x<u.length;x+=1){let k=Object.getOwnPropertyDescriptor(u,String(x));if(!k||!Object.hasOwn(k,"value")||k.enumerable!==!0)throw $("array entries must be dense enumerable own data")}let w=0;for(let x in u){if(i+=1,i>Y.fields)throw $("enumeration limit exceeded");if(Object.hasOwn(u,x)&&(w+=1,w>u.length))throw $("named array fields are unsupported")}if(w!==u.length)throw $("array entries must be dense enumerable own data");c("[");for(let x=0;x<u.length;x+=1)x&&c(","),l(Object.getOwnPropertyDescriptor(u,String(x)).value,p+1);c("]");return}let d=Object.getPrototypeOf(u);if(d!==Object.prototype&&d!==null)throw $("non-plain object");let y=[];for(let h in u){if(i+=1,i>Y.fields)throw $("enumeration limit exceeded");if(!Object.hasOwn(u,h))continue;if(o+=1,o>Y.fields)throw $("field limit exceeded");let I=Object.getOwnPropertyDescriptor(u,h);if(!I||!Object.hasOwn(I,"value")||I.enumerable!==!0)throw $("object fields must be enumerable own data");y.push([h,I.value])}c("{");for(let h=0;h<y.length;h+=1)h&&c(","),c(s(y[h][0])),c(":"),l(y[h][1],p+1);c("}")}finally{a.delete(u)}};return l(e,0),t.join("")}function Xr(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(K.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let n=new Set;for(let r of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(r))throw new TypeError("HTTP header names must be valid tokens");let o=r.toLowerCase();if(n.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");n.add(o);let i=Object.getOwnPropertyDescriptor(e,r);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=i.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[r]=String(a)}return t}function Zr(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Qr(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let n=new URL(String(e),String(t));if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${n.protocol}`);return n.toString()}function eo(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function Ae(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Ht.get(e);return t||(t=qt,qt+=1,Ht.set(e,t)),`reference:${t}`}function Dt(e){if(!e||typeof e!="object"||Array.isArray(e)||!Object.hasOwn(e,"jsonrpc")||!Object.hasOwn(e,"method")||e.jsonrpc!=="2.0")return!1;let t=typeof e.method=="string"?e.method:"";return t?to.has(t)||/^get[A-Z0-9_]/u.test(t)||/^is[A-Z0-9_]/u.test(t)||/^eth_get[A-Z0-9_]/u.test(t):!1}function Ut(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{return!1}if(Array.isArray(n))return n.length>0&&n.every(Dt);if(!n||typeof n!="object")return!1;if(Object.hasOwn(n,"jsonrpc")||Object.hasOwn(n,"method"))return Dt(n);let r=Object.hasOwn(n,"type")?n.type:null;return typeof r=="string"&&no.has(r)&&(!Object.hasOwn(n,"action")||n.action==null)&&(!Object.hasOwn(n,"signature")||n.signature==null)&&(!Object.hasOwn(n,"nonce")||n.nonce==null)}function ro(e,t,n,r={},o=null){let i=Hr("sha256"),a=(s,l)=>{let u=String(l);i.update(String(Buffer.byteLength(s,"utf8"))).update(":").update(s),i.update("=").update(String(Buffer.byteLength(u,"utf8"))).update(":").update(u).update(`
|
|
2
|
+
`)};a("method",e),a("url",t),Object.keys(n||{}).map((s,l)=>({name:s.toLowerCase(),order:l,value:String(n[s])})).sort((s,l)=>s.name.localeCompare(l.name)||s.order-l.order).forEach((s,l)=>{a(`header-name-${l}`,s.name),a(`header-value-${l}`,s.value)}),a("body",o??"-");for(let s of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${s}`,r[s]??"-");return i.digest("hex")}function oo(e,t){let n=Number(t);return Number.isFinite(n)&&n>0?Math.min(n*1e3,Lt):Math.min(250*2**e,Lt)+Math.floor(Math.random()*100)}function te(e,t={}){let n=new Error(e);return n.retryable=!1,Object.assign(n,t),n}function Xe(e,t,n){return te(`HTTP response from ${e} exceeded maxResponseBytes ${n} (${t})`,{oversize:!0})}function ae(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function ao(e){return e?e.byteLength??e.length??0:0}async function so(e,t,{url:n,truncate:r=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(ae(e),!r))throw Xe(n,`content-length ${i}`,t);let a=e.body?.getReader?.();if(!a){let p=await e.text(),d=Buffer.byteLength(p,"utf8");if(d>t){if(!r)throw Xe(n,`body ${d} bytes`,t);return Buffer.from(p,"utf8").subarray(0,t).toString("utf8")}return p}let c=[],s=0,l=!1;try{for(;;){let{value:p,done:d}=await a.read();if(d)break;if(p&&(c.push(Buffer.from(p)),s+=ao(p),s>t)){l=!0;break}}}finally{if(l)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(l&&(typeof o=="function"&&o(),!r))throw Xe(n,`streamed ${s} bytes`,t);let u=Buffer.concat(c);return(l?u.subarray(0,t):u).toString("utf8")}function co(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function uo(e,{fetchImpl:t,method:n,headers:r,body:o,timeoutMs:i,lookupFn:a,realFetch:c,untrustedUrl:s=!1,maxResponseBytes:l=null,sameOriginRedirectsOnly:u=!1,importUndici:p,validateResponse:d,signal:y,redirectPolicy:h="follow",maxRedirects:I=Te}){let w=null,x=t,k=a?{lookupFn:a}:{};if(s&&!c&&!Ke(x))throw te(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let S=new AbortController,g=setTimeout(()=>S.abort(),i),B=y?jt?jt([y,S.signal]):y:S.signal,F=async(b,{status:E=null}={})=>{let P=await ze(b,k);if(!P.ok)throw te(E==null?`HTTP refused ${b}: ${P.error}`:`HTTP redirect to ${b} ${P.error}`,E==null?{}:{status:E});let N=new URL(b).hostname;if(c){if(w&&(await w.close(),w=null),!w)try{w=await Ve({requireUndici:!0,...p?{importUndici:p}:{}})}catch(f){throw te(E==null?`HTTP refused ${b}: ${f?.message||f}`:`HTTP redirect to ${b} refused: ${f?.message||f}`,E==null?{}:{status:E})}w.pin(N,P.addresses),x=w.fetch}else kt(x,N,P.addresses);return P};try{let b=String(e),E=Object.assign(Object.create(null),r||{});s&&await F(b);for(let P=0;P<=I;P+=1){let N=Object.assign(Object.create(null),{method:n,headers:E,body:o,signal:B,redirect:"manual",dispatcher:void 0}),f=await x(b,N);if((h==="error"||I===0)&&f.status>=300&&f.status<400)throw ae(f),te(`HTTP ${f.status} ${n} redirect refused`,{status:f.status,redirectRefused:!0});if(Yr.has(f.status)){let D=u===!0&&n==="POST"&&[307,308].includes(f.status)&&Ut(n,o);if(n!=="GET"&&n!=="HEAD"&&!D){ae(f);let R=new Error(`HTTP ${f.status} ${n} ${b} redirected non-idempotent request`);throw R.status=f.status,R}if(P===I)throw ae(f),te(`HTTP ${f.status} ${n} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let C=f.headers?.get?.("location"),M;try{M=Qr(C,b)}catch(R){throw ae(f),R}let z=!eo(M,b);if(ae(f),z&&n==="POST"){let R=new Error(`HTTP ${f.status} ${n} cross-origin redirect refused`);throw R.status=f.status,R}if(z&&u){let R=new Error(`HTTP ${f.status} ${n} cross-origin redirect refused`);throw R.status=f.status,R.retryable=!1,R}if(z&&(E=Zr(E)),s)await F(M,{status:f.status});else if(z){let R=await ze(M,k);if(!R.ok){let T=new Error(`HTTP redirect from ${b} ${R.error}`);throw T.status=f.status,T.retryable=!1,T}c&&R.addresses?.length&&(w||(w=await Ve(p?{importUndici:p}:{})),w&&(w.pin(new URL(M).hostname,R.addresses),x=w.fetch))}b=M;continue}if(typeof d=="function")try{await d(f,{url:b})}catch(D){throw ae(f),te(D?.message||String(D))}let O=await so(f,l,{url:b,onOversize:()=>S.abort()}),re=co(O);if(!f.ok){let D=new Error(`HTTP ${f.status} ${n} ${b}`);throw D.status=f.status,D.retryAfter=f.headers?.get?.("retry-after")??null,D.body=re??O.slice(0,300),D}return re??O}throw new Error(`HTTP redirect loop for ${e}`)}catch(b){if(S.signal.aborted&&!he(y)){let E=b&&(typeof b=="object"||typeof b=="function")&&!K.isProxy(b)?b:null,P=E?Object.getOwnPropertyDescriptor(E,"oversize"):null;if(!(P&&Object.hasOwn(P,"value")&&P.value===!0))try{if(!E)throw new TypeError("unsafe rejection");Object.defineProperties(E,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw b}finally{clearTimeout(g),w&&await w.close()}}async function ye(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&K.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let n=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let T of Object.getOwnPropertyNames(t)){let A=Object.getOwnPropertyDescriptor(t,T);if(!(T==="toJSON"&&A&&Object.hasOwn(A,"value")&&A.value===void 0)){if(!n.has(T))throw new TypeError("HTTP options contain unknown fields");if(!A||!A.enumerable||!Object.hasOwn(A,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let r=T=>{if(t==null||!Object.hasOwn(t,T))return;let A=Object.getOwnPropertyDescriptor(t,T);if(!A||!Object.hasOwn(A,"value"))throw new TypeError("HTTP options must contain own data properties");return A.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=r("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=r("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=r("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let c=r("redirectPolicy");if(c!==void 0&&c!=="follow"&&c!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let s=r("maxRedirects");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>Te))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${Te}`);if(c==="error"&&s!==void 0&&s!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let l=c??"follow",u=l==="error"?0:s??Te;for(let T of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let A=r(T);if(A!==void 0&&typeof A!="boolean")throw new TypeError(`HTTP ${T} must be boolean`)}let p=r("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let d=r("signal");if(d!==void 0){if(K.isProxy(d)||!(d instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{he(d)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let T of["importUndici","lookupFn","validateResponse"]){let A=r(T);if(A!==void 0&&typeof A!="function")throw new TypeError(`HTTP ${T} must be a function`)}let y=r("fetchImpl"),h=y||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let I=i??12e3,w=(o||"GET").toUpperCase(),x=r("headers"),k=Xr(x),S=Object.assign(Object.create(null),k);Object.keys(S).some(T=>T.toLowerCase()==="accept")||(S.Accept="application/json");let g=r("body");g!=null&&typeof g!="string"&&(Object.keys(S).find(A=>A.toLowerCase()==="content-type")||(S["Content-Type"]="application/json"),g=Jr(g));let B=a??Dr,F=r("lookupFn"),b=!y,E=r("untrustedUrl")===!0,P=r("sameOriginRedirectsOnly")===!0,N=r("importUndici"),f=r("validateResponse"),O=d,re=p??null,D=async()=>{let T;for(let A=0;A<=B;A++){O&&Wr.call(O);let st=xe("http");try{let V=await uo(e,{fetchImpl:h,method:w,headers:S,body:g,timeoutMs:I,lookupFn:F,realFetch:b,untrustedUrl:E,maxResponseBytes:re,sameOriginRedirectsOnly:P,importUndici:N,validateResponse:f,signal:O,redirectPolicy:l,maxRedirects:u});return st?.("succeeded"),V}catch(V){T=V;let ce=Re=>{if(!V||typeof V!="object"&&typeof V!="function"||K.isProxy(V))return;let pe=Object.getOwnPropertyDescriptor(V,Re);return pe&&Object.hasOwn(pe,"value")?pe.value:void 0},ge=ce("status");st?.("failed",ge);let Tn=ce("oracleTimeout")===!0||ce("name")==="AbortError"||ce("name")==="TimeoutError"||he(O),In=new Set([408,425,429]),Pn=ce("retryable")===!1?!1:ge!=null?In.has(ge)||qr.has(ge)&&Mt.has(w):!Tn&&Mt.has(w);if(A===B||!Pn)throw V;let ct=oo(A,ce("retryAfter")),On=xe("retry"),ut=!1;try{O?await new Promise((Re,pe)=>{let lt,de=()=>{clearTimeout(lt),Bt.call(O,"abort",de),pe(Vr(O)||new DOMException("Aborted","AbortError"))};if(he(O)){de();return}lt=setTimeout(()=>{Bt.call(O,"abort",de),Re()},ct),zr.call(O,"abort",de,{once:!0}),he(O)&&de()}):await io(ct),ut=!0}finally{On?.(ut?"succeeded":"failed")}}}throw T};if(!(r("dedupe")!==!1&&!O&&Ut(w,g)))return D();let M=ro(w,e,S,{untrustedUrl:E,maxResponseBytes:re,sameOriginRedirectsOnly:P,redirectPolicy:l,maxRedirects:u,timeoutMs:I,retries:B,fetchImpl:Ae(h),realFetch:b,lookupFn:Ae(F),importUndici:Ae(N),validateResponse:Ae(f)},g),z=Je.get(M);if(z){let T=xe("shared");try{let A=await z;return T?.("succeeded"),A}catch(A){throw T?.("failed"),A}}let R=D().finally(()=>Je.delete(M));return Je.set(M,R),R}async function Gt(e,t,n){let r=Array.from(e),o=Math.max(1,Math.min(Number(t)||1,r.length||1)),i=new Array(r.length),a=0;return await Promise.all(Array.from({length:o},async()=>{for(;a<r.length;){let c=a++;i[c]=await n(r[c],c)}})),i}var qr,Mt,Dr,Lt,Ur,Gr,Wr,zr,Bt,jt,he,Vr,Yr,Te,Fi,Y,Je,Ht,qt,to,no,io,Ze=fe(()=>{$t();Ft();qr=new Set([408,425,429,500,502,503,504]),Mt=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Dr=2,Lt=4e3,Ur=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Gr=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Wr=AbortSignal.prototype.throwIfAborted,zr=EventTarget.prototype.addEventListener,Bt=EventTarget.prototype.removeEventListener,jt=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,he=e=>e?Ur.call(e):!1,Vr=e=>e?Gr.call(e):void 0,Yr=new Set([301,302,303,307,308]),Te=3,Fi=64*1024,Y=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});Je=new Map,Ht=new WeakMap,qt=1;to=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),no=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);io=e=>new Promise(t=>setTimeout(t,e))});function tt(e){return Jt.get(Number(e))||null}function Xt(e,t=process.env){let n=tt(e);if(!n)return null;for(let r of n.rpcEnv){let o=(t[r]||"").trim();if(o)return o}return null}function Zt(e){return Jt.has(Number(e))}var et,Jt,Qt=fe(()=>{et={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Jt=new Map(Object.values(et).map(e=>[e.chainId,e]))});var ot={};Nn(ot,{PUBLIC_RPC_FALLBACKS:()=>rt,erc20Allowance:()=>To,erc20BalanceOf:()=>Io,resolveRpcUrl:()=>Pe,rpcBatch:()=>an,rpcBlockNumber:()=>So,rpcCall:()=>J,rpcChainId:()=>xo,rpcGasPrice:()=>vo,rpcGetBalance:()=>Ao,rpcHealth:()=>sn,rpcHealthAll:()=>Oo,transactionReceipt:()=>Po});import{Interface as ho,getAddress as yo}from"ethers";function ne(e,t){try{return yo(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function wo(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function nt(e){return e==null?null:Number.parseInt(String(e),16)}function Pe(e,{rpcUrl:t,env:n=process.env}={}){if(t)return t;let r=Xt(e,n);return r||rt[Number(e)]||null}function nn(e){let t=String(e||""),n=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!go.test(n))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return n}function bo(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function rn(e){if(e?.error)throw bo(e.error);return e?.result}function Eo(e,t,n){return`${e}
|
|
3
3
|
${t}
|
|
4
|
-
${JSON.stringify(n??[])}`}async function en(e,t,n){return he(e,{method:"POST",body:t,fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3,signal:n.signal})}async function tn(e,t,n={}){if(!Array.isArray(t)||t.length===0)throw new Error("rpcBatch requires a non-empty calls array");if(t.length>Jt)throw new Error(`rpcBatch: at most ${Jt} calls`);for(let i of t)Zt(i?.method);let r=Ae(e,n);if(!r)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);let o=t.map((i,a)=>({jsonrpc:"2.0",id:a+1,method:i.method,params:i.params||[]}));try{let i=await en(r,o,n);if(Array.isArray(i)&&i.length===t.length){let a=new Map(i.map(c=>[Number(c?.id),c]));return t.map((c,s)=>Qt(a.get(s+1)??i[s]))}}catch{}return Promise.all(t.map(i=>K(e,i.method,i.params||[],n)))}async function K(e,t,n=[],r={}){let o=String(t||""),i=Zt(o),a=Ae(e,r);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&r.cacheChainId!==!1){let u=Xt.get(a);if(u!=null)return u}let s=r.dedupe!==!1&&!r.signal?lo(a,o,n):null;if(s&&we.has(s))return we.get(s);let l=(async()=>{let u=await en(a,{jsonrpc:"2.0",id:1,method:t,params:n},r),p=Qt(u);return i==="eth_chainid"&&typeof p=="string"&&Xt.set(a,p),p})();return s&&(we.set(s,l),l.finally(()=>{we.get(s)===l&&we.delete(s)}).catch(()=>{})),l}async function nn(e,t={}){let[n,r]=await tn(e,[{method:"eth_blockNumber",params:[]},{method:"eth_chainId",params:[]}],t),o=parseInt(n,16),i=parseInt(r,16);return{ok:Number.isFinite(o)&&i===Number(e),chainId:Number(e),reportedChainId:i,blockNumber:o,name:et(e)?.name||null}}async function po(e,t={}){let n=await K(e,"eth_blockNumber",[],t);return parseInt(n,16)}async function fo(e,t={}){let n=await K(e,"eth_chainId",[],t);return parseInt(n,16)}async function mo(e,t={}){let n=await K(e,"eth_gasPrice",[],t);if(n==null)return null;try{return BigInt(n)}catch{return null}}async function ho(e,t,n={}){if(!t)throw new Error("rpcGetBalance requires address");let r=await K(e,"eth_getBalance",[t,"latest"],n);return{chainId:Number(e),address:t,balanceWei:BigInt(r).toString(),balanceHex:r}}async function wo(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=te(e.token||e.tokenAddress,"token"),o=te(e.owner,"owner"),i=te(e.spender,"spender"),a=ve.encodeFunctionData("allowance",[o,i]),c=await K(n,"eth_call",[{to:r,data:a},e.blockTag||"latest"],t),s=ve.decodeFunctionResult("allowance",c),l=BigInt(s[0]);return{chainId:n,token:r,owner:o,spender:i,allowance:l.toString(),allowanceHex:`0x${l.toString(16)}`,blockTag:e.blockTag||"latest"}}async function yo(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=te(e.token||e.tokenAddress,"token"),o=te(e.account||e.owner||e.address,"account"),i=ve.encodeFunctionData("balanceOf",[o]),a=await K(n,"eth_call",[{to:r,data:i},e.blockTag||"latest"],t),c=ve.decodeFunctionResult("balanceOf",a),s=BigInt(c[0]);return{chainId:n,token:r,account:o,balance:s.toString(),balanceHex:`0x${s.toString(16)}`,blockTag:e.blockTag||"latest"}}async function go(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=so(e.txHash||e.hash||e.transactionHash),o=await K(n,"eth_getTransactionReceipt",[r],t);if(!o)return{ok:!1,chainId:n,txHash:r,status:"pending",receipt:null,reason:"receipt pending"};let i=tt(o.status),a=i===1,c=i===1?"success":i===0?"reverted":"unknown",s=a?null:c==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?te(e.expectedTo,"expectedTo"):null,u=o.to?te(o.to,"receipt.to"):null;return l&&u!==l&&(a=!1,s=`to mismatch: expected ${l}, got ${u||"null"}`),{ok:a,chainId:n,txHash:r,status:c,reason:s,statusCode:i,to:u,from:o.from?te(o.from,"receipt.from"):null,blockNumber:tt(o.blockNumber),transactionIndex:tt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function bo(e={}){let t=e.chainIds||Object.values(Qe).map(r=>r.chainId),n={};return await Promise.all(t.map(async r=>{if(!Yt(r)&&!nt[r]&&!Ae(r,e)){n[r]={ok:!1,error:"no rpc configured",chainId:r};return}try{n[r]=await nn(r,e)}catch(o){n[r]={ok:!1,chainId:r,error:String(o.message||o)}}})),n}var ve,nt,co,Jt,we,Xt,ot=ye(()=>{Xe();Kt();ve=new io(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);nt={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};co=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;Jt=32,we=new Map,Xt=new Map});import{createHash as Ho}from"node:crypto";import{createHash as In,createHmac as Pn,timingSafeEqual as ti}from"node:crypto";var On=2,Ce=300*1e3,_n=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function Re(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Re).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${Re(e[n])}`).join(",")}}`}function ct(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function ut(e=process.env){return ct(process.env)||ct(e)}function Nn(e){let{prepareHash:t,prepareMac:n,note:r,...o}=e||{};return o}function ge(e){let t=Nn(e);return In("sha256").update(Re(t)).digest("hex")}function Rn(e,t=ut()){return t?Pn("sha256",t).update(String(e)).digest("hex"):""}function X(e,{provider:t,kind:n,env:r=process.env,nowMs:o=Date.now(),expiresAtMs:i}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let a=Object.prototype.hasOwnProperty.call(e,"oraclePrepared");if(a&&typeof e.oraclePrepared!="boolean")throw new Error("stampPrepared: oraclePrepared must be boolean");let c={...e,provider:e.provider||t,kind:e.kind||n,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1,oraclePrepared:a?e.oraclePrepared:!0};if(!c.provider)throw new Error("stampPrepared: provider required");if(!c.kind)throw new Error("stampPrepared: kind required");let s=Number(o),l=i==null?s+Ce:Number(i),u=l-s;if(!Number.isSafeInteger(s)||!Number.isSafeInteger(l)||u<=0||u>_n)throw new Error("stampPrepared: bounded preparedAt/expiresAt required");let d={...c,preparedAt:s,expiresAt:l,prepareVersion:On},w=ge(d),h=ut(r),v=h?Rn(w,h):void 0,y={...d,prepareHash:w};return v&&(y.prepareMac=v),y}import{createHash as Cn}from"node:crypto";var $n=1,kn=8,j=class extends TypeError{constructor(t,n="invalid-intent"){super(`universal mint intent: ${t}`),this.name="UniversalMintIntentError",this.code=n}},Fn=new Set(["version","chain","marketplace","mechanism","collection","recipient","quantity","stages","mintValueCap","networkFeeCap","priorityFeeCap","expiry","maxExecutions"]),Ln=new Set(["family","id"]),Mn=new Set(["id","startsAt","endsAt","eligibility"]),Bn=new Set(["kind","proofFormat","proofDigest"]),jn=new Set(["amount","unit"]),Hn=new Set(["value","unit"]);function ue(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new j(`${t} must be a plain object`);return e}function le(e,t,n){for(let r of Object.keys(e))if(!t.has(r))throw new j(`${n} has unknown field ${r}`,"unknown-field")}function W(e,t){if(typeof e!="string"||e.length===0||e.trim()!==e||/[\u0000-\u001f\u007f]/.test(e))throw new j(`${t} must be a non-empty exact string without surrounding whitespace`);return e}function qn(e,t){if(!Number.isSafeInteger(e)||e<=0)throw new j(`${t} must be a positive safe integer`);return e}function $e(e,t){if(e=ue(e,t),le(e,jn,t),!Object.hasOwn(e,"amount")||!Object.hasOwn(e,"unit"))throw new j(`${t} requires amount and unit`,"ambiguous-unit");let n=W(e.amount,`${t}.amount`);if(!/^(0|[1-9]\d*)$/.test(n))throw new j(`${t}.amount must be a canonical non-negative integer string`);return{amount:n,unit:W(e.unit,`${t}.unit`)}}function ke(e,t){if(e=ue(e,t),le(e,Hn,t),e.unit!=="unix-ms"||!Number.isSafeInteger(e.value)||e.value<0)throw new j(`${t} must have a non-negative safe integer value and unit unix-ms`,"ambiguous-unit");return{value:e.value,unit:"unix-ms"}}function Dn(e,t){e=ue(e,t),le(e,Bn,t);let n=W(e.kind,`${t}.kind`),r=W(e.proofFormat,`${t}.proofFormat`),o=W(e.proofDigest,`${t}.proofDigest`);if(!/^[a-z0-9][a-z0-9+._-]*:[0-9a-f]+$/.test(o))throw new j(`${t}.proofDigest must be algorithm:lowercase-hex metadata`);return{kind:n,proofFormat:r,proofDigest:o}}function Un(e,t){let n=`stages[${t}]`;e=ue(e,n),le(e,Mn,n);let r=ke(e.startsAt,`${n}.startsAt`),o=ke(e.endsAt,`${n}.endsAt`);if(r.value>=o.value)throw new j(`${n} must end after it starts`,"invalid-stage-range");return{id:W(e.id,`${n}.id`),startsAt:r,endsAt:o,eligibility:Dn(e.eligibility,`${n}.eligibility`)}}function Fe(e){if(e=ue(e,"input"),le(e,Fn,"input"),e.version!==$n)throw new j("version must be 1");let t=ue(e.chain,"chain");le(t,Ln,"chain");let n=e.stages;if(!Array.isArray(n)||n.length<1||n.length>kn)throw new j("stages must contain 1 through 8 entries","stage-count");let r=n.map(Un).sort((a,c)=>a.startsAt.value-c.startsAt.value||a.id.localeCompare(c.id)),o=new Set;for(let a=0;a<r.length;a+=1){if(o.has(r[a].id))throw new j("stage ids must be unique","duplicate-stage");if(o.add(r[a].id),a&&r[a].startsAt.value<r[a-1].endsAt.value)throw new j("stages must not overlap","overlapping-stages")}if(e.maxExecutions!==1)throw new j("maxExecutions must equal 1","execution-limit");let i={version:1,chain:{family:W(t.family,"chain.family"),id:W(t.id,"chain.id")},marketplace:W(e.marketplace,"marketplace"),mechanism:W(e.mechanism,"mechanism"),collection:W(e.collection,"collection"),recipient:W(e.recipient,"recipient"),quantity:qn(e.quantity,"quantity"),stages:r,mintValueCap:$e(e.mintValueCap,"mintValueCap"),networkFeeCap:$e(e.networkFeeCap,"networkFeeCap"),priorityFeeCap:$e(e.priorityFeeCap,"priorityFeeCap"),expiry:ke(e.expiry,"expiry"),maxExecutions:1};if(r.some(a=>a.endsAt.value>i.expiry.value))throw new j("every stage must end no later than expiry","stage-after-expiry");return i}function Wn(e){return JSON.stringify(Fe(e))}function lt(e){return`sha256:${Cn("sha256").update(Wn(e),"utf8").digest("hex")}`}var Le=Object.freeze({RESEARCH_ONLY:"RESEARCH_ONLY",PREPARE_READY:"PREPARE_READY",AUTOMINT_READY:"AUTOMINT_READY"}),oe=Object.freeze({DISCOVERY:"discovery",ELIGIBILITY:"eligibility",PREPARATION:"preparation",SIMULATION:"simulation",BOUNDED_SIGNING:"boundedSigning",BROADCAST:"broadcast",RECEIPT_VERIFICATION:"receiptVerification",OWNERSHIP_VERIFICATION:"ownershipVerification"}),Me=Object.freeze(Object.values(oe)),pt=new Set(Me),dt=Object.freeze(Me.slice(0,4)),Gn=Me,zn=new Set(["id","chainFamilies","marketplaces","mechanisms","capabilities"]),H=class extends TypeError{constructor(t,n="invalid-registry-entry"){super(`universal mint registry: ${t}`),this.name="UniversalMintRegistryError",this.code=n}};function be(e,t){if(!Array.isArray(e)||e.length===0)throw new H(`${t} must be a non-empty array`);let n=e.map(r=>{if(typeof r!="string"||!r||r.trim()!==r)throw new H(`${t} entries must be exact strings`);return r});if(new Set(n).size!==n.length)throw new H(`${t} contains duplicates`);return[...n].sort()}function Vn(e){if(!Array.isArray(e))throw new H("capabilities must be an array");let t=new Set(e);for(let n of t)if(!pt.has(n))throw new H(`unknown capability ${n}`,"unknown-capability");return Gn.every(n=>t.has(n))?Le.AUTOMINT_READY:dt.every(n=>t.has(n))?Le.PREPARE_READY:Le.RESEARCH_ONLY}function Be(e=[]){if(!Array.isArray(e))throw new H("entries must be an array");let t=new Map;for(let n of e){if(!n||typeof n!="object"||Array.isArray(n))throw new H("entry must be an object");for(let i of Object.keys(n))if(!zn.has(i))throw new H(`entry has unknown field ${i}`,"unknown-field");if(typeof n.id!="string"||!n.id||n.id.trim()!==n.id)throw new H("entry id must be an exact string");if(t.has(n.id))throw new H(`duplicate entry id ${n.id}`,"duplicate-entry");let r=be(n.capabilities,"capabilities"),o=Object.freeze({id:n.id,chainFamilies:Object.freeze(be(n.chainFamilies,"chainFamilies")),marketplaces:Object.freeze(be(n.marketplaces,"marketplaces")),mechanisms:Object.freeze(be(n.mechanisms,"mechanisms")),capabilities:Object.freeze(r),tier:Vn(r)});t.set(o.id,o)}return Object.freeze({entries:Object.freeze([...t.values()]),get(n){return t.get(n)||null},find({chainFamily:n,marketplace:r,mechanism:o}={}){return[...t.values()].filter(i=>i.chainFamilies.includes(n)&&i.marketplaces.includes(r)&&i.mechanisms.includes(o))},require(n,r=dt){let o=t.get(n);if(!o)throw new H(`missing adapter ${n}`,"missing-adapter");for(let i of r){if(!pt.has(i))throw new H(`unknown capability ${i}`,"unknown-capability");if(!o.capabilities.includes(i))throw new H(`${n} is missing capability ${i}`,"missing-capability")}return o}})}var ii=Be([]);import{getAddress as Yn,Interface as je,keccak256 as Kn}from"ethers";var Z=Object.freeze({manifold:new je(["function mint(address creatorContract,uint256 instanceId,uint32 mintIndex,bytes32[] merkleProof,address mintFor) payable"]),zora:new je(["function mint(address mintTo,uint256 quantity,string comment,address mintReferral) payable"]),thirdweb:new je(["function claim(address receiver,uint256 quantity,address currency,uint256 pricePerToken,(bytes32[] proof,uint256 quantityLimitPerWallet,uint256 pricePerToken,address currency) allowlistProof,bytes data) payable"])}),qe=Object.freeze({manifold:Object.freeze({signature:"mint(address,uint256,uint32,bytes32[],address)",layout:"manifold-claim-v1"}),zora:Object.freeze({signature:"mint(address,uint256,string,address)",layout:"zora-1155-mint-v1"}),thirdweb:Object.freeze({signature:"claim(address,uint256,address,uint256,(bytes32[],uint256,uint256,address),bytes)",layout:"thirdweb-drop-claim-v1"})}),ui=Object.freeze(Object.fromEntries(Object.entries(qe).map(([e,t])=>[Z[e].getFunction(t.signature).selector.toLowerCase(),Object.freeze({platform:e,...t})])));function T(e){throw new Error(`evm-mint-launchpads: ${e}`)}function U(e,t){try{return Yn(String(e||""))}catch{return T(`invalid ${t}`)}}function q(e,t,{positive:n=!1}={}){try{let r=BigInt(e);return(r<0n||n&&r===0n)&&T(`${t} must be ${n?"positive":"unsigned"}`),r}catch(r){if(/evm-mint-launchpads:/.test(String(r?.message)))throw r;return T(`${t} must be an unsigned integer`)}}function He(e,t="proof"){return(!Array.isArray(e)||e.length>64||e.some(n=>!/^0x[0-9a-fA-F]{64}$/.test(String(n))))&&T(`invalid ${t}`),e.map(String)}function Jn(e,t,n){let r=Number(t.chainId);(!Number.isSafeInteger(r)||r<=0)&&T("invalid chainId");let o=U(t.contract,"contract"),a=(Array.isArray(n.reviewedContracts)?n.reviewedContracts:[]).find(u=>u.platform===e&&Number(u.chainId)===r&&U(u.contract,"reviewed contract")===o);a||T("unsupported contract or wrong chain");let c=U(a.mintTarget||a.contract,"reviewed mint target"),s=Z[e].getFunction(qe[e].signature).selector.toLowerCase();return(!(a.selectors||[s]).map(u=>String(u).toLowerCase()).includes(s)||!a.codeHash||!/^0x[0-9a-fA-F]{64}$/.test(a.codeHash))&&T("unverified bytecode/selector combination"),{chainId:r,contract:o,mintTarget:c,selector:s,review:a}}async function Xn(e,t,n){if(typeof n.getCode=="function")return n.getCode(e,t);if(typeof n.rpcCall=="function")return n.rpcCall(e,"eth_getCode",[t,"latest"],n);T("runtime bytecode verification required")}function Zn(e,t){let n=e.stage;if(!n)return null;let r=q(n.startTime,"stage startTime"),o=q(n.endTime,"stage endTime"),i=BigInt(Math.floor(t/1e3));return(r>i||o<=i||o<=r)&&T("mint stage is not open"),{...n,startTime:r.toString(),endTime:o.toString()}}function Qn(e,t){let n=qe[e];String(t).slice(0,10).toLowerCase()!==Z[e].getFunction(n.signature).selector.toLowerCase()&&T("unknown selector");let r;try{r=Z[e].decodeFunctionData(n.signature,t)}catch{T("invalid calldata layout")}let o;return e==="manifold"&&(o=Z.manifold.encodeFunctionData(n.signature,[r[0],r[1],r[2],[...r[3]],r[4]])),e==="zora"&&(o=Z.zora.encodeFunctionData(n.signature,[r[0],r[1],r[2],r[3]])),e==="thirdweb"&&(o=Z.thirdweb.encodeFunctionData(n.signature,[r[0],r[1],r[2],r[3],r[4],r[5]])),o.toLowerCase()!==String(t).toLowerCase()&&T("calldata must be canonical with no suffix"),r}async function ft(e,t={},n={}){Z[e]||T("unsupported platform");let{chainId:r,contract:o,mintTarget:i,review:a}=Jn(e,t,n),c=U(t.recipient||t.minter,"recipient"),s=q(t.quantity,"quantity",{positive:!0}),l=q(t.priceWei,"priceWei"),u=q(t.maxValueWei,"maxValueWei"),p=q(t.maxPlatformFeeWei??0,"maxPlatformFeeWei"),d=t.transaction||t.tx;(!d||Number(d.chainId)!==r)&&T("transaction chain mismatch"),U(d.to,"transaction target")!==i&&T("transaction target mismatch");let w=await Xn(r,i,n);(!/^0x[0-9a-fA-F]+$/.test(String(w))||w==="0x"||Kn(w).toLowerCase()!==String(a.codeHash).toLowerCase())&&T("runtime bytecode is not reviewed");let h=Qn(e,d.data),v=Number.isFinite(Number(n.nowMs))?Number(n.nowMs):Date.now(),y=Zn(t,v),x,k,S,g=null,B=[];if(e==="manifold")U(h[0],"calldata contract")!==o&&T("calldata contract mismatch"),(t.instanceId==null||q(h[1],"instanceId")!==q(t.instanceId,"instanceId"))&&T("instance/stage mismatch"),(t.mintIndex==null||q(h[2],"mintIndex")!==q(t.mintIndex,"mintIndex"))&&T("mint index/stage mismatch"),B=He([...h[3]]),x=U(h[4],"calldata recipient"),k=1n,S=l;else if(e==="zora")x=U(h[0],"calldata recipient"),k=BigInt(h[1]),S=l,t.comment!=null&&h[2]!==String(t.comment)&&T("comment mismatch"),t.mintReferral!=null&&U(h[3],"mint referral")!==U(t.mintReferral,"expected mint referral")&&T("mint referral mismatch");else{x=U(h[0],"calldata recipient"),k=BigInt(h[1]),S=BigInt(h[3]);let N=h[4];B=He([...N.proof]),g=BigInt(N.quantityLimitPerWallet),g<s&&T("wallet allowance below quantity"),(BigInt(N.pricePerToken)!==l||U(N.currency,"allowlist currency")!==U(h[2],"currency"))&&T("allowlist terms mismatch")}x!==c&&T("recipient mismatch"),k!==s&&T("quantity mismatch"),S!==l&&T("price mismatch"),t.proof!=null&&JSON.stringify(B.map(N=>N.toLowerCase()))!==JSON.stringify(He(t.proof).map(N=>N.toLowerCase()))&&T("proof mismatch");let F=q(d.value??0,"transaction value"),b=l*s;(F<b||F-b>p||F>u)&&T("transaction value or fee cap exceeded");let E=d.gasLimit==null?null:q(d.gasLimit,"gasLimit"),A=d.maxFeePerGas==null?null:q(d.maxFeePerGas,"maxFeePerGas");return t.maxGasLimit!=null&&(E==null||E>q(t.maxGasLimit,"maxGasLimit"))&&T("gas limit cap exceeded"),t.maxFeePerGasWei!=null&&(A==null||A>q(t.maxFeePerGasWei,"maxFeePerGasWei"))&&T("gas fee cap exceeded"),X({status:"ok",action:"mint",platform:e,chainId:r,contract:o,mintTarget:i,recipient:c,quantity:s.toString(),priceWei:l.toString(),valueWei:F.toString(),platformFeeWei:(F-b).toString(),maxValueWei:u.toString(),maxPlatformFeeWei:p.toString(),...y?{stage:y}:{},...g==null?{}:{walletAllowance:g.toString()},proof:B,transaction:{chainId:r,to:i,data:d.data,value:F.toString(),...E==null?{}:{gasLimit:E.toString()},...A==null?{}:{maxFeePerGas:A.toString()}},requiresWalletSignature:!0,backendSigner:!1,execution:"prepare-only",signed:!1},{provider:`${e}-mint`,kind:"evm-nft-mint"})}var er="RESEARCH_ONLY";var tr="canonical serialized-message decoding and program-specific instruction validation are not implemented",Ee=Object.freeze({metaplexCore:"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d",tokenMetadata:"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",candyMachine:"CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR",candyGuard:"Guard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g",magicEdenLaunchpad:"CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR"}),pi=Object.freeze({system:"11111111111111111111111111111111",computeBudget:"ComputeBudget111111111111111111111111111111",token:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",token2022:"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",associatedToken:"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",sysvarInstructions:"Sysvar1nstructions1111111111111111111111111"});function nr(){throw new Error(`solana-mint: ${er}; disabled until ${tr}`)}function mt(){nr()}import{Address as rr,CompactSize as or,NETWORK as ir,OutScript as At,Script as ar,TEST_NETWORK as ht,Transaction as sr,utils as cr}from"@scure/btc-signer";import{createHash as fe}from"node:crypto";var wt="universal-ordinals-mint",yt="bitcoin-ordinals-mint-plan",ur=1800*1e3,lr=new Set(["bitcoin","mainnet","testnet","signet","regtest"]),gt=new Set,pr=Object.freeze({prepareUnsignedCommitPsbt:!0,prepareUnsignedRevealPsbt:!0,parentChildInscriptions:!0,validatePlan:!0,sign:!1,broadcast:!1,custody:!1});function G(e,t){let n=String(e??"").trim();if(!n)throw new Error(`ordinals mint: ${t} required`);return n}function Q(e,t,{positive:n=!1}={}){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`ordinals mint: ${t} must be an integer`);let o=BigInt(r);if(n?o<=0n:o<0n)throw new Error(`ordinals mint: ${t} must be ${n?"positive":"non-negative"}`);return o}function De(e,t){let n=Number(e);if(!Number.isFinite(n)||n<0)throw new Error(`ordinals mint: ${t} must be a non-negative number`);return n}function It(e,t){let n=G(e,t).toLowerCase();if(!/^(?:[0-9a-f]{2})+$/.test(n))throw new Error(`ordinals mint: ${t} must be non-empty canonical hex`);return n}function dr(e){return e==="bitcoin"||e==="mainnet"?ir:e==="regtest"?{...ht,bech32:"bcrt"}:ht}function bt(e,t){try{let n=At.decode(e);if(n.type==="unknown")throw new Error("unknown script type");return n}catch(n){throw new Error(`${t} must be a recognized standard Bitcoin script (${n?.message||"decode failed"})`)}}function fr(e){return e!=null&&(typeof e.length!="number"||e.length>0)}function mr(e){let t=fe("sha256").update(e.unsignedTx).digest();return fe("sha256").update(t).digest().reverse().toString("hex")}function Et(e,...t){let n=fe("sha256").update(e,"ascii").digest();return fe("sha256").update(n).update(n).update(Buffer.concat(t)).digest()}function hr(e,t,n,r){let o=Buffer.from(t||[]);if(o.length<1)throw new Error(`${r} has an empty tapLeafScript`);let i=o.subarray(0,-1),a=o.at(-1);if(n.type!=="tr")throw new Error(`${r} tapLeafScript requires a taproot prevout`);if(!e?.internalKey||!Array.isArray(e.merklePath))throw new Error(`${r} has malformed tapLeafScript control data`);let c=Et("TapLeaf",Buffer.from([a]),Buffer.from(or.encode(BigInt(i.length))),i);for(let u of e.merklePath){let p=Buffer.from(u);c=Et("TapBranch",...Buffer.compare(c,p)<0?[c,p]:[p,c])}let[s,l]=cr.taprootTweakPubkey(e.internalKey,c);if(!Buffer.from(s).equals(Buffer.from(n.pubkey))||(Number(e.version)&1)!==l||(Number(e.version)&254)!==a)throw new Error(`${r} tapLeafScript is not committed by its taproot prevout`);return Buffer.from(i)}function St(e,t){let n=G(e,t);try{let r=Buffer.from(n,"base64");if(!r.length||r.toString("base64")!==n||r.subarray(0,5).toString("hex")!=="70736274ff")throw new Error("bad PSBT encoding or magic");let o=sr.fromPSBT(r);if(o.global?.unknown?.length||o.global?.proprietary?.length)throw new Error(`${t} contains opaque unknown/proprietary global fields`);let i=Array.from({length:o.inputsLength},(c,s)=>{let l=o.getInput(s);for(let d of["partialSig","tapKeySig","tapScriptSig","finalScriptSig","finalScriptWitness"])if(fr(l[d]))throw new Error(`${t} contains signed/finalized input ${s}`);if(l.unknown?.length||l.proprietary?.length)throw new Error(`${t} input ${s} contains opaque unknown/proprietary fields`);if(![0,1].includes(l.sighashType))throw new Error(`${t} input ${s} requires explicit SIGHASH_DEFAULT or SIGHASH_ALL`);if(!l.witnessUtxo?.script||l.witnessUtxo.amount==null)throw new Error(`${t} input ${s} requires witnessUtxo value and script`);let u=bt(l.witnessUtxo.script,`${t} input ${s} witnessUtxo script`);if(l.sighashType===0&&u.type!=="tr")throw new Error(`${t} input ${s} uses SIGHASH_DEFAULT for a non-taproot prevout`);let p=(l.tapLeafScript||[]).map(([d,w],h)=>hr(d,w,u,`${t} input ${s} tapLeafScript ${h}`));return{txid:Buffer.from(l.txid).toString("hex"),vout:Number(l.index),sequence:Number(l.sequence),valueSats:BigInt(l.witnessUtxo.amount).toString(),scriptHex:Buffer.from(l.witnessUtxo.script).toString("hex"),sighashType:l.sighashType,tapLeafScripts:p}}),a=Array.from({length:o.outputsLength},(c,s)=>{let l=o.getOutput(s);if(l.unknown?.length||l.proprietary?.length)throw new Error(`${t} output ${s} contains opaque unknown/proprietary fields`);return bt(l.script,`${t} output ${s} script`),{valueSats:BigInt(l.amount).toString(),scriptHex:Buffer.from(l.script).toString("hex")}});return{encoded:n,txid:mr(o),inputs:i,outputs:a,feeSats:o.fee.toString(),vsizeLowerBound:o.unsignedTx.length}}catch(r){throw new Error(`ordinals mint: invalid ${t}; decoded PSBT required (${r?.message||"decode failed"})`)}}function wr(e){let t=Buffer.from(e);if(t.length!==36)throw new Error("ordinals mint: inscription envelope parent linkage must be 36 bytes");return`${Buffer.from(t.subarray(0,32)).reverse().toString("hex")}i${t.readUInt32LE(32)}`}function yr(e){if(Number.isInteger(e)&&e>=1&&e<=16)return e;if(e instanceof Uint8Array&&e.length===1&&e[0]>=1&&e[0]<=16)return e[0]}var gr=new Set([1,3]);function br(e,t){let n=t+3,r=new Map;for(;n<e.length&&e[n]!==0;){let i=yr(e[n++]),a=e[n++];if(i==null||!(a instanceof Uint8Array))throw new Error("ordinals mint: malformed inscription envelope fields");if(!gr.has(i))throw new Error(`ordinals mint: unsupported inscription envelope tag ${i}`);let c=r.get(i)||[];c.push(Buffer.from(a)),r.set(i,c)}if(e[n++]!==0)throw new Error("ordinals mint: malformed inscription envelope body separator");let o=[];for(;n<e.length&&e[n]!=="ENDIF";){if(!(e[n]instanceof Uint8Array))throw new Error("ordinals mint: malformed inscription envelope body");o.push(Buffer.from(e[n++]))}if(e[n]!=="ENDIF")throw new Error("ordinals mint: unterminated inscription envelope");return{fields:r,content:Buffer.concat(o)}}function Er(e,{contentHash:t,contentType:n,parentId:r}){let o=[];for(let u of e.inputs[0].tapLeafScripts){let p;try{p=ar.decode(u)}catch(d){throw new Error(`ordinals mint: invalid reveal tapLeafScript (${d?.message||"script decode failed"})`)}for(let d=0;d+2<p.length;d+=1)p[d]===0&&p[d+1]==="IF"&&p[d+2]instanceof Uint8Array&&Buffer.from(p[d+2]).equals(Buffer.from("ord","ascii"))&&o.push(br(p,d))}if(o.length===0)throw new Error("ordinals mint: missing tapLeafScript inscription envelope");if(o.length!==1)throw new Error("ordinals mint: ambiguous tapLeafScript inscription envelope");let i=o[0],a=i.fields.get(1)||[];if(a.length!==1)throw new Error("ordinals mint: inscription envelope requires exactly one content type");let c;try{c=new TextDecoder("utf-8",{fatal:!0}).decode(a[0]).toLowerCase()}catch{throw new Error("ordinals mint: inscription envelope content type is not valid UTF-8")}if(c!==n)throw new Error("ordinals mint: inscription envelope MIME content type does not match contentType");if(fe("sha256").update(i.content).digest("hex")!==t)throw new Error("ordinals mint: inscription envelope content SHA-256 does not match contentHash");let l=i.fields.get(3)||[];if(r!=null){if(l.length!==1||wr(l[0])!==r)throw new Error("ordinals mint: inscription envelope parent linkage does not match parentId")}else if(l.length!==0)throw new Error("ordinals mint: unexpected inscription envelope parent linkage")}function xt(e){return{txid:e.txid,vout:e.vout,sequence:e.sequence,valueSats:e.valueSats,scriptHex:e.scriptHex,sighashType:e.sighashType,outpoint:`${e.txid}:${e.vout}`}}function Sr(e){let t=/^(wif|privateKey|secretKey|seed|mnemonic|signature|signatures|signedPsbt|signedTransaction|rawTransaction|txHex)$/i,n=r=>{if(!(!r||typeof r!="object"))for(let[o,i]of Object.entries(r)){if(t.test(o))throw new Error(`ordinals mint: ${o} refused; private/signed material is outside this prepare-only adapter`);n(i)}};if(n(e),e.sign===!0||e.execute===!0||e.broadcast===!0||e.submit===!0)throw new Error("ordinals mint: sign/broadcast/execute refused; adapter is prepare-only")}function Pt(e,t="parentId"){let n=G(e,t).toLowerCase();if(!/^[0-9a-f]{64}i\d+$/.test(n))throw new Error(`ordinals mint: ${t} must be a canonical inscription id`);return n}function Ot(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`ordinals mint: commit input ${t} must be an object`);let n=G(e.txid,`commitInputs[${t}].txid`).toLowerCase();if(!/^[0-9a-f]{64}$/.test(n))throw new Error(`ordinals mint: commitInputs[${t}].txid must be 64 hex`);let r=Number(e.vout);if(!Number.isSafeInteger(r)||r<0||r>4294967295)throw new Error(`ordinals mint: commitInputs[${t}].vout invalid`);let o=Q(e.valueSats??e.value,`commitInputs[${t}].valueSats`,{positive:!0}).toString();return{txid:n,vout:r,valueSats:o,outpoint:`${n}:${r}`}}function xr(e,{recipient:t,parentId:n,postageSats:r}){if(!Array.isArray(e)||e.length===0)throw new Error("ordinals mint: revealOutputs required");let o=e.map((a,c)=>{if(!a||typeof a!="object")throw new Error(`ordinals mint: reveal output ${c} invalid`);return{role:G(a.role,`revealOutputs[${c}].role`),address:G(a.address,`revealOutputs[${c}].address`),valueSats:Q(a.valueSats??a.value,`revealOutputs[${c}].valueSats`).toString(),scriptHex:It(a.scriptHex,`revealOutputs[${c}].scriptHex`),...a.parentId==null?{}:{parentId:Pt(a.parentId,`revealOutputs[${c}].parentId`)}}}),i=o.filter(a=>a.role==="inscription");if(i.length!==1)throw new Error("ordinals mint: exactly one inscription reveal output required");if(i[0].address!==t)throw new Error("ordinals mint: reveal destination mutation refused");if(i[0].valueSats!==r)throw new Error("ordinals mint: reveal postage does not match bound postageSats");if(i[0].parentId!==n)throw new Error("ordinals mint: missing or mutated parent linkage on inscription output");return o}function Tr(e){if(!Array.isArray(e)||e.length===0)throw new Error("ordinals mint: exact commitOutputs required");let t=e.map((n,r)=>({role:G(n?.role,`commitOutputs[${r}].role`),valueSats:Q(n?.valueSats??n?.value,`commitOutputs[${r}].valueSats`,{positive:!0}).toString(),scriptHex:It(n?.scriptHex,`commitOutputs[${r}].scriptHex`)}));if(t.filter(n=>n.role==="reveal").length!==1)throw new Error("ordinals mint: exactly one commit reveal output required");return t}function Tt(e,t,n){if(e.length!==t.length||e.some((r,o)=>r.valueSats!==t[o].valueSats||r.scriptHex!==t[o].scriptHex))throw new Error(`ordinals mint: actual ${n} outputs do not match reviewed outputs`)}function vt(e,t,n){try{return Buffer.from(At.encode(rr(dr(t)).decode(e))).toString("hex")}catch(r){throw new Error(`ordinals mint: ${n} must be a valid address for ${t} (${r?.message||"decode failed"})`)}}function vr(e,t){let n=e.commitPsbtInputs??e.psbtInputs;if(n==null)return;if(!Array.isArray(n))throw new Error("ordinals mint: commitPsbtInputs must be an array");let r=n.map((i,a)=>Ot({...i,valueSats:i.valueSats??i.value??t[a]?.valueSats},a).outpoint),o=t.map(i=>i.outpoint);if(r.length!==o.length||r.some((i,a)=>i!==o[a]))throw new Error("ordinals mint: unknown PSBT input; commit PSBT inputs must exactly match commitInputs")}function Ar(e={},t={}){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("ordinals mint: request object required");Sr(e);for(let f of["content","contentBytes","body","file","path","url","contentUrl"])if(e[f]!=null)throw new Error("ordinals mint: mutable content refused; provide immutable contentHash and contentType only");for(let f of["inscriptionNumber","stableInscriptionNumber","expectedInscriptionNumber","number"])if(e[f]!=null)throw new Error("ordinals mint: stable inscription number claims are not valid before confirmation");let n=G(e.network,"network").toLowerCase();if(!lr.has(n))throw new Error("ordinals mint: unsupported Bitcoin network");let r=G(e.contentHash??e.contentSha256??e.sha256,"contentHash").toLowerCase();if(!/^[0-9a-f]{64}$/.test(r))throw new Error("ordinals mint: contentHash must be a 32-byte SHA-256 hex digest");let o=G(e.contentType??e.mimeType,"contentType").toLowerCase();if(!/^[a-z0-9][a-z0-9!#$&^_.+-]*\/[a-z0-9][a-z0-9!#$&^_.+-]*$/.test(o))throw new Error("ordinals mint: invalid contentType");let i=Pt(e.parentId??e.parentInscriptionId),a=G(e.recipient??e.destination,"recipient"),c=Q(e.postageSats??e.postage,"postageSats",{positive:!0}).toString();if(!Array.isArray(e.commitInputs)||e.commitInputs.length===0)throw new Error("ordinals mint: exact commitInputs required");let s=e.commitInputs.map(Ot);if(new Set(s.map(f=>f.outpoint)).size!==s.length)throw new Error("ordinals mint: duplicate commit input/reuse refused");vr(e,s);let l=St(e.commitPsbt??e.unsignedCommitPsbt,"unsigned commit PSBT"),u=St(e.revealPsbt??e.unsignedRevealPsbt,"unsigned reveal PSBT"),p=Tr(e.commitOutputs),d=xr(e.revealOutputs,{recipient:a,parentId:i,postageSats:c});if(l.inputs.length!==s.length||l.inputs.some((f,I)=>f.txid!==s[I].txid||f.vout!==s[I].vout||f.valueSats!==s[I].valueSats))throw new Error("ordinals mint: actual commit PSBT inputs must exactly match commitInputs");Tt(l.outputs,p,"commit PSBT"),Tt(u.outputs,d,"reveal PSBT");let w=vt(a,n,"recipient");if(d.find(f=>f.role==="inscription").scriptHex!==w)throw new Error("ordinals mint: reveal inscription script does not pay the bound recipient address");for(let[f,I]of d.entries())if(I.scriptHex!==vt(I.address,n,`revealOutputs[${f}].address`))throw new Error(`ordinals mint: reveal output ${f} script does not pay its bound address`);let h=p.findIndex(f=>f.role==="reveal");if(u.inputs.length!==1)throw new Error("ordinals mint: reveal PSBT must have exactly one reveal input");let v=u.inputs.filter(f=>f.txid===l.txid&&f.vout===h);if(v.length!==1||v[0].valueSats!==p[h].valueSats||v[0].scriptHex!==p[h].scriptHex)throw new Error("ordinals mint: reveal PSBT is not exactly linked to the reviewed commit reveal output");Er(u,{contentHash:r,contentType:o,parentId:i});let y=De(e.commitFeeRateSatVb,"commitFeeRateSatVb"),x=De(e.revealFeeRateSatVb,"revealFeeRateSatVb"),k=De(e.maxFeeRateSatVb,"maxFeeRateSatVb");if(k<=0||y>k||x>k)throw new Error("ordinals mint: fee rate exceeds bound fee-rate cap");let S=Q(e.commitFeeSats,"commitFeeSats"),g=Q(e.revealFeeSats,"revealFeeSats"),B=Q(e.maxTotalFeeSats,"maxTotalFeeSats",{positive:!0});if(S+g>B)throw new Error("ordinals mint: total fee exceeds maxTotalFeeSats cap");if(l.feeSats!==S.toString()||u.feeSats!==g.toString())throw new Error("ordinals mint: decoded PSBT fee does not match reviewed fee");if(Number(S)/l.vsizeLowerBound>y||Number(g)/u.vsizeLowerBound>x)throw new Error("ordinals mint: decoded PSBT fee rate exceeds reviewed rate");if(typeof e.rbf!="boolean")throw new Error("ordinals mint: explicit rbf policy required");if(l.inputs.some(f=>f.sequence<4294967294)!==e.rbf)throw new Error("ordinals mint: actual commit PSBT sequence does not match the reviewed RBF policy");if(u.inputs[0].sequence<4294967294!==e.rbf)throw new Error("ordinals mint: actual reveal PSBT sequence does not match the reviewed RBF policy");if(!e.cpfp||typeof e.cpfp!="object"||typeof e.cpfp.enabled!="boolean")throw new Error("ordinals mint: explicit cpfp policy required");let E=e.cpfp.enabled?{enabled:!0,outputIndex:Number(e.cpfp.outputIndex),valueSats:Q(e.cpfp.valueSats,"cpfp.valueSats",{positive:!0}).toString()}:{enabled:!1};if(E.enabled){if(!Number.isSafeInteger(E.outputIndex)||E.outputIndex<0||d[E.outputIndex]?.role!=="cpfp")throw new Error("ordinals mint: CPFP outputIndex must identify a reveal cpfp output");if(d[E.outputIndex].valueSats!==E.valueSats)throw new Error("ordinals mint: CPFP value does not match reveal output")}else if(d.some(f=>f.role==="cpfp"))throw new Error("ordinals mint: reveal cpfp output conflicts with disabled CPFP policy");let A=Number(t.nowMs??Date.now()),N=Number(e.expiresAt??e.expiresAtMs);if(!Number.isFinite(N)||N<=A||N-A>ur)throw new Error("ordinals mint: expiry must be future and within 30 minutes");return{network:n,contentHash:r,contentType:o,parentId:i,recipient:a,postageSats:c,commitInputs:l.inputs.map(xt),commitPsbt:l.encoded,commitOutputs:p,revealInputs:u.inputs.map(xt),revealPsbt:u.encoded,revealOutputs:d,commitRate:y,revealRate:x,maxRate:k,commitFee:S.toString(),revealFee:g.toString(),maxTotalFee:B.toString(),rbf:e.rbf,cpfp:E,expiresAt:N}}function Ir(e={},t={}){let n=Ar(e,t),r=n.commitInputs.find(c=>gt.has(c.outpoint));if(r)throw new Error(`ordinals mint: commit UTXO ${r.outpoint} already reserved; reuse refused`);let o=Object.freeze({...t.feeConfig||e.feeConfiguration||{}}),i={provider:wt,kind:yt,execution:"prepare-only",signed:!1,maxExecutions:1,capabilities:{...pr},feeConfiguration:o,plan:{version:1,network:n.network,content:{sha256:n.contentHash,type:n.contentType,mutable:!1},parentId:n.parentId,recipient:n.recipient,postageSats:n.postageSats,commit:{unsignedPsbt:n.commitPsbt,inputs:n.commitInputs,outputs:n.commitOutputs,feeRateSatVb:n.commitRate,feeSats:n.commitFee,rbf:n.rbf},reveal:{unsignedPsbt:n.revealPsbt,inputs:n.revealInputs,outputs:n.revealOutputs,feeRateSatVb:n.revealRate,feeSats:n.revealFee,cpfp:n.cpfp},caps:{maxFeeRateSatVb:n.maxRate,maxTotalFeeSats:n.maxTotalFee},expiresAt:n.expiresAt,maxExecutions:1},note:"Unsigned commit/reveal PSBT plan only. Sign and broadcast in a user-controlled Bitcoin wallet; inscription numbers are not stable before confirmation."},a=X(i,{provider:wt,kind:yt,env:t.env,nowMs:Number(t.nowMs??Date.now()),expiresAtMs:n.expiresAt});for(let c of n.commitInputs)gt.add(c.outpoint);return a}var _t=Ir;Xe();import{readFileSync as Eo,existsSync as So}from"node:fs";import{getAddress as xo,Interface as Pe,TypedDataEncoder as $i,parseUnits as ki}from"ethers";var qt="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function Ut({provider:e,defaultUrl:t,hosts:n=[],url:r,strict:o=!1}){let a=(String(r??"").trim()||String(t)).replace(/\/$/,"");if(a===String(t).replace(/\/$/,""))return{baseUrl:a,trusted:!0,host:Dt(t)};let c;try{c=new URL(a)}catch{throw new Error(`${e}: baseUrl must be an absolute http(s) URL`)}if(c.protocol!=="http:"&&c.protocol!=="https:")throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);let s=c.host;if(!s)throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);if(new Set([Dt(t),...n]).has(s)){let u=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(s);return c.protocol==="http:"&&!u?{baseUrl:a,trusted:!1,host:s,reason:"plaintext http downgrade"}:{baseUrl:a,trusted:!0,host:s}}if(String(process.env[qt]||"")==="1")return{baseUrl:a,trusted:!1,host:s};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${s} (set ${qt}=1 to permit it)`);return{baseUrl:a,trusted:!1,host:s}}function Dt(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function Wt(e,t,n){let r={...e};if(!n)return r;for(let[o,i]of Object.entries(t||{}))i&&(r[o]=i);return r}var to=/^(0|[1-9][0-9]*)$/,Ze=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function se(e,t,{required:n=!0,allowZero:r=!1}={}){if(e==null||e===""){if(n)throw new Error(`${t} required`);return null}let o;if(typeof e=="bigint")o=e;else if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`${t} must be a safe integer`);o=BigInt(e)}else if(typeof e=="string"){let i=e.trim();if(i.startsWith("0x")||i.startsWith("0X"))o=BigInt(i);else{if(!to.test(i))throw new Error(`${t} must be an integer wei string`);o=BigInt(i)}}else throw new Error(`${t} must be bigint, number, or integer string`);if(o<0n||!r&&o===0n)throw new Error(`${t} must be ${r?"non-negative":"positive"}`);return o}function no(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function ro(e={}){return e.maxFeePerGas!=null?se(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?se(e.gasPrice,"gasPrice"):null}function oo(e={}){try{let t=no(e.chainId??e.tx?.chainId),n=e.tx||e,r=e.policy||e,o=r.grant?.maxGasWei??e.grant?.maxGasWei,i=se(r.maxTotalGasWei??r.maxGasWei??o,"maxTotalGasWei"),a=se(n.gasLimit??n.gas,"gasLimit"),c=ro(n);if(c==null)throw new Error("maxFeePerGas or gasPrice required");let s=se(r.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),l=se(r.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),u=n.maxPriorityFeePerGas==null?null:se(n.maxPriorityFeePerGas,"maxPriorityFeePerGas"),p=a*c;return p>i?{ok:!1,status:"BLOCK",reason:`total gas ${p} exceeds cap ${i}`,chainId:t,totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:s!=null&&c>s?{ok:!1,status:"BLOCK",reason:`unit fee ${c} exceeds cap ${s}`,chainId:t,unitFeeWei:c.toString(),maxFeePerGasWei:s.toString(),totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:u!=null&&l!=null&&u>l?{ok:!1,status:"BLOCK",reason:`priority fee ${u} exceeds cap ${l}`,chainId:t,priorityFeeWei:u.toString(),maxPriorityFeePerGasWei:l.toString(),totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:{ok:!0,status:"PASS",reason:"gas envelope within NFT mint gas-war caps",chainId:t,totalGasWei:p.toString(),maxTotalGasWei:i.toString(),unitFeeWei:c.toString(),maxFeePerGasWei:s?.toString()??null,priorityFeeWei:u?.toString()??null,maxPriorityFeePerGasWei:l?.toString()??null}}catch(t){return{ok:!1,status:"BLOCK",reason:String(t?.message||t)}}}function Gt(e={}){let t=oo(e);if(!t.ok)throw new Ze(t);return t}var To="https://api.opensea.io/api/v2",vo="fulfillAdvancedOrder(((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 totalOriginalConsiderationItems) parameters,uint120 numerator,uint120 denominator,bytes signature,bytes extraData) advancedOrder,(uint256 orderIndex,uint8 side,uint256 index,uint256 identifier,bytes32[] criteriaProof)[] criteriaResolvers,bytes32 fulfillerConduitKey,address recipient)",Ao=new Pe([`function ${vo}`]),Ie=new Pe(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable","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"]),Io=Object.freeze(["blast","base","ethereum","zora","arbitrum","sei","avalanche","polygon","optimism","ape_chain","flow","b3","soneium","ronin","bera_chain","solana","shape","unichain","gunzilla","abstract","animechain","hyperevm","somnia","monad","hyperliquid","megaeth","ink","robinhood","stablechain"]),ji=new Set(Io);function Po(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!So(e))return"";try{for(let t of Eo(e,"utf8").split(`
|
|
5
|
-
`)){let n=t.match(/^\s*OPENSEA_API_KEY\s*=\s*(.+)\s*$/);if(n)return n[1].replace(/^["']|["']$/g,"").trim()}}catch{}return""}function it(e={}){return e.apiKey?e.apiKey:e.allowAmbientCredentials===!1||e.allowDiskCredentials===!1?e.env?.OPENSEA_API_KEY||e.env?.OPEN_SEA_API_KEY||"":e.env?.OPENSEA_API_KEY||process.env.OPENSEA_API_KEY||process.env.OPEN_SEA_API_KEY||Po()}function an(e={}){return Ut({provider:"opensea",defaultUrl:To,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function sn(e={}){return an(e).baseUrl}function cn(e={}){return Wt({accept:"application/json"},{"x-api-key":it(e)},an(e).trusted)}function J(e,t="address"){try{return xo(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}async function Oo(e,t={}){if(!e)throw new Error("collection slug required");if(!it(t))throw new Error("OPENSEA_API_KEY required");return he(`${sn(t)}/collections/${encodeURIComponent(e)}`,{headers:cn(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}var _o=Object.freeze({robinhood:4663,ethereum:1,base:8453,arbitrum:42161,optimism:10,polygon:137,avalanche:43114,zora:7777777,blast:81457,sei:1329,ape_chain:33139,b3:8333,soneium:1868,ronin:2020,bera_chain:80094,shape:360,unichain:130,gunzilla:43419,abstract:2741,animechain:69e3,hyperevm:999,somnia:5031,monad:143,megaeth:4326,ink:57073,stablechain:988});function No(e){let t=String(e||"").trim().toLowerCase(),n=_o[t];if(!n)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:n}}function rn(e,t,{positive:n=!1}={}){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`opensea: ${t} must be an unsigned integer`);let o=BigInt(r);if(n&&o<=0n)throw new Error(`opensea: ${t} must be positive`);return o}function Ro(e,t="transaction value"){let n;try{let r=String(e??"0").trim();if(!/^(?:0x[0-9a-fA-F]+|\d+)$/.test(r))throw new Error("invalid");n=BigInt(r)}catch{throw new Error(`opensea: ${t} must be a non-negative integer quantity`)}if(n<0n)throw new Error(`opensea: ${t} must be non-negative`);return{amount:n,hex:`0x${n.toString(16)}`}}function Co(e,t=10){let n=Number(e??1);if(!Number.isSafeInteger(n)||n<1||n>t)throw new Error(`opensea: quantity must be an integer from 1 through ${t}`);return n}function $o(e,t,n="listing expiry"){let r=e==null?"":String(e).trim(),o;if(/^\d+$/.test(r)){let i=Number(r);o=r.length<=10?i*1e3:i}else o=Date.parse(r);if(!r||!Number.isFinite(o))throw new Error(`opensea: ${n} missing or invalid`);if(o<=t)throw new Error(`opensea: ${n} is expired or stale`);return new Date(o).toISOString()}var Hi=Object.freeze({OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]});function ko(e){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after buyer, chain, contract, token, quantity, price cap, total cap, and expiry review")}function un(e){if(!e||typeof e!="object")return!1;let t=String(e.action??e.type??e.method??"");return/approv|setapprovalforall|permit/i.test(t)?!0:Object.values(e).some(n=>n&&typeof n=="object"&&un(n))}function ln(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function pn(e){return!e||typeof e!="object"?!1:ln(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&pn(t))}function dn(e,t=[],n=new Set){if(!e||typeof e!="object"||n.has(e))return t;n.add(e),e.transaction&&typeof e.transaction=="object"?t.push(e.transaction):e.tx&&typeof e.tx=="object"&&t.push(e.tx);for(let[r,o]of Object.entries(e))(r==="transaction"||r==="tx")&&o&&typeof o=="object"||o&&typeof o=="object"&&dn(o,t,n);return t}function on(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function Fo(e,{buyer:t,chainId:n,targets:r}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(ln(e))throw new Error("opensea: signed transaction material refused");if((e.from?J(on(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=J(on(e.to??e.target),"transaction target");if(!r.has(i))throw new Error("opensea: OpenSea returned a transaction for the wrong target");let a=e.data??e.calldata,c=e.input_data&&typeof e.input_data=="object"?e.input_data:e.input&&typeof e.input=="object"?e.input:null;if(a==null&&c){if(!String(e.function||"").replace(/^function\s+/,"").startsWith("fulfillAdvancedOrder("))throw new Error("opensea: only exact Seaport fulfillAdvancedOrder preparation is accepted");a=Ao.encodeFunctionData("fulfillAdvancedOrder",[c.advancedOrder,c.criteriaResolvers,c.fulfillerConduitKey,c.recipient])}let s=String(a??"").trim().toLowerCase();if(!/^0x(?:[0-9a-f]{2})+$/.test(s))throw new Error("opensea: OpenSea returned invalid transaction calldata");let l=e.calldata_suffix==null?"":String(e.calldata_suffix).trim().toLowerCase();if(l){if(!/^0x[0-9a-f]{8}$/.test(l))throw new Error("opensea: invalid OpenSea calldata suffix");s.endsWith(l.slice(2))||(s+=l.slice(2))}let u=e.chainId??e.chain_id??e.chainIdentifier?.chainId;if(u!=null&&Number(u)!==n)throw new Error("opensea: OpenSea returned a transaction for the wrong chain");let p=Ro(e.value_hex??e.valueHex??e.value??0);return{from:t,to:i,data:s,value:p.hex,chainId:n,valueWei:p.amount}}function fn(e){return{from:e.from,to:e.to,data:e.data,value:e.value,chainId:e.chainId,...e.gasLimit==null?{}:{gasLimit:e.gasLimit},...e.maxFeePerGas==null?{}:{maxFeePerGas:e.maxFeePerGas},...e.maxPriorityFeePerGas==null?{}:{maxPriorityFeePerGas:e.maxPriorityFeePerGas},...e.worstCaseFeeWei==null?{}:{worstCaseFeeWei:e.worstCaseFeeWei}}}async function Lo(e,t,n){let r=n.provider,o=!!n.rpcUrl;if(!r&&!o)return{simulated:!1,gasEstimates:[]};let i=await Ht(e,4,async s=>{let{chainId:l,...u}=fn(s);if(r){if(typeof r.call!="function"||typeof r.estimateGas!="function")throw new Error("opensea: supplied provider must implement call and estimateGas");let[,h]=await Promise.all([r.call(u),r.estimateGas(u)]);return BigInt(h).toString()}let{rpcCall:p}=await Promise.resolve().then(()=>(ot(),rt)),d={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},[,w]=await Promise.all([p(t,"eth_call",[u,"pending"],d),p(t,"eth_estimateGas",[u],d)]);return BigInt(w).toString()}),a=null,c=null;if(r&&typeof r.getFeeData=="function"){let s=await r.getFeeData();c=s?.maxPriorityFeePerGas==null?0n:BigInt(s.maxPriorityFeePerGas),a=s?.maxFeePerGas==null?s?.gasPrice==null?null:BigInt(s.gasPrice):BigInt(s.maxFeePerGas)}else if(o){let{rpcCall:s}=await Promise.resolve().then(()=>(ot(),rt)),l={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},u=BigInt(await s(t,"eth_gasPrice",[],l));try{c=BigInt(await s(t,"eth_maxPriorityFeePerGas",[],l))}catch{c=0n}let p=await s(t,"eth_getBlockByNumber",["pending",!1],l),w=(p?.baseFeePerGas==null?0n:BigInt(p.baseFeePerGas))*2n+c;a=u>w?u:w}return a!=null&&c!=null&&e.forEach((s,l)=>{let p=(BigInt(i[l])*120n+99n)/100n;s.gasLimit=p.toString(),s.maxPriorityFeePerGas=c.toString(),s.maxFeePerGas=a.toString(),s.worstCaseFeeWei=(p*a).toString()}),{simulated:!0,gasEstimates:i}}function Mo(e,t){if(un(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(pn(e))throw new Error("opensea: signed transaction material refused");let n=dn(e);if(!n.length&&e&&typeof e=="object"&&(e.to||e.target)&&n.push(e),!n.length)throw new Error("opensea: OpenSea returned no transaction action");return n.map(r=>Fo(r,t))}function Bo(e,t,n={}){return X({...e,provider:"opensea-nft",kind:t,marketplace:"opensea",prepareReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,note:"Unsigned OpenSea EVM NFT transaction preparation only. The private signer must revalidate every bound field before the user signs or broadcasts."},n)}function jo(e,t,n){let o=(Array.isArray(e?.contracts)?e.contracts:[]).find(a=>String(a?.chain||t).toLowerCase()===t&&a?.address);if(!o)throw new Error("opensea: collection response contains no contract for requested chain");let i=J(o.address,"collection NFT contract");if(i!==n)throw new Error("opensea: OpenSea returned the wrong collection contract");return i}async function mn(e={},t={}){if(!it(t))throw new Error("OPENSEA_API_KEY required");ko(e);let{chain:n,chainId:r}=No(e.chain),o=J(e.buyer||e.minter||e.address,"buyer"),i=J(e.contract,"NFT contract"),a=Co(e.quantity),c=rn(e.priceWei,"priceWei"),s=rn(e.maxTotalWei,"maxTotalWei"),l=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),u=$o(e.expiry,l,"mint expiry");if(e.tokenId!=null)throw new Error("opensea: SeaDrop mint tokenId is unknown until the mined receipt and must not be caller supplied");let p=String(e.slug||"").trim();if(!p)throw new Error("opensea: collection slug required");let d=await Oo(p,t),w=jo(d,n,i),h=c*BigInt(a);if(h>s)throw new Error("opensea: mint total exceeds total cap");let v=await he(`${sn(t)}/drops/${encodeURIComponent(p)}/mint`,{method:"POST",headers:cn(t),body:{minter:o,quantity:a},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),y=t.allowedMintTargets?.[n]??t.allowedMintTargets?.[r]??e.mintTarget,x=Array.isArray(y)?y:y?[y]:[];if(!x.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let k=new Set(x.map(C=>J(C,"SeaDrop mint target"))),S=Mo(v,{buyer:o,chainId:r,targets:k});if(S.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let g,B,F=null,b;try{g=Ie.decodeFunctionData("mintPublic",S[0].data),B="public",b=Ie.encodeFunctionData("mintPublic",[g[0],g[1],g[2],g[3]])}catch{try{g=Ie.decodeFunctionData("mintAllowList",S[0].data),B="allowlist";let C=g[4],L=[...g[5]].map(String);if(L.length<1||L.length>64||L.some(_=>!/^0x[0-9a-fA-F]{64}$/.test(_)))throw new Error("opensea: allowlist mint requires a bounded canonical Merkle proof");let z=BigInt(C.startTime),R=BigInt(C.endTime),O=BigInt(Math.floor(l/1e3));if(z>O||R<=O)throw new Error("opensea: allowlist mint stage is not open");if(BigInt(C.mintPrice)!==c)throw new Error("opensea: allowlist stage price does not match exact approved price");if(BigInt(C.maxTotalMintableByWallet)<BigInt(a))throw new Error("opensea: allowlist wallet cap is below requested quantity");b=Ie.encodeFunctionData("mintAllowList",[g[0],g[1],g[2],g[3],C,L]),F={mintPrice:BigInt(C.mintPrice).toString(),maxTotalMintableByWallet:BigInt(C.maxTotalMintableByWallet).toString(),startTime:z.toString(),endTime:R.toString(),dropStageIndex:BigInt(C.dropStageIndex).toString(),maxTokenSupplyForStage:BigInt(C.maxTokenSupplyForStage).toString(),feeBps:Number(C.feeBps),restrictFeeRecipients:!!C.restrictFeeRecipients,proof:L}}catch(C){throw/opensea:/.test(String(C?.message||""))?C:new Error("opensea: mint transaction must call reviewed SeaDrop mintPublic or mintAllowList")}}let E=J(g[0],"mint NFT contract"),A=J(g[1],"mint fee recipient"),N=J(g[2],"mint recipient");if(E!==w)throw new Error("opensea: mint calldata collection mismatch");if(N!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(g[3])!==BigInt(a))throw new Error("opensea: mint calldata quantity mismatch");if(b.toLowerCase()!==S[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let f=S.reduce((C,L)=>C+L.valueWei,0n);if(f!==h)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(f>s)throw new Error("opensea: mint total exceeds total cap");let I=await Lo(S,r,{...t,provider:e.provider||t.provider});if(I.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let ne=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},D=Gt({chainId:r,tx:S[0],policy:ne});return Bo({action:"mint",mintType:B,...F?{stage:F}:{},chain:n,chainId:r,slug:p,buyer:o,contract:w,quantity:a,priceWei:c.toString(),totalWei:f.toString(),maxTotalWei:s.toString(),mintTarget:S[0].to,feeRecipient:A,expiry:u,transactions:S.map(fn),gasWar:D,...I},"nft-mint",{nowMs:l,expiresAtMs:Math.min(l+Ce,Date.parse(u),F?Number(BigInt(F.endTime)*1000n):Number.MAX_SAFE_INTEGER)})}var qi=new Pe(["function setApprovalForAll(address operator,bool approved)"]),Di=new Pe(["function cancel((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 counter)[] orders) returns (bool cancelled)"]);var qo=Object.freeze([oe.DISCOVERY,oe.ELIGIBILITY,oe.PREPARATION,oe.SIMULATION]),hn=[["evm.manifold","evm",["manifold"],["mint","claim"],"evm","manifold"],["evm.zora","evm",["zora"],["mint"],"evm","zora"],["evm.thirdweb","evm",["thirdweb"],["mint","claim"],"evm","thirdweb"],["evm.opensea-seadrop","evm",["opensea"],["mint","seadrop"],"opensea",null],["solana.metaplex-core","solana",["metaplex"],["mint"],"solana",Ee.metaplexCore],["solana.candy-machine","solana",["metaplex"],["mint","candy-machine"],"solana",Ee.candyMachine],["solana.magic-eden-launchpad","solana",["magic-eden"],["mint","launchpad"],"solana",Ee.magicEdenLaunchpad],["bitcoin.ordinals","bitcoin",["ordinals"],["mint","inscription"],"bitcoin",null]],wn=Object.freeze(hn.map(([e,t,n,r])=>Object.freeze({id:e,family:t,chainFamilies:Object.freeze([t]),marketplaces:Object.freeze(n),mechanisms:Object.freeze(r),enabled:t!=="solana",capabilities:t==="solana"?Object.freeze([oe.DISCOVERY]):qo,tier:t==="solana"?"RESEARCH_ONLY":"PREPARE_READY"}))),Zi=Be(wn.map(({family:e,tier:t,enabled:n,...r})=>r)),yn=new Map(hn.map(e=>[e[0],e])),Do=new Set(["intent","adapterId","input"]),Uo=/^(?:sign|execute|broadcast|submit|wif|privateKey|secretKey|seed|mnemonic|vault|signature|signatures|signed.*|rawTransaction)$/i,Oe=class extends Error{constructor(t,n,r={}){super(`universal mint router: ${n}`,r),this.name="UniversalMintRouterError",this.code=t}};function P(e,t,n){throw new Oe(e,t,n?{cause:n}:{})}function m(e,t,n){String(e??"")!==String(t)&&P("intent-mismatch",`${n} does not match canonical intent`)}function M(e,t,n){let r=e[t];return r.unit!==n&&P("unsupported-unit",`${t}.unit must be ${n}`),BigInt(r.amount)}function gn(e,t="input"){if(!(!e||typeof e!="object"))for(let[n,r]of Object.entries(e))Uo.test(n)&&P("custody-refused",`${t}.${n} is outside the prepare-only boundary`),gn(r,`${t}.${n}`)}function Wo(e,t){return e==="solana"?t.eligibilityProofAccounts??[]:e==="bitcoin"?t.eligibilityProof??[t.contentHash,t.parentId]:t.proof??[]}function Go(e,t,n,r){(typeof t.stageId!="string"||typeof t.proofDigest!="string")&&P("invalid-request","decoded input requires exact stageId and proofDigest");let o=e.stages.find(s=>s.id===t.stageId);o||P("intent-mismatch","stageId does not match canonical intent"),m(t.proofDigest,o.eligibility.proofDigest,"proof digest");let i=`sha256:${Ho("sha256").update(JSON.stringify(Wo(n,t))).digest("hex")}`;m(i,o.eligibility.proofDigest,"decoded proof digest");let a=t.stage?.startTime!=null?Number(t.stage.startTime)*1e3:t.stageStartsAt!=null?Number(t.stageStartsAt)*1e3:Number(t.stageStartsAtMs),c=t.stage?.endTime!=null?Number(t.stage.endTime)*1e3:t.stageEndsAt!=null?Number(t.stageEndsAt)*1e3:Number(t.stageEndsAtMs);return(!Number.isSafeInteger(a)||!Number.isSafeInteger(c))&&P("invalid-request","decoded input requires exact stage bounds"),m(a,o.startsAt.value,"stage start"),m(c,o.endsAt.value,"stage end"),(r<a||r>=c)&&P("expired-intent","canonical mint stage is not active at authoritative now"),o}function zo(e,t){let n=yn.get(t);n||P("unsupported-adapter",`unsupported explicit adapter ${String(t)}`);let[,r,o,i]=n;return m(r,e.chain.family,"chain family"),(!o.includes(e.marketplace)||!i.includes(e.mechanism))&&P("unsupported-request",`${t} does not support the exact marketplace/mechanism`),n}function Vo(e,t){e.chain.family==="evm"?(m(t.chainId,e.chain.id,"network"),m(t.contract,e.collection,"collection/drop"),m(t.recipient??t.buyer??t.minter,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.maxValueWei??t.maxTotalWei,M(e,"mintValueCap","wei"),"mint-value cap"),m(t.maxTotalGasWei??t.maxGasWei??t.gasPolicy?.maxTotalGasWei,M(e,"networkFeeCap","wei"),"network-fee cap"),m(t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei,M(e,"priorityFeeCap","wei-per-gas"),"priority-fee cap")):e.chain.family==="solana"?(m(t.network,e.chain.id,"network"),m(t.collection??t.drop??t.identity,e.collection,"collection/drop"),m(t.recipientOwner??t.recipient,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.priceLamports,M(e,"mintValueCap","lamports"),"mint-value cap"),m(t.networkFeeCapLamports,M(e,"networkFeeCap","lamports"),"network-fee cap"),m(t.priorityFeeCapLamports,M(e,"priorityFeeCap","lamports"),"priority-fee cap")):(m(t.network,e.chain.id,"network"),m(t.parentId,e.collection,"collection/drop"),m(t.recipient,e.recipient,"recipient"),m(e.quantity,1,"Ordinals quantity"),m(t.postageSats,M(e,"mintValueCap","sats"),"mint-value cap"),m(t.maxTotalFeeSats,M(e,"networkFeeCap","sats"),"network-fee cap"),m(t.maxFeeRateSatVb,M(e,"priorityFeeCap","sat/vbyte"),"priority-fee cap"))}function Yo(e){(!e||e.oraclePrepared!==!0||e.prepareHash!==ge(e))&&P("artifact-mismatch","leaf returned an invalid or mutated preparation stamp"),(e.signingReady!==!1||e.broadcastReady!==!1||e.executionReady!==!1||e.signed===!0)&&P("custody-refused","leaf artifact is not strictly prepare-only")}function Ko(e,t,n){m(t.chainId,e.chain.id,"network"),m(t.contract,e.collection,"collection/drop"),m(t.recipient??t.buyer??t.minter,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity");let r=M(e,"mintValueCap","wei"),o=M(e,"networkFeeCap","wei"),i=M(e,"priorityFeeCap","wei-per-gas");m(t.maxValueWei??t.maxTotalWei,r,"mint-value cap"),m(t.maxTotalGasWei??t.maxGasWei??t.gasPolicy?.maxTotalGasWei,o,"network-fee cap"),m(t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei,i,"priority-fee cap");let a=n.transaction??n.transactions?.[0];a||P("artifact-mismatch","prepared EVM transaction is missing"),m(a.chainId,e.chain.id,"artifact network");let c=BigInt(a.gasLimit??0),s=BigInt(a.maxFeePerGas??0);(!c||!s||c*s>o)&&P("artifact-mismatch","artifact network fee exceeds or omits canonical cap evidence");let l=BigInt(a.maxPriorityFeePerGas??t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei??-1);return(l<0n||l>i)&&P("artifact-mismatch","artifact priority fee exceeds or omits canonical cap evidence"),m(n.contract,e.collection,"artifact collection/drop"),m(n.recipient??n.buyer,e.recipient,"artifact recipient"),m(n.quantity,e.quantity,"artifact quantity"),BigInt(n.valueWei??n.totalWei)>r&&P("artifact-mismatch","artifact mint value exceeds canonical cap"),{networkFee:(c*s).toString(),priorityFee:l.toString()}}function Jo(e,t,n){m(t.network,e.chain.id,"network"),m(t.collection??t.drop??t.identity,e.collection,"collection/drop"),m(t.recipientOwner??t.recipient,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.priceLamports,M(e,"mintValueCap","lamports"),"mint-value cap");let r=M(e,"networkFeeCap","lamports"),o=M(e,"priorityFeeCap","lamports");m(t.networkFeeCapLamports,r,"network-fee cap"),m(t.priorityFeeCapLamports,o,"priority-fee cap"),m(n.chain,`solana-${e.chain.id}`,"artifact network");let i=0n;for(let a of n.transactions)for(let c of a.instructions)if(String(c.decoded?.type).toLowerCase().includes("price")){let s=a.instructions.find(l=>String(l.decoded?.type).toLowerCase().includes("limit"))?.decoded?.units;i+=(BigInt(s)*BigInt(c.decoded.microLamports)+999999n)/1000000n}return(i>o||i>r)&&P("artifact-mismatch","artifact Solana fee exceeds canonical caps"),{networkFee:i.toString(),priorityFee:i.toString()}}function Xo(e,t,n){return m(t.network,e.chain.id,"network"),m(t.parentId,e.collection,"collection/drop"),m(t.recipient,e.recipient,"recipient"),m(e.quantity,1,"Ordinals quantity"),m(t.postageSats,M(e,"mintValueCap","sats"),"mint-value cap"),m(t.maxTotalFeeSats,M(e,"networkFeeCap","sats"),"network-fee cap"),m(t.maxFeeRateSatVb,M(e,"priorityFeeCap","sat/vbyte"),"priority-fee cap"),m(n.plan.network,e.chain.id,"artifact network"),m(n.plan.parentId,e.collection,"artifact collection/drop"),m(n.plan.recipient,e.recipient,"artifact recipient"),m(n.plan.postageSats,e.mintValueCap.amount,"artifact mint-value cap"),m(n.plan.caps.maxTotalFeeSats,e.networkFeeCap.amount,"artifact network-fee cap"),m(n.plan.caps.maxFeeRateSatVb,e.priorityFeeCap.amount,"artifact priority-fee cap"),{networkFee:(BigInt(n.plan.commit.feeSats)+BigInt(n.plan.reveal.feeSats)).toString(),priorityFee:String(n.plan.caps.maxFeeRateSatVb)}}function bn(){return Object.freeze({prepareOnly:!0,signing:!1,broadcast:!1,adapters:wn})}async function Zo(){return{provider:"universal-mint-router",status:"ok",prepareOnly:!0,capabilities:bn()}}async function En(e={},t={}){(!e||typeof e!="object"||Array.isArray(e))&&P("invalid-request","request must be a plain object");for(let u of Object.keys(e))Do.has(u)||P("invalid-request",`unknown request field ${u}`);(typeof e.adapterId!="string"||!e.adapterId)&&P("invalid-request","explicit adapterId is required; adapter inference is refused"),yn.has(e.adapterId)||P("unsupported-adapter",`unsupported explicit adapter ${e.adapterId}`);let n=e.input;(!n||typeof n!="object"||Array.isArray(n))&&P("invalid-request","family-specific decoded input is required"),gn(n);let r;try{r=Fe(e.intent)}catch(u){P("invalid-intent",u.message,u)}let o=Number(t.nowMs??Date.now());Number.isSafeInteger(o)||P("invalid-request","authoritative nowMs must be a safe integer"),o>=r.expiry.value&&P("expired-intent","canonical mint intent has expired");let i=zo(r,e.adapterId);i[1]==="solana"&&P("adapter-refused","universal Solana mint preparation is disabled until canonical serialized-message instructions are independently decoded and bound");let a=Go(r,n,r.chain.family,o);Vo(r,n);let c;try{i[4]==="evm"?c=await ft(i[5],n,t):i[4]==="opensea"?c=await mn(n,t):i[4]==="solana"?(m(n.programId,i[5],"selected Solana adapter program"),c=await mt(n,t)):c=await _t(n,t)}catch(u){if(u instanceof Oe)throw u;P("adapter-refused",u?.message||"adapter preparation failed",u)}Yo(c);let s=i[4]==="bitcoin"?Xo(r,n,c):i[4]==="solana"?Jo(r,n,c):Ko(r,n,c),l=Object.freeze({intentHash:lt(r),adapterId:e.adapterId,family:r.chain.family,network:r.chain.id,marketplace:r.marketplace,mechanism:r.mechanism,collection:r.collection,recipient:r.recipient,quantity:String(r.quantity),stageId:a.id,proofDigest:a.eligibility.proofDigest,mintValueCap:r.mintValueCap,networkFeeCap:r.networkFeeCap,priorityFeeCap:r.priorityFeeCap,observedNetworkFee:s.networkFee,observedPriorityFee:s.priorityFee});return X({provider:"universal-mint-router",kind:"universal-nft-mint",execution:"prepare-only",signed:!1,adapterId:e.adapterId,tier:"PREPARE_READY",intent:r,binding:l,leafArtifact:c},{provider:"universal-mint-router",kind:"universal-nft-mint",env:t.env,nowMs:o,expiresAtMs:Math.min(r.expiry.value,a.endsAt.value,Number(c.expiresAt))})}var Qi=En,ea=En,ta=bn,na=Zo;export{wn as UNIVERSAL_MINT_ADAPTERS,Zi as UNIVERSAL_MINT_ROUTER_REGISTRY,Oe as UniversalMintRouterError,ta as getUniversalMintCapabilities,na as getUniversalMintHealth,En as prepareUniversalMint,ea as prepareUniversalMintAdmin,Qi as prepareUniversalMintPublic,bn as universalMintCapabilities,Zo as universalMintHealth};
|
|
4
|
+
${JSON.stringify(n??[])}`}async function on(e,t,n){return ye(e,{method:"POST",body:t,fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3,signal:n.signal})}async function an(e,t,n={}){if(!Array.isArray(t)||t.length===0)throw new Error("rpcBatch requires a non-empty calls array");if(t.length>en)throw new Error(`rpcBatch: at most ${en} calls`);for(let i of t)nn(i?.method);let r=Pe(e,n);if(!r)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);let o=t.map((i,a)=>({jsonrpc:"2.0",id:a+1,method:i.method,params:i.params||[]}));try{let i=await on(r,o,n);if(Array.isArray(i)&&i.length===t.length){let a=new Map(i.map(c=>[Number(c?.id),c]));return t.map((c,s)=>rn(a.get(s+1)??i[s]))}}catch{}return Promise.all(t.map(i=>J(e,i.method,i.params||[],n)))}async function J(e,t,n=[],r={}){let o=String(t||""),i=nn(o),a=Pe(e,r);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&r.cacheChainId!==!1){let u=tn.get(a);if(u!=null)return u}let s=r.dedupe!==!1&&!r.signal?Eo(a,o,n):null;if(s&&we.has(s))return we.get(s);let l=(async()=>{let u=await on(a,{jsonrpc:"2.0",id:1,method:t,params:n},r),p=rn(u);return i==="eth_chainid"&&typeof p=="string"&&tn.set(a,p),p})();return s&&(we.set(s,l),l.finally(()=>{we.get(s)===l&&we.delete(s)}).catch(()=>{})),l}async function sn(e,t={}){let[n,r]=await an(e,[{method:"eth_blockNumber",params:[]},{method:"eth_chainId",params:[]}],t),o=parseInt(n,16),i=parseInt(r,16);return{ok:Number.isFinite(o)&&i===Number(e),chainId:Number(e),reportedChainId:i,blockNumber:o,name:tt(e)?.name||null}}async function So(e,t={}){let n=await J(e,"eth_blockNumber",[],t);return parseInt(n,16)}async function xo(e,t={}){let n=await J(e,"eth_chainId",[],t);return parseInt(n,16)}async function vo(e,t={}){let n=await J(e,"eth_gasPrice",[],t);if(n==null)return null;try{return BigInt(n)}catch{return null}}async function Ao(e,t,n={}){if(!t)throw new Error("rpcGetBalance requires address");let r=await J(e,"eth_getBalance",[t,"latest"],n);return{chainId:Number(e),address:t,balanceWei:BigInt(r).toString(),balanceHex:r}}async function To(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=ne(e.token||e.tokenAddress,"token"),o=ne(e.owner,"owner"),i=ne(e.spender,"spender"),a=Ie.encodeFunctionData("allowance",[o,i]),c=await J(n,"eth_call",[{to:r,data:a},e.blockTag||"latest"],t),s=Ie.decodeFunctionResult("allowance",c),l=BigInt(s[0]);return{chainId:n,token:r,owner:o,spender:i,allowance:l.toString(),allowanceHex:`0x${l.toString(16)}`,blockTag:e.blockTag||"latest"}}async function Io(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=ne(e.token||e.tokenAddress,"token"),o=ne(e.account||e.owner||e.address,"account"),i=Ie.encodeFunctionData("balanceOf",[o]),a=await J(n,"eth_call",[{to:r,data:i},e.blockTag||"latest"],t),c=Ie.decodeFunctionResult("balanceOf",a),s=BigInt(c[0]);return{chainId:n,token:r,account:o,balance:s.toString(),balanceHex:`0x${s.toString(16)}`,blockTag:e.blockTag||"latest"}}async function Po(e={},t={}){let n=Number(e.chainId??t.chainId??1),r=wo(e.txHash||e.hash||e.transactionHash),o=await J(n,"eth_getTransactionReceipt",[r],t);if(!o)return{ok:!1,chainId:n,txHash:r,status:"pending",receipt:null,reason:"receipt pending"};let i=nt(o.status),a=i===1,c=i===1?"success":i===0?"reverted":"unknown",s=a?null:c==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?ne(e.expectedTo,"expectedTo"):null,u=o.to?ne(o.to,"receipt.to"):null;return l&&u!==l&&(a=!1,s=`to mismatch: expected ${l}, got ${u||"null"}`),{ok:a,chainId:n,txHash:r,status:c,reason:s,statusCode:i,to:u,from:o.from?ne(o.from,"receipt.from"):null,blockNumber:nt(o.blockNumber),transactionIndex:nt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}async function Oo(e={}){let t=e.chainIds||Object.values(et).map(r=>r.chainId),n={};return await Promise.all(t.map(async r=>{if(!Zt(r)&&!rt[r]&&!Pe(r,e)){n[r]={ok:!1,error:"no rpc configured",chainId:r};return}try{n[r]=await sn(r,e)}catch(o){n[r]={ok:!1,chainId:r,error:String(o.message||o)}}})),n}var Ie,rt,go,en,we,tn,it=fe(()=>{Ze();Qt();Ie=new ho(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);rt={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};go=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;en=32,we=new Map,tn=new Map});import{createHash as Ko}from"node:crypto";import{createHash as Rn,createHmac as Cn,timingSafeEqual as li}from"node:crypto";var $n=2,$e=300*1e3,kn=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();function Ce(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Ce).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${Ce(e[n])}`).join(",")}}`}function pt(e){let t=String(e?.ORACLE_STAMP_HMAC_SECRET||"").trim();return t.length>=16?t:""}function dt(e=process.env){return pt(process.env)||pt(e)}function Fn(e){let{prepareHash:t,prepareMac:n,note:r,...o}=e||{};return o}function be(e){let t=Fn(e);return Rn("sha256").update(Ce(t)).digest("hex")}function Mn(e,t=dt()){return t?Cn("sha256",t).update(String(e)).digest("hex"):""}function Z(e,{provider:t,kind:n,env:r=process.env,nowMs:o=Date.now(),expiresAtMs:i}={}){if(!e||typeof e!="object")throw new Error("stampPrepared: payload object required");let a=Object.prototype.hasOwnProperty.call(e,"oraclePrepared");if(a&&typeof e.oraclePrepared!="boolean")throw new Error("stampPrepared: oraclePrepared must be boolean");let c={...e,provider:e.provider||t,kind:e.kind||n,requiresUserSignature:e.requiresUserSignature!==!1,signingReady:!1,broadcastReady:!1,executionReady:!1,oraclePrepared:a?e.oraclePrepared:!0};if(!c.provider)throw new Error("stampPrepared: provider required");if(!c.kind)throw new Error("stampPrepared: kind required");let s=Number(o),l=i==null?s+$e:Number(i),u=l-s;if(!Number.isSafeInteger(s)||!Number.isSafeInteger(l)||u<=0||u>kn)throw new Error("stampPrepared: bounded preparedAt/expiresAt required");let d={...c,preparedAt:s,expiresAt:l,prepareVersion:$n},y=be(d),h=dt(r),I=h?Mn(y,h):void 0,w={...d,prepareHash:y};return I&&(w.prepareMac=I),w}import{createHash as Ln}from"node:crypto";var Bn=1,jn=8,j=class extends TypeError{constructor(t,n="invalid-intent"){super(`universal mint intent: ${t}`),this.name="UniversalMintIntentError",this.code=n}},Hn=new Set(["version","chain","marketplace","mechanism","collection","recipient","quantity","stages","mintValueCap","networkFeeCap","priorityFeeCap","expiry","maxExecutions"]),qn=new Set(["family","id"]),Dn=new Set(["id","startsAt","endsAt","eligibility"]),Un=new Set(["kind","proofFormat","proofDigest"]),Gn=new Set(["amount","unit"]),Wn=new Set(["value","unit"]);function ue(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new j(`${t} must be a plain object`);return e}function le(e,t,n){for(let r of Object.keys(e))if(!t.has(r))throw new j(`${n} has unknown field ${r}`,"unknown-field")}function G(e,t){if(typeof e!="string"||e.length===0||e.trim()!==e||/[\u0000-\u001f\u007f]/.test(e))throw new j(`${t} must be a non-empty exact string without surrounding whitespace`);return e}function zn(e,t){if(!Number.isSafeInteger(e)||e<=0)throw new j(`${t} must be a positive safe integer`);return e}function ke(e,t){if(e=ue(e,t),le(e,Gn,t),!Object.hasOwn(e,"amount")||!Object.hasOwn(e,"unit"))throw new j(`${t} requires amount and unit`,"ambiguous-unit");let n=G(e.amount,`${t}.amount`);if(!/^(0|[1-9]\d*)$/.test(n))throw new j(`${t}.amount must be a canonical non-negative integer string`);return{amount:n,unit:G(e.unit,`${t}.unit`)}}function Fe(e,t){if(e=ue(e,t),le(e,Wn,t),e.unit!=="unix-ms"||!Number.isSafeInteger(e.value)||e.value<0)throw new j(`${t} must have a non-negative safe integer value and unit unix-ms`,"ambiguous-unit");return{value:e.value,unit:"unix-ms"}}function Vn(e,t){e=ue(e,t),le(e,Un,t);let n=G(e.kind,`${t}.kind`),r=G(e.proofFormat,`${t}.proofFormat`),o=G(e.proofDigest,`${t}.proofDigest`);if(!/^[a-z0-9][a-z0-9+._-]*:[0-9a-f]+$/.test(o))throw new j(`${t}.proofDigest must be algorithm:lowercase-hex metadata`);return{kind:n,proofFormat:r,proofDigest:o}}function Yn(e,t){let n=`stages[${t}]`;e=ue(e,n),le(e,Dn,n);let r=Fe(e.startsAt,`${n}.startsAt`),o=Fe(e.endsAt,`${n}.endsAt`);if(r.value>=o.value)throw new j(`${n} must end after it starts`,"invalid-stage-range");return{id:G(e.id,`${n}.id`),startsAt:r,endsAt:o,eligibility:Vn(e.eligibility,`${n}.eligibility`)}}function Me(e){if(e=ue(e,"input"),le(e,Hn,"input"),e.version!==Bn)throw new j("version must be 1");let t=ue(e.chain,"chain");le(t,qn,"chain");let n=e.stages;if(!Array.isArray(n)||n.length<1||n.length>jn)throw new j("stages must contain 1 through 8 entries","stage-count");let r=n.map(Yn).sort((a,c)=>a.startsAt.value-c.startsAt.value||a.id.localeCompare(c.id)),o=new Set;for(let a=0;a<r.length;a+=1){if(o.has(r[a].id))throw new j("stage ids must be unique","duplicate-stage");if(o.add(r[a].id),a&&r[a].startsAt.value<r[a-1].endsAt.value)throw new j("stages must not overlap","overlapping-stages")}if(e.maxExecutions!==1)throw new j("maxExecutions must equal 1","execution-limit");let i={version:1,chain:{family:G(t.family,"chain.family"),id:G(t.id,"chain.id")},marketplace:G(e.marketplace,"marketplace"),mechanism:G(e.mechanism,"mechanism"),collection:G(e.collection,"collection"),recipient:G(e.recipient,"recipient"),quantity:zn(e.quantity,"quantity"),stages:r,mintValueCap:ke(e.mintValueCap,"mintValueCap"),networkFeeCap:ke(e.networkFeeCap,"networkFeeCap"),priorityFeeCap:ke(e.priorityFeeCap,"priorityFeeCap"),expiry:Fe(e.expiry,"expiry"),maxExecutions:1};if(r.some(a=>a.endsAt.value>i.expiry.value))throw new j("every stage must end no later than expiry","stage-after-expiry");return i}function Kn(e){return JSON.stringify(Me(e))}function ft(e){return`sha256:${Ln("sha256").update(Kn(e),"utf8").digest("hex")}`}var Le=Object.freeze({RESEARCH_ONLY:"RESEARCH_ONLY",PREPARE_READY:"PREPARE_READY",AUTOMINT_READY:"AUTOMINT_READY"}),oe=Object.freeze({DISCOVERY:"discovery",ELIGIBILITY:"eligibility",PREPARATION:"preparation",SIMULATION:"simulation",BOUNDED_SIGNING:"boundedSigning",BROADCAST:"broadcast",RECEIPT_VERIFICATION:"receiptVerification",OWNERSHIP_VERIFICATION:"ownershipVerification"}),Be=Object.freeze(Object.values(oe)),mt=new Set(Be),ht=Object.freeze(Be.slice(0,4)),Jn=Be,Xn=new Set(["id","chainFamilies","marketplaces","mechanisms","capabilities"]),H=class extends TypeError{constructor(t,n="invalid-registry-entry"){super(`universal mint registry: ${t}`),this.name="UniversalMintRegistryError",this.code=n}};function Ee(e,t){if(!Array.isArray(e)||e.length===0)throw new H(`${t} must be a non-empty array`);let n=e.map(r=>{if(typeof r!="string"||!r||r.trim()!==r)throw new H(`${t} entries must be exact strings`);return r});if(new Set(n).size!==n.length)throw new H(`${t} contains duplicates`);return[...n].sort()}function Zn(e){if(!Array.isArray(e))throw new H("capabilities must be an array");let t=new Set(e);for(let n of t)if(!mt.has(n))throw new H(`unknown capability ${n}`,"unknown-capability");return Jn.every(n=>t.has(n))?Le.AUTOMINT_READY:ht.every(n=>t.has(n))?Le.PREPARE_READY:Le.RESEARCH_ONLY}function je(e=[]){if(!Array.isArray(e))throw new H("entries must be an array");let t=new Map;for(let n of e){if(!n||typeof n!="object"||Array.isArray(n))throw new H("entry must be an object");for(let i of Object.keys(n))if(!Xn.has(i))throw new H(`entry has unknown field ${i}`,"unknown-field");if(typeof n.id!="string"||!n.id||n.id.trim()!==n.id)throw new H("entry id must be an exact string");if(t.has(n.id))throw new H(`duplicate entry id ${n.id}`,"duplicate-entry");let r=Ee(n.capabilities,"capabilities"),o=Object.freeze({id:n.id,chainFamilies:Object.freeze(Ee(n.chainFamilies,"chainFamilies")),marketplaces:Object.freeze(Ee(n.marketplaces,"marketplaces")),mechanisms:Object.freeze(Ee(n.mechanisms,"mechanisms")),capabilities:Object.freeze(r),tier:Zn(r)});t.set(o.id,o)}return Object.freeze({entries:Object.freeze([...t.values()]),get(n){return t.get(n)||null},find({chainFamily:n,marketplace:r,mechanism:o}={}){return[...t.values()].filter(i=>i.chainFamilies.includes(n)&&i.marketplaces.includes(r)&&i.mechanisms.includes(o))},require(n,r=ht){let o=t.get(n);if(!o)throw new H(`missing adapter ${n}`,"missing-adapter");for(let i of r){if(!mt.has(i))throw new H(`unknown capability ${i}`,"unknown-capability");if(!o.capabilities.includes(i))throw new H(`${n} is missing capability ${i}`,"missing-capability")}return o}})}var mi=je([]);import{getAddress as Qn,Interface as He,keccak256 as er}from"ethers";var Q=Object.freeze({manifold:new He(["function mint(address creatorContract,uint256 instanceId,uint32 mintIndex,bytes32[] merkleProof,address mintFor) payable"]),zora:new He(["function mint(address mintTo,uint256 quantity,string comment,address mintReferral) payable"]),thirdweb:new He(["function claim(address receiver,uint256 quantity,address currency,uint256 pricePerToken,(bytes32[] proof,uint256 quantityLimitPerWallet,uint256 pricePerToken,address currency) allowlistProof,bytes data) payable"])}),De=Object.freeze({manifold:Object.freeze({signature:"mint(address,uint256,uint32,bytes32[],address)",layout:"manifold-claim-v1"}),zora:Object.freeze({signature:"mint(address,uint256,string,address)",layout:"zora-1155-mint-v1"}),thirdweb:Object.freeze({signature:"claim(address,uint256,address,uint256,(bytes32[],uint256,uint256,address),bytes)",layout:"thirdweb-drop-claim-v1"})}),gi=Object.freeze(Object.fromEntries(Object.entries(De).map(([e,t])=>[Q[e].getFunction(t.signature).selector.toLowerCase(),Object.freeze({platform:e,...t})])));function v(e){throw new Error(`evm-mint-launchpads: ${e}`)}function U(e,t){try{return Qn(String(e||""))}catch{return v(`invalid ${t}`)}}function q(e,t,{positive:n=!1}={}){try{let r=BigInt(e);return(r<0n||n&&r===0n)&&v(`${t} must be ${n?"positive":"unsigned"}`),r}catch(r){if(/evm-mint-launchpads:/.test(String(r?.message)))throw r;return v(`${t} must be an unsigned integer`)}}function qe(e,t="proof"){return(!Array.isArray(e)||e.length>64||e.some(n=>!/^0x[0-9a-fA-F]{64}$/.test(String(n))))&&v(`invalid ${t}`),e.map(String)}function tr(e,t,n){let r=Number(t.chainId);(!Number.isSafeInteger(r)||r<=0)&&v("invalid chainId");let o=U(t.contract,"contract"),a=(Array.isArray(n.reviewedContracts)?n.reviewedContracts:[]).find(u=>u.platform===e&&Number(u.chainId)===r&&U(u.contract,"reviewed contract")===o);a||v("unsupported contract or wrong chain");let c=U(a.mintTarget||a.contract,"reviewed mint target"),s=Q[e].getFunction(De[e].signature).selector.toLowerCase();return(!(a.selectors||[s]).map(u=>String(u).toLowerCase()).includes(s)||!a.codeHash||!/^0x[0-9a-fA-F]{64}$/.test(a.codeHash))&&v("unverified bytecode/selector combination"),{chainId:r,contract:o,mintTarget:c,selector:s,review:a}}async function nr(e,t,n){if(typeof n.getCode=="function")return n.getCode(e,t);if(typeof n.rpcCall=="function")return n.rpcCall(e,"eth_getCode",[t,"latest"],n);v("runtime bytecode verification required")}function rr(e,t){let n=e.stage;if(!n)return null;let r=q(n.startTime,"stage startTime"),o=q(n.endTime,"stage endTime"),i=BigInt(Math.floor(t/1e3));return(r>i||o<=i||o<=r)&&v("mint stage is not open"),{...n,startTime:r.toString(),endTime:o.toString()}}function or(e,t){let n=De[e];String(t).slice(0,10).toLowerCase()!==Q[e].getFunction(n.signature).selector.toLowerCase()&&v("unknown selector");let r;try{r=Q[e].decodeFunctionData(n.signature,t)}catch{v("invalid calldata layout")}let o;return e==="manifold"&&(o=Q.manifold.encodeFunctionData(n.signature,[r[0],r[1],r[2],[...r[3]],r[4]])),e==="zora"&&(o=Q.zora.encodeFunctionData(n.signature,[r[0],r[1],r[2],r[3]])),e==="thirdweb"&&(o=Q.thirdweb.encodeFunctionData(n.signature,[r[0],r[1],r[2],r[3],r[4],r[5]])),o.toLowerCase()!==String(t).toLowerCase()&&v("calldata must be canonical with no suffix"),r}async function yt(e,t={},n={}){Q[e]||v("unsupported platform");let{chainId:r,contract:o,mintTarget:i,review:a}=tr(e,t,n),c=U(t.recipient||t.minter,"recipient"),s=q(t.quantity,"quantity",{positive:!0}),l=q(t.priceWei,"priceWei"),u=q(t.maxValueWei,"maxValueWei"),p=q(t.maxPlatformFeeWei??0,"maxPlatformFeeWei"),d=t.transaction||t.tx;(!d||Number(d.chainId)!==r)&&v("transaction chain mismatch"),U(d.to,"transaction target")!==i&&v("transaction target mismatch");let y=await nr(r,i,n);(!/^0x[0-9a-fA-F]+$/.test(String(y))||y==="0x"||er(y).toLowerCase()!==String(a.codeHash).toLowerCase())&&v("runtime bytecode is not reviewed");let h=or(e,d.data),I=Number.isFinite(Number(n.nowMs))?Number(n.nowMs):Date.now(),w=rr(t,I),x,k,S,g=null,B=[];if(e==="manifold")U(h[0],"calldata contract")!==o&&v("calldata contract mismatch"),(t.instanceId==null||q(h[1],"instanceId")!==q(t.instanceId,"instanceId"))&&v("instance/stage mismatch"),(t.mintIndex==null||q(h[2],"mintIndex")!==q(t.mintIndex,"mintIndex"))&&v("mint index/stage mismatch"),B=qe([...h[3]]),x=U(h[4],"calldata recipient"),k=1n,S=l;else if(e==="zora")x=U(h[0],"calldata recipient"),k=BigInt(h[1]),S=l,t.comment!=null&&h[2]!==String(t.comment)&&v("comment mismatch"),t.mintReferral!=null&&U(h[3],"mint referral")!==U(t.mintReferral,"expected mint referral")&&v("mint referral mismatch");else{x=U(h[0],"calldata recipient"),k=BigInt(h[1]),S=BigInt(h[3]);let N=h[4];B=qe([...N.proof]),g=BigInt(N.quantityLimitPerWallet),g<s&&v("wallet allowance below quantity"),(BigInt(N.pricePerToken)!==l||U(N.currency,"allowlist currency")!==U(h[2],"currency"))&&v("allowlist terms mismatch")}x!==c&&v("recipient mismatch"),k!==s&&v("quantity mismatch"),S!==l&&v("price mismatch"),t.proof!=null&&JSON.stringify(B.map(N=>N.toLowerCase()))!==JSON.stringify(qe(t.proof).map(N=>N.toLowerCase()))&&v("proof mismatch");let F=q(d.value??0,"transaction value"),b=l*s;(F<b||F-b>p||F>u)&&v("transaction value or fee cap exceeded");let E=d.gasLimit==null?null:q(d.gasLimit,"gasLimit"),P=d.maxFeePerGas==null?null:q(d.maxFeePerGas,"maxFeePerGas");return t.maxGasLimit!=null&&(E==null||E>q(t.maxGasLimit,"maxGasLimit"))&&v("gas limit cap exceeded"),t.maxFeePerGasWei!=null&&(P==null||P>q(t.maxFeePerGasWei,"maxFeePerGasWei"))&&v("gas fee cap exceeded"),Z({status:"ok",action:"mint",platform:e,chainId:r,contract:o,mintTarget:i,recipient:c,quantity:s.toString(),priceWei:l.toString(),valueWei:F.toString(),platformFeeWei:(F-b).toString(),maxValueWei:u.toString(),maxPlatformFeeWei:p.toString(),...w?{stage:w}:{},...g==null?{}:{walletAllowance:g.toString()},proof:B,transaction:{chainId:r,to:i,data:d.data,value:F.toString(),...E==null?{}:{gasLimit:E.toString()},...P==null?{}:{maxFeePerGas:P.toString()}},requiresWalletSignature:!0,backendSigner:!1,execution:"prepare-only",signed:!1},{provider:`${e}-mint`,kind:"evm-nft-mint"})}var ir="RESEARCH_ONLY";var ar="canonical serialized-message decoding and program-specific instruction validation are not implemented",Se=Object.freeze({metaplexCore:"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d",tokenMetadata:"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s",candyMachine:"CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR",candyGuard:"Guard1JwRhJkVH6XZhzoYxeBVQe872VH6QggF4BWmS9g",magicEdenLaunchpad:"CndyV3LdqHUfDLmE5naZjVN8rBZz4tqhdefbAnjHG3JR"}),Ei=Object.freeze({system:"11111111111111111111111111111111",computeBudget:"ComputeBudget111111111111111111111111111111",token:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",token2022:"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",associatedToken:"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",sysvarInstructions:"Sysvar1nstructions1111111111111111111111111"});function sr(){throw new Error(`solana-mint: ${ir}; disabled until ${ar}`)}function wt(){sr()}import{Address as cr,CompactSize as ur,NETWORK as lr,OutScript as Ot,Script as pr,TEST_NETWORK as gt,Transaction as dr,utils as fr}from"@scure/btc-signer";import{createHash as me}from"node:crypto";var bt="universal-ordinals-mint",Et="bitcoin-ordinals-mint-plan",mr=1800*1e3,hr=new Set(["bitcoin","mainnet","testnet","signet","regtest"]),St=new Set,yr=Object.freeze({prepareUnsignedCommitPsbt:!0,prepareUnsignedRevealPsbt:!0,parentChildInscriptions:!0,validatePlan:!0,sign:!1,broadcast:!1,custody:!1});function W(e,t){let n=String(e??"").trim();if(!n)throw new Error(`ordinals mint: ${t} required`);return n}function ee(e,t,{positive:n=!1}={}){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`ordinals mint: ${t} must be an integer`);let o=BigInt(r);if(n?o<=0n:o<0n)throw new Error(`ordinals mint: ${t} must be ${n?"positive":"non-negative"}`);return o}function Ue(e,t){let n=Number(e);if(!Number.isFinite(n)||n<0)throw new Error(`ordinals mint: ${t} must be a non-negative number`);return n}function _t(e,t){let n=W(e,t).toLowerCase();if(!/^(?:[0-9a-f]{2})+$/.test(n))throw new Error(`ordinals mint: ${t} must be non-empty canonical hex`);return n}function wr(e){return e==="bitcoin"||e==="mainnet"?lr:e==="regtest"?{...gt,bech32:"bcrt"}:gt}function xt(e,t){try{let n=Ot.decode(e);if(n.type==="unknown")throw new Error("unknown script type");return n}catch(n){throw new Error(`${t} must be a recognized standard Bitcoin script (${n?.message||"decode failed"})`)}}function gr(e){return e!=null&&(typeof e.length!="number"||e.length>0)}function br(e){let t=me("sha256").update(e.unsignedTx).digest();return me("sha256").update(t).digest().reverse().toString("hex")}function vt(e,...t){let n=me("sha256").update(e,"ascii").digest();return me("sha256").update(n).update(n).update(Buffer.concat(t)).digest()}function Er(e,t,n,r){let o=Buffer.from(t||[]);if(o.length<1)throw new Error(`${r} has an empty tapLeafScript`);let i=o.subarray(0,-1),a=o.at(-1);if(n.type!=="tr")throw new Error(`${r} tapLeafScript requires a taproot prevout`);if(!e?.internalKey||!Array.isArray(e.merklePath))throw new Error(`${r} has malformed tapLeafScript control data`);let c=vt("TapLeaf",Buffer.from([a]),Buffer.from(ur.encode(BigInt(i.length))),i);for(let u of e.merklePath){let p=Buffer.from(u);c=vt("TapBranch",...Buffer.compare(c,p)<0?[c,p]:[p,c])}let[s,l]=fr.taprootTweakPubkey(e.internalKey,c);if(!Buffer.from(s).equals(Buffer.from(n.pubkey))||(Number(e.version)&1)!==l||(Number(e.version)&254)!==a)throw new Error(`${r} tapLeafScript is not committed by its taproot prevout`);return Buffer.from(i)}function At(e,t){let n=W(e,t);try{let r=Buffer.from(n,"base64");if(!r.length||r.toString("base64")!==n||r.subarray(0,5).toString("hex")!=="70736274ff")throw new Error("bad PSBT encoding or magic");let o=dr.fromPSBT(r);if(o.global?.unknown?.length||o.global?.proprietary?.length)throw new Error(`${t} contains opaque unknown/proprietary global fields`);let i=Array.from({length:o.inputsLength},(c,s)=>{let l=o.getInput(s);for(let d of["partialSig","tapKeySig","tapScriptSig","finalScriptSig","finalScriptWitness"])if(gr(l[d]))throw new Error(`${t} contains signed/finalized input ${s}`);if(l.unknown?.length||l.proprietary?.length)throw new Error(`${t} input ${s} contains opaque unknown/proprietary fields`);if(![0,1].includes(l.sighashType))throw new Error(`${t} input ${s} requires explicit SIGHASH_DEFAULT or SIGHASH_ALL`);if(!l.witnessUtxo?.script||l.witnessUtxo.amount==null)throw new Error(`${t} input ${s} requires witnessUtxo value and script`);let u=xt(l.witnessUtxo.script,`${t} input ${s} witnessUtxo script`);if(l.sighashType===0&&u.type!=="tr")throw new Error(`${t} input ${s} uses SIGHASH_DEFAULT for a non-taproot prevout`);let p=(l.tapLeafScript||[]).map(([d,y],h)=>Er(d,y,u,`${t} input ${s} tapLeafScript ${h}`));return{txid:Buffer.from(l.txid).toString("hex"),vout:Number(l.index),sequence:Number(l.sequence),valueSats:BigInt(l.witnessUtxo.amount).toString(),scriptHex:Buffer.from(l.witnessUtxo.script).toString("hex"),sighashType:l.sighashType,tapLeafScripts:p}}),a=Array.from({length:o.outputsLength},(c,s)=>{let l=o.getOutput(s);if(l.unknown?.length||l.proprietary?.length)throw new Error(`${t} output ${s} contains opaque unknown/proprietary fields`);return xt(l.script,`${t} output ${s} script`),{valueSats:BigInt(l.amount).toString(),scriptHex:Buffer.from(l.script).toString("hex")}});return{encoded:n,txid:br(o),inputs:i,outputs:a,feeSats:o.fee.toString(),vsizeLowerBound:o.unsignedTx.length}}catch(r){throw new Error(`ordinals mint: invalid ${t}; decoded PSBT required (${r?.message||"decode failed"})`)}}function Sr(e){let t=Buffer.from(e);if(t.length!==36)throw new Error("ordinals mint: inscription envelope parent linkage must be 36 bytes");return`${Buffer.from(t.subarray(0,32)).reverse().toString("hex")}i${t.readUInt32LE(32)}`}function xr(e){if(Number.isInteger(e)&&e>=1&&e<=16)return e;if(e instanceof Uint8Array&&e.length===1&&e[0]>=1&&e[0]<=16)return e[0]}var vr=new Set([1,3]);function Ar(e,t){let n=t+3,r=new Map;for(;n<e.length&&e[n]!==0;){let i=xr(e[n++]),a=e[n++];if(i==null||!(a instanceof Uint8Array))throw new Error("ordinals mint: malformed inscription envelope fields");if(!vr.has(i))throw new Error(`ordinals mint: unsupported inscription envelope tag ${i}`);let c=r.get(i)||[];c.push(Buffer.from(a)),r.set(i,c)}if(e[n++]!==0)throw new Error("ordinals mint: malformed inscription envelope body separator");let o=[];for(;n<e.length&&e[n]!=="ENDIF";){if(!(e[n]instanceof Uint8Array))throw new Error("ordinals mint: malformed inscription envelope body");o.push(Buffer.from(e[n++]))}if(e[n]!=="ENDIF")throw new Error("ordinals mint: unterminated inscription envelope");return{fields:r,content:Buffer.concat(o)}}function Tr(e,{contentHash:t,contentType:n,parentId:r}){let o=[];for(let u of e.inputs[0].tapLeafScripts){let p;try{p=pr.decode(u)}catch(d){throw new Error(`ordinals mint: invalid reveal tapLeafScript (${d?.message||"script decode failed"})`)}for(let d=0;d+2<p.length;d+=1)p[d]===0&&p[d+1]==="IF"&&p[d+2]instanceof Uint8Array&&Buffer.from(p[d+2]).equals(Buffer.from("ord","ascii"))&&o.push(Ar(p,d))}if(o.length===0)throw new Error("ordinals mint: missing tapLeafScript inscription envelope");if(o.length!==1)throw new Error("ordinals mint: ambiguous tapLeafScript inscription envelope");let i=o[0],a=i.fields.get(1)||[];if(a.length!==1)throw new Error("ordinals mint: inscription envelope requires exactly one content type");let c;try{c=new TextDecoder("utf-8",{fatal:!0}).decode(a[0]).toLowerCase()}catch{throw new Error("ordinals mint: inscription envelope content type is not valid UTF-8")}if(c!==n)throw new Error("ordinals mint: inscription envelope MIME content type does not match contentType");if(me("sha256").update(i.content).digest("hex")!==t)throw new Error("ordinals mint: inscription envelope content SHA-256 does not match contentHash");let l=i.fields.get(3)||[];if(r!=null){if(l.length!==1||Sr(l[0])!==r)throw new Error("ordinals mint: inscription envelope parent linkage does not match parentId")}else if(l.length!==0)throw new Error("ordinals mint: unexpected inscription envelope parent linkage")}function Tt(e){return{txid:e.txid,vout:e.vout,sequence:e.sequence,valueSats:e.valueSats,scriptHex:e.scriptHex,sighashType:e.sighashType,outpoint:`${e.txid}:${e.vout}`}}function Ir(e){let t=/^(wif|privateKey|secretKey|seed|mnemonic|signature|signatures|signedPsbt|signedTransaction|rawTransaction|txHex)$/i,n=r=>{if(!(!r||typeof r!="object"))for(let[o,i]of Object.entries(r)){if(t.test(o))throw new Error(`ordinals mint: ${o} refused; private/signed material is outside this prepare-only adapter`);n(i)}};if(n(e),e.sign===!0||e.execute===!0||e.broadcast===!0||e.submit===!0)throw new Error("ordinals mint: sign/broadcast/execute refused; adapter is prepare-only")}function Nt(e,t="parentId"){let n=W(e,t).toLowerCase();if(!/^[0-9a-f]{64}i\d+$/.test(n))throw new Error(`ordinals mint: ${t} must be a canonical inscription id`);return n}function Rt(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`ordinals mint: commit input ${t} must be an object`);let n=W(e.txid,`commitInputs[${t}].txid`).toLowerCase();if(!/^[0-9a-f]{64}$/.test(n))throw new Error(`ordinals mint: commitInputs[${t}].txid must be 64 hex`);let r=Number(e.vout);if(!Number.isSafeInteger(r)||r<0||r>4294967295)throw new Error(`ordinals mint: commitInputs[${t}].vout invalid`);let o=ee(e.valueSats??e.value,`commitInputs[${t}].valueSats`,{positive:!0}).toString();return{txid:n,vout:r,valueSats:o,outpoint:`${n}:${r}`}}function Pr(e,{recipient:t,parentId:n,postageSats:r}){if(!Array.isArray(e)||e.length===0)throw new Error("ordinals mint: revealOutputs required");let o=e.map((a,c)=>{if(!a||typeof a!="object")throw new Error(`ordinals mint: reveal output ${c} invalid`);return{role:W(a.role,`revealOutputs[${c}].role`),address:W(a.address,`revealOutputs[${c}].address`),valueSats:ee(a.valueSats??a.value,`revealOutputs[${c}].valueSats`).toString(),scriptHex:_t(a.scriptHex,`revealOutputs[${c}].scriptHex`),...a.parentId==null?{}:{parentId:Nt(a.parentId,`revealOutputs[${c}].parentId`)}}}),i=o.filter(a=>a.role==="inscription");if(i.length!==1)throw new Error("ordinals mint: exactly one inscription reveal output required");if(i[0].address!==t)throw new Error("ordinals mint: reveal destination mutation refused");if(i[0].valueSats!==r)throw new Error("ordinals mint: reveal postage does not match bound postageSats");if(i[0].parentId!==n)throw new Error("ordinals mint: missing or mutated parent linkage on inscription output");return o}function Or(e){if(!Array.isArray(e)||e.length===0)throw new Error("ordinals mint: exact commitOutputs required");let t=e.map((n,r)=>({role:W(n?.role,`commitOutputs[${r}].role`),valueSats:ee(n?.valueSats??n?.value,`commitOutputs[${r}].valueSats`,{positive:!0}).toString(),scriptHex:_t(n?.scriptHex,`commitOutputs[${r}].scriptHex`)}));if(t.filter(n=>n.role==="reveal").length!==1)throw new Error("ordinals mint: exactly one commit reveal output required");return t}function It(e,t,n){if(e.length!==t.length||e.some((r,o)=>r.valueSats!==t[o].valueSats||r.scriptHex!==t[o].scriptHex))throw new Error(`ordinals mint: actual ${n} outputs do not match reviewed outputs`)}function Pt(e,t,n){try{return Buffer.from(Ot.encode(cr(wr(t)).decode(e))).toString("hex")}catch(r){throw new Error(`ordinals mint: ${n} must be a valid address for ${t} (${r?.message||"decode failed"})`)}}function _r(e,t){let n=e.commitPsbtInputs??e.psbtInputs;if(n==null)return;if(!Array.isArray(n))throw new Error("ordinals mint: commitPsbtInputs must be an array");let r=n.map((i,a)=>Rt({...i,valueSats:i.valueSats??i.value??t[a]?.valueSats},a).outpoint),o=t.map(i=>i.outpoint);if(r.length!==o.length||r.some((i,a)=>i!==o[a]))throw new Error("ordinals mint: unknown PSBT input; commit PSBT inputs must exactly match commitInputs")}function Nr(e={},t={}){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("ordinals mint: request object required");Ir(e);for(let f of["content","contentBytes","body","file","path","url","contentUrl"])if(e[f]!=null)throw new Error("ordinals mint: mutable content refused; provide immutable contentHash and contentType only");for(let f of["inscriptionNumber","stableInscriptionNumber","expectedInscriptionNumber","number"])if(e[f]!=null)throw new Error("ordinals mint: stable inscription number claims are not valid before confirmation");let n=W(e.network,"network").toLowerCase();if(!hr.has(n))throw new Error("ordinals mint: unsupported Bitcoin network");let r=W(e.contentHash??e.contentSha256??e.sha256,"contentHash").toLowerCase();if(!/^[0-9a-f]{64}$/.test(r))throw new Error("ordinals mint: contentHash must be a 32-byte SHA-256 hex digest");let o=W(e.contentType??e.mimeType,"contentType").toLowerCase();if(!/^[a-z0-9][a-z0-9!#$&^_.+-]*\/[a-z0-9][a-z0-9!#$&^_.+-]*$/.test(o))throw new Error("ordinals mint: invalid contentType");let i=Nt(e.parentId??e.parentInscriptionId),a=W(e.recipient??e.destination,"recipient"),c=ee(e.postageSats??e.postage,"postageSats",{positive:!0}).toString();if(!Array.isArray(e.commitInputs)||e.commitInputs.length===0)throw new Error("ordinals mint: exact commitInputs required");let s=e.commitInputs.map(Rt);if(new Set(s.map(f=>f.outpoint)).size!==s.length)throw new Error("ordinals mint: duplicate commit input/reuse refused");_r(e,s);let l=At(e.commitPsbt??e.unsignedCommitPsbt,"unsigned commit PSBT"),u=At(e.revealPsbt??e.unsignedRevealPsbt,"unsigned reveal PSBT"),p=Or(e.commitOutputs),d=Pr(e.revealOutputs,{recipient:a,parentId:i,postageSats:c});if(l.inputs.length!==s.length||l.inputs.some((f,O)=>f.txid!==s[O].txid||f.vout!==s[O].vout||f.valueSats!==s[O].valueSats))throw new Error("ordinals mint: actual commit PSBT inputs must exactly match commitInputs");It(l.outputs,p,"commit PSBT"),It(u.outputs,d,"reveal PSBT");let y=Pt(a,n,"recipient");if(d.find(f=>f.role==="inscription").scriptHex!==y)throw new Error("ordinals mint: reveal inscription script does not pay the bound recipient address");for(let[f,O]of d.entries())if(O.scriptHex!==Pt(O.address,n,`revealOutputs[${f}].address`))throw new Error(`ordinals mint: reveal output ${f} script does not pay its bound address`);let h=p.findIndex(f=>f.role==="reveal");if(u.inputs.length!==1)throw new Error("ordinals mint: reveal PSBT must have exactly one reveal input");let I=u.inputs.filter(f=>f.txid===l.txid&&f.vout===h);if(I.length!==1||I[0].valueSats!==p[h].valueSats||I[0].scriptHex!==p[h].scriptHex)throw new Error("ordinals mint: reveal PSBT is not exactly linked to the reviewed commit reveal output");Tr(u,{contentHash:r,contentType:o,parentId:i});let w=Ue(e.commitFeeRateSatVb,"commitFeeRateSatVb"),x=Ue(e.revealFeeRateSatVb,"revealFeeRateSatVb"),k=Ue(e.maxFeeRateSatVb,"maxFeeRateSatVb");if(k<=0||w>k||x>k)throw new Error("ordinals mint: fee rate exceeds bound fee-rate cap");let S=ee(e.commitFeeSats,"commitFeeSats"),g=ee(e.revealFeeSats,"revealFeeSats"),B=ee(e.maxTotalFeeSats,"maxTotalFeeSats",{positive:!0});if(S+g>B)throw new Error("ordinals mint: total fee exceeds maxTotalFeeSats cap");if(l.feeSats!==S.toString()||u.feeSats!==g.toString())throw new Error("ordinals mint: decoded PSBT fee does not match reviewed fee");if(Number(S)/l.vsizeLowerBound>w||Number(g)/u.vsizeLowerBound>x)throw new Error("ordinals mint: decoded PSBT fee rate exceeds reviewed rate");if(typeof e.rbf!="boolean")throw new Error("ordinals mint: explicit rbf policy required");if(l.inputs.some(f=>f.sequence<4294967294)!==e.rbf)throw new Error("ordinals mint: actual commit PSBT sequence does not match the reviewed RBF policy");if(u.inputs[0].sequence<4294967294!==e.rbf)throw new Error("ordinals mint: actual reveal PSBT sequence does not match the reviewed RBF policy");if(!e.cpfp||typeof e.cpfp!="object"||typeof e.cpfp.enabled!="boolean")throw new Error("ordinals mint: explicit cpfp policy required");let E=e.cpfp.enabled?{enabled:!0,outputIndex:Number(e.cpfp.outputIndex),valueSats:ee(e.cpfp.valueSats,"cpfp.valueSats",{positive:!0}).toString()}:{enabled:!1};if(E.enabled){if(!Number.isSafeInteger(E.outputIndex)||E.outputIndex<0||d[E.outputIndex]?.role!=="cpfp")throw new Error("ordinals mint: CPFP outputIndex must identify a reveal cpfp output");if(d[E.outputIndex].valueSats!==E.valueSats)throw new Error("ordinals mint: CPFP value does not match reveal output")}else if(d.some(f=>f.role==="cpfp"))throw new Error("ordinals mint: reveal cpfp output conflicts with disabled CPFP policy");let P=Number(t.nowMs??Date.now()),N=Number(e.expiresAt??e.expiresAtMs);if(!Number.isFinite(N)||N<=P||N-P>mr)throw new Error("ordinals mint: expiry must be future and within 30 minutes");return{network:n,contentHash:r,contentType:o,parentId:i,recipient:a,postageSats:c,commitInputs:l.inputs.map(Tt),commitPsbt:l.encoded,commitOutputs:p,revealInputs:u.inputs.map(Tt),revealPsbt:u.encoded,revealOutputs:d,commitRate:w,revealRate:x,maxRate:k,commitFee:S.toString(),revealFee:g.toString(),maxTotalFee:B.toString(),rbf:e.rbf,cpfp:E,expiresAt:N}}function Rr(e={},t={}){let n=Nr(e,t),r=n.commitInputs.find(c=>St.has(c.outpoint));if(r)throw new Error(`ordinals mint: commit UTXO ${r.outpoint} already reserved; reuse refused`);let o=Object.freeze({...t.feeConfig||e.feeConfiguration||{}}),i={provider:bt,kind:Et,execution:"prepare-only",signed:!1,maxExecutions:1,capabilities:{...yr},feeConfiguration:o,plan:{version:1,network:n.network,content:{sha256:n.contentHash,type:n.contentType,mutable:!1},parentId:n.parentId,recipient:n.recipient,postageSats:n.postageSats,commit:{unsignedPsbt:n.commitPsbt,inputs:n.commitInputs,outputs:n.commitOutputs,feeRateSatVb:n.commitRate,feeSats:n.commitFee,rbf:n.rbf},reveal:{unsignedPsbt:n.revealPsbt,inputs:n.revealInputs,outputs:n.revealOutputs,feeRateSatVb:n.revealRate,feeSats:n.revealFee,cpfp:n.cpfp},caps:{maxFeeRateSatVb:n.maxRate,maxTotalFeeSats:n.maxTotalFee},expiresAt:n.expiresAt,maxExecutions:1},note:"Unsigned commit/reveal PSBT plan only. Sign and broadcast in a user-controlled Bitcoin wallet; inscription numbers are not stable before confirmation."},a=Z(i,{provider:bt,kind:Et,env:t.env,nowMs:Number(t.nowMs??Date.now()),expiresAtMs:n.expiresAt});for(let c of n.commitInputs)St.add(c.outpoint);return a}var Ct=Rr;Ze();import{readFileSync as _o,existsSync as No}from"node:fs";import{getAddress as Ro,Interface as _e,TypedDataEncoder as Wi,parseUnits as zi}from"ethers";var Wt="ORACLE_ALLOW_CUSTOM_PROVIDER_URL";function Vt({provider:e,defaultUrl:t,hosts:n=[],url:r,strict:o=!1}){let a=(String(r??"").trim()||String(t)).replace(/\/$/,"");if(a===String(t).replace(/\/$/,""))return{baseUrl:a,trusted:!0,host:zt(t)};let c;try{c=new URL(a)}catch{throw new Error(`${e}: baseUrl must be an absolute http(s) URL`)}if(c.protocol!=="http:"&&c.protocol!=="https:")throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);let s=c.host;if(!s)throw new Error(`${e}: baseUrl must be an absolute http(s) URL`);if(new Set([zt(t),...n]).has(s)){let u=/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(s);return c.protocol==="http:"&&!u?{baseUrl:a,trusted:!1,host:s,reason:"plaintext http downgrade"}:{baseUrl:a,trusted:!0,host:s}}if(String(process.env[Wt]||"")==="1")return{baseUrl:a,trusted:!1,host:s};if(o)throw new Error(`${e}: refusing to call non-allowlisted host ${s} (set ${Wt}=1 to permit it)`);return{baseUrl:a,trusted:!1,host:s}}function zt(e){let t=new URL(String(e));if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("unsupported protocol");return t.host}function Yt(e,t,n){let r={...e};if(!n)return r;for(let[o,i]of Object.entries(t||{}))i&&(r[o]=i);return r}var lo=/^(0|[1-9][0-9]*)$/,Qe=class extends Error{constructor(t){super(`nft gas-war limit: ${t.reason}`),this.name="NftGasWarLimitError",this.verdict=t}};function se(e,t,{required:n=!0,allowZero:r=!1}={}){if(e==null||e===""){if(n)throw new Error(`${t} required`);return null}let o;if(typeof e=="bigint")o=e;else if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new Error(`${t} must be a safe integer`);o=BigInt(e)}else if(typeof e=="string"){let i=e.trim();if(i.startsWith("0x")||i.startsWith("0X"))o=BigInt(i);else{if(!lo.test(i))throw new Error(`${t} must be an integer wei string`);o=BigInt(i)}}else throw new Error(`${t} must be bigint, number, or integer string`);if(o<0n||!r&&o===0n)throw new Error(`${t} must be ${r?"non-negative":"positive"}`);return o}function po(e){let t=Number(e);if(!Number.isSafeInteger(t)||t<=0)throw new Error("chainId must be a positive integer");return t}function fo(e={}){return e.maxFeePerGas!=null?se(e.maxFeePerGas,"maxFeePerGas"):e.gasPrice!=null?se(e.gasPrice,"gasPrice"):null}function mo(e={}){try{let t=po(e.chainId??e.tx?.chainId),n=e.tx||e,r=e.policy||e,o=r.grant?.maxGasWei??e.grant?.maxGasWei,i=se(r.maxTotalGasWei??r.maxGasWei??o,"maxTotalGasWei"),a=se(n.gasLimit??n.gas,"gasLimit"),c=fo(n);if(c==null)throw new Error("maxFeePerGas or gasPrice required");let s=se(r.maxFeePerGasWei,"maxFeePerGasWei",{required:!1}),l=se(r.maxPriorityFeePerGasWei,"maxPriorityFeePerGasWei",{required:!1}),u=n.maxPriorityFeePerGas==null?null:se(n.maxPriorityFeePerGas,"maxPriorityFeePerGas"),p=a*c;return p>i?{ok:!1,status:"BLOCK",reason:`total gas ${p} exceeds cap ${i}`,chainId:t,totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:s!=null&&c>s?{ok:!1,status:"BLOCK",reason:`unit fee ${c} exceeds cap ${s}`,chainId:t,unitFeeWei:c.toString(),maxFeePerGasWei:s.toString(),totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:u!=null&&l!=null&&u>l?{ok:!1,status:"BLOCK",reason:`priority fee ${u} exceeds cap ${l}`,chainId:t,priorityFeeWei:u.toString(),maxPriorityFeePerGasWei:l.toString(),totalGasWei:p.toString(),maxTotalGasWei:i.toString()}:{ok:!0,status:"PASS",reason:"gas envelope within NFT mint gas-war caps",chainId:t,totalGasWei:p.toString(),maxTotalGasWei:i.toString(),unitFeeWei:c.toString(),maxFeePerGasWei:s?.toString()??null,priorityFeeWei:u?.toString()??null,maxPriorityFeePerGasWei:l?.toString()??null}}catch(t){return{ok:!1,status:"BLOCK",reason:String(t?.message||t)}}}function Kt(e={}){let t=mo(e);if(!t.ok)throw new Qe(t);return t}var Co="https://api.opensea.io/api/v2",$o="fulfillAdvancedOrder(((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 totalOriginalConsiderationItems) parameters,uint120 numerator,uint120 denominator,bytes signature,bytes extraData) advancedOrder,(uint256 orderIndex,uint8 side,uint256 index,uint256 identifier,bytes32[] criteriaProof)[] criteriaResolvers,bytes32 fulfillerConduitKey,address recipient)",ko=new _e([`function ${$o}`]),Oe=new _e(["function mintPublic(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity) payable","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"]),Fo=Object.freeze(["blast","base","ethereum","zora","arbitrum","sei","avalanche","polygon","optimism","ape_chain","flow","b3","soneium","ronin","bera_chain","solana","shape","unichain","gunzilla","abstract","animechain","hyperevm","somnia","monad","hyperliquid","megaeth","ink","robinhood","stablechain"]),Xi=new Set(Fo);function Mo(){let e=process.env.OPENSEA_ENV_FILE||`${process.env.HOME||""}/.config/locals-only/opensea.env`;if(!No(e))return"";try{for(let t of _o(e,"utf8").split(`
|
|
5
|
+
`)){let n=t.match(/^\s*OPENSEA_API_KEY\s*=\s*(.+)\s*$/);if(n)return n[1].replace(/^["']|["']$/g,"").trim()}}catch{}return""}function at(e={}){return e.apiKey?e.apiKey:e.allowAmbientCredentials===!1||e.allowDiskCredentials===!1?e.env?.OPENSEA_API_KEY||e.env?.OPEN_SEA_API_KEY||"":e.env?.OPENSEA_API_KEY||process.env.OPENSEA_API_KEY||process.env.OPEN_SEA_API_KEY||Mo()}function ln(e={}){return Vt({provider:"opensea",defaultUrl:Co,hosts:["api.opensea.io","testnets-api.opensea.io"],url:e.baseUrl||process.env.OPENSEA_API_URL})}function pn(e={}){return ln(e).baseUrl}function dn(e={}){return Yt({accept:"application/json"},{"x-api-key":at(e)},ln(e).trusted)}function X(e,t="address"){try{return Ro(String(e||"").trim().toLowerCase())}catch{throw new Error(`opensea: invalid ${t}`)}}async function Lo(e,t={}){if(!e)throw new Error("collection slug required");if(!at(t))throw new Error("OPENSEA_API_KEY required");return ye(`${pn(t)}/collections/${encodeURIComponent(e)}`,{headers:dn(t),fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??15e3})}var Bo=Object.freeze({robinhood:4663,ethereum:1,base:8453,arbitrum:42161,optimism:10,polygon:137,avalanche:43114,zora:7777777,blast:81457,sei:1329,ape_chain:33139,b3:8333,soneium:1868,ronin:2020,bera_chain:80094,shape:360,unichain:130,gunzilla:43419,abstract:2741,animechain:69e3,hyperevm:999,somnia:5031,monad:143,megaeth:4326,ink:57073,stablechain:988});function jo(e){let t=String(e||"").trim().toLowerCase(),n=Bo[t];if(!n)throw new Error(`opensea: unsupported EVM chain ${t||"(missing)"}`);return{chain:t,chainId:n}}function cn(e,t,{positive:n=!1}={}){let r=String(e??"").trim();if(!/^\d+$/.test(r))throw new Error(`opensea: ${t} must be an unsigned integer`);let o=BigInt(r);if(n&&o<=0n)throw new Error(`opensea: ${t} must be positive`);return o}function Ho(e,t="transaction value"){let n;try{let r=String(e??"0").trim();if(!/^(?:0x[0-9a-fA-F]+|\d+)$/.test(r))throw new Error("invalid");n=BigInt(r)}catch{throw new Error(`opensea: ${t} must be a non-negative integer quantity`)}if(n<0n)throw new Error(`opensea: ${t} must be non-negative`);return{amount:n,hex:`0x${n.toString(16)}`}}function qo(e,t=10){let n=Number(e??1);if(!Number.isSafeInteger(n)||n<1||n>t)throw new Error(`opensea: quantity must be an integer from 1 through ${t}`);return n}function Do(e,t,n="listing expiry"){let r=e==null?"":String(e).trim(),o;if(/^\d+$/.test(r)){let i=Number(r);o=r.length<=10?i*1e3:i}else o=Date.parse(r);if(!r||!Number.isFinite(o))throw new Error(`opensea: ${n} missing or invalid`);if(o<=t)throw new Error(`opensea: ${n} is expired or stale`);return new Date(o).toISOString()}var Zi=Object.freeze({OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]});function Uo(e){if(e.userConfirmed!==!0)throw new Error("opensea: userConfirmed=true required after buyer, chain, contract, token, quantity, price cap, total cap, and expiry review")}function fn(e){if(!e||typeof e!="object")return!1;let t=String(e.action??e.type??e.method??"");return/approv|setapprovalforall|permit/i.test(t)?!0:Object.values(e).some(n=>n&&typeof n=="object"&&fn(n))}function mn(e){return!e||typeof e!="object"?!1:Object.keys(e).some(t=>/^(?:signed.*|rawtransaction|serializedtransaction|txsigned|r|s|v)$/i.test(t))}function hn(e){return!e||typeof e!="object"?!1:mn(e)?!0:Object.values(e).some(t=>t&&typeof t=="object"&&hn(t))}function yn(e,t=[],n=new Set){if(!e||typeof e!="object"||n.has(e))return t;n.add(e),e.transaction&&typeof e.transaction=="object"?t.push(e.transaction):e.tx&&typeof e.tx=="object"&&t.push(e.tx);for(let[r,o]of Object.entries(e))(r==="transaction"||r==="tx")&&o&&typeof o=="object"||o&&typeof o=="object"&&yn(o,t,n);return t}function un(e){return e&&typeof e=="object"&&typeof e.value=="string"?e.value:e}function Go(e,{buyer:t,chainId:n,targets:r}){if(!e||typeof e!="object")throw new Error("opensea: transaction object required");if(mn(e))throw new Error("opensea: signed transaction material refused");if((e.from?X(un(e.from),"transaction buyer"):t)!==t)throw new Error("opensea: OpenSea returned a transaction for the wrong buyer");let i=X(un(e.to??e.target),"transaction target");if(!r.has(i))throw new Error("opensea: OpenSea returned a transaction for the wrong target");let a=e.data??e.calldata,c=e.input_data&&typeof e.input_data=="object"?e.input_data:e.input&&typeof e.input=="object"?e.input:null;if(a==null&&c){if(!String(e.function||"").replace(/^function\s+/,"").startsWith("fulfillAdvancedOrder("))throw new Error("opensea: only exact Seaport fulfillAdvancedOrder preparation is accepted");a=ko.encodeFunctionData("fulfillAdvancedOrder",[c.advancedOrder,c.criteriaResolvers,c.fulfillerConduitKey,c.recipient])}let s=String(a??"").trim().toLowerCase();if(!/^0x(?:[0-9a-f]{2})+$/.test(s))throw new Error("opensea: OpenSea returned invalid transaction calldata");let l=e.calldata_suffix==null?"":String(e.calldata_suffix).trim().toLowerCase();if(l){if(!/^0x[0-9a-f]{8}$/.test(l))throw new Error("opensea: invalid OpenSea calldata suffix");s.endsWith(l.slice(2))||(s+=l.slice(2))}let u=e.chainId??e.chain_id??e.chainIdentifier?.chainId;if(u!=null&&Number(u)!==n)throw new Error("opensea: OpenSea returned a transaction for the wrong chain");let p=Ho(e.value_hex??e.valueHex??e.value??0);return{from:t,to:i,data:s,value:p.hex,chainId:n,valueWei:p.amount}}function wn(e){return{from:e.from,to:e.to,data:e.data,value:e.value,chainId:e.chainId,...e.gasLimit==null?{}:{gasLimit:e.gasLimit},...e.maxFeePerGas==null?{}:{maxFeePerGas:e.maxFeePerGas},...e.maxPriorityFeePerGas==null?{}:{maxPriorityFeePerGas:e.maxPriorityFeePerGas},...e.worstCaseFeeWei==null?{}:{worstCaseFeeWei:e.worstCaseFeeWei}}}async function Wo(e,t,n){let r=n.provider,o=!!n.rpcUrl;if(!r&&!o)return{simulated:!1,gasEstimates:[]};let i=await Gt(e,4,async s=>{let{chainId:l,...u}=wn(s);if(r){if(typeof r.call!="function"||typeof r.estimateGas!="function")throw new Error("opensea: supplied provider must implement call and estimateGas");let[,h]=await Promise.all([r.call(u),r.estimateGas(u)]);return BigInt(h).toString()}let{rpcCall:p}=await Promise.resolve().then(()=>(it(),ot)),d={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},[,y]=await Promise.all([p(t,"eth_call",[u,"pending"],d),p(t,"eth_estimateGas",[u],d)]);return BigInt(y).toString()}),a=null,c=null;if(r&&typeof r.getFeeData=="function"){let s=await r.getFeeData();c=s?.maxPriorityFeePerGas==null?0n:BigInt(s.maxPriorityFeePerGas),a=s?.maxFeePerGas==null?s?.gasPrice==null?null:BigInt(s.gasPrice):BigInt(s.maxFeePerGas)}else if(o){let{rpcCall:s}=await Promise.resolve().then(()=>(it(),ot)),l={...n,fetchImpl:n.rpcFetchImpl||n.fetchImpl},u=BigInt(await s(t,"eth_gasPrice",[],l));try{c=BigInt(await s(t,"eth_maxPriorityFeePerGas",[],l))}catch{c=0n}let p=await s(t,"eth_getBlockByNumber",["pending",!1],l),y=(p?.baseFeePerGas==null?0n:BigInt(p.baseFeePerGas))*2n+c;a=u>y?u:y}return a!=null&&c!=null&&e.forEach((s,l)=>{let p=(BigInt(i[l])*120n+99n)/100n;s.gasLimit=p.toString(),s.maxPriorityFeePerGas=c.toString(),s.maxFeePerGas=a.toString(),s.worstCaseFeeWei=(p*a).toString()}),{simulated:!0,gasEstimates:i}}function zo(e,t){if(fn(e))throw new Error("opensea: approval steps are not permitted in NFT buy, sweep, or mint preparation");if(hn(e))throw new Error("opensea: signed transaction material refused");let n=yn(e);if(!n.length&&e&&typeof e=="object"&&(e.to||e.target)&&n.push(e),!n.length)throw new Error("opensea: OpenSea returned no transaction action");return n.map(r=>Go(r,t))}function Vo(e,t,n={}){return Z({...e,provider:"opensea-nft",kind:t,marketplace:"opensea",prepareReady:!0,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,note:"Unsigned OpenSea EVM NFT transaction preparation only. The private signer must revalidate every bound field before the user signs or broadcasts."},n)}function Yo(e,t,n){let o=(Array.isArray(e?.contracts)?e.contracts:[]).find(a=>String(a?.chain||t).toLowerCase()===t&&a?.address);if(!o)throw new Error("opensea: collection response contains no contract for requested chain");let i=X(o.address,"collection NFT contract");if(i!==n)throw new Error("opensea: OpenSea returned the wrong collection contract");return i}async function gn(e={},t={}){if(!at(t))throw new Error("OPENSEA_API_KEY required");Uo(e);let{chain:n,chainId:r}=jo(e.chain),o=X(e.buyer||e.minter||e.address,"buyer"),i=X(e.contract,"NFT contract"),a=qo(e.quantity),c=cn(e.priceWei,"priceWei"),s=cn(e.maxTotalWei,"maxTotalWei"),l=Number.isFinite(Number(t.nowMs))?Number(t.nowMs):Date.now(),u=Do(e.expiry,l,"mint expiry");if(e.tokenId!=null)throw new Error("opensea: SeaDrop mint tokenId is unknown until the mined receipt and must not be caller supplied");let p=String(e.slug||"").trim();if(!p)throw new Error("opensea: collection slug required");let d=await Lo(p,t),y=Yo(d,n,i),h=c*BigInt(a);if(h>s)throw new Error("opensea: mint total exceeds total cap");let I=await ye(`${pn(t)}/drops/${encodeURIComponent(p)}/mint`,{method:"POST",headers:dn(t),body:{minter:o,quantity:a},fetchImpl:t.fetchImpl,timeoutMs:t.timeoutMs??25e3,retries:0,dedupe:!1}),w=t.allowedMintTargets?.[n]??t.allowedMintTargets?.[r]??e.mintTarget,x=Array.isArray(w)?w:w?[w]:[];if(!x.length)throw new Error("opensea: reviewed SeaDrop mintTarget required");let k=new Set(x.map(C=>X(C,"SeaDrop mint target"))),S=zo(I,{buyer:o,chainId:r,targets:k});if(S.length!==1)throw new Error("opensea: mint must contain exactly one SeaDrop transaction");let g,B,F=null,b;try{g=Oe.decodeFunctionData("mintPublic",S[0].data),B="public",b=Oe.encodeFunctionData("mintPublic",[g[0],g[1],g[2],g[3]])}catch{try{g=Oe.decodeFunctionData("mintAllowList",S[0].data),B="allowlist";let C=g[4],M=[...g[5]].map(String);if(M.length<1||M.length>64||M.some(A=>!/^0x[0-9a-fA-F]{64}$/.test(A)))throw new Error("opensea: allowlist mint requires a bounded canonical Merkle proof");let z=BigInt(C.startTime),R=BigInt(C.endTime),T=BigInt(Math.floor(l/1e3));if(z>T||R<=T)throw new Error("opensea: allowlist mint stage is not open");if(BigInt(C.mintPrice)!==c)throw new Error("opensea: allowlist stage price does not match exact approved price");if(BigInt(C.maxTotalMintableByWallet)<BigInt(a))throw new Error("opensea: allowlist wallet cap is below requested quantity");b=Oe.encodeFunctionData("mintAllowList",[g[0],g[1],g[2],g[3],C,M]),F={mintPrice:BigInt(C.mintPrice).toString(),maxTotalMintableByWallet:BigInt(C.maxTotalMintableByWallet).toString(),startTime:z.toString(),endTime:R.toString(),dropStageIndex:BigInt(C.dropStageIndex).toString(),maxTokenSupplyForStage:BigInt(C.maxTokenSupplyForStage).toString(),feeBps:Number(C.feeBps),restrictFeeRecipients:!!C.restrictFeeRecipients,proof:M}}catch(C){throw/opensea:/.test(String(C?.message||""))?C:new Error("opensea: mint transaction must call reviewed SeaDrop mintPublic or mintAllowList")}}let E=X(g[0],"mint NFT contract"),P=X(g[1],"mint fee recipient"),N=X(g[2],"mint recipient");if(E!==y)throw new Error("opensea: mint calldata collection mismatch");if(N!==o)throw new Error("opensea: mint calldata recipient mismatch");if(BigInt(g[3])!==BigInt(a))throw new Error("opensea: mint calldata quantity mismatch");if(b.toLowerCase()!==S[0].data.toLowerCase())throw new Error("opensea: mint calldata must be canonical with no suffix");let f=S.reduce((C,M)=>C+M.valueWei,0n);if(f!==h)throw new Error("opensea: mint transaction total does not match exact approved price and quantity");if(f>s)throw new Error("opensea: mint total exceeds total cap");let O=await Wo(S,r,{...t,provider:e.provider||t.provider});if(O.simulated!==!0)throw new Error("opensea: mint RPC simulation required");let re=e.gasPolicy||t.gasPolicy||{maxTotalGasWei:e.maxGasWei,maxFeePerGasWei:e.maxFeePerGasWei,maxPriorityFeePerGasWei:e.maxPriorityFeePerGasWei},D=Kt({chainId:r,tx:S[0],policy:re});return Vo({action:"mint",mintType:B,...F?{stage:F}:{},chain:n,chainId:r,slug:p,buyer:o,contract:y,quantity:a,priceWei:c.toString(),totalWei:f.toString(),maxTotalWei:s.toString(),mintTarget:S[0].to,feeRecipient:P,expiry:u,transactions:S.map(wn),gasWar:D,...O},"nft-mint",{nowMs:l,expiresAtMs:Math.min(l+$e,Date.parse(u),F?Number(BigInt(F.endTime)*1000n):Number.MAX_SAFE_INTEGER)})}var Qi=new _e(["function setApprovalForAll(address operator,bool approved)"]),ea=new _e(["function cancel((address offerer,address zone,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)[] offer,(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 counter)[] orders) returns (bool cancelled)"]);var Jo=Object.freeze([oe.DISCOVERY,oe.ELIGIBILITY,oe.PREPARATION,oe.SIMULATION]),bn=[["evm.manifold","evm",["manifold"],["mint","claim"],"evm","manifold"],["evm.zora","evm",["zora"],["mint"],"evm","zora"],["evm.thirdweb","evm",["thirdweb"],["mint","claim"],"evm","thirdweb"],["evm.opensea-seadrop","evm",["opensea"],["mint","seadrop"],"opensea",null],["solana.metaplex-core","solana",["metaplex"],["mint"],"solana",Se.metaplexCore],["solana.candy-machine","solana",["metaplex"],["mint","candy-machine"],"solana",Se.candyMachine],["solana.magic-eden-launchpad","solana",["magic-eden"],["mint","launchpad"],"solana",Se.magicEdenLaunchpad],["bitcoin.ordinals","bitcoin",["ordinals"],["mint","inscription"],"bitcoin",null]],En=Object.freeze(bn.map(([e,t,n,r])=>Object.freeze({id:e,family:t,chainFamilies:Object.freeze([t]),marketplaces:Object.freeze(n),mechanisms:Object.freeze(r),enabled:t!=="solana",capabilities:t==="solana"?Object.freeze([oe.DISCOVERY]):Jo,tier:t==="solana"?"RESEARCH_ONLY":"PREPARE_READY"}))),la=je(En.map(({family:e,tier:t,enabled:n,...r})=>r)),Sn=new Map(bn.map(e=>[e[0],e])),Xo=new Set(["intent","adapterId","input"]),Zo=/^(?:sign|execute|broadcast|submit|wif|privateKey|secretKey|seed|mnemonic|vault|signature|signatures|signed.*|rawTransaction)$/i,Ne=class extends Error{constructor(t,n,r={}){super(`universal mint router: ${n}`,r),this.name="UniversalMintRouterError",this.code=t}};function _(e,t,n){throw new Ne(e,t,n?{cause:n}:{})}function m(e,t,n){String(e??"")!==String(t)&&_("intent-mismatch",`${n} does not match canonical intent`)}function L(e,t,n){let r=e[t];return r.unit!==n&&_("unsupported-unit",`${t}.unit must be ${n}`),BigInt(r.amount)}function xn(e,t="input"){if(!(!e||typeof e!="object"))for(let[n,r]of Object.entries(e))Zo.test(n)&&_("custody-refused",`${t}.${n} is outside the prepare-only boundary`),xn(r,`${t}.${n}`)}function Qo(e,t){return e==="solana"?t.eligibilityProofAccounts??[]:e==="bitcoin"?t.eligibilityProof??[t.contentHash,t.parentId]:t.proof??[]}function ei(e,t,n,r){(typeof t.stageId!="string"||typeof t.proofDigest!="string")&&_("invalid-request","decoded input requires exact stageId and proofDigest");let o=e.stages.find(s=>s.id===t.stageId);o||_("intent-mismatch","stageId does not match canonical intent"),m(t.proofDigest,o.eligibility.proofDigest,"proof digest");let i=`sha256:${Ko("sha256").update(JSON.stringify(Qo(n,t))).digest("hex")}`;m(i,o.eligibility.proofDigest,"decoded proof digest");let a=t.stage?.startTime!=null?Number(t.stage.startTime)*1e3:t.stageStartsAt!=null?Number(t.stageStartsAt)*1e3:Number(t.stageStartsAtMs),c=t.stage?.endTime!=null?Number(t.stage.endTime)*1e3:t.stageEndsAt!=null?Number(t.stageEndsAt)*1e3:Number(t.stageEndsAtMs);return(!Number.isSafeInteger(a)||!Number.isSafeInteger(c))&&_("invalid-request","decoded input requires exact stage bounds"),m(a,o.startsAt.value,"stage start"),m(c,o.endsAt.value,"stage end"),(r<a||r>=c)&&_("expired-intent","canonical mint stage is not active at authoritative now"),o}function ti(e,t){let n=Sn.get(t);n||_("unsupported-adapter",`unsupported explicit adapter ${String(t)}`);let[,r,o,i]=n;return m(r,e.chain.family,"chain family"),(!o.includes(e.marketplace)||!i.includes(e.mechanism))&&_("unsupported-request",`${t} does not support the exact marketplace/mechanism`),n}function ni(e,t){e.chain.family==="evm"?(m(t.chainId,e.chain.id,"network"),m(t.contract,e.collection,"collection/drop"),m(t.recipient??t.buyer??t.minter,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.maxValueWei??t.maxTotalWei,L(e,"mintValueCap","wei"),"mint-value cap"),m(t.maxTotalGasWei??t.maxGasWei??t.gasPolicy?.maxTotalGasWei,L(e,"networkFeeCap","wei"),"network-fee cap"),m(t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei,L(e,"priorityFeeCap","wei-per-gas"),"priority-fee cap")):e.chain.family==="solana"?(m(t.network,e.chain.id,"network"),m(t.collection??t.drop??t.identity,e.collection,"collection/drop"),m(t.recipientOwner??t.recipient,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.priceLamports,L(e,"mintValueCap","lamports"),"mint-value cap"),m(t.networkFeeCapLamports,L(e,"networkFeeCap","lamports"),"network-fee cap"),m(t.priorityFeeCapLamports,L(e,"priorityFeeCap","lamports"),"priority-fee cap")):(m(t.network,e.chain.id,"network"),m(t.parentId,e.collection,"collection/drop"),m(t.recipient,e.recipient,"recipient"),m(e.quantity,1,"Ordinals quantity"),m(t.postageSats,L(e,"mintValueCap","sats"),"mint-value cap"),m(t.maxTotalFeeSats,L(e,"networkFeeCap","sats"),"network-fee cap"),m(t.maxFeeRateSatVb,L(e,"priorityFeeCap","sat/vbyte"),"priority-fee cap"))}function ri(e){(!e||e.oraclePrepared!==!0||e.prepareHash!==be(e))&&_("artifact-mismatch","leaf returned an invalid or mutated preparation stamp"),(e.signingReady!==!1||e.broadcastReady!==!1||e.executionReady!==!1||e.signed===!0)&&_("custody-refused","leaf artifact is not strictly prepare-only")}function oi(e,t,n){m(t.chainId,e.chain.id,"network"),m(t.contract,e.collection,"collection/drop"),m(t.recipient??t.buyer??t.minter,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity");let r=L(e,"mintValueCap","wei"),o=L(e,"networkFeeCap","wei"),i=L(e,"priorityFeeCap","wei-per-gas");m(t.maxValueWei??t.maxTotalWei,r,"mint-value cap"),m(t.maxTotalGasWei??t.maxGasWei??t.gasPolicy?.maxTotalGasWei,o,"network-fee cap"),m(t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei,i,"priority-fee cap");let a=n.transaction??n.transactions?.[0];a||_("artifact-mismatch","prepared EVM transaction is missing"),m(a.chainId,e.chain.id,"artifact network");let c=BigInt(a.gasLimit??0),s=BigInt(a.maxFeePerGas??0);(!c||!s||c*s>o)&&_("artifact-mismatch","artifact network fee exceeds or omits canonical cap evidence");let l=BigInt(a.maxPriorityFeePerGas??t.maxPriorityFeePerGasWei??t.gasPolicy?.maxPriorityFeePerGasWei??-1);return(l<0n||l>i)&&_("artifact-mismatch","artifact priority fee exceeds or omits canonical cap evidence"),m(n.contract,e.collection,"artifact collection/drop"),m(n.recipient??n.buyer,e.recipient,"artifact recipient"),m(n.quantity,e.quantity,"artifact quantity"),BigInt(n.valueWei??n.totalWei)>r&&_("artifact-mismatch","artifact mint value exceeds canonical cap"),{networkFee:(c*s).toString(),priorityFee:l.toString()}}function ii(e,t,n){m(t.network,e.chain.id,"network"),m(t.collection??t.drop??t.identity,e.collection,"collection/drop"),m(t.recipientOwner??t.recipient,e.recipient,"recipient"),m(t.quantity,e.quantity,"quantity"),m(t.priceLamports,L(e,"mintValueCap","lamports"),"mint-value cap");let r=L(e,"networkFeeCap","lamports"),o=L(e,"priorityFeeCap","lamports");m(t.networkFeeCapLamports,r,"network-fee cap"),m(t.priorityFeeCapLamports,o,"priority-fee cap"),m(n.chain,`solana-${e.chain.id}`,"artifact network");let i=0n;for(let a of n.transactions)for(let c of a.instructions)if(String(c.decoded?.type).toLowerCase().includes("price")){let s=a.instructions.find(l=>String(l.decoded?.type).toLowerCase().includes("limit"))?.decoded?.units;i+=(BigInt(s)*BigInt(c.decoded.microLamports)+999999n)/1000000n}return(i>o||i>r)&&_("artifact-mismatch","artifact Solana fee exceeds canonical caps"),{networkFee:i.toString(),priorityFee:i.toString()}}function ai(e,t,n){return m(t.network,e.chain.id,"network"),m(t.parentId,e.collection,"collection/drop"),m(t.recipient,e.recipient,"recipient"),m(e.quantity,1,"Ordinals quantity"),m(t.postageSats,L(e,"mintValueCap","sats"),"mint-value cap"),m(t.maxTotalFeeSats,L(e,"networkFeeCap","sats"),"network-fee cap"),m(t.maxFeeRateSatVb,L(e,"priorityFeeCap","sat/vbyte"),"priority-fee cap"),m(n.plan.network,e.chain.id,"artifact network"),m(n.plan.parentId,e.collection,"artifact collection/drop"),m(n.plan.recipient,e.recipient,"artifact recipient"),m(n.plan.postageSats,e.mintValueCap.amount,"artifact mint-value cap"),m(n.plan.caps.maxTotalFeeSats,e.networkFeeCap.amount,"artifact network-fee cap"),m(n.plan.caps.maxFeeRateSatVb,e.priorityFeeCap.amount,"artifact priority-fee cap"),{networkFee:(BigInt(n.plan.commit.feeSats)+BigInt(n.plan.reveal.feeSats)).toString(),priorityFee:String(n.plan.caps.maxFeeRateSatVb)}}function vn(){return Object.freeze({prepareOnly:!0,signing:!1,broadcast:!1,adapters:En})}async function si(){return{provider:"universal-mint-router",status:"ok",prepareOnly:!0,capabilities:vn()}}async function An(e={},t={}){(!e||typeof e!="object"||Array.isArray(e))&&_("invalid-request","request must be a plain object");for(let u of Object.keys(e))Xo.has(u)||_("invalid-request",`unknown request field ${u}`);(typeof e.adapterId!="string"||!e.adapterId)&&_("invalid-request","explicit adapterId is required; adapter inference is refused"),Sn.has(e.adapterId)||_("unsupported-adapter",`unsupported explicit adapter ${e.adapterId}`);let n=e.input;(!n||typeof n!="object"||Array.isArray(n))&&_("invalid-request","family-specific decoded input is required"),xn(n);let r;try{r=Me(e.intent)}catch(u){_("invalid-intent",u.message,u)}let o=Number(t.nowMs??Date.now());Number.isSafeInteger(o)||_("invalid-request","authoritative nowMs must be a safe integer"),o>=r.expiry.value&&_("expired-intent","canonical mint intent has expired");let i=ti(r,e.adapterId);i[1]==="solana"&&_("adapter-refused","universal Solana mint preparation is disabled until canonical serialized-message instructions are independently decoded and bound");let a=ei(r,n,r.chain.family,o);ni(r,n);let c;try{i[4]==="evm"?c=await yt(i[5],n,t):i[4]==="opensea"?c=await gn(n,t):i[4]==="solana"?(m(n.programId,i[5],"selected Solana adapter program"),c=await wt(n,t)):c=await Ct(n,t)}catch(u){if(u instanceof Ne)throw u;_("adapter-refused",u?.message||"adapter preparation failed",u)}ri(c);let s=i[4]==="bitcoin"?ai(r,n,c):i[4]==="solana"?ii(r,n,c):oi(r,n,c),l=Object.freeze({intentHash:ft(r),adapterId:e.adapterId,family:r.chain.family,network:r.chain.id,marketplace:r.marketplace,mechanism:r.mechanism,collection:r.collection,recipient:r.recipient,quantity:String(r.quantity),stageId:a.id,proofDigest:a.eligibility.proofDigest,mintValueCap:r.mintValueCap,networkFeeCap:r.networkFeeCap,priorityFeeCap:r.priorityFeeCap,observedNetworkFee:s.networkFee,observedPriorityFee:s.priorityFee});return Z({provider:"universal-mint-router",kind:"universal-nft-mint",execution:"prepare-only",signed:!1,adapterId:e.adapterId,tier:"PREPARE_READY",intent:r,binding:l,leafArtifact:c},{provider:"universal-mint-router",kind:"universal-nft-mint",env:t.env,nowMs:o,expiresAtMs:Math.min(r.expiry.value,a.endsAt.value,Number(c.expiresAt))})}var pa=An,da=An,fa=vn,ma=si;export{En as UNIVERSAL_MINT_ADAPTERS,la as UNIVERSAL_MINT_ROUTER_REGISTRY,Ne as UniversalMintRouterError,fa as getUniversalMintCapabilities,ma as getUniversalMintHealth,An as prepareUniversalMint,da as prepareUniversalMintAdmin,pa as prepareUniversalMintPublic,vn as universalMintCapabilities,si as universalMintHealth};
|