@nibgate/sdk 0.2.9 → 0.2.10
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 +0 -1
- package/dist/nibgate.js.map +2 -2
- package/dist/nibgate.min.js +2 -2
- package/dist/nibgate.min.js.map +2 -2
- package/package.json +1 -1
- package/src/core/resource.js +0 -1
package/dist/nibgate.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Nibgate=(()=>{var me=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var fe=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ne=(t,e)=>{for(var r in e)me(t,r,{get:e[r],enumerable:!0})},nt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of tt(e))!rt.call(t,a)&&a!==r&&me(t,a,{get:()=>e[a],enumerable:!(n=et(e,a))||n.enumerable});return t};var at=t=>nt(me({},"__esModule",{value:!0}),t);function pt(t,e){return typeof e=="bigint"?e.toString():e}function W(t){return JSON.stringify(t,pt)}var re=fe(()=>{});function Oe(t){let e=t.extra;return e?e.name===ce&&e.version==="1":!1}function kt(t){if(Oe(t))return t.extra?.verifyingContract}function bt(){let t=new Uint8Array(32);return crypto.getRandomValues(t),"0x"+Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}function q(t){return t&&typeof t=="string"&&t.startsWith("0x")?t.toLowerCase():t}var ce,wt,se,We=fe(()=>{ce="GatewayWalletBatched",wt={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"}]};se=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,r){let n={paymentRequired:{x402Version:e,accepts:[r]},selectedRequirements:r};for(let a of this._beforeHooks){let o=await a(n);if(o&&o.abort)throw new Error("Payment creation aborted: "+o.reason)}try{if(!Oe(r))throw new Error('BatchEvmScheme can only handle Circle batching options. Expected extra.name="'+ce+'" and extra.version="1"');let a=kt(r);if(!a)throw new Error("Circle batching option missing extra.verifyingContract (GatewayWallet address)");let o=bt(),c=Math.floor(Date.now()/1e3),i=Math.max(r.maxTimeoutSeconds||0,604900),s={from:q(this.signer.address),to:q(r.payTo),value:r.amount,validAfter:String(c-600),validBefore:String(c+i),nonce:o},u=await this.signAuthorization(s,r,a),p={x402Version:e,payload:{authorization:s,signature:u}},d={...n,paymentPayload:p};for(let f of this._afterHooks)try{await f(d)}catch{}return p}catch(a){let o={...n,error:a};for(let c of this._failureHooks){let i=await c(o);if(i&&i.recovered)return{x402Version:i.payload.x402Version,payload:i.payload.payload}}throw a}}async signAuthorization(e,r,n){if(!r.network.startsWith("eip155:"))throw new Error('BatchEvmScheme: unsupported network format "'+r.network+'". Expected "eip155:<chainId>"');let a=parseInt(r.network.split(":")[1],10),o={name:ce,version:"1",chainId:a,verifyingContract:q(n)},c={from:q(e.from),to:q(e.to),value:BigInt(e.value),validAfter:BigInt(e.validAfter),validBefore:BigInt(e.validBefore),nonce:e.nonce},i={domain:o,types:wt,primaryType:"TransferWithAuthorization",message:c};return this.signer.signTypedData(i)}}});var Ge={};Ne(Ge,{createCircleGatewayBrowserAdapter:()=>Tt});function St(t){let e=typeof t=="string"?t:W(t);return typeof Buffer<"u"?Buffer.from(e).toString("base64"):btoa(unescape(encodeURIComponent(e)))}function Et(t){return typeof Buffer<"u"?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}async function Tt(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 r=t.clientModule?.BatchEvmScheme?new t.clientModule.BatchEvmScheme(e):new se(e),n=t.network||t.chainId&&`eip155:${t.chainId}`||"eip155:5042002";function a(c){if(c&&typeof c=="object")return c;if(!c||typeof c!="string")throw new Error("Missing PAYMENT-REQUIRED header.");return JSON.parse(Et(c))}function o(c){let i=Array.isArray(c?.accepts)?c.accepts:[],s=i.find(u=>{let l=u.extra||{};return u.network===n&&l.name==="GatewayWalletBatched"&&l.version==="1"&&typeof l.verifyingContract=="string"})||i.find(u=>{let l=u.extra||{};return l.name==="GatewayWalletBatched"&&l.version==="1"&&typeof l.verifyingContract=="string"});if(!s){let u=i.map(p=>p.network).filter(Boolean).join(", ")||"none",l=i.some(p=>{let d=p.extra||{};return d.name==="GatewayWalletBatched"&&d.version==="1"&&typeof d.verifyingContract=="string"});throw new Error(l?`No Circle Gateway batching payment option found for ${n}. 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: '${n}' }).`)}return s}return{signer:e,network:n,async pay({paymentRequiredHeader:c,challenge:i}){let s=a(c||i),u=o(s),l=s.x402Version??2,p=await r.createPaymentPayload(l,u),d=St({...p,resource:s.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 De=fe(()=>{We();re()});var vt={};Ne(vt,{ACCESS_MODES:()=>H,CONTENT_TYPES:()=>B,NIBGATE_CONTENT_HASH_NAMESPACE:()=>Ve,NIBGATE_CONTENT_SETTING_FIELDS:()=>Je,NIBGATE_REPUTATION_ABI:()=>Ye,NIBGATE_REPUTATION_CHAIN_ID:()=>qe,NIBGATE_REPUTATION_CHAIN_NAME:()=>$e,NIBGATE_REPUTATION_CONTRACT:()=>Ee,NIBGATE_REPUTATION_RPC_URL:()=>je,PAYMENT_RAILS:()=>G,UNLOCK_MODES:()=>D,checkResourceAccess:()=>T,contentRatingHash:()=>Te,createCircleGatewayBrowserAdapter:()=>$,createEvmGatewayUnlock:()=>j,createGate:()=>E,createHostedUnlock:()=>ze,createNibgate:()=>Ce,createNibgateContentSettings:()=>Qe,createOnchainRating:()=>ue,createTransferCheckout:()=>F,createWalletCheckout:()=>ae,mountRatingUI:()=>le,nibgate:()=>xe,normalizeAccessPolicy:()=>v,normalizeContentType:()=>N,normalizePaymentRail:()=>U,normalizeResource:()=>k,normalizeUnlockPolicy:()=>O,payAndUnlockResource:()=>L,payWithPaymentSignature:()=>z,payWithTransfer:()=>de,rateContentOnchain:()=>ie,rateResource:()=>Y,reviewTextHash:()=>Fe,settingsToAccessPolicy:()=>Ke,settingsToUnlockPolicy:()=>Ze,setupResourcePage:()=>ne,trackResourcePage:()=>M,validateResourceMetadata:()=>X});var G=["gateway","transfer"];function U(t,e="gateway"){let r=String(t||"").trim().toLowerCase().replace(/[-\s]+/g,"_");return r==="circle_gateway"||r==="x402"?"gateway":r==="direct_transfer"||r==="wallet_transfer"?"transfer":G.includes(r)?r:e}var B=["music","video","article","image"],ot={audio:"music",song:"music",track:"music",album:"music",playlist:"music",photo:"image",picture:"image",illustration:"image",art:"image",movie:"video",clip:"video"},H=["free","paid","blocked"],D=["one_time","metered_stream","metered_read","time_pass","agent_quota"];function N(t){let e=String(t||"").trim().toLowerCase();return B.includes(e)?e:ot[e]||"article"}function ye(t,e="paid"){let r=String(t||"").trim().toLowerCase();return H.includes(r)?r:e}function v(t={}){if(typeof t=="string"){let e=ye(t);return{humans:e,agents:e}}return{humans:ye(t.humans||t.human||t.default,"paid"),agents:ye(t.agents||t.agent||t.default,"paid")}}function O(t={}){let e=typeof t=="string"?{mode:t}:t||{},r=String(e.mode||e.type||"one_time").trim().toLowerCase().replace(/[-\s]+/g,"_");return{...e,mode:D.includes(r)?r:"one_time"}}function ge(){return typeof window<"u"?window:null}function I(t){let e=ge();if(!e)return"";let r=`meta[name="${t}"], meta[property="${t}"]`,n=e.document.querySelector(r);return n&&n.getAttribute("content")||""}function ct(t){let e=ge();if(!(!e||!t))return`${e.location.origin}${t.startsWith("/")?t:"/"+t}`}function st(){return I("og:image")||void 0}function it(){return I("og:description")||I("description")||void 0}function ut(){let t=ge();return I("og:title")||I("twitter:title")||(t?t.document.title:"")||void 0}function lt(){let t=I("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 dt(){let t=I("keywords");if(t)return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).slice(0,8)}function mt(t,e){return e&&typeof e=="object"&&Object.keys(e).length>0?v(e):t!=null&&t!==""&&Number.parseFloat(t)>0?{humans:"paid",agents:"paid"}:{humans:"free",agents:"free"}}function k(t={}){let e=typeof t=="string"?{id:t}:t||{},{publisher:r,publisherId:n,publisherWallet:a,publisherHandle:o,publisherName:c,publisherProfileUrl:i,publisherOrigin:s,publisherVerification:u,authorHandle:l,...p}=e,d=e.path||e.route||void 0,f=e.url||ct(d)||void 0,y=e.access,w=e.price??e.amount??"";return{...p,id:String(e.id||e.contentId||e.slug||"").trim(),title:String(e.title||e.name||ut()||"Untitled").trim(),type:N(e.type||e.contentType||lt()),price:w,currency:e.currency||"USDC",paymentRail:U(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:f,imageUrl:e.imageUrl||e.image||st()||void 0,description:e.description||e.summary||it()||void 0,tags:e.tags||dt()||void 0,access:mt(w,y),unlock:O(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 Z(t){return Array.isArray(t)?t.length>0:t!=null&&String(t).trim()!==""}function ft(t={}){let e=v(t.access);return e.humans==="paid"||e.agents==="paid"||Number.parseFloat(t.price||t.amount||"0")>0}function X(t={},e={}){let r=k(t),n=[],a=[],o=e.required||["id","type"],c=e.recommended||["title","url","description","imageUrl","tags"];for(let s of o)Z(r[s])||a.push(`Missing required content metadata: ${s}`);for(let s of c)Z(r[s])||n.push(`Missing recommended discovery metadata: ${s}`);B.includes(r.type)||a.push("Content type must be one of music, video, article, or image."),r.url&&!/^https?:\/\//i.test(String(r.url))&&n.push("Use an absolute canonical url for stronger discovery identity."),r.imageUrl&&!/^https?:\/\//i.test(String(r.imageUrl))&&n.push("Use an absolute imageUrl for thumbnails in Explore and agent discovery."),ft(r)&&(Z(r.price)||a.push("Paid content requires price."),Z(r.recipient||r.payTo)||n.push("Paid content should include recipient/payTo (server value from 402 challenge is used for actual payment)."));let i=Math.max(0,100-a.length*20-n.length*8);return{ok:a.length===0,score:i,errors:a,warnings:n,resource:r}}function h(){return typeof window>"u"?null:window}function yt(t,e){let r=h();return r?(r.__nibgateClientQueue=r.__nibgateClientQueue||[],r.__nibgateClientQueue.push({eventName:t,payload:e}),!0):!1}function ee(){let t=h();if(!t?.nibgateHub?.track||!Array.isArray(t.__nibgateClientQueue))return!1;let e=t.__nibgateClientQueue.splice(0);return e.forEach(r=>{t.nibgateHub.track(r.eventName,r.payload)}),e.length>0}function gt(){let t=h();if(!t||t.__nibgateClientFlushStarted)return;t.__nibgateClientFlushStarted=!0;let e=0,r=t.setInterval(()=>{e+=1,ee(),(t.nibgateHub?.track||e>=80)&&(t.clearInterval(r),t.__nibgateClientFlushStarted=!1)},250)}function x(t,e={}){let r=h();return r?r.nibgateHub?.track?(r.nibgateHub.track(t,e),ee(),!0):(yt(t,e),gt(),!1):!1}function _(t,e={}){return{...e,resource:k(t)}}function pe(t){return`nibgate:unlock:${t.id||t.path||t.url||"content"}`}function he(t){return`nibgate:payment-proof:${t.id||t.path||t.url||"content"}`}function te(t,e={}){let r=h();if(!r)return!1;try{return r.localStorage.setItem(pe(t),JSON.stringify({unlockedAt:new Date().toISOString(),payment:e})),!0}catch{return!1}}function we(t,e){let r=h();if(!r||!e)return!1;try{let n=typeof e=="string"?e:JSON.stringify(e);return r.localStorage.setItem(he(t),n),!0}catch{return!1}}function ke(t){let e=h();if(!e)return"";try{return e.localStorage.getItem(he(t))||""}catch{return""}}function ve(t){let e=k(t),r=h();if(!r)return!1;try{return r.localStorage.removeItem(he(e)),r.localStorage.removeItem(pe(e)),!0}catch{return!1}}function Me(t){let e=h();if(!e)return!1;try{return!!e.localStorage.getItem(pe(t))}catch{return!1}}var Ue=null;function Be(t){Ue=t}function E(t,e={}){let r=k(t),n=e.client||Ue;return{resource:r,content(a={}){return n.content(r,a)},view(a={}){return n.view(r,a)},track(a,o={}){return n.track(a,_(r,o))},unlockStarted(a={}){return n.unlockStarted(r,a)},unlockCompleted(a={}){return te(r,a),n.unlockCompleted(r,a)},paymentCompleted(a={}){return n.paymentCompleted(r,a)},isUnlocked(){return Me(r)},markUnlocked(a={}){return te(r,a),n.unlockCompleted(r,a),n.paymentCompleted(r,a),!0},async unlock(a={}){n.unlockStarted(r);let o=typeof a=="function"?await a(r):a;return te(r,o||{}),n.unlockCompleted(r,o||{}),n.paymentCompleted(r,o||{}),{unlocked:!0,resource:r,payment:o||{}}},rate(a={},o={}){return n.rateResource(r,a,o)}}}re();function M(t,e={}){let r=E(t,e.gateOptions||{}),n=X(r.resource,e.validation||{});return(n.warnings.length||n.errors.length)&&e.warn!==!1&&h()?.console?.warn&&h().console.warn("Nibgate content metadata needs attention",n),r.content({source:e.source,metadataQuality:{score:n.score,warnings:n.warnings,errors:n.errors},...e.content||{}}),r.view({source:e.source,path:e.path||h()?.location?.pathname||r.resource.path,referrer:e.referrer??h()?.document?.referrer??"",...e.view||{}}),r}function ne(t,e={}){let r=M(t,e),n=h();if(!n)return r;let a=typeof e.button=="string"?n.document.querySelector(e.button):e.button,o=typeof e.status=="string"?n.document.querySelector(e.status):e.status,c=e.onStatus||(i=>{o&&(o.textContent=i||"")});return a&&a.addEventListener("click",async()=>{a.disabled=!0;try{await T(t,{...e,onStatus:c})}finally{a.disabled=!1}}),r}async function T(t,e={}){let r=E(t,e.gateOptions||{}),n=e.accessPath||r.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.checkingMessage||"Checking access route..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"nibgate-access-route"});let o=await fetch(n,{method:e.method||"GET",headers:{accept:"application/json",...ke(r.resource)?{"x-nibgate-payment-proof":ke(r.resource)}:{},...e.headers||{}},body:e.body}),c=await o.json().catch(()=>({}));if(o.status===402){if(r.track("payment_challenge_returned",{source:e.source,challenge:c,resource:r.resource}),a(e.challengeMessage||"Payment challenge returned. Continue with checkout."),typeof e.createPaymentSignature=="function"||typeof e.checkout=="function")return z(t,{...e,challenge:c,paymentRequiredHeader:o.headers.get("PAYMENT-REQUIRED")||o.headers.get("payment-required")||""});if(e.autoPay&&e.payPath){let s=await L(t,e);return s.ok&&e.retryAfterPay!==!1?T(t,{...e,autoPay:!1}):s}return{ok:!1,status:o.status,challenge:c,resource:r.resource,response:o}}if(!o.ok)return a(c.error||e.errorMessage||"Access check failed"),{ok:!1,status:o.status,error:c.error||"Access check failed",payload:c,resource:r.resource,response:o};let i=e.payment||c.payment||null;return i&&(r.unlockCompleted(i),r.paymentCompleted(i)),a(e.successMessage||"Access allowed and Nibgate events emitted."),{ok:!0,status:o.status,payload:c,payment:i,resource:r.resource,response:o}}async function z(t,e={}){let r=E(t,e.gateOptions||{}),n=e.accessPath||r.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Waiting for wallet payment approval..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"wallet-gateway"});let o=e.paymentSignature||"",c=e.memo||"",i=e.payment||{};if(!o){let d=e.paymentRequiredHeader||"",f=e.challenge||null,w=await(e.createPaymentSignature||e.checkout)({resource:r.resource,challenge:f,paymentRequiredHeader:d,accessPath:n});o=w?.paymentSignature||w?.signature||w?.payment||"",c=w?.memo||w?.paymentMemo||"",i=w?.metadata||w?.paymentMetadata||w||{}}if(!o){let d="Wallet did not return a payment signature.";return r.track("payment_failed",{source:e.source,error:d}),a(d),{ok:!1,status:400,error:d,resource:r.resource}}let s=await fetch(n,{method:e.method||"GET",headers:{accept:"application/json","payment-signature":o,...c?{"payment-memo":c}:{},...e.headers||{}}}),u=await s.text(),l={};try{l=u?JSON.parse(u):{}}catch{l={error:u||"Payment verification failed"}}if(!s.ok){let d=l.detail||l.reason||l.invalidReason||l.error||u||"Payment verification failed",f=typeof d=="string"?d:W(d);return r.track("payment_failed",{source:e.source,status:s.status,error:f,...i}),a(e.paymentErrorMessage||f),{ok:!1,status:s.status,error:f,payload:l,resource:r.resource,response:s}}let p=l.payment||{paymentProvider:e.paymentProvider||"wallet-gateway",paymentId:o,memo:c,amount:Number(r.resource.price||0),revenue:Number(r.resource.price||0),currency:r.resource.currency||"USDC",...i};return we(r.resource,l.unlockProof),r.markUnlocked(p),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:s.status,payload:l,payment:p,resource:r.resource,response:s}}async function L(t,e={}){let r=E(t,e.gateOptions||{}),n=e.payPath||r.resource.payPath||"/api/nibgate/pay",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Starting payment..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"circle-gateway"});let o=await fetch(n,{method:e.payMethod||"POST",headers:{accept:"application/json","content-type":"application/json",...e.payHeaders||{}},body:JSON.stringify({resource:r.resource,...e.payPayload||{}})}),c=await o.json().catch(()=>({}));if(!o.ok||!c.ok)return r.track("payment_failed",{source:e.source,status:o.status,error:c.error||"Payment failed",detail:c.detail||""}),a(c.detail||c.error||e.paymentErrorMessage||"Payment failed."),{ok:!1,status:o.status,payload:c,resource:r.resource,response:o};let i=c.payment||{paymentProvider:e.paymentProvider||"circle-gateway",paymentId:c.paymentId||`nibgate_payment_${Date.now()}`,amount:Number(r.resource.price||0),revenue:Number(r.resource.price||0),currency:r.resource.currency||"USDC"};return we(r.resource,c.unlockProof),r.markUnlocked(i),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:o.status,payload:c,payment:i,resource:r.resource,response:o}}function ht(t,e){let r=h();if(!t||!r)return;let n=typeof t=="string"?r.document.querySelector(t):t;n&&(n.textContent=e||"")}function He(t,e){let r=h();if(!t||!r)return;let n=typeof t=="string"?r.document.querySelector(t):t;n&&"disabled"in n&&(n.disabled=!!e)}function ae(t,e={}){let r=k(t),n=e.accessPath||r.accessPath||"/api/nibgate/access",a=e.button||null,o=e.status||null,c=typeof e.onStatus=="function"?e.onStatus:l=>ht(o,l),i=e.checkout||e.createPaymentSignature||e.pay;if(typeof i!="function")throw new Error("createWalletCheckout requires checkout/createPaymentSignature/pay callback for the active wallet or Gateway adapter.");async function s(l={}){He(a,!0);try{return await T(r,{...e,...l,accessPath:n,createPaymentSignature:i,onStatus:c})}finally{He(a,!1)}}function u(){let l=h();if(!l||!a)return{unlock:s};let p=typeof a=="string"?l.document.querySelector(a):a;return p&&p.addEventListener("click",()=>s().catch(d=>c(d.message||"Checkout failed."))),{unlock:s}}return{resource:r,unlock:s,mount:u}}function V(t={}){let e=typeof t=="number"?t:t.rating??t.stars??t.ratingValue??t.score,r=Number.parseFloat(e),n=Number.isFinite(r)?Math.max(1,Math.min(50,r<=5?Math.round(r*10):Math.round(r))):null;return{...t,rating:n?n/10:void 0,ratingValue:n||void 0}}function oe(t,e={},r={}){let n=k(t),o=V(e).ratingValue||0;return["Nibgate content rating",`site:${r.siteDomain||r.domain||n.siteDomain||n.domain||""}`,`content:${n.externalId||n.id}`,`url:${n.url||r.url||""}`,`rating:${o}`,"I confirm this rating is tied to my unlock/payment proof."].join(`
|
|
2
|
-
`)}re();async function $(t={}){return(await Promise.resolve().then(()=>(De(),Ge))).createCircleGatewayBrowserAdapter(t)}var Ct="https://api.nibgate.xyz/api/hub/pay";function xt(t,e){return e.hosted||e.accessPath==="hosted"?Ct:e.accessPath||t.accessPath||"/api/nibgate/access"}function j(t,e={}){let r=E(t,e.gateOptions||{}),n=h(),a=xt(r.resource,e),o=e.source||"nibgate-evm-gateway",c=e.network||"eip155:5042002",i=typeof e.status=="string"?n?.document.querySelector(e.status):e.status,s=typeof e.connectButton=="string"?n?.document.querySelector(e.connectButton):e.connectButton,u=typeof e.disconnectButton=="string"?n?.document.querySelector(e.disconnectButton):e.disconnectButton,l=typeof e.unlockButton=="string"?n?.document.querySelector(e.unlockButton):e.unlockButton,p=typeof e.clearButton=="string"?n?.document.querySelector(e.clearButton):e.clearButton,d=typeof e.walletLabel=="string"?n?.document.querySelector(e.walletLabel):e.walletLabel,f=typeof e.unlockedTarget=="string"?n?.document.querySelector(e.unlockedTarget):e.unlockedTarget,y="",w=!1;function A(m){typeof e.onStatus=="function"&&e.onStatus(m),i&&(i.textContent=m||"")}function J(m){return m?`${m.slice(0,6)}...${m.slice(-4)}`:""}function P(){return n?.ethereum||e.provider||null}function R(m){w=!!m,[s,u,l,p].forEach(b=>{b&&"disabled"in b&&(b.disabled=w||b===s&&!P()||b===u&&!y)})}function g(){let m=!!P();d&&(d.textContent=y?J(y):m?"Ready to connect":"No wallet detected"),s&&(s.textContent=y?"Connected":"Connect wallet"),u&&(u.textContent="Disconnect"),s&&"disabled"in s&&(s.disabled=w||!m),u&&"disabled"in u&&(u.disabled=w||!y)}function S(m,b={}){l&&(l.textContent=m?"Unlocked":`Unlock for ${r.resource.price} ${r.resource.currency||"USDC"}`),f&&("hidden"in f&&(f.hidden=!m),f.setAttribute("aria-hidden",m?"false":"true")),m&&r.markUnlocked(b)}async function C(){R(!0),A("Opening wallet connection...");try{let m=P();if(!m)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");let b=await m.request({method:"eth_requestAccounts"});if(y=Array.isArray(b)&&b[0]||"",!y)throw new Error("No wallet account selected.");return g(),A("Wallet connected. You can unlock now."),y}finally{R(!1)}}async function Q(){R(!0);try{let m=P();if(m?.request&&y)try{await m.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}return y="",g(),A(e.disconnectMessage||"Wallet disconnected for this page."),!0}finally{R(!1)}}async function K(m){let b=P();if(!b)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");return y||await C(),(await $({network:c,signer:{address:y,signTypedData:Xe=>b.request({method:"eth_signTypedData_v4",params:[y,W(Xe)]})},clientModule:e.circleClientModule})).pay(m)}async function Ae(){R(!0);try{y||await C(),R(!0),A("Requesting Gateway unlock...");let m=await T(r.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 ${r.resource.title||"content"}.`,method:e.method,headers:e.headers,body:e.body,checkout:K,onStatus:A});return m.ok&&(S(!0,m.payment||{}),typeof e.onUnlock=="function"&&e.onUnlock(m)),m}catch(m){let b=m?.message||"Unlock failed. Please try again.";return A(b),{ok:!1,status:0,error:b,resource:r.resource}}finally{R(!1),g()}}function _e(){ve(r.resource),S(!1),A("Local payment proof cleared. The next unlock will require Gateway payment again.")}async function Re(){let m=P();try{let b=m?await m.request({method:"eth_accounts"}):[];y=Array.isArray(b)&&b[0]||""}catch{}g(),S(!1)}function Pe(){return s?.addEventListener?.("click",()=>C().catch(m=>A(m?.message||"Could not connect wallet."))),u?.addEventListener?.("click",()=>Q().catch(m=>A(m?.message||"Could not disconnect wallet."))),l?.addEventListener?.("click",()=>Ae()),p?.addEventListener?.("click",_e),Re(),M(r.resource,{source:o}),Ie}let Ie={resource:r.resource,connect:C,disconnect:Q,unlock:Ae,clear:_e,hydrate:Re,mount:Pe,getWalletAddress:()=>y};return e.autoMount!==!1&&Pe(),Ie}function ze(t,e={}){return j(t,{...e,hosted:!0,noWalletMessage:e.noWalletMessage||"Install MetaMask or another EVM wallet to unlock premium content."})}var At="0xc62fad09",Se=`0x${"0".repeat(64)}`,Ve="nibgate:content:v1",qe=5042002,$e="Arc Testnet",je="https://rpc.testnet.arc.network",Ee="0x9f27fd62e75f86a3c7addfdba443aab1f930e281",Ye=[{type:"function",name:"rateContent",stateMutability:"nonpayable",inputs:[{name:"contentId",type:"bytes32"},{name:"rating",type:"uint8"},{name:"reviewHash",type:"bytes32"},{name:"unlockRef",type:"string"}],outputs:[]}];function _t(t=""){return String(t||"").replace(/^0x/i,"").toLowerCase()}function Le(t=""){let e=_t(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 Rt(t=""){return Array.from(new TextEncoder().encode(String(t||""))).map(e=>e.toString(16).padStart(2,"0")).join("")}function Pt(t=""){let e=Rt(t),r=e.length/2,n=Math.ceil(r/32)*64;return be(r)+e.padEnd(n,"0")}function It({contentId:t,ratingValue:e,reviewHash:r,unlockRef:n}){return At+Le(t)+be(e)+Le(r||Se)+be(128)+Pt(n||"")}function Te(t,e={}){let r=e.contentId||e.contentHash;if(!r)throw new Error("contentId/contentHash is required. Use the Nibgate backend prepare endpoint or pass a known content hash.");return r}function Fe(t=""){if(!t)return Se;throw new Error("Text review hashing is not available in direct-browser mode. Pass reviewHash from your app/backend.")}async function Nt(t,e={}){if(e.contentId||e.contentHash)return{contentId:e.contentId||e.contentHash};let r=e.prepareUrl||e.indexUrl?.replace(/\/index$/,"/prepare");if(!r)throw new Error("contentId/contentHash or prepareUrl is required for onchain rating.");let n=await fetch(r,{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 n.json().catch(()=>({}));if(!n.ok||!a.contentHash)throw new Error(a.error||"Could not prepare Nibgate onchain rating.");return a}async function ie(t,e={}){let r=k(t),n=V(e.rating??e.stars??e);if(!n.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||Ee;if(!o)throw new Error("Nibgate reputation contract address is not configured.");let c=await a.request({method:"eth_requestAccounts"}),i=Array.isArray(c)&&c[0]||"";if(!i)throw new Error("No wallet account selected.");let s=await Nt(r,e),u=s.contentHash||s.contentId||Te(r,e),l=e.reviewHash||Se,p=String(e.unlockRef||e.paymentId||e.txHash||""),d=It({contentId:u,ratingValue:n.ratingValue,reviewHash:l,unlockRef:p}),f=await a.request({method:"eth_sendTransaction",params:[{from:i,to:o,data:d}]}),y=_(r,{rating:n.rating,ratingValue:n.ratingValue,walletAddress:i,txHash:f,contentHash:u,reviewHash:l,proofType:"onchain_pending",proof:p,paymentId:e.paymentId,actor:e.actor||"human"});return x("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:f,resource:r,url:r.url,path:r.path,actor:e.actor||"human"})}).catch(()=>null),{txHash:f,walletAddress:i,contentId:u,ratingValue:n.ratingValue,reviewHash:l}}function Y(t,e={},r={}){let n=k(t),a=V(e),o={...r,...a,ratingMessage:r.ratingMessage||e.message||e.ratingMessage||oe(n,a,r),ratingSignature:r.ratingSignature||e.signature||e.ratingSignature||void 0,resource:n};return x("content_rating",o)}function ue(t,e={}){let r=E(t,e.gateOptions||{}),n=h(),a=typeof e.status=="string"?n?.document.querySelector(e.status):e.status,o=typeof e.ratingTarget=="string"?n?.document.querySelector(e.ratingTarget):e.ratingTarget,c=e.ratingButtons||e.buttons||"[data-nibgate-rating-value], [data-rating]",s=(Array.isArray(e.buttons)?e.buttons:typeof e.buttons=="string"?Array.from(n?.document.querySelectorAll(e.buttons)||[]):e.buttons?[e.buttons]:null)||Array.from(n?.document.querySelectorAll(c)||[]),u=e.source||"nibgate-onchain-rating",l=!1,p=e.payment||null;function d(g){typeof e.onStatus=="function"&&e.onStatus(g),a&&(a.textContent=g||"")}function f(g){l=!!g,s.forEach(S=>{S&&"disabled"in S&&(S.disabled=l)})}function y(g=null){return p=g||null,p}function w(g){return o&&("hidden"in o&&(o.hidden=!g),o.setAttribute("aria-hidden",g?"false":"true")),!!g}function A(g){let S=g?.dataset?.nibgateRatingValue||g?.dataset?.rating||g?.value||g?.textContent,C=Number.parseFloat(String(S||"").replace(/[^\d.]/g,""));return Number.isFinite(C)?C:Number(e.rating||e.stars||0)}async function J(g={}){f(!0);try{let S=Number.parseFloat(g.rating??g.stars??g.value??e.rating??e.stars);if(!Number.isFinite(S))throw new Error("Choose a rating before sending.");let C=g.paymentId||e.paymentId||(typeof e.getPaymentId=="function"?e.getPaymentId():p?.paymentId),Q=g.unlockRef||e.unlockRef||(typeof e.getUnlockRef=="function"?e.getUnlockRef():null)||C||p?.txHash||p?.transactionHash||"";d(e.pendingMessage||"Send the onchain rating transaction...");let K=await ie(r.resource,{...e,...g,rating:S,paymentId:C,unlockRef:Q,source:u});return d(e.successMessage||"Rating sent to Nibgate reputation."),typeof e.onRated=="function"&&e.onRated(K),K}catch(S){let C=S?.message||e.errorMessage||"Rating failed.";throw d(C),typeof e.onError=="function"&&e.onError(S),S}finally{f(!1)}}function P(){return s.forEach(g=>{g?.addEventListener?.("click",()=>J({rating:A(g)}).catch(()=>null))}),e.visible!==void 0&&w(!!e.visible),R}let R={resource:r.resource,rate:J,mount:P,setPayment:y,setVisible:w};return e.autoMount!==!1&&P(),R}function le(t,e={}){let r=E(t,e.gateOptions||{}),n=h();if(!n)return null;let a=typeof e.target=="string"?n.document.querySelector(e.target):e.target;if(!a)return null;let o=[1,2,3,4,5],c=0,i=n.document.createElement("div");i.className="nibgate-rating-ui",i.style.cssText="display:flex;align-items:center;gap:4px;padding:8px 0";let s=o.map(d=>{let f=n.document.createElement("button");return f.type="button",f.dataset.nibgateRatingValue=String(d),f.setAttribute("aria-label",`${d} star${d>1?"s":""}`),f.innerHTML="\u2606",f.style.cssText="background:none;border:none;font-size:24px;cursor:pointer;color:#ccc;transition:color 0.15s;padding:2px;line-height:1",f.addEventListener("mouseenter",()=>{s.forEach((y,w)=>y.style.color=w<d?"#f5b342":"#ccc")}),f.addEventListener("mouseleave",()=>{s.forEach((y,w)=>y.style.color=w<c?"#f5b342":"#ccc")}),f.addEventListener("click",()=>{c=d,s.forEach((y,w)=>y.style.color=w<d?"#f5b342":"#ccc"),Y(r.resource,{rating:d}).catch(()=>{})}),i.appendChild(f),f}),u=n.document.createElement("span");u.style.cssText="font-size:13px;color:#888;margin-left:8px",u.textContent=e.label||"Rate this content",i.appendChild(u),a.appendChild(i);function l(d,f={}){return r.rate({...f,rating:d})}function p(d){c=d,s.forEach((f,y)=>f.style.color=y<d?"#f5b342":"#ccc")}return{resource:r.resource,container:i,setRating:p,rate:l}}function F(t,e={}){let r=k({...t,paymentRail:"transfer"}),n=e.sendTransfer||e.transfer;if(typeof n!="function")throw new Error("createTransferCheckout requires sendTransfer({ resource, recipient, amount, currency, network }) and a server verifyTransfer hook.");return{resource:r,async pay(a={}){let o=r.recipient||r.payTo,c=String(r.price||r.amount||"0"),i=r.currency||"USDC",s=e.network||a.challenge?.accepts?.[0]?.network||"eip155:5042002",u=await n({resource:r,recipient:o,amount:c,currency:i,network:s,challenge:a.challenge}),l=u?.txHash||u?.hash||u?.transactionHash||u?.paymentId||"";if(!l)throw new Error("Transfer checkout did not return a txHash.");return{paymentSignature:l,signature:l,memo:u.memo||"",metadata:{paymentProvider:"direct-transfer",paymentId:l,txHash:l,recipient:o,amount:Number(c),currency:i,network:s,...u.metadata||u}}}}}async function de(t,e={}){let n=await(e.checkout||F(t,e).pay)({resource:k(t),challenge:e.challenge||null}),a=n?.metadata?.txHash||n?.txHash||n?.paymentSignature||n?.signature||"";if(!a)throw new Error("Transfer checkout did not return a txHash.");return T(t,{...e,headers:{...e.headers||{},"x-nibgate-transfer-tx":a},payment:n.metadata||{paymentProvider:"direct-transfer",txHash:a,paymentId:a}})}function Ce(t={}){let e=t.resource?k(t.resource):null;function r(n={}){return k({...e||{},...typeof n=="string"?{id:n}:n})}return{content(n,a={}){return x("content_registered",_(r(n),a))},registerContent(n,a={}){return x("content_registered",_(r(n),a))},view(n,a={}){return x("resource_view",_(r(n),a))},track(n,a={}){return x(n||"custom",a)},unlockStarted(n,a={}){return x("unlock_started",_(r(n),a))},unlockCompleted(n,a={}){return x("unlock_completed",_(r(n),a))},paymentCompleted(n,a={}){return x("payment_completed",_(r(n),a))},rateResource(n,a={},o={}){return Y(r(n),a,o)},ratingMessage(n,a={},o={}){return oe(r(n),a,o)},gate(n,a={}){return E(r(n),{...a,client:this})},trackResourcePage(n,a={}){return M(r(n),a)},checkResourceAccess(n,a={}){return T(r(n),a)},payWithPaymentSignature(n,a={}){return z(r(n),a)},createWalletCheckout(n,a={}){return ae(r(n),a)},createCircleGatewayBrowserAdapter(n={}){return $(n)},createTransferCheckout(n,a={}){return F(r(n),a)},payWithTransfer(n,a={}){return de(r(n),a)},createEvmGatewayUnlock(n,a={}){return j(r(n),a)},createOnchainRating(n,a={}){return ue(r(n),a)},mountRatingUI(n,a={}){return le(r(n),a)},payAndUnlockResource(n,a={}){return L(r(n),a)},setupResourcePage(n,a={}){return ne(r(n),a)},normalizeResource:r,normalizeContentType:N,flush:ee}}var xe=Ce();Be(xe);var Je=[{name:"publishToNibgate",label:"Publish to Nibgate discovery",type:"boolean",defaultValue:!0},{name:"type",label:"Content type",type:"select",options:B,defaultValue:"article"},{name:"humanAccess",label:"Human access",type:"select",options:H,defaultValue:"paid"},{name:"agentAccess",label:"Agent access",type:"select",options:H,defaultValue:"paid"},{name:"unlockMode",label:"Unlock mode",type:"select",options:D,defaultValue:"one_time"},{name:"paymentRail",label:"Payment rail",type:"select",options:G,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 Qe(t={}){let e=v(t.access||{humans:t.humanAccess,agents:t.agentAccess}),r=O(t.unlock||t.unlockMode||"one_time");return{publishToNibgate:t.publishToNibgate??t.publishedToNibgate??!0,type:N(t.type||t.contentType||"article"),humanAccess:e.humans,agentAccess:e.agents,unlockMode:r.mode,paymentRail:U(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 Ke(t={}){return v({humans:t.humanAccess,agents:t.agentAccess})}function Ze(t={}){return O(t.unlockMode||t.unlock||"one_time")}return at(vt);})();
|
|
1
|
+
var Nibgate=(()=>{var de=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var me=(t,e)=>()=>(t&&(e=t(t=0)),e);var Ne=(t,e)=>{for(var r in e)de(t,r,{get:e[r],enumerable:!0})},nt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of tt(e))!rt.call(t,a)&&a!==r&&de(t,a,{get:()=>e[a],enumerable:!(n=et(e,a))||n.enumerable});return t};var at=t=>nt(de({},"__esModule",{value:!0}),t);function pt(t,e){return typeof e=="bigint"?e.toString():e}function W(t){return JSON.stringify(t,pt)}var te=me(()=>{});function Oe(t){let e=t.extra;return e?e.name===oe&&e.version==="1":!1}function kt(t){if(Oe(t))return t.extra?.verifyingContract}function bt(){let t=new Uint8Array(32);return crypto.getRandomValues(t),"0x"+Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}function q(t){return t&&typeof t=="string"&&t.startsWith("0x")?t.toLowerCase():t}var oe,wt,ce,We=me(()=>{oe="GatewayWalletBatched",wt={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"}]};ce=class{constructor(e){this.signer=e,this.scheme=oe,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,r){let n={paymentRequired:{x402Version:e,accepts:[r]},selectedRequirements:r};for(let a of this._beforeHooks){let o=await a(n);if(o&&o.abort)throw new Error("Payment creation aborted: "+o.reason)}try{if(!Oe(r))throw new Error('BatchEvmScheme can only handle Circle batching options. Expected extra.name="'+oe+'" and extra.version="1"');let a=kt(r);if(!a)throw new Error("Circle batching option missing extra.verifyingContract (GatewayWallet address)");let o=bt(),c=Math.floor(Date.now()/1e3),i=Math.max(r.maxTimeoutSeconds||0,604900),s={from:q(this.signer.address),to:q(r.payTo),value:r.amount,validAfter:String(c-600),validBefore:String(c+i),nonce:o},u=await this.signAuthorization(s,r,a),p={x402Version:e,payload:{authorization:s,signature:u}},d={...n,paymentPayload:p};for(let f of this._afterHooks)try{await f(d)}catch{}return p}catch(a){let o={...n,error:a};for(let c of this._failureHooks){let i=await c(o);if(i&&i.recovered)return{x402Version:i.payload.x402Version,payload:i.payload.payload}}throw a}}async signAuthorization(e,r,n){if(!r.network.startsWith("eip155:"))throw new Error('BatchEvmScheme: unsupported network format "'+r.network+'". Expected "eip155:<chainId>"');let a=parseInt(r.network.split(":")[1],10),o={name:oe,version:"1",chainId:a,verifyingContract:q(n)},c={from:q(e.from),to:q(e.to),value:BigInt(e.value),validAfter:BigInt(e.validAfter),validBefore:BigInt(e.validBefore),nonce:e.nonce},i={domain:o,types:wt,primaryType:"TransferWithAuthorization",message:c};return this.signer.signTypedData(i)}}});var Ge={};Ne(Ge,{createCircleGatewayBrowserAdapter:()=>Ct});function St(t){let e=typeof t=="string"?t:W(t);return typeof Buffer<"u"?Buffer.from(e).toString("base64"):btoa(unescape(encodeURIComponent(e)))}function Et(t){return typeof Buffer<"u"?Buffer.from(t,"base64").toString("utf8"):decodeURIComponent(escape(atob(t)))}async function Ct(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 r=t.clientModule?.BatchEvmScheme?new t.clientModule.BatchEvmScheme(e):new ce(e),n=t.network||t.chainId&&`eip155:${t.chainId}`||"eip155:5042002";function a(c){if(c&&typeof c=="object")return c;if(!c||typeof c!="string")throw new Error("Missing PAYMENT-REQUIRED header.");return JSON.parse(Et(c))}function o(c){let i=Array.isArray(c?.accepts)?c.accepts:[],s=i.find(u=>{let l=u.extra||{};return u.network===n&&l.name==="GatewayWalletBatched"&&l.version==="1"&&typeof l.verifyingContract=="string"})||i.find(u=>{let l=u.extra||{};return l.name==="GatewayWalletBatched"&&l.version==="1"&&typeof l.verifyingContract=="string"});if(!s){let u=i.map(p=>p.network).filter(Boolean).join(", ")||"none",l=i.some(p=>{let d=p.extra||{};return d.name==="GatewayWalletBatched"&&d.version==="1"&&typeof d.verifyingContract=="string"});throw new Error(l?`No Circle Gateway batching payment option found for ${n}. 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: '${n}' }).`)}return s}return{signer:e,network:n,async pay({paymentRequiredHeader:c,challenge:i}){let s=a(c||i),u=o(s),l=s.x402Version??2,p=await r.createPaymentPayload(l,u),d=St({...p,resource:s.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 De=me(()=>{We();te()});var vt={};Ne(vt,{ACCESS_MODES:()=>H,CONTENT_TYPES:()=>B,NIBGATE_CONTENT_HASH_NAMESPACE:()=>Ve,NIBGATE_CONTENT_SETTING_FIELDS:()=>Je,NIBGATE_REPUTATION_ABI:()=>Ye,NIBGATE_REPUTATION_CHAIN_ID:()=>qe,NIBGATE_REPUTATION_CHAIN_NAME:()=>$e,NIBGATE_REPUTATION_CONTRACT:()=>Ee,NIBGATE_REPUTATION_RPC_URL:()=>je,PAYMENT_RAILS:()=>G,UNLOCK_MODES:()=>D,checkResourceAccess:()=>C,contentRatingHash:()=>Ce,createCircleGatewayBrowserAdapter:()=>$,createEvmGatewayUnlock:()=>j,createGate:()=>E,createHostedUnlock:()=>ze,createNibgate:()=>Te,createNibgateContentSettings:()=>Qe,createOnchainRating:()=>ie,createTransferCheckout:()=>F,createWalletCheckout:()=>ne,mountRatingUI:()=>ue,nibgate:()=>xe,normalizeAccessPolicy:()=>v,normalizeContentType:()=>N,normalizePaymentRail:()=>U,normalizeResource:()=>k,normalizeUnlockPolicy:()=>O,payAndUnlockResource:()=>L,payWithPaymentSignature:()=>z,payWithTransfer:()=>le,rateContentOnchain:()=>se,rateResource:()=>Y,reviewTextHash:()=>Fe,settingsToAccessPolicy:()=>Ke,settingsToUnlockPolicy:()=>Ze,setupResourcePage:()=>re,trackResourcePage:()=>M,validateResourceMetadata:()=>Z});var G=["gateway","transfer"];function U(t,e="gateway"){let r=String(t||"").trim().toLowerCase().replace(/[-\s]+/g,"_");return r==="circle_gateway"||r==="x402"?"gateway":r==="direct_transfer"||r==="wallet_transfer"?"transfer":G.includes(r)?r:e}var B=["music","video","article","image"],ot={audio:"music",song:"music",track:"music",album:"music",playlist:"music",photo:"image",picture:"image",illustration:"image",art:"image",movie:"video",clip:"video"},H=["free","paid","blocked"],D=["one_time","metered_stream","metered_read","time_pass","agent_quota"];function N(t){let e=String(t||"").trim().toLowerCase();return B.includes(e)?e:ot[e]||"article"}function fe(t,e="paid"){let r=String(t||"").trim().toLowerCase();return H.includes(r)?r:e}function v(t={}){if(typeof t=="string"){let e=fe(t);return{humans:e,agents:e}}return{humans:fe(t.humans||t.human||t.default,"paid"),agents:fe(t.agents||t.agent||t.default,"paid")}}function O(t={}){let e=typeof t=="string"?{mode:t}:t||{},r=String(e.mode||e.type||"one_time").trim().toLowerCase().replace(/[-\s]+/g,"_");return{...e,mode:D.includes(r)?r:"one_time"}}function ge(){return typeof window<"u"?window:null}function I(t){let e=ge();if(!e)return"";let r=`meta[name="${t}"], meta[property="${t}"]`,n=e.document.querySelector(r);return n&&n.getAttribute("content")||""}function ct(t){let e=ge();if(!(!e||!t))return`${e.location.origin}${t.startsWith("/")?t:"/"+t}`}function st(){return I("og:image")||void 0}function it(){return I("og:description")||I("description")||void 0}function ut(){let t=ge();return I("og:title")||I("twitter:title")||(t?t.document.title:"")||void 0}function lt(){let t=I("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 dt(){let t=I("keywords");if(t)return t.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).slice(0,8)}function mt(t,e){return e&&typeof e=="object"&&Object.keys(e).length>0?v(e):t!=null&&t!==""&&Number.parseFloat(t)>0?{humans:"paid",agents:"paid"}:{humans:"free",agents:"free"}}function k(t={}){let e=typeof t=="string"?{id:t}:t||{},{publisher:r,publisherId:n,publisherWallet:a,publisherHandle:o,publisherName:c,publisherProfileUrl:i,publisherOrigin:s,publisherVerification:u,authorHandle:l,...p}=e,d=e.path||e.route||void 0,f=e.url||ct(d)||void 0,y=e.access,w=e.price??e.amount??"";return{...p,id:String(e.id||e.contentId||e.slug||"").trim(),title:String(e.title||e.name||ut()||"Untitled").trim(),type:N(e.type||e.contentType||lt()),price:w,currency:e.currency||"USDC",paymentRail:U(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:f,imageUrl:e.imageUrl||e.image||st()||void 0,description:e.description||e.summary||it()||void 0,tags:e.tags||dt()||void 0,access:mt(w,y),unlock:O(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 ye(t){return Array.isArray(t)?t.length>0:t!=null&&String(t).trim()!==""}function ft(t={}){let e=v(t.access);return e.humans==="paid"||e.agents==="paid"||Number.parseFloat(t.price||t.amount||"0")>0}function Z(t={},e={}){let r=k(t),n=[],a=[],o=e.required||["id","type"],c=e.recommended||["title","url","description","imageUrl","tags"];for(let s of o)ye(r[s])||a.push(`Missing required content metadata: ${s}`);for(let s of c)ye(r[s])||n.push(`Missing recommended discovery metadata: ${s}`);B.includes(r.type)||a.push("Content type must be one of music, video, article, or image."),r.url&&!/^https?:\/\//i.test(String(r.url))&&n.push("Use an absolute canonical url for stronger discovery identity."),r.imageUrl&&!/^https?:\/\//i.test(String(r.imageUrl))&&n.push("Use an absolute imageUrl for thumbnails in Explore and agent discovery."),ft(r)&&(ye(r.price)||a.push("Paid content requires price."));let i=Math.max(0,100-a.length*20-n.length*8);return{ok:a.length===0,score:i,errors:a,warnings:n,resource:r}}function h(){return typeof window>"u"?null:window}function yt(t,e){let r=h();return r?(r.__nibgateClientQueue=r.__nibgateClientQueue||[],r.__nibgateClientQueue.push({eventName:t,payload:e}),!0):!1}function X(){let t=h();if(!t?.nibgateHub?.track||!Array.isArray(t.__nibgateClientQueue))return!1;let e=t.__nibgateClientQueue.splice(0);return e.forEach(r=>{t.nibgateHub.track(r.eventName,r.payload)}),e.length>0}function gt(){let t=h();if(!t||t.__nibgateClientFlushStarted)return;t.__nibgateClientFlushStarted=!0;let e=0,r=t.setInterval(()=>{e+=1,X(),(t.nibgateHub?.track||e>=80)&&(t.clearInterval(r),t.__nibgateClientFlushStarted=!1)},250)}function x(t,e={}){let r=h();return r?r.nibgateHub?.track?(r.nibgateHub.track(t,e),X(),!0):(yt(t,e),gt(),!1):!1}function _(t,e={}){return{...e,resource:k(t)}}function pe(t){return`nibgate:unlock:${t.id||t.path||t.url||"content"}`}function he(t){return`nibgate:payment-proof:${t.id||t.path||t.url||"content"}`}function ee(t,e={}){let r=h();if(!r)return!1;try{return r.localStorage.setItem(pe(t),JSON.stringify({unlockedAt:new Date().toISOString(),payment:e})),!0}catch{return!1}}function we(t,e){let r=h();if(!r||!e)return!1;try{let n=typeof e=="string"?e:JSON.stringify(e);return r.localStorage.setItem(he(t),n),!0}catch{return!1}}function ke(t){let e=h();if(!e)return"";try{return e.localStorage.getItem(he(t))||""}catch{return""}}function ve(t){let e=k(t),r=h();if(!r)return!1;try{return r.localStorage.removeItem(he(e)),r.localStorage.removeItem(pe(e)),!0}catch{return!1}}function Me(t){let e=h();if(!e)return!1;try{return!!e.localStorage.getItem(pe(t))}catch{return!1}}var Ue=null;function Be(t){Ue=t}function E(t,e={}){let r=k(t),n=e.client||Ue;return{resource:r,content(a={}){return n.content(r,a)},view(a={}){return n.view(r,a)},track(a,o={}){return n.track(a,_(r,o))},unlockStarted(a={}){return n.unlockStarted(r,a)},unlockCompleted(a={}){return ee(r,a),n.unlockCompleted(r,a)},paymentCompleted(a={}){return n.paymentCompleted(r,a)},isUnlocked(){return Me(r)},markUnlocked(a={}){return ee(r,a),n.unlockCompleted(r,a),n.paymentCompleted(r,a),!0},async unlock(a={}){n.unlockStarted(r);let o=typeof a=="function"?await a(r):a;return ee(r,o||{}),n.unlockCompleted(r,o||{}),n.paymentCompleted(r,o||{}),{unlocked:!0,resource:r,payment:o||{}}},rate(a={},o={}){return n.rateResource(r,a,o)}}}te();function M(t,e={}){let r=E(t,e.gateOptions||{}),n=Z(r.resource,e.validation||{});return(n.warnings.length||n.errors.length)&&e.warn!==!1&&h()?.console?.warn&&h().console.warn("Nibgate content metadata needs attention",n),r.content({source:e.source,metadataQuality:{score:n.score,warnings:n.warnings,errors:n.errors},...e.content||{}}),r.view({source:e.source,path:e.path||h()?.location?.pathname||r.resource.path,referrer:e.referrer??h()?.document?.referrer??"",...e.view||{}}),r}function re(t,e={}){let r=M(t,e),n=h();if(!n)return r;let a=typeof e.button=="string"?n.document.querySelector(e.button):e.button,o=typeof e.status=="string"?n.document.querySelector(e.status):e.status,c=e.onStatus||(i=>{o&&(o.textContent=i||"")});return a&&a.addEventListener("click",async()=>{a.disabled=!0;try{await C(t,{...e,onStatus:c})}finally{a.disabled=!1}}),r}async function C(t,e={}){let r=E(t,e.gateOptions||{}),n=e.accessPath||r.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.checkingMessage||"Checking access route..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"nibgate-access-route"});let o=await fetch(n,{method:e.method||"GET",headers:{accept:"application/json",...ke(r.resource)?{"x-nibgate-payment-proof":ke(r.resource)}:{},...e.headers||{}},body:e.body}),c=await o.json().catch(()=>({}));if(o.status===402){if(r.track("payment_challenge_returned",{source:e.source,challenge:c,resource:r.resource}),a(e.challengeMessage||"Payment challenge returned. Continue with checkout."),typeof e.createPaymentSignature=="function"||typeof e.checkout=="function")return z(t,{...e,challenge:c,paymentRequiredHeader:o.headers.get("PAYMENT-REQUIRED")||o.headers.get("payment-required")||""});if(e.autoPay&&e.payPath){let s=await L(t,e);return s.ok&&e.retryAfterPay!==!1?C(t,{...e,autoPay:!1}):s}return{ok:!1,status:o.status,challenge:c,resource:r.resource,response:o}}if(!o.ok)return a(c.error||e.errorMessage||"Access check failed"),{ok:!1,status:o.status,error:c.error||"Access check failed",payload:c,resource:r.resource,response:o};let i=e.payment||c.payment||null;return i&&(r.unlockCompleted(i),r.paymentCompleted(i)),a(e.successMessage||"Access allowed and Nibgate events emitted."),{ok:!0,status:o.status,payload:c,payment:i,resource:r.resource,response:o}}async function z(t,e={}){let r=E(t,e.gateOptions||{}),n=e.accessPath||r.resource.accessPath||"/api/nibgate/access",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Waiting for wallet payment approval..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"wallet-gateway"});let o=e.paymentSignature||"",c=e.memo||"",i=e.payment||{};if(!o){let d=e.paymentRequiredHeader||"",f=e.challenge||null,w=await(e.createPaymentSignature||e.checkout)({resource:r.resource,challenge:f,paymentRequiredHeader:d,accessPath:n});o=w?.paymentSignature||w?.signature||w?.payment||"",c=w?.memo||w?.paymentMemo||"",i=w?.metadata||w?.paymentMetadata||w||{}}if(!o){let d="Wallet did not return a payment signature.";return r.track("payment_failed",{source:e.source,error:d}),a(d),{ok:!1,status:400,error:d,resource:r.resource}}let s=await fetch(n,{method:e.method||"GET",headers:{accept:"application/json","payment-signature":o,...c?{"payment-memo":c}:{},...e.headers||{}}}),u=await s.text(),l={};try{l=u?JSON.parse(u):{}}catch{l={error:u||"Payment verification failed"}}if(!s.ok){let d=l.detail||l.reason||l.invalidReason||l.error||u||"Payment verification failed",f=typeof d=="string"?d:W(d);return r.track("payment_failed",{source:e.source,status:s.status,error:f,...i}),a(e.paymentErrorMessage||f),{ok:!1,status:s.status,error:f,payload:l,resource:r.resource,response:s}}let p=l.payment||{paymentProvider:e.paymentProvider||"wallet-gateway",paymentId:o,memo:c,amount:Number(r.resource.price||0),revenue:Number(r.resource.price||0),currency:r.resource.currency||"USDC",...i};return we(r.resource,l.unlockProof),r.markUnlocked(p),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:s.status,payload:l,payment:p,resource:r.resource,response:s}}async function L(t,e={}){let r=E(t,e.gateOptions||{}),n=e.payPath||r.resource.payPath||"/api/nibgate/pay",a=typeof e.onStatus=="function"?e.onStatus:()=>{};a(e.paymentMessage||"Starting payment..."),r.unlockStarted({source:e.source,paymentProvider:e.paymentProvider||"circle-gateway"});let o=await fetch(n,{method:e.payMethod||"POST",headers:{accept:"application/json","content-type":"application/json",...e.payHeaders||{}},body:JSON.stringify({resource:r.resource,...e.payPayload||{}})}),c=await o.json().catch(()=>({}));if(!o.ok||!c.ok)return r.track("payment_failed",{source:e.source,status:o.status,error:c.error||"Payment failed",detail:c.detail||""}),a(c.detail||c.error||e.paymentErrorMessage||"Payment failed."),{ok:!1,status:o.status,payload:c,resource:r.resource,response:o};let i=c.payment||{paymentProvider:e.paymentProvider||"circle-gateway",paymentId:c.paymentId||`nibgate_payment_${Date.now()}`,amount:Number(r.resource.price||0),revenue:Number(r.resource.price||0),currency:r.resource.currency||"USDC"};return we(r.resource,c.unlockProof),r.markUnlocked(i),a(e.paymentSuccessMessage||"Payment verified. Content unlocked."),{ok:!0,status:o.status,payload:c,payment:i,resource:r.resource,response:o}}function ht(t,e){let r=h();if(!t||!r)return;let n=typeof t=="string"?r.document.querySelector(t):t;n&&(n.textContent=e||"")}function He(t,e){let r=h();if(!t||!r)return;let n=typeof t=="string"?r.document.querySelector(t):t;n&&"disabled"in n&&(n.disabled=!!e)}function ne(t,e={}){let r=k(t),n=e.accessPath||r.accessPath||"/api/nibgate/access",a=e.button||null,o=e.status||null,c=typeof e.onStatus=="function"?e.onStatus:l=>ht(o,l),i=e.checkout||e.createPaymentSignature||e.pay;if(typeof i!="function")throw new Error("createWalletCheckout requires checkout/createPaymentSignature/pay callback for the active wallet or Gateway adapter.");async function s(l={}){He(a,!0);try{return await C(r,{...e,...l,accessPath:n,createPaymentSignature:i,onStatus:c})}finally{He(a,!1)}}function u(){let l=h();if(!l||!a)return{unlock:s};let p=typeof a=="string"?l.document.querySelector(a):a;return p&&p.addEventListener("click",()=>s().catch(d=>c(d.message||"Checkout failed."))),{unlock:s}}return{resource:r,unlock:s,mount:u}}function V(t={}){let e=typeof t=="number"?t:t.rating??t.stars??t.ratingValue??t.score,r=Number.parseFloat(e),n=Number.isFinite(r)?Math.max(1,Math.min(50,r<=5?Math.round(r*10):Math.round(r))):null;return{...t,rating:n?n/10:void 0,ratingValue:n||void 0}}function ae(t,e={},r={}){let n=k(t),o=V(e).ratingValue||0;return["Nibgate content rating",`site:${r.siteDomain||r.domain||n.siteDomain||n.domain||""}`,`content:${n.externalId||n.id}`,`url:${n.url||r.url||""}`,`rating:${o}`,"I confirm this rating is tied to my unlock/payment proof."].join(`
|
|
2
|
+
`)}te();async function $(t={}){return(await Promise.resolve().then(()=>(De(),Ge))).createCircleGatewayBrowserAdapter(t)}var Tt="https://api.nibgate.xyz/api/hub/pay";function xt(t,e){return e.hosted||e.accessPath==="hosted"?Tt:e.accessPath||t.accessPath||"/api/nibgate/access"}function j(t,e={}){let r=E(t,e.gateOptions||{}),n=h(),a=xt(r.resource,e),o=e.source||"nibgate-evm-gateway",c=e.network||"eip155:5042002",i=typeof e.status=="string"?n?.document.querySelector(e.status):e.status,s=typeof e.connectButton=="string"?n?.document.querySelector(e.connectButton):e.connectButton,u=typeof e.disconnectButton=="string"?n?.document.querySelector(e.disconnectButton):e.disconnectButton,l=typeof e.unlockButton=="string"?n?.document.querySelector(e.unlockButton):e.unlockButton,p=typeof e.clearButton=="string"?n?.document.querySelector(e.clearButton):e.clearButton,d=typeof e.walletLabel=="string"?n?.document.querySelector(e.walletLabel):e.walletLabel,f=typeof e.unlockedTarget=="string"?n?.document.querySelector(e.unlockedTarget):e.unlockedTarget,y="",w=!1;function A(m){typeof e.onStatus=="function"&&e.onStatus(m),i&&(i.textContent=m||"")}function J(m){return m?`${m.slice(0,6)}...${m.slice(-4)}`:""}function P(){return n?.ethereum||e.provider||null}function R(m){w=!!m,[s,u,l,p].forEach(b=>{b&&"disabled"in b&&(b.disabled=w||b===s&&!P()||b===u&&!y)})}function g(){let m=!!P();d&&(d.textContent=y?J(y):m?"Ready to connect":"No wallet detected"),s&&(s.textContent=y?"Connected":"Connect wallet"),u&&(u.textContent="Disconnect"),s&&"disabled"in s&&(s.disabled=w||!m),u&&"disabled"in u&&(u.disabled=w||!y)}function S(m,b={}){l&&(l.textContent=m?"Unlocked":`Unlock for ${r.resource.price} ${r.resource.currency||"USDC"}`),f&&("hidden"in f&&(f.hidden=!m),f.setAttribute("aria-hidden",m?"false":"true")),m&&r.markUnlocked(b)}async function T(){R(!0),A("Opening wallet connection...");try{let m=P();if(!m)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");let b=await m.request({method:"eth_requestAccounts"});if(y=Array.isArray(b)&&b[0]||"",!y)throw new Error("No wallet account selected.");return g(),A("Wallet connected. You can unlock now."),y}finally{R(!1)}}async function Q(){R(!0);try{let m=P();if(m?.request&&y)try{await m.request({method:"wallet_revokePermissions",params:[{eth_accounts:{}}]})}catch{}return y="",g(),A(e.disconnectMessage||"Wallet disconnected for this page."),!0}finally{R(!1)}}async function K(m){let b=P();if(!b)throw new Error(e.noWalletMessage||"Install or open an EVM wallet to continue.");return y||await T(),(await $({network:c,signer:{address:y,signTypedData:Xe=>b.request({method:"eth_signTypedData_v4",params:[y,W(Xe)]})},clientModule:e.circleClientModule})).pay(m)}async function Ae(){R(!0);try{y||await T(),R(!0),A("Requesting Gateway unlock...");let m=await C(r.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 ${r.resource.title||"content"}.`,method:e.method,headers:e.headers,body:e.body,checkout:K,onStatus:A});return m.ok&&(S(!0,m.payment||{}),typeof e.onUnlock=="function"&&e.onUnlock(m)),m}catch(m){let b=m?.message||"Unlock failed. Please try again.";return A(b),{ok:!1,status:0,error:b,resource:r.resource}}finally{R(!1),g()}}function _e(){ve(r.resource),S(!1),A("Local payment proof cleared. The next unlock will require Gateway payment again.")}async function Re(){let m=P();try{let b=m?await m.request({method:"eth_accounts"}):[];y=Array.isArray(b)&&b[0]||""}catch{}g(),S(!1)}function Pe(){return s?.addEventListener?.("click",()=>T().catch(m=>A(m?.message||"Could not connect wallet."))),u?.addEventListener?.("click",()=>Q().catch(m=>A(m?.message||"Could not disconnect wallet."))),l?.addEventListener?.("click",()=>Ae()),p?.addEventListener?.("click",_e),Re(),M(r.resource,{source:o}),Ie}let Ie={resource:r.resource,connect:T,disconnect:Q,unlock:Ae,clear:_e,hydrate:Re,mount:Pe,getWalletAddress:()=>y};return e.autoMount!==!1&&Pe(),Ie}function ze(t,e={}){return j(t,{...e,hosted:!0,noWalletMessage:e.noWalletMessage||"Install MetaMask or another EVM wallet to unlock premium content."})}var At="0xc62fad09",Se=`0x${"0".repeat(64)}`,Ve="nibgate:content:v1",qe=5042002,$e="Arc Testnet",je="https://rpc.testnet.arc.network",Ee="0x9f27fd62e75f86a3c7addfdba443aab1f930e281",Ye=[{type:"function",name:"rateContent",stateMutability:"nonpayable",inputs:[{name:"contentId",type:"bytes32"},{name:"rating",type:"uint8"},{name:"reviewHash",type:"bytes32"},{name:"unlockRef",type:"string"}],outputs:[]}];function _t(t=""){return String(t||"").replace(/^0x/i,"").toLowerCase()}function Le(t=""){let e=_t(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 Rt(t=""){return Array.from(new TextEncoder().encode(String(t||""))).map(e=>e.toString(16).padStart(2,"0")).join("")}function Pt(t=""){let e=Rt(t),r=e.length/2,n=Math.ceil(r/32)*64;return be(r)+e.padEnd(n,"0")}function It({contentId:t,ratingValue:e,reviewHash:r,unlockRef:n}){return At+Le(t)+be(e)+Le(r||Se)+be(128)+Pt(n||"")}function Ce(t,e={}){let r=e.contentId||e.contentHash;if(!r)throw new Error("contentId/contentHash is required. Use the Nibgate backend prepare endpoint or pass a known content hash.");return r}function Fe(t=""){if(!t)return Se;throw new Error("Text review hashing is not available in direct-browser mode. Pass reviewHash from your app/backend.")}async function Nt(t,e={}){if(e.contentId||e.contentHash)return{contentId:e.contentId||e.contentHash};let r=e.prepareUrl||e.indexUrl?.replace(/\/index$/,"/prepare");if(!r)throw new Error("contentId/contentHash or prepareUrl is required for onchain rating.");let n=await fetch(r,{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 n.json().catch(()=>({}));if(!n.ok||!a.contentHash)throw new Error(a.error||"Could not prepare Nibgate onchain rating.");return a}async function se(t,e={}){let r=k(t),n=V(e.rating??e.stars??e);if(!n.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||Ee;if(!o)throw new Error("Nibgate reputation contract address is not configured.");let c=await a.request({method:"eth_requestAccounts"}),i=Array.isArray(c)&&c[0]||"";if(!i)throw new Error("No wallet account selected.");let s=await Nt(r,e),u=s.contentHash||s.contentId||Ce(r,e),l=e.reviewHash||Se,p=String(e.unlockRef||e.paymentId||e.txHash||""),d=It({contentId:u,ratingValue:n.ratingValue,reviewHash:l,unlockRef:p}),f=await a.request({method:"eth_sendTransaction",params:[{from:i,to:o,data:d}]}),y=_(r,{rating:n.rating,ratingValue:n.ratingValue,walletAddress:i,txHash:f,contentHash:u,reviewHash:l,proofType:"onchain_pending",proof:p,paymentId:e.paymentId,actor:e.actor||"human"});return x("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:f,resource:r,url:r.url,path:r.path,actor:e.actor||"human"})}).catch(()=>null),{txHash:f,walletAddress:i,contentId:u,ratingValue:n.ratingValue,reviewHash:l}}function Y(t,e={},r={}){let n=k(t),a=V(e),o={...r,...a,ratingMessage:r.ratingMessage||e.message||e.ratingMessage||ae(n,a,r),ratingSignature:r.ratingSignature||e.signature||e.ratingSignature||void 0,resource:n};return x("content_rating",o)}function ie(t,e={}){let r=E(t,e.gateOptions||{}),n=h(),a=typeof e.status=="string"?n?.document.querySelector(e.status):e.status,o=typeof e.ratingTarget=="string"?n?.document.querySelector(e.ratingTarget):e.ratingTarget,c=e.ratingButtons||e.buttons||"[data-nibgate-rating-value], [data-rating]",s=(Array.isArray(e.buttons)?e.buttons:typeof e.buttons=="string"?Array.from(n?.document.querySelectorAll(e.buttons)||[]):e.buttons?[e.buttons]:null)||Array.from(n?.document.querySelectorAll(c)||[]),u=e.source||"nibgate-onchain-rating",l=!1,p=e.payment||null;function d(g){typeof e.onStatus=="function"&&e.onStatus(g),a&&(a.textContent=g||"")}function f(g){l=!!g,s.forEach(S=>{S&&"disabled"in S&&(S.disabled=l)})}function y(g=null){return p=g||null,p}function w(g){return o&&("hidden"in o&&(o.hidden=!g),o.setAttribute("aria-hidden",g?"false":"true")),!!g}function A(g){let S=g?.dataset?.nibgateRatingValue||g?.dataset?.rating||g?.value||g?.textContent,T=Number.parseFloat(String(S||"").replace(/[^\d.]/g,""));return Number.isFinite(T)?T:Number(e.rating||e.stars||0)}async function J(g={}){f(!0);try{let S=Number.parseFloat(g.rating??g.stars??g.value??e.rating??e.stars);if(!Number.isFinite(S))throw new Error("Choose a rating before sending.");let T=g.paymentId||e.paymentId||(typeof e.getPaymentId=="function"?e.getPaymentId():p?.paymentId),Q=g.unlockRef||e.unlockRef||(typeof e.getUnlockRef=="function"?e.getUnlockRef():null)||T||p?.txHash||p?.transactionHash||"";d(e.pendingMessage||"Send the onchain rating transaction...");let K=await se(r.resource,{...e,...g,rating:S,paymentId:T,unlockRef:Q,source:u});return d(e.successMessage||"Rating sent to Nibgate reputation."),typeof e.onRated=="function"&&e.onRated(K),K}catch(S){let T=S?.message||e.errorMessage||"Rating failed.";throw d(T),typeof e.onError=="function"&&e.onError(S),S}finally{f(!1)}}function P(){return s.forEach(g=>{g?.addEventListener?.("click",()=>J({rating:A(g)}).catch(()=>null))}),e.visible!==void 0&&w(!!e.visible),R}let R={resource:r.resource,rate:J,mount:P,setPayment:y,setVisible:w};return e.autoMount!==!1&&P(),R}function ue(t,e={}){let r=E(t,e.gateOptions||{}),n=h();if(!n)return null;let a=typeof e.target=="string"?n.document.querySelector(e.target):e.target;if(!a)return null;let o=[1,2,3,4,5],c=0,i=n.document.createElement("div");i.className="nibgate-rating-ui",i.style.cssText="display:flex;align-items:center;gap:4px;padding:8px 0";let s=o.map(d=>{let f=n.document.createElement("button");return f.type="button",f.dataset.nibgateRatingValue=String(d),f.setAttribute("aria-label",`${d} star${d>1?"s":""}`),f.innerHTML="\u2606",f.style.cssText="background:none;border:none;font-size:24px;cursor:pointer;color:#ccc;transition:color 0.15s;padding:2px;line-height:1",f.addEventListener("mouseenter",()=>{s.forEach((y,w)=>y.style.color=w<d?"#f5b342":"#ccc")}),f.addEventListener("mouseleave",()=>{s.forEach((y,w)=>y.style.color=w<c?"#f5b342":"#ccc")}),f.addEventListener("click",()=>{c=d,s.forEach((y,w)=>y.style.color=w<d?"#f5b342":"#ccc"),Y(r.resource,{rating:d}).catch(()=>{})}),i.appendChild(f),f}),u=n.document.createElement("span");u.style.cssText="font-size:13px;color:#888;margin-left:8px",u.textContent=e.label||"Rate this content",i.appendChild(u),a.appendChild(i);function l(d,f={}){return r.rate({...f,rating:d})}function p(d){c=d,s.forEach((f,y)=>f.style.color=y<d?"#f5b342":"#ccc")}return{resource:r.resource,container:i,setRating:p,rate:l}}function F(t,e={}){let r=k({...t,paymentRail:"transfer"}),n=e.sendTransfer||e.transfer;if(typeof n!="function")throw new Error("createTransferCheckout requires sendTransfer({ resource, recipient, amount, currency, network }) and a server verifyTransfer hook.");return{resource:r,async pay(a={}){let o=r.recipient||r.payTo,c=String(r.price||r.amount||"0"),i=r.currency||"USDC",s=e.network||a.challenge?.accepts?.[0]?.network||"eip155:5042002",u=await n({resource:r,recipient:o,amount:c,currency:i,network:s,challenge:a.challenge}),l=u?.txHash||u?.hash||u?.transactionHash||u?.paymentId||"";if(!l)throw new Error("Transfer checkout did not return a txHash.");return{paymentSignature:l,signature:l,memo:u.memo||"",metadata:{paymentProvider:"direct-transfer",paymentId:l,txHash:l,recipient:o,amount:Number(c),currency:i,network:s,...u.metadata||u}}}}}async function le(t,e={}){let n=await(e.checkout||F(t,e).pay)({resource:k(t),challenge:e.challenge||null}),a=n?.metadata?.txHash||n?.txHash||n?.paymentSignature||n?.signature||"";if(!a)throw new Error("Transfer checkout did not return a txHash.");return C(t,{...e,headers:{...e.headers||{},"x-nibgate-transfer-tx":a},payment:n.metadata||{paymentProvider:"direct-transfer",txHash:a,paymentId:a}})}function Te(t={}){let e=t.resource?k(t.resource):null;function r(n={}){return k({...e||{},...typeof n=="string"?{id:n}:n})}return{content(n,a={}){return x("content_registered",_(r(n),a))},registerContent(n,a={}){return x("content_registered",_(r(n),a))},view(n,a={}){return x("resource_view",_(r(n),a))},track(n,a={}){return x(n||"custom",a)},unlockStarted(n,a={}){return x("unlock_started",_(r(n),a))},unlockCompleted(n,a={}){return x("unlock_completed",_(r(n),a))},paymentCompleted(n,a={}){return x("payment_completed",_(r(n),a))},rateResource(n,a={},o={}){return Y(r(n),a,o)},ratingMessage(n,a={},o={}){return ae(r(n),a,o)},gate(n,a={}){return E(r(n),{...a,client:this})},trackResourcePage(n,a={}){return M(r(n),a)},checkResourceAccess(n,a={}){return C(r(n),a)},payWithPaymentSignature(n,a={}){return z(r(n),a)},createWalletCheckout(n,a={}){return ne(r(n),a)},createCircleGatewayBrowserAdapter(n={}){return $(n)},createTransferCheckout(n,a={}){return F(r(n),a)},payWithTransfer(n,a={}){return le(r(n),a)},createEvmGatewayUnlock(n,a={}){return j(r(n),a)},createOnchainRating(n,a={}){return ie(r(n),a)},mountRatingUI(n,a={}){return ue(r(n),a)},payAndUnlockResource(n,a={}){return L(r(n),a)},setupResourcePage(n,a={}){return re(r(n),a)},normalizeResource:r,normalizeContentType:N,flush:X}}var xe=Te();Be(xe);var Je=[{name:"publishToNibgate",label:"Publish to Nibgate discovery",type:"boolean",defaultValue:!0},{name:"type",label:"Content type",type:"select",options:B,defaultValue:"article"},{name:"humanAccess",label:"Human access",type:"select",options:H,defaultValue:"paid"},{name:"agentAccess",label:"Agent access",type:"select",options:H,defaultValue:"paid"},{name:"unlockMode",label:"Unlock mode",type:"select",options:D,defaultValue:"one_time"},{name:"paymentRail",label:"Payment rail",type:"select",options:G,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 Qe(t={}){let e=v(t.access||{humans:t.humanAccess,agents:t.agentAccess}),r=O(t.unlock||t.unlockMode||"one_time");return{publishToNibgate:t.publishToNibgate??t.publishedToNibgate??!0,type:N(t.type||t.contentType||"article"),humanAccess:e.humans,agentAccess:e.agents,unlockMode:r.mode,paymentRail:U(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 Ke(t={}){return v({humans:t.humanAccess,agents:t.agentAccess})}function Ze(t={}){return O(t.unlockMode||t.unlock||"one_time")}return at(vt);})();
|
|
3
3
|
//# sourceMappingURL=nibgate.min.js.map
|