@nibgate/sdk 0.2.13 → 0.2.15
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/nibgate.js +3 -172
- package/dist/nibgate.js.map +4 -4
- package/dist/nibgate.min.js +33 -33
- package/dist/nibgate.min.js.map +4 -4
- package/package.json +1 -1
- package/src/browser/gateway.js +2 -11
package/dist/nibgate.min.js
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
var Nibgate=(()=>{var
|
|
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),i={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(i,n,a),m={x402Version:e,payload:{authorization:i,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{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 i=Array.isArray(s?.accepts)?s.accepts:[],d=i.find(c=>{let m=c.extra||{};return c.network===a&&m.name==="GatewayWalletBatched"&&m.version==="1"&&typeof m.verifyingContract=="string"})||i.find(c=>{let m=c.extra||{};return m.name==="GatewayWalletBatched"&&m.version==="1"&&typeof m.verifyingContract=="string"});if(!d){let c=i.map(f=>f.network).filter(Boolean).join(", ")||"none",m=i.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: ${c}.`:`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:i}){let d=o(s||i),c=l(d),m=d.x402Version??2,f=await r.createPaymentPayload(m,c),u=Yt({...f,resource:d.resource,accepted:c});return{paymentSignature:u,signature:u,metadata:{paymentProvider:"circle-gateway",network:c.network,payer:e.address,recipient:c.payTo||c.recipient,amount:c.amount,currency:c.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 i=await an(n,e),d=i.contentHash||i.contentId||De(n,e),c=e.reviewHash||He,m=String(e.unlockRef||e.paymentId||e.txHash||""),f=rn({contentId:d,ratingValue:r.ratingValue,reviewHash:c,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:c,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:c}}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]",i=(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",c=!1,m=e.payment||null;function f(b){typeof e.onStatus=="function"&&e.onStatus(b),a&&(a.textContent=b||"")}function u(b){c=!!b,i.forEach(k=>{k&&"disabled"in k&&(k.disabled=c)})}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 i.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 i=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",()=>{i.forEach((h,x)=>h.style.color=x<f?"#f5b342":"#ccc")}),u.addEventListener("mouseleave",()=>{i.forEach((h,x)=>h.style.color=x<l?"#f5b342":"#ccc")}),u.addEventListener("click",()=>{l=f,i.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 c(f,u={}){return n.rate({...u,rating:f})}function m(f){l=f,i.forEach((u,h)=>u.style.color=h<f?"#f5b342":"#ccc")}return{resource:n.resource,container:s,setRating:m,rate:c}}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 i=await re(t,e);return i.ok&&e.retryAfterPay!==!1?N(t,{...e,autoPay:!1}):i}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 i=await fetch(r,{method:e.method||"GET",headers:{accept:"application/json","payment-signature":o,...l?{"payment-memo":l}:{},...e.headers||{}}}),d=await i.text(),c={};try{c=d?JSON.parse(d):{}}catch{c={error:d||"Payment verification failed"}}if(!i.ok){let f=c.detail||c.reason||c.invalidReason||c.error||d||"Payment verification failed",u=typeof f=="string"?f:K(f);return n.track("payment_failed",{source:e.source,status:i.status,error:u,...s}),a(e.paymentErrorMessage||u),{ok:!1,status:i.status,error:u,payload:c,resource:n.resource,response:i}}let m=c.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,c.unlockProof),n.markUnlocked(m),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:i.status,payload:c,payment:m,resource:n.resource,response:i}}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:c=>$t(o,c),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 i(c={}){Qe(a,!0);try{return await N(n,{...e,...c,accessPath:r,createPaymentSignature:s,onStatus:l})}finally{Qe(a,!1)}}function d(){let c=v();if(!c||!a)return{unlock:i};let m=typeof a=="string"?c.document.querySelector(a):a;return m&&m.addEventListener("click",()=>i().catch(f=>l(f.message||"Checkout failed."))),{unlock:i}}return{resource:n,unlock:i,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,i=typeof e.connectButton=="string"?r?.document.querySelector(e.connectButton):e.connectButton,d=typeof e.disconnectButton=="string"?r?.document.querySelector(e.disconnectButton):e.disconnectButton,c=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,[i,d,c,m].forEach(C=>{C&&"disabled"in C&&(C.disabled=x||C===i&&!p()||C===d&&!h)})}function b(){let w=!!p();f&&(f.textContent=h?A(h):w?"Ready to connect":"No wallet detected"),i&&(i.textContent=h?"Connected":"Connect wallet"),d&&(d.textContent="Disconnect"),i&&"disabled"in i&&(i.disabled=x||!w),d&&"disabled"in d&&(d.disabled=x||!h)}function k(w,C={}){c&&(c.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 i?.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."))),c?.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",i=e.network||a.challenge?.accepts?.[0]?.network||"eip155:5042002",d=await r({resource:n,recipient:o,amount:l,currency:s,network:i,challenge:a.challenge}),c=d?.txHash||d?.hash||d?.transactionHash||d?.paymentId||"";if(!c)throw new Error("Transfer checkout did not return a txHash.");return{paymentSignature:c,signature:c,memo:d.memo||"",metadata:{paymentProvider:"direct-transfer",paymentId:c,txHash:c,recipient:o,amount:Number(l),currency:s,network:i,...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 Se=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var ht=Object.prototype.hasOwnProperty;var bt=(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 Ee=(t,e)=>{for(var n in e)Se(t,n,{get:e[n],enumerable:!0})},wt=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of yt(e))!ht.call(t,a)&&a!==n&&Se(t,a,{get:()=>e[a],enumerable:!(r=gt(e,a))||r.enumerable});return t};var xt=t=>wt(Se({},"__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,ue=U(()=>{ee=["gateway","transfer"]});function D(t){let e=String(t||"").trim().toLowerCase();return F.includes(e)?e:kt[e]||"article"}function Ce(t,e="paid"){let n=String(t||"").trim().toLowerCase();return Y.includes(n)?n:e}function O(t={}){if(typeof t=="string"){let e=Ce(t);return{humans:e,agents:e}}return{humans:Ce(t.humans||t.human||t.default,"paid"),agents:Ce(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 L(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 vt(t){let e=Re();if(!(!e||!t))return`${e.location.origin}${t.startsWith("/")?t:"/"+t}`}function St(){return L("og:image")||void 0}function Et(){return L("og:description")||L("description")||void 0}function Ct(){let t=Re();return L("og:title")||L("twitter:title")||(t?t.document.title:"")||void 0}function Tt(){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 Rt(){let t=L("keywords");if(t)return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).slice(0,8)}function At(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||vt(d)||void 0,y=e.access,x=e.price??e.amount??"";return{...b,id:String(e.id||e.contentId||e.slug||"").trim(),title:String(e.title||e.name||Ct()||"Untitled").trim(),type:D(e.type||e.contentType||Tt()),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||St()||void 0,description:e.description||e.summary||Et()||void 0,tags:e.tags||Rt()||void 0,access:At(x,y),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 Te(t){return Array.isArray(t)?t.length>0:t!=null&&String(t).trim()!==""}function Pt(t={}){let e=O(t.access);return e.humans==="paid"||e.agents==="paid"||Number.parseFloat(t.price||t.amount||"0")>0}function le(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)Te(n[c])||a.push(`Missing required content metadata: ${c}`);for(let c of s)Te(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."),Pt(n)&&(Te(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,kt,Y,te,I=U(()=>{ue();F=["music","video","article","image"],kt={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 _t(t,e){let n=v();return n?(n.__nibgateClientQueue=n.__nibgateClientQueue||[],n.__nibgateClientQueue.push({eventName:t,payload:e}),!0):!1}function de(){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 It(){let t=v();if(!t||t.__nibgateClientFlushStarted)return;t.__nibgateClientFlushStarted=!0;let e=0,n=t.setInterval(()=>{e+=1,de(),(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),de(),!0):(_t(t,e),It(),!1):!1}function B(t,e={}){return{...e,resource:S(t)}}var Q=U(()=>{q();I()});function Ae(t){return`nibgate:unlock:${t.id||t.path||t.url||"content"}`}function Pe(t){return`nibgate:payment-proof:${t.id||t.path||t.url||"content"}`}function me(t,e={}){let n=v();if(!n)return!1;try{return n.localStorage.setItem(Ae(t),JSON.stringify({unlockedAt:new Date().toISOString(),payment:e})),!0}catch{return!1}}function _e(t,e){let n=v();if(!n||!e)return!1;try{let r=typeof e=="string"?e:JSON.stringify(e);return n.localStorage.setItem(Pe(t),r),!0}catch{return!1}}function Ie(t){let e=v();if(!e)return"";try{return e.localStorage.getItem(Pe(t))||""}catch{return""}}function qe(t){let e=S(t),n=v();if(!n)return!1;try{return n.localStorage.removeItem(Pe(e)),n.localStorage.removeItem(Ae(e)),!0}catch{return!1}}function Ge(t){let e=v();if(!e)return!1;try{return!!e.localStorage.getItem(Ae(t))}catch{return!1}}var fe=U(()=>{q();I()});function je(t){We=t}function _(t,e={}){let n=S(t),r=e.client||We;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 me(n,a),r.unlockCompleted(n,a)},paymentCompleted(a={}){return r.paymentCompleted(n,a)},isUnlocked(){return Ge(n)},markUnlocked(a={}){return me(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 me(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 We,$=U(()=>{I();Q();fe();We=null});function Nt(t,e){return typeof e=="bigint"?e.toString():e}function K(t){return JSON.stringify(t,Nt)}var pe=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 he(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 be=U(()=>{I()});var Ye={};Ee(Ye,{createCircleGatewayBrowserAdapter:()=>Ht});function Ut(t){let e=typeof t=="string"?t:K(t);return typeof Buffer<"u"?Buffer.from(e).toString("base64"):btoa(unescape(encodeURIComponent(e)))}function Bt(t){return typeof Buffer<"u"?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}async function Ht(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 Fe.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(Bt(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=Ut({...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 Fe,Je=U(()=>{Fe=bt("@circle-fin/x402-batching/client");pe()});function Dt(t=""){return String(t||"").replace(/^0x/i,"").replace(/[^0-9a-fA-F]/g,"").toLowerCase()}function Ke(t=""){let e=Dt(t);if(e.length>64)throw new Error("ABI word is too long.");return e.padEnd(64,"0")}function Ne(t=0){return Number(t||0).toString(16).padStart(64,"0")}function Ot(t=""){return Array.from(new TextEncoder().encode(String(t||""))).map(e=>e.toString(16).padStart(2,"0")).join("")}function qt(t=""){let e=Ot(t),n=e.length/2,r=Math.ceil(n/32)*64;return Ne(n)+e.padEnd(r,"0")}function Gt({contentId:t,ratingValue:e,reviewHash:n,unlockRef:r}){return Lt+Ke(t)+Ne(e)+Ke(n||Me)+Ne(128)+qt(r||"")}function Be(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 rt(t=""){if(!t)return Me;throw new Error("Text review hashing is not available in direct-browser mode. Pass reviewHash from your app/backend.")}async function Wt(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 we(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||Ue;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 Wt(n,e),u=c.contentHash||c.contentId||Be(n,e),i=e.reviewHash||Me,b=String(e.unlockRef||e.paymentId||e.txHash||""),d=Gt({contentId:u,ratingValue:r.ratingValue,reviewHash:i,unlockRef:b}),m=await a.request({method:"eth_sendTransaction",params:[{from:l,to:o,data:d}]}),y=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",y),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 Lt,Me,Xe,Ze,et,tt,Ue,nt,He=U(()=>{be();I();Q();Lt="0xc62fad09",Me=`0x${"0".repeat(64)}`,Xe="nibgate:content:v1",Ze=5042002,et="Arc Testnet",tt="https://rpc.testnet.arc.io",Ue="0x9f27fd62e75f86a3c7addfdba443aab1f930e281",nt=[{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 at={};Ee(at,{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||he(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 y(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 R(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),E=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 we(n.resource,{...e,...h,rating:k,paymentId:P,unlockRef:E,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",()=>R({rating:T(h)}).catch(()=>null))}),e.visible!==void 0&&x(!!e.visible),p}let p={resource:n.resource,rate:R,mount:f,setPayment:y,setVisible:x};return e.autoMount!==!1&&f(),p}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((y,x)=>y.style.color=x<d?"#f5b342":"#ccc")}),m.addEventListener("mouseleave",()=>{c.forEach((y,x)=>y.style.color=x<s?"#f5b342":"#ccc")}),m.addEventListener("click",()=>{s=d,c.forEach((y,x)=>y.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,y)=>m.style.color=y<d?"#f5b342":"#ccc")}return{resource:n.resource,container:l,setRating:b,rate:i}}var xe=U(()=>{I();be();Q();q();He();$()});var Ft={};Ee(Ft,{ACCESS_MODES:()=>Y,CONTENT_TYPES:()=>F,NIBGATE_CONTENT_HASH_NAMESPACE:()=>Xe,NIBGATE_CONTENT_SETTING_FIELDS:()=>lt,NIBGATE_REPUTATION_ABI:()=>nt,NIBGATE_REPUTATION_CHAIN_ID:()=>Ze,NIBGATE_REPUTATION_CHAIN_NAME:()=>et,NIBGATE_REPUTATION_CONTRACT:()=>Ue,NIBGATE_REPUTATION_RPC_URL:()=>tt,PAYMENT_RAILS:()=>ee,UNLOCK_MODES:()=>te,checkResourceAccess:()=>N,contentRatingHash:()=>Be,createCircleGatewayBrowserAdapter:()=>oe,createEvmGatewayUnlock:()=>W,createGate:()=>_,createHostedUnlock:()=>Qe,createNibgate:()=>ze,createNibgateContentSettings:()=>dt,createOnchainRating:()=>ce,createTransferCheckout:()=>se,createWalletCheckout:()=>ye,mountRatingUI:()=>ie,nibgate:()=>$e,normalizeAccessPolicy:()=>O,normalizeContentType:()=>D,normalizePaymentRail:()=>V,normalizeResource:()=>S,normalizeUnlockPolicy:()=>J,payAndUnlockResource:()=>re,payWithPaymentSignature:()=>ne,payWithTransfer:()=>ke,rateContentOnchain:()=>we,rateResource:()=>X,renderDefaultGatewayWalletUI:()=>ut,renderDefaultRatingUI:()=>st,renderDefaultUnlockUI:()=>it,reviewTextHash:()=>rt,settingsToAccessPolicy:()=>mt,settingsToUnlockPolicy:()=>ft,setupResourcePage:()=>ge,trackResourcePage:()=>G,validateResourceMetadata:()=>le});$();Q();fe();pe();$();I();q();$();function G(t,e={}){let n=_(t,e.gateOptions||{}),r=le(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 ge(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",...Ie(n.resource)?{"x-nibgate-payment-proof":Ie(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 _e(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 _e(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 Mt(t,e){let n=v();if(!t||!n)return;let r=typeof t=="string"?n.document.querySelector(t):t;r&&(r.textContent=e||"")}function Ve(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 ye(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=>Mt(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={}){Ve(a,!0);try{return await N(n,{...e,...i,accessPath:r,createPaymentSignature:l,onStatus:s})}finally{Ve(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();be();Q();$();$();q();fe();pe();$();async function oe(t={}){return(await Promise.resolve().then(()=>(Je(),Ye))).createCircleGatewayBrowserAdapter(t)}var zt="https://api.nibgate.xyz/api/hub/pay";function $t(t,e){return e.hosted||e.accessPath==="hosted"?zt:e.accessPath||t.accessPath||"/api/nibgate/access"}function W(t,e={}){let n=_(t,e.gateOptions||{}),r=v(),a=$t(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,y="",x=!1;function T(w){typeof e.onStatus=="function"&&e.onStatus(w),l&&(l.textContent=w||"")}function R(w){return w?`${w.slice(0,6)}...${w.slice(-4)}`:""}function f(){return r?.ethereum||e.provider||null}function p(w){x=!!w,[c,u,i,b].forEach(C=>{C&&"disabled"in C&&(C.disabled=x||C===c&&!f()||C===u&&!y)})}function h(){let w=!!f();d&&(d.textContent=y?R(y):w?"Ready to connect":"No wallet detected"),c&&(c.textContent=y?"Connected":"Connect wallet"),u&&(u.textContent="Disconnect"),c&&"disabled"in c&&(c.disabled=x||!w),u&&"disabled"in u&&(u.disabled=x||!y)}function k(w,C={}){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(C)}async function P(){p(!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 C=await w.request({method:"eth_requestAccounts"});if(y=Array.isArray(C)&&C[0]||"",!y)throw new Error("No wallet account selected.");return h(),T("Wallet connected. You can unlock now."),y}finally{p(!1)}}async function E(){p(!0);try{let w=f();if(w?.request&&y)try{await w.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}return y="",h(),T(e.disconnectMessage||"Wallet disconnected for this page."),!0}finally{p(!1)}}async function H(w){let C=f();if(!C)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");return y||await P(),(await oe({network:s,signer:{address:y,signTypedData:pt=>C.request({method:"eth_signTypedData_v4",params:[y,K(pt)]})},clientModule:e.circleClientModule})).pay(w)}async function z(){p(!0);try{y||await P(),p(!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{p(!1),h()}}function A(){qe(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 C=w?await w.request({method:"eth_accounts"}):[];y=Array.isArray(C)&&C[0]||""}catch{}h(),k(!1)}function De(){return c?.addEventListener?.("click",()=>P().catch(w=>T(w?.message||"Could not connect wallet."))),u?.addEventListener?.("click",()=>E().catch(w=>T(w?.message||"Could not disconnect wallet."))),i?.addEventListener?.("click",()=>z()),b?.addEventListener?.("click",A),Z(),G(n.resource,{source:o}),Oe}let Oe={resource:n.resource,connect:P,disconnect:E,unlock:z,clear:A,hydrate:Z,mount:De,getWalletAddress:()=>y};return e.autoMount!==!1&&De(),Oe}function Qe(t,e={}){return W(t,{...e,hosted:!0,noWalletMessage:e.noWalletMessage||"Install MetaMask or another EVM wallet to unlock premium content."})}xe();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 ke(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 ze(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 he(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 ye(n(r),a)},createCircleGatewayBrowserAdapter(r={}){return oe(r)},createTransferCheckout(r,a={}){return se(n(r),a)},payWithTransfer(r,a={}){return ke(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 ge(n(r),a)},normalizeResource:n,normalizeContentType:D,flush:de}}var $e=ze();je($e);xe();He();var ot="nibgate-ui-styles",g={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)"},jt=t=>Object.entries(t).map(([e,n])=>`${e.replace(/[A-Z]/g,r=>"-"+r.toLowerCase())}:${n}`).join(";");function ct(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=jt(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 Le(){if(document.getElementById(ot))return;let t=ct("style",{id:ot},`
|
|
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%) } }
|
|
6
6
|
|
|
7
|
-
.nui { font-family:var(--font-content,'Kumbh Sans','ABC Favorit',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif);color:${
|
|
7
|
+
.nui { font-family:var(--font-content,'Kumbh Sans','ABC Favorit',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif);color:${g.fg};line-height:1.5;-webkit-font-smoothing:antialiased;font-size:19px }
|
|
8
8
|
.nui *,.nui *::before,.nui *::after { box-sizing:border-box }
|
|
9
9
|
.nui-btn { display:flex;align-items:center;justify-content:center;gap:8px;font-size:18px;font-weight:600;padding:14px 28px;border-radius:12px;cursor:pointer;transition:all.12s;font-family:inherit;line-height:1;border:none }
|
|
10
10
|
.nui-btn:disabled { opacity:0.35;cursor:default;pointer-events:none }
|
|
11
|
-
.nui-btn:focus-visible { outline:2px solid ${
|
|
12
|
-
.nui-btn-primary { background:${
|
|
11
|
+
.nui-btn:focus-visible { outline:2px solid ${g.accent};outline-offset:2px }
|
|
12
|
+
.nui-btn-primary { background:${g.accent};color:${g.bg} }
|
|
13
13
|
.nui-btn-primary:hover:not(:disabled) { opacity:0.9 }
|
|
14
14
|
.nui-btn-primary:active:not(:disabled) { transform:scale(.98) }
|
|
15
|
-
.nui-btn-outline { background:transparent;border:1px solid ${
|
|
16
|
-
.nui-btn-outline:hover:not(:disabled) { border-color:${
|
|
17
|
-
.nui-input { padding:14px 16px;font-size:18px;border-radius:12px;border:1px solid ${
|
|
18
|
-
.nui-input:focus { border-color:${
|
|
19
|
-
.nui-input::placeholder { color:${
|
|
20
|
-
.nui-label { font-size:17px;font-weight:600;color:${
|
|
15
|
+
.nui-btn-outline { background:transparent;border:1px solid ${g.border};color:${g.fg} }
|
|
16
|
+
.nui-btn-outline:hover:not(:disabled) { border-color:${g.accent};color:${g.accent} }
|
|
17
|
+
.nui-input { padding:14px 16px;font-size:18px;border-radius:12px;border:1px solid ${g.border};background:transparent;color:${g.fg};width:100%;font-family:inherit;outline:none;transition:border-color.12s }
|
|
18
|
+
.nui-input:focus { border-color:${g.accent} }
|
|
19
|
+
.nui-input::placeholder { color:${g.muted} }
|
|
20
|
+
.nui-label { font-size:17px;font-weight:600;color:${g.muted};margin-bottom:8px;display:block }
|
|
21
21
|
.nui-mono { font-family:ui-monospace,SFMono-Regular,'SF Mono',Menlo,Consolas,monospace }
|
|
22
|
-
.nui-stat { font-size:18px;color:${
|
|
22
|
+
.nui-stat { font-size:18px;color:${g.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
|
|
25
|
+
`);document.head.appendChild(t)}function j(t,e,n){return ct(t,e,n)}function Vt(t,e){t&&(t.textContent=e||"")}function ve(t){let e=document.createElement("div");return e.textContent=String(t??""),e.innerHTML}function it(t,e,n={}){Le();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:${
|
|
29
|
-
<div style="font-size:21px;color:${
|
|
30
|
-
<div data-nibgate-wallet-label class="nui-mono" style="font-size:18px;color:${
|
|
28
|
+
<div style="font-size:50px;font-weight:700;letter-spacing:-.03em;color:${g.fg};margin-bottom:12px">${ve(e.price)} USDC</div>
|
|
29
|
+
<div style="font-size:21px;color:${g.muted};margin-bottom:48px">Pay to unlock this content</div>
|
|
30
|
+
<div data-nibgate-wallet-label class="nui-mono" style="font-size:18px;color:${g.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:${
|
|
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:${g.accent};transition:transform .1s,opacity .15s;display:flex">${a}Hold to pay ${ve(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
|
-
<div data-nibgate-premium hidden style="margin-top:32px;border-top:1px solid ${
|
|
38
|
-
`,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r),(function(){if(!document.getElementById("nibgate-lottie"))return;function H(
|
|
37
|
+
<div data-nibgate-premium hidden style="margin-top:32px;border-top:1px solid ${g.border};padding-top:32px"></div>
|
|
38
|
+
`,(typeof t=="string"?document.querySelector(t):t)?.appendChild(r),(function(){if(!document.getElementById("nibgate-lottie"))return;function H(A){var Z=document.getElementById("nibgate-lottie");Z&&window.lottie&&window.lottie.loadAnimation({container:Z,animationData:A,loop:!0,autoplay:!0})}if(window.lottie){window._lottieData?H(window._lottieData):fetch("/nibgate-unlock-key.json?t=1").then(function(A){if(!A.ok)throw new Error;return A.json()}).then(function(A){window._lottieData=A,H(A)}).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(A){if(!A.ok)throw new Error;return A.json()}).then(function(A){window._lottieData=A,H(A)}).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,y=!1,x=W(e,{...n,connectButton:null,unlockButton:null,walletLabel:null,status:"[data-nibgate-status]",unlockedTarget:"[data-nibgate-premium]",onStatus:E=>Vt(o,E)});function T(E){return E?E.slice(0,6)+"..."+E.slice(-4):""}function R(){let E=x.getWalletAddress();E?(s.innerHTML=T(E)+' <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 "+ve(e.price)+" USDC")}function f(E){i.innerHTML=a+E}function p(){m=!1,y=!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 "+ve(e.price)+" USDC")}function h(E){if(i.disabled||m)return;E.preventDefault(),m=!0,y=!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&&!y&&f("Keep holding\u2026")},b*.4),z=setTimeout(()=>{m&&!y&&f("Almost there\u2026")},b*.75);d=setTimeout(()=>{y=!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(R).catch(R),300)},b)}function k(){!m||y||(clearTimeout(d),p())}s.addEventListener("click",E=>{E.target.dataset.nibgateDisconnect!==void 0?x.disconnect().then(R):x.getWalletAddress()||x.connect().then(R).catch(()=>R())}),l.addEventListener("mousedown",h),l.addEventListener("touchstart",h,{passive:!1}),document.addEventListener("mouseup",k),document.addEventListener("touchend",k),l.addEventListener("mouseleave",k),setTimeout(R,200);let P=()=>{document.removeEventListener("mouseup",k),document.removeEventListener("touchend",k)};return r.addEventListener("remove",P),{...x,element:r,destroy:()=>{P(),r.remove()}}}function st(t,e,n={}){Le();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 p=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:g.border,transition:"color .12s, transform .12s",borderRadius:"4px",fontFamily:"inherit"}},"\u2606");u.push(p),c.appendChild(p)}let i=j("span",{style:{fontSize:"17px",color:g.muted,marginLeft:"12px"}});i.textContent="No ratings yet",c.appendChild(i);let b=j("div",{style:{fontSize:"17px",color:g.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=g.muted}function m(f,p,h){b.textContent=f||"",b.style.color=p||"",h&&(s=setTimeout(d,h))}function y(f){u.forEach((p,h)=>{let k=h<f;p.style.color=k?g.accent:g.border,p.textContent=k?"\u2605":"\u2606",p.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(p=>{p.disabled=!0,p.style.cursor="default"}),r=f,y(f),m("Submitting\u2026");try{await o.rate({rating:f}),y(f),m("You rated "+f+" \u2605".repeat(f),g.accent,3e3),R()}catch(p){m(p?.message||"Could not save rating. Try again.","#dc2626"),y(r)}finally{a=!1,u.forEach(p=>{p.disabled=!1,p.style.cursor="pointer"})}}}function R(){let f=n.statsUrl||(e.id?`${n.apiBase||"/api"}/rating/${e.id}`:null);f&&fetch(f).then(p=>p.json()).then(p=>{p.count>0?i.textContent=`${p.average.toFixed(1)} \u2014 ${p.count} rating${p.count!==1?"s":""}`:i.textContent="No ratings yet"}).catch(()=>{})}return u.forEach(f=>{let p=parseInt(f.dataset.star);f.addEventListener("mouseenter",()=>{a||(y(p),x(p))}),f.addEventListener("mouseleave",()=>{a||(y(r),d())}),f.addEventListener("click",()=>T(p)),f.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),T(p))})}),Promise.resolve().then(()=>(xe(),at)).then(f=>{o=f.createOnchainRating(e,{autoMount:!1,contentId:n.contentId||"0x"+(e.id||"").replace(/-/g,""),onRated:p=>{m("Rating saved",g.accent,3e3),R(),typeof n.onRated=="function"&&n.onRated(p)},onError:p=>{m(p?.message||"Could not save rating. Try again.","#dc2626"),typeof n.onError=="function"&&n.onError(p)}}),R()}).catch(()=>{m("Could not load rating","#dc2626")}),{element:l,destroy:()=>l.remove(),refresh:R,setRating:f=>{r=f,y(f)}}}function ut(t,e={}){Le();let n="deposit",r=j("div",{cls:"nui",style:{animation:"nfade .2s ease-out",border:"1px solid "+g.border,borderRadius:"16px",padding:"28px"}});r.innerHTML=`
|
|
39
39
|
<div style="display:flex;gap:12px;margin-bottom:20px">
|
|
40
|
-
<div data-gw-wallet-card style="flex:1;background:${
|
|
40
|
+
<div data-gw-wallet-card style="flex:1;background:${g.bg};border:1px solid ${g.border};border-radius:12px;padding:16px">
|
|
41
41
|
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:4px">
|
|
42
|
-
<div style="font-size:12px;font-weight:600;color:${
|
|
43
|
-
<button data-gw-connect style="font-size:12px;font-weight:600;cursor:pointer;border:1px solid ${
|
|
42
|
+
<div style="font-size:12px;font-weight:600;color:${g.muted};letter-spacing:.02em">Wallet</div>
|
|
43
|
+
<button data-gw-connect style="font-size:12px;font-weight:600;cursor:pointer;border:1px solid ${g.accent};background:transparent;color:${g.accent};border-radius:8px;padding:4px 12px;font-family:inherit">Connect</button>
|
|
44
44
|
</div>
|
|
45
|
-
<div data-gw-wallet-balance class="nui-mono" style="font-size:24px;font-weight:700;color:${
|
|
45
|
+
<div data-gw-wallet-balance class="nui-mono" style="font-size:24px;font-weight:700;color:${g.fg}">\u2014</div>
|
|
46
46
|
</div>
|
|
47
|
-
<div style="flex:1;background:${
|
|
48
|
-
<div style="font-size:12px;font-weight:600;color:${
|
|
49
|
-
<div data-gw-balance class="nui-mono" style="font-size:24px;font-weight:700;color:${
|
|
47
|
+
<div style="flex:1;background:${g.bg};border:1px solid ${g.border};border-radius:12px;padding:16px">
|
|
48
|
+
<div style="font-size:12px;font-weight:600;color:${g.muted};margin-bottom:4px;letter-spacing:.02em">Gateway</div>
|
|
49
|
+
<div data-gw-balance class="nui-mono" style="font-size:24px;font-weight:700;color:${g.fg}">\u2014</div>
|
|
50
50
|
</div>
|
|
51
51
|
</div>
|
|
52
|
-
<div style="display:flex;gap:0;margin-bottom:20px;border-bottom:1px solid ${
|
|
53
|
-
<button data-tab="deposit" style="flex:1;padding:10px 0;font-size:15px;font-weight:600;cursor:pointer;border:none;background:transparent;color:${
|
|
54
|
-
<button data-tab="withdraw" style="flex:1;padding:10px 0;font-size:15px;font-weight:600;cursor:pointer;border:none;background:transparent;color:${
|
|
52
|
+
<div style="display:flex;gap:0;margin-bottom:20px;border-bottom:1px solid ${g.border}">
|
|
53
|
+
<button data-tab="deposit" style="flex:1;padding:10px 0;font-size:15px;font-weight:600;cursor:pointer;border:none;background:transparent;color:${g.fg};border-bottom:2px solid ${g.accent};font-family:inherit">Deposit</button>
|
|
54
|
+
<button data-tab="withdraw" style="flex:1;padding:10px 0;font-size:15px;font-weight:600;cursor:pointer;border:none;background:transparent;color:${g.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
|
|
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?g.fg:g.muted,i.style.borderBottomColor=b?g.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>
|
|
61
|
-
<div data-gw-tx class="nui-mono" style="font-size:12px;color:${
|
|
61
|
+
<div data-gw-tx class="nui-mono" style="font-size:12px;color:${g.muted};word-break:break-all;margin-top:12px;display:none"></div>
|
|
62
62
|
`:a.innerHTML=`
|
|
63
63
|
<label class="nui-label">Amount (USDC)</label>
|
|
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
|
-
<div data-gw-tx class="nui-mono" style="font-size:12px;color:${
|
|
67
|
-
`}return
|
|
66
|
+
<div data-gw-tx class="nui-mono" style="font-size:12px;color:${g.muted};word-break:break-all;margin-top:12px;display:none"></div>
|
|
67
|
+
`}return l("deposit"),o.forEach(c=>c.addEventListener("click",()=>l(c.dataset.tab))),{element:r,destroy:()=>r.remove(),switchTab:l}}I();ue();I();var lt=[{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 dt(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 mt(t={}){return O({humans:t.humanAccess,agents:t.agentAccess})}function ft(t={}){return J(t.unlockMode||t.unlock||"one_time")}ue();return xt(Ft);})();
|
|
68
68
|
//# sourceMappingURL=nibgate.min.js.map
|