@dexterai/x402 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -6
- package/dist/adapters/index.cjs +1 -1
- package/dist/adapters/index.d.cts +4 -3
- package/dist/adapters/index.d.ts +4 -3
- package/dist/adapters/index.js +1 -1
- package/dist/client/index.cjs +1 -1
- package/dist/client/index.d.cts +6 -7
- package/dist/client/index.d.ts +6 -7
- package/dist/client/index.js +1 -1
- package/dist/constants-qU-4U3L-.d.cts +52 -0
- package/dist/constants-qU-4U3L-.d.ts +52 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.d.cts +5 -5
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +1 -1
- package/dist/server/index.cjs +15 -15
- package/dist/server/index.d.cts +3 -2
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.js +17 -17
- package/dist/{sponsored-access-BVoucsEW.d.ts → sponsored-access-BuecDKXL.d.cts} +2 -3
- package/dist/{sponsored-access-CE7WpV5b.d.cts → sponsored-access-DP61rXDl.d.ts} +2 -3
- package/dist/{types-DBS0XOsH.d.ts → types-BPKUVJEl.d.ts} +2 -46
- package/dist/{types-_iT11DL0.d.cts → types-CKiTYeJ-.d.cts} +3 -12
- package/dist/{types-_iT11DL0.d.ts → types-CKiTYeJ-.d.ts} +3 -12
- package/dist/{types-C_aQh02s.d.cts → types-i7C2GiVY.d.cts} +2 -46
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.cts +15 -1
- package/dist/utils/index.d.ts +15 -1
- package/dist/utils/index.js +1 -1
- package/package.json +3 -1
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Y="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",oe="eip155:8453";var ee="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",fe="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",L="https://x402.dexter.cash";function V(e,t){let n=Math.pow(10,t);return Math.floor(e*n).toString()}function ae(e){return e.startsWith("solana:")||e==="solana"}function ge(e){if(typeof Buffer<"u")return Buffer.from(e,"utf-8").toString("base64");let t=new TextEncoder().encode(e),n="";for(let r=0;r<t.length;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function ye(e){if(typeof Buffer<"u")return Buffer.from(e,"base64").toString("utf-8");let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new TextDecoder().decode(n)}function F(e){return ge(JSON.stringify(e))}function j(e){return JSON.parse(ye(e))}function xe(e){if(e instanceof TypeError)return!0;if(e&&typeof e=="object"&&"status"in e){let t=e.status;return t>=500&&t<600}return!1}var G=class extends Error{status;body;constructor(t,n){super(`HTTP ${t}`),this.status=t,this.body=n}},H=class{facilitatorUrl;cachedSupported=null;cacheTime=0;CACHE_TTL_MS=6e4;timeoutMs;maxRetries;retryBaseMs;constructor(t=L,n){this.facilitatorUrl=t.replace(/\/$/,""),this.timeoutMs=n?.timeoutMs??1e4,this.maxRetries=n?.maxRetries??3,this.retryBaseMs=n?.retryBaseMs??500}async fetchWithTimeout(t,n){let r=new AbortController,i=setTimeout(()=>r.abort(),this.timeoutMs);try{return await fetch(t,{...n,signal:r.signal})}finally{clearTimeout(i)}}async fetchWithRetry(t,n){let r;for(let i=0;i<this.maxRetries;i++)try{let c=await this.fetchWithTimeout(t,n);if(!c.ok&&c.status>=500)throw new G(c.status,await c.text());return c}catch(c){if(r=c,i<this.maxRetries-1&&xe(c)){let d=this.retryBaseMs*Math.pow(2,i);await new Promise(g=>setTimeout(g,d));continue}throw c}throw r}async getSupported(){let t=Date.now();if(this.cachedSupported&&t-this.cacheTime<this.CACHE_TTL_MS)return this.cachedSupported;let n=await this.fetchWithTimeout(`${this.facilitatorUrl}/supported`);if(!n.ok)throw new Error(`Facilitator /supported returned ${n.status}`);return this.cachedSupported=await n.json(),this.cacheTime=t,this.cachedSupported}async getFeePayer(t){let r=(await this.getSupported()).kinds.find(i=>i.x402Version===2&&(i.scheme==="exact"||i.scheme==="exact-approval")&&i.network===t);if(!r)throw new Error(`Facilitator does not support network "${t}" with a recognized scheme`);return r.extra?.feePayer}async getNetworkExtra(t){return(await this.getSupported()).kinds.find(i=>i.x402Version===2&&(i.scheme==="exact"||i.scheme==="exact-approval")&&i.network===t)?.extra}async verifyPayment(t,n){try{let r=j(t),i=await this.fetchWithRetry(`${this.facilitatorUrl}/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return i.ok?await i.json():{isValid:!1,invalidReason:`facilitator_error_${i.status}`}}catch(r){return{isValid:!1,invalidReason:r instanceof G?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_verify_error"}}}async settlePayment(t,n){try{let r=j(t),i=await this.fetchWithRetry(`${this.facilitatorUrl}/settle`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return i.ok?{...await i.json(),network:n.network}:{success:!1,network:n.network,errorReason:`facilitator_error_${i.status}`}}catch(r){let i=r instanceof G?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_settle_error";return{success:!1,network:n.network,errorReason:i}}}};function ce(e){try{let t=j(e);return t?.accepted?.amount??t?.accepted?.maxAmountRequired}catch{return}}function K(e){let{payTo:t,facilitatorUrl:n=L,network:r=Y,asset:i={address:ee,decimals:6},defaultTimeoutSeconds:c=60}=e,d=new H(n),g=null,P=new Map,w=3e4,k=Date.now();function A(a){let p=(a.maxTimeoutSeconds||c)*1e3;if(P.set(a.payTo,{accept:a,expiresAt:Date.now()+p}),Date.now()-k>w){let s=Date.now();for(let[R,_]of P)_.expiresAt<s&&P.delete(R);k=s}}function o(a){let p=P.get(a);if(p){if(p.expiresAt<Date.now()){P.delete(a);return}return p.accept}}async function x(a){return typeof t=="string"?t:t(a||{})}async function f(){if(g||(g=await d.getNetworkExtra(r)),ae(r)&&!g?.feePayer)throw new Error(`Facilitator does not provide feePayer for network "${r}"`);return{...g?.feePayer?{feePayer:g.feePayer}:{},decimals:g?.decimals??i.decimals,name:g?.name,version:g?.version}}async function m(a,p){let{amountAtomic:s,timeoutSeconds:R=c}=p,_=await f(),E={scheme:"exact",network:r,amount:s,maxAmountRequired:s,asset:i.address,payTo:a,maxTimeoutSeconds:R,extra:_};return A(E),E}async function y(a){let p=await x({amountAtomic:a.amountAtomic,resourceUrl:a.resourceUrl});return m(p,a)}async function S(a){let{resourceUrl:p,description:s,mimeType:R="application/json"}=a,_={url:p,description:s,mimeType:R},E=await y(a);return{x402Version:2,resource:_,accepts:[E],error:"Payment required"}}function u(a){return F(a)}function h(a){return{status:402,headers:{"PAYMENT-REQUIRED":u(a)},body:{}}}async function l(a,p){if(!p){let s=await x({paymentHeader:a});p=o(s),p||(p=await m(s,{amountAtomic:ce(a)??"0",resourceUrl:""}))}return d.verifyPayment(a,p)}async function b(a,p){if(!p){let s=await x({paymentHeader:a});p=o(s),p||(p=await m(s,{amountAtomic:ce(a)??"0",resourceUrl:""}))}return d.settlePayment(a,p)}return{buildRequirements:S,encodeRequirements:u,create402Response:h,verifyPayment:l,settlePayment:b,getPaymentAccept:y,network:r,facilitator:d}}var pe=new WeakMap;function ue(e){return pe.get(e)}var he={base:"base","base-sepolia":"base_sepolia"},be={base:"eip155:8453","base-sepolia":"eip155:84532"},Pe=6;function we(e){let t=typeof e=="string"?{secretKey:e}:e,n=t.network??"base",r=he[n]??"base",i=be[n]??"eip155:8453",c=t.apiVersion??"2026-01-28.clover",d=null;async function g(){if(d)return d;try{let{default:w}=await import("stripe");return d=new w(t.secretKey,{apiVersion:c,appInfo:{name:"@dexterai/x402",url:"https://dexter.cash/sdk"}}),d}catch{throw new Error('The "stripe" package is required for stripePayTo(). Install it with: npm install stripe')}}let P=async w=>{if(w.paymentHeader){try{let S=JSON.parse(Buffer.from(w.paymentHeader,"base64").toString()),u=S.payload?.authorization?.to;if(u&&typeof u=="string")return u;let h=S.accepted?.payTo;if(h&&typeof h=="string")return h}catch{}throw new Error("Could not extract deposit address from payment header. Ensure the client is sending a valid x402 PAYMENT-SIGNATURE.")}let k=await g(),A=w.amountAtomic?parseInt(w.amountAtomic,10):1e4,o=Math.max(1,Math.round(A/Math.pow(10,Pe-2))),f=(await k.paymentIntents.create({amount:o,currency:"usd",payment_method_types:["crypto"],payment_method_data:{type:"crypto"},payment_method_options:{crypto:{mode:"custom"}},confirm:!0})).next_action;if(!f?.crypto_collect_deposit_details)throw new Error("Stripe PaymentIntent did not return crypto deposit details. Ensure your Stripe account has crypto payins enabled: https://support.stripe.com/questions/get-started-with-pay-with-crypto");let m=f.crypto_collect_deposit_details,y=m.deposit_addresses?.[r]?.address;if(!y)throw new Error(`No deposit address found for network "${r}". Available networks: ${Object.keys(m.deposit_addresses||{}).join(", ")}`);return y};return P._x402Defaults={network:i,facilitatorUrl:"https://x402.dexter.cash"},pe.set(P,i),P}var Te="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Re=6;function ke(e,t){if(typeof e=="string"||typeof e=="function")return e;if(t in e)return e[t];let r=`${t.split(":")[0]}:*`;if(r in e)return e[r];if("*"in e)return e["*"];throw new Error(`No payTo configured for network "${t}"`)}function Ae(e){let{payTo:t,amount:n,asset:r,description:i,resourceUrl:c,mimeType:d,timeoutSeconds:g,verbose:P=!1,getResourceUrl:w,getAmount:k,getDescription:A}=e,o=P?console.log.bind(console,"[x402:middleware]"):()=>{},x=typeof t=="function"?t._x402Defaults:void 0,f=e.facilitatorUrl??x?.facilitatorUrl,m=e.network?Array.isArray(e.network)?e.network:[e.network]:x?.network?[x.network]:[Te],y=new Map;for(let u of m){let h=ke(t,u);if(typeof h=="function"){let l=ue(h);if(l&&u!==l)throw new Error(`stripePayTo is configured for "${l}" but middleware includes network "${u}". Stripe only supports Base deposit addresses. Use a static payTo for other chains.`)}y.set(u,K({payTo:h,network:u,asset:r,facilitatorUrl:f,defaultTimeoutSeconds:g}))}let S=y.get(m[0]);return async(u,h,l)=>{try{let b=u.headers["payment-signature"];if(!b){o("No payment signature, returning 402");let E=w?.(u)??c??`${u.protocol}://${u.get("host")}${u.originalUrl}`,M=k?.(u)??n,$=A?.(u)??i,T=r?.decimals??Re,O={amountAtomic:V(parseFloat(M),T),resourceUrl:E,description:$,mimeType:d,timeoutSeconds:g},q=[],C=null;for(let[,Z]of y)try{let J=await Z.buildRequirements(O);q.push(...J.accepts),C||(C=J)}catch(J){o("Failed to build requirements for a network:",J)}if(!C||q.length===0){h.status(500).json({error:"Failed to build payment requirements"});return}C={...C,accepts:q};let X=S.encodeRequirements(C);h.setHeader("PAYMENT-REQUIRED",X),h.status(402).json({error:"Payment required",accepts:C.accepts,resource:C.resource});return}o("Payment signature received, verifying...");let a=S;try{let M=JSON.parse(Buffer.from(b,"base64").toString())?.accepted?.network;M&&y.has(M)&&(a=y.get(M))}catch{}let p=await a.verifyPayment(b);if(!p.isValid){if(o("Payment verification failed:",p.invalidReason),e.onVerifyFailed)try{await e.onVerifyFailed({reason:p.invalidReason,resourceUrl:`${u.protocol}://${u.get("host")}${u.originalUrl}`})}catch{}h.status(402).json({error:"Payment verification failed",reason:p.invalidReason});return}o("Payment verified, settling...");let s=await a.settlePayment(b);if(!s.success){o("Payment settlement failed:",s.errorReason),h.status(402).json({error:"Payment settlement failed",reason:s.errorReason});return}o("Payment settled:",s.transaction);let R=s.network||m[0];if(e.onSettlement)try{await e.onSettlement({transaction:s.transaction,network:R,payer:p.payer??"",resourceUrl:`${u.protocol}://${u.get("host")}${u.originalUrl}`})}catch{}u.x402={transaction:s.transaction,payer:p.payer??"",network:R};let _={success:!0,transaction:s.transaction,network:R,payer:p.payer??""};if(s.extensions&&(_.extensions=s.extensions),h.setHeader("PAYMENT-RESPONSE",F(_)),e.sponsoredAccess&&s.extensions?.["sponsored-access"]){let E=s.extensions["sponsored-access"],M=E?.info?.recommendations??E?.recommendations;if(M&&M.length>0){if(o("Injecting sponsored-access recommendations into response"),typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.onMatch)try{e.sponsoredAccess.onMatch(M,{transaction:s.transaction,network:R,payer:p.payer??""})}catch{}let $=h.json.bind(h);h.json=function(v){return typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.inject?$(e.sponsoredAccess.inject(v,M)):v&&typeof v=="object"&&!Array.isArray(v)?$({_x402_sponsored:M,...v}):$(v)}}}l()}catch(b){o("Middleware error:",b),h.status(500).json({error:"Payment processing error"})}}}function N(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var Se='<svg width="18" height="18" viewBox="0 0 2000 2000" xmlns="http://www.w3.org/2000/svg"><path d="M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z" fill="#2775ca"/><path d="M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z" fill="#fff"/><path d="M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z" fill="#fff"/></svg>',Me='<svg width="36" height="36" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F2681A" d="m324.93,313.11c-115.5,0-231,0-350,0l350,0z"/><path fill="#FDFAF5" d="m230.43,50.62c1.1.85 2.19 1.7 3.32 2.57 6.02 4.8 11.77 9.88 17.46 15.07.92.84.92.84 1.86 1.69 1.82 1.69 3.59 3.42 5.35 5.16.61.56 1.22 1.13 1.84 1.71 5.66 5.76 6.18 10.43 6.13 18.3.02 1.16.04 2.32.06 3.52.06 3.83.06 7.65.07 11.48.02 2.68.05 5.35.08 8.03.05 5.6.09 11.21.1 16.81.02 7.15.09 14.31.17 21.46.06 5.53.1 11.05.13 16.58.02 2.64.04 5.27.07 7.91.18 17.58.12 32.82-11.24 47.32-7.35 7.27-16.54 12.06-25.42 17.22-1.97 1.16-3.94 2.33-5.91 3.49-7.16 4.24-14.34 8.44-21.53 12.62-4.8 2.79-9.59 5.6-14.38 8.42-1.25.73-2.5 1.47-3.79 2.23-2.32 1.36-4.64 2.73-6.96 4.1-27.47 16.09-27.47 16.09-42.16 12.93-8.06-2.28-14.94-5.82-22.16-10.02-1.17-.67-2.34-1.34-3.54-2.04-24.55-14.25-43.58-27.03-51.9-55.58-1.07-4.58-1.54-8.92-1.52-13.61.28-9.5.28-9.5-3.3-17.97-1.81-1.49-3.68-2.92-5.59-4.28-9.19-7.06-12.7-20.03-14.18-31.06-.54-5.77-.55-11.56-.6-17.35-.03-1.32-.07-2.63-.1-3.99-.01-1.26-.02-2.53-.03-3.83-.02-1.15-.03-2.29-.05-3.47.72-4.02 1.94-5.36 5.21-7.74 2.89-.53 2.89-.53 6.07-.46 1.71.02 1.71.02 3.46.05 1.19.04 2.37.08 3.59.12 1.2.02 2.41.04 3.65.06 2.97.05 5.93.13 8.9.23.14-1.35.29-2.7.43-4.08.63-5 1.78-9.74 3.14-14.58.22-.79.43-1.59.66-2.4.53-1.92 1.06-3.84 1.6-5.76-1.55-.45-1.55-.45-3.13-.9-9.52-3.52-17.1-10.95-21.37-20.1-3.81-9.26-3.87-20.34-.29-29.68 6.49-13.99 16.36-23.23 30.66-29.01 49.81-17.69 115.79 8.35 155.13 38.85z"/><path fill="#F2671A" d="m142.93,22.62c.86.19 1.73.39 2.62.59 36.12 8.21 68.79 24.98 95.38 50.75 1.02.98 2.03 1.97 3.08 2.98 10.84 10.66 10.84 10.66 11.05 14.62-2.06 3.55-5.44 4.18-9.17 5.3-.79.25-1.59.49-2.41.75-28.13 8.43-60.95 6.37-87.13-7.16-.86-.49-1.71-.97-2.6-1.48-7.37-4.05-12.59-3.36-20.59-1.54-22.76 4-48.47 1.53-68.69-9.74-4.88-3.88-8.23-8.29-10.21-14.22-.93-10.38-.67-18.44 5.83-26.83 19.57-23.38 55.99-20.36 82.83-14z"/><path fill="#F16619" d="m44.93,129.12c27.36-.03 54.72-.05 82.08-.06 12.7-.01 25.41-.01 38.11-.03 11.07-.01 22.14-.02 33.2-.02 5.86 0 11.73-.01 17.59-.01 5.51-.01 11.03-.01 16.54-.01 2.03 0 4.06 0 6.09-.01 2.76-.01 5.52 0 8.28 0 .81 0 1.63-.01 2.47-.01 5.51.02 5.51.02 6.81 1.32.22 3.43.22 3.43 0 7-2.75 2.75-3.42 2.66-7.15 2.82-1.41.07-1.41.07-2.85.14-1.47.05-1.47.05-2.98.11-1.49.07-1.49.07-3 .14-2.45.11-4.9.21-7.35.3-.2 1.3-.4 2.59-.6 3.93-2.57 16.08-5.93 29.89-18.89 40.86-10.35 7.28-21.87 8.49-34.17 7.71-13.11-2.33-22.52-9.19-30.33-19.83-4.49-7.64-4.8-17.05-5.83-25.67-4.24.39-8.47.77-12.83 1.17-.28 1.84-.28 1.84-.56 3.71-2.32 14.39-5.63 23.35-16.95 33.11-2.32 1.67-2.32 1.67-4.65 1.67 4 4.67 9.06 6.59 14.87 8.24 3.79 1.09 3.79 1.09 6.12 3.43-.65 5.31-.65 5.31-2.33 7-8.42-.27-15.13-2.29-22.17-7-1.09-1.21-2.17-2.43-3.25-3.65-2.72-2.81-4.45-3.84-8.36-4.16-1.67-.02-3.34-.02-5.01.01-1.77-.04-3.54-.09-5.3-.15-1.27-.04-1.27-.04-2.56-.08-9.26-.54-17.6-4.56-24.51-10.64-9.58-11.11-11.03-22.56-10.72-36.82.02-1.4.03-2.8.05-4.24.04-3.42.1-6.85.17-10.27z"/><path fill="#F26117" d="m172.68,203.08c7.27.09 13.23 1.97 18.87 6.65 2.88 3.07 3.86 5.12 4.25 9.32-.12 1.01-.24 2.02-.36 3.06-2.55.95-2.55.95-5.83 1.17-3.28-2.84-3.28-2.84-5.83-5.83-.36.58-.71 1.16-1.08 1.75-7.6 11.29-20.06 17.74-33.05 21.09-20.36 3.1-36.81-1.66-53.37-13.73-2.33-2.11-2.33-2.11-4.67-5.61.42-3.45.99-4.49 3.5-7 4.07.37 5.95 2.13 8.75 4.96 9.81 8.93 22.53 11.87 35.51 11.69 11.74-1.05 22.38-5.85 31.57-13.15 2.06-2.45 2.06-2.45 3.5-4.67-1.66.07-1.66.07-3.35.15-3.65-.15-3.65-.15-5.98-2.48.75-6.18 1.46-7.19 7.58-7.36z"/></g></svg>',ve=`
|
|
1
|
+
var F="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",be="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Pe="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var z="eip155:8453",ee="eip155:84532",te="eip155:42161",re="eip155:137",ne="eip155:10",se="eip155:43114",oe="eip155:56",ie="eip155:1187947933",ae="eip155:324705682",ce="eip155:1";var pe="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";var me="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",_e="0x55d398326f99059fF775485246999027B3197955",Te="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",ht={[oe]:Te,[z]:me,[ee]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[te]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[re]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[ne]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[se]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[ie]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[ae]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[ce]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},bt={[_e]:{symbol:"USDT",decimals:18},[Te]:{symbol:"USDC",decimals:18}},H=6;var Pt={[oe]:56,[z]:8453,[ee]:84532,[te]:42161,[re]:137,[ne]:10,[se]:43114,[ie]:1187947933,[ae]:324705682,[ce]:1},Tt={[F]:"https://api.dexter.cash/api/solana/rpc",[be]:"https://api.devnet.solana.com",[Pe]:"https://api.testnet.solana.com"},wt={[oe]:"https://bsc-dataseed1.binance.org",[z]:"https://api.dexter.cash/api/base/rpc",[ee]:"https://sepolia.base.org",[te]:"https://arb1.arbitrum.io/rpc",[re]:"https://polygon-rpc.com",[ne]:"https://mainnet.optimism.io",[se]:"https://api.avax.network/ext/bc/C/rpc",[ie]:"https://skale-base.skalenodes.com/v1/base",[ae]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[ce]:"https://eth.llamarpc.com"},B="https://x402.dexter.cash",de=F;function G(e,t){let n=Math.pow(10,t);return Math.floor(e*n).toString()}function we(e){return e.startsWith("solana:")||e==="solana"}function ve(e){if(typeof Buffer<"u")return Buffer.from(e,"utf-8").toString("base64");let t=new TextEncoder().encode(e),n="";for(let r=0;r<t.length;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function Ne(e){if(typeof Buffer<"u")return Buffer.from(e,"base64").toString("utf-8");let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new TextDecoder().decode(n)}function W(e){return ve(JSON.stringify(e))}function j(e){return JSON.parse(Ne(e))}function Oe(e){if(e instanceof TypeError)return!0;if(e&&typeof e=="object"&&"status"in e){let t=e.status;return t>=500&&t<600}return!1}var X=class extends Error{status;body;constructor(t,n){super(`HTTP ${t}`),this.status=t,this.body=n}},J=class{facilitatorUrl;cachedSupported=null;cacheTime=0;CACHE_TTL_MS=6e4;timeoutMs;maxRetries;retryBaseMs;constructor(t=B,n){this.facilitatorUrl=t.replace(/\/$/,""),this.timeoutMs=n?.timeoutMs??1e4,this.maxRetries=n?.maxRetries??3,this.retryBaseMs=n?.retryBaseMs??500}async fetchWithTimeout(t,n){let r=new AbortController,s=setTimeout(()=>r.abort(),this.timeoutMs);try{return await fetch(t,{...n,signal:r.signal})}finally{clearTimeout(s)}}async fetchWithRetry(t,n){let r;for(let s=0;s<this.maxRetries;s++)try{let c=await this.fetchWithTimeout(t,n);if(!c.ok&&c.status>=500)throw new X(c.status,await c.text());return c}catch(c){if(r=c,s<this.maxRetries-1&&Oe(c)){let u=this.retryBaseMs*Math.pow(2,s);await new Promise(g=>setTimeout(g,u));continue}throw c}throw r}async getSupported(){let t=Date.now();if(this.cachedSupported&&t-this.cacheTime<this.CACHE_TTL_MS)return this.cachedSupported;let n=await this.fetchWithTimeout(`${this.facilitatorUrl}/supported`);if(!n.ok)throw new Error(`Facilitator /supported returned ${n.status}`);return this.cachedSupported=await n.json(),this.cacheTime=t,this.cachedSupported}async getFeePayer(t){let r=(await this.getSupported()).kinds.find(s=>s.x402Version===2&&(s.scheme==="exact"||s.scheme==="exact-approval")&&s.network===t);if(!r)throw new Error(`Facilitator does not support network "${t}" with a recognized scheme`);return r.extra?.feePayer}async getNetworkExtra(t){return(await this.getSupported()).kinds.find(s=>s.x402Version===2&&(s.scheme==="exact"||s.scheme==="exact-approval")&&s.network===t)?.extra}async verifyPayment(t,n){try{let r=j(t),s=await this.fetchWithRetry(`${this.facilitatorUrl}/verify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return s.ok?await s.json():{isValid:!1,invalidReason:`facilitator_error_${s.status}`}}catch(r){return{isValid:!1,invalidReason:r instanceof X?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_verify_error"}}}async settlePayment(t,n){try{let r=j(t),s=await this.fetchWithRetry(`${this.facilitatorUrl}/settle`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({x402Version:2,paymentPayload:r,paymentRequirements:n})});return s.ok?{...await s.json(),network:n.network}:{success:!1,network:n.network,errorReason:`facilitator_error_${s.status}`}}catch(r){let s=r instanceof X?`facilitator_error_${r.status}`:r instanceof Error&&r.name==="AbortError"?"facilitator_timeout":r instanceof Error?r.message:"unexpected_settle_error";return{success:!1,network:n.network,errorReason:s}}}};function Ae(e){try{let t=j(e);return t?.accepted?.amount??t?.accepted?.maxAmountRequired}catch{return}}function Y(e){let{payTo:t,facilitatorUrl:n=B,network:r=F,asset:s={address:pe,decimals:6},defaultTimeoutSeconds:c=60}=e,u=new J(n),g=null,P=new Map,T=3e4,R=Date.now();function S(a){let p=(a.maxTimeoutSeconds||c)*1e3;if(P.set(a.payTo,{accept:a,expiresAt:Date.now()+p}),Date.now()-R>T){let o=Date.now();for(let[A,v]of P)v.expiresAt<o&&P.delete(A);R=o}}function i(a){let p=P.get(a);if(p){if(p.expiresAt<Date.now()){P.delete(a);return}return p.accept}}async function x(a){return typeof t=="string"?t:t(a||{})}async function f(){if(g||(g=await u.getNetworkExtra(r)),we(r)&&!g?.feePayer)throw new Error(`Facilitator does not provide feePayer for network "${r}"`);return{...g?.feePayer?{feePayer:g.feePayer}:{},decimals:g?.decimals??s.decimals,name:g?.name,version:g?.version}}async function m(a,p){let{amountAtomic:o,timeoutSeconds:A=c}=p,v=await f(),_={scheme:"exact",network:r,amount:o,maxAmountRequired:o,asset:s.address,payTo:a,maxTimeoutSeconds:A,extra:v};return S(_),_}async function y(a){let p=await x({amountAtomic:a.amountAtomic,resourceUrl:a.resourceUrl});return m(p,a)}async function E(a){let{resourceUrl:p,description:o,mimeType:A="application/json"}=a,v={url:p,description:o,mimeType:A},_=await y(a);return{x402Version:2,resource:v,accepts:[_],error:"Payment required"}}function d(a){return W(a)}function h(a){return{status:402,headers:{"PAYMENT-REQUIRED":d(a)},body:{}}}async function l(a,p){if(!p){let o=await x({paymentHeader:a});p=i(o),p||(p=await m(o,{amountAtomic:Ae(a)??"0",resourceUrl:""}))}return u.verifyPayment(a,p)}async function b(a,p){if(!p){let o=await x({paymentHeader:a});p=i(o),p||(p=await m(o,{amountAtomic:Ae(a)??"0",resourceUrl:""}))}return u.settlePayment(a,p)}return{buildRequirements:E,encodeRequirements:d,create402Response:h,verifyPayment:l,settlePayment:b,getPaymentAccept:y,network:r,facilitator:u}}var Re=new WeakMap;function Se(e){return Re.get(e)}var Ce={base:"base","base-sepolia":"base_sepolia"},Ie={base:"eip155:8453","base-sepolia":"eip155:84532"};function De(e){let t=typeof e=="string"?{secretKey:e}:e,n=t.network??"base",r=Ce[n]??"base",s=Ie[n]??"eip155:8453",c=t.apiVersion??"2026-01-28.clover",u=null;async function g(){if(u)return u;try{let{default:T}=await import("stripe");return u=new T(t.secretKey,{apiVersion:c,appInfo:{name:"@dexterai/x402",url:"https://dexter.cash/sdk"}}),u}catch{throw new Error('The "stripe" package is required for stripePayTo(). Install it with: npm install stripe')}}let P=async T=>{if(T.paymentHeader){try{let E=JSON.parse(Buffer.from(T.paymentHeader,"base64").toString()),d=E.payload?.authorization?.to;if(d&&typeof d=="string")return d;let h=E.accepted?.payTo;if(h&&typeof h=="string")return h}catch{}throw new Error("Could not extract deposit address from payment header. Ensure the client is sending a valid x402 PAYMENT-SIGNATURE.")}let R=await g(),S=T.amountAtomic?parseInt(T.amountAtomic,10):1e4,i=Math.max(1,Math.round(S/Math.pow(10,H-2))),f=(await R.paymentIntents.create({amount:i,currency:"usd",payment_method_types:["crypto"],payment_method_data:{type:"crypto"},payment_method_options:{crypto:{mode:"custom"}},confirm:!0})).next_action;if(!f?.crypto_collect_deposit_details)throw new Error("Stripe PaymentIntent did not return crypto deposit details. Ensure your Stripe account has crypto payins enabled: https://support.stripe.com/questions/get-started-with-pay-with-crypto");let m=f.crypto_collect_deposit_details,y=m.deposit_addresses?.[r]?.address;if(!y)throw new Error(`No deposit address found for network "${r}". Available networks: ${Object.keys(m.deposit_addresses||{}).join(", ")}`);return y};return P._x402Defaults={network:s,facilitatorUrl:B},Re.set(P,s),P}function Ue(e,t){if(typeof e=="string"||typeof e=="function")return e;if(t in e)return e[t];let r=`${t.split(":")[0]}:*`;if(r in e)return e[r];if("*"in e)return e["*"];throw new Error(`No payTo configured for network "${t}"`)}function Be(e){let{payTo:t,amount:n,asset:r,description:s,resourceUrl:c,mimeType:u,timeoutSeconds:g,verbose:P=!1,getResourceUrl:T,getAmount:R,getDescription:S}=e,i=P?console.log.bind(console,"[x402:middleware]"):()=>{},x=typeof t=="function"?t._x402Defaults:void 0,f=e.facilitatorUrl??x?.facilitatorUrl,m=e.network?Array.isArray(e.network)?e.network:[e.network]:x?.network?[x.network]:[de],y=new Map;for(let d of m){let h=Ue(t,d);if(typeof h=="function"){let l=Se(h);if(l&&d!==l)throw new Error(`stripePayTo is configured for "${l}" but middleware includes network "${d}". Stripe only supports Base deposit addresses. Use a static payTo for other chains.`)}y.set(d,Y({payTo:h,network:d,asset:r,facilitatorUrl:f,defaultTimeoutSeconds:g}))}let E=y.get(m[0]);return async(d,h,l)=>{try{let b=d.headers["payment-signature"];if(!b){i("No payment signature, returning 402");let _=T?.(d)??c??`${d.protocol}://${d.get("host")}${d.originalUrl}`,k=R?.(d)??n,L=S?.(d)??s,w=r?.decimals??H,O={amountAtomic:G(parseFloat(k),w),resourceUrl:_,description:L,mimeType:u,timeoutSeconds:g},q=[],N=null;for(let[,le]of y)try{let Z=await le.buildRequirements(O);q.push(...Z.accepts),N||(N=Z)}catch(Z){i("Failed to build requirements for a network:",Z)}if(!N||q.length===0){h.status(500).json({error:"Failed to build payment requirements"});return}N={...N,accepts:q};let Q=E.encodeRequirements(N);h.setHeader("PAYMENT-REQUIRED",Q),h.status(402).json({error:"Payment required",accepts:N.accepts,resource:N.resource});return}i("Payment signature received, verifying...");let a=E;try{let k=JSON.parse(Buffer.from(b,"base64").toString())?.accepted?.network;k&&y.has(k)&&(a=y.get(k))}catch{}let p=await a.verifyPayment(b);if(!p.isValid){if(i("Payment verification failed:",p.invalidReason),e.onVerifyFailed)try{await e.onVerifyFailed({reason:p.invalidReason,resourceUrl:`${d.protocol}://${d.get("host")}${d.originalUrl}`})}catch{}h.status(402).json({error:"Payment verification failed",reason:p.invalidReason});return}i("Payment verified, settling...");let o=await a.settlePayment(b);if(!o.success){i("Payment settlement failed:",o.errorReason),h.status(402).json({error:"Payment settlement failed",reason:o.errorReason});return}i("Payment settled:",o.transaction);let A=o.network||m[0];if(e.onSettlement)try{await e.onSettlement({transaction:o.transaction,network:A,payer:p.payer??"",resourceUrl:`${d.protocol}://${d.get("host")}${d.originalUrl}`})}catch{}d.x402={transaction:o.transaction,payer:p.payer??"",network:A};let v={success:!0,transaction:o.transaction,network:A,payer:p.payer??""};if(o.extensions&&(v.extensions=o.extensions),h.setHeader("PAYMENT-RESPONSE",W(v)),e.sponsoredAccess&&o.extensions?.["sponsored-access"]){let _=o.extensions["sponsored-access"],k=_?.info?.recommendations??_?.recommendations;if(k&&k.length>0){if(i("Injecting sponsored-access recommendations into response"),typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.onMatch)try{e.sponsoredAccess.onMatch(k,{transaction:o.transaction,network:A,payer:p.payer??""})}catch{}let L=h.json.bind(h);h.json=function(M){return typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.inject?L(e.sponsoredAccess.inject(M,k)):M&&typeof M=="object"&&!Array.isArray(M)?L({_x402_sponsored:k,...M}):L(M)}}}l()}catch(b){i("Middleware error:",b),h.status(500).json({error:"Payment processing error"})}}}function C(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var $e='<svg width="18" height="18" viewBox="0 0 2000 2000" xmlns="http://www.w3.org/2000/svg"><path d="M1000 2000c554.17 0 1000-445.83 1000-1000S1554.17 0 1000 0 0 445.83 0 1000s445.83 1000 1000 1000z" fill="#2775ca"/><path d="M1275 1158.33c0-145.83-87.5-195.83-262.5-216.66-125-16.67-150-50-150-108.34s41.67-95.83 125-95.83c75 0 116.67 25 137.5 87.5 4.17 12.5 16.67 20.83 29.17 20.83h66.66c16.67 0 29.17-12.5 29.17-29.16v-4.17c-16.67-91.67-91.67-162.5-187.5-170.83v-100c0-16.67-12.5-29.17-33.33-33.34h-62.5c-16.67 0-29.17 12.5-33.34 33.34v95.83c-125 16.67-204.16 100-204.16 204.17 0 137.5 83.33 191.66 258.33 212.5 116.67 20.83 154.17 45.83 154.17 112.5s-58.34 112.5-137.5 112.5c-108.34 0-145.84-45.84-158.34-108.34-4.16-16.66-16.66-25-29.16-25h-70.84c-16.66 0-29.16 12.5-29.16 29.17v4.17c16.66 104.16 83.33 179.16 220.83 200v100c0 16.66 12.5 29.16 33.33 33.33h62.5c16.67 0 29.17-12.5 33.34-33.33v-100c125-20.84 208.33-108.34 208.33-220.84z" fill="#fff"/><path d="M787.5 1595.83c-325-116.66-491.67-479.16-370.83-800 62.5-175 200-308.33 370.83-370.83 16.67-8.33 25-20.83 25-41.67V325c0-16.67-8.33-29.17-25-33.33-4.17 0-12.5 0-16.67 4.16-395.83 125-612.5 545.84-487.5 941.67 75 233.33 254.17 412.5 487.5 487.5 16.67 8.33 33.34 0 37.5-16.67 4.17-4.16 4.17-8.33 4.17-16.66v-58.34c0-12.5-12.5-29.16-25-37.5zM1229.17 295.83c-16.67-8.33-33.34 0-37.5 16.67-4.17 4.17-4.17 8.33-4.17 16.67v58.33c0 16.67 12.5 33.33 25 41.67 325 116.66 491.67 479.16 370.83 800-62.5 175-200 308.33-370.83 370.83-16.67 8.33-25 20.83-25 41.67V1700c0 16.67 8.33 29.17 25 33.33 4.17 0 12.5 0 16.67-4.16 395.83-125 612.5-545.84 487.5-941.67-75-237.5-258.34-416.67-487.5-491.67z" fill="#fff"/></svg>',Le='<svg width="36" height="36" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg"><g><path fill="#F2681A" d="m324.93,313.11c-115.5,0-231,0-350,0l350,0z"/><path fill="#FDFAF5" d="m230.43,50.62c1.1.85 2.19 1.7 3.32 2.57 6.02 4.8 11.77 9.88 17.46 15.07.92.84.92.84 1.86 1.69 1.82 1.69 3.59 3.42 5.35 5.16.61.56 1.22 1.13 1.84 1.71 5.66 5.76 6.18 10.43 6.13 18.3.02 1.16.04 2.32.06 3.52.06 3.83.06 7.65.07 11.48.02 2.68.05 5.35.08 8.03.05 5.6.09 11.21.1 16.81.02 7.15.09 14.31.17 21.46.06 5.53.1 11.05.13 16.58.02 2.64.04 5.27.07 7.91.18 17.58.12 32.82-11.24 47.32-7.35 7.27-16.54 12.06-25.42 17.22-1.97 1.16-3.94 2.33-5.91 3.49-7.16 4.24-14.34 8.44-21.53 12.62-4.8 2.79-9.59 5.6-14.38 8.42-1.25.73-2.5 1.47-3.79 2.23-2.32 1.36-4.64 2.73-6.96 4.1-27.47 16.09-27.47 16.09-42.16 12.93-8.06-2.28-14.94-5.82-22.16-10.02-1.17-.67-2.34-1.34-3.54-2.04-24.55-14.25-43.58-27.03-51.9-55.58-1.07-4.58-1.54-8.92-1.52-13.61.28-9.5.28-9.5-3.3-17.97-1.81-1.49-3.68-2.92-5.59-4.28-9.19-7.06-12.7-20.03-14.18-31.06-.54-5.77-.55-11.56-.6-17.35-.03-1.32-.07-2.63-.1-3.99-.01-1.26-.02-2.53-.03-3.83-.02-1.15-.03-2.29-.05-3.47.72-4.02 1.94-5.36 5.21-7.74 2.89-.53 2.89-.53 6.07-.46 1.71.02 1.71.02 3.46.05 1.19.04 2.37.08 3.59.12 1.2.02 2.41.04 3.65.06 2.97.05 5.93.13 8.9.23.14-1.35.29-2.7.43-4.08.63-5 1.78-9.74 3.14-14.58.22-.79.43-1.59.66-2.4.53-1.92 1.06-3.84 1.6-5.76-1.55-.45-1.55-.45-3.13-.9-9.52-3.52-17.1-10.95-21.37-20.1-3.81-9.26-3.87-20.34-.29-29.68 6.49-13.99 16.36-23.23 30.66-29.01 49.81-17.69 115.79 8.35 155.13 38.85z"/><path fill="#F2671A" d="m142.93,22.62c.86.19 1.73.39 2.62.59 36.12 8.21 68.79 24.98 95.38 50.75 1.02.98 2.03 1.97 3.08 2.98 10.84 10.66 10.84 10.66 11.05 14.62-2.06 3.55-5.44 4.18-9.17 5.3-.79.25-1.59.49-2.41.75-28.13 8.43-60.95 6.37-87.13-7.16-.86-.49-1.71-.97-2.6-1.48-7.37-4.05-12.59-3.36-20.59-1.54-22.76 4-48.47 1.53-68.69-9.74-4.88-3.88-8.23-8.29-10.21-14.22-.93-10.38-.67-18.44 5.83-26.83 19.57-23.38 55.99-20.36 82.83-14z"/><path fill="#F16619" d="m44.93,129.12c27.36-.03 54.72-.05 82.08-.06 12.7-.01 25.41-.01 38.11-.03 11.07-.01 22.14-.02 33.2-.02 5.86 0 11.73-.01 17.59-.01 5.51-.01 11.03-.01 16.54-.01 2.03 0 4.06 0 6.09-.01 2.76-.01 5.52 0 8.28 0 .81 0 1.63-.01 2.47-.01 5.51.02 5.51.02 6.81 1.32.22 3.43.22 3.43 0 7-2.75 2.75-3.42 2.66-7.15 2.82-1.41.07-1.41.07-2.85.14-1.47.05-1.47.05-2.98.11-1.49.07-1.49.07-3 .14-2.45.11-4.9.21-7.35.3-.2 1.3-.4 2.59-.6 3.93-2.57 16.08-5.93 29.89-18.89 40.86-10.35 7.28-21.87 8.49-34.17 7.71-13.11-2.33-22.52-9.19-30.33-19.83-4.49-7.64-4.8-17.05-5.83-25.67-4.24.39-8.47.77-12.83 1.17-.28 1.84-.28 1.84-.56 3.71-2.32 14.39-5.63 23.35-16.95 33.11-2.32 1.67-2.32 1.67-4.65 1.67 4 4.67 9.06 6.59 14.87 8.24 3.79 1.09 3.79 1.09 6.12 3.43-.65 5.31-.65 5.31-2.33 7-8.42-.27-15.13-2.29-22.17-7-1.09-1.21-2.17-2.43-3.25-3.65-2.72-2.81-4.45-3.84-8.36-4.16-1.67-.02-3.34-.02-5.01.01-1.77-.04-3.54-.09-5.3-.15-1.27-.04-1.27-.04-2.56-.08-9.26-.54-17.6-4.56-24.51-10.64-9.58-11.11-11.03-22.56-10.72-36.82.02-1.4.03-2.8.05-4.24.04-3.42.1-6.85.17-10.27z"/><path fill="#F26117" d="m172.68,203.08c7.27.09 13.23 1.97 18.87 6.65 2.88 3.07 3.86 5.12 4.25 9.32-.12 1.01-.24 2.02-.36 3.06-2.55.95-2.55.95-5.83 1.17-3.28-2.84-3.28-2.84-5.83-5.83-.36.58-.71 1.16-1.08 1.75-7.6 11.29-20.06 17.74-33.05 21.09-20.36 3.1-36.81-1.66-53.37-13.73-2.33-2.11-2.33-2.11-4.67-5.61.42-3.45.99-4.49 3.5-7 4.07.37 5.95 2.13 8.75 4.96 9.81 8.93 22.53 11.87 35.51 11.69 11.74-1.05 22.38-5.85 31.57-13.15 2.06-2.45 2.06-2.45 3.5-4.67-1.66.07-1.66.07-3.35.15-3.65-.15-3.65-.15-5.98-2.48.75-6.18 1.46-7.19 7.58-7.36z"/></g></svg>',qe=`
|
|
2
2
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Orbitron:wght@500;700&display=swap');
|
|
3
3
|
*{margin:0;padding:0;box-sizing:border-box}
|
|
4
4
|
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:#0a0a0a;color:#e2e8f0;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem}
|
|
@@ -20,7 +20,7 @@ h1{font-family:'Orbitron',sans-serif;font-size:1.15rem;font-weight:700;color:#f1
|
|
|
20
20
|
.footer a{color:#525252;text-decoration:none}
|
|
21
21
|
.footer a:hover{color:#737373}
|
|
22
22
|
.sep{width:3px;height:3px;border-radius:50%;background:#333}
|
|
23
|
-
`,
|
|
23
|
+
`,Fe=`
|
|
24
24
|
.pay-section{margin:1.25rem 0}
|
|
25
25
|
.pay-btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;background:linear-gradient(135deg,#F26B1A,#D13F00);color:#fff;border:none;padding:.65rem 2rem;border-radius:6px;font-family:'Inter',sans-serif;font-size:.95rem;font-weight:600;cursor:pointer;transition:opacity .15s,transform .1s;min-width:180px}
|
|
26
26
|
.pay-btn:hover:not(:disabled){opacity:.9;transform:translateY(-1px)}
|
|
@@ -36,7 +36,7 @@ h1{font-family:'Orbitron',sans-serif;font-size:1.15rem;font-weight:700;color:#f1
|
|
|
36
36
|
.result-box{background:rgba(34,197,94,.06);border:1px solid rgba(34,197,94,.15);border-radius:6px;padding:.75rem;margin-top:.75rem;text-align:left;font-size:.78rem;max-height:200px;overflow:auto}
|
|
37
37
|
.result-box pre{color:#94a3b8;font-family:'SF Mono',Monaco,Consolas,monospace;white-space:pre-wrap;word-break:break-all}
|
|
38
38
|
.no-wallet{font-size:.82rem;color:#737373;margin:1rem 0}
|
|
39
|
-
`,
|
|
39
|
+
`,We=`
|
|
40
40
|
<script type="module">
|
|
41
41
|
// Payment data is embedded in #x402-data attributes
|
|
42
42
|
const dataEl = document.getElementById('x402-data');
|
|
@@ -233,25 +233,25 @@ if (btn) {
|
|
|
233
233
|
});
|
|
234
234
|
}
|
|
235
235
|
</script>
|
|
236
|
-
`;function
|
|
236
|
+
`;function Ke(e,t,n,r,s,c){let u="?",g="This resource requires payment",P="";try{let S=JSON.parse(Buffer.from(e,"base64").toString()),i=S.accepts?.[0];if(i){let x=i.amount??i.maxAmountRequired??"0",f=i.extra?.decimals||6;u=(Number(x)/Math.pow(10,f)).toFixed(f>4?4:2),P=i.network||""}S.resource?.description&&(g=S.resource.description)}catch{}let T=P.includes("solana")?"Solana":P.includes("eip155")?"Base":"",R=r.showEndpoint?`<div class="endpoint"><code>${C(n)} ${C(t)}</code></div>`:"";return`<!DOCTYPE html>
|
|
237
237
|
<html lang="en">
|
|
238
238
|
<head>
|
|
239
239
|
<meta charset="utf-8">
|
|
240
240
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
241
|
-
<title>${
|
|
242
|
-
<style>${
|
|
241
|
+
<title>${C(r.title)} \u2014 ${C(u)} USDC</title>
|
|
242
|
+
<style>${qe}${Fe}</style>
|
|
243
243
|
</head>
|
|
244
244
|
<body>
|
|
245
245
|
<div class="card">
|
|
246
|
-
<div class="crest">${
|
|
247
|
-
<h1>${
|
|
248
|
-
<p class="desc">${
|
|
249
|
-
<div class="price">${
|
|
250
|
-
<div class="chain">${
|
|
251
|
-
${
|
|
246
|
+
<div class="crest">${Le}</div>
|
|
247
|
+
<h1>${C(r.title)}</h1>
|
|
248
|
+
<p class="desc">${C(g)}</p>
|
|
249
|
+
<div class="price">${$e}<span id="price-value">${C(u)}</span></div>
|
|
250
|
+
<div class="chain">${C(T)}${T?" network":""}</div>
|
|
251
|
+
${R}
|
|
252
252
|
|
|
253
253
|
<div id="pay-section" class="pay-section" style="display:none">
|
|
254
|
-
<button id="pay-btn" class="pay-btn">Pay ${
|
|
254
|
+
<button id="pay-btn" class="pay-btn">Pay ${u}</button>
|
|
255
255
|
<div id="pay-status" class="pay-status"></div>
|
|
256
256
|
<div class="pay-alt">or use <a href="${r.sdkUrl}">x402 SDK</a> for programmatic access</div>
|
|
257
257
|
</div>
|
|
@@ -276,11 +276,11 @@ if (btn) {
|
|
|
276
276
|
data-requirements="${e}"
|
|
277
277
|
data-method="${n}"
|
|
278
278
|
data-url="${t}"
|
|
279
|
-
data-rpc="${
|
|
279
|
+
data-rpc="${s}"
|
|
280
280
|
data-body="${c?Buffer.from(c).toString("base64"):""}"
|
|
281
281
|
></div>
|
|
282
|
-
${
|
|
282
|
+
${We}
|
|
283
283
|
</body>
|
|
284
|
-
</html>`}function Oe(e={}){let t={title:e.title??"Payment Required",branding:e.branding??'Powered by <a href="https://docs.dexter.cash/docs/sdk/">Dexter x402</a>',sdkUrl:e.sdkUrl??"https://docs.dexter.cash/docs/sdk/",showEndpoint:e.showEndpoint??!0},n=e.rpcUrl??"https://api.dexter.cash/api/solana/rpc";return(r,i,c)=>{let d=i.json.bind(i);i.json=function(g){if(i.statusCode===402&&r.accepts("html")&&!r.headers["payment-signature"]){let P=i.getHeader("PAYMENT-REQUIRED")||i.getHeader("payment-required");if(P&&typeof P=="string"){let w;if(r.body&&typeof r.body=="object"&&Object.keys(r.body).length>0)try{w=JSON.stringify(r.body)}catch{}let k=Ce(P,r.originalUrl,r.method,t,n,w);return i.setHeader("Content-Security-Policy","default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; connect-src *; img-src data:; frame-ancestors 'none'"),i.setHeader("X-Content-Type-Options","nosniff"),i.status(402).type("html").send(k),i}}return d(g)},c()}}import te from"crypto";var Ne=/^(\d+)(m|h|d|w)$/;function Ie(e){let t=e.match(Ne);if(!t)return null;let n=parseInt(t[1],10);switch(t[2]){case"m":return n*60;case"h":return n*3600;case"d":return n*86400;case"w":return n*604800;default:return null}}function de(e){return e>=604800&&e%604800===0?`${e/604800} week${e/604800>1?"s":""}`:e>=86400&&e%86400===0?`${e/86400} day${e/86400>1?"s":""}`:e>=3600&&e%3600===0?`${e/3600} hour${e/3600>1?"s":""}`:e>=60&&e%60===0?`${e/60} minute${e/60>1?"s":""}`:`${e} second${e>1?"s":""}`}function Ue(e,t){let n=Buffer.from(JSON.stringify({alg:"HS256",typ:"JWT"})).toString("base64url"),r=Buffer.from(JSON.stringify(e)).toString("base64url"),i=te.createHmac("sha256",t).update(`${n}.${r}`).digest("base64url");return`${n}.${r}.${i}`}function De(e,t){try{let n=e.split(".");if(n.length!==3)return null;let[r,i,c]=n,d=te.createHmac("sha256",t).update(`${r}.${i}`).digest("base64url");if(c!==d)return null;let g=JSON.parse(Buffer.from(i,"base64url").toString());return g.exp&&Date.now()/1e3>g.exp||g.sub!=="x402-access-pass"?null:g}catch{return null}}var Be="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",$e=6;function qe(e){let{payTo:t,network:n=Be,asset:r,facilitatorUrl:i,tiers:c,ratePerHour:d,secret:g,issuer:P="x402-access-pass",verbose:w=!1,description:k}=e,A=g??te.randomBytes(32);if(g||console.warn("[x402:access-pass] No secret provided \u2014 access passes will be invalidated on server restart. Set `secret` for production use."),!c&&!d)throw new Error("x402AccessPass: at least one of `tiers` or `ratePerHour` is required");let o=w?console.log.bind(console,"[x402:access-pass]"):()=>{},x=r?.decimals??$e,f=[];if(c){for(let[l,b]of Object.entries(c)){let a=Ie(l);if(!a){console.warn(`x402AccessPass: skipping tier "${l}" \u2014 unrecognized duration format (use 5m, 1h, 24h, 7d)`);continue}f.push({id:l,label:de(a),seconds:a,price:b,priceAtomic:V(parseFloat(b),x)})}f.sort((l,b)=>l.seconds-b.seconds)}let m=K({payTo:t,network:n,asset:r,facilitatorUrl:i}),y={tiers:f.length>0?f:void 0,ratePerHour:d||void 0,issuer:P},S=F(y);function u(l){if(!d)throw new Error("Custom durations not supported \u2014 no ratePerHour configured");let b=l/3600,a=(parseFloat(d)*b).toFixed(x>4?4:2);return{price:a,priceAtomic:V(parseFloat(a),x)}}function h(l){let b=l.query.tier,a=l.query.duration;if(b){let s=f.find(R=>R.id===b);if(s)return{tier:s.id,seconds:s.seconds,price:s.price,priceAtomic:s.priceAtomic,label:s.label}}if(a){let s=parseInt(a,10);if(s>0&&d){let R=u(s);return{tier:"custom",seconds:s,...R,label:de(s)}}}if(f.length>0){let s=f[0];return{tier:s.id,seconds:s.seconds,price:s.price,priceAtomic:s.priceAtomic,label:s.label}}return{tier:"custom",seconds:3600,...u(3600),label:"1 hour"}}return async(l,b,a)=>{try{let p=l.headers.authorization;if(p?.startsWith("Bearer ")){let T=De(p.slice(7),A);if(T)return o("Valid access pass:",T.tier,"| expires:",new Date(T.exp*1e3).toISOString()),l.accessPass={tier:T.tier,duration:T.duration,expiresAt:new Date(T.exp*1e3).toISOString(),payer:T.payer,network:T.network},a();o("Invalid or expired access pass token")}let s=l.headers["payment-signature"];if(s){o("Payment signature received, verifying for pass purchase...");let T=await m.verifyPayment(s);if(!T.isValid){o("Payment verification failed:",T.invalidReason),b.status(402).json({error:"Payment verification failed",reason:T.invalidReason});return}let v=await m.settlePayment(s);if(!v.success){o("Payment settlement failed:",v.errorReason),b.status(402).json({error:"Payment settlement failed",reason:v.errorReason});return}o("Payment settled:",v.transaction);let O=h(l),q=Math.floor(Date.now()/1e3),C={sub:"x402-access-pass",tier:O.tier,duration:O.seconds,iat:q,exp:q+O.seconds,payer:T.payer??"",network:n,iss:P},X=Ue(C,A);l.x402={transaction:v.transaction,payer:T.payer??"",network:n};let Z={success:!0,transaction:v.transaction,network:n,payer:T.payer??""};b.setHeader("PAYMENT-RESPONSE",F(Z)),b.setHeader("ACCESS-PASS",X),b.json({accessPass:{token:X,tier:O.tier,duration:O.label,durationSeconds:O.seconds,expiresAt:new Date((q+O.seconds)*1e3).toISOString(),usage:"Include on subsequent requests as: Authorization: Bearer <token>"},transaction:v.transaction,payer:T.payer});return}o("No access pass or payment, returning 402");let R=h(l),_=R.priceAtomic,E=`${l.protocol}://${l.get("host")}${l.originalUrl}`,M=await m.buildRequirements({amountAtomic:_,resourceUrl:E,description:k||`Access pass: ${R.label}`,mimeType:"application/json"}),$=m.encodeRequirements(M);b.setHeader("PAYMENT-REQUIRED",$),b.setHeader("X-ACCESS-PASS-TIERS",S),b.status(402).json({error:"Access pass required",message:"Purchase an access pass to unlock unlimited API access for a time window.",accepts:M.accepts,resource:M.resource,accessPass:{tiers:f.length>0?f:void 0,ratePerHour:d||void 0,usage:"Add ?tier=<id> or ?duration=<seconds> to your payment request to choose a pass duration."}})}catch(p){o("Access pass middleware error:",p),b.status(500).json({error:"Payment processing error",message:p instanceof Error?p.message:"Unknown error"})}}}import{createHmac as Fe,randomBytes as We}from"crypto";var ze=300;function Le(e){let t={unitSize:e.unitSize,ratePerUnit:e.ratePerUnit,minUsd:e.minUsd??.01,maxUsd:e.maxUsd??1/0,roundingMode:e.roundingMode??"ceil",decimals:e.decimals??6},{unitSize:n,ratePerUnit:r,minUsd:i,maxUsd:c,roundingMode:d,decimals:g}=t;if(n<=0)throw new Error("unitSize must be positive");if(r<=0)throw new Error("ratePerUnit must be positive");if(i<0)throw new Error("minUsd cannot be negative");if(c<i)throw new Error("maxUsd must be >= minUsd");let P=We(32);function w(o,x){let f=JSON.stringify({unitSize:n,ratePerUnit:r,minUsd:i,maxUsd:c===1/0?"none":c,roundingMode:d}),m=`${o}|${f}|${x}`;return Fe("sha256",P).update(m).digest("hex").slice(0,16)}function k(o){let x=o.length,f=x/n,m;switch(d){case"ceil":m=Math.ceil(f);break;case"floor":m=Math.floor(f);break;case"round":m=Math.round(f);break}x>0&&m===0&&(m=1);let y=m*r;y=Math.max(i,y),y=Math.min(c,y);let S=Math.pow(10,g),u=Math.floor(y*S).toString(),h=Math.floor(Date.now()/1e3),l=w(o,h),b=`${h}.${l}`;return{amountAtomic:u,usdAmount:y,quoteHash:b,units:m,inputLength:x}}function A(o,x){if(!x)return!1;let f=x.indexOf(".");if(f===-1)return!1;let m=parseInt(x.slice(0,f),10),y=x.slice(f+1);if(isNaN(m)||!y)return!1;let S=Math.floor(Date.now()/1e3)-m;if(S<0||S>ze)return!1;let u=w(o,m);if(y.length!==u.length)return!1;let h=0;for(let l=0;l<y.length;l++)h|=y.charCodeAt(l)^u.charCodeAt(l);return h===0}return{calculate:k,validateQuote:A,config:t}}function Ve(e){let t=e.ratePerUnit.toFixed(2),n=e.unitSize.toLocaleString();return`from $${t} per ${n} chars`}import{createHash as tt}from"crypto";var I={usesMaxCompletionTokens:!1,supportsTemperature:!0,supportsTopP:!0,supportsFrequencyPenalty:!0,supportsPresencePenalty:!0,supportsReasoningEffort:!1,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},W={usesMaxCompletionTokens:!0,supportsTemperature:!1,supportsTopP:!1,supportsFrequencyPenalty:!1,supportsPresencePenalty:!1,supportsReasoningEffort:!1,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},B={usesMaxCompletionTokens:!0,supportsTemperature:!1,supportsTopP:!1,supportsFrequencyPenalty:!1,supportsPresencePenalty:!1,supportsReasoningEffort:!0,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},le={...B,supportsStreaming:!1},U=[{id:"gpt-4o-mini",displayName:"GPT-4o Mini",family:"gpt-4o",tier:"fast",capabilityRank:3,modalities:["text","vision"],apiType:"chat",pricing:{input:.15,output:.6,cached:.075},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:I,deprecated:!1,description:"Fast, affordable small model with vision support"},{id:"gpt-4.1-nano",displayName:"GPT-4.1 Nano",family:"gpt-4.1",tier:"fast",capabilityRank:2,modalities:["text"],apiType:"chat",pricing:{input:.1,output:.4,cached:.025},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Smallest 4.1 model, very fast and cheap"},{id:"gpt-4.1-mini",displayName:"GPT-4.1 Mini",family:"gpt-4.1",tier:"fast",capabilityRank:4,modalities:["text"],apiType:"chat",pricing:{input:.4,output:1.6,cached:.1},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Balanced 4.1 model, good price/performance"},{id:"gpt-5-nano",displayName:"GPT-5 Nano",family:"gpt-5",tier:"fast",capabilityRank:1,modalities:["text"],apiType:"chat",pricing:{input:.05,output:.4,cached:.005},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:W,deprecated:!1,description:"Cheapest GPT-5 variant, extremely fast"},{id:"gpt-5-mini",displayName:"GPT-5 Mini",family:"gpt-5",tier:"fast",capabilityRank:5,modalities:["text"],apiType:"chat",pricing:{input:.25,output:2,cached:.025},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Small but capable GPT-5, great value"},{id:"gpt-4o",displayName:"GPT-4o",family:"gpt-4o",tier:"standard",capabilityRank:5,modalities:["text","vision"],apiType:"chat",pricing:{input:2.5,output:10,cached:1.25},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:I,deprecated:!1,description:"Flagship multimodal model with vision"},{id:"gpt-4.1",displayName:"GPT-4.1",family:"gpt-4.1",tier:"standard",capabilityRank:6,modalities:["text"],apiType:"chat",pricing:{input:2,output:8,cached:.5},contextWindow:1e6,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Long context specialist, 1M token window"},{id:"gpt-5",displayName:"GPT-5",family:"gpt-5",tier:"standard",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:1.25,output:10,cached:.125},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Base GPT-5, excellent all-around"},{id:"gpt-5.1",displayName:"GPT-5.1",family:"gpt-5",tier:"standard",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:1.25,output:10,cached:.125},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Improved GPT-5 with better instruction following"},{id:"gpt-5.2",displayName:"GPT-5.2",family:"gpt-5",tier:"standard",capabilityRank:9,modalities:["text"],apiType:"chat",pricing:{input:1.75,output:14,cached:.175},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Latest GPT-5, most capable standard model"},{id:"o1-mini",displayName:"o1 Mini",family:"o1",tier:"reasoning",capabilityRank:3,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.55},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:B,deprecated:!1,description:"Fast reasoning model, good for math/code"},{id:"o3-mini",displayName:"o3 Mini",family:"o3",tier:"reasoning",capabilityRank:4,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.55},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:B,deprecated:!1,description:"Improved mini reasoner with better efficiency"},{id:"o4-mini",displayName:"o4 Mini",family:"o4",tier:"reasoning",capabilityRank:5,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.275},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:B,deprecated:!1,description:"Latest mini reasoner, best reasoning per dollar"},{id:"o3",displayName:"o3",family:"o3",tier:"reasoning",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:2,output:8,cached:.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:B,deprecated:!1,description:"Full o3 reasoning model, excellent for complex problems"},{id:"o1",displayName:"o1",family:"o1",tier:"reasoning",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:15,output:60,cached:7.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:B,deprecated:!1,description:"Original full reasoning model, very capable"},{id:"gpt-5-pro",displayName:"GPT-5 Pro",family:"gpt-5",tier:"premium",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:15,output:120},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Enhanced GPT-5 for demanding tasks"},{id:"gpt-5.2-pro",displayName:"GPT-5.2 Pro",family:"gpt-5",tier:"premium",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:21,output:168},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:32768,parameters:W,deprecated:!1,description:"Most capable standard model available"},{id:"o3-pro",displayName:"o3 Pro",family:"o3",tier:"premium",capabilityRank:9,modalities:["text"],apiType:"chat",pricing:{input:20,output:80},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:le,deprecated:!1,description:"Premium o3 with extended thinking time"},{id:"o1-pro",displayName:"o1 Pro",family:"o1",tier:"premium",capabilityRank:10,modalities:["text"],apiType:"chat",pricing:{input:150,output:600},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:le,deprecated:!1,description:"Most capable reasoning model, extended compute"},{id:"o3-deep-research",displayName:"o3 Deep Research",family:"o3",tier:"specialized",capabilityRank:8,modalities:["text"],apiType:"responses",pricing:{input:10,output:40,cached:2.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:{...B,supportsStreaming:!1},deprecated:!1,description:"Extended research sessions with web access"},{id:"o4-mini-deep-research",displayName:"o4 Mini Deep Research",family:"o4",tier:"specialized",capabilityRank:6,modalities:["text"],apiType:"responses",pricing:{input:2,output:8,cached:.5},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:{...B,supportsStreaming:!1},deprecated:!1,description:"Affordable deep research with o4 mini"},{id:"computer-use-preview",displayName:"Computer Use Preview",family:"computer-use",tier:"specialized",capabilityRank:5,modalities:["text","vision"],apiType:"responses",pricing:{input:3,output:12},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Can control computer interfaces via screenshots"},{id:"gpt-realtime",displayName:"GPT Realtime",family:"gpt-realtime",tier:"specialized",capabilityRank:7,modalities:["text","audio","realtime"],apiType:"chat",pricing:{input:4,output:16,cached:.4},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Real-time audio conversation model"},{id:"gpt-realtime-mini",displayName:"GPT Realtime Mini",family:"gpt-realtime",tier:"specialized",capabilityRank:4,modalities:["text","audio","realtime"],apiType:"chat",pricing:{input:.6,output:2.4,cached:.06},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Affordable real-time audio model"},{id:"gpt-4o-2024-05-13",displayName:"GPT-4o (May 2024)",family:"gpt-4o",tier:"standard",capabilityRank:4,modalities:["text","vision"],apiType:"chat",pricing:{input:5,output:15},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:I,deprecated:!0,description:"Original GPT-4o snapshot, use gpt-4o instead"}],re=new Map(U.map(e=>[e.id,e]));function ne(e){let t=re.get(e);if(!t)throw new Error(`Unknown model: ${e}. Use getAvailableModelIds() to see valid options.`);return t}function je(e){return re.get(e)}function Ge(e){return re.has(e)}function He(){return U.map(e=>e.id)}function Ke(e){return U.filter(t=>t.tier===e&&!t.deprecated).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function Xe(e){return U.filter(t=>t.family===e).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function Je(){let e={fast:1,standard:2,reasoning:3,premium:4,specialized:5};return U.filter(t=>!t.deprecated).sort((t,n)=>{let r=e[t.tier]-e[n.tier];return r!==0?r:t.capabilityRank-n.capabilityRank})}function Ye(){return U.filter(e=>!e.deprecated&&e.modalities.includes("text")&&!e.modalities.includes("realtime")&&e.apiType!=="responses").sort((e,t)=>{let n={fast:1,standard:2,reasoning:3,premium:4,specialized:5},r=n[e.tier]-n[t.tier];return r!==0?r:e.capabilityRank-t.capabilityRank})}function Qe(e="fast"){let t={fast:1,standard:2,reasoning:3,premium:4,specialized:5},n=t[e];return U.filter(i=>!i.deprecated&&t[i.tier]>=n).sort((i,c)=>i.pricing.input-c.pricing.input)[0]}function Ze(e,t,n,r=!1){let i=ne(e),c=r&&i.pricing.cached?t/1e6*i.pricing.cached:t/1e6*i.pricing.input,d=n/1e6*i.pricing.output;return c+d}function et(e){let t=ne(e);return`$${t.pricing.input.toFixed(2)} in / $${t.pricing.output.toFixed(2)} out per 1M tokens`}var ie=Object.fromEntries(U.map(e=>[e.id,{input:e.pricing.input,output:e.pricing.output,cached:e.pricing.cached,maxTokens:e.defaultMaxOutput,tier:e.tier}]));var Q=null;async function rt(){if(Q)return Q;try{return Q=await import("tiktoken"),Q}catch{throw new Error('Token pricing requires the "tiktoken" package. Install with: npm install tiktoken')}}var D=ie,z="gpt-4o-mini";async function nt(e){let t=await rt();try{return t.encoding_for_model(e)}catch{return t.get_encoding("cl100k_base")}}async function se(e,t=z){let n=await nt(t);try{return n.encode(e).length}finally{n.free()}}function me(e,t,n,r){let i=JSON.stringify({model:t,rate:n,tokens:r});return tt("sha256").update(e+i).digest("hex").slice(0,16)}function it(e={}){let t=e.model??z,n=D[t],r={input:e.inputRate??n?.input??D[z].input,output:e.outputRate??n?.output??D[z].output,maxTokens:e.maxTokens??n?.maxTokens??4096,tier:e.tier??n?.tier??"custom"},i=e.tokenizer,c={model:t,inputRate:r.input,outputRate:r.output,maxTokens:r.maxTokens,tier:r.tier,tokenizer:i??(o=>se(o,t)),minUsd:e.minUsd??.001,maxUsd:e.maxUsd??50,decimals:e.decimals??6},{minUsd:d,maxUsd:g,decimals:P}=c;async function w(o){return i?i(o):se(o,t)}async function k(o,x){let f=x?`${x}
|
|
284
|
+
</html>`}function Ve(e={}){let t={title:e.title??"Payment Required",branding:e.branding??'Powered by <a href="https://docs.dexter.cash/docs/sdk/">Dexter x402</a>',sdkUrl:e.sdkUrl??"https://docs.dexter.cash/docs/sdk/",showEndpoint:e.showEndpoint??!0},n=e.rpcUrl??"https://api.dexter.cash/api/solana/rpc";return(r,s,c)=>{let u=s.json.bind(s);s.json=function(g){if(s.statusCode===402&&r.accepts("html")&&!r.headers["payment-signature"]){let P=s.getHeader("PAYMENT-REQUIRED")||s.getHeader("payment-required");if(P&&typeof P=="string"){let T;if(r.body&&typeof r.body=="object"&&Object.keys(r.body).length>0)try{T=JSON.stringify(r.body)}catch{}let R=Ke(P,r.originalUrl,r.method,t,n,T);return s.setHeader("Content-Security-Policy","default-src 'none'; style-src 'unsafe-inline'; script-src 'unsafe-inline'; connect-src *; img-src data:; frame-ancestors 'none'"),s.setHeader("X-Content-Type-Options","nosniff"),s.status(402).type("html").send(R),s}}return u(g)},c()}}import fe from"crypto";var ze=/^(\d+)(m|h|d|w)$/;function He(e){let t=e.match(ze);if(!t)return null;let n=parseInt(t[1],10);switch(t[2]){case"m":return n*60;case"h":return n*3600;case"d":return n*86400;case"w":return n*604800;default:return null}}function Ee(e){return e>=604800&&e%604800===0?`${e/604800} week${e/604800>1?"s":""}`:e>=86400&&e%86400===0?`${e/86400} day${e/86400>1?"s":""}`:e>=3600&&e%3600===0?`${e/3600} hour${e/3600>1?"s":""}`:e>=60&&e%60===0?`${e/60} minute${e/60>1?"s":""}`:`${e} second${e>1?"s":""}`}function Ge(e,t){let n=Buffer.from(JSON.stringify({alg:"HS256",typ:"JWT"})).toString("base64url"),r=Buffer.from(JSON.stringify(e)).toString("base64url"),s=fe.createHmac("sha256",t).update(`${n}.${r}`).digest("base64url");return`${n}.${r}.${s}`}function je(e,t){try{let n=e.split(".");if(n.length!==3)return null;let[r,s,c]=n,u=fe.createHmac("sha256",t).update(`${r}.${s}`).digest("base64url");if(c!==u)return null;let g=JSON.parse(Buffer.from(s,"base64url").toString());return g.exp&&Date.now()/1e3>g.exp||g.sub!=="x402-access-pass"?null:g}catch{return null}}function Xe(e){let{payTo:t,network:n=de,asset:r,facilitatorUrl:s,tiers:c,ratePerHour:u,secret:g,issuer:P="x402-access-pass",verbose:T=!1,description:R}=e,S=g??fe.randomBytes(32);if(g||console.warn("[x402:access-pass] No secret provided \u2014 access passes will be invalidated on server restart. Set `secret` for production use."),!c&&!u)throw new Error("x402AccessPass: at least one of `tiers` or `ratePerHour` is required");let i=T?console.log.bind(console,"[x402:access-pass]"):()=>{},x=r?.decimals??H,f=[];if(c){for(let[l,b]of Object.entries(c)){let a=He(l);if(!a){console.warn(`x402AccessPass: skipping tier "${l}" \u2014 unrecognized duration format (use 5m, 1h, 24h, 7d)`);continue}f.push({id:l,label:Ee(a),seconds:a,price:b,priceAtomic:G(parseFloat(b),x)})}f.sort((l,b)=>l.seconds-b.seconds)}let m=Y({payTo:t,network:n,asset:r,facilitatorUrl:s}),y={tiers:f.length>0?f:void 0,ratePerHour:u||void 0,issuer:P},E=W(y);function d(l){if(!u)throw new Error("Custom durations not supported \u2014 no ratePerHour configured");let b=l/3600,a=(parseFloat(u)*b).toFixed(x>4?4:2);return{price:a,priceAtomic:G(parseFloat(a),x)}}function h(l){let b=l.query.tier,a=l.query.duration;if(b){let o=f.find(A=>A.id===b);if(o)return{tier:o.id,seconds:o.seconds,price:o.price,priceAtomic:o.priceAtomic,label:o.label}}if(a){let o=parseInt(a,10);if(o>0&&u){let A=d(o);return{tier:"custom",seconds:o,...A,label:Ee(o)}}}if(f.length>0){let o=f[0];return{tier:o.id,seconds:o.seconds,price:o.price,priceAtomic:o.priceAtomic,label:o.label}}return{tier:"custom",seconds:3600,...d(3600),label:"1 hour"}}return async(l,b,a)=>{try{let p=l.headers.authorization;if(p?.startsWith("Bearer ")){let w=je(p.slice(7),S);if(w)return i("Valid access pass:",w.tier,"| expires:",new Date(w.exp*1e3).toISOString()),l.accessPass={tier:w.tier,duration:w.duration,expiresAt:new Date(w.exp*1e3).toISOString(),payer:w.payer,network:w.network},a();i("Invalid or expired access pass token")}let o=l.headers["payment-signature"];if(o){i("Payment signature received, verifying for pass purchase...");let w=await m.verifyPayment(o);if(!w.isValid){i("Payment verification failed:",w.invalidReason),b.status(402).json({error:"Payment verification failed",reason:w.invalidReason});return}let M=await m.settlePayment(o);if(!M.success){i("Payment settlement failed:",M.errorReason),b.status(402).json({error:"Payment settlement failed",reason:M.errorReason});return}i("Payment settled:",M.transaction);let O=h(l),q=Math.floor(Date.now()/1e3),N={sub:"x402-access-pass",tier:O.tier,duration:O.seconds,iat:q,exp:q+O.seconds,payer:w.payer??"",network:n,iss:P},Q=Ge(N,S);l.x402={transaction:M.transaction,payer:w.payer??"",network:n};let le={success:!0,transaction:M.transaction,network:n,payer:w.payer??""};b.setHeader("PAYMENT-RESPONSE",W(le)),b.setHeader("ACCESS-PASS",Q),b.json({accessPass:{token:Q,tier:O.tier,duration:O.label,durationSeconds:O.seconds,expiresAt:new Date((q+O.seconds)*1e3).toISOString(),usage:"Include on subsequent requests as: Authorization: Bearer <token>"},transaction:M.transaction,payer:w.payer});return}i("No access pass or payment, returning 402");let A=h(l),v=A.priceAtomic,_=`${l.protocol}://${l.get("host")}${l.originalUrl}`,k=await m.buildRequirements({amountAtomic:v,resourceUrl:_,description:R||`Access pass: ${A.label}`,mimeType:"application/json"}),L=m.encodeRequirements(k);b.setHeader("PAYMENT-REQUIRED",L),b.setHeader("X-ACCESS-PASS-TIERS",E),b.status(402).json({error:"Access pass required",message:"Purchase an access pass to unlock unlimited API access for a time window.",accepts:k.accepts,resource:k.resource,accessPass:{tiers:f.length>0?f:void 0,ratePerHour:u||void 0,usage:"Add ?tier=<id> or ?duration=<seconds> to your payment request to choose a pass duration."}})}catch(p){i("Access pass middleware error:",p),b.status(500).json({error:"Payment processing error",message:p instanceof Error?p.message:"Unknown error"})}}}import{createHmac as Je,randomBytes as Ye}from"crypto";var Qe=300;function Ze(e){let t={unitSize:e.unitSize,ratePerUnit:e.ratePerUnit,minUsd:e.minUsd??.01,maxUsd:e.maxUsd??1/0,roundingMode:e.roundingMode??"ceil",decimals:e.decimals??6},{unitSize:n,ratePerUnit:r,minUsd:s,maxUsd:c,roundingMode:u,decimals:g}=t;if(n<=0)throw new Error("unitSize must be positive");if(r<=0)throw new Error("ratePerUnit must be positive");if(s<0)throw new Error("minUsd cannot be negative");if(c<s)throw new Error("maxUsd must be >= minUsd");let P=Ye(32);function T(i,x){let f=JSON.stringify({unitSize:n,ratePerUnit:r,minUsd:s,maxUsd:c===1/0?"none":c,roundingMode:u}),m=`${i}|${f}|${x}`;return Je("sha256",P).update(m).digest("hex").slice(0,16)}function R(i){let x=i.length,f=x/n,m;switch(u){case"ceil":m=Math.ceil(f);break;case"floor":m=Math.floor(f);break;case"round":m=Math.round(f);break}x>0&&m===0&&(m=1);let y=m*r;y=Math.max(s,y),y=Math.min(c,y);let E=Math.pow(10,g),d=Math.floor(y*E).toString(),h=Math.floor(Date.now()/1e3),l=T(i,h),b=`${h}.${l}`;return{amountAtomic:d,usdAmount:y,quoteHash:b,units:m,inputLength:x}}function S(i,x){if(!x)return!1;let f=x.indexOf(".");if(f===-1)return!1;let m=parseInt(x.slice(0,f),10),y=x.slice(f+1);if(isNaN(m)||!y)return!1;let E=Math.floor(Date.now()/1e3)-m;if(E<0||E>Qe)return!1;let d=T(i,m);if(y.length!==d.length)return!1;let h=0;for(let l=0;l<y.length;l++)h|=y.charCodeAt(l)^d.charCodeAt(l);return h===0}return{calculate:R,validateQuote:S,config:t}}function et(e){let t=e.ratePerUnit.toFixed(2),n=e.unitSize.toLocaleString();return`from $${t} per ${n} chars`}import{createHash as ut}from"crypto";var I={usesMaxCompletionTokens:!1,supportsTemperature:!0,supportsTopP:!0,supportsFrequencyPenalty:!0,supportsPresencePenalty:!0,supportsReasoningEffort:!1,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},K={usesMaxCompletionTokens:!0,supportsTemperature:!1,supportsTopP:!1,supportsFrequencyPenalty:!1,supportsPresencePenalty:!1,supportsReasoningEffort:!1,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},$={usesMaxCompletionTokens:!0,supportsTemperature:!1,supportsTopP:!1,supportsFrequencyPenalty:!1,supportsPresencePenalty:!1,supportsReasoningEffort:!0,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},ke={...$,supportsStreaming:!1},D=[{id:"gpt-4o-mini",displayName:"GPT-4o Mini",family:"gpt-4o",tier:"fast",capabilityRank:3,modalities:["text","vision"],apiType:"chat",pricing:{input:.15,output:.6,cached:.075},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:I,deprecated:!1,description:"Fast, affordable small model with vision support"},{id:"gpt-4.1-nano",displayName:"GPT-4.1 Nano",family:"gpt-4.1",tier:"fast",capabilityRank:2,modalities:["text"],apiType:"chat",pricing:{input:.1,output:.4,cached:.025},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Smallest 4.1 model, very fast and cheap"},{id:"gpt-4.1-mini",displayName:"GPT-4.1 Mini",family:"gpt-4.1",tier:"fast",capabilityRank:4,modalities:["text"],apiType:"chat",pricing:{input:.4,output:1.6,cached:.1},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Balanced 4.1 model, good price/performance"},{id:"gpt-5-nano",displayName:"GPT-5 Nano",family:"gpt-5",tier:"fast",capabilityRank:1,modalities:["text"],apiType:"chat",pricing:{input:.05,output:.4,cached:.005},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:K,deprecated:!1,description:"Cheapest GPT-5 variant, extremely fast"},{id:"gpt-5-mini",displayName:"GPT-5 Mini",family:"gpt-5",tier:"fast",capabilityRank:5,modalities:["text"],apiType:"chat",pricing:{input:.25,output:2,cached:.025},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Small but capable GPT-5, great value"},{id:"gpt-4o",displayName:"GPT-4o",family:"gpt-4o",tier:"standard",capabilityRank:5,modalities:["text","vision"],apiType:"chat",pricing:{input:2.5,output:10,cached:1.25},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:I,deprecated:!1,description:"Flagship multimodal model with vision"},{id:"gpt-4.1",displayName:"GPT-4.1",family:"gpt-4.1",tier:"standard",capabilityRank:6,modalities:["text"],apiType:"chat",pricing:{input:2,output:8,cached:.5},contextWindow:1e6,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:I,deprecated:!1,description:"Long context specialist, 1M token window"},{id:"gpt-5",displayName:"GPT-5",family:"gpt-5",tier:"standard",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:1.25,output:10,cached:.125},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Base GPT-5, excellent all-around"},{id:"gpt-5.1",displayName:"GPT-5.1",family:"gpt-5",tier:"standard",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:1.25,output:10,cached:.125},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Improved GPT-5 with better instruction following"},{id:"gpt-5.2",displayName:"GPT-5.2",family:"gpt-5",tier:"standard",capabilityRank:9,modalities:["text"],apiType:"chat",pricing:{input:1.75,output:14,cached:.175},contextWindow:128e3,defaultMaxOutput:8192,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Latest GPT-5, most capable standard model"},{id:"o1-mini",displayName:"o1 Mini",family:"o1",tier:"reasoning",capabilityRank:3,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.55},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:$,deprecated:!1,description:"Fast reasoning model, good for math/code"},{id:"o3-mini",displayName:"o3 Mini",family:"o3",tier:"reasoning",capabilityRank:4,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.55},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:$,deprecated:!1,description:"Improved mini reasoner with better efficiency"},{id:"o4-mini",displayName:"o4 Mini",family:"o4",tier:"reasoning",capabilityRank:5,modalities:["text"],apiType:"chat",pricing:{input:1.1,output:4.4,cached:.275},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:$,deprecated:!1,description:"Latest mini reasoner, best reasoning per dollar"},{id:"o3",displayName:"o3",family:"o3",tier:"reasoning",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:2,output:8,cached:.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:$,deprecated:!1,description:"Full o3 reasoning model, excellent for complex problems"},{id:"o1",displayName:"o1",family:"o1",tier:"reasoning",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:15,output:60,cached:7.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:$,deprecated:!1,description:"Original full reasoning model, very capable"},{id:"gpt-5-pro",displayName:"GPT-5 Pro",family:"gpt-5",tier:"premium",capabilityRank:7,modalities:["text"],apiType:"chat",pricing:{input:15,output:120},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Enhanced GPT-5 for demanding tasks"},{id:"gpt-5.2-pro",displayName:"GPT-5.2 Pro",family:"gpt-5",tier:"premium",capabilityRank:8,modalities:["text"],apiType:"chat",pricing:{input:21,output:168},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:32768,parameters:K,deprecated:!1,description:"Most capable standard model available"},{id:"o3-pro",displayName:"o3 Pro",family:"o3",tier:"premium",capabilityRank:9,modalities:["text"],apiType:"chat",pricing:{input:20,output:80},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:ke,deprecated:!1,description:"Premium o3 with extended thinking time"},{id:"o1-pro",displayName:"o1 Pro",family:"o1",tier:"premium",capabilityRank:10,modalities:["text"],apiType:"chat",pricing:{input:150,output:600},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:ke,deprecated:!1,description:"Most capable reasoning model, extended compute"},{id:"o3-deep-research",displayName:"o3 Deep Research",family:"o3",tier:"specialized",capabilityRank:8,modalities:["text"],apiType:"responses",pricing:{input:10,output:40,cached:2.5},contextWindow:2e5,defaultMaxOutput:32768,maxOutputTokens:1e5,parameters:{...$,supportsStreaming:!1},deprecated:!1,description:"Extended research sessions with web access"},{id:"o4-mini-deep-research",displayName:"o4 Mini Deep Research",family:"o4",tier:"specialized",capabilityRank:6,modalities:["text"],apiType:"responses",pricing:{input:2,output:8,cached:.5},contextWindow:128e3,defaultMaxOutput:16384,maxOutputTokens:65536,parameters:{...$,supportsStreaming:!1},deprecated:!1,description:"Affordable deep research with o4 mini"},{id:"computer-use-preview",displayName:"Computer Use Preview",family:"computer-use",tier:"specialized",capabilityRank:5,modalities:["text","vision"],apiType:"responses",pricing:{input:3,output:12},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:16384,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Can control computer interfaces via screenshots"},{id:"gpt-realtime",displayName:"GPT Realtime",family:"gpt-realtime",tier:"specialized",capabilityRank:7,modalities:["text","audio","realtime"],apiType:"chat",pricing:{input:4,output:16,cached:.4},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Real-time audio conversation model"},{id:"gpt-realtime-mini",displayName:"GPT Realtime Mini",family:"gpt-realtime",tier:"specialized",capabilityRank:4,modalities:["text","audio","realtime"],apiType:"chat",pricing:{input:.6,output:2.4,cached:.06},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:{...I,supportsReasoningEffort:!1},deprecated:!1,description:"Affordable real-time audio model"},{id:"gpt-4o-2024-05-13",displayName:"GPT-4o (May 2024)",family:"gpt-4o",tier:"standard",capabilityRank:4,modalities:["text","vision"],apiType:"chat",pricing:{input:5,output:15},contextWindow:128e3,defaultMaxOutput:4096,maxOutputTokens:4096,parameters:I,deprecated:!0,description:"Original GPT-4o snapshot, use gpt-4o instead"}],ge=new Map(D.map(e=>[e.id,e]));function ye(e){let t=ge.get(e);if(!t)throw new Error(`Unknown model: ${e}. Use getAvailableModelIds() to see valid options.`);return t}function tt(e){return ge.get(e)}function rt(e){return ge.has(e)}function nt(){return D.map(e=>e.id)}function st(e){return D.filter(t=>t.tier===e&&!t.deprecated).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function ot(e){return D.filter(t=>t.family===e).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function it(){let e={fast:1,standard:2,reasoning:3,premium:4,specialized:5};return D.filter(t=>!t.deprecated).sort((t,n)=>{let r=e[t.tier]-e[n.tier];return r!==0?r:t.capabilityRank-n.capabilityRank})}function at(){return D.filter(e=>!e.deprecated&&e.modalities.includes("text")&&!e.modalities.includes("realtime")&&e.apiType!=="responses").sort((e,t)=>{let n={fast:1,standard:2,reasoning:3,premium:4,specialized:5},r=n[e.tier]-n[t.tier];return r!==0?r:e.capabilityRank-t.capabilityRank})}function ct(e="fast"){let t={fast:1,standard:2,reasoning:3,premium:4,specialized:5},n=t[e];return D.filter(s=>!s.deprecated&&t[s.tier]>=n).sort((s,c)=>s.pricing.input-c.pricing.input)[0]}function pt(e,t,n,r=!1){let s=ye(e),c=r&&s.pricing.cached?t/1e6*s.pricing.cached:t/1e6*s.pricing.input,u=n/1e6*s.pricing.output;return c+u}function dt(e){let t=ye(e);return`$${t.pricing.input.toFixed(2)} in / $${t.pricing.output.toFixed(2)} out per 1M tokens`}var xe=Object.fromEntries(D.map(e=>[e.id,{input:e.pricing.input,output:e.pricing.output,cached:e.pricing.cached,maxTokens:e.defaultMaxOutput,tier:e.tier}]));var ue=null;async function lt(){if(ue)return ue;try{return ue=await import("tiktoken"),ue}catch{throw new Error('Token pricing requires the "tiktoken" package. Install with: npm install tiktoken')}}var U=xe,V="gpt-4o-mini";async function mt(e){let t=await lt();try{return t.encoding_for_model(e)}catch{return t.get_encoding("cl100k_base")}}async function he(e,t=V){let n=await mt(t);try{return n.encode(e).length}finally{n.free()}}function Me(e,t,n,r){let s=JSON.stringify({model:t,rate:n,tokens:r});return ut("sha256").update(e+s).digest("hex").slice(0,16)}function ft(e={}){let t=e.model??V,n=U[t],r={input:e.inputRate??n?.input??U[V].input,output:e.outputRate??n?.output??U[V].output,maxTokens:e.maxTokens??n?.maxTokens??4096,tier:e.tier??n?.tier??"custom"},s=e.tokenizer,c={model:t,inputRate:r.input,outputRate:r.output,maxTokens:r.maxTokens,tier:r.tier,tokenizer:s??(i=>he(i,t)),minUsd:e.minUsd??.001,maxUsd:e.maxUsd??50,decimals:e.decimals??6},{minUsd:u,maxUsd:g,decimals:P}=c;async function T(i){return s?s(i):he(i,t)}async function R(i,x){let f=x?`${x}
|
|
285
285
|
|
|
286
|
-
${
|
|
286
|
+
${i}`:i,m=await T(f),y=m/1e6*r.input;y=Math.max(y,u),y=Math.min(y,g);let E=Math.pow(10,P),d=Math.floor(y*E).toString(),h=Me(i,t,r.input,m);return{amountAtomic:d,usdAmount:y,inputTokens:m,model:t,tier:r.tier,inputRatePerMillion:r.input,outputRatePerMillion:r.output,maxOutputTokens:r.maxTokens,quoteHash:h}}async function S(i,x){if(!x)return!1;let f=await T(i);return Me(i,t,r.input,f)===x}return{calculate:R,validateQuote:S,countTokens:T,config:c,modelInfo:r}}function gt(){return Object.entries(U).map(([e,t])=>({model:e,inputRate:t.input,outputRate:t.output,maxTokens:t.maxTokens,tier:t.tier})).sort((e,t)=>{let n={fast:0,standard:1,reasoning:2,premium:3},r=n[e.tier]-n[t.tier];return r!==0?r:e.inputRate-t.inputRate})}function yt(e){return e in U}function xt(e=V){let t=U[e]??U[V],n=U[e]?e:V;return`$${t.input.toFixed(2)} per 1M tokens (${n})`}import{SPONSORED_ACCESS_EXTENSION_KEY as mr}from"@dexterai/x402-ads-types";export{z as BASE_MAINNET_NETWORK,B as DEXTER_FACILITATOR_URL,J as FacilitatorClient,U as MODEL_PRICING,xe as MODEL_PRICING_MAP,D as MODEL_REGISTRY,F as SOLANA_MAINNET_NETWORK,mr as SPONSORED_ACCESS_EXTENSION_KEY,me as USDC_BASE,pe as USDC_MINT,he as countTokens,Ze as createDynamicPricing,ft as createTokenPricing,Y as createX402Server,C as escapeHtml,pt as estimateCost,tt as findModel,dt as formatModelPricing,et as formatPricing,xt as formatTokenPricing,it as getActiveModels,nt as getAvailableModelIds,gt as getAvailableModels,ct as getCheapestModel,ye as getModel,ot as getModelsByFamily,st as getModelsByTier,at as getTextModels,yt as isValidModel,rt as isValidModelId,De as stripePayTo,Xe as x402AccessPass,Ve as x402BrowserSupport,Be as x402Middleware};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as ChainAdapter, W as WalletSet } from './types-
|
|
2
|
-
import { A as AccessPassClientConfig, P as PaymentAccept } from './types-
|
|
1
|
+
import { C as ChainAdapter, W as WalletSet } from './types-i7C2GiVY.cjs';
|
|
2
|
+
import { A as AccessPassClientConfig, P as PaymentAccept } from './types-CKiTYeJ-.cjs';
|
|
3
3
|
import { SponsoredRecommendation, SponsoredAccessSettlementInfo } from '@dexterai/x402-ads-types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -44,7 +44,6 @@ interface PaymentReceipt {
|
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Get the x402 payment receipt from a response, or undefined if none.
|
|
47
|
-
* Typed alternative to the legacy `(response as any)._x402` pattern.
|
|
48
47
|
*/
|
|
49
48
|
declare function getPaymentReceipt(response: Response): PaymentReceipt | undefined;
|
|
50
49
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as ChainAdapter, W as WalletSet } from './types-
|
|
2
|
-
import { A as AccessPassClientConfig, P as PaymentAccept } from './types-
|
|
1
|
+
import { C as ChainAdapter, W as WalletSet } from './types-BPKUVJEl.js';
|
|
2
|
+
import { A as AccessPassClientConfig, P as PaymentAccept } from './types-CKiTYeJ-.js';
|
|
3
3
|
import { SponsoredRecommendation, SponsoredAccessSettlementInfo } from '@dexterai/x402-ads-types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -44,7 +44,6 @@ interface PaymentReceipt {
|
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
46
|
* Get the x402 payment receipt from a response, or undefined if none.
|
|
47
|
-
* Typed alternative to the legacy `(response as any)._x402` pattern.
|
|
48
47
|
*/
|
|
49
48
|
declare function getPaymentReceipt(response: Response): PaymentReceipt | undefined;
|
|
50
49
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PaymentAccept } from './types-
|
|
1
|
+
import { P as PaymentAccept } from './types-CKiTYeJ-.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* EVM Chain Adapter
|
|
@@ -7,44 +7,6 @@ import { P as PaymentAccept } from './types-_iT11DL0.js';
|
|
|
7
7
|
* Uses EIP-712 typed data signing for x402 v2 payments.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* Permit2 constants (Uniswap canonical deployment, same address on every EVM chain)
|
|
12
|
-
*/
|
|
13
|
-
declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
14
|
-
declare const X402_EXACT_PERMIT2_PROXY = "0x402085c248EeA27D92E8b30b2C58ed07f9E20001";
|
|
15
|
-
/**
|
|
16
|
-
* CAIP-2 network identifiers for EVM chains.
|
|
17
|
-
* Mirrors dexter-facilitator/src/config/chains.ts — update both when adding chains.
|
|
18
|
-
*/
|
|
19
|
-
declare const BASE_MAINNET = "eip155:8453";
|
|
20
|
-
declare const BASE_SEPOLIA = "eip155:84532";
|
|
21
|
-
declare const ARBITRUM_ONE = "eip155:42161";
|
|
22
|
-
declare const POLYGON = "eip155:137";
|
|
23
|
-
declare const OPTIMISM = "eip155:10";
|
|
24
|
-
declare const AVALANCHE = "eip155:43114";
|
|
25
|
-
declare const BSC_MAINNET = "eip155:56";
|
|
26
|
-
declare const SKALE_BASE = "eip155:1187947933";
|
|
27
|
-
declare const SKALE_BASE_SEPOLIA = "eip155:324705682";
|
|
28
|
-
/** @deprecated Not supported by the Dexter facilitator. Use BASE_MAINNET for EVM payments. */
|
|
29
|
-
declare const ETHEREUM_MAINNET = "eip155:1";
|
|
30
|
-
/**
|
|
31
|
-
* BSC stablecoin addresses (18 decimals — unlike 6 on every other chain)
|
|
32
|
-
*/
|
|
33
|
-
declare const BSC_USDT = "0x55d398326f99059fF775485246999027B3197955";
|
|
34
|
-
declare const BSC_USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d";
|
|
35
|
-
/**
|
|
36
|
-
* USDC contract addresses by chain.
|
|
37
|
-
* Source of truth: dexter-facilitator/src/config/chains.ts
|
|
38
|
-
*/
|
|
39
|
-
declare const USDC_ADDRESSES: Record<string, string>;
|
|
40
|
-
/**
|
|
41
|
-
* Known BSC stablecoin addresses (for isKnownStablecoin checks).
|
|
42
|
-
* Both use 18 decimals on BSC, unlike the 6 decimals on all other chains.
|
|
43
|
-
*/
|
|
44
|
-
declare const BSC_STABLECOIN_ADDRESSES: Record<string, {
|
|
45
|
-
symbol: string;
|
|
46
|
-
decimals: number;
|
|
47
|
-
}>;
|
|
48
10
|
/**
|
|
49
11
|
* EVM wallet interface (compatible with wagmi, ethers, viem)
|
|
50
12
|
*/
|
|
@@ -169,12 +131,6 @@ declare function createEvmAdapter(config?: AdapterConfig): EvmAdapter;
|
|
|
169
131
|
* Handles transaction building, signing, and balance queries.
|
|
170
132
|
*/
|
|
171
133
|
|
|
172
|
-
/**
|
|
173
|
-
* CAIP-2 network identifiers for Solana
|
|
174
|
-
*/
|
|
175
|
-
declare const SOLANA_MAINNET = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
176
|
-
declare const SOLANA_DEVNET = "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";
|
|
177
|
-
declare const SOLANA_TESTNET = "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";
|
|
178
134
|
/**
|
|
179
135
|
* Solana wallet interface (compatible with @solana/wallet-adapter)
|
|
180
136
|
*/
|
|
@@ -325,4 +281,4 @@ interface BalanceInfo {
|
|
|
325
281
|
asset: string;
|
|
326
282
|
}
|
|
327
283
|
|
|
328
|
-
export { type AdapterConfig as A,
|
|
284
|
+
export { type AdapterConfig as A, type BalanceInfo as B, type ChainAdapter as C, type EvmWallet as E, type GenericWallet as G, type SolanaWallet as S, type WalletSet as W, createEvmAdapter as a, SolanaAdapter as b, createSolanaAdapter as c, EvmAdapter as d, type SignedTransaction as e, isEvmWallet as f, isSolanaWallet as i };
|
|
@@ -4,16 +4,7 @@
|
|
|
4
4
|
* Chain-agnostic types for x402 v2 payments.
|
|
5
5
|
* Works with Solana, Base, and any future x402-compatible networks.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
declare const SOLANA_MAINNET_NETWORK = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
9
|
-
/** CAIP-2 network identifier for Base mainnet */
|
|
10
|
-
declare const BASE_MAINNET_NETWORK = "eip155:8453";
|
|
11
|
-
/** USDC mint on Solana mainnet */
|
|
12
|
-
declare const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
|
13
|
-
/** USDC address on Base mainnet */
|
|
14
|
-
declare const USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
|
|
15
|
-
/** Dexter's public x402 v2 facilitator URL */
|
|
16
|
-
declare const DEXTER_FACILITATOR_URL = "https://x402.dexter.cash";
|
|
7
|
+
|
|
17
8
|
/**
|
|
18
9
|
* Context passed to a PayToProvider function.
|
|
19
10
|
* Contains request-scoped information for dynamic address resolution.
|
|
@@ -212,7 +203,7 @@ interface AccessPassClientConfig {
|
|
|
212
203
|
/**
|
|
213
204
|
* SDK error codes
|
|
214
205
|
*/
|
|
215
|
-
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | 'unsupported_network' | 'no_matching_payment_option' | '
|
|
206
|
+
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | 'unsupported_network' | 'no_matching_payment_option' | 'missing_fee_payer' | 'missing_decimals' | 'missing_amount' | 'amount_exceeds_max' | 'insufficient_balance' | 'wallet_missing_sign_transaction' | 'wallet_not_connected' | 'wallet_disconnected' | 'user_rejected_signature' | 'transaction_build_failed' | 'payment_rejected' | 'rpc_timeout' | 'facilitator_timeout' | 'invalid_payment_signature' | 'facilitator_verify_failed' | 'facilitator_settle_failed' | 'facilitator_request_failed' | 'no_matching_requirement' | 'access_pass_expired' | 'access_pass_invalid' | 'access_pass_tier_not_found' | 'access_pass_exceeds_max_spend';
|
|
216
207
|
/**
|
|
217
208
|
* Custom error class for x402 operations
|
|
218
209
|
*/
|
|
@@ -224,4 +215,4 @@ declare class X402Error extends Error {
|
|
|
224
215
|
constructor(code: X402ErrorCode, message: string, details?: unknown);
|
|
225
216
|
}
|
|
226
217
|
|
|
227
|
-
export { type AccessPassClientConfig as A,
|
|
218
|
+
export { type AccessPassClientConfig as A, type PaymentAccept as P, type SettleResponse as S, type VerifyResponse as V, X402Error as X, type AccessPassTier as a, type AccessPassInfo as b, type PayToProvider as c, type PaymentRequired as d, type PayToContext as e, type PayToProviderDefaults as f, type AccessPassClaims as g };
|
|
@@ -4,16 +4,7 @@
|
|
|
4
4
|
* Chain-agnostic types for x402 v2 payments.
|
|
5
5
|
* Works with Solana, Base, and any future x402-compatible networks.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
declare const SOLANA_MAINNET_NETWORK = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
9
|
-
/** CAIP-2 network identifier for Base mainnet */
|
|
10
|
-
declare const BASE_MAINNET_NETWORK = "eip155:8453";
|
|
11
|
-
/** USDC mint on Solana mainnet */
|
|
12
|
-
declare const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
|
13
|
-
/** USDC address on Base mainnet */
|
|
14
|
-
declare const USDC_BASE = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
|
|
15
|
-
/** Dexter's public x402 v2 facilitator URL */
|
|
16
|
-
declare const DEXTER_FACILITATOR_URL = "https://x402.dexter.cash";
|
|
7
|
+
|
|
17
8
|
/**
|
|
18
9
|
* Context passed to a PayToProvider function.
|
|
19
10
|
* Contains request-scoped information for dynamic address resolution.
|
|
@@ -212,7 +203,7 @@ interface AccessPassClientConfig {
|
|
|
212
203
|
/**
|
|
213
204
|
* SDK error codes
|
|
214
205
|
*/
|
|
215
|
-
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | 'unsupported_network' | 'no_matching_payment_option' | '
|
|
206
|
+
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | 'unsupported_network' | 'no_matching_payment_option' | 'missing_fee_payer' | 'missing_decimals' | 'missing_amount' | 'amount_exceeds_max' | 'insufficient_balance' | 'wallet_missing_sign_transaction' | 'wallet_not_connected' | 'wallet_disconnected' | 'user_rejected_signature' | 'transaction_build_failed' | 'payment_rejected' | 'rpc_timeout' | 'facilitator_timeout' | 'invalid_payment_signature' | 'facilitator_verify_failed' | 'facilitator_settle_failed' | 'facilitator_request_failed' | 'no_matching_requirement' | 'access_pass_expired' | 'access_pass_invalid' | 'access_pass_tier_not_found' | 'access_pass_exceeds_max_spend';
|
|
216
207
|
/**
|
|
217
208
|
* Custom error class for x402 operations
|
|
218
209
|
*/
|
|
@@ -224,4 +215,4 @@ declare class X402Error extends Error {
|
|
|
224
215
|
constructor(code: X402ErrorCode, message: string, details?: unknown);
|
|
225
216
|
}
|
|
226
217
|
|
|
227
|
-
export { type AccessPassClientConfig as A,
|
|
218
|
+
export { type AccessPassClientConfig as A, type PaymentAccept as P, type SettleResponse as S, type VerifyResponse as V, X402Error as X, type AccessPassTier as a, type AccessPassInfo as b, type PayToProvider as c, type PaymentRequired as d, type PayToContext as e, type PayToProviderDefaults as f, type AccessPassClaims as g };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PaymentAccept } from './types-
|
|
1
|
+
import { P as PaymentAccept } from './types-CKiTYeJ-.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* EVM Chain Adapter
|
|
@@ -7,44 +7,6 @@ import { P as PaymentAccept } from './types-_iT11DL0.cjs';
|
|
|
7
7
|
* Uses EIP-712 typed data signing for x402 v2 payments.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
* Permit2 constants (Uniswap canonical deployment, same address on every EVM chain)
|
|
12
|
-
*/
|
|
13
|
-
declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
14
|
-
declare const X402_EXACT_PERMIT2_PROXY = "0x402085c248EeA27D92E8b30b2C58ed07f9E20001";
|
|
15
|
-
/**
|
|
16
|
-
* CAIP-2 network identifiers for EVM chains.
|
|
17
|
-
* Mirrors dexter-facilitator/src/config/chains.ts — update both when adding chains.
|
|
18
|
-
*/
|
|
19
|
-
declare const BASE_MAINNET = "eip155:8453";
|
|
20
|
-
declare const BASE_SEPOLIA = "eip155:84532";
|
|
21
|
-
declare const ARBITRUM_ONE = "eip155:42161";
|
|
22
|
-
declare const POLYGON = "eip155:137";
|
|
23
|
-
declare const OPTIMISM = "eip155:10";
|
|
24
|
-
declare const AVALANCHE = "eip155:43114";
|
|
25
|
-
declare const BSC_MAINNET = "eip155:56";
|
|
26
|
-
declare const SKALE_BASE = "eip155:1187947933";
|
|
27
|
-
declare const SKALE_BASE_SEPOLIA = "eip155:324705682";
|
|
28
|
-
/** @deprecated Not supported by the Dexter facilitator. Use BASE_MAINNET for EVM payments. */
|
|
29
|
-
declare const ETHEREUM_MAINNET = "eip155:1";
|
|
30
|
-
/**
|
|
31
|
-
* BSC stablecoin addresses (18 decimals — unlike 6 on every other chain)
|
|
32
|
-
*/
|
|
33
|
-
declare const BSC_USDT = "0x55d398326f99059fF775485246999027B3197955";
|
|
34
|
-
declare const BSC_USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d";
|
|
35
|
-
/**
|
|
36
|
-
* USDC contract addresses by chain.
|
|
37
|
-
* Source of truth: dexter-facilitator/src/config/chains.ts
|
|
38
|
-
*/
|
|
39
|
-
declare const USDC_ADDRESSES: Record<string, string>;
|
|
40
|
-
/**
|
|
41
|
-
* Known BSC stablecoin addresses (for isKnownStablecoin checks).
|
|
42
|
-
* Both use 18 decimals on BSC, unlike the 6 decimals on all other chains.
|
|
43
|
-
*/
|
|
44
|
-
declare const BSC_STABLECOIN_ADDRESSES: Record<string, {
|
|
45
|
-
symbol: string;
|
|
46
|
-
decimals: number;
|
|
47
|
-
}>;
|
|
48
10
|
/**
|
|
49
11
|
* EVM wallet interface (compatible with wagmi, ethers, viem)
|
|
50
12
|
*/
|
|
@@ -169,12 +131,6 @@ declare function createEvmAdapter(config?: AdapterConfig): EvmAdapter;
|
|
|
169
131
|
* Handles transaction building, signing, and balance queries.
|
|
170
132
|
*/
|
|
171
133
|
|
|
172
|
-
/**
|
|
173
|
-
* CAIP-2 network identifiers for Solana
|
|
174
|
-
*/
|
|
175
|
-
declare const SOLANA_MAINNET = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
176
|
-
declare const SOLANA_DEVNET = "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";
|
|
177
|
-
declare const SOLANA_TESTNET = "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";
|
|
178
134
|
/**
|
|
179
135
|
* Solana wallet interface (compatible with @solana/wallet-adapter)
|
|
180
136
|
*/
|
|
@@ -325,4 +281,4 @@ interface BalanceInfo {
|
|
|
325
281
|
asset: string;
|
|
326
282
|
}
|
|
327
283
|
|
|
328
|
-
export { type AdapterConfig as A,
|
|
284
|
+
export { type AdapterConfig as A, type BalanceInfo as B, type ChainAdapter as C, type EvmWallet as E, type GenericWallet as G, type SolanaWallet as S, type WalletSet as W, createEvmAdapter as a, SolanaAdapter as b, createSolanaAdapter as c, EvmAdapter as d, type SignedTransaction as e, isEvmWallet as f, isSolanaWallet as i };
|
package/dist/utils/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var u=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var B=(t,e)=>{for(var s in e)u(t,s,{get:e[s],enumerable:!0})},I=(t,e,s,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!D.call(t,n)&&n!==s&&u(t,n,{get:()=>e[n],enumerable:!(r=C(e,n))||r.enumerable});return t};var K=t=>I(u({},"__esModule",{value:!0}),t);var U={};B(U,{fromAtomicUnits:()=>d,getChainDisplayName:()=>O,getChainFamily:()=>b,getChainName:()=>S,getExplorerUrl:()=>R,toAtomicUnits:()=>_});module.exports=K(U);var x="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",N="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",f="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var a="eip155:8453",o="eip155:84532",i="eip155:42161",c="eip155:137",p="eip155:10",E="eip155:43114",l="eip155:56",A="eip155:1187947933",h="eip155:324705682",m="eip155:1";var L="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",M="0x55d398326f99059fF775485246999027B3197955",T="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",P={[l]:T,[a]:L,[o]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[i]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[c]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[p]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[E]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[A]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[h]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[m]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},F={[M]:{symbol:"USDT",decimals:18},[T]:{symbol:"USDC",decimals:18}};var $={[l]:56,[a]:8453,[o]:84532,[i]:42161,[c]:137,[p]:10,[E]:43114,[A]:1187947933,[h]:324705682,[m]:1},V={[x]:"https://api.dexter.cash/api/solana/rpc",[N]:"https://api.devnet.solana.com",[f]:"https://api.testnet.solana.com"},H={[l]:"https://bsc-dataseed1.binance.org",[a]:"https://api.dexter.cash/api/base/rpc",[o]:"https://sepolia.base.org",[i]:"https://arb1.arbitrum.io/rpc",[c]:"https://polygon-rpc.com",[p]:"https://mainnet.optimism.io",[E]:"https://api.avax.network/ext/bc/C/rpc",[A]:"https://skale-base.skalenodes.com/v1/base",[h]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[m]:"https://eth.llamarpc.com"};function _(t,e){let s=Math.pow(10,e);return Math.floor(t*s).toString()}function d(t,e){let s=Math.pow(10,e);return Number(t)/s}function y(t){return t.startsWith("solana:")||t==="solana"}function W(t){return t.startsWith("eip155:")||["base","ethereum","arbitrum"].includes(t)}function b(t){return y(t)?"solana":W(t)?"evm":"unknown"}function S(t){return{[x]:"Solana",[N]:"Solana Devnet",[f]:"Solana Testnet",solana:"Solana","solana-devnet":"Solana Devnet","solana-testnet":"Solana Testnet",[a]:"Base",[o]:"Base Sepolia",[m]:"Ethereum",[i]:"Arbitrum",[c]:"Polygon",[p]:"Optimism",[E]:"Avalanche",[l]:"BSC",[A]:"SKALE Base",[h]:"SKALE Base Sepolia",base:"Base","base-sepolia":"Base Sepolia",ethereum:"Ethereum",arbitrum:"Arbitrum",polygon:"Polygon",optimism:"Optimism",avalanche:"Avalanche",bsc:"BSC","skale-base":"SKALE Base","skale-base-sepolia":"SKALE Base Sepolia"}[t]||t}function O(t,e){let s=S(t);return s===t?e:s}function R(t,e){let s=b(e);if(s==="solana")return e.includes("devnet")||e===N?`https://solscan.io/tx/${t}?cluster=devnet`:`https://www.orbmarkets.io/tx/${t}`;if(s==="evm"){let r="8453";switch(e.startsWith("eip155:")?r=e.split(":")[1]:e==="ethereum"?r="1":e==="arbitrum"?r="42161":e==="polygon"?r="137":e==="optimism"?r="10":e==="avalanche"?r="43114":e==="bsc"?r="56":e==="skale-base"?r="1187947933":e==="skale-base-sepolia"&&(r="324705682"),r){case"8453":return`https://basescan.org/tx/${t}`;case"84532":return`https://sepolia.basescan.org/tx/${t}`;case"1":return`https://etherscan.io/tx/${t}`;case"42161":return`https://arbiscan.io/tx/${t}`;case"137":return`https://polygonscan.com/tx/${t}`;case"10":return`https://optimistic.etherscan.io/tx/${t}`;case"43114":return`https://snowtrace.io/tx/${t}`;case"56":return`https://bscscan.com/tx/${t}`;case"1187947933":return`https://elated-tan-skat.explorer.mainnet.skalenodes.com/tx/${t}`;case"324705682":return`https://base-sepolia-testnet.explorer.skalenodes.com/tx/${t}`;default:return`https://basescan.org/tx/${t}`}}return`https://solscan.io/tx/${t}`}0&&(module.exports={fromAtomicUnits,getChainDisplayName,getChainFamily,getChainName,getExplorerUrl,toAtomicUnits});
|
package/dist/utils/index.d.cts
CHANGED
|
@@ -55,6 +55,20 @@ declare function getChainFamily(network: string): ChainFamily;
|
|
|
55
55
|
* @returns Human-readable name
|
|
56
56
|
*/
|
|
57
57
|
declare function getChainName(network: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Get a human-readable chain name with adapter-family fallback.
|
|
60
|
+
*
|
|
61
|
+
* Differs from {@link getChainName} in the fallback: instead of returning
|
|
62
|
+
* the raw network identifier (which is useful for logging / matching), this
|
|
63
|
+
* returns the adapter family ("Solana" / "EVM") when the chain isn't in
|
|
64
|
+
* the registry. Use this in user-facing strings — error messages, badges,
|
|
65
|
+
* status pills — where exposing a CAIP-2 string would be ugly.
|
|
66
|
+
*
|
|
67
|
+
* @param network - CAIP-2 network identifier or legacy alias
|
|
68
|
+
* @param family - The adapter family name to use as a fallback
|
|
69
|
+
* (e.g. 'Solana' or 'EVM')
|
|
70
|
+
*/
|
|
71
|
+
declare function getChainDisplayName(network: string, family: string): string;
|
|
58
72
|
/**
|
|
59
73
|
* Get explorer URL for a transaction
|
|
60
74
|
*
|
|
@@ -64,4 +78,4 @@ declare function getChainName(network: string): string;
|
|
|
64
78
|
*/
|
|
65
79
|
declare function getExplorerUrl(txSignature: string, network: string): string;
|
|
66
80
|
|
|
67
|
-
export { type ChainFamily, fromAtomicUnits, getChainFamily, getChainName, getExplorerUrl, toAtomicUnits };
|
|
81
|
+
export { type ChainFamily, fromAtomicUnits, getChainDisplayName, getChainFamily, getChainName, getExplorerUrl, toAtomicUnits };
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -55,6 +55,20 @@ declare function getChainFamily(network: string): ChainFamily;
|
|
|
55
55
|
* @returns Human-readable name
|
|
56
56
|
*/
|
|
57
57
|
declare function getChainName(network: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Get a human-readable chain name with adapter-family fallback.
|
|
60
|
+
*
|
|
61
|
+
* Differs from {@link getChainName} in the fallback: instead of returning
|
|
62
|
+
* the raw network identifier (which is useful for logging / matching), this
|
|
63
|
+
* returns the adapter family ("Solana" / "EVM") when the chain isn't in
|
|
64
|
+
* the registry. Use this in user-facing strings — error messages, badges,
|
|
65
|
+
* status pills — where exposing a CAIP-2 string would be ugly.
|
|
66
|
+
*
|
|
67
|
+
* @param network - CAIP-2 network identifier or legacy alias
|
|
68
|
+
* @param family - The adapter family name to use as a fallback
|
|
69
|
+
* (e.g. 'Solana' or 'EVM')
|
|
70
|
+
*/
|
|
71
|
+
declare function getChainDisplayName(network: string, family: string): string;
|
|
58
72
|
/**
|
|
59
73
|
* Get explorer URL for a transaction
|
|
60
74
|
*
|
|
@@ -64,4 +78,4 @@ declare function getChainName(network: string): string;
|
|
|
64
78
|
*/
|
|
65
79
|
declare function getExplorerUrl(txSignature: string, network: string): string;
|
|
66
80
|
|
|
67
|
-
export { type ChainFamily, fromAtomicUnits, getChainFamily, getChainName, getExplorerUrl, toAtomicUnits };
|
|
81
|
+
export { type ChainFamily, fromAtomicUnits, getChainDisplayName, getChainFamily, getChainName, getExplorerUrl, toAtomicUnits };
|