@dexterai/x402 3.7.6 → 3.7.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.d.cts +2 -2
- package/dist/adapters/index.d.ts +2 -2
- package/dist/batch-settlement/index.d.cts +3 -3
- package/dist/batch-settlement/index.d.ts +3 -3
- package/dist/batch-settlement/seller/index.d.cts +4 -4
- package/dist/batch-settlement/seller/index.d.ts +4 -4
- package/dist/client/index.cjs +1 -1
- package/dist/client/index.d.cts +11 -4
- package/dist/client/index.d.ts +11 -4
- package/dist/client/index.js +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.d.cts +4 -4
- package/dist/react/index.d.ts +4 -4
- package/dist/react/index.js +1 -1
- package/dist/server/index.cjs +7 -7
- package/dist/server/index.d.cts +11 -4
- package/dist/server/index.d.ts +11 -4
- package/dist/server/index.js +10 -10
- package/dist/{sponsored-access-BipOrMb8.d.cts → sponsored-access-D7H-womP.d.cts} +1 -1
- package/dist/{sponsored-access-7JmToCWu.d.ts → sponsored-access-D96FgkQK.d.ts} +1 -1
- package/dist/{types-DoSm_OkR.d.ts → types-DDBPREEu.d.ts} +1 -1
- package/dist/{types-CSFsiCHc.d.ts → types-DllrEG_Z.d.ts} +1 -1
- package/dist/{types-Ck3GsR9K.d.cts → types-XG8QvfyL.d.cts} +1 -1
- package/dist/{types-l-46PFP6.d.cts → types-htvWHuW3.d.cts} +6 -10
- package/dist/{types-l-46PFP6.d.ts → types-htvWHuW3.d.ts} +6 -10
- package/dist/{types-DE4puQ4m.d.cts → types-pOwQlGEV.d.cts} +1 -1
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
package/dist/server/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var q="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Se="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",we="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var z="eip155:8453",te="eip155:84532",re="eip155:42161",ne="eip155:137",se="eip155:10",oe="eip155:43114",ie="eip155:56",ae="eip155:1187947933",ce="eip155:324705682",pe="eip155:1";var V="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";var me="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",Fe="0x55d398326f99059fF775485246999027B3197955",Re="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",Ae={[ie]:Re,[z]:me,[te]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[re]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[ne]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[se]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[oe]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[ae]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[ce]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[pe]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},Ee={[Fe]:{symbol:"USDT",decimals:18},[Re]:{symbol:"USDC",decimals:18}},j=6;var Lt={[ie]:56,[z]:8453,[te]:84532,[re]:42161,[ne]:137,[se]:10,[oe]:43114,[ae]:1187947933,[ce]:324705682,[pe]:1},Ft={[q]:"https://api.dexter.cash/api/solana/rpc",[Se]:"https://api.devnet.solana.com",[we]:"https://api.testnet.solana.com"},qt={[ie]:"https://bsc-dataseed1.binance.org",[z]:"https://api.dexter.cash/api/base/rpc",[te]:"https://sepolia.base.org",[re]:"https://arb1.arbitrum.io/rpc",[ne]:"https://polygon-rpc.com",[se]:"https://mainnet.optimism.io",[oe]:"https://api.avax.network/ext/bc/C/rpc",[ae]:"https://skale-base.skalenodes.com/v1/base",[ce]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[pe]:"https://eth.llamarpc.com"},B="https://x402.dexter.cash",le=q;function G(e,t){let n=Math.pow(10,t);return Math.floor(e*n).toString()}function fe(e){return e.startsWith("solana:")||e==="solana"}function qe(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 We(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 qe(JSON.stringify(e))}function X(e){return JSON.parse(We(e))}function Ke(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 J=class extends Error{status;body;constructor(t,n){super(`HTTP ${t}`),this.status=t,this.body=n}},Y=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 p=await this.fetchWithTimeout(t,n);if(!p.ok&&p.status>=500)throw new J(p.status,await p.text());return p}catch(p){if(r=p,s<this.maxRetries-1&&Ke(p)){let l=this.retryBaseMs*Math.pow(2,s);await new Promise(y=>setTimeout(y,l));continue}throw p}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.scheme==="batch-settlement")&&s.network===t)?.extra}async verifyPayment(t,n){try{let r=X(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 J?`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=X(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 J?`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 ve(e){if(fe(e))return{address:V,decimals:6};let t=Ae[e];if(t){let n=Ee[t]?.decimals??6;return{address:t,decimals:n}}return{address:V,decimals:6}}function ke(e){try{let t=X(e);return t?.accepted?.amount??t?.accepted?.maxAmountRequired}catch{return}}function Q(e){let{payTo:t,facilitatorUrl:n=B,network:r=q,defaultTimeoutSeconds:s=60}=e,p=e.asset??ve(r),l=e.scheme??"exact",y=new Y(n),g=null,h=new Map,S=3e4,c=Date.now();function o(a){let i=(a.maxTimeoutSeconds||s)*1e3;if(h.set(a.payTo,{accept:a,expiresAt:Date.now()+i}),Date.now()-c>S){let w=Date.now();for(let[_,M]of h)M.expiresAt<w&&h.delete(_);c=w}}function f(a){let i=h.get(a);if(i){if(i.expiresAt<Date.now()){h.delete(a);return}return i.accept}}async function m(a){return typeof t=="string"?t:t(a||{})}async function x(){if(g||(g=await y.getNetworkExtra(r)),fe(r)&&!g?.feePayer)throw new Error(`Facilitator does not provide feePayer for network "${r}"`);return{...g?.feePayer?{feePayer:g.feePayer}:{},decimals:g?.decimals??p.decimals,name:g?.name,version:g?.version,...l==="batch-settlement"&&g?.receiverAuthorizer?{receiverAuthorizer:g.receiverAuthorizer}:{}}}async function T(a,i){let{amountAtomic:w,timeoutSeconds:_=s}=i,M=await x(),A={scheme:l,network:r,amount:w,maxAmountRequired:w,asset:p.address,payTo:a,maxTimeoutSeconds:_,extra:M};return o(A),A}async function E(a){let i=await m({amountAtomic:a.amountAtomic,resourceUrl:a.resourceUrl});return T(i,a)}async function d(a){let{resourceUrl:i,description:w,mimeType:_="application/json"}=a,M={url:i,description:w,mimeType:_},A=await E(a);return{x402Version:2,resource:M,accepts:[A],error:"Payment required"}}function u(a){return W(a)}function b(a){return{status:402,headers:{"PAYMENT-REQUIRED":u(a)},body:{}}}async function P(a,i){if(!i){let w=await m({paymentHeader:a});i=f(w),i||(i=await T(w,{amountAtomic:ke(a)??"0",resourceUrl:""}))}return y.verifyPayment(a,i)}async function R(a,i){if(!i){let w=await m({paymentHeader:a});i=f(w),i||(i=await T(w,{amountAtomic:ke(a)??"0",resourceUrl:""}))}return y.settlePayment(a,i)}return{buildRequirements:d,encodeRequirements:u,create402Response:b,verifyPayment:P,settlePayment:R,getPaymentAccept:E,network:r,facilitator:y}}var Me=new WeakMap;function _e(e){return Me.get(e)}var He={base:"base","base-sepolia":"base_sepolia"},ze={base:"eip155:8453","base-sepolia":"eip155:84532"};function je(e){let t=typeof e=="string"?{secretKey:e}:e,n=t.network??"base",r=He[n]??"base",s=ze[n]??"eip155:8453",p=t.apiVersion??"2026-01-28.clover",l=null;async function y(){if(l)return l;try{let{default:h}=await import("stripe");return l=new h(t.secretKey,{apiVersion:p,appInfo:{name:"@dexterai/x402",url:"https://dexter.cash/sdk"}}),l}catch{throw new Error('The "stripe" package is required for stripePayTo(). Install it with: npm install stripe')}}let g=async h=>{if(h.paymentHeader){try{let E=JSON.parse(Buffer.from(h.paymentHeader,"base64").toString()),d=E.payload?.authorization?.to;if(d&&typeof d=="string")return d;let u=E.accepted?.payTo;if(u&&typeof u=="string")return u}catch{}throw new Error("Could not extract deposit address from payment header. Ensure the client is sending a valid x402 PAYMENT-SIGNATURE.")}let S=await y(),c=h.amountAtomic?parseInt(h.amountAtomic,10):1e4,o=Math.max(1,Math.round(c/Math.pow(10,j-2))),m=(await S.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(!m?.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 x=m.crypto_collect_deposit_details,T=x.deposit_addresses?.[r]?.address;if(!T)throw new Error(`No deposit address found for network "${r}". Available networks: ${Object.keys(x.deposit_addresses||{}).join(", ")}`);return T};return g._x402Defaults={network:s,facilitatorUrl:B},Me.set(g,s),g}import{homedir as Ye}from"os";import{join as Qe}from"path";import{FileChannelStorage as Ze}from"@x402/evm/batch-settlement/server";import{HTTPFacilitatorClient as Ve,x402ResourceServer as Ge}from"@x402/core/server";import{x402HTTPResourceServer as Xe}from"@x402/core/http";import{BatchSettlementEvmScheme as Je}from"@x402/evm/batch-settlement/server";function Ce(e){let t=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},n=new Ve({url:e.facilitatorUrl}),r=new Je(e.payTo,{storage:e.channelStore}),s=new Ge(n).register(e.network,r),p=new Xe(s,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),l=null;function y(){if(l)return l;let c=p.initialize();return c.catch(o=>{l===c&&(l=null),e.verbose?t("resource server initialize() failed:",o):console.error("[batch-settlement:seller] resource server initialize() failed:",o)}),l=c,c}let g=y();function h(c,o){if(c.headersSent)return;for(let[m,x]of Object.entries(o.headers))c.setHeader(m,x);c.status(o.status);let{body:f}=o;f==null?c.end():typeof f=="string"?c.send(f):c.json(f)}return{scheme:r,facilitator:n,handler:async(c,o,f)=>{try{await y();let m=c.get("host")??"",x=`${c.baseUrl??""}${c.path}`||"/",T={getHeader:R=>c.headers[R.toLowerCase()],getMethod:()=>c.method,getPath:()=>x,getUrl:()=>`${c.protocol}://${m}${c.originalUrl}`,getAcceptHeader:()=>c.headers.accept??"",getUserAgent:()=>c.headers["user-agent"]??"",getBody:()=>c.body??{},getQueryParams:()=>c.query,getQueryParam:R=>{let a=c.query[R];if(typeof a=="string"||Array.isArray(a))return a}},E=c.headers["payment-signature"]??c.headers["x-payment"],d={adapter:T,path:x,method:c.method,paymentHeader:E},u=await p.processHTTPRequest(d);if(t("processHTTPRequest ->",u.type),u.type==="no-payment-required"){f();return}if(u.type==="payment-error"){h(o,u.response);return}let b={request:d,responseBody:Buffer.alloc(0)},P=await p.processSettlement(u.paymentPayload,u.paymentRequirements,u.declaredExtensions,b);if(t("processSettlement ->",P.success?"success":`failure:${P.errorReason}`),!P.success){h(o,P.response);return}for(let[R,a]of Object.entries(P.headers))o.headersSent||o.setHeader(R,a);f()}catch(m){t("handler error:",m),o.headersSent||o.status(500).json({error:"Payment processing error"})}},ready:g}}import{formatUnits as Ne}from"viem";var Oe=6;async function ge(e){let{manager:t,store:n,channelId:r}=e,s=await n.get(r),p=BigInt(s?.chargedCumulativeAmount??"0"),l=BigInt(s?.balance??"0"),y=l>p?l-p:0n,{claims:g,settle:h}=await t.claimAndSettle(),S=await t.refund([r]),c=S.find(o=>o.channel===r)??S[0];return{claimTx:g[0]?.transaction??"",settleTx:h?.transaction??"",refundTx:c?.transaction??"",settledAmount:Ne(p,Oe),refundedAmount:Ne(y,Oe)}}async function Ie(e){let t=await e.store.list(),n=[];for(let r of t)try{let s=await ge({manager:e.manager,store:e.store,channelId:r.channelId});n.push({channelId:r.channelId,...s})}catch(s){n.push({channelId:r.channelId,error:s instanceof Error?s.message:String(s)})}return n}function De(e){let t=!1,n=async()=>{try{await e.claimAndSettle()}catch(s){e.onError?.(s)}},r=setInterval(()=>{t||n()},e.claimIntervalMs);return typeof r.unref=="function"&&r.unref(),{async stop(){t||(t=!0,clearInterval(r),await n())}}}var et="https://x402.dexter.cash",tt="GET /",Ue=new Set(["eip155:8453","eip155:42161","eip155:137"]);function rt(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function ye(e){if(!Ue.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...Ue].join(", ")}`);let t=e.facilitatorUrl??et,n=e.channelStore??new Ze({directory:Qe(Ye(),".dexter-x402","seller-channels")}),r=Ce({payTo:e.payTo,network:e.network,price:e.price,route:e.route??tt,facilitatorUrl:t,channelStore:n,verbose:e.verbose}),s=r.scheme.createChannelManager(r.facilitator,e.network),p=async()=>{await s.claimAndSettle()},l=rt(e.autoSettle),y=null;l!==null&&(y=De({claimAndSettle:p,claimIntervalMs:l,onError:c=>console.error("[batch-settlement:seller] auto-loop claim pass failed",c)}));let g=n,h=(c,o,f)=>{r.handler(c,o,f)},S=h;return S.middleware=()=>h,S.closeChannel=c=>ge({manager:s,store:g,channelId:c}),S.closeAll=()=>Ie({manager:s,store:g}),S.stop=async()=>{y&&await y.stop()},S}function nt(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 st(e){if(e.scheme==="batch-settlement"){let d=Array.isArray(e.network)?e.network[0]:e.network;if(!d)throw new Error('x402Middleware: scheme "batch-settlement" requires a network');let u=typeof e.payTo=="string"?e.payTo:void 0;if(!u)throw new Error('x402Middleware: scheme "batch-settlement" requires a string payTo address');return ye({payTo:u,network:d,price:e.amount,facilitatorUrl:e.facilitatorUrl,route:e.batchSettlement?.route,channelStore:e.batchSettlement?.channelStore,autoSettle:e.batchSettlement?.autoSettle,verbose:e.verbose})}let{payTo:t,amount:n,asset:r,description:s,resourceUrl:p,mimeType:l,timeoutSeconds:y,verbose:g=!1,getResourceUrl:h,getAmount:S,getDescription:c}=e,o=g?console.log.bind(console,"[x402:middleware]"):()=>{},f=typeof t=="function"?t._x402Defaults:void 0,m=e.facilitatorUrl??f?.facilitatorUrl,x=e.network?Array.isArray(e.network)?e.network:[e.network]:f?.network?[f.network]:[le],T=new Map;for(let d of x){let u=nt(t,d);if(typeof u=="function"){let b=_e(u);if(b&&d!==b)throw new Error(`stripePayTo is configured for "${b}" but middleware includes network "${d}". Stripe only supports Base deposit addresses. Use a static payTo for other chains.`)}T.set(d,Q({payTo:u,network:d,asset:r,facilitatorUrl:m,defaultTimeoutSeconds:y,scheme:e.scheme}))}let E=T.get(x[0]);return async(d,u,b)=>{try{let P=d.headers["payment-signature"];if(!P){o("No payment signature, returning 402");let M=h?.(d)??p??`${d.protocol}://${d.get("host")}${d.originalUrl}`,A=S?.(d)??n,L=c?.(d)??s,k=r?.decimals??j,N={amountAtomic:G(parseFloat(A),k),resourceUrl:M,description:L,mimeType:l,timeoutSeconds:y},F=[],C=null;for(let[,de]of T)try{let ee=await de.buildRequirements(N);F.push(...ee.accepts),C||(C=ee)}catch(ee){o("Failed to build requirements for a network:",ee)}if(!C||F.length===0){u.status(500).json({error:"Failed to build payment requirements"});return}C={...C,accepts:F};let Z=E.encodeRequirements(C);u.setHeader("PAYMENT-REQUIRED",Z),u.status(402).json({error:"Payment required",accepts:C.accepts,resource:C.resource});return}o("Payment signature received, verifying...");let R=E;try{let A=JSON.parse(Buffer.from(P,"base64").toString())?.accepted?.network;A&&T.has(A)&&(R=T.get(A))}catch{}let a=await R.verifyPayment(P);if(!a.isValid){if(o("Payment verification failed:",a.invalidReason),e.onVerifyFailed)try{await e.onVerifyFailed({reason:a.invalidReason,resourceUrl:`${d.protocol}://${d.get("host")}${d.originalUrl}`})}catch{}u.status(402).json({error:"Payment verification failed",reason:a.invalidReason});return}o("Payment verified, settling...");let i=await R.settlePayment(P);if(!i.success){o("Payment settlement failed:",i.errorReason),u.status(402).json({error:"Payment settlement failed",reason:i.errorReason});return}o("Payment settled:",i.transaction);let w=i.network||x[0];if(e.onSettlement)try{await e.onSettlement({transaction:i.transaction,network:w,payer:a.payer??"",resourceUrl:`${d.protocol}://${d.get("host")}${d.originalUrl}`})}catch{}d.x402={transaction:i.transaction,payer:a.payer??"",network:w};let _={success:!0,transaction:i.transaction,network:w,payer:a.payer??""};if(i.extensions&&(_.extensions=i.extensions),u.setHeader("PAYMENT-RESPONSE",W(_)),e.sponsoredAccess&&i.extensions?.["sponsored-access"]){let M=i.extensions["sponsored-access"],A=M?.info?.recommendations??M?.recommendations;if(A&&A.length>0){if(o("Injecting sponsored-access recommendations into response"),typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.onMatch)try{e.sponsoredAccess.onMatch(A,{transaction:i.transaction,network:w,payer:a.payer??""})}catch{}let L=u.json.bind(u);u.json=function(v){return typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.inject?L(e.sponsoredAccess.inject(v,A)):v&&typeof v=="object"&&!Array.isArray(v)?L({_x402_sponsored:A,...v}):L(v)}}}b()}catch(P){o("Middleware error:",P),u.status(500).json({error:"Payment processing error"})}}}function O(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var ot='<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>',it='<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>',at=`
|
|
1
|
+
var L="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Te="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Se="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var H="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 j="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";var de="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",Le="0x55d398326f99059fF775485246999027B3197955",we="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",Ae={[oe]:we,[H]:de,[ee]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[te]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[re]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[ne]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[se]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[ie]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[ae]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[ce]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},Re={[Le]:{symbol:"USDT",decimals:18},[we]:{symbol:"USDC",decimals:18}},pe=6;var Lt={[oe]:56,[H]:8453,[ee]:84532,[te]:42161,[re]:137,[ne]:10,[se]:43114,[ie]:1187947933,[ae]:324705682,[ce]:1},Ft={[L]:"https://api.dexter.cash/api/solana/rpc",[Te]:"https://api.devnet.solana.com",[Se]:"https://api.testnet.solana.com"},qt={[oe]:"https://bsc-dataseed1.binance.org",[H]:"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"},U="https://x402.dexter.cash",le=L;function V(e,t){if(!Number.isFinite(e))throw new Error(`toAtomicUnits: amount must be finite, got ${e}`);if(e<0)throw new Error(`toAtomicUnits: amount must be non-negative, got ${e}`);if(!Number.isInteger(t)||t<0)throw new Error(`toAtomicUnits: decimals must be a non-negative integer, got ${t}`);let n=Fe(Math.abs(e)),[r,s=""]=n.split("."),c=s.slice(0,t).padEnd(t,"0");return BigInt(r+c).toString()}function Fe(e){let t=e.toString();if(!/[eE]/.test(t))return t;let[n,r]=t.split(/[eE]/),s=parseInt(r,10),c=n.startsWith("-"),l=c?n.slice(1):n,[g,y=""]=l.split("."),u=g+y,S=g.length+s,a;return S<=0?a="0."+"0".repeat(-S)+u:S>=u.length?a=u+"0".repeat(S-u.length):a=u.slice(0,S)+"."+u.slice(S),(c?"-":"")+a}function me(e){return e.startsWith("solana:")||e==="solana"}function qe(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 We(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 qe(JSON.stringify(e))}function G(e){return JSON.parse(We(e))}function Ke(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=U,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&&Ke(c)){let l=this.retryBaseMs*Math.pow(2,s);await new Promise(g=>setTimeout(g,l));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.scheme==="batch-settlement")&&s.network===t)?.extra}async verifyPayment(t,n){try{let r=G(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=G(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 ke(e){if(me(e))return{address:j,decimals:6};let t=Ae[e];if(t){let n=Re[t]?.decimals??6;return{address:t,decimals:n}}return{address:j,decimals:6}}function Ee(e){try{let t=G(e);return t?.accepted?.amount??t?.accepted?.maxAmountRequired}catch{return}}function Y(e){let{payTo:t,facilitatorUrl:n=U,network:r=L,defaultTimeoutSeconds:s=60}=e,c=e.asset??ke(r),l=e.scheme??"exact",g=new J(n),y=null,u=new Map,S=3e4,a=Date.now();function o(p){let i=(p.maxTimeoutSeconds||s)*1e3;if(u.set(p.payTo,{accept:p,expiresAt:Date.now()+i}),Date.now()-a>S){let w=Date.now();for(let[C,_]of u)_.expiresAt<w&&u.delete(C);a=w}}function h(p){let i=u.get(p);if(i){if(i.expiresAt<Date.now()){u.delete(p);return}return i.accept}}async function f(p){return typeof t=="string"?t:t(p||{})}async function x(){if(y||(y=await g.getNetworkExtra(r)),me(r)&&!y?.feePayer)throw new Error(`Facilitator does not provide feePayer for network "${r}"`);return{...y?.feePayer?{feePayer:y.feePayer}:{},decimals:y?.decimals??c.decimals,name:y?.name,version:y?.version,...l==="batch-settlement"&&y?.receiverAuthorizer?{receiverAuthorizer:y.receiverAuthorizer}:{}}}async function T(p,i){let{amountAtomic:w,timeoutSeconds:C=s}=i,_=await x(),R={scheme:l,network:r,amount:w,maxAmountRequired:w,asset:c.address,payTo:p,maxTimeoutSeconds:C,extra:_};return o(R),R}async function E(p){let i=await f({amountAtomic:p.amountAtomic,resourceUrl:p.resourceUrl});return T(i,p)}async function m(p){let{resourceUrl:i,description:w,mimeType:C="application/json"}=p,_={url:i,description:w,mimeType:C},R=await E(p);return{x402Version:2,resource:_,accepts:[R],error:"Payment required"}}function d(p){return F(p)}function b(p){return{status:402,headers:{"PAYMENT-REQUIRED":d(p)},body:{}}}async function P(p,i){if(!i){let w=await f({paymentHeader:p});i=h(w),i||(i=await T(w,{amountAtomic:Ee(p)??"0",resourceUrl:""}))}return g.verifyPayment(p,i)}async function A(p,i){if(!i){let w=await f({paymentHeader:p});i=h(w),i||(i=await T(w,{amountAtomic:Ee(p)??"0",resourceUrl:""}))}return g.settlePayment(p,i)}return{buildRequirements:m,encodeRequirements:d,create402Response:b,verifyPayment:P,settlePayment:A,getPaymentAccept:E,network:r,assetDecimals:c.decimals,facilitator:g}}var ve=new WeakMap;function Me(e){return ve.get(e)}var He={base:"base","base-sepolia":"base_sepolia"},ze={base:"eip155:8453","base-sepolia":"eip155:84532"};function je(e){let t=typeof e=="string"?{secretKey:e}:e,n=t.network??"base",r=He[n]??"base",s=ze[n]??"eip155:8453",c=t.apiVersion??"2026-01-28.clover",l=null;async function g(){if(l)return l;try{let{default:u}=await import("stripe");return l=new u(t.secretKey,{apiVersion:c,appInfo:{name:"@dexterai/x402",url:"https://dexter.cash/sdk"}}),l}catch{throw new Error('The "stripe" package is required for stripePayTo(). Install it with: npm install stripe')}}let y=async u=>{if(u.paymentHeader){try{let E=JSON.parse(Buffer.from(u.paymentHeader,"base64").toString()),m=E.payload?.authorization?.to;if(m&&typeof m=="string")return m;let d=E.accepted?.payTo;if(d&&typeof d=="string")return d}catch{}throw new Error("Could not extract deposit address from payment header. Ensure the client is sending a valid x402 PAYMENT-SIGNATURE.")}let S=await g(),a=u.amountAtomic?parseInt(u.amountAtomic,10):1e4,o=Math.max(1,Math.round(a/Math.pow(10,pe-2))),f=(await S.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 x=f.crypto_collect_deposit_details,T=x.deposit_addresses?.[r]?.address;if(!T)throw new Error(`No deposit address found for network "${r}". Available networks: ${Object.keys(x.deposit_addresses||{}).join(", ")}`);return T};return y._x402Defaults={network:s,facilitatorUrl:U},ve.set(y,s),y}import{homedir as Ye}from"os";import{join as Qe}from"path";import{FileChannelStorage as Ze}from"@x402/evm/batch-settlement/server";import{HTTPFacilitatorClient as Ve,x402ResourceServer as Ge}from"@x402/core/server";import{x402HTTPResourceServer as Xe}from"@x402/core/http";import{BatchSettlementEvmScheme as Je}from"@x402/evm/batch-settlement/server";function _e(e){let t=e.verbose?console.log.bind(console,"[batch-settlement:seller]"):()=>{},n=new Ve({url:e.facilitatorUrl}),r=new Je(e.payTo,{storage:e.channelStore}),s=new Ge(n).register(e.network,r),c=new Xe(s,{[e.route]:{accepts:{scheme:"batch-settlement",payTo:e.payTo,price:e.price,network:e.network},description:"batch-settlement protected route",mimeType:"application/json"}}),l=null;function g(){if(l)return l;let a=c.initialize();return a.catch(o=>{l===a&&(l=null),e.verbose?t("resource server initialize() failed:",o):console.error("[batch-settlement:seller] resource server initialize() failed:",o)}),l=a,a}let y=g();function u(a,o){if(a.headersSent)return;for(let[f,x]of Object.entries(o.headers))a.setHeader(f,x);a.status(o.status);let{body:h}=o;h==null?a.end():typeof h=="string"?a.send(h):a.json(h)}return{scheme:r,facilitator:n,handler:async(a,o,h)=>{try{await g();let f=a.get("host")??"",x=`${a.baseUrl??""}${a.path}`||"/",T={getHeader:A=>a.headers[A.toLowerCase()],getMethod:()=>a.method,getPath:()=>x,getUrl:()=>`${a.protocol}://${f}${a.originalUrl}`,getAcceptHeader:()=>a.headers.accept??"",getUserAgent:()=>a.headers["user-agent"]??"",getBody:()=>a.body??{},getQueryParams:()=>a.query,getQueryParam:A=>{let p=a.query[A];if(typeof p=="string"||Array.isArray(p))return p}},E=a.headers["payment-signature"]??a.headers["x-payment"],m={adapter:T,path:x,method:a.method,paymentHeader:E},d=await c.processHTTPRequest(m);if(t("processHTTPRequest ->",d.type),d.type==="no-payment-required"){h();return}if(d.type==="payment-error"){u(o,d.response);return}let b={request:m,responseBody:Buffer.alloc(0)},P=await c.processSettlement(d.paymentPayload,d.paymentRequirements,d.declaredExtensions,b);if(t("processSettlement ->",P.success?"success":`failure:${P.errorReason}`),!P.success){u(o,P.response);return}for(let[A,p]of Object.entries(P.headers))o.headersSent||o.setHeader(A,p);h()}catch(f){t("handler error:",f),o.headersSent||o.status(500).json({error:"Payment processing error"})}},ready:y}}import{formatUnits as Ce}from"viem";var Ne=6;async function fe(e){let{manager:t,store:n,channelId:r}=e,s=await n.get(r),c=BigInt(s?.chargedCumulativeAmount??"0"),l=BigInt(s?.balance??"0"),g=l>c?l-c:0n,{claims:y,settle:u}=await t.claimAndSettle(),S=await t.refund([r]),a=S.find(o=>o.channel===r)??S[0];return{claimTx:y[0]?.transaction??"",settleTx:u?.transaction??"",refundTx:a?.transaction??"",settledAmount:Ce(c,Ne),refundedAmount:Ce(g,Ne)}}async function Oe(e){let t=await e.store.list(),n=[];for(let r of t)try{let s=await fe({manager:e.manager,store:e.store,channelId:r.channelId});n.push({channelId:r.channelId,...s})}catch(s){n.push({channelId:r.channelId,error:s instanceof Error?s.message:String(s)})}return n}function Ie(e){let t=!1,n=async()=>{try{await e.claimAndSettle()}catch(s){e.onError?.(s)}},r=setInterval(()=>{t||n()},e.claimIntervalMs);return typeof r.unref=="function"&&r.unref(),{async stop(){t||(t=!0,clearInterval(r),await n())}}}var et="https://x402.dexter.cash",tt="GET /",De=new Set(["eip155:8453","eip155:42161","eip155:137"]);function rt(e){return e===!1?null:e===void 0||e===!0?3e5:(e.claimIntervalSecs??300)*1e3}function ge(e){if(!De.has(e.network))throw new Error(`batch-settlement is not supported on network "${e.network}" \u2014 supported: ${[...De].join(", ")}`);let t=e.facilitatorUrl??et,n=e.channelStore??new Ze({directory:Qe(Ye(),".dexter-x402","seller-channels")}),r=_e({payTo:e.payTo,network:e.network,price:e.price,route:e.route??tt,facilitatorUrl:t,channelStore:n,verbose:e.verbose}),s=r.scheme.createChannelManager(r.facilitator,e.network),c=async()=>{await s.claimAndSettle()},l=rt(e.autoSettle),g=null;l!==null&&(g=Ie({claimAndSettle:c,claimIntervalMs:l,onError:a=>console.error("[batch-settlement:seller] auto-loop claim pass failed",a)}));let y=n,u=(a,o,h)=>{r.handler(a,o,h)},S=u;return S.middleware=()=>u,S.closeChannel=a=>fe({manager:s,store:y,channelId:a}),S.closeAll=()=>Oe({manager:s,store:y}),S.stop=async()=>{g&&await g.stop()},S}function nt(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 st(e){if(e.scheme==="batch-settlement"){let m=Array.isArray(e.network)?e.network[0]:e.network;if(!m)throw new Error('x402Middleware: scheme "batch-settlement" requires a network');let d=typeof e.payTo=="string"?e.payTo:void 0;if(!d)throw new Error('x402Middleware: scheme "batch-settlement" requires a string payTo address');return ge({payTo:d,network:m,price:e.amount,facilitatorUrl:e.facilitatorUrl,route:e.batchSettlement?.route,channelStore:e.batchSettlement?.channelStore,autoSettle:e.batchSettlement?.autoSettle,verbose:e.verbose})}let{payTo:t,amount:n,asset:r,description:s,resourceUrl:c,mimeType:l,timeoutSeconds:g,verbose:y=!1,getResourceUrl:u,getAmount:S,getDescription:a}=e,o=y?console.log.bind(console,"[x402:middleware]"):()=>{},h=typeof t=="function"?t._x402Defaults:void 0,f=e.facilitatorUrl??h?.facilitatorUrl,x=e.network?Array.isArray(e.network)?e.network:[e.network]:h?.network?[h.network]:[le],T=new Map;for(let m of x){let d=nt(t,m);if(typeof d=="function"){let b=Me(d);if(b&&m!==b)throw new Error(`stripePayTo is configured for "${b}" but middleware includes network "${m}". Stripe only supports Base deposit addresses. Use a static payTo for other chains.`)}T.set(m,Y({payTo:d,network:m,asset:r,facilitatorUrl:f,defaultTimeoutSeconds:g,scheme:e.scheme}))}let E=T.get(x[0]);return async(m,d,b)=>{try{let P=m.headers["payment-signature"];if(!P){o("No payment signature, returning 402");let _=u?.(m)??c??`${m.protocol}://${m.get("host")}${m.originalUrl}`,R=S?.(m)??n,$=a?.(m)??s,k=parseFloat(R),v=[],M=null;for(let[,Q]of T)try{let K={amountAtomic:V(k,Q.assetDecimals),resourceUrl:_,description:$,mimeType:l,timeoutSeconds:g},Z=await Q.buildRequirements(K);v.push(...Z.accepts),M||(M=Z)}catch(K){o("Failed to build requirements for a network:",K)}if(!M||v.length===0){d.status(500).json({error:"Failed to build payment requirements"});return}M={...M,accepts:v};let z=E.encodeRequirements(M);d.setHeader("PAYMENT-REQUIRED",z),d.status(402).json({error:"Payment required",accepts:M.accepts,resource:M.resource});return}o("Payment signature received, verifying...");let A=E;try{let R=JSON.parse(Buffer.from(P,"base64").toString())?.accepted?.network;R&&T.has(R)&&(A=T.get(R))}catch{}let p=await A.verifyPayment(P);if(!p.isValid){if(o("Payment verification failed:",p.invalidReason),e.onVerifyFailed)try{await e.onVerifyFailed({reason:p.invalidReason,resourceUrl:`${m.protocol}://${m.get("host")}${m.originalUrl}`})}catch{}d.status(402).json({error:"Payment verification failed",reason:p.invalidReason});return}o("Payment verified, settling...");let i=await A.settlePayment(P);if(!i.success){o("Payment settlement failed:",i.errorReason),d.status(402).json({error:"Payment settlement failed",reason:i.errorReason});return}o("Payment settled:",i.transaction);let w=i.network||x[0];if(e.onSettlement)try{await e.onSettlement({transaction:i.transaction,network:w,payer:p.payer??"",resourceUrl:`${m.protocol}://${m.get("host")}${m.originalUrl}`})}catch{}m.x402={transaction:i.transaction,payer:p.payer??"",network:w};let C={success:!0,transaction:i.transaction,network:w,payer:p.payer??""};if(i.extensions&&(C.extensions=i.extensions),d.setHeader("PAYMENT-RESPONSE",F(C)),e.sponsoredAccess&&i.extensions?.["sponsored-access"]){let _=i.extensions["sponsored-access"],R=_?.info?.recommendations??_?.recommendations;if(R&&R.length>0){if(o("Injecting sponsored-access recommendations into response"),typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.onMatch)try{e.sponsoredAccess.onMatch(R,{transaction:i.transaction,network:w,payer:p.payer??""})}catch{}let $=d.json.bind(d);d.json=function(v){return typeof e.sponsoredAccess=="object"&&e.sponsoredAccess.inject?$(e.sponsoredAccess.inject(v,R)):v&&typeof v=="object"&&!Array.isArray(v)?$({_x402_sponsored:R,...v}):$(v)}}}b()}catch(P){o("Middleware error:",P),d.status(500).json({error:"Payment processing error"})}}}function N(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}var ot='<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>',it='<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>',at=`
|
|
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}
|
|
@@ -233,21 +233,21 @@ if (btn) {
|
|
|
233
233
|
});
|
|
234
234
|
}
|
|
235
235
|
</script>
|
|
236
|
-
`;function lt(e,t,n,r,s,
|
|
236
|
+
`;function lt(e,t,n,r,s,c){let l="?",g="This resource requires payment",y="";try{let a=JSON.parse(Buffer.from(e,"base64").toString()),o=a.accepts?.[0];if(o){let h=o.amount??o.maxAmountRequired??"0",f=o.extra?.decimals||6;l=(Number(h)/Math.pow(10,f)).toFixed(f>4?4:2),y=o.network||""}a.resource?.description&&(g=a.resource.description)}catch{}let u=y.includes("solana")?"Solana":y.includes("eip155")?"Base":"",S=r.showEndpoint?`<div class="endpoint"><code>${N(n)} ${N(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>${
|
|
241
|
+
<title>${N(r.title)} \u2014 ${N(l)} USDC</title>
|
|
242
242
|
<style>${at}${ct}</style>
|
|
243
243
|
</head>
|
|
244
244
|
<body>
|
|
245
245
|
<div class="card">
|
|
246
246
|
<div class="crest">${it}</div>
|
|
247
|
-
<h1>${
|
|
248
|
-
<p class="desc">${
|
|
249
|
-
<div class="price">${ot}<span id="price-value">${
|
|
250
|
-
<div class="chain">${
|
|
247
|
+
<h1>${N(r.title)}</h1>
|
|
248
|
+
<p class="desc">${N(g)}</p>
|
|
249
|
+
<div class="price">${ot}<span id="price-value">${N(l)}</span></div>
|
|
250
|
+
<div class="chain">${N(u)}${u?" network":""}</div>
|
|
251
251
|
${S}
|
|
252
252
|
|
|
253
253
|
<div id="pay-section" class="pay-section" style="display:none">
|
|
@@ -277,10 +277,10 @@ if (btn) {
|
|
|
277
277
|
data-method="${n}"
|
|
278
278
|
data-url="${t}"
|
|
279
279
|
data-rpc="${s}"
|
|
280
|
-
data-body="${
|
|
280
|
+
data-body="${c?Buffer.from(c).toString("base64"):""}"
|
|
281
281
|
></div>
|
|
282
282
|
${pt}
|
|
283
283
|
</body>
|
|
284
|
-
</html>`}function ut(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,p)=>{let l=s.json.bind(s);s.json=function(y){if(s.statusCode===402&&r.accepts("html")&&!r.headers["payment-signature"]){let g=s.getHeader("PAYMENT-REQUIRED")||s.getHeader("payment-required");if(g&&typeof g=="string"){let h;if(r.body&&typeof r.body=="object"&&Object.keys(r.body).length>0)try{h=JSON.stringify(r.body)}catch{}let S=lt(g,r.originalUrl,r.method,t,n,h);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(S),s}}return l(y)},p()}}import he from"crypto";var dt=/^(\d+)(m|h|d|w)$/;function mt(e){let t=e.match(dt);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 Be(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 ft(e,t){let n=Buffer.from(JSON.stringify({alg:"HS256",typ:"JWT"})).toString("base64url"),r=Buffer.from(JSON.stringify(e)).toString("base64url"),s=he.createHmac("sha256",t).update(`${n}.${r}`).digest("base64url");return`${n}.${r}.${s}`}function gt(e,t){try{let n=e.split(".");if(n.length!==3)return null;let[r,s,p]=n,l=he.createHmac("sha256",t).update(`${r}.${s}`).digest("base64url");if(p!==l)return null;let y=JSON.parse(Buffer.from(s,"base64url").toString());return y.exp&&Date.now()/1e3>y.exp||y.sub!=="x402-access-pass"?null:y}catch{return null}}function yt(e){let{payTo:t,network:n=le,asset:r,facilitatorUrl:s,tiers:p,ratePerHour:l,secret:y,issuer:g="x402-access-pass",verbose:h=!1,description:S}=e,c=y??he.randomBytes(32);if(y||console.warn("[x402:access-pass] No secret provided \u2014 access passes will be invalidated on server restart. Set `secret` for production use."),!p&&!l)throw new Error("x402AccessPass: at least one of `tiers` or `ratePerHour` is required");let o=h?console.log.bind(console,"[x402:access-pass]"):()=>{},f=r?.decimals??j,m=[];if(p){for(let[b,P]of Object.entries(p)){let R=mt(b);if(!R){console.warn(`x402AccessPass: skipping tier "${b}" \u2014 unrecognized duration format (use 5m, 1h, 24h, 7d)`);continue}m.push({id:b,label:Be(R),seconds:R,price:P,priceAtomic:G(parseFloat(P),f)})}m.sort((b,P)=>b.seconds-P.seconds)}let x=Q({payTo:t,network:n,asset:r,facilitatorUrl:s}),T={tiers:m.length>0?m:void 0,ratePerHour:l||void 0,issuer:g},E=W(T);function d(b){if(!l)throw new Error("Custom durations not supported \u2014 no ratePerHour configured");let P=b/3600,R=(parseFloat(l)*P).toFixed(f>4?4:2);return{price:R,priceAtomic:G(parseFloat(R),f)}}function u(b){let P=b.query.tier,R=b.query.duration;if(P){let i=m.find(w=>w.id===P);if(i)return{tier:i.id,seconds:i.seconds,price:i.price,priceAtomic:i.priceAtomic,label:i.label}}if(R){let i=parseInt(R,10);if(i>0&&l){let w=d(i);return{tier:"custom",seconds:i,...w,label:Be(i)}}}if(m.length>0){let i=m[0];return{tier:i.id,seconds:i.seconds,price:i.price,priceAtomic:i.priceAtomic,label:i.label}}return{tier:"custom",seconds:3600,...d(3600),label:"1 hour"}}return async(b,P,R)=>{try{let a=b.headers.authorization;if(a?.startsWith("Bearer ")){let k=gt(a.slice(7),c);if(k)return o("Valid access pass:",k.tier,"| expires:",new Date(k.exp*1e3).toISOString()),b.accessPass={tier:k.tier,duration:k.duration,expiresAt:new Date(k.exp*1e3).toISOString(),payer:k.payer,network:k.network},R();o("Invalid or expired access pass token")}let i=b.headers["payment-signature"];if(i){o("Payment signature received, verifying for pass purchase...");let k=await x.verifyPayment(i);if(!k.isValid){o("Payment verification failed:",k.invalidReason),P.status(402).json({error:"Payment verification failed",reason:k.invalidReason});return}let v=await x.settlePayment(i);if(!v.success){o("Payment settlement failed:",v.errorReason),P.status(402).json({error:"Payment settlement failed",reason:v.errorReason});return}o("Payment settled:",v.transaction);let N=u(b),F=Math.floor(Date.now()/1e3),C={sub:"x402-access-pass",tier:N.tier,duration:N.seconds,iat:F,exp:F+N.seconds,payer:k.payer??"",network:n,iss:g},Z=ft(C,c);b.x402={transaction:v.transaction,payer:k.payer??"",network:n};let de={success:!0,transaction:v.transaction,network:n,payer:k.payer??""};P.setHeader("PAYMENT-RESPONSE",W(de)),P.setHeader("ACCESS-PASS",Z),P.json({accessPass:{token:Z,tier:N.tier,duration:N.label,durationSeconds:N.seconds,expiresAt:new Date((F+N.seconds)*1e3).toISOString(),usage:"Include on subsequent requests as: Authorization: Bearer <token>"},transaction:v.transaction,payer:k.payer});return}o("No access pass or payment, returning 402");let w=u(b),_=w.priceAtomic,M=`${b.protocol}://${b.get("host")}${b.originalUrl}`,A=await x.buildRequirements({amountAtomic:_,resourceUrl:M,description:S||`Access pass: ${w.label}`,mimeType:"application/json"}),L=x.encodeRequirements(A);P.setHeader("PAYMENT-REQUIRED",L),P.setHeader("X-ACCESS-PASS-TIERS",E),P.status(402).json({error:"Access pass required",message:"Purchase an access pass to unlock unlimited API access for a time window.",accepts:A.accepts,resource:A.resource,accessPass:{tiers:m.length>0?m:void 0,ratePerHour:l||void 0,usage:"Add ?tier=<id> or ?duration=<seconds> to your payment request to choose a pass duration."}})}catch(a){o("Access pass middleware error:",a),P.status(500).json({error:"Payment processing error",message:a instanceof Error?a.message:"Unknown error"})}}}import{createHmac as ht,randomBytes as xt}from"crypto";var bt=300;function Pt(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:p,roundingMode:l,decimals:y}=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(p<s)throw new Error("maxUsd must be >= minUsd");let g=xt(32);function h(o,f){let m=JSON.stringify({unitSize:n,ratePerUnit:r,minUsd:s,maxUsd:p===1/0?"none":p,roundingMode:l}),x=`${o}|${m}|${f}`;return ht("sha256",g).update(x).digest("hex").slice(0,16)}function S(o){let f=o.length,m=f/n,x;switch(l){case"ceil":x=Math.ceil(m);break;case"floor":x=Math.floor(m);break;case"round":x=Math.round(m);break}f>0&&x===0&&(x=1);let T=x*r;T=Math.max(s,T),T=Math.min(p,T);let E=Math.pow(10,y),d=Math.floor(T*E).toString(),u=Math.floor(Date.now()/1e3),b=h(o,u),P=`${u}.${b}`;return{amountAtomic:d,usdAmount:T,quoteHash:P,units:x,inputLength:f}}function c(o,f){if(!f)return!1;let m=f.indexOf(".");if(m===-1)return!1;let x=parseInt(f.slice(0,m),10),T=f.slice(m+1);if(isNaN(x)||!T)return!1;let E=Math.floor(Date.now()/1e3)-x;if(E<0||E>bt)return!1;let d=h(o,x);if(T.length!==d.length)return!1;let u=0;for(let b=0;b<T.length;b++)u|=T.charCodeAt(b)^d.charCodeAt(b);return u===0}return{calculate:S,validateQuote:c,config:t}}function Tt(e){let t=e.ratePerUnit.toFixed(2),n=e.unitSize.toLocaleString();return`from $${t} per ${n} chars`}import{createHash as Nt}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},$e={...$,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:$e,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:$e,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"}],xe=new Map(D.map(e=>[e.id,e]));function be(e){let t=xe.get(e);if(!t)throw new Error(`Unknown model: ${e}. Use getAvailableModelIds() to see valid options.`);return t}function St(e){return xe.get(e)}function wt(e){return xe.has(e)}function Rt(){return D.map(e=>e.id)}function At(e){return D.filter(t=>t.tier===e&&!t.deprecated).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function Et(e){return D.filter(t=>t.family===e).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function kt(){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 vt(){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 Mt(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,p)=>s.pricing.input-p.pricing.input)[0]}function _t(e,t,n,r=!1){let s=be(e),p=r&&s.pricing.cached?t/1e6*s.pricing.cached:t/1e6*s.pricing.input,l=n/1e6*s.pricing.output;return p+l}function Ct(e){let t=be(e);return`$${t.pricing.input.toFixed(2)} in / $${t.pricing.output.toFixed(2)} out per 1M tokens`}var Pe=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 Ot(){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=Pe,H="gpt-4o-mini";async function It(e){let t=await Ot();try{return t.encoding_for_model(e)}catch{return t.get_encoding("cl100k_base")}}async function Te(e,t=H){let n=await It(t);try{return n.encode(e).length}finally{n.free()}}function Le(e,t,n,r){let s=JSON.stringify({model:t,rate:n,tokens:r});return Nt("sha256").update(e+s).digest("hex").slice(0,16)}function Dt(e={}){let t=e.model??H,n=U[t],r={input:e.inputRate??n?.input??U[H].input,output:e.outputRate??n?.output??U[H].output,maxTokens:e.maxTokens??n?.maxTokens??4096,tier:e.tier??n?.tier??"custom"},s=e.tokenizer,p={model:t,inputRate:r.input,outputRate:r.output,maxTokens:r.maxTokens,tier:r.tier,tokenizer:s??(o=>Te(o,t)),minUsd:e.minUsd??.001,maxUsd:e.maxUsd??50,decimals:e.decimals??6},{minUsd:l,maxUsd:y,decimals:g}=p;async function h(o){return s?s(o):Te(o,t)}async function S(o,f){let m=f?`${f}
|
|
284
|
+
</html>`}function ut(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 l=s.json.bind(s);s.json=function(g){if(s.statusCode===402&&r.accepts("html")&&!r.headers["payment-signature"]){let y=s.getHeader("PAYMENT-REQUIRED")||s.getHeader("payment-required");if(y&&typeof y=="string"){let u;if(r.body&&typeof r.body=="object"&&Object.keys(r.body).length>0)try{u=JSON.stringify(r.body)}catch{}let S=lt(y,r.originalUrl,r.method,t,n,u);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(S),s}}return l(g)},c()}}import ye from"crypto";var dt=/^(\d+)(m|h|d|w)$/;function mt(e){let t=e.match(dt);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 Ue(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 ft(e,t){let n=Buffer.from(JSON.stringify({alg:"HS256",typ:"JWT"})).toString("base64url"),r=Buffer.from(JSON.stringify(e)).toString("base64url"),s=ye.createHmac("sha256",t).update(`${n}.${r}`).digest("base64url");return`${n}.${r}.${s}`}function gt(e,t){try{let n=e.split(".");if(n.length!==3)return null;let[r,s,c]=n,l=ye.createHmac("sha256",t).update(`${r}.${s}`).digest("base64url");if(c!==l)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 yt(e){let{payTo:t,network:n=le,asset:r,facilitatorUrl:s,tiers:c,ratePerHour:l,secret:g,issuer:y="x402-access-pass",verbose:u=!1,description:S}=e,a=g??ye.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&&!l)throw new Error("x402AccessPass: at least one of `tiers` or `ratePerHour` is required");let o=u?console.log.bind(console,"[x402:access-pass]"):()=>{},h=r?.decimals??pe,f=[];if(c){for(let[b,P]of Object.entries(c)){let A=mt(b);if(!A){console.warn(`x402AccessPass: skipping tier "${b}" \u2014 unrecognized duration format (use 5m, 1h, 24h, 7d)`);continue}f.push({id:b,label:Ue(A),seconds:A,price:P,priceAtomic:V(parseFloat(P),h)})}f.sort((b,P)=>b.seconds-P.seconds)}let x=Y({payTo:t,network:n,asset:r,facilitatorUrl:s}),T={tiers:f.length>0?f:void 0,ratePerHour:l||void 0,issuer:y},E=F(T);function m(b){if(!l)throw new Error("Custom durations not supported \u2014 no ratePerHour configured");let P=b/3600,A=(parseFloat(l)*P).toFixed(h>4?4:2);return{price:A,priceAtomic:V(parseFloat(A),h)}}function d(b){let P=b.query.tier,A=b.query.duration;if(P){let i=f.find(w=>w.id===P);if(i)return{tier:i.id,seconds:i.seconds,price:i.price,priceAtomic:i.priceAtomic,label:i.label}}if(A){let i=parseInt(A,10);if(i>0&&l){let w=m(i);return{tier:"custom",seconds:i,...w,label:Ue(i)}}}if(f.length>0){let i=f[0];return{tier:i.id,seconds:i.seconds,price:i.price,priceAtomic:i.priceAtomic,label:i.label}}return{tier:"custom",seconds:3600,...m(3600),label:"1 hour"}}return async(b,P,A)=>{try{let p=b.headers.authorization;if(p?.startsWith("Bearer ")){let k=gt(p.slice(7),a);if(k)return o("Valid access pass:",k.tier,"| expires:",new Date(k.exp*1e3).toISOString()),b.accessPass={tier:k.tier,duration:k.duration,expiresAt:new Date(k.exp*1e3).toISOString(),payer:k.payer,network:k.network},A();o("Invalid or expired access pass token")}let i=b.headers["payment-signature"];if(i){o("Payment signature received, verifying for pass purchase...");let k=await x.verifyPayment(i);if(!k.isValid){o("Payment verification failed:",k.invalidReason),P.status(402).json({error:"Payment verification failed",reason:k.invalidReason});return}let v=await x.settlePayment(i);if(!v.success){o("Payment settlement failed:",v.errorReason),P.status(402).json({error:"Payment settlement failed",reason:v.errorReason});return}o("Payment settled:",v.transaction);let M=d(b),z=Math.floor(Date.now()/1e3),Q={sub:"x402-access-pass",tier:M.tier,duration:M.seconds,iat:z,exp:z+M.seconds,payer:k.payer??"",network:n,iss:y},K=ft(Q,a);b.x402={transaction:v.transaction,payer:k.payer??"",network:n};let Z={success:!0,transaction:v.transaction,network:n,payer:k.payer??""};P.setHeader("PAYMENT-RESPONSE",F(Z)),P.setHeader("ACCESS-PASS",K),P.json({accessPass:{token:K,tier:M.tier,duration:M.label,durationSeconds:M.seconds,expiresAt:new Date((z+M.seconds)*1e3).toISOString(),usage:"Include on subsequent requests as: Authorization: Bearer <token>"},transaction:v.transaction,payer:k.payer});return}o("No access pass or payment, returning 402");let w=d(b),C=w.priceAtomic,_=`${b.protocol}://${b.get("host")}${b.originalUrl}`,R=await x.buildRequirements({amountAtomic:C,resourceUrl:_,description:S||`Access pass: ${w.label}`,mimeType:"application/json"}),$=x.encodeRequirements(R);P.setHeader("PAYMENT-REQUIRED",$),P.setHeader("X-ACCESS-PASS-TIERS",E),P.status(402).json({error:"Access pass required",message:"Purchase an access pass to unlock unlimited API access for a time window.",accepts:R.accepts,resource:R.resource,accessPass:{tiers:f.length>0?f:void 0,ratePerHour:l||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),P.status(500).json({error:"Payment processing error",message:p instanceof Error?p.message:"Unknown error"})}}}import{createHmac as ht,randomBytes as xt}from"crypto";var bt=300;function Pt(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:l,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 y=xt(32);function u(o,h){let f=JSON.stringify({unitSize:n,ratePerUnit:r,minUsd:s,maxUsd:c===1/0?"none":c,roundingMode:l}),x=`${o}|${f}|${h}`;return ht("sha256",y).update(x).digest("hex").slice(0,16)}function S(o){let h=o.length,f=h/n,x;switch(l){case"ceil":x=Math.ceil(f);break;case"floor":x=Math.floor(f);break;case"round":x=Math.round(f);break}h>0&&x===0&&(x=1);let T=x*r;T=Math.max(s,T),T=Math.min(c,T);let E=Math.pow(10,g),m=Math.floor(T*E).toString(),d=Math.floor(Date.now()/1e3),b=u(o,d),P=`${d}.${b}`;return{amountAtomic:m,usdAmount:T,quoteHash:P,units:x,inputLength:h}}function a(o,h){if(!h)return!1;let f=h.indexOf(".");if(f===-1)return!1;let x=parseInt(h.slice(0,f),10),T=h.slice(f+1);if(isNaN(x)||!T)return!1;let E=Math.floor(Date.now()/1e3)-x;if(E<0||E>bt)return!1;let m=u(o,x);if(T.length!==m.length)return!1;let d=0;for(let b=0;b<T.length;b++)d|=T.charCodeAt(b)^m.charCodeAt(b);return d===0}return{calculate:S,validateQuote:a,config:t}}function Tt(e){let t=e.ratePerUnit.toFixed(2),n=e.unitSize.toLocaleString();return`from $${t} per ${n} chars`}import{createHash as Nt}from"crypto";var O={usesMaxCompletionTokens:!1,supportsTemperature:!0,supportsTopP:!0,supportsFrequencyPenalty:!0,supportsPresencePenalty:!0,supportsReasoningEffort:!1,supportsStreaming:!0,supportsSystemMessage:!0,supportsTools:!0,supportsStructuredOutput:!0},q={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},Be={...B,supportsStreaming:!1},I=[{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:O,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:O,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:O,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:q,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:q,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:O,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:O,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:q,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:q,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:q,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:q,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:q,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:Be,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:Be,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:{...O,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:{...O,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:{...O,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:O,deprecated:!0,description:"Original GPT-4o snapshot, use gpt-4o instead"}],he=new Map(I.map(e=>[e.id,e]));function xe(e){let t=he.get(e);if(!t)throw new Error(`Unknown model: ${e}. Use getAvailableModelIds() to see valid options.`);return t}function St(e){return he.get(e)}function wt(e){return he.has(e)}function At(){return I.map(e=>e.id)}function Rt(e){return I.filter(t=>t.tier===e&&!t.deprecated).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function Et(e){return I.filter(t=>t.family===e).sort((t,n)=>t.capabilityRank-n.capabilityRank)}function kt(){let e={fast:1,standard:2,reasoning:3,premium:4,specialized:5};return I.filter(t=>!t.deprecated).sort((t,n)=>{let r=e[t.tier]-e[n.tier];return r!==0?r:t.capabilityRank-n.capabilityRank})}function vt(){return I.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 Mt(e="fast"){let t={fast:1,standard:2,reasoning:3,premium:4,specialized:5},n=t[e];return I.filter(s=>!s.deprecated&&t[s.tier]>=n).sort((s,c)=>s.pricing.input-c.pricing.input)[0]}function _t(e,t,n,r=!1){let s=xe(e),c=r&&s.pricing.cached?t/1e6*s.pricing.cached:t/1e6*s.pricing.input,l=n/1e6*s.pricing.output;return c+l}function Ct(e){let t=xe(e);return`$${t.pricing.input.toFixed(2)} in / $${t.pricing.output.toFixed(2)} out per 1M tokens`}var be=Object.fromEntries(I.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 Ot(){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 D=be,W="gpt-4o-mini";async function It(e){let t=await Ot();try{return t.encoding_for_model(e)}catch{return t.get_encoding("cl100k_base")}}async function Pe(e,t=W){let n=await It(t);try{return n.encode(e).length}finally{n.free()}}function $e(e,t,n,r){let s=JSON.stringify({model:t,rate:n,tokens:r});return Nt("sha256").update(e+s).digest("hex").slice(0,16)}function Dt(e={}){let t=e.model??W,n=D[t],r={input:e.inputRate??n?.input??D[W].input,output:e.outputRate??n?.output??D[W].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??(o=>Pe(o,t)),minUsd:e.minUsd??.001,maxUsd:e.maxUsd??50,decimals:e.decimals??6},{minUsd:l,maxUsd:g,decimals:y}=c;async function u(o){return s?s(o):Pe(o,t)}async function S(o,h){let f=h?`${h}
|
|
285
285
|
|
|
286
|
-
${o}`:o,x=await
|
|
286
|
+
${o}`:o,x=await u(f),T=x/1e6*r.input;T=Math.max(T,l),T=Math.min(T,g);let E=Math.pow(10,y),m=Math.floor(T*E).toString(),d=$e(o,t,r.input,x);return{amountAtomic:m,usdAmount:T,inputTokens:x,model:t,tier:r.tier,inputRatePerMillion:r.input,outputRatePerMillion:r.output,maxOutputTokens:r.maxTokens,quoteHash:d}}async function a(o,h){if(!h)return!1;let f=await u(o);return $e(o,t,r.input,f)===h}return{calculate:S,validateQuote:a,countTokens:u,config:c,modelInfo:r}}function Ut(){return Object.entries(D).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 Bt(e){return e in D}function $t(e=W){let t=D[e]??D[W],n=D[e]?e:W;return`$${t.input.toFixed(2)} per 1M tokens (${n})`}import{SPONSORED_ACCESS_EXTENSION_KEY as Jr}from"@dexterai/x402-ads-types";export{H as BASE_MAINNET_NETWORK,U as DEXTER_FACILITATOR_URL,J as FacilitatorClient,D as MODEL_PRICING,be as MODEL_PRICING_MAP,I as MODEL_REGISTRY,L as SOLANA_MAINNET_NETWORK,Jr as SPONSORED_ACCESS_EXTENSION_KEY,de as USDC_BASE,j as USDC_MINT,Pe as countTokens,Pt as createDynamicPricing,Dt as createTokenPricing,Y as createX402Server,N as escapeHtml,_t as estimateCost,St as findModel,Ct as formatModelPricing,Tt as formatPricing,$t as formatTokenPricing,kt as getActiveModels,At as getAvailableModelIds,Ut as getAvailableModels,Mt as getCheapestModel,xe as getModel,Et as getModelsByFamily,Rt as getModelsByTier,vt as getTextModels,Bt as isValidModel,wt as isValidModelId,ke as resolveDefaultAsset,je as stripePayTo,yt as x402AccessPass,ut as x402BrowserSupport,st as x402Middleware};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ChainAdapter, W as WalletSet, A as AccessPassClientConfig, P as PaymentAccept } from './types-
|
|
1
|
+
import { C as ChainAdapter, W as WalletSet, A as AccessPassClientConfig, P as PaymentAccept } from './types-htvWHuW3.cjs';
|
|
2
2
|
import { SponsoredRecommendation, SponsoredAccessSettlementInfo } from '@dexterai/x402-ads-types';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as ChainAdapter, W as WalletSet, A as AccessPassClientConfig, P as PaymentAccept } from './types-
|
|
1
|
+
import { C as ChainAdapter, W as WalletSet, A as AccessPassClientConfig, P as PaymentAccept } from './types-htvWHuW3.js';
|
|
2
2
|
import { SponsoredRecommendation, SponsoredAccessSettlementInfo } from '@dexterai/x402-ads-types';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
2
|
import { ChannelStorage } from '@x402/evm/batch-settlement/server';
|
|
3
|
-
import { b as CloseReceipt } from './types-
|
|
3
|
+
import { b as CloseReceipt } from './types-DllrEG_Z.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Result of closing one channel from the seller side. Either a settlement
|
|
@@ -103,17 +103,13 @@ interface PaymentAccept {
|
|
|
103
103
|
extra?: AcceptsExtra;
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* Full PaymentRequired structure
|
|
107
|
-
* v2 sends it in the base64 PAYMENT-REQUIRED header; v1 sent it in the
|
|
108
|
-
* JSON 402 response body.
|
|
106
|
+
* Full PaymentRequired structure (sent in PAYMENT-REQUIRED header)
|
|
109
107
|
*/
|
|
110
108
|
interface PaymentRequired {
|
|
111
|
-
/** x402 version
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
* falls back to the request URL. */
|
|
116
|
-
resource?: ResourceInfo;
|
|
109
|
+
/** x402 version (always 2) */
|
|
110
|
+
x402Version: 2;
|
|
111
|
+
/** Resource being accessed */
|
|
112
|
+
resource: ResourceInfo;
|
|
117
113
|
/** Available payment options */
|
|
118
114
|
accepts: PaymentAccept[];
|
|
119
115
|
/** Optional error message */
|
|
@@ -216,7 +212,7 @@ interface AccessPassClientConfig {
|
|
|
216
212
|
/**
|
|
217
213
|
* SDK error codes
|
|
218
214
|
*/
|
|
219
|
-
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | '
|
|
215
|
+
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';
|
|
220
216
|
/**
|
|
221
217
|
* Custom error class for x402 operations
|
|
222
218
|
*/
|
|
@@ -103,17 +103,13 @@ interface PaymentAccept {
|
|
|
103
103
|
extra?: AcceptsExtra;
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* Full PaymentRequired structure
|
|
107
|
-
* v2 sends it in the base64 PAYMENT-REQUIRED header; v1 sent it in the
|
|
108
|
-
* JSON 402 response body.
|
|
106
|
+
* Full PaymentRequired structure (sent in PAYMENT-REQUIRED header)
|
|
109
107
|
*/
|
|
110
108
|
interface PaymentRequired {
|
|
111
|
-
/** x402 version
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
* falls back to the request URL. */
|
|
116
|
-
resource?: ResourceInfo;
|
|
109
|
+
/** x402 version (always 2) */
|
|
110
|
+
x402Version: 2;
|
|
111
|
+
/** Resource being accessed */
|
|
112
|
+
resource: ResourceInfo;
|
|
117
113
|
/** Available payment options */
|
|
118
114
|
accepts: PaymentAccept[];
|
|
119
115
|
/** Optional error message */
|
|
@@ -216,7 +212,7 @@ interface AccessPassClientConfig {
|
|
|
216
212
|
/**
|
|
217
213
|
* SDK error codes
|
|
218
214
|
*/
|
|
219
|
-
type X402ErrorCode = 'missing_payment_required_header' | 'invalid_payment_required' | '
|
|
215
|
+
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';
|
|
220
216
|
/**
|
|
221
217
|
* Custom error class for x402 operations
|
|
222
218
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
2
|
import { ChannelStorage } from '@x402/evm/batch-settlement/server';
|
|
3
|
-
import { b as CloseReceipt } from './types-
|
|
3
|
+
import { b as CloseReceipt } from './types-XG8QvfyL.cjs';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Result of closing one channel from the seller side. Either a settlement
|
package/dist/utils/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var S=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var s in e)S(t,s,{get:e[s],enumerable:!0})},v=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of U(e))!W.call(t,r)&&r!==s&&S(t,r,{get:()=>e[r],enumerable:!(n=M(e,r))||n.enumerable});return t};var P=t=>v(S({},"__esModule",{value:!0}),t);var Y={};y(Y,{fromAtomicUnits:()=>B,getChainDisplayName:()=>I,getChainFamily:()=>d,getChainName:()=>g,getExplorerUrl:()=>K,toAtomicUnits:()=>D});module.exports=P(Y);var T="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",x="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",_="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var i="eip155:8453",c="eip155:84532",p="eip155:42161",E="eip155:137",l="eip155:10",A="eip155:43114",h="eip155:56",m="eip155:1187947933",u="eip155:324705682",f="eip155:1";var F="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",$="0x55d398326f99059fF775485246999027B3197955",C="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",q={[h]:C,[i]:F,[c]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[p]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[E]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[l]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[A]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[m]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[u]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[f]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},X={[$]:{symbol:"USDT",decimals:18},[C]:{symbol:"USDC",decimals:18}};var z={[h]:56,[i]:8453,[c]:84532,[p]:42161,[E]:137,[l]:10,[A]:43114,[m]:1187947933,[u]:324705682,[f]:1},Z={[T]:"https://api.dexter.cash/api/solana/rpc",[x]:"https://api.devnet.solana.com",[_]:"https://api.testnet.solana.com"},j={[h]:"https://bsc-dataseed1.binance.org",[i]:"https://api.dexter.cash/api/base/rpc",[c]:"https://sepolia.base.org",[p]:"https://arb1.arbitrum.io/rpc",[E]:"https://polygon-rpc.com",[l]:"https://mainnet.optimism.io",[A]:"https://api.avax.network/ext/bc/C/rpc",[m]:"https://skale-base.skalenodes.com/v1/base",[u]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[f]:"https://eth.llamarpc.com"};function D(t,e){if(!Number.isFinite(t))throw new Error(`toAtomicUnits: amount must be finite, got ${t}`);if(t<0)throw new Error(`toAtomicUnits: amount must be non-negative, got ${t}`);if(!Number.isInteger(e)||e<0)throw new Error(`toAtomicUnits: decimals must be a non-negative integer, got ${e}`);let s=V(Math.abs(t)),[n,r=""]=s.split("."),N=r.slice(0,e).padEnd(e,"0");return BigInt(n+N).toString()}function V(t){let e=t.toString();if(!/[eE]/.test(e))return e;let[s,n]=e.split(/[eE]/),r=parseInt(n,10),N=s.startsWith("-"),O=N?s.slice(1):s,[R,L=""]=O.split("."),o=R+L,a=R.length+r,b;return a<=0?b="0."+"0".repeat(-a)+o:a>=o.length?b=o+"0".repeat(a-o.length):b=o.slice(0,a)+"."+o.slice(a),(N?"-":"")+b}function B(t,e){let s=Math.pow(10,e);return Number(t)/s}function H(t){return t.startsWith("solana:")||t==="solana"}function J(t){return t.startsWith("eip155:")||["base","ethereum","arbitrum"].includes(t)}function d(t){return H(t)?"solana":J(t)?"evm":"unknown"}function g(t){return{[T]:"Solana",[x]:"Solana Devnet",[_]:"Solana Testnet",solana:"Solana","solana-devnet":"Solana Devnet","solana-testnet":"Solana Testnet",[i]:"Base",[c]:"Base Sepolia",[f]:"Ethereum",[p]:"Arbitrum",[E]:"Polygon",[l]:"Optimism",[A]:"Avalanche",[h]:"BSC",[m]:"SKALE Base",[u]:"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 I(t,e){let s=g(t);return s===t?e:s}function K(t,e){let s=d(e);if(s==="solana")return e.includes("devnet")||e===x?`https://solscan.io/tx/${t}?cluster=devnet`:`https://www.orbmarkets.io/tx/${t}`;if(s==="evm"){let n="8453";switch(e.startsWith("eip155:")?n=e.split(":")[1]:e==="ethereum"?n="1":e==="arbitrum"?n="42161":e==="polygon"?n="137":e==="optimism"?n="10":e==="avalanche"?n="43114":e==="bsc"?n="56":e==="skale-base"?n="1187947933":e==="skale-base-sepolia"&&(n="324705682"),n){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.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var S="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",b="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",T="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z";var a="eip155:8453",i="eip155:84532",c="eip155:42161",p="eip155:137",E="eip155:10",l="eip155:43114",A="eip155:56",h="eip155:1187947933",m="eip155:324705682",u="eip155:1";var D="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",B="0x55d398326f99059fF775485246999027B3197955",g="0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",v={[A]:g,[a]:D,[i]:"0x036CbD53842c5426634e7929541eC2318f3dCF7e",[c]:"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",[p]:"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",[E]:"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",[l]:"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",[h]:"0x85889c8c714505E0c94b30fcfcF64fE3Ac8FCb20",[m]:"0x2e08028E3C4c2356572E096d8EF835cD5C6030bD",[u]:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},P={[B]:{symbol:"USDT",decimals:18},[g]:{symbol:"USDC",decimals:18}};var F={[A]:56,[a]:8453,[i]:84532,[c]:42161,[p]:137,[E]:10,[l]:43114,[h]:1187947933,[m]:324705682,[u]:1},$={[S]:"https://api.dexter.cash/api/solana/rpc",[b]:"https://api.devnet.solana.com",[T]:"https://api.testnet.solana.com"},V={[A]:"https://bsc-dataseed1.binance.org",[a]:"https://api.dexter.cash/api/base/rpc",[i]:"https://sepolia.base.org",[c]:"https://arb1.arbitrum.io/rpc",[p]:"https://polygon-rpc.com",[E]:"https://mainnet.optimism.io",[l]:"https://api.avax.network/ext/bc/C/rpc",[h]:"https://skale-base.skalenodes.com/v1/base",[m]:"https://base-sepolia-testnet.skalenodes.com/v1/jubilant-horrible-ancha",[u]:"https://eth.llamarpc.com"};function I(t,e){if(!Number.isFinite(t))throw new Error(`toAtomicUnits: amount must be finite, got ${t}`);if(t<0)throw new Error(`toAtomicUnits: amount must be non-negative, got ${t}`);if(!Number.isInteger(e)||e<0)throw new Error(`toAtomicUnits: decimals must be a non-negative integer, got ${e}`);let n=K(Math.abs(t)),[s,x=""]=n.split("."),f=x.slice(0,e).padEnd(e,"0");return BigInt(s+f).toString()}function K(t){let e=t.toString();if(!/[eE]/.test(e))return e;let[n,s]=e.split(/[eE]/),x=parseInt(s,10),f=n.startsWith("-"),_=f?n.slice(1):n,[d,C=""]=_.split("."),r=d+C,o=d.length+x,N;return o<=0?N="0."+"0".repeat(-o)+r:o>=r.length?N=r+"0".repeat(o-r.length):N=r.slice(0,o)+"."+r.slice(o),(f?"-":"")+N}function L(t,e){let n=Math.pow(10,e);return Number(t)/n}function M(t){return t.startsWith("solana:")||t==="solana"}function U(t){return t.startsWith("eip155:")||["base","ethereum","arbitrum"].includes(t)}function O(t){return M(t)?"solana":U(t)?"evm":"unknown"}function R(t){return{[S]:"Solana",[b]:"Solana Devnet",[T]:"Solana Testnet",solana:"Solana","solana-devnet":"Solana Devnet","solana-testnet":"Solana Testnet",[a]:"Base",[i]:"Base Sepolia",[u]:"Ethereum",[c]:"Arbitrum",[p]:"Polygon",[E]:"Optimism",[l]:"Avalanche",[A]:"BSC",[h]:"SKALE Base",[m]:"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 W(t,e){let n=R(t);return n===t?e:n}function y(t,e){let n=O(e);if(n==="solana")return e.includes("devnet")||e===b?`https://solscan.io/tx/${t}?cluster=devnet`:`https://www.orbmarkets.io/tx/${t}`;if(n==="evm"){let s="8453";switch(e.startsWith("eip155:")?s=e.split(":")[1]:e==="ethereum"?s="1":e==="arbitrum"?s="42161":e==="polygon"?s="137":e==="optimism"?s="10":e==="avalanche"?s="43114":e==="bsc"?s="56":e==="skale-base"?s="1187947933":e==="skale-base-sepolia"&&(s="324705682"),s){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}`}export{L as fromAtomicUnits,W as getChainDisplayName,O as getChainFamily,R as getChainName,y as getExplorerUrl,I as toAtomicUnits};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dexterai/x402",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.8",
|
|
4
4
|
"description": "Full-stack x402 SDK - add paid API monetization to any endpoint. Express middleware, React hooks, Access Pass, dynamic pricing. Solana, Base, Polygon, Arbitrum, Optimism, Avalanche, SKALE.",
|
|
5
5
|
"author": "Dexter",
|
|
6
6
|
"license": "MIT",
|