@nibgate/sdk 0.2.14 → 0.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- var Nibgate=(()=>{var kt=Object.create;var de=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,Ct=Object.prototype.hasOwnProperty;var Tt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var M=(t,e)=>()=>(t&&(e=t(t=0)),e);var fe=(t,e)=>{for(var n in e)de(t,n,{get:e[n],enumerable:!0})},Ve=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of St(e))!Ct.call(t,a)&&a!==n&&de(t,a,{get:()=>e[a],enumerable:!(r=vt(e,a))||r.enumerable});return t};var At=(t,e,n)=>(n=t!=null?kt(Et(t)):{},Ve(e||!t||!t.__esModule?de(n,"default",{value:t,enumerable:!0}):n,t)),_t=t=>Ve(de({},"__esModule",{value:!0}),t);function j(t,e="gateway"){let n=String(t||"").trim().toLowerCase().replace(/[-\s]+/g,"_");return n==="circle_gateway"||n==="x402"?"gateway":n==="direct_transfer"||n==="wallet_transfer"?"transfer":ee.includes(n)?n:e}var ee,me=M(()=>{ee=["gateway","transfer"]});function O(t){let e=String(t||"").trim().toLowerCase();return F.includes(e)?e:Rt[e]||"article"}function Ae(t,e="paid"){let n=String(t||"").trim().toLowerCase();return Y.includes(n)?n:e}function $(t={}){if(typeof t=="string"){let e=Ae(t);return{humans:e,agents:e}}return{humans:Ae(t.humans||t.human||t.default,"paid"),agents:Ae(t.agents||t.agent||t.default,"paid")}}function J(t={}){let e=typeof t=="string"?{mode:t}:t||{},n=String(e.mode||e.type||"one_time").trim().toLowerCase().replace(/[-\s]+/g,"_");return{...e,mode:te.includes(n)?n:"one_time"}}function Re(){return typeof window<"u"?window:null}function z(t){let e=Re();if(!e)return"";let n=`meta[name="${t}"], meta[property="${t}"]`,r=e.document.querySelector(n);return r&&r.getAttribute("content")||""}function Pt(t){let e=Re();if(!(!e||!t))return`${e.location.origin}${t.startsWith("/")?t:"/"+t}`}function It(){return z("og:image")||void 0}function Nt(){return z("og:description")||z("description")||void 0}function Mt(){let t=Re();return z("og:title")||z("twitter:title")||(t?t.document.title:"")||void 0}function Ut(){let t=z("og:type").toLowerCase();return t.includes("music")||t.includes("audio")||t.includes("song")?"music":t.includes("video")||t.includes("movie")?"video":t.includes("image")||t.includes("photo")?"image":"article"}function Bt(){let t=z("keywords");if(t)return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).slice(0,8)}function Ht(t,e){return e&&typeof e=="object"&&Object.keys(e).length>0?$(e):t!=null&&t!==""&&Number.parseFloat(t)>0?{humans:"paid",agents:"paid"}:{humans:"free",agents:"free"}}function S(t={}){let e=typeof t=="string"?{id:t}:t||{},{publisher:n,publisherId:r,publisherWallet:a,publisherHandle:o,publisherName:l,publisherProfileUrl:s,publisherOrigin:c,publisherVerification:d,authorHandle:i,...m}=e,f=e.path||e.route||void 0,u=e.url||Pt(f)||void 0,h=e.access,x=e.price??e.amount??"";return{...m,id:String(e.id||e.contentId||e.slug||"").trim(),title:String(e.title||e.name||Mt()||"Untitled").trim(),type:O(e.type||e.contentType||Ut()),price:x,currency:e.currency||"USDC",paymentRail:j(e.paymentRail||e.paymentMode||e.rail),recipient:e.recipient||e.receiver||e.receiverAddress||e.payTo||e.creatorWallet||void 0,payTo:e.payTo||e.recipient||e.receiver||e.receiverAddress||e.creatorWallet||void 0,path:f,url:u,imageUrl:e.imageUrl||e.image||It()||void 0,description:e.description||e.summary||Nt()||void 0,tags:e.tags||Bt()||void 0,access:Ht(x,h),unlock:J(e.unlock),ratingsEnabled:e.ratingsEnabled??e.enableRatings??e.reputation?.ratingsEnabled??!0,reputation:{...typeof e.reputation=="object"&&e.reputation?e.reputation:{},ratingsEnabled:e.ratingsEnabled??e.enableRatings??e.reputation?.ratingsEnabled??!0}}}function _e(t){return Array.isArray(t)?t.length>0:t!=null&&String(t).trim()!==""}function Lt(t={}){let e=$(t.access);return e.humans==="paid"||e.agents==="paid"||Number.parseFloat(t.price||t.amount||"0")>0}function pe(t={},e={}){let n=S(t),r=[],a=[],o=e.required||["id","type"],l=e.recommended||["title","url","description","imageUrl","tags"];for(let c of o)_e(n[c])||a.push(`Missing required content metadata: ${c}`);for(let c of l)_e(n[c])||r.push(`Missing recommended discovery metadata: ${c}`);F.includes(n.type)||a.push("Content type must be one of music, video, article, or image."),n.url&&!/^https?:\/\//i.test(String(n.url))&&r.push("Use an absolute canonical url for stronger discovery identity."),n.imageUrl&&!/^https?:\/\//i.test(String(n.imageUrl))&&r.push("Use an absolute imageUrl for thumbnails in Explore and agent discovery."),Lt(n)&&(_e(n.price)||a.push("Paid content requires price."));let s=Math.max(0,100-a.length*20-r.length*8);return{ok:a.length===0,score:s,errors:a,warnings:r,resource:n}}var F,Rt,Y,te,I=M(()=>{me();F=["music","video","article","image"],Rt={audio:"music",song:"music",track:"music",album:"music",playlist:"music",photo:"image",picture:"image",illustration:"image",art:"image",movie:"video",clip:"video"},Y=["free","paid","blocked"],te=["one_time","metered_stream","metered_read","time_pass","agent_quota"]});function v(){return typeof window>"u"?null:window}var W=M(()=>{});function Dt(t,e){let n=v();return n?(n.__nibgateClientQueue=n.__nibgateClientQueue||[],n.__nibgateClientQueue.push({eventName:t,payload:e}),!0):!1}function ge(){let t=v();if(!t?.nibgateHub?.track||!Array.isArray(t.__nibgateClientQueue))return!1;let e=t.__nibgateClientQueue.splice(0);return e.forEach(n=>{t.nibgateHub.track(n.eventName,n.payload)}),e.length>0}function zt(){let t=v();if(!t||t.__nibgateClientFlushStarted)return;t.__nibgateClientFlushStarted=!0;let e=0,n=t.setInterval(()=>{e+=1,ge(),(t.nibgateHub?.track||e>=80)&&(t.clearInterval(n),t.__nibgateClientFlushStarted=!1)},250)}function U(t,e={}){let n=v();return n?n.nibgateHub?.track?(n.nibgateHub.track(t,e),ge(),!0):(Dt(t,e),zt(),!1):!1}function B(t,e={}){return{...e,resource:S(t)}}var Q=M(()=>{W();I()});function Pe(t){return`nibgate:unlock:${t.id||t.path||t.url||"content"}`}function Ie(t){return`nibgate:payment-proof:${t.id||t.path||t.url||"content"}`}function ye(t,e={}){let n=v();if(!n)return!1;try{return n.localStorage.setItem(Pe(t),JSON.stringify({unlockedAt:new Date().toISOString(),payment:e})),!0}catch{return!1}}function Ne(t,e){let n=v();if(!n||!e)return!1;try{let r=typeof e=="string"?e:JSON.stringify(e);return n.localStorage.setItem(Ie(t),r),!0}catch{return!1}}function Me(t){let e=v();if(!e)return"";try{return e.localStorage.getItem(Ie(t))||""}catch{return""}}function je(t){let e=S(t),n=v();if(!n)return!1;try{return n.localStorage.removeItem(Ie(e)),n.localStorage.removeItem(Pe(e)),!0}catch{return!1}}function Fe(t){let e=v();if(!e)return!1;try{return!!e.localStorage.getItem(Pe(t))}catch{return!1}}var he=M(()=>{W();I()});function Je(t){Ye=t}function P(t,e={}){let n=S(t),r=e.client||Ye;return{resource:n,content(a={}){return r.content(n,a)},view(a={}){return r.view(n,a)},track(a,o={}){return r.track(a,B(n,o))},unlockStarted(a={}){return r.unlockStarted(n,a)},unlockCompleted(a={}){return ye(n,a),r.unlockCompleted(n,a)},paymentCompleted(a={}){return r.paymentCompleted(n,a)},isUnlocked(){return Fe(n)},markUnlocked(a={}){return ye(n,a),r.unlockCompleted(n,a),r.paymentCompleted(n,a),!0},async unlock(a={}){r.unlockStarted(n);let o=typeof a=="function"?await a(n):a;return ye(n,o||{}),r.unlockCompleted(n,o||{}),r.paymentCompleted(n,o||{}),{unlocked:!0,resource:n,payment:o||{}}},rate(a={},o={}){return r.rateResource(n,a,o)}}}var Ye,D=M(()=>{I();Q();he();Ye=null});function Ot(t,e){return typeof e=="bigint"?e.toString():e}function K(t){return JSON.stringify(t,Ot)}var be=M(()=>{});function ae(t={}){let e=typeof t=="number"?t:t.rating??t.stars??t.ratingValue??t.score,n=Number.parseFloat(e),r=Number.isFinite(n)?Math.max(1,Math.min(50,n<=5?Math.round(n*10):Math.round(n))):null;return{...t,rating:r?r/10:void 0,ratingValue:r||void 0}}function ke(t,e={},n={}){let r=S(t),o=ae(e).ratingValue||0;return["Nibgate content rating",`site:${n.siteDomain||n.domain||r.siteDomain||r.domain||""}`,`content:${r.externalId||r.id}`,`url:${r.url||n.url||""}`,`rating:${o}`,"I confirm this rating is tied to my unlock/payment proof."].join(`
2
- `)}var ve=M(()=>{I()});var Xe={};fe(Xe,{BatchEvmScheme:()=>Ue,CIRCLE_BATCHING_NAME:()=>ce,CIRCLE_BATCHING_VERSION:()=>Wt,GATEWAY_AUTH_VALIDITY_WINDOW_SECONDS:()=>qt,GATEWAY_MIN_AUTH_VALIDITY_SECONDS:()=>Gt});function Ke(t){let e=t.extra;return e?e.name===ce&&e.version==="1":!1}function jt(t){if(Ke(t))return t.extra?.verifyingContract}function Ft(){let t=new Uint8Array(32);return crypto.getRandomValues(t),"0x"+Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}function oe(t){return t&&typeof t=="string"&&t.startsWith("0x")?t.toLowerCase():t}var ce,Wt,Gt,qt,Vt,Ue,Ze=M(()=>{ce="GatewayWalletBatched",Wt="1",Gt=604800,qt=604900,Vt={TransferWithAuthorization:[{name:"from",type:"address"},{name:"to",type:"address"},{name:"value",type:"uint256"},{name:"validAfter",type:"uint256"},{name:"validBefore",type:"uint256"},{name:"nonce",type:"bytes32"}]};Ue=class{constructor(e){this.signer=e,this.scheme=ce,this._beforeHooks=[],this._afterHooks=[],this._failureHooks=[]}onBeforePaymentCreation(e){return this._beforeHooks.push(e),this}onAfterPaymentCreation(e){return this._afterHooks.push(e),this}onPaymentCreationFailure(e){return this._failureHooks.push(e),this}async createPaymentPayload(e,n){let r={paymentRequired:{x402Version:e,accepts:[n]},selectedRequirements:n};for(let a of this._beforeHooks){let o=await a(r);if(o&&o.abort)throw new Error("Payment creation aborted: "+o.reason)}try{if(!Ke(n))throw new Error('BatchEvmScheme can only handle Circle batching options. Expected extra.name="'+ce+'" and extra.version="1"');let a=jt(n);if(!a)throw new Error("Circle batching option missing extra.verifyingContract (GatewayWallet address)");let o=Ft(),l=Math.floor(Date.now()/1e3),s=Math.max(n.maxTimeoutSeconds||0,604900),c={from:oe(this.signer.address),to:oe(n.payTo),value:n.amount,validAfter:String(l-600),validBefore:String(l+s),nonce:o},d=await this.signAuthorization(c,n,a),m={x402Version:e,payload:{authorization:c,signature:d}},f={...r,paymentPayload:m};for(let u of this._afterHooks)try{await u(f)}catch{}return m}catch(a){let o={...r,error:a};for(let l of this._failureHooks){let s=await l(o);if(s&&s.recovered)return{x402Version:s.payload.x402Version,payload:s.payload.payload}}throw a}}async signAuthorization(e,n,r){if(!n.network.startsWith("eip155:"))throw new Error('BatchEvmScheme: unsupported network format "'+n.network+'". Expected "eip155:<chainId>"');let a=parseInt(n.network.split(":")[1],10),o={name:ce,version:"1",chainId:a,verifyingContract:oe(r)},l={from:oe(e.from),to:oe(e.to),value:BigInt(e.value),validAfter:BigInt(e.validAfter),validBefore:BigInt(e.validBefore),nonce:e.nonce},s={domain:o,types:Vt,primaryType:"TransferWithAuthorization",message:l};return this.signer.signTypedData(s)}}});var et={};fe(et,{createCircleGatewayBrowserAdapter:()=>Qt});function Yt(t){let e=typeof t=="string"?t:K(t);return typeof Buffer<"u"?Buffer.from(e).toString("base64"):btoa(unescape(encodeURIComponent(e)))}function Jt(t){return typeof Buffer<"u"?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}async function Qt(t={}){let e=t.signer||await t.getSigner?.();if(!e?.address||typeof e.signTypedData!="function")throw new Error("Circle Gateway browser adapter requires an EVM signer with address and signTypedData.");let n;try{n=(await import("@circle-fin/x402-batching/client")).BatchEvmScheme}catch(s){console.warn("[nibgate] Failed to import @circle-fin/x402-batching/client:",s.message),console.warn("[nibgate] Falling back to custom BatchEvmScheme"),n=(await Promise.resolve().then(()=>(Ze(),Xe))).BatchEvmScheme}let r=t.clientModule?.BatchEvmScheme?new t.clientModule.BatchEvmScheme(e):new n(e),a=t.network||t.chainId&&`eip155:${t.chainId}`||"eip155:5042002";function o(s){if(s&&typeof s=="object")return s;if(!s||typeof s!="string")throw new Error("Missing PAYMENT-REQUIRED header.");return JSON.parse(Jt(s))}function l(s){let c=Array.isArray(s?.accepts)?s.accepts:[],d=c.find(i=>{let m=i.extra||{};return i.network===a&&m.name==="GatewayWalletBatched"&&m.version==="1"&&typeof m.verifyingContract=="string"})||c.find(i=>{let m=i.extra||{};return m.name==="GatewayWalletBatched"&&m.version==="1"&&typeof m.verifyingContract=="string"});if(!d){let i=c.map(f=>f.network).filter(Boolean).join(", ")||"none",m=c.some(f=>{let u=f.extra||{};return u.name==="GatewayWalletBatched"&&u.version==="1"&&typeof u.verifyingContract=="string"});throw new Error(m?`No Circle Gateway batching payment option found for ${a}. Server returned networks: ${i}.`:`The payment challenge is not a Circle Gateway batching challenge. Configure the creator access route with createCircleGatewayServer(...) or createNibgateServer({ paymentMode: 'circle-gateway', network: '${a}' }).`)}return d}return{signer:e,network:a,async pay({paymentRequiredHeader:s,challenge:c}){let d=o(s||c),i=l(d),m=d.x402Version??2,f=await r.createPaymentPayload(m,i),u=Yt({...f,resource:d.resource,accepted:i});return{paymentSignature:u,signature:u,metadata:{paymentProvider:"circle-gateway",network:i.network,payer:e.address,recipient:i.payTo||i.recipient,amount:i.amount,currency:i.asset}}}}}var tt=M(()=>{be()});function en(t=""){return String(t||"").replace(/^0x/i,"").replace(/[^0-9a-fA-F]/g,"").toLowerCase()}function rt(t=""){let e=en(t);if(e.length>64)throw new Error("ABI word is too long.");return e.padEnd(64,"0")}function Be(t=0){return Number(t||0).toString(16).padStart(64,"0")}function tn(t=""){return Array.from(new TextEncoder().encode(String(t||""))).map(e=>e.toString(16).padStart(2,"0")).join("")}function nn(t=""){let e=tn(t),n=e.length/2,r=Math.ceil(n/32)*64;return Be(n)+e.padEnd(r,"0")}function rn({contentId:t,ratingValue:e,reviewHash:n,unlockRef:r}){return Zt+rt(t)+Be(e)+rt(n||He)+Be(128)+nn(r||"")}function De(t,e={}){let n=e.contentId||e.contentHash;if(!n)throw new Error("contentId/contentHash is required. Use the Nibgate backend prepare endpoint or pass a known content hash.");return n}function lt(t=""){if(!t)return He;throw new Error("Text review hashing is not available in direct-browser mode. Pass reviewHash from your app/backend.")}async function an(t,e={}){if(e.contentId||e.contentHash)return{contentId:e.contentId||e.contentHash};let n=e.prepareUrl||e.indexUrl?.replace(/\/index$/,"/prepare");if(!n)throw new Error("contentId/contentHash or prepareUrl is required for onchain rating.");let r=await fetch(n,{method:"POST",headers:{"content-type":"application/json",...e.indexHeaders||{}},body:JSON.stringify({siteId:e.siteId,token:e.token,resource:t,url:t.url,path:t.path})}),a=await r.json().catch(()=>({}));if(!r.ok||!a.contentHash)throw new Error(a.error||"Could not prepare Nibgate onchain rating.");return a}async function Se(t,e={}){let n=S(t),r=ae(e.rating??e.stars??e);if(!r.ratingValue)throw new Error("Rating must be between 0.1 and 5 stars.");let a=e.provider||globalThis?.ethereum;if(!a?.request)throw new Error("Connect an EVM wallet to rate this content onchain.");let o=e.contractAddress||e.reputationContract||Le;if(!o)throw new Error("Nibgate reputation contract address is not configured.");let l=await a.request({method:"eth_requestAccounts"}),s=Array.isArray(l)&&l[0]||"";if(!s)throw new Error("No wallet account selected.");let c=await an(n,e),d=c.contentHash||c.contentId||De(n,e),i=e.reviewHash||He,m=String(e.unlockRef||e.paymentId||e.txHash||""),f=rn({contentId:d,ratingValue:r.ratingValue,reviewHash:i,unlockRef:m}),u=await a.request({method:"eth_sendTransaction",params:[{from:s,to:o,data:f}]}),h=B(n,{rating:r.rating,ratingValue:r.ratingValue,walletAddress:s,txHash:u,contentHash:d,reviewHash:i,proofType:"onchain_pending",proof:m,paymentId:e.paymentId,actor:e.actor||"human"});return U("content_rating",h),e.indexUrl&&await fetch(e.indexUrl,{method:"POST",headers:{"content-type":"application/json",...e.indexHeaders||{}},body:JSON.stringify({siteId:e.siteId,token:e.token,txHash:u,resource:n,url:n.url,path:n.path,actor:e.actor||"human"})}).catch(()=>null),{txHash:u,walletAddress:s,contentId:d,ratingValue:r.ratingValue,reviewHash:i}}var Zt,He,at,ot,ct,it,Le,st,ze=M(()=>{ve();I();Q();Zt="0xc62fad09",He=`0x${"0".repeat(64)}`,at="nibgate:content:v1",ot=5042002,ct="Arc Testnet",it="https://rpc.testnet.arc.io",Le="0x9f27fd62e75f86a3c7addfdba443aab1f930e281",st=[{type:"function",name:"rateContent",stateMutability:"nonpayable",inputs:[{name:"contentId",type:"bytes32"},{name:"rating",type:"uint8"},{name:"reviewHash",type:"bytes32"},{name:"unlockRef",type:"string"}],outputs:[]}]});var ut={};fe(ut,{createOnchainRating:()=>se,mountRatingUI:()=>le,rateResource:()=>X});function X(t,e={},n={}){let r=S(t),a=ae(e),o={...n,...a,ratingMessage:n.ratingMessage||e.message||e.ratingMessage||ke(r,a,n),ratingSignature:n.ratingSignature||e.signature||e.ratingSignature||void 0,resource:r};return U("content_rating",o)}function se(t,e={}){let n=P(t,e.gateOptions||{}),r=v(),a=typeof e.status=="string"?r?.document.querySelector(e.status):e.status,o=typeof e.ratingTarget=="string"?r?.document.querySelector(e.ratingTarget):e.ratingTarget,l=e.ratingButtons||e.buttons||"[data-nibgate-rating-value], [data-rating]",c=(Array.isArray(e.buttons)?e.buttons:typeof e.buttons=="string"?Array.from(r?.document.querySelectorAll(e.buttons)||[]):e.buttons?[e.buttons]:null)||Array.from(r?.document.querySelectorAll(l)||[]),d=e.source||"nibgate-onchain-rating",i=!1,m=e.payment||null;function f(b){typeof e.onStatus=="function"&&e.onStatus(b),a&&(a.textContent=b||"")}function u(b){i=!!b,c.forEach(k=>{k&&"disabled"in k&&(k.disabled=i)})}function h(b=null){return m=b||null,m}function x(b){return o&&("hidden"in o&&(o.hidden=!b),o.setAttribute("aria-hidden",b?"false":"true")),!!b}function T(b){let k=b?.dataset?.nibgateRatingValue||b?.dataset?.rating||b?.value||b?.textContent,R=Number.parseFloat(String(k||"").replace(/[^\d.]/g,""));return Number.isFinite(R)?R:Number(e.rating||e.stars||0)}async function A(b={}){u(!0);try{let k=Number.parseFloat(b.rating??b.stars??b.value??e.rating??e.stars);if(!Number.isFinite(k))throw new Error("Choose a rating before sending.");let R=b.paymentId||e.paymentId||(typeof e.getPaymentId=="function"?e.getPaymentId():m?.paymentId),E=b.unlockRef||e.unlockRef||(typeof e.getUnlockRef=="function"?e.getUnlockRef():null)||R||m?.txHash||m?.transactionHash||"";f(e.pendingMessage||"Send the onchain rating transaction...");let H=await Se(n.resource,{...e,...b,rating:k,paymentId:R,unlockRef:E,source:d});return f(e.successMessage||"Rating sent to Nibgate reputation."),typeof e.onRated=="function"&&e.onRated(H),H}catch(k){let R=k?.message||e.errorMessage||"Rating failed.";throw f(R),typeof e.onError=="function"&&e.onError(k),k}finally{u(!1)}}function p(){return c.forEach(b=>{b?.addEventListener?.("click",()=>A({rating:T(b)}).catch(()=>null))}),e.visible!==void 0&&x(!!e.visible),g}let g={resource:n.resource,rate:A,mount:p,setPayment:h,setVisible:x};return e.autoMount!==!1&&p(),g}function le(t,e={}){let n=P(t,e.gateOptions||{}),r=v();if(!r)return null;let a=typeof e.target=="string"?r.document.querySelector(e.target):e.target;if(!a)return null;let o=[1,2,3,4,5],l=0,s=r.document.createElement("div");s.className="nibgate-rating-ui",s.style.cssText="display:flex;align-items:center;gap:4px;padding:8px 0";let c=o.map(f=>{let u=r.document.createElement("button");return u.type="button",u.dataset.nibgateRatingValue=String(f),u.setAttribute("aria-label",`${f} star${f>1?"s":""}`),u.innerHTML="\u2606",u.style.cssText="background:none;border:none;font-size:24px;cursor:pointer;color:#ccc;transition:color 0.15s;padding:2px;line-height:1",u.addEventListener("mouseenter",()=>{c.forEach((h,x)=>h.style.color=x<f?"#f5b342":"#ccc")}),u.addEventListener("mouseleave",()=>{c.forEach((h,x)=>h.style.color=x<l?"#f5b342":"#ccc")}),u.addEventListener("click",()=>{l=f,c.forEach((h,x)=>h.style.color=x<f?"#f5b342":"#ccc"),X(n.resource,{rating:f}).catch(()=>{})}),s.appendChild(u),u}),d=r.document.createElement("span");d.style.cssText="font-size:13px;color:#888;margin-left:8px",d.textContent=e.label||"Rate this content",s.appendChild(d),a.appendChild(s);function i(f,u={}){return n.rate({...u,rating:f})}function m(f){l=f,c.forEach((u,h)=>u.style.color=h<f?"#f5b342":"#ccc")}return{resource:n.resource,container:s,setRating:m,rate:i}}var Ee=M(()=>{I();ve();Q();W();ze();D()});var sn={};fe(sn,{ACCESS_MODES:()=>Y,CONTENT_TYPES:()=>F,NIBGATE_CONTENT_HASH_NAMESPACE:()=>at,NIBGATE_CONTENT_SETTING_FIELDS:()=>yt,NIBGATE_REPUTATION_ABI:()=>st,NIBGATE_REPUTATION_CHAIN_ID:()=>ot,NIBGATE_REPUTATION_CHAIN_NAME:()=>ct,NIBGATE_REPUTATION_CONTRACT:()=>Le,NIBGATE_REPUTATION_RPC_URL:()=>it,PAYMENT_RAILS:()=>ee,UNLOCK_MODES:()=>te,checkResourceAccess:()=>N,contentRatingHash:()=>De,createCircleGatewayBrowserAdapter:()=>ie,createEvmGatewayUnlock:()=>q,createGate:()=>P,createHostedUnlock:()=>nt,createNibgate:()=>Oe,createNibgateContentSettings:()=>ht,createOnchainRating:()=>se,createTransferCheckout:()=>ue,createWalletCheckout:()=>xe,mountRatingUI:()=>le,nibgate:()=>$e,normalizeAccessPolicy:()=>$,normalizeContentType:()=>O,normalizePaymentRail:()=>j,normalizeResource:()=>S,normalizeUnlockPolicy:()=>J,payAndUnlockResource:()=>re,payWithPaymentSignature:()=>ne,payWithTransfer:()=>Ce,rateContentOnchain:()=>Se,rateResource:()=>X,renderDefaultGatewayWalletUI:()=>gt,renderDefaultRatingUI:()=>pt,renderDefaultUnlockUI:()=>mt,reviewTextHash:()=>lt,settingsToAccessPolicy:()=>bt,settingsToUnlockPolicy:()=>wt,setupResourcePage:()=>we,trackResourcePage:()=>G,validateResourceMetadata:()=>pe});D();Q();he();be();D();I();W();D();function G(t,e={}){let n=P(t,e.gateOptions||{}),r=pe(n.resource,e.validation||{});return(r.warnings.length||r.errors.length)&&e.warn!==!1&&v()?.console?.warn&&v().console.warn("Nibgate content metadata needs attention",r),n.content({source:e.source,metadataQuality:{score:r.score,warnings:r.warnings,errors:r.errors},...e.content||{}}),n.view({source:e.source,path:e.path||v()?.location?.pathname||n.resource.path,referrer:e.referrer??v()?.document?.referrer??"",...e.view||{}}),n}function we(t,e={}){let n=G(t,e),r=v();if(!r)return n;let a=typeof e.button=="string"?r.document.querySelector(e.button):e.button,o=typeof e.status=="string"?r.document.querySelector(e.status):e.status,l=e.onStatus||(s=>{o&&(o.textContent=s||"")});return a&&a.addEventListener("click",async()=>{a.disabled=!0;try{await N(t,{...e,onStatus:l})}finally{a.disabled=!1}}),n}async function N(t,e={}){let n=P(t,e.gateOptions||{}),r=e.accessPath||n.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.checkingMessage||"Checking access route..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"nibgate-access-route"});let o=await fetch(r,{method:e.method||"GET",headers:{accept:"application/json",...Me(n.resource)?{"x-nibgate-payment-proof":Me(n.resource)}:{},...e.headers||{}},body:e.body}),l=await o.json().catch(()=>({}));if(o.status===402){if(n.track("payment_challenge_returned",{source:e.source,challenge:l,resource:n.resource}),a(e.challengeMessage||"Payment challenge returned. Continue with checkout."),typeof e.createPaymentSignature=="function"||typeof e.checkout=="function")return ne(t,{...e,challenge:l,paymentRequiredHeader:o.headers.get("PAYMENT-REQUIRED")||o.headers.get("payment-required")||""});if(e.autoPay&&e.payPath){let c=await re(t,e);return c.ok&&e.retryAfterPay!==!1?N(t,{...e,autoPay:!1}):c}return{ok:!1,status:o.status,challenge:l,resource:n.resource,response:o}}if(!o.ok)return a(l.error||e.errorMessage||"Access check failed"),{ok:!1,status:o.status,error:l.error||"Access check failed",payload:l,resource:n.resource,response:o};let s=e.payment||l.payment||null;return s&&(n.unlockCompleted(s),n.paymentCompleted(s)),a(e.successMessage||"Access allowed and Nibgate events emitted."),{ok:!0,status:o.status,payload:l,payment:s,resource:n.resource,response:o}}async function ne(t,e={}){let n=P(t,e.gateOptions||{}),r=e.accessPath||n.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Waiting for wallet payment approval..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"wallet-gateway"});let o=e.paymentSignature||"",l=e.memo||"",s=e.payment||{};if(!o){let f=e.paymentRequiredHeader||"",u=e.challenge||null,x=await(e.createPaymentSignature||e.checkout)({resource:n.resource,challenge:u,paymentRequiredHeader:f,accessPath:r});o=x?.paymentSignature||x?.signature||x?.payment||"",l=x?.memo||x?.paymentMemo||"",s=x?.metadata||x?.paymentMetadata||x||{}}if(!o){let f="Wallet did not return a payment signature.";return n.track("payment_failed",{source:e.source,error:f}),a(f),{ok:!1,status:400,error:f,resource:n.resource}}let c=await fetch(r,{method:e.method||"GET",headers:{accept:"application/json","payment-signature":o,...l?{"payment-memo":l}:{},...e.headers||{}}}),d=await c.text(),i={};try{i=d?JSON.parse(d):{}}catch{i={error:d||"Payment verification failed"}}if(!c.ok){let f=i.detail||i.reason||i.invalidReason||i.error||d||"Payment verification failed",u=typeof f=="string"?f:K(f);return n.track("payment_failed",{source:e.source,status:c.status,error:u,...s}),a(e.paymentErrorMessage||u),{ok:!1,status:c.status,error:u,payload:i,resource:n.resource,response:c}}let m=i.payment||{paymentProvider:e.paymentProvider||"wallet-gateway",paymentId:o,memo:l,amount:Number(n.resource.price||0),revenue:Number(n.resource.price||0),currency:n.resource.currency||"USDC",...s};return Ne(n.resource,i.unlockProof),n.markUnlocked(m),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:c.status,payload:i,payment:m,resource:n.resource,response:c}}async function re(t,e={}){let n=P(t,e.gateOptions||{}),r=e.payPath||n.resource.payPath||"/api/nibgate/pay",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Starting payment..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"circle-gateway"});let o=await fetch(r,{method:e.payMethod||"POST",headers:{accept:"application/json","content-type":"application/json",...e.payHeaders||{}},body:JSON.stringify({resource:n.resource,...e.payPayload||{}})}),l=await o.json().catch(()=>({}));if(!o.ok||!l.ok)return n.track("payment_failed",{source:e.source,status:o.status,error:l.error||"Payment failed",detail:l.detail||""}),a(l.detail||l.error||e.paymentErrorMessage||"Payment failed."),{ok:!1,status:o.status,payload:l,resource:n.resource,response:o};let s=l.payment||{paymentProvider:e.paymentProvider||"circle-gateway",paymentId:l.paymentId||`nibgate_payment_${Date.now()}`,amount:Number(n.resource.price||0),revenue:Number(n.resource.price||0),currency:n.resource.currency||"USDC"};return Ne(n.resource,l.unlockProof),n.markUnlocked(s),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:o.status,payload:l,payment:s,resource:n.resource,response:o}}I();W();function $t(t,e){let n=v();if(!t||!n)return;let r=typeof t=="string"?n.document.querySelector(t):t;r&&(r.textContent=e||"")}function Qe(t,e){let n=v();if(!t||!n)return;let r=typeof t=="string"?n.document.querySelector(t):t;r&&"disabled"in r&&(r.disabled=!!e)}function xe(t,e={}){let n=S(t),r=e.accessPath||n.accessPath||"/api/nibgate/access",a=e.button||null,o=e.status||null,l=typeof e.onStatus=="function"?e.onStatus:i=>$t(o,i),s=e.checkout||e.createPaymentSignature||e.pay;if(typeof s!="function")throw new Error("createWalletCheckout requires checkout/createPaymentSignature/pay callback for the active wallet or Gateway adapter.");async function c(i={}){Qe(a,!0);try{return await N(n,{...e,...i,accessPath:r,createPaymentSignature:s,onStatus:l})}finally{Qe(a,!1)}}function d(){let i=v();if(!i||!a)return{unlock:c};let m=typeof a=="string"?i.document.querySelector(a):a;return m&&m.addEventListener("click",()=>c().catch(f=>l(f.message||"Checkout failed."))),{unlock:c}}return{resource:n,unlock:c,mount:d}}I();ve();Q();D();D();W();he();be();D();async function ie(t={}){return(await Promise.resolve().then(()=>(tt(),et))).createCircleGatewayBrowserAdapter(t)}var Kt="https://api.nibgate.xyz/api/hub/pay";function Xt(t,e){return e.hosted||e.accessPath==="hosted"?Kt:e.accessPath||t.accessPath||"/api/nibgate/access"}function q(t,e={}){let n=P(t,e.gateOptions||{}),r=v(),a=Xt(n.resource,e),o=e.source||"nibgate-evm-gateway",l=e.network||"eip155:5042002",s=typeof e.status=="string"?r?.document.querySelector(e.status):e.status,c=typeof e.connectButton=="string"?r?.document.querySelector(e.connectButton):e.connectButton,d=typeof e.disconnectButton=="string"?r?.document.querySelector(e.disconnectButton):e.disconnectButton,i=typeof e.unlockButton=="string"?r?.document.querySelector(e.unlockButton):e.unlockButton,m=typeof e.clearButton=="string"?r?.document.querySelector(e.clearButton):e.clearButton,f=typeof e.walletLabel=="string"?r?.document.querySelector(e.walletLabel):e.walletLabel,u=typeof e.unlockedTarget=="string"?r?.document.querySelector(e.unlockedTarget):e.unlockedTarget,h="",x=!1;function T(w){typeof e.onStatus=="function"&&e.onStatus(w),s&&(s.textContent=w||"")}function A(w){return w?`${w.slice(0,6)}...${w.slice(-4)}`:""}function p(){return r?.ethereum||e.provider||null}function g(w){x=!!w,[c,d,i,m].forEach(C=>{C&&"disabled"in C&&(C.disabled=x||C===c&&!p()||C===d&&!h)})}function b(){let w=!!p();f&&(f.textContent=h?A(h):w?"Ready to connect":"No wallet detected"),c&&(c.textContent=h?"Connected":"Connect wallet"),d&&(d.textContent="Disconnect"),c&&"disabled"in c&&(c.disabled=x||!w),d&&"disabled"in d&&(d.disabled=x||!h)}function k(w,C={}){i&&(i.textContent=w?"Unlocked":`Unlock for ${n.resource.price} ${n.resource.currency||"USDC"}`),u&&("hidden"in u&&(u.hidden=!w),u.setAttribute("aria-hidden",w?"false":"true")),w&&n.markUnlocked(C)}async function R(){g(!0),T("Opening wallet connection...");try{let w=p();if(!w)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");let C=await w.request({method:"eth_requestAccounts"});if(h=Array.isArray(C)&&C[0]||"",!h)throw new Error("No wallet account selected.");return b(),T("Wallet connected. You can unlock now."),h}finally{g(!1)}}async function E(){g(!0);try{let w=p();if(w?.request&&h)try{await w.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}return h="",b(),T(e.disconnectMessage||"Wallet disconnected for this page."),!0}finally{g(!1)}}async function H(w){let C=p();if(!C)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");return h||await R(),(await ie({network:l,signer:{address:h,signTypedData:xt=>C.request({method:"eth_signTypedData_v4",params:[h,K(xt)]})},clientModule:e.circleClientModule})).pay(w)}async function L(){g(!0);try{h||await R(),g(!0),T("Requesting Gateway unlock...");let w=await N(n.resource,{accessPath:a,source:o,paymentProvider:e.paymentProvider||"circle-gateway-browser",challengeMessage:e.challengeMessage||"Gateway payment required. Connect your wallet to continue...",paymentMessage:e.paymentMessage||"Approve the Gateway payment proof in your wallet...",successMessage:e.successMessage||`Unlocked ${n.resource.title||"content"}.`,method:e.method,headers:e.headers,body:e.body,checkout:H,onStatus:T});return w.ok&&(k(!0,w.payment||{}),typeof e.onUnlock=="function"&&e.onUnlock(w)),w}catch(w){let C=w?.message||"Unlock failed. Please try again.";return T(C),{ok:!1,status:0,error:C,resource:n.resource}}finally{g(!1),b()}}function _(){je(n.resource),k(!1),T("Local payment proof cleared. The next unlock will require Gateway payment again.")}async function Z(){let w=p();try{let C=w?await w.request({method:"eth_accounts"}):[];h=Array.isArray(C)&&C[0]||""}catch{}b(),k(!1)}function Ge(){return c?.addEventListener?.("click",()=>R().catch(w=>T(w?.message||"Could not connect wallet."))),d?.addEventListener?.("click",()=>E().catch(w=>T(w?.message||"Could not disconnect wallet."))),i?.addEventListener?.("click",()=>L()),m?.addEventListener?.("click",_),Z(),G(n.resource,{source:o}),qe}let qe={resource:n.resource,connect:R,disconnect:E,unlock:L,clear:_,hydrate:Z,mount:Ge,getWalletAddress:()=>h};return e.autoMount!==!1&&Ge(),qe}function nt(t,e={}){return q(t,{...e,hosted:!0,noWalletMessage:e.noWalletMessage||"Install MetaMask or another EVM wallet to unlock premium content."})}Ee();I();function ue(t,e={}){let n=S({...t,paymentRail:"transfer"}),r=e.sendTransfer||e.transfer;if(typeof r!="function")throw new Error("createTransferCheckout requires sendTransfer({ resource, recipient, amount, currency, network }) and a server verifyTransfer hook.");return{resource:n,async pay(a={}){let o=n.recipient||n.payTo,l=String(n.price||n.amount||"0"),s=n.currency||"USDC",c=e.network||a.challenge?.accepts?.[0]?.network||"eip155:5042002",d=await r({resource:n,recipient:o,amount:l,currency:s,network:c,challenge:a.challenge}),i=d?.txHash||d?.hash||d?.transactionHash||d?.paymentId||"";if(!i)throw new Error("Transfer checkout did not return a txHash.");return{paymentSignature:i,signature:i,memo:d.memo||"",metadata:{paymentProvider:"direct-transfer",paymentId:i,txHash:i,recipient:o,amount:Number(l),currency:s,network:c,...d.metadata||d}}}}}async function Ce(t,e={}){let r=await(e.checkout||ue(t,e).pay)({resource:S(t),challenge:e.challenge||null}),a=r?.metadata?.txHash||r?.txHash||r?.paymentSignature||r?.signature||"";if(!a)throw new Error("Transfer checkout did not return a txHash.");return N(t,{...e,headers:{...e.headers||{},"x-nibgate-transfer-tx":a},payment:r.metadata||{paymentProvider:"direct-transfer",txHash:a,paymentId:a}})}function Oe(t={}){let e=t.resource?S(t.resource):null;function n(r={}){return S({...e||{},...typeof r=="string"?{id:r}:r})}return{content(r,a={}){return U("content_registered",B(n(r),a))},registerContent(r,a={}){return U("content_registered",B(n(r),a))},view(r,a={}){return U("resource_view",B(n(r),a))},track(r,a={}){return U(r||"custom",a)},unlockStarted(r,a={}){return U("unlock_started",B(n(r),a))},unlockCompleted(r,a={}){return U("unlock_completed",B(n(r),a))},paymentCompleted(r,a={}){return U("payment_completed",B(n(r),a))},rateResource(r,a={},o={}){return X(n(r),a,o)},ratingMessage(r,a={},o={}){return ke(n(r),a,o)},gate(r,a={}){return P(n(r),{...a,client:this})},trackResourcePage(r,a={}){return G(n(r),a)},checkResourceAccess(r,a={}){return N(n(r),a)},payWithPaymentSignature(r,a={}){return ne(n(r),a)},createWalletCheckout(r,a={}){return xe(n(r),a)},createCircleGatewayBrowserAdapter(r={}){return ie(r)},createTransferCheckout(r,a={}){return ue(n(r),a)},payWithTransfer(r,a={}){return Ce(n(r),a)},createEvmGatewayUnlock(r,a={}){return q(n(r),a)},createOnchainRating(r,a={}){return se(n(r),a)},mountRatingUI(r,a={}){return le(n(r),a)},payAndUnlockResource(r,a={}){return re(n(r),a)},setupResourcePage(r,a={}){return we(n(r),a)},normalizeResource:n,normalizeContentType:O,flush:ge}}var $e=Oe();Je($e);Ee();ze();var dt="nibgate-ui-styles",y={bg:"var(--bg, #f4f4f0)",fg:"var(--fg, #0a0a0a)",muted:"var(--muted, #6b6862)",border:"var(--border, #cecdc3)",accent:"var(--accent, #7c9a6d)",accentSoft:"var(--accent-soft, #d8e8d3)",cardHover:"var(--card-hover, #e0ddd3)"},on=t=>Object.entries(t).map(([e,n])=>`${e.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())}:${n}`).join(";");function ft(t,e,n){let r=document.createElement(t);for(let[a,o]of Object.entries(e||{}))a==="dataset"?Object.assign(r.dataset,o):a.startsWith("on")?r.addEventListener(a.slice(2).toLowerCase(),o):a==="style"&&typeof o=="object"?r.style.cssText=on(o):a==="cls"?r.className=o:r.setAttribute(a,String(o));return typeof n=="string"?r.innerHTML=n:n&&(Array.isArray(n)?n:[n]).forEach(a=>{a!=null&&r.appendChild(typeof a=="string"?document.createTextNode(a):a)}),r}function We(){if(document.getElementById(dt))return;let t=ft("style",{id:dt},`
1
+ var Nibgate=(()=>{var Ce=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var wt=Object.prototype.hasOwnProperty;var xt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,n)=>(typeof require<"u"?require:e)[n]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var U=(t,e)=>()=>(t&&(e=t(t=0)),e);var Te=(t,e)=>{for(var n in e)Ce(t,n,{get:e[n],enumerable:!0})},kt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of bt(e))!wt.call(t,a)&&a!==n&&Ce(t,a,{get:()=>e[a],enumerable:!(r=ht(e,a))||r.enumerable});return t};var vt=t=>kt(Ce({},"__esModule",{value:!0}),t);function V(t,e="gateway"){let n=String(t||"").trim().toLowerCase().replace(/[-\s]+/g,"_");return n==="circle_gateway"||n==="x402"?"gateway":n==="direct_transfer"||n==="wallet_transfer"?"transfer":ee.includes(n)?n:e}var ee,le=U(()=>{ee=["gateway","transfer"]});function D(t){let e=String(t||"").trim().toLowerCase();return F.includes(e)?e:St[e]||"article"}function Ae(t,e="paid"){let n=String(t||"").trim().toLowerCase();return Y.includes(n)?n:e}function O(t={}){if(typeof t=="string"){let e=Ae(t);return{humans:e,agents:e}}return{humans:Ae(t.humans||t.human||t.default,"paid"),agents:Ae(t.agents||t.agent||t.default,"paid")}}function J(t={}){let e=typeof t=="string"?{mode:t}:t||{},n=String(e.mode||e.type||"one_time").trim().toLowerCase().replace(/[-\s]+/g,"_");return{...e,mode:te.includes(n)?n:"one_time"}}function Pe(){return typeof window<"u"?window:null}function L(t){let e=Pe();if(!e)return"";let n=`meta[name="${t}"], meta[property="${t}"]`,r=e.document.querySelector(n);return r&&r.getAttribute("content")||""}function Et(t){let e=Pe();if(!(!e||!t))return`${e.location.origin}${t.startsWith("/")?t:"/"+t}`}function Ct(){return L("og:image")||void 0}function Tt(){return L("og:description")||L("description")||void 0}function At(){let t=Pe();return L("og:title")||L("twitter:title")||(t?t.document.title:"")||void 0}function Rt(){let t=L("og:type").toLowerCase();return t.includes("music")||t.includes("audio")||t.includes("song")?"music":t.includes("video")||t.includes("movie")?"video":t.includes("image")||t.includes("photo")?"image":"article"}function Pt(){let t=L("keywords");if(t)return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).slice(0,8)}function _t(t,e){return e&&typeof e=="object"&&Object.keys(e).length>0?O(e):t!=null&&t!==""&&Number.parseFloat(t)>0?{humans:"paid",agents:"paid"}:{humans:"free",agents:"free"}}function S(t={}){let e=typeof t=="string"?{id:t}:t||{},{publisher:n,publisherId:r,publisherWallet:a,publisherHandle:o,publisherName:s,publisherProfileUrl:l,publisherOrigin:c,publisherVerification:u,authorHandle:i,...b}=e,d=e.path||e.route||void 0,m=e.url||Et(d)||void 0,p=e.access,x=e.price??e.amount??"";return{...b,id:String(e.id||e.contentId||e.slug||"").trim(),title:String(e.title||e.name||At()||"Untitled").trim(),type:D(e.type||e.contentType||Rt()),price:x,currency:e.currency||"USDC",paymentRail:V(e.paymentRail||e.paymentMode||e.rail),recipient:e.recipient||e.receiver||e.receiverAddress||e.payTo||e.creatorWallet||void 0,payTo:e.payTo||e.recipient||e.receiver||e.receiverAddress||e.creatorWallet||void 0,path:d,url:m,imageUrl:e.imageUrl||e.image||Ct()||void 0,description:e.description||e.summary||Tt()||void 0,tags:e.tags||Pt()||void 0,access:_t(x,p),unlock:J(e.unlock),ratingsEnabled:e.ratingsEnabled??e.enableRatings??e.reputation?.ratingsEnabled??!0,reputation:{...typeof e.reputation=="object"&&e.reputation?e.reputation:{},ratingsEnabled:e.ratingsEnabled??e.enableRatings??e.reputation?.ratingsEnabled??!0}}}function Re(t){return Array.isArray(t)?t.length>0:t!=null&&String(t).trim()!==""}function It(t={}){let e=O(t.access);return e.humans==="paid"||e.agents==="paid"||Number.parseFloat(t.price||t.amount||"0")>0}function de(t={},e={}){let n=S(t),r=[],a=[],o=e.required||["id","type"],s=e.recommended||["title","url","description","imageUrl","tags"];for(let c of o)Re(n[c])||a.push(`Missing required content metadata: ${c}`);for(let c of s)Re(n[c])||r.push(`Missing recommended discovery metadata: ${c}`);F.includes(n.type)||a.push("Content type must be one of music, video, article, or image."),n.url&&!/^https?:\/\//i.test(String(n.url))&&r.push("Use an absolute canonical url for stronger discovery identity."),n.imageUrl&&!/^https?:\/\//i.test(String(n.imageUrl))&&r.push("Use an absolute imageUrl for thumbnails in Explore and agent discovery."),It(n)&&(Re(n.price)||a.push("Paid content requires price."));let l=Math.max(0,100-a.length*20-r.length*8);return{ok:a.length===0,score:l,errors:a,warnings:r,resource:n}}var F,St,Y,te,I=U(()=>{le();F=["music","video","article","image"],St={audio:"music",song:"music",track:"music",album:"music",playlist:"music",photo:"image",picture:"image",illustration:"image",art:"image",movie:"video",clip:"video"},Y=["free","paid","blocked"],te=["one_time","metered_stream","metered_read","time_pass","agent_quota"]});function v(){return typeof window>"u"?null:window}var q=U(()=>{});function Nt(t,e){let n=v();return n?(n.__nibgateClientQueue=n.__nibgateClientQueue||[],n.__nibgateClientQueue.push({eventName:t,payload:e}),!0):!1}function me(){let t=v();if(!t?.nibgateHub?.track||!Array.isArray(t.__nibgateClientQueue))return!1;let e=t.__nibgateClientQueue.splice(0);return e.forEach(n=>{t.nibgateHub.track(n.eventName,n.payload)}),e.length>0}function Mt(){let t=v();if(!t||t.__nibgateClientFlushStarted)return;t.__nibgateClientFlushStarted=!0;let e=0,n=t.setInterval(()=>{e+=1,me(),(t.nibgateHub?.track||e>=80)&&(t.clearInterval(n),t.__nibgateClientFlushStarted=!1)},250)}function M(t,e={}){let n=v();return n?n.nibgateHub?.track?(n.nibgateHub.track(t,e),me(),!0):(Nt(t,e),Mt(),!1):!1}function B(t,e={}){return{...e,resource:S(t)}}var Q=U(()=>{q();I()});function _e(t){return`nibgate:unlock:${t.id||t.path||t.url||"content"}`}function Ie(t){return`nibgate:payment-proof:${t.id||t.path||t.url||"content"}`}function fe(t,e={}){let n=v();if(!n)return!1;try{return n.localStorage.setItem(_e(t),JSON.stringify({unlockedAt:new Date().toISOString(),payment:e})),!0}catch{return!1}}function Ne(t,e){let n=v();if(!n||!e)return!1;try{let r=typeof e=="string"?e:JSON.stringify(e);return n.localStorage.setItem(Ie(t),r),!0}catch{return!1}}function Me(t){let e=v();if(!e)return"";try{return e.localStorage.getItem(Ie(t))||""}catch{return""}}function We(t){let e=S(t),n=v();if(!n)return!1;try{return n.localStorage.removeItem(Ie(e)),n.localStorage.removeItem(_e(e)),!0}catch{return!1}}function je(t){let e=v();if(!e)return!1;try{return!!e.localStorage.getItem(_e(t))}catch{return!1}}var pe=U(()=>{q();I()});function Fe(t){Ve=t}function _(t,e={}){let n=S(t),r=e.client||Ve;return{resource:n,content(a={}){return r.content(n,a)},view(a={}){return r.view(n,a)},track(a,o={}){return r.track(a,B(n,o))},unlockStarted(a={}){return r.unlockStarted(n,a)},unlockCompleted(a={}){return fe(n,a),r.unlockCompleted(n,a)},paymentCompleted(a={}){return r.paymentCompleted(n,a)},isUnlocked(){return je(n)},markUnlocked(a={}){return fe(n,a),r.unlockCompleted(n,a),r.paymentCompleted(n,a),!0},async unlock(a={}){r.unlockStarted(n);let o=typeof a=="function"?await a(n):a;return fe(n,o||{}),r.unlockCompleted(n,o||{}),r.paymentCompleted(n,o||{}),{unlocked:!0,resource:n,payment:o||{}}},rate(a={},o={}){return r.rateResource(n,a,o)}}}var Ve,$=U(()=>{I();Q();pe();Ve=null});function Ut(t,e){return typeof e=="bigint"?e.toString():e}function K(t){return JSON.stringify(t,Ut)}var ge=U(()=>{});function ae(t={}){let e=typeof t=="number"?t:t.rating??t.stars??t.ratingValue??t.score,n=Number.parseFloat(e),r=Number.isFinite(n)?Math.max(1,Math.min(50,n<=5?Math.round(n*10):Math.round(n))):null;return{...t,rating:r?r/10:void 0,ratingValue:r||void 0}}function be(t,e={},n={}){let r=S(t),o=ae(e).ratingValue||0;return["Nibgate content rating",`site:${n.siteDomain||n.domain||r.siteDomain||r.domain||""}`,`content:${r.externalId||r.id}`,`url:${r.url||n.url||""}`,`rating:${o}`,"I confirm this rating is tied to my unlock/payment proof."].join(`
2
+ `)}var we=U(()=>{I()});var Qe={};Te(Qe,{createCircleGatewayBrowserAdapter:()=>$t});function Ht(t){let e=typeof t=="string"?t:K(t);return typeof Buffer<"u"?Buffer.from(e).toString("base64"):btoa(unescape(encodeURIComponent(e)))}function zt(t){return typeof Buffer<"u"?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}async function $t(t={}){let e=t.signer||await t.getSigner?.();if(!e?.address||typeof e.signTypedData!="function")throw new Error("Circle Gateway browser adapter requires an EVM signer with address and signTypedData.");let n=new Je.BatchEvmScheme(e),r=t.network||t.chainId&&`eip155:${t.chainId}`||"eip155:5042002";function a(s){if(s&&typeof s=="object")return s;if(!s||typeof s!="string")throw new Error("Missing PAYMENT-REQUIRED header.");return JSON.parse(zt(s))}function o(s){let l=Array.isArray(s?.accepts)?s.accepts:[],c=l.find(u=>{let i=u.extra||{};return u.network===r&&i.name==="GatewayWalletBatched"&&i.version==="1"&&typeof i.verifyingContract=="string"})||l.find(u=>{let i=u.extra||{};return i.name==="GatewayWalletBatched"&&i.version==="1"&&typeof i.verifyingContract=="string"});if(!c){let u=l.map(b=>b.network).filter(Boolean).join(", ")||"none",i=l.some(b=>{let d=b.extra||{};return d.name==="GatewayWalletBatched"&&d.version==="1"&&typeof d.verifyingContract=="string"});throw new Error(i?`No Circle Gateway batching payment option found for ${r}. Server returned networks: ${u}.`:`The payment challenge is not a Circle Gateway batching challenge. Configure the creator access route with createCircleGatewayServer(...) or createNibgateServer({ paymentMode: 'circle-gateway', network: '${r}' }).`)}return c}return{signer:e,network:r,async pay({paymentRequiredHeader:s,challenge:l}){let c=a(s||l),u=o(c),i=c.x402Version??2,b=await n.createPaymentPayload(i,u),d=Ht({...b,resource:c.resource,accepted:u});return{paymentSignature:d,signature:d,metadata:{paymentProvider:"circle-gateway",network:u.network,payer:e.address,recipient:u.payTo||u.recipient,amount:u.amount,currency:u.asset}}}}}var Je,Ke=U(()=>{Je=xt("@circle-fin/x402-batching/client");ge()});function qt(t=""){return String(t||"").replace(/^0x/i,"").replace(/[^0-9a-fA-F]/g,"").toLowerCase()}function Ze(t=""){let e=qt(t);if(e.length>64)throw new Error("ABI word is too long.");return e.padEnd(64,"0")}function Ue(t=0){return Number(t||0).toString(16).padStart(64,"0")}function Gt(t=""){return Array.from(new TextEncoder().encode(String(t||""))).map(e=>e.toString(16).padStart(2,"0")).join("")}function Wt(t=""){let e=Gt(t),n=e.length/2,r=Math.ceil(n/32)*64;return Ue(n)+e.padEnd(r,"0")}function jt({contentId:t,ratingValue:e,reviewHash:n,unlockRef:r}){return Ot+Ze(t)+Ue(e)+Ze(n||Be)+Ue(128)+Wt(r||"")}function ze(t,e={}){let n=e.contentId||e.contentHash;if(!n)throw new Error("contentId/contentHash is required. Use the Nibgate backend prepare endpoint or pass a known content hash.");return n}function ot(t=""){if(!t)return Be;throw new Error("Text review hashing is not available in direct-browser mode. Pass reviewHash from your app/backend.")}async function Vt(t,e={}){if(e.contentId||e.contentHash)return{contentId:e.contentId||e.contentHash};let n=e.prepareUrl||e.indexUrl?.replace(/\/index$/,"/prepare");if(!n)throw new Error("contentId/contentHash or prepareUrl is required for onchain rating.");let r=await fetch(n,{method:"POST",headers:{"content-type":"application/json",...e.indexHeaders||{}},body:JSON.stringify({siteId:e.siteId,token:e.token,resource:t,url:t.url,path:t.path})}),a=await r.json().catch(()=>({}));if(!r.ok||!a.contentHash)throw new Error(a.error||"Could not prepare Nibgate onchain rating.");return a}async function xe(t,e={}){let n=S(t),r=ae(e.rating??e.stars??e);if(!r.ratingValue)throw new Error("Rating must be between 0.1 and 5 stars.");let a=e.provider||globalThis?.ethereum;if(!a?.request)throw new Error("Connect an EVM wallet to rate this content onchain.");let o=e.contractAddress||e.reputationContract||He;if(!o)throw new Error("Nibgate reputation contract address is not configured.");let s=await a.request({method:"eth_requestAccounts"}),l=Array.isArray(s)&&s[0]||"";if(!l)throw new Error("No wallet account selected.");let c=await Vt(n,e),u=c.contentHash||c.contentId||ze(n,e),i=e.reviewHash||Be,b=String(e.unlockRef||e.paymentId||e.txHash||""),d=jt({contentId:u,ratingValue:r.ratingValue,reviewHash:i,unlockRef:b}),m=await a.request({method:"eth_sendTransaction",params:[{from:l,to:o,data:d}]}),p=B(n,{rating:r.rating,ratingValue:r.ratingValue,walletAddress:l,txHash:m,contentHash:u,reviewHash:i,proofType:"onchain_pending",proof:b,paymentId:e.paymentId,actor:e.actor||"human"});return M("content_rating",p),e.indexUrl&&await fetch(e.indexUrl,{method:"POST",headers:{"content-type":"application/json",...e.indexHeaders||{}},body:JSON.stringify({siteId:e.siteId,token:e.token,txHash:m,resource:n,url:n.url,path:n.path,actor:e.actor||"human"})}).catch(()=>null),{txHash:m,walletAddress:l,contentId:u,ratingValue:r.ratingValue,reviewHash:i}}var Ot,Be,et,tt,nt,rt,He,at,$e=U(()=>{we();I();Q();Ot="0xc62fad09",Be=`0x${"0".repeat(64)}`,et="nibgate:content:v1",tt=5042002,nt="Arc Testnet",rt="https://rpc.testnet.arc.io",He="0x9f27fd62e75f86a3c7addfdba443aab1f930e281",at=[{type:"function",name:"rateContent",stateMutability:"nonpayable",inputs:[{name:"contentId",type:"bytes32"},{name:"rating",type:"uint8"},{name:"reviewHash",type:"bytes32"},{name:"unlockRef",type:"string"}],outputs:[]}]});var ct={};Te(ct,{createOnchainRating:()=>ce,mountRatingUI:()=>ie,rateResource:()=>X});function X(t,e={},n={}){let r=S(t),a=ae(e),o={...n,...a,ratingMessage:n.ratingMessage||e.message||e.ratingMessage||be(r,a,n),ratingSignature:n.ratingSignature||e.signature||e.ratingSignature||void 0,resource:r};return M("content_rating",o)}function ce(t,e={}){let n=_(t,e.gateOptions||{}),r=v(),a=typeof e.status=="string"?r?.document.querySelector(e.status):e.status,o=typeof e.ratingTarget=="string"?r?.document.querySelector(e.ratingTarget):e.ratingTarget,s=e.ratingButtons||e.buttons||"[data-nibgate-rating-value], [data-rating]",c=(Array.isArray(e.buttons)?e.buttons:typeof e.buttons=="string"?Array.from(r?.document.querySelectorAll(e.buttons)||[]):e.buttons?[e.buttons]:null)||Array.from(r?.document.querySelectorAll(s)||[]),u=e.source||"nibgate-onchain-rating",i=!1,b=e.payment||null;function d(h){typeof e.onStatus=="function"&&e.onStatus(h),a&&(a.textContent=h||"")}function m(h){i=!!h,c.forEach(k=>{k&&"disabled"in k&&(k.disabled=i)})}function p(h=null){return b=h||null,b}function x(h){return o&&("hidden"in o&&(o.hidden=!h),o.setAttribute("aria-hidden",h?"false":"true")),!!h}function T(h){let k=h?.dataset?.nibgateRatingValue||h?.dataset?.rating||h?.value||h?.textContent,P=Number.parseFloat(String(k||"").replace(/[^\d.]/g,""));return Number.isFinite(P)?P:Number(e.rating||e.stars||0)}async function A(h={}){m(!0);try{let k=Number.parseFloat(h.rating??h.stars??h.value??e.rating??e.stars);if(!Number.isFinite(k))throw new Error("Choose a rating before sending.");let P=h.paymentId||e.paymentId||(typeof e.getPaymentId=="function"?e.getPaymentId():b?.paymentId),C=h.unlockRef||e.unlockRef||(typeof e.getUnlockRef=="function"?e.getUnlockRef():null)||P||b?.txHash||b?.transactionHash||"";d(e.pendingMessage||"Send the onchain rating transaction...");let H=await xe(n.resource,{...e,...h,rating:k,paymentId:P,unlockRef:C,source:u});return d(e.successMessage||"Rating sent to Nibgate reputation."),typeof e.onRated=="function"&&e.onRated(H),H}catch(k){let P=k?.message||e.errorMessage||"Rating failed.";throw d(P),typeof e.onError=="function"&&e.onError(k),k}finally{m(!1)}}function f(){return c.forEach(h=>{h?.addEventListener?.("click",()=>A({rating:T(h)}).catch(()=>null))}),e.visible!==void 0&&x(!!e.visible),g}let g={resource:n.resource,rate:A,mount:f,setPayment:p,setVisible:x};return e.autoMount!==!1&&f(),g}function ie(t,e={}){let n=_(t,e.gateOptions||{}),r=v();if(!r)return null;let a=typeof e.target=="string"?r.document.querySelector(e.target):e.target;if(!a)return null;let o=[1,2,3,4,5],s=0,l=r.document.createElement("div");l.className="nibgate-rating-ui",l.style.cssText="display:flex;align-items:center;gap:4px;padding:8px 0";let c=o.map(d=>{let m=r.document.createElement("button");return m.type="button",m.dataset.nibgateRatingValue=String(d),m.setAttribute("aria-label",`${d} star${d>1?"s":""}`),m.innerHTML="\u2606",m.style.cssText="background:none;border:none;font-size:24px;cursor:pointer;color:#ccc;transition:color 0.15s;padding:2px;line-height:1",m.addEventListener("mouseenter",()=>{c.forEach((p,x)=>p.style.color=x<d?"#f5b342":"#ccc")}),m.addEventListener("mouseleave",()=>{c.forEach((p,x)=>p.style.color=x<s?"#f5b342":"#ccc")}),m.addEventListener("click",()=>{s=d,c.forEach((p,x)=>p.style.color=x<d?"#f5b342":"#ccc"),X(n.resource,{rating:d}).catch(()=>{})}),l.appendChild(m),m}),u=r.document.createElement("span");u.style.cssText="font-size:13px;color:#888;margin-left:8px",u.textContent=e.label||"Rate this content",l.appendChild(u),a.appendChild(l);function i(d,m={}){return n.rate({...m,rating:d})}function b(d){s=d,c.forEach((m,p)=>m.style.color=p<d?"#f5b342":"#ccc")}return{resource:n.resource,container:l,setRating:b,rate:i}}var ke=U(()=>{I();we();Q();q();$e();$()});var Jt={};Te(Jt,{ACCESS_MODES:()=>Y,CONTENT_TYPES:()=>F,NIBGATE_CONTENT_HASH_NAMESPACE:()=>et,NIBGATE_CONTENT_SETTING_FIELDS:()=>mt,NIBGATE_REPUTATION_ABI:()=>at,NIBGATE_REPUTATION_CHAIN_ID:()=>tt,NIBGATE_REPUTATION_CHAIN_NAME:()=>nt,NIBGATE_REPUTATION_CONTRACT:()=>He,NIBGATE_REPUTATION_RPC_URL:()=>rt,PAYMENT_RAILS:()=>ee,UNLOCK_MODES:()=>te,checkResourceAccess:()=>N,contentRatingHash:()=>ze,createCircleGatewayBrowserAdapter:()=>oe,createEvmGatewayUnlock:()=>W,createGate:()=>_,createHostedUnlock:()=>Xe,createNibgate:()=>Le,createNibgateContentSettings:()=>ft,createOnchainRating:()=>ce,createTransferCheckout:()=>se,createWalletCheckout:()=>he,mountRatingUI:()=>ie,nibgate:()=>De,normalizeAccessPolicy:()=>O,normalizeContentType:()=>D,normalizePaymentRail:()=>V,normalizeResource:()=>S,normalizeUnlockPolicy:()=>J,payAndUnlockResource:()=>re,payWithPaymentSignature:()=>ne,payWithTransfer:()=>ve,rateContentOnchain:()=>xe,rateResource:()=>X,renderDefaultGatewayWalletUI:()=>dt,renderDefaultRatingUI:()=>lt,renderDefaultUnlockUI:()=>ut,reviewTextHash:()=>ot,settingsToAccessPolicy:()=>pt,settingsToUnlockPolicy:()=>gt,setupResourcePage:()=>ye,trackResourcePage:()=>G,validateResourceMetadata:()=>de});$();Q();pe();ge();$();I();q();$();function G(t,e={}){let n=_(t,e.gateOptions||{}),r=de(n.resource,e.validation||{});return(r.warnings.length||r.errors.length)&&e.warn!==!1&&v()?.console?.warn&&v().console.warn("Nibgate content metadata needs attention",r),n.content({source:e.source,metadataQuality:{score:r.score,warnings:r.warnings,errors:r.errors},...e.content||{}}),n.view({source:e.source,path:e.path||v()?.location?.pathname||n.resource.path,referrer:e.referrer??v()?.document?.referrer??"",...e.view||{}}),n}function ye(t,e={}){let n=G(t,e),r=v();if(!r)return n;let a=typeof e.button=="string"?r.document.querySelector(e.button):e.button,o=typeof e.status=="string"?r.document.querySelector(e.status):e.status,s=e.onStatus||(l=>{o&&(o.textContent=l||"")});return a&&a.addEventListener("click",async()=>{a.disabled=!0;try{await N(t,{...e,onStatus:s})}finally{a.disabled=!1}}),n}async function N(t,e={}){let n=_(t,e.gateOptions||{}),r=e.accessPath||n.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.checkingMessage||"Checking access route..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"nibgate-access-route"});let o=await fetch(r,{method:e.method||"GET",headers:{accept:"application/json",...Me(n.resource)?{"x-nibgate-payment-proof":Me(n.resource)}:{},...e.headers||{}},body:e.body}),s=await o.json().catch(()=>({}));if(o.status===402){if(n.track("payment_challenge_returned",{source:e.source,challenge:s,resource:n.resource}),a(e.challengeMessage||"Payment challenge returned. Continue with checkout."),typeof e.createPaymentSignature=="function"||typeof e.checkout=="function")return ne(t,{...e,challenge:s,paymentRequiredHeader:o.headers.get("PAYMENT-REQUIRED")||o.headers.get("payment-required")||""});if(e.autoPay&&e.payPath){let c=await re(t,e);return c.ok&&e.retryAfterPay!==!1?N(t,{...e,autoPay:!1}):c}return{ok:!1,status:o.status,challenge:s,resource:n.resource,response:o}}if(!o.ok)return a(s.error||e.errorMessage||"Access check failed"),{ok:!1,status:o.status,error:s.error||"Access check failed",payload:s,resource:n.resource,response:o};let l=e.payment||s.payment||null;return l&&(n.unlockCompleted(l),n.paymentCompleted(l)),a(e.successMessage||"Access allowed and Nibgate events emitted."),{ok:!0,status:o.status,payload:s,payment:l,resource:n.resource,response:o}}async function ne(t,e={}){let n=_(t,e.gateOptions||{}),r=e.accessPath||n.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Waiting for wallet payment approval..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"wallet-gateway"});let o=e.paymentSignature||"",s=e.memo||"",l=e.payment||{};if(!o){let d=e.paymentRequiredHeader||"",m=e.challenge||null,x=await(e.createPaymentSignature||e.checkout)({resource:n.resource,challenge:m,paymentRequiredHeader:d,accessPath:r});o=x?.paymentSignature||x?.signature||x?.payment||"",s=x?.memo||x?.paymentMemo||"",l=x?.metadata||x?.paymentMetadata||x||{}}if(!o){let d="Wallet did not return a payment signature.";return n.track("payment_failed",{source:e.source,error:d}),a(d),{ok:!1,status:400,error:d,resource:n.resource}}let c=await fetch(r,{method:e.method||"GET",headers:{accept:"application/json","payment-signature":o,...s?{"payment-memo":s}:{},...e.headers||{}}}),u=await c.text(),i={};try{i=u?JSON.parse(u):{}}catch{i={error:u||"Payment verification failed"}}if(!c.ok){let d=i.detail||i.reason||i.invalidReason||i.error||u||"Payment verification failed",m=typeof d=="string"?d:K(d);return n.track("payment_failed",{source:e.source,status:c.status,error:m,...l}),a(e.paymentErrorMessage||m),{ok:!1,status:c.status,error:m,payload:i,resource:n.resource,response:c}}let b=i.payment||{paymentProvider:e.paymentProvider||"wallet-gateway",paymentId:o,memo:s,amount:Number(n.resource.price||0),revenue:Number(n.resource.price||0),currency:n.resource.currency||"USDC",...l};return Ne(n.resource,i.unlockProof),n.markUnlocked(b),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:c.status,payload:i,payment:b,resource:n.resource,response:c}}async function re(t,e={}){let n=_(t,e.gateOptions||{}),r=e.payPath||n.resource.payPath||"/api/nibgate/pay",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Starting payment..."),n.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"circle-gateway"});let o=await fetch(r,{method:e.payMethod||"POST",headers:{accept:"application/json","content-type":"application/json",...e.payHeaders||{}},body:JSON.stringify({resource:n.resource,...e.payPayload||{}})}),s=await o.json().catch(()=>({}));if(!o.ok||!s.ok)return n.track("payment_failed",{source:e.source,status:o.status,error:s.error||"Payment failed",detail:s.detail||""}),a(s.detail||s.error||e.paymentErrorMessage||"Payment failed."),{ok:!1,status:o.status,payload:s,resource:n.resource,response:o};let l=s.payment||{paymentProvider:e.paymentProvider||"circle-gateway",paymentId:s.paymentId||`nibgate_payment_${Date.now()}`,amount:Number(n.resource.price||0),revenue:Number(n.resource.price||0),currency:n.resource.currency||"USDC"};return Ne(n.resource,s.unlockProof),n.markUnlocked(l),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:o.status,payload:s,payment:l,resource:n.resource,response:o}}I();q();function Bt(t,e){let n=v();if(!t||!n)return;let r=typeof t=="string"?n.document.querySelector(t):t;r&&(r.textContent=e||"")}function Ye(t,e){let n=v();if(!t||!n)return;let r=typeof t=="string"?n.document.querySelector(t):t;r&&"disabled"in r&&(r.disabled=!!e)}function he(t,e={}){let n=S(t),r=e.accessPath||n.accessPath||"/api/nibgate/access",a=e.button||null,o=e.status||null,s=typeof e.onStatus=="function"?e.onStatus:i=>Bt(o,i),l=e.checkout||e.createPaymentSignature||e.pay;if(typeof l!="function")throw new Error("createWalletCheckout requires checkout/createPaymentSignature/pay callback for the active wallet or Gateway adapter.");async function c(i={}){Ye(a,!0);try{return await N(n,{...e,...i,accessPath:r,createPaymentSignature:l,onStatus:s})}finally{Ye(a,!1)}}function u(){let i=v();if(!i||!a)return{unlock:c};let b=typeof a=="string"?i.document.querySelector(a):a;return b&&b.addEventListener("click",()=>c().catch(d=>s(d.message||"Checkout failed."))),{unlock:c}}return{resource:n,unlock:c,mount:u}}I();we();Q();$();$();q();pe();ge();$();async function oe(t={}){return(await Promise.resolve().then(()=>(Ke(),Qe))).createCircleGatewayBrowserAdapter(t)}var Lt="https://api.nibgate.xyz/api/hub/pay";function Dt(t,e){return e.hosted||e.accessPath==="hosted"?Lt:e.accessPath||t.accessPath||"/api/nibgate/access"}function W(t,e={}){let n=_(t,e.gateOptions||{}),r=v(),a=Dt(n.resource,e),o=e.source||"nibgate-evm-gateway",s=e.network||"eip155:5042002",l=typeof e.status=="string"?r?.document.querySelector(e.status):e.status,c=typeof e.connectButton=="string"?r?.document.querySelector(e.connectButton):e.connectButton,u=typeof e.disconnectButton=="string"?r?.document.querySelector(e.disconnectButton):e.disconnectButton,i=typeof e.unlockButton=="string"?r?.document.querySelector(e.unlockButton):e.unlockButton,b=typeof e.clearButton=="string"?r?.document.querySelector(e.clearButton):e.clearButton,d=typeof e.walletLabel=="string"?r?.document.querySelector(e.walletLabel):e.walletLabel,m=typeof e.unlockedTarget=="string"?r?.document.querySelector(e.unlockedTarget):e.unlockedTarget,p="",x=!1;function T(w){typeof e.onStatus=="function"&&e.onStatus(w),l&&(l.textContent=w||"")}function A(w){return w?`${w.slice(0,6)}...${w.slice(-4)}`:""}function f(){return r?.ethereum||e.provider||null}function g(w){x=!!w,[c,u,i,b].forEach(E=>{E&&"disabled"in E&&(E.disabled=x||E===c&&!f()||E===u&&!p)})}function h(){let w=!!f();d&&(d.textContent=p?A(p):w?"Ready to connect":"No wallet detected"),c&&(c.textContent=p?"Connected":"Connect wallet"),u&&(u.textContent="Disconnect"),c&&"disabled"in c&&(c.disabled=x||!w),u&&"disabled"in u&&(u.disabled=x||!p)}function k(w,E={}){i&&(i.textContent=w?"Unlocked":`Unlock for ${n.resource.price} ${n.resource.currency||"USDC"}`),m&&("hidden"in m&&(m.hidden=!w),m.setAttribute("aria-hidden",w?"false":"true")),w&&n.markUnlocked(E)}async function P(){g(!0),T("Opening wallet connection...");try{let w=f();if(!w)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");let E=await w.request({method:"eth_requestAccounts"});if(p=Array.isArray(E)&&E[0]||"",!p)throw new Error("No wallet account selected.");return h(),T("Wallet connected. You can unlock now."),p}finally{g(!1)}}async function C(){g(!0);try{let w=f();if(w?.request&&p)try{await w.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}return p="",h(),T(e.disconnectMessage||"Wallet disconnected for this page."),!0}finally{g(!1)}}async function H(w){let E=f();if(!E)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");let Ee=await E.request({method:"eth_accounts"}).catch(()=>p?[p]:[]),ue=Array.isArray(Ee)&&Ee[0]?Ee[0]:p||await P();return ue!==p&&(p=ue),(await oe({network:s,signer:{address:ue,signTypedData:yt=>E.request({method:"eth_signTypedData_v4",params:[ue,K(yt)]})},clientModule:e.circleClientModule})).pay(w)}async function z(){g(!0);try{p||await P(),g(!0),T("Requesting Gateway unlock...");let w=await N(n.resource,{accessPath:a,source:o,paymentProvider:e.paymentProvider||"circle-gateway-browser",challengeMessage:e.challengeMessage||"Gateway payment required. Connect your wallet to continue...",paymentMessage:e.paymentMessage||"Approve the Gateway payment proof in your wallet...",successMessage:e.successMessage||`Unlocked ${n.resource.title||"content"}.`,method:e.method,headers:e.headers,body:e.body,checkout:H,onStatus:T});return w.ok&&(k(!0,w.payment||{}),typeof e.onUnlock=="function"&&e.onUnlock(w)),w}catch(w){let E=w?.message||"Unlock failed. Please try again.";return T(E),{ok:!1,status:0,error:E,resource:n.resource}}finally{g(!1),h()}}function R(){We(n.resource),k(!1),T("Local payment proof cleared. The next unlock will require Gateway payment again.")}async function Z(){let w=f();try{let E=w?await w.request({method:"eth_accounts"}):[];p=Array.isArray(E)&&E[0]||""}catch{}h(),k(!1)}function qe(){return c?.addEventListener?.("click",()=>P().catch(w=>T(w?.message||"Could not connect wallet."))),u?.addEventListener?.("click",()=>C().catch(w=>T(w?.message||"Could not disconnect wallet."))),i?.addEventListener?.("click",()=>z()),b?.addEventListener?.("click",R),Z(),G(n.resource,{source:o}),Ge}let Ge={resource:n.resource,connect:P,disconnect:C,unlock:z,clear:R,hydrate:Z,mount:qe,getWalletAddress:()=>p};return e.autoMount!==!1&&qe(),Ge}function Xe(t,e={}){return W(t,{...e,hosted:!0,noWalletMessage:e.noWalletMessage||"Install MetaMask or another EVM wallet to unlock premium content."})}ke();I();function se(t,e={}){let n=S({...t,paymentRail:"transfer"}),r=e.sendTransfer||e.transfer;if(typeof r!="function")throw new Error("createTransferCheckout requires sendTransfer({ resource, recipient, amount, currency, network }) and a server verifyTransfer hook.");return{resource:n,async pay(a={}){let o=n.recipient||n.payTo,s=String(n.price||n.amount||"0"),l=n.currency||"USDC",c=e.network||a.challenge?.accepts?.[0]?.network||"eip155:5042002",u=await r({resource:n,recipient:o,amount:s,currency:l,network:c,challenge:a.challenge}),i=u?.txHash||u?.hash||u?.transactionHash||u?.paymentId||"";if(!i)throw new Error("Transfer checkout did not return a txHash.");return{paymentSignature:i,signature:i,memo:u.memo||"",metadata:{paymentProvider:"direct-transfer",paymentId:i,txHash:i,recipient:o,amount:Number(s),currency:l,network:c,...u.metadata||u}}}}}async function ve(t,e={}){let r=await(e.checkout||se(t,e).pay)({resource:S(t),challenge:e.challenge||null}),a=r?.metadata?.txHash||r?.txHash||r?.paymentSignature||r?.signature||"";if(!a)throw new Error("Transfer checkout did not return a txHash.");return N(t,{...e,headers:{...e.headers||{},"x-nibgate-transfer-tx":a},payment:r.metadata||{paymentProvider:"direct-transfer",txHash:a,paymentId:a}})}function Le(t={}){let e=t.resource?S(t.resource):null;function n(r={}){return S({...e||{},...typeof r=="string"?{id:r}:r})}return{content(r,a={}){return M("content_registered",B(n(r),a))},registerContent(r,a={}){return M("content_registered",B(n(r),a))},view(r,a={}){return M("resource_view",B(n(r),a))},track(r,a={}){return M(r||"custom",a)},unlockStarted(r,a={}){return M("unlock_started",B(n(r),a))},unlockCompleted(r,a={}){return M("unlock_completed",B(n(r),a))},paymentCompleted(r,a={}){return M("payment_completed",B(n(r),a))},rateResource(r,a={},o={}){return X(n(r),a,o)},ratingMessage(r,a={},o={}){return be(n(r),a,o)},gate(r,a={}){return _(n(r),{...a,client:this})},trackResourcePage(r,a={}){return G(n(r),a)},checkResourceAccess(r,a={}){return N(n(r),a)},payWithPaymentSignature(r,a={}){return ne(n(r),a)},createWalletCheckout(r,a={}){return he(n(r),a)},createCircleGatewayBrowserAdapter(r={}){return oe(r)},createTransferCheckout(r,a={}){return se(n(r),a)},payWithTransfer(r,a={}){return ve(n(r),a)},createEvmGatewayUnlock(r,a={}){return W(n(r),a)},createOnchainRating(r,a={}){return ce(n(r),a)},mountRatingUI(r,a={}){return ie(n(r),a)},payAndUnlockResource(r,a={}){return re(n(r),a)},setupResourcePage(r,a={}){return ye(n(r),a)},normalizeResource:n,normalizeContentType:D,flush:me}}var De=Le();Fe(De);ke();$e();var it="nibgate-ui-styles",y={bg:"var(--bg, #f4f4f0)",fg:"var(--fg, #0a0a0a)",muted:"var(--muted, #6b6862)",border:"var(--border, #cecdc3)",accent:"var(--accent, #7c9a6d)",accentSoft:"var(--accent-soft, #d8e8d3)",cardHover:"var(--card-hover, #e0ddd3)"},Ft=t=>Object.entries(t).map(([e,n])=>`${e.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())}:${n}`).join(";");function st(t,e,n){let r=document.createElement(t);for(let[a,o]of Object.entries(e||{}))a==="dataset"?Object.assign(r.dataset,o):a.startsWith("on")?r.addEventListener(a.slice(2).toLowerCase(),o):a==="style"&&typeof o=="object"?r.style.cssText=Ft(o):a==="cls"?r.className=o:r.setAttribute(a,String(o));return typeof n=="string"?r.innerHTML=n:n&&(Array.isArray(n)?n:[n]).forEach(a=>{a!=null&&r.appendChild(typeof a=="string"?document.createTextNode(a):a)}),r}function Oe(){if(document.getElementById(it))return;let t=st("style",{id:it},`
3
3
  @keyframes nfade { from { opacity:0;transform:translateY(6px) } to { opacity:1;transform:translateY(0) } }
4
4
  @keyframes nscale { from { opacity:0;transform:scale(0.96) } to { opacity:1;transform:scale(1) } }
5
5
  @keyframes nshimmer { 0% { transform:translateX(-100%) } 100% { transform:translateX(100%) } }
@@ -22,20 +22,20 @@ var Nibgate=(()=>{var kt=Object.create;var de=Object.defineProperty;var vt=Objec
22
22
  .nui-stat { font-size:18px;color:${y.muted};line-height:1.4;min-height:28px }
23
23
  .nui-stat-err { color:#dc2626 }
24
24
  .nui-stat-ok { color:#16a34a }
25
- `);document.head.appendChild(t)}function V(t,e,n){return ft(t,e,n)}function cn(t,e){t&&(t.textContent=e||"")}function Te(t){let e=document.createElement("div");return e.textContent=String(t??""),e.innerHTML}function mt(t,e,n={}){We();let r=V("div",{cls:"nui",style:{animation:"nfade .2s ease-out"}}),a='<svg width="24" height="24" viewBox="0 0 32 32" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle"><path d="M6 16v8a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-8"/><path d="M10 16v-5a6 6 0 0 1 12 0v5"/><circle cx="16" cy="21" r="2"/></svg>';r.innerHTML=`
25
+ `);document.head.appendChild(t)}function j(t,e,n){return st(t,e,n)}function Yt(t,e){t&&(t.textContent=e||"")}function Se(t){let e=document.createElement("div");return e.textContent=String(t??""),e.innerHTML}function ut(t,e,n={}){Oe();let r=j("div",{cls:"nui",style:{animation:"nfade .2s ease-out"}}),a='<svg width="24" height="24" viewBox="0 0 32 32" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" style="vertical-align:middle"><path d="M6 16v8a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-8"/><path d="M10 16v-5a6 6 0 0 1 12 0v5"/><circle cx="16" cy="21" r="2"/></svg>';r.innerHTML=`
26
26
  <div style="display:flex;flex-direction:column;align-items:center;text-align:center;max-width:580px;margin:0 auto;padding:40px 52px">
27
27
  <div id="nibgate-lottie" style="width:165px;height:168px;margin-bottom:24px"></div>
28
- <div style="font-size:50px;font-weight:700;letter-spacing:-.03em;color:${y.fg};margin-bottom:12px">${Te(e.price)} USDC</div>
28
+ <div style="font-size:50px;font-weight:700;letter-spacing:-.03em;color:${y.fg};margin-bottom:12px">${Se(e.price)} USDC</div>
29
29
  <div style="font-size:21px;color:${y.muted};margin-bottom:48px">Pay to unlock this content</div>
30
30
  <div data-nibgate-wallet-label class="nui-mono" style="font-size:18px;color:${y.muted};margin-bottom:40px;min-height:28px">Connect wallet</div>
31
31
  <div data-nibgate-unlock-wrap style="width:100%;position:relative;border-radius:12px;overflow:hidden;cursor:pointer">
32
32
  <div data-nibgate-unlock-progress style="position:absolute;inset:0;width:0%;background:linear-gradient(90deg,rgba(255,255,255,0.1),rgba(255,255,255,0.45));border-radius:12px;transition:width .05s linear;z-index:2"></div>
33
33
  <div data-nibgate-shimmer style="position:absolute;inset:0;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,0.12),transparent);border-radius:12px;transform:translateX(-100%);z-index:3;pointer-events:none"></div>
34
- <button type="button" data-nibgate-unlock disabled class="nui-btn nui-btn-primary" style="width:100%;padding:24px 32px;font-size:24px;position:relative;z-index:4;background:${y.accent};transition:transform .1s,opacity .15s;display:flex">${a}Hold to pay ${Te(e.price)} USDC</button></div>
34
+ <button type="button" data-nibgate-unlock disabled class="nui-btn nui-btn-primary" style="width:100%;padding:24px 32px;font-size:24px;position:relative;z-index:4;background:${y.accent};transition:transform .1s,opacity .15s;display:flex">${a}Hold to pay ${Se(e.price)} USDC</button></div>
35
35
  <div class="nui-stat" style="text-align:center;margin-top:16px" data-nibgate-status></div>
36
36
  </div>
37
37
  <div data-nibgate-premium hidden style="margin-top:32px;border-top:1px solid ${y.border};padding-top:32px"></div>
38
- `,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r),(function(){if(!document.getElementById("nibgate-lottie"))return;function H(_){var Z=document.getElementById("nibgate-lottie");Z&&window.lottie&&window.lottie.loadAnimation({container:Z,animationData:_,loop:!0,autoplay:!0})}if(window.lottie){window._lottieData?H(window._lottieData):fetch("/nibgate-unlock-key.json?t=1").then(function(_){if(!_.ok)throw new Error;return _.json()}).then(function(_){window._lottieData=_,H(_)}).catch(function(){});return}if(!window._lottieLoading){window._lottieLoading=!0;var L=document.createElement("script");L.src="https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.12.2/lottie.min.js",L.onload=function(){fetch("/nibgate-unlock-key.json?t=1").then(function(_){if(!_.ok)throw new Error;return _.json()}).then(function(_){window._lottieData=_,H(_)}).catch(function(){})},document.head.appendChild(L)}})();let o=r.querySelector("[data-nibgate-status]"),l=r.querySelector("[data-nibgate-wallet-label]"),s=r.querySelector("[data-nibgate-unlock-wrap]"),c=r.querySelector("[data-nibgate-unlock-progress]"),d=r.querySelector("[data-nibgate-shimmer]"),i=r.querySelector("[data-nibgate-unlock]"),m=1500,f=null,u=!1,h=!1,x=q(e,{...n,connectButton:null,unlockButton:null,walletLabel:null,status:"[data-nibgate-status]",unlockedTarget:"[data-nibgate-premium]",onStatus:E=>cn(o,E)});function T(E){return E?E.slice(0,6)+"..."+E.slice(-4):""}function A(){let E=x.getWalletAddress();E?(l.innerHTML=T(E)+' <span data-nibgate-disconnect style="cursor:pointer">\xB7 Disconnect</span>',i.disabled=!1,i.style.cursor="pointer"):(l.textContent="Connect wallet",i.disabled=!0,i.style.cursor="default",i.innerHTML=a+"Hold to pay "+Te(e.price)+" USDC")}function p(E){i.innerHTML=a+E}function g(){u=!1,h=!1,f=null,i.style.transform="scale(1)",c.style.width="0%",d.style.animation="none",d.style.transform="translateX(-100%)",i.disabled||p("Hold to pay "+Te(e.price)+" USDC")}function b(E){if(i.disabled||u)return;E.preventDefault(),u=!0,h=!1,i.style.transform="scale(.97)",c.style.transition="none",c.style.width="0%",d.style.animation="nshimmer 1s ease-in-out infinite",d.style.transform="none",p("Hold\u2026"),requestAnimationFrame(()=>{c.style.transition="width "+m+"ms linear",c.style.width="100%"});let H=setTimeout(()=>{u&&!h&&p("Keep holding\u2026")},m*.4),L=setTimeout(()=>{u&&!h&&p("Almost there\u2026")},m*.75);f=setTimeout(()=>{h=!0,u=!1,clearTimeout(H),clearTimeout(L),i.style.transform="scale(1)",d.style.animation="none",c.style.transition="width .05s linear",p("Processing\u2026"),i.disabled=!0,setTimeout(()=>x.unlock().then(A).catch(A),300)},m)}function k(){!u||h||(clearTimeout(f),g())}l.addEventListener("click",E=>{E.target.dataset.nibgateDisconnect!==void 0?x.disconnect().then(A):x.getWalletAddress()||x.connect().then(A).catch(()=>A())}),s.addEventListener("mousedown",b),s.addEventListener("touchstart",b,{passive:!1}),document.addEventListener("mouseup",k),document.addEventListener("touchend",k),s.addEventListener("mouseleave",k),setTimeout(A,200);let R=()=>{document.removeEventListener("mouseup",k),document.removeEventListener("touchend",k)};return r.addEventListener("remove",R),{...x,element:r,destroy:()=>{R(),r.remove()}}}function pt(t,e,n={}){We();let r=0,a=!1,o=null,l=null,s=V("div",{cls:"nui",style:{animation:"nfade .2s ease-out",textAlign:"center",padding:"28px 0"}}),c=V("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:"4px"}}),d=[];for(let p=1;p<=5;p++){let g=V("button",{type:"button","aria-label":`${p} star${p>1?"s":""}`,"data-star":p,style:{background:"none",border:"none",cursor:"pointer",padding:"4px",fontSize:"31px",lineHeight:"1",color:y.border,transition:"color .12s, transform .12s",borderRadius:"4px",fontFamily:"inherit"}},"\u2606");d.push(g),c.appendChild(g)}let i=V("span",{style:{fontSize:"17px",color:y.muted,marginLeft:"12px"}});i.textContent="No ratings yet",c.appendChild(i);let m=V("div",{style:{fontSize:"17px",color:y.muted,marginTop:"8px",minHeight:"1.4em"}});m.textContent="Tap stars to rate",s.append(c,m),(typeof t=="string"?document.querySelector(t):t)?.appendChild(s);function f(){l&&(clearTimeout(l),l=null),m.textContent=r>0?"":"Tap stars to rate",m.style.color=y.muted}function u(p,g,b){m.textContent=p||"",m.style.color=g||"",b&&(l=setTimeout(f,b))}function h(p){d.forEach((g,b)=>{let k=b<p;g.style.color=k?y.accent:y.border,g.textContent=k?"\u2605":"\u2606",g.style.transform=k?"scale(1.08)":"scale(1)"})}function x(p){u(["","Poor","Below average","Average","Good","Excellent"][p])}async function T(p){if(!(a||!o)){a=!0,d.forEach(g=>{g.disabled=!0,g.style.cursor="default"}),r=p,h(p),u("Submitting\u2026");try{await o.rate({rating:p}),h(p),u("You rated "+p+" \u2605".repeat(p),y.accent,3e3),A()}catch(g){u(g?.message||"Could not save rating. Try again.","#dc2626"),h(r)}finally{a=!1,d.forEach(g=>{g.disabled=!1,g.style.cursor="pointer"})}}}function A(){let p=n.statsUrl||(e.id?`${n.apiBase||"/api"}/rating/${e.id}`:null);p&&fetch(p).then(g=>g.json()).then(g=>{g.count>0?i.textContent=`${g.average.toFixed(1)} \u2014 ${g.count} rating${g.count!==1?"s":""}`:i.textContent="No ratings yet"}).catch(()=>{})}return d.forEach(p=>{let g=parseInt(p.dataset.star);p.addEventListener("mouseenter",()=>{a||(h(g),x(g))}),p.addEventListener("mouseleave",()=>{a||(h(r),f())}),p.addEventListener("click",()=>T(g)),p.addEventListener("keydown",b=>{(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),T(g))})}),Promise.resolve().then(()=>(Ee(),ut)).then(p=>{o=p.createOnchainRating(e,{autoMount:!1,contentId:n.contentId||"0x"+(e.id||"").replace(/-/g,""),onRated:g=>{u("Rating saved",y.accent,3e3),A(),typeof n.onRated=="function"&&n.onRated(g)},onError:g=>{u(g?.message||"Could not save rating. Try again.","#dc2626"),typeof n.onError=="function"&&n.onError(g)}}),A()}).catch(()=>{u("Could not load rating","#dc2626")}),{element:s,destroy:()=>s.remove(),refresh:A,setRating:p=>{r=p,h(p)}}}function gt(t,e={}){We();let n="deposit",r=V("div",{cls:"nui",style:{animation:"nfade .2s ease-out",border:"1px solid "+y.border,borderRadius:"16px",padding:"28px"}});r.innerHTML=`
38
+ `,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r),(function(){if(!document.getElementById("nibgate-lottie"))return;function H(R){var Z=document.getElementById("nibgate-lottie");Z&&window.lottie&&window.lottie.loadAnimation({container:Z,animationData:R,loop:!0,autoplay:!0})}if(window.lottie){window._lottieData?H(window._lottieData):fetch("/nibgate-unlock-key.json?t=1").then(function(R){if(!R.ok)throw new Error;return R.json()}).then(function(R){window._lottieData=R,H(R)}).catch(function(){});return}if(!window._lottieLoading){window._lottieLoading=!0;var z=document.createElement("script");z.src="https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.12.2/lottie.min.js",z.onload=function(){fetch("/nibgate-unlock-key.json?t=1").then(function(R){if(!R.ok)throw new Error;return R.json()}).then(function(R){window._lottieData=R,H(R)}).catch(function(){})},document.head.appendChild(z)}})();let o=r.querySelector("[data-nibgate-status]"),s=r.querySelector("[data-nibgate-wallet-label]"),l=r.querySelector("[data-nibgate-unlock-wrap]"),c=r.querySelector("[data-nibgate-unlock-progress]"),u=r.querySelector("[data-nibgate-shimmer]"),i=r.querySelector("[data-nibgate-unlock]"),b=1500,d=null,m=!1,p=!1,x=W(e,{...n,connectButton:null,unlockButton:null,walletLabel:null,status:"[data-nibgate-status]",unlockedTarget:"[data-nibgate-premium]",onStatus:C=>Yt(o,C)});function T(C){return C?C.slice(0,6)+"..."+C.slice(-4):""}function A(){let C=x.getWalletAddress();C?(s.innerHTML=T(C)+' <span data-nibgate-disconnect style="cursor:pointer">\xB7 Disconnect</span>',i.disabled=!1,i.style.cursor="pointer"):(s.textContent="Connect wallet",i.disabled=!0,i.style.cursor="default",i.innerHTML=a+"Hold to pay "+Se(e.price)+" USDC")}function f(C){i.innerHTML=a+C}function g(){m=!1,p=!1,d=null,i.style.transform="scale(1)",c.style.width="0%",u.style.animation="none",u.style.transform="translateX(-100%)",i.disabled||f("Hold to pay "+Se(e.price)+" USDC")}function h(C){if(i.disabled||m)return;C.preventDefault(),m=!0,p=!1,i.style.transform="scale(.97)",c.style.transition="none",c.style.width="0%",u.style.animation="nshimmer 1s ease-in-out infinite",u.style.transform="none",f("Hold\u2026"),requestAnimationFrame(()=>{c.style.transition="width "+b+"ms linear",c.style.width="100%"});let H=setTimeout(()=>{m&&!p&&f("Keep holding\u2026")},b*.4),z=setTimeout(()=>{m&&!p&&f("Almost there\u2026")},b*.75);d=setTimeout(()=>{p=!0,m=!1,clearTimeout(H),clearTimeout(z),i.style.transform="scale(1)",u.style.animation="none",c.style.transition="width .05s linear",f("Processing\u2026"),i.disabled=!0,setTimeout(()=>x.unlock().then(A).catch(A),300)},b)}function k(){!m||p||(clearTimeout(d),g())}s.addEventListener("click",C=>{C.target.dataset.nibgateDisconnect!==void 0?x.disconnect().then(A):x.getWalletAddress()||x.connect().then(A).catch(()=>A())}),l.addEventListener("mousedown",h),l.addEventListener("touchstart",h,{passive:!1}),document.addEventListener("mouseup",k),document.addEventListener("touchend",k),l.addEventListener("mouseleave",k),setTimeout(A,200);let P=()=>{document.removeEventListener("mouseup",k),document.removeEventListener("touchend",k)};return r.addEventListener("remove",P),{...x,element:r,destroy:()=>{P(),r.remove()}}}function lt(t,e,n={}){Oe();let r=0,a=!1,o=null,s=null,l=j("div",{cls:"nui",style:{animation:"nfade .2s ease-out",textAlign:"center",padding:"28px 0"}}),c=j("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:"4px"}}),u=[];for(let f=1;f<=5;f++){let g=j("button",{type:"button","aria-label":`${f} star${f>1?"s":""}`,"data-star":f,style:{background:"none",border:"none",cursor:"pointer",padding:"4px",fontSize:"31px",lineHeight:"1",color:y.border,transition:"color .12s, transform .12s",borderRadius:"4px",fontFamily:"inherit"}},"\u2606");u.push(g),c.appendChild(g)}let i=j("span",{style:{fontSize:"17px",color:y.muted,marginLeft:"12px"}});i.textContent="No ratings yet",c.appendChild(i);let b=j("div",{style:{fontSize:"17px",color:y.muted,marginTop:"8px",minHeight:"1.4em"}});b.textContent="Tap stars to rate",l.append(c,b),(typeof t=="string"?document.querySelector(t):t)?.appendChild(l);function d(){s&&(clearTimeout(s),s=null),b.textContent=r>0?"":"Tap stars to rate",b.style.color=y.muted}function m(f,g,h){b.textContent=f||"",b.style.color=g||"",h&&(s=setTimeout(d,h))}function p(f){u.forEach((g,h)=>{let k=h<f;g.style.color=k?y.accent:y.border,g.textContent=k?"\u2605":"\u2606",g.style.transform=k?"scale(1.08)":"scale(1)"})}function x(f){m(["","Poor","Below average","Average","Good","Excellent"][f])}async function T(f){if(!(a||!o)){a=!0,u.forEach(g=>{g.disabled=!0,g.style.cursor="default"}),r=f,p(f),m("Submitting\u2026");try{await o.rate({rating:f}),p(f),m("You rated "+f+" \u2605".repeat(f),y.accent,3e3),A()}catch(g){m(g?.message||"Could not save rating. Try again.","#dc2626"),p(r)}finally{a=!1,u.forEach(g=>{g.disabled=!1,g.style.cursor="pointer"})}}}function A(){let f=n.statsUrl||(e.id?`${n.apiBase||"/api"}/rating/${e.id}`:null);f&&fetch(f).then(g=>g.json()).then(g=>{g.count>0?i.textContent=`${g.average.toFixed(1)} \u2014 ${g.count} rating${g.count!==1?"s":""}`:i.textContent="No ratings yet"}).catch(()=>{})}return u.forEach(f=>{let g=parseInt(f.dataset.star);f.addEventListener("mouseenter",()=>{a||(p(g),x(g))}),f.addEventListener("mouseleave",()=>{a||(p(r),d())}),f.addEventListener("click",()=>T(g)),f.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),T(g))})}),Promise.resolve().then(()=>(ke(),ct)).then(f=>{o=f.createOnchainRating(e,{autoMount:!1,contentId:n.contentId||"0x"+(e.id||"").replace(/-/g,""),onRated:g=>{m("Rating saved",y.accent,3e3),A(),typeof n.onRated=="function"&&n.onRated(g)},onError:g=>{m(g?.message||"Could not save rating. Try again.","#dc2626"),typeof n.onError=="function"&&n.onError(g)}}),A()}).catch(()=>{m("Could not load rating","#dc2626")}),{element:l,destroy:()=>l.remove(),refresh:A,setRating:f=>{r=f,p(f)}}}function dt(t,e={}){Oe();let n="deposit",r=j("div",{cls:"nui",style:{animation:"nfade .2s ease-out",border:"1px solid "+y.border,borderRadius:"16px",padding:"28px"}});r.innerHTML=`
39
39
  <div style="display:flex;gap:12px;margin-bottom:20px">
40
40
  <div data-gw-wallet-card style="flex:1;background:${y.bg};border:1px solid ${y.border};border-radius:12px;padding:16px">
41
41
  <div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:4px">
@@ -54,7 +54,7 @@ var Nibgate=(()=>{var kt=Object.create;var de=Object.defineProperty;var vt=Objec
54
54
  <button data-tab="withdraw" style="flex:1;padding:10px 0;font-size:15px;font-weight:600;cursor:pointer;border:none;background:transparent;color:${y.muted};border-bottom:2px solid transparent;font-family:inherit">Withdraw</button>
55
55
  </div>
56
56
  <div data-gw-form></div>
57
- `,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r);let a=r.querySelector("[data-gw-form]"),o=r.querySelectorAll("[data-tab]");function l(c,d){c.forEach(i=>{let m=i.dataset.tab===d;i.style.color=m?y.fg:y.muted,i.style.borderBottomColor=m?y.accent:"transparent"})}function s(c){n=c,l(o,c),c==="deposit"?a.innerHTML=`
57
+ `,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r);let a=r.querySelector("[data-gw-form]"),o=r.querySelectorAll("[data-tab]");function s(c,u){c.forEach(i=>{let b=i.dataset.tab===u;i.style.color=b?y.fg:y.muted,i.style.borderBottomColor=b?y.accent:"transparent"})}function l(c){n=c,s(o,c),c==="deposit"?a.innerHTML=`
58
58
  <label class="nui-label">Amount (USDC)</label>
59
59
  <input type="number" step="0.01" min="0" placeholder="0.00" data-gw-deposit-amount class="nui-input" style="margin-bottom:16px">
60
60
  <button type="button" data-gw-deposit class="nui-btn nui-btn-primary" style="width:100%;padding:16px 28px;font-size:20px">Deposit</button>
@@ -64,5 +64,5 @@ var Nibgate=(()=>{var kt=Object.create;var de=Object.defineProperty;var vt=Objec
64
64
  <input type="number" step="0.01" min="0" placeholder="0.00" data-gw-withdraw-amount class="nui-input" style="margin-bottom:16px">
65
65
  <button type="button" data-gw-withdraw class="nui-btn nui-btn-primary" style="width:100%;padding:16px 28px;font-size:20px">Withdraw to your wallet</button>
66
66
  <div data-gw-tx class="nui-mono" style="font-size:12px;color:${y.muted};word-break:break-all;margin-top:12px;display:none"></div>
67
- `}return s("deposit"),o.forEach(c=>c.addEventListener("click",()=>s(c.dataset.tab))),{element:r,destroy:()=>r.remove(),switchTab:s}}I();me();I();var yt=[{name:"publishToNibgate",label:"Publish to Nibgate discovery",type:"boolean",defaultValue:!0},{name:"type",label:"Content type",type:"select",options:F,defaultValue:"article"},{name:"humanAccess",label:"Human access",type:"select",options:Y,defaultValue:"paid"},{name:"agentAccess",label:"Agent access",type:"select",options:Y,defaultValue:"paid"},{name:"unlockMode",label:"Unlock mode",type:"select",options:te,defaultValue:"one_time"},{name:"paymentRail",label:"Payment rail",type:"select",options:ee,defaultValue:"gateway"},{name:"price",label:"Price",type:"text",defaultValue:"0.005"},{name:"currency",label:"Currency",type:"text",defaultValue:"USDC"},{name:"recipient",label:"Recipient wallet",type:"wallet",defaultValue:""},{name:"ratingsEnabled",label:"Enable ratings",type:"boolean",defaultValue:!0},{name:"license",label:"License / terms",type:"textarea",defaultValue:""}];function ht(t={}){let e=$(t.access||{humans:t.humanAccess,agents:t.agentAccess}),n=J(t.unlock||t.unlockMode||"one_time");return{publishToNibgate:t.publishToNibgate??t.publishedToNibgate??!0,type:O(t.type||t.contentType||"article"),humanAccess:e.humans,agentAccess:e.agents,unlockMode:n.mode,paymentRail:j(t.paymentRail||t.paymentMode||t.rail),price:String(t.price??t.amount??"0.005"),currency:t.currency||"USDC",recipient:t.recipient||t.payTo||t.receiverAddress||t.creatorWallet||"",ratingsEnabled:t.ratingsEnabled??t.enableRatings??t.reputation?.ratingsEnabled??!0,license:t.license||t.terms||""}}function bt(t={}){return $({humans:t.humanAccess,agents:t.agentAccess})}function wt(t={}){return J(t.unlockMode||t.unlock||"one_time")}me();return _t(sn);})();
67
+ `}return l("deposit"),o.forEach(c=>c.addEventListener("click",()=>l(c.dataset.tab))),{element:r,destroy:()=>r.remove(),switchTab:l}}I();le();I();var mt=[{name:"publishToNibgate",label:"Publish to Nibgate discovery",type:"boolean",defaultValue:!0},{name:"type",label:"Content type",type:"select",options:F,defaultValue:"article"},{name:"humanAccess",label:"Human access",type:"select",options:Y,defaultValue:"paid"},{name:"agentAccess",label:"Agent access",type:"select",options:Y,defaultValue:"paid"},{name:"unlockMode",label:"Unlock mode",type:"select",options:te,defaultValue:"one_time"},{name:"paymentRail",label:"Payment rail",type:"select",options:ee,defaultValue:"gateway"},{name:"price",label:"Price",type:"text",defaultValue:"0.005"},{name:"currency",label:"Currency",type:"text",defaultValue:"USDC"},{name:"recipient",label:"Recipient wallet",type:"wallet",defaultValue:""},{name:"ratingsEnabled",label:"Enable ratings",type:"boolean",defaultValue:!0},{name:"license",label:"License / terms",type:"textarea",defaultValue:""}];function ft(t={}){let e=O(t.access||{humans:t.humanAccess,agents:t.agentAccess}),n=J(t.unlock||t.unlockMode||"one_time");return{publishToNibgate:t.publishToNibgate??t.publishedToNibgate??!0,type:D(t.type||t.contentType||"article"),humanAccess:e.humans,agentAccess:e.agents,unlockMode:n.mode,paymentRail:V(t.paymentRail||t.paymentMode||t.rail),price:String(t.price??t.amount??"0.005"),currency:t.currency||"USDC",recipient:t.recipient||t.payTo||t.receiverAddress||t.creatorWallet||"",ratingsEnabled:t.ratingsEnabled??t.enableRatings??t.reputation?.ratingsEnabled??!0,license:t.license||t.terms||""}}function pt(t={}){return O({humans:t.humanAccess,agents:t.agentAccess})}function gt(t={}){return J(t.unlockMode||t.unlock||"one_time")}le();return vt(Jt);})();
68
68
  //# sourceMappingURL=nibgate.min.js.map