@campnetwork/origin 1.2.8 → 1.3.0-alpha.1

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/core.cjs CHANGED
@@ -14,7 +14,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
14
  PERFORMANCE OF THIS SOFTWARE.
15
15
  ***************************************************************************** */
16
16
  /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
17
- function a(e,t,n,i){return new(n||(n=Promise))((function(a,r){function s(e){try{d(i.next(e))}catch(e){r(e)}}function o(e){try{d(i.throw(e))}catch(e){r(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,o)}d((i=i.apply(e,t||[])).next())}))}function r(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)}function s(e,t,n,i,a){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?a.call(e,n):a?a.value=n:t.set(e,n),n}"function"==typeof SuppressedError&&SuppressedError;
17
+ function a(e,t,n,i){return new(n||(n=Promise))((function(a,s){function r(e){try{d(i.next(e))}catch(e){s(e)}}function o(e){try{d(i.throw(e))}catch(e){s(e)}}function d(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,o)}d((i=i.apply(e,t||[])).next())}))}function s(e,t,n,i){if("a"===n&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?i:"a"===n?i.call(e):i?i.value:t.get(e)}function r(e,t,n,i,a){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?a.call(e,n):a?a.value=n:t.set(e,n),n}"function"==typeof SuppressedError&&SuppressedError;
18
18
  /**
19
19
  * Adapter for viem WalletClient
20
20
  */
@@ -56,14 +56,28 @@ e._isSigner||e.provider&&"function"==typeof e.signMessage?new d(e):new u(e)}
56
56
  * @param chain The chain to use
57
57
  * @param rpcUrl Optional RPC URL (defaults to chain's default RPC)
58
58
  * @returns WalletClient
59
- */const c={id:123420001114,name:"Basecamp",nativeCurrency:{decimals:18,name:"Camp",symbol:"CAMP"},rpcUrls:{default:{http:["https://rpc-campnetwork.xyz","https://rpc.basecamp.t.raas.gelato.cloud"]}},blockExplorers:{default:{name:"Explorer",url:"https://basecamp.cloud.blockscout.com/"}}},m={id:484,name:"Camp Network",nativeCurrency:{decimals:18,name:"Camp",symbol:"CAMP"},rpcUrls:{default:{http:["https://rpc.camp.raas.gelato.cloud/"]}},blockExplorers:{default:{name:"Explorer",url:"https://camp.cloud.blockscout.com/"}}};class h extends Error{constructor(e,t){super(e),this.name="APIError",this.statusCode=t||500,Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:this.statusCode||500}}}
59
+ */const c={id:123420001114,name:"Basecamp",nativeCurrency:{decimals:18,name:"Camp",symbol:"CAMP"},rpcUrls:{default:{http:["https://rpc-campnetwork.xyz","https://rpc.basecamp.t.raas.gelato.cloud"]}},blockExplorers:{default:{name:"Explorer",url:"https://basecamp.cloud.blockscout.com/"}}},m={id:484,name:"Camp Network",nativeCurrency:{decimals:18,name:"Camp",symbol:"CAMP"},rpcUrls:{default:{http:["https://rpc.camp.raas.gelato.cloud/"]}},blockExplorers:{default:{name:"Explorer",url:"https://camp.cloud.blockscout.com/"}}};class h extends Error{constructor(e,t){super(e),this.name="APIError",this.statusCode=t||500,Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:this.statusCode||500}}}class T extends Error{constructor(e){super(e),this.name="ValidationError",Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:400}}}class f extends Error{constructor(e){super(e),this.name="AuthenticationError",Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:401}}}class v extends Error{constructor(e){super(e),this.name="WalletError",Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:400}}}class A extends Error{constructor(e,t){super(e),this.name="ContractError",this.contractName=null==t?void 0:t.contractName,this.methodName=null==t?void 0:t.methodName,Error.captureStackTrace(this,this.constructor)}toJSON(){return{error:this.name,message:this.message,statusCode:400,contractName:this.contractName,methodName:this.methodName}}}function w(e){if(e instanceof Error)return e.message;if("string"==typeof e)return e;try{return JSON.stringify(e)}catch(t){return String(e)}}
60
60
  // @ts-ignore
61
- let T=null,f=null,v=null;const w=t=>{var n;const i=v||c;return f&&(null===(n=f.chain)||void 0===n?void 0:n.id)===i.id||(f=e.createPublicClient({chain:i,transport:e.http()})),f};var A=[{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"dataStatus",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint8",internalType:"enum IIpNFT.DataStatus"}],stateMutability:"view"},{type:"function",name:"disputeModule",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"erc6551Account",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC6551Account"}],stateMutability:"view"},{type:"function",name:"erc6551Registry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC6551Registry"}],stateMutability:"view"},{type:"function",name:"finalizeDelete",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"getAccount",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"account",type:"address",internalType:"address"}],stateMutability:"nonpayable"},{type:"function",name:"getApproved",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"getTerms",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"}]}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[{name:"name_",type:"string",internalType:"string"},{name:"symbol_",type:"string",internalType:"string"},{name:"maxTermDuration_",type:"uint256",internalType:"uint256"},{name:"signer_",type:"address",internalType:"address"},{name:"wCAMP_",type:"address",internalType:"address"},{name:"minTermDuration_",type:"uint256",internalType:"uint256"},{name:"minPrice_",type:"uint256",internalType:"uint256"},{name:"maxRoyaltyBps_",type:"uint256",internalType:"uint256"},{name:"registry_",type:"address",internalType:"contract IERC6551Registry"},{name:"implementation_",type:"address",internalType:"contract IERC6551Account"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isApprovedForAll",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"operator",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"markDisputed",inputs:[{name:"_tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"marketPlace",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IMarketplace"}],stateMutability:"view"},{type:"function",name:"maxRoyaltyBps",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"maxTermDuration",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"minPrice",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"minTermDuration",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"mintWithSignature",inputs:[{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"creatorContentHash",type:"bytes32",internalType:"bytes32"},{name:"uri",type:"string",internalType:"string"},{name:"licenseTerms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"}]},{name:"deadline",type:"uint256",internalType:"uint256"},{name:"parents",type:"uint256[]",internalType:"uint256[]"},{name:"isIP",type:"bool",internalType:"bool"},{name:"signature",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"ownerOf",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"paused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"safeTransferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"safeTransferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setApprovalForAll",inputs:[{name:"operator",type:"address",internalType:"address"},{name:"approved",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setDisputeModule",inputs:[{name:"_disputeModule",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setMarketPlace",inputs:[{name:"_marketPlace",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setSigner",inputs:[{name:"_signer",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"signer",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"supportsInterface",inputs:[{name:"interfaceId",type:"bytes4",internalType:"bytes4"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"tokenInfo",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct IIpNFT.TokenInfo",components:[{name:"tokenURI",type:"string",internalType:"string"},{name:"isIP",type:"bool",internalType:"bool"},{name:"contentHash",type:"bytes32",internalType:"bytes32"},{name:"terms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"}]},{name:"status",type:"uint8",internalType:"enum IIpNFT.DataStatus"}]}],stateMutability:"view"},{type:"function",name:"tokenURI",inputs:[{name:"_tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateTerms",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"newTerms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"function",name:"wCAMP",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"event",name:"AccessPurchased",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"buyer",type:"address",indexed:!0,internalType:"address"},{name:"periods",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newExpiry",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amountPaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"AgentRegistered",inputs:[{name:"agentId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"ipNftId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"agentAddress",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"approved",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"ApprovalForAll",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"operator",type:"address",indexed:!0,internalType:"address"},{name:"approved",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"ChildIpTagged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"childIp",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIp",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DataDeleted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DataMinted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"contentHash",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"parents",type:"uint256[]",indexed:!1,internalType:"uint256[]"}],anonymous:!1},{type:"event",name:"DisputeAssertion",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"counterEvidenceHash",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"DisputeCancelled",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DisputeJudged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"judgement",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"DisputeModuleUpdated",inputs:[{name:"disputeModule",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DisputeRaised",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"initiator",type:"address",indexed:!0,internalType:"address"},{name:"targetId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"disputeTag",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"MarketPlaceUpdated",inputs:[{name:"marketPlace",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Paused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"RoyaltyPaid",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"royaltyAmount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"protocolAmount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"SignerUpdated",inputs:[{name:"signer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"StatusUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"status",type:"uint8",indexed:!1,internalType:"enum IIpNFT.DataStatus"}],anonymous:!1},{type:"event",name:"TermsUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newPrice",type:"uint128",indexed:!1,internalType:"uint128"},{name:"newDuration",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"paymentToken",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Unpaused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"ERC721IncorrectOwner",inputs:[{name:"sender",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InsufficientApproval",inputs:[{name:"operator",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}]},{type:"error",name:"ERC721InvalidApprover",inputs:[{name:"approver",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidOperator",inputs:[{name:"operator",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidReceiver",inputs:[{name:"receiver",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidSender",inputs:[{name:"sender",type:"address",internalType:"address"}]},{type:"error",name:"ERC721NonexistentToken",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}]},{type:"error",name:"EnforcedPause",inputs:[]},{type:"error",name:"ExpectedPause",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"InvalidDeadline",inputs:[]},{type:"error",name:"InvalidDuration",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidPaymentToken",inputs:[]},{type:"error",name:"InvalidPrice",inputs:[]},{type:"error",name:"InvalidRoyalty",inputs:[]},{type:"error",name:"InvalidSignature",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"NotTokenOwner",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"TokenAlreadyExists",inputs:[]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"Unauthorized",inputs:[]}],g=[{type:"function",name:"MAX_PARENTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"buyAccess",inputs:[{name:"buyer",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"expectedPrice",type:"uint256",internalType:"uint256"},{name:"expectedDuration",type:"uint32",internalType:"uint32"},{name:"expectedPaymentToken",type:"address",internalType:"address"}],outputs:[],stateMutability:"payable"},{type:"function",name:"hasParentIp",inputs:[{name:"ipId",type:"uint256",internalType:"uint256"},{name:"parent",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[{name:"dataNFT_",type:"address",internalType:"address"},{name:"protocolFeeBps_",type:"uint16",internalType:"uint16"},{name:"treasury_",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"ipToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IIpNFT"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"parentRoyaltyPercent",inputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"pause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"paused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"protocolFeeBps",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"royaltyStack",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"setParentIpsAndRoyaltyPercents",inputs:[{name:"childIpId",type:"uint256",internalType:"uint256"},{name:"parents",type:"uint256[]",internalType:"uint256[]"},{name:"creator",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"subscriptionExpiry",inputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"treasury",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"unpause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateProtocolFee",inputs:[{name:"newFeeBps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateTreasury",inputs:[{name:"newTreasury",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"event",name:"AccessPurchased",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"buyer",type:"address",indexed:!0,internalType:"address"},{name:"periods",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newExpiry",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amountPaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"AgentRegistered",inputs:[{name:"agentId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"ipNftId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"agentAddress",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"ChildIpTagged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"childIp",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIp",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DataDeleted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DataMinted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"contentHash",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"parents",type:"uint256[]",indexed:!1,internalType:"uint256[]"}],anonymous:!1},{type:"event",name:"DisputeAssertion",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"counterEvidenceHash",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"DisputeCancelled",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DisputeJudged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"judgement",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"DisputeModuleUpdated",inputs:[{name:"disputeModule",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DisputeRaised",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"initiator",type:"address",indexed:!0,internalType:"address"},{name:"targetId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"disputeTag",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"MarketPlaceUpdated",inputs:[{name:"marketPlace",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Paused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"RoyaltyPaid",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"royaltyAmount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"protocolAmount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"SignerUpdated",inputs:[{name:"signer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"StatusUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"status",type:"uint8",indexed:!1,internalType:"enum IIpNFT.DataStatus"}],anonymous:!1},{type:"event",name:"TermsUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newPrice",type:"uint128",indexed:!1,internalType:"uint128"},{name:"newDuration",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"paymentToken",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Unpaused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"EnforcedPause",inputs:[]},{type:"error",name:"ExpectedPause",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidParentIp",inputs:[]},{type:"error",name:"InvalidPayment",inputs:[]},{type:"error",name:"InvalidRoyalty",inputs:[]},{type:"error",name:"MaxParentsExceeded",inputs:[]},{type:"error",name:"MaxRoyaltyExceeded",inputs:[]},{type:"error",name:"NoSubscriptionFound",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"ParentAlreadyExists",inputs:[]},{type:"error",name:"ParentIpAlreadyDeleted",inputs:[]},{type:"error",name:"ParentIpAlreadyDisputed",inputs:[]},{type:"error",name:"SubscriptionNotAllowed",inputs:[]},{type:"error",name:"TermsMismatch",inputs:[]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"Unauthorized",inputs:[]},{type:"error",name:"ZeroAddress",inputs:[]}],I=[{type:"receive",stateMutability:"payable"},{type:"function",name:"execute",inputs:[{name:"to",type:"address",internalType:"address"},{name:"value",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"},{name:"operation",type:"uint8",internalType:"uint8"}],outputs:[{name:"result",type:"bytes",internalType:"bytes"}],stateMutability:"payable"},{type:"function",name:"isValidSignature",inputs:[{name:"hash",type:"bytes32",internalType:"bytes32"},{name:"signature",type:"bytes",internalType:"bytes"}],outputs:[{name:"magicValue",type:"bytes4",internalType:"bytes4"}],stateMutability:"view"},{type:"function",name:"isValidSigner",inputs:[{name:"signer",type:"address",internalType:"address"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"state",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"supportsInterface",inputs:[{name:"interfaceId",type:"bytes4",internalType:"bytes4"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}],b=[{inputs:[{internalType:"address",name:"_marketplace",type:"address"},{internalType:"address",name:"_ipNFT",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"EmptyPurchaseList",type:"error"},{inputs:[],name:"InvalidTotalPayment",type:"error"},{inputs:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"string",name:"reason",type:"string"}],name:"PurchaseFailed",type:"error"},{inputs:[],name:"RefundFailed",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"uint256",name:"count",type:"uint256"},{indexed:!1,internalType:"uint256",name:"totalPaid",type:"uint256"}],name:"BulkPurchaseExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"uint256",name:"successCount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"failureCount",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"failedTokenIds",type:"uint256[]"}],name:"BulkPurchasePartial",type:"event"},{inputs:[{internalType:"address",name:"buyer",type:"address"},{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],name:"bulkBuyAccess",outputs:[{internalType:"uint256",name:"totalPaid",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"buyer",type:"address"},{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],name:"bulkBuyAccessTolerant",outputs:[{components:[{internalType:"uint256",name:"successCount",type:"uint256"},{internalType:"uint256",name:"failureCount",type:"uint256"},{internalType:"uint256",name:"totalSpent",type:"uint256"},{internalType:"uint256",name:"refundAmount",type:"uint256"},{internalType:"uint256[]",name:"failedTokenIds",type:"uint256[]"}],internalType:"struct IBatchPurchase.TolerantResult",name:"result",type:"tuple"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"buildPurchaseParams",outputs:[{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"checkActiveStatus",outputs:[{internalType:"bool[]",name:"activeFlags",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"ipNFT",outputs:[{internalType:"contract IIpNFT",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"marketplace",outputs:[{internalType:"contract IMarketplace",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"previewBulkCost",outputs:[{components:[{internalType:"uint256",name:"totalNativeCost",type:"uint256"},{internalType:"uint256",name:"totalERC20Cost",type:"uint256"},{internalType:"uint256",name:"validCount",type:"uint256"},{internalType:"uint256[]",name:"invalidTokenIds",type:"uint256[]"}],internalType:"struct IBatchPurchase.BulkCostPreview",name:"preview",type:"tuple"}],stateMutability:"view",type:"function"}],E="Connect with Camp Network",C=2628e3,P=86400,k=1e15,S=1,_=1e4;const x={DEVELOPMENT:{NAME:"DEVELOPMENT",AUTH_HUB_BASE_API:"https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev",AUTH_ENDPOINT:"auth-testnet",ORIGIN_DASHBOARD:"https://origin.campnetwork.xyz",DATANFT_CONTRACT_ADDRESS:"0xB53F5723Dd4E46da32e1769Bd36A5aD880e707A5",MARKETPLACE_CONTRACT_ADDRESS:"0x97b0A18B2888e904940fFd19E480a28aeec3F055",BATCH_PURCHASE_CONTRACT_ADDRESS:"0xaF0cF04DBfeeAcEdC77Dc68A91381AFB967B8518",CHAIN:c,IPNFT_ABI:A,MARKETPLACE_ABI:g,TBA_ABI:I,BATCH_PURCHASE_ABI:b},PRODUCTION:{NAME:"PRODUCTION",AUTH_HUB_BASE_API:"https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev",AUTH_ENDPOINT:"auth-mainnet",ORIGIN_DASHBOARD:"https://origin.campnetwork.xyz",DATANFT_CONTRACT_ADDRESS:"0x39EeE1C3989f0dD543Dee60f8582F7F81F522C38",MARKETPLACE_CONTRACT_ADDRESS:"0xc69BAa987757d054455fC0f2d9797684E9FB8b9C",BATCH_PURCHASE_CONTRACT_ADDRESS:"0x31885cD2A445322067dF890bACf6CeFE9b233BCC",CHAIN:m,IPNFT_ABI:A,MARKETPLACE_ABI:g,TBA_ABI:I,BATCH_PURCHASE_ABI:b}};let N=[];const D=()=>N,M=e=>{function t(t){N.some((e=>e.info.uuid===t.detail.info.uuid))||(N=[...N,t.detail],e(N))}if("undefined"!=typeof window)return window.addEventListener("eip6963:announceProvider",t),window.dispatchEvent(new Event("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",t)};
62
- /**
63
- * Uploads a file to a specified URL with progress tracking.
61
+ let I=null,g=null,b=null;const C=t=>{var n;const i=b||c;return g&&(null===(n=g.chain)||void 0===n?void 0:n.id)===i.id||(g=e.createPublicClient({chain:i,transport:e.http()})),g};var E=[{type:"constructor",inputs:[],stateMutability:"nonpayable"},{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"appRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract AppRegistry"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"owner",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"dataStatus",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint8",internalType:"enum IIpNFT.DataStatus"}],stateMutability:"view"},{type:"function",name:"disputeModule",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"erc6551Account",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC6551Account"}],stateMutability:"view"},{type:"function",name:"erc6551Registry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC6551Registry"}],stateMutability:"view"},{type:"function",name:"finalizeDelete",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"getAccount",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"account",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"getApproved",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"getTerms",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"},{name:"licenseType",type:"uint8",internalType:"enum IIpNFT.LicenseType"}]}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[{name:"name_",type:"string",internalType:"string"},{name:"symbol_",type:"string",internalType:"string"},{name:"maxTermDuration_",type:"uint256",internalType:"uint256"},{name:"signer_",type:"address",internalType:"address"},{name:"wCAMP_",type:"address",internalType:"address"},{name:"minTermDuration_",type:"uint256",internalType:"uint256"},{name:"minPrice_",type:"uint256",internalType:"uint256"},{name:"maxRoyaltyBps_",type:"uint256",internalType:"uint256"},{name:"registry_",type:"address",internalType:"contract IERC6551Registry"},{name:"implementation_",type:"address",internalType:"contract IERC6551Account"},{name:"appRegistry_",type:"address",internalType:"contract AppRegistry"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"isApprovedForAll",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"operator",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"markDisputed",inputs:[{name:"_tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"marketPlace",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IMarketplace"}],stateMutability:"view"},{type:"function",name:"maxRoyaltyBps",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"maxTermDuration",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"minPrice",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"minTermDuration",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"mintWithSignature",inputs:[{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"creatorContentHash",type:"bytes32",internalType:"bytes32"},{name:"uri",type:"string",internalType:"string"},{name:"licenseTerms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"},{name:"licenseType",type:"uint8",internalType:"enum IIpNFT.LicenseType"}]},{name:"deadline",type:"uint256",internalType:"uint256"},{name:"parents",type:"uint256[]",internalType:"uint256[]"},{name:"isIP",type:"bool",internalType:"bool"},{name:"appId",type:"string",internalType:"string"},{name:"signature",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"ownerOf",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"paused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"safeTransferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"safeTransferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setAppRegistry",inputs:[{name:"_appRegistry",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setApprovalForAll",inputs:[{name:"operator",type:"address",internalType:"address"},{name:"approved",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setDisputeModule",inputs:[{name:"_disputeModule",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setMarketPlace",inputs:[{name:"_marketPlace",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setSigner",inputs:[{name:"_signer",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"signer",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"supportsInterface",inputs:[{name:"interfaceId",type:"bytes4",internalType:"bytes4"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"tokenInfo",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"tuple",internalType:"struct IIpNFT.TokenInfo",components:[{name:"tokenURI",type:"string",internalType:"string"},{name:"isIP",type:"bool",internalType:"bool"},{name:"contentHash",type:"bytes32",internalType:"bytes32"},{name:"terms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"},{name:"licenseType",type:"uint8",internalType:"enum IIpNFT.LicenseType"}]},{name:"status",type:"uint8",internalType:"enum IIpNFT.DataStatus"},{name:"appId",type:"string",internalType:"string"}]}],stateMutability:"view"},{type:"function",name:"tokenURI",inputs:[{name:"_tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateTerms",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"newTerms",type:"tuple",internalType:"struct IIpNFT.LicenseTerms",components:[{name:"price",type:"uint128",internalType:"uint128"},{name:"duration",type:"uint32",internalType:"uint32"},{name:"royaltyBps",type:"uint16",internalType:"uint16"},{name:"paymentToken",type:"address",internalType:"address"},{name:"licenseType",type:"uint8",internalType:"enum IIpNFT.LicenseType"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"function",name:"wCAMP",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"event",name:"AccessPurchased",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"buyer",type:"address",indexed:!0,internalType:"address"},{name:"periods",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newExpiry",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amountPaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"AgentRegistered",inputs:[{name:"agentId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"ipNftId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"agentAddress",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"AppRegistryUpdated",inputs:[{name:"appRegistry",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"approved",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"ApprovalForAll",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"operator",type:"address",indexed:!0,internalType:"address"},{name:"approved",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"ChildIpTagged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"childIp",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIp",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DataDeleted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DataMinted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"contentHash",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"parents",type:"uint256[]",indexed:!1,internalType:"uint256[]"}],anonymous:!1},{type:"event",name:"DisputeAssertion",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"counterEvidenceHash",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"DisputeCancelled",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DisputeJudged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"judgement",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"DisputeModuleUpdated",inputs:[{name:"disputeModule",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DisputeRaised",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"initiator",type:"address",indexed:!0,internalType:"address"},{name:"targetId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"disputeTag",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"MarketPlaceUpdated",inputs:[{name:"marketPlace",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"ParentIpsSet",inputs:[{name:"childIpId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIds",type:"uint256[]",indexed:!1,internalType:"uint256[]"},{name:"totalRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"Paused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"ProtocolFeeUpdated",inputs:[{name:"newFeeBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"RoyaltyPaid",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"royaltyAmount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"protocolAmount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"SignerUpdated",inputs:[{name:"signer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"StatusUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"status",type:"uint8",indexed:!1,internalType:"enum IIpNFT.DataStatus"}],anonymous:!1},{type:"event",name:"TermsUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newPrice",type:"uint128",indexed:!1,internalType:"uint128"},{name:"newDuration",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"paymentToken",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TreasuryUpdated",inputs:[{name:"newTreasury",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Unpaused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Voted",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"voter",type:"address",indexed:!0,internalType:"address"},{name:"support",type:"bool",indexed:!1,internalType:"bool"},{name:"weight",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"ERC721IncorrectOwner",inputs:[{name:"sender",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InsufficientApproval",inputs:[{name:"operator",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"}]},{type:"error",name:"ERC721InvalidApprover",inputs:[{name:"approver",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidOperator",inputs:[{name:"operator",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidReceiver",inputs:[{name:"receiver",type:"address",internalType:"address"}]},{type:"error",name:"ERC721InvalidSender",inputs:[{name:"sender",type:"address",internalType:"address"}]},{type:"error",name:"ERC721NonexistentToken",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}]},{type:"error",name:"EnforcedPause",inputs:[]},{type:"error",name:"ExpectedPause",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"InvalidDeadline",inputs:[]},{type:"error",name:"InvalidDuration",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidPaymentToken",inputs:[]},{type:"error",name:"InvalidPrice",inputs:[]},{type:"error",name:"InvalidRoyalty",inputs:[]},{type:"error",name:"InvalidSignature",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"NotTokenOwner",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"TokenAlreadyExists",inputs:[]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"Unauthorized",inputs:[]}],S=[{type:"constructor",inputs:[],stateMutability:"nonpayable"},{type:"function",name:"MAX_PARENTS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"buyAccess",inputs:[{name:"buyer",type:"address",internalType:"address"},{name:"tokenId",type:"uint256",internalType:"uint256"},{name:"expectedPrice",type:"uint256",internalType:"uint256"},{name:"expectedDuration",type:"uint32",internalType:"uint32"},{name:"expectedPaymentToken",type:"address",internalType:"address"},{name:"expectedProtocolFeeBps",type:"uint16",internalType:"uint16"},{name:"expectedAppFeeBps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"payable"},{type:"function",name:"hasParentIp",inputs:[{name:"ipId",type:"uint256",internalType:"uint256"},{name:"parent",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[{name:"dataNFT_",type:"address",internalType:"address"},{name:"protocolFeeBps_",type:"uint16",internalType:"uint16"},{name:"treasury_",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"ipToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IIpNFT"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"parentRoyaltyPercent",inputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"pause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"paused",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"protocolFeeBps",inputs:[],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"royaltyStack",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint16",internalType:"uint16"}],stateMutability:"view"},{type:"function",name:"setParentIpsAndRoyaltyPercents",inputs:[{name:"childIpId",type:"uint256",internalType:"uint256"},{name:"parents",type:"uint256[]",internalType:"uint256[]"},{name:"creator",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"subscriptionExpiry",inputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"treasury",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"unpause",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateProtocolFee",inputs:[{name:"newFeeBps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateTreasury",inputs:[{name:"newTreasury",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"event",name:"AccessPurchased",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"buyer",type:"address",indexed:!0,internalType:"address"},{name:"periods",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newExpiry",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amountPaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"AgentRegistered",inputs:[{name:"agentId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"ipNftId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"agentAddress",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"AppRegistryUpdated",inputs:[{name:"appRegistry",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"ChildIpTagged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"childIp",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIp",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DataDeleted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DataMinted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"contentHash",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"parents",type:"uint256[]",indexed:!1,internalType:"uint256[]"}],anonymous:!1},{type:"event",name:"DisputeAssertion",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"counterEvidenceHash",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"DisputeCancelled",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DisputeJudged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"judgement",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"DisputeModuleUpdated",inputs:[{name:"disputeModule",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DisputeRaised",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"initiator",type:"address",indexed:!0,internalType:"address"},{name:"targetId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"disputeTag",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"MarketPlaceUpdated",inputs:[{name:"marketPlace",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"ParentIpsSet",inputs:[{name:"childIpId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIds",type:"uint256[]",indexed:!1,internalType:"uint256[]"},{name:"totalRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"Paused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"ProtocolFeeUpdated",inputs:[{name:"newFeeBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"RoyaltyPaid",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"royaltyAmount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"protocolAmount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"SignerUpdated",inputs:[{name:"signer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"StatusUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"status",type:"uint8",indexed:!1,internalType:"enum IIpNFT.DataStatus"}],anonymous:!1},{type:"event",name:"TermsUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newPrice",type:"uint128",indexed:!1,internalType:"uint128"},{name:"newDuration",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"paymentToken",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"TreasuryUpdated",inputs:[{name:"newTreasury",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Unpaused",inputs:[{name:"account",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Voted",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"voter",type:"address",indexed:!0,internalType:"address"},{name:"support",type:"bool",indexed:!1,internalType:"bool"},{name:"weight",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"EnforcedPause",inputs:[]},{type:"error",name:"ExpectedPause",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"FeesExceedMaximum",inputs:[]},{type:"error",name:"FeesMismatch",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidLicenseType",inputs:[]},{type:"error",name:"InvalidParentIp",inputs:[]},{type:"error",name:"InvalidPayment",inputs:[]},{type:"error",name:"InvalidPrice",inputs:[]},{type:"error",name:"InvalidRoyalty",inputs:[]},{type:"error",name:"MaxParentsExceeded",inputs:[]},{type:"error",name:"MaxRoyaltyExceeded",inputs:[]},{type:"error",name:"NoSubscriptionFound",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"ParentAlreadyExists",inputs:[]},{type:"error",name:"ParentIpAlreadyDeleted",inputs:[]},{type:"error",name:"ParentIpAlreadyDisputed",inputs:[]},{type:"error",name:"SubscriptionNotAllowed",inputs:[]},{type:"error",name:"TermsMismatch",inputs:[]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"Unauthorized",inputs:[]},{type:"error",name:"ZeroAddress",inputs:[]}],P=[{type:"receive",stateMutability:"payable"},{type:"function",name:"execute",inputs:[{name:"to",type:"address",internalType:"address"},{name:"value",type:"uint256",internalType:"uint256"},{name:"data",type:"bytes",internalType:"bytes"},{name:"operation",type:"uint8",internalType:"uint8"}],outputs:[{name:"result",type:"bytes",internalType:"bytes"}],stateMutability:"payable"},{type:"function",name:"isValidSignature",inputs:[{name:"hash",type:"bytes32",internalType:"bytes32"},{name:"signature",type:"bytes",internalType:"bytes"}],outputs:[{name:"magicValue",type:"bytes4",internalType:"bytes4"}],stateMutability:"view"},{type:"function",name:"isValidSigner",inputs:[{name:"signer",type:"address",internalType:"address"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"state",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"supportsInterface",inputs:[{name:"interfaceId",type:"bytes4",internalType:"bytes4"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"}],D=[{inputs:[{internalType:"address",name:"_marketplace",type:"address"},{internalType:"address",name:"_ipNFT",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"EmptyPurchaseList",type:"error"},{inputs:[],name:"InvalidTotalPayment",type:"error"},{inputs:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"string",name:"reason",type:"string"}],name:"PurchaseFailed",type:"error"},{inputs:[],name:"RefundFailed",type:"error"},{inputs:[],name:"ZeroAddress",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"uint256",name:"count",type:"uint256"},{indexed:!1,internalType:"uint256",name:"totalPaid",type:"uint256"}],name:"BulkPurchaseExecuted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"buyer",type:"address"},{indexed:!1,internalType:"uint256",name:"successCount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"failureCount",type:"uint256"},{indexed:!1,internalType:"uint256[]",name:"failedTokenIds",type:"uint256[]"}],name:"BulkPurchasePartial",type:"event"},{inputs:[{internalType:"address",name:"buyer",type:"address"},{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],name:"bulkBuyAccess",outputs:[{internalType:"uint256",name:"totalPaid",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"buyer",type:"address"},{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],name:"bulkBuyAccessTolerant",outputs:[{components:[{internalType:"uint256",name:"successCount",type:"uint256"},{internalType:"uint256",name:"failureCount",type:"uint256"},{internalType:"uint256",name:"totalSpent",type:"uint256"},{internalType:"uint256",name:"refundAmount",type:"uint256"},{internalType:"uint256[]",name:"failedTokenIds",type:"uint256[]"}],internalType:"struct IBatchPurchase.TolerantResult",name:"result",type:"tuple"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"buildPurchaseParams",outputs:[{components:[{internalType:"uint256",name:"tokenId",type:"uint256"},{internalType:"uint256",name:"expectedPrice",type:"uint256"},{internalType:"uint32",name:"expectedDuration",type:"uint32"},{internalType:"address",name:"expectedPaymentToken",type:"address"}],internalType:"struct IBatchPurchase.BuyParams[]",name:"purchases",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"checkActiveStatus",outputs:[{internalType:"bool[]",name:"activeFlags",type:"bool[]"}],stateMutability:"view",type:"function"},{inputs:[],name:"ipNFT",outputs:[{internalType:"contract IIpNFT",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"marketplace",outputs:[{internalType:"contract IMarketplace",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256[]",name:"tokenIds",type:"uint256[]"}],name:"previewBulkCost",outputs:[{components:[{internalType:"uint256",name:"totalNativeCost",type:"uint256"},{internalType:"uint256",name:"totalERC20Cost",type:"uint256"},{internalType:"uint256",name:"validCount",type:"uint256"},{internalType:"uint256[]",name:"invalidTokenIds",type:"uint256[]"}],internalType:"struct IBatchPurchase.BulkCostPreview",name:"preview",type:"tuple"}],stateMutability:"view",type:"function"}],R=[{type:"constructor",inputs:[],stateMutability:"nonpayable"},{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"cancelDispute",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"disputeAssertion",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"_counterEvidenceHash",type:"bytes32",internalType:"bytes32"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"disputeBond",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"disputeCoolDownPeriod",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"disputeCounter",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"disputeJudgementPeriod",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"disputeQuorum",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"disputeToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"disputes",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"initiator",type:"address",internalType:"address"},{name:"targetId",type:"uint256",internalType:"uint256"},{name:"disputeTag",type:"bytes32",internalType:"bytes32"},{name:"disputeEvidenceHash",type:"bytes32",internalType:"bytes32"},{name:"counterEvidenceHash",type:"bytes32",internalType:"bytes32"},{name:"disputeTimestamp",type:"uint256",internalType:"uint256"},{name:"assertionTimestamp",type:"uint256",internalType:"uint256"},{name:"yesVotes",type:"uint256",internalType:"uint256"},{name:"noVotes",type:"uint256",internalType:"uint256"},{name:"status",type:"uint8",internalType:"enum DisputeModule.DisputeStatus"},{name:"bondAmount",type:"uint256",internalType:"uint256"},{name:"protocolFeeAmount",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"hasVoted",inputs:[{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[{name:"_ipToken",type:"address",internalType:"contract IIpNFT"},{name:"_marketplace",type:"address",internalType:"contract IMarketplace"},{name:"_disputeToken",type:"address",internalType:"contract IERC20"},{name:"_disputeBond",type:"uint256",internalType:"uint256"},{name:"_disputeCoolDownPeriod",type:"uint256",internalType:"uint256"},{name:"_disputeJudgementPeriod",type:"uint256",internalType:"uint256"},{name:"_bondFeeBPS",type:"uint16",internalType:"uint16"},{name:"_stakingThreshold",type:"uint256",internalType:"uint256"},{name:"_stakingVault",type:"address",internalType:"contract ICampStakingVault"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"ipToken",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IIpNFT"}],stateMutability:"view"},{type:"function",name:"isUsedEvidenceHash",inputs:[{name:"",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"marketplace",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IMarketplace"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"protocolDisputeFee",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"raiseDispute",inputs:[{name:"_targetIpId",type:"uint256",internalType:"uint256"},{name:"_disputeEvidenceHash",type:"bytes32",internalType:"bytes32"},{name:"_disputeTag",type:"bytes32",internalType:"bytes32"}],outputs:[{name:"id",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"resolveDispute",inputs:[{name:"id",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"setDisputeQuorum",inputs:[{name:"_disputeQuorum",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"stakingThreshold",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"stakingVault",inputs:[],outputs:[{name:"",type:"address",internalType:"contract ICampStakingVault"}],stateMutability:"view"},{type:"function",name:"tagChildIp",inputs:[{name:"_childIpId",type:"uint256",internalType:"uint256"},{name:"_infringerDisputeId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"function",name:"voteOnDispute",inputs:[{name:"id",type:"uint256",internalType:"uint256"},{name:"support",type:"bool",internalType:"bool"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"AccessPurchased",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"buyer",type:"address",indexed:!0,internalType:"address"},{name:"periods",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newExpiry",type:"uint256",indexed:!1,internalType:"uint256"},{name:"amountPaid",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"AgentRegistered",inputs:[{name:"agentId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"ipNftId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"agentAddress",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"AppRegistryUpdated",inputs:[{name:"appRegistry",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"ChildIpTagged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"childIp",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIp",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DataDeleted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DataMinted",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"creator",type:"address",indexed:!0,internalType:"address"},{name:"contentHash",type:"bytes32",indexed:!1,internalType:"bytes32"},{name:"parents",type:"uint256[]",indexed:!1,internalType:"uint256[]"}],anonymous:!1},{type:"event",name:"DisputeAssertion",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"counterEvidenceHash",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"DisputeCancelled",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"DisputeJudged",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"judgement",type:"bool",indexed:!1,internalType:"bool"}],anonymous:!1},{type:"event",name:"DisputeModuleUpdated",inputs:[{name:"disputeModule",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"DisputeRaised",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"initiator",type:"address",indexed:!0,internalType:"address"},{name:"targetId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"disputeTag",type:"bytes32",indexed:!1,internalType:"bytes32"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"MarketPlaceUpdated",inputs:[{name:"marketPlace",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"ParentIpsSet",inputs:[{name:"childIpId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"parentIds",type:"uint256[]",indexed:!1,internalType:"uint256[]"},{name:"totalRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"ProtocolFeeUpdated",inputs:[{name:"newFeeBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"RoyaltyPaid",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"royaltyAmount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"creator",type:"address",indexed:!1,internalType:"address"},{name:"protocolAmount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"SignerUpdated",inputs:[{name:"signer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"StatusUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"status",type:"uint8",indexed:!1,internalType:"enum IIpNFT.DataStatus"}],anonymous:!1},{type:"event",name:"TermsUpdated",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newPrice",type:"uint128",indexed:!1,internalType:"uint128"},{name:"newDuration",type:"uint32",indexed:!1,internalType:"uint32"},{name:"newRoyaltyBps",type:"uint16",indexed:!1,internalType:"uint16"},{name:"paymentToken",type:"address",indexed:!1,internalType:"address"}],anonymous:!1},{type:"event",name:"TreasuryUpdated",inputs:[{name:"newTreasury",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Voted",inputs:[{name:"id",type:"uint256",indexed:!0,internalType:"uint256"},{name:"voter",type:"address",indexed:!0,internalType:"address"},{name:"support",type:"bool",indexed:!1,internalType:"bool"},{name:"weight",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"AlreadyVoted",inputs:[]},{type:"error",name:"CoolDownPeriodActive",inputs:[]},{type:"error",name:"CoolDownPeriodOver",inputs:[]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"EvidenceAlreadyUsed",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"InvalidBondFeeBps",inputs:[]},{type:"error",name:"InvalidChildIpId",inputs:[]},{type:"error",name:"InvalidDisputeStatus",inputs:[]},{type:"error",name:"InvalidDisputeTag",inputs:[]},{type:"error",name:"InvalidEvidenceHash",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidTargetIp",inputs:[]},{type:"error",name:"NoVotingPower",inputs:[]},{type:"error",name:"NotAParentIp",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"NotInitiator",inputs:[]},{type:"error",name:"NotTokenOwner",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"ParentNotDisputed",inputs:[]},{type:"error",name:"SelfAssertionNotAllowed",inputs:[]},{type:"error",name:"StakedAfterDispute",inputs:[]},{type:"error",name:"TagNotAllowed",inputs:[]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"VotingPeriodActive",inputs:[]},{type:"error",name:"VotingPeriodOver",inputs:[]}],_=[{type:"constructor",inputs:[{name:"ipNFT_",type:"address",internalType:"contract IIpNFT"},{name:"exchangeRate_",type:"uint256",internalType:"uint256"}],stateMutability:"nonpayable"},{type:"function",name:"exchangeRate",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"fractionalize",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"getTokenForNFT",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"ipNFT",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IIpNFT"}],stateMutability:"view"},{type:"function",name:"nftToToken",inputs:[{name:"",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"address",internalType:"contract FractionalToken"}],stateMutability:"view"},{type:"function",name:"onERC721Received",inputs:[{name:"",type:"address",internalType:"address"},{name:"",type:"address",internalType:"address"},{name:"",type:"uint256",internalType:"uint256"},{name:"",type:"bytes",internalType:"bytes"}],outputs:[{name:"",type:"bytes4",internalType:"bytes4"}],stateMutability:"pure"},{type:"function",name:"redeem",inputs:[{name:"tokenId",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"Fractionalized",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"depositor",type:"address",indexed:!0,internalType:"address"},{name:"token",type:"address",indexed:!1,internalType:"address"},{name:"supply",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Redeemed",inputs:[{name:"tokenId",type:"uint256",indexed:!0,internalType:"uint256"},{name:"redeemer",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"AlreadyFractionalized",inputs:[]},{type:"error",name:"InsufficientFractionalTokens",inputs:[]},{type:"error",name:"InvalidExchangeRate",inputs:[]},{type:"error",name:"NotFractionalized",inputs:[]},{type:"error",name:"NotTokenOwner",inputs:[]},{type:"error",name:"ZeroAddress",inputs:[]}],x=[{type:"constructor",inputs:[],stateMutability:"nonpayable"},{type:"function",name:"UPGRADE_INTERFACE_VERSION",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"appExists",inputs:[{name:"",type:"string",internalType:"string"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"apps",inputs:[{name:"",type:"string",internalType:"string"}],outputs:[{name:"treasury",type:"address",internalType:"address"},{name:"revenueShareBps",type:"uint16",internalType:"uint16"},{name:"isActive",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"deactivateApp",inputs:[{name:"appId",type:"string",internalType:"string"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"getAppInfo",inputs:[{name:"appId",type:"string",internalType:"string"}],outputs:[{name:"",type:"tuple",internalType:"struct AppRegistry.AppInfo",components:[{name:"treasury",type:"address",internalType:"address"},{name:"revenueShareBps",type:"uint16",internalType:"uint16"},{name:"isActive",type:"bool",internalType:"bool"}]}],stateMutability:"view"},{type:"function",name:"initialize",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"proxiableUUID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"reactivateApp",inputs:[{name:"appId",type:"string",internalType:"string"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registerApp",inputs:[{name:"appId",type:"string",internalType:"string"},{name:"treasury",type:"address",internalType:"address"},{name:"revenueShareBps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateApp",inputs:[{name:"appId",type:"string",internalType:"string"},{name:"treasury",type:"address",internalType:"address"},{name:"revenueShareBps",type:"uint16",internalType:"uint16"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"upgradeToAndCall",inputs:[{name:"newImplementation",type:"address",internalType:"address"},{name:"data",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"payable"},{type:"event",name:"AppDeactivated",inputs:[{name:"appId",type:"string",indexed:!0,internalType:"string"}],anonymous:!1},{type:"event",name:"AppReactivated",inputs:[{name:"appId",type:"string",indexed:!0,internalType:"string"}],anonymous:!1},{type:"event",name:"AppRegistered",inputs:[{name:"appId",type:"string",indexed:!0,internalType:"string"},{name:"treasury",type:"address",indexed:!1,internalType:"address"},{name:"revenueShareBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"AppUpdated",inputs:[{name:"appId",type:"string",indexed:!0,internalType:"string"},{name:"treasury",type:"address",indexed:!1,internalType:"address"},{name:"revenueShareBps",type:"uint16",indexed:!1,internalType:"uint16"}],anonymous:!1},{type:"event",name:"Initialized",inputs:[{name:"version",type:"uint64",indexed:!1,internalType:"uint64"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"Upgraded",inputs:[{name:"implementation",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"AddressEmptyCode",inputs:[{name:"target",type:"address",internalType:"address"}]},{type:"error",name:"AppAlreadyActive",inputs:[]},{type:"error",name:"AppAlreadyExists",inputs:[]},{type:"error",name:"AppAlreadyInactive",inputs:[]},{type:"error",name:"AppNotFound",inputs:[]},{type:"error",name:"ERC1967InvalidImplementation",inputs:[{name:"implementation",type:"address",internalType:"address"}]},{type:"error",name:"ERC1967NonPayable",inputs:[]},{type:"error",name:"FailedCall",inputs:[]},{type:"error",name:"InvalidAppId",inputs:[]},{type:"error",name:"InvalidInitialization",inputs:[]},{type:"error",name:"InvalidRoyalty",inputs:[]},{type:"error",name:"NotInitializing",inputs:[]},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]},{type:"error",name:"UUPSUnauthorizedCallContext",inputs:[]},{type:"error",name:"UUPSUnsupportedProxiableUUID",inputs:[{name:"slot",type:"bytes32",internalType:"bytes32"}]},{type:"error",name:"ZeroAddress",inputs:[]}],N="Connect with Camp Network",k=2628e3,M=86400,F=1e15,B=1,O=1e4;const U={DEVELOPMENT:{NAME:"DEVELOPMENT",AUTH_HUB_BASE_API:"https://origin-backend-iota.vercel.app",ORIGIN_DASHBOARD:"https://origin.campnetwork.xyz",DATANFT_CONTRACT_ADDRESS:"0x4d9aF5800701A4A686Df6b096A27B81486de36eB",MARKETPLACE_CONTRACT_ADDRESS:"0x68B202caA162C418d3A2DF92F29fA1CAF90C58c1",BATCH_PURCHASE_CONTRACT_ADDRESS:"0xaF0cF04DBfeeAcEdC77Dc68A91381AFB967B8518",DISPUTE_CONTRACT_ADDRESS:"0x45719337b1450b0D105cA671972be4263E6A9380",APP_REGISTRY_CONTRACT_ADDRESS:"0x2096eb980Dd590DDF690Cb698572b80552B6F9Bb",
62
+ // TODO: Add actual contract addresse when deployed
63
+ FRACTIONALIZER_CONTRACT_ADDRESS:"",USDC_CONTRACT_ADDRESS:"0x8a2B28364102Bea189D99A475C494330Ef2bDD0B",CHAIN:c,IPNFT_ABI:E,MARKETPLACE_ABI:S,TBA_ABI:P,BATCH_PURCHASE_ABI:D,DISPUTE_ABI:R,FRACTIONALIZER_ABI:_,APP_REGISTRY_ABI:x},PRODUCTION:{NAME:"PRODUCTION",AUTH_HUB_BASE_API:"https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev",ORIGIN_DASHBOARD:"https://origin.campnetwork.xyz",DATANFT_CONTRACT_ADDRESS:"0x39EeE1C3989f0dD543Dee60f8582F7F81F522C38",MARKETPLACE_CONTRACT_ADDRESS:"0xc69BAa987757d054455fC0f2d9797684E9FB8b9C",BATCH_PURCHASE_CONTRACT_ADDRESS:"0x31885cD2A445322067dF890bACf6CeFE9b233BCC",
64
+ // TODO: Add actual contract addresses when deployed
65
+ DISPUTE_CONTRACT_ADDRESS:"",FRACTIONALIZER_CONTRACT_ADDRESS:"",APP_REGISTRY_CONTRACT_ADDRESS:"",USDC_CONTRACT_ADDRESS:"",CHAIN:m,IPNFT_ABI:E,MARKETPLACE_ABI:S,TBA_ABI:P,BATCH_PURCHASE_ABI:D,DISPUTE_ABI:R,FRACTIONALIZER_ABI:_,APP_REGISTRY_ABI:x}};let $=[];const H=()=>$,j=e=>{function t(t){$.some((e=>e.info.uuid===t.detail.info.uuid))||($=[...$,t.detail],e($))}if("undefined"!=typeof window)return window.addEventListener("eip6963:announceProvider",t),window.dispatchEvent(new Event("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",t)},L=(e,t,n)=>{const s=[];let r=[],o=!1,d=0;const u=e.length;return new Promise(((p,l)=>{function y(){n(d/u*100)}function c(e,t,n){return a(this,arguments,void 0,(function*(e,t,n,a=0){var s;try{const a=null===(s=(yield i.put(t,e,{headers:{"Content-Type":e.type||"application/octet-stream"},timeout:3e5})).headers.etag)||void 0===s?void 0:s.replace(/"/g,"");if(!a)throw new Error(`Missing ETag for part ${n}`);return{ETag:a,PartNumber:n}}catch(i){if(a<3){const i=1e3*Math.pow(2,a);// Exponential backoff
66
+ return yield new Promise((e=>setTimeout(e,i))),c(e,t,n,a+1)}throw new Error(`Part ${n} failed after 3 retries: ${i.message}`)}}))}
67
+ // Expose abort method
68
+ L.abort=()=>{o=!0,i.isCancel("Upload aborted")},y(),// Initial 0%
69
+ function(){return a(this,void 0,void 0,(function*(){const n=[];for(let i=0;i<u&&!o;i++){const o=(()=>a(this,void 0,void 0,(function*(){try{if(r.includes(i))return;const n=yield c(e[i],t[i],i+1);s.push(n),d++,y()}catch(e){if(console.error(`Part ${i+1} failed:`,e),r.push(i),r.length>.1*u)
70
+ // Fail fast if >10% fail
71
+ throw e}})))();n.push(o),
72
+ // Limit concurrency
73
+ n.length>=4&&(yield Promise.race(n),
74
+ // Remove settled promises to continue
75
+ n.splice(0,n.length,...(yield Promise.allSettled(n)).map(((e,t)=>n[t])).filter(Boolean)))}yield Promise.allSettled(n),o?l(new Error("Upload aborted by user")):r.length>0?l(new Error(`Failed to upload ${r.length}/${u} parts: ${r.join(", ")}`)):(s.sort(((e,t)=>e.PartNumber-t.PartNumber)),p(s))}))}().catch(l)}))};
76
+ /**
77
+ * Uploads chunks to respective presigned URLs with progress tracking.
64
78
  * Falls back to a simple fetch request if XMLHttpRequest is not available.
65
- * @param {File} file - The file to upload.
66
- * @param {string} url - The URL to upload the file to.
79
+ * @param {Blob[]} chunks - The file to upload.
80
+ * @param {string[]} urls - The URL to upload the file to.
67
81
  * @param {UploadProgressCallback} onProgress - A callback function to track upload progress.
68
82
  * @returns {Promise<string>} - A promise that resolves with the response from the server.
69
83
  */
@@ -78,9 +92,12 @@ let T=null,f=null,v=null;const w=t=>{var n;const i=v||c;return f&&(null===(n=f.c
78
92
  * @param licenseTerms The terms of the license for the NFT.
79
93
  * @param deadline The deadline for the minting operation.
80
94
  * @param signature The signature for the minting operation.
95
+ * @param appId Optional app ID for the minting operation.
81
96
  * @returns A promise that resolves when the minting is complete.
82
97
  */
83
- function R(e,t,n,i,r,s,o,d,u){return a(this,void 0,void 0,(function*(){return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"mintWithSignature",[e,t,r,s,o,d,n,i,u],{waitForReceipt:!0})}))}
98
+ function z(e,t,n,i,s,r,o,d,u,p){return a(this,void 0,void 0,(function*(){var a;
99
+ // use provided appId, else use instance appId, else default to empty string
100
+ const l=null!==(a=null!=p?p:this.appId)&&void 0!==a?a:"";return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"mintWithSignature",[e,t,s,r,o,d,n,i,l,u],{waitForReceipt:!0})}))}
84
101
  /**
85
102
  * Registers a Data NFT with the Origin service in order to obtain a signature for minting.
86
103
  * @param source The source of the Data NFT (e.g., "spotify", "twitter", "tiktok", or "file").
@@ -90,55 +107,55 @@ function R(e,t,n,i,r,s,o,d,u){return a(this,void 0,void 0,(function*(){return yi
90
107
  * @param fileKey The file key(s) if the source is "file".
91
108
  * @param parents The IDs of the parent NFTs, if applicable.
92
109
  * @return A promise that resolves with the registration data.
93
- */function B(e,t,n,i,r,s){return a(this,void 0,void 0,(function*(){const a={source:e,deadline:Number(t),licenseTerms:{price:n.price.toString(),duration:n.duration,royaltyBps:n.royaltyBps,paymentToken:n.paymentToken},metadata:i,parentId:s?s.map((e=>e.toString())):[]};void 0!==r&&(a.fileKey=r);const o=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/register`,{method:"POST",headers:{Authorization:`Bearer ${this.getJwt()}`,"Content-Type":"application/json"},body:JSON.stringify(a)}),d=yield o.json();if(d.isError)throw new Error(`Failed to get signature: ${d.message}`);if(!o.ok)throw new Error(`Failed to get signature: ${o.statusText}`);return d.data}))}
110
+ */function V(e,t,n,i,s,r,o,d){return a(this,void 0,void 0,(function*(){var a;const u=null!==(a=null!=d?d:this.appId)&&void 0!==a?a:"",p={source:e,deadline:Number(t),licenseTerms:{price:n.price.toString(),duration:n.duration,royaltyBps:n.royaltyBps,paymentToken:n.paymentToken,licenseType:n.licenseType},appId:u,isIp:s,metadata:i,parentId:o?o.map((e=>e.toString())):[]};void 0!==r&&(p.fileKey=r);const l=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/origin/register`,{method:"POST",headers:{Authorization:`Bearer ${this.getJwt()}`,"Content-Type":"application/json"},body:JSON.stringify(p)}),y=yield l.json();if(y.isError)throw new Error(`Failed to get signature: ${y.message}`);if(!l.ok)throw new Error(`Failed to get signature: ${l.statusText}`);return y.data}))}
94
111
  /**
95
112
  * Updates the license terms of a specified IPNFT.
96
113
  * @param tokenId The ID of the IPNFT to update.
97
114
  * @param newTerms The new license terms to set.
98
115
  * @returns A promise that resolves when the transaction is complete.
99
- */function F(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"updateTerms",[e,t],{waitForReceipt:!0})}
116
+ */function q(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"updateTerms",[e,t],{waitForReceipt:!0})}
100
117
  /**
101
118
  * Sets the IPNFT as deleted
102
119
  * @param tokenId The token ID to set as deleted.
103
120
  * @returns A promise that resolves when the transaction is complete.
104
- */function U(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"finalizeDelete",[e])}
121
+ */function J(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"finalizeDelete",[e])}
105
122
  /**
106
123
  * Calls the getOrCreateRoyaltyVault method on the IPNFT contract.
107
124
  * @param tokenOwner The address of the token owner for whom to get or create the royalty vault.
108
125
  * @param simulateOnly If true, simulates the transaction without executing it.
109
126
  * @returns The address of the royalty vault associated with the specified token owner.
110
- */function O(e){return a(this,arguments,void 0,(function*(e,t=!1){const n=yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getOrCreateRoyaltyVault",[e],{waitForReceipt:!0,simulate:t});return t?n:n.simulatedResult}))}
127
+ */function G(e){return a(this,arguments,void 0,(function*(e,t=!1){const n=yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getOrCreateRoyaltyVault",[e],{waitForReceipt:!0,simulate:t});return t?n:n.simulatedResult}))}
111
128
  /**
112
129
  * Returns the license terms associated with a specific token ID.
113
130
  * @param tokenId The token ID to query.
114
131
  * @returns The license terms of the token ID.
115
- */function H(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getTerms",[e])}
132
+ */function W(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getTerms",[e])}
116
133
  /**
117
134
  * Returns the owner of the specified IPNFT.
118
135
  * @param tokenId The ID of the IPNFT to query.
119
136
  * @returns The address of the owner of the IPNFT.
120
- */function $(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"ownerOf",[e])}
137
+ */function Y(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"ownerOf",[e])}
121
138
  /**
122
139
  * Returns the number of IPNFTs owned by the given address.
123
140
  * @param owner The address to query.
124
141
  * @returns The number of IPNFTs owned by the address.
125
- */function j(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"balanceOf",[e])}
142
+ */function Z(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"balanceOf",[e])}
126
143
  /**
127
144
  * Returns the metadata URI associated with a specific token ID.
128
145
  * @param tokenId The token ID to query.
129
146
  * @returns The metadata URI of the token ID.
130
- */function L(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenURI",[e])}
147
+ */function K(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenURI",[e])}
131
148
  /**
132
149
  * Returns the data status of the given token ID.
133
150
  * @param tokenId The token ID to query.
134
151
  * @returns The data status of the token ID.
135
- */function z(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"dataStatus",[e])}
152
+ */function X(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"dataStatus",[e])}
136
153
  /**
137
154
  * Checks if an operator is approved to manage all assets of a given owner.
138
155
  * @param owner The address of the asset owner.
139
156
  * @param operator The address of the operator to check.
140
157
  * @return A promise that resolves to a boolean indicating if the operator is approved for all assets of the owner.
141
- */function q(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"isApprovedForAll",[e,t])}function W(e,t,n){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"transferFrom",[e,t,n])}function J(e,t,n,i){const a=i?[e,t,n,i]:[e,t,n];return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"safeTransferFrom",a)}function V(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"approve",[e,t])}function K(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"setApprovalForAll",[e,t])}
158
+ */function Q(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"isApprovedForAll",[e,t])}function ee(e,t,n){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"transferFrom",[e,t,n])}function te(e,t,n,i){const a=i?[e,t,n,i]:[e,t,n];return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"safeTransferFrom",a)}function ne(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"approve",[e,t])}function ie(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"setApprovalForAll",[e,t])}
142
159
  /**
143
160
  * Buys access to a data NFT for a specified duration.
144
161
  * @param buyer The address of the buyer.
@@ -146,15 +163,23 @@ function R(e,t,n,i,r,s,o,d,u){return a(this,void 0,void 0,(function*(){return yi
146
163
  * @param expectedPrice The expected price for the access.
147
164
  * @param expectedDuration The expected duration of the access in seconds.
148
165
  * @param expectedPaymentToken The address of the payment token (use zero address for native token).
166
+ * @param expectedProtocolFeeBps The expected protocol fee in basis points (0-10000). Defaults to 0.
167
+ * @param expectedAppFeeBps The expected app fee in basis points (0-10000). Defaults to 0.
149
168
  * @param value The amount of native token to send (only required if paying with native token).
150
169
  * @returns A promise that resolves when the transaction is confirmed.
151
- */function G(e,t,n,i,a,r){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"buyAccess",[e,t,n,i,a],{waitForReceipt:!0,value:r})}
170
+ */function ae(e,t,n,i,a,s=0,r=0,o){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"buyAccess",[e,t,n,i,a,s,r],{waitForReceipt:!0,value:o})}
152
171
  /**
153
172
  * Checks if a user has access to a specific token based on subscription expiry.
154
173
  * @param user - The address of the user.
155
174
  * @param tokenId - The ID of the token.
156
175
  * @returns A promise that resolves to a boolean indicating if the user has access.
157
- */function X(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield this.subscriptionExpiry(t,e);return n>BigInt(Math.floor(Date.now()/1e3))}catch(e){return!1}}))}function Z(e,t){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"subscriptionExpiry",[e,t])}
176
+ */function se(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield this.subscriptionExpiry(t,e);return n>BigInt(Math.floor(Date.now()/1e3))}catch(e){return!1}}))}function re(e,t){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"subscriptionExpiry",[e,t])}
177
+ /**
178
+ * Fetches the protocol fee from the marketplace contract.
179
+ */function oe(e){return a(this,void 0,void 0,(function*(){try{const t=yield e.callContractMethod(e.environment.MARKETPLACE_CONTRACT_ADDRESS,e.environment.MARKETPLACE_ABI,"protocolFeeBps",[]);return Number(t)}catch(e){return console.warn("Failed to fetch protocol fee, defaulting to 0:",e),0}}))}
180
+ /**
181
+ * Fetches the app fee for a specific token from the AppRegistry.
182
+ */function de(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield e.callContractMethod(e.environment.DATANFT_CONTRACT_ADDRESS,e.environment.IPNFT_ABI,"tokenInfo",[t]),i=null==n?void 0:n.appId;if(!i||""===i)return 0;if(!e.environment.APP_REGISTRY_CONTRACT_ADDRESS||!e.environment.APP_REGISTRY_ABI)return 0;const a=yield e.callContractMethod(e.environment.APP_REGISTRY_CONTRACT_ADDRESS,e.environment.APP_REGISTRY_ABI,"getAppInfo",[i]);return(null==a?void 0:a.isActive)?Number(a.revenueShareBps):0}catch(e){return console.warn("Failed to fetch app fee, defaulting to 0:",e),0}}))}
158
183
  /**
159
184
  * EXPERIMENTAL METHOD
160
185
  * Settles a payment intent response by purchasing access if needed.
@@ -166,22 +191,48 @@ function R(e,t,n,i,r,s,o,d,u){return a(this,void 0,void 0,(function*(){return yi
166
191
  * @param signer - Optional signer object used to interact with the blockchain. If not provided, uses the connected wallet client.
167
192
  * @returns A promise that resolves with the transaction hash and receipt, or null if access already exists.
168
193
  * @throws {Error} If the response doesn't contain marketplace action or if the method is not buyAccess.
169
- */function Y(t,n){return a(this,void 0,void 0,(function*(){if(!t.marketplaceAction)throw new Error("No marketplace action found in X402 response");const{marketplaceAction:i}=t;if("buyAccess"!==i.method)throw new Error(`Unsupported marketplace action method: ${i.method}`);const a=BigInt(i.tokenId),r=i.payer;if(yield this.hasAccess(r,a))return console.log("User already has access to this item"),null;const s=BigInt(i.amount),o=BigInt(i.duration),d=i.asset,u="0x0000000000000000000000000000000000000000"===d,l=u?s:BigInt(0);if(n){const t=p(n),i=this.environment.MARKETPLACE_CONTRACT_ADDRESS,u=this.environment.MARKETPLACE_ABI,y=e.encodeFunctionData({abi:u,functionName:"buyAccess",args:[r,a,s,o,d]});if("viem"===t.type){const e=t.signer,n=yield e.sendTransaction({to:i,data:y,value:l,account:yield t.getAddress()});return{txHash:n,receipt:yield e.waitForTransactionReceipt({hash:n})}}if("ethers"===t.type){const e=t.signer,n=yield e.sendTransaction({to:i,data:y,value:l.toString()}),a=yield n.wait();return{txHash:n.hash,receipt:a}}{const e=t.signer;if("function"!=typeof e.sendTransaction)throw new Error("Custom signer must implement sendTransaction() method");const n=yield e.sendTransaction({to:i,data:y,value:l.toString()});if(n.wait&&"function"==typeof n.wait){const e=yield n.wait();return{txHash:n.hash,receipt:e}}return{txHash:n.hash||n}}}if(!this.viemClient)throw new Error("No signer or wallet client provided for settleX402");return yield this.buyAccess(r,a,s,o,d,u?l:void 0)}))}
194
+ */function ue(t,n){return a(this,void 0,void 0,(function*(){if(!t.marketplaceAction)throw new T("Invalid X402 response: no marketplace action found. The response may be malformed or the server returned an error.");const{marketplaceAction:i}=t;if("buyAccess"!==i.method)throw new T(`Unsupported marketplace action method "${i.method}". Only "buyAccess" is currently supported.`);const a=BigInt(i.tokenId),s=i.payer;if(yield this.hasAccess(s,a))return console.log("User already has access to this item"),null;const r=BigInt(i.amount),o=BigInt(i.duration),d=i.asset,u="0x0000000000000000000000000000000000000000"===d,l=u?r:BigInt(0),[y,c]=yield Promise.all([oe(this),de(this,a)]);if(n){const t=p(n),i=this.environment.MARKETPLACE_CONTRACT_ADDRESS,u=this.environment.MARKETPLACE_ABI,m=e.encodeFunctionData({abi:u,functionName:"buyAccess",args:[s,a,r,o,d,y,c]});if("viem"===t.type){const e=t.signer,n=yield e.sendTransaction({to:i,data:m,value:l,account:yield t.getAddress()});return{txHash:n,receipt:yield e.waitForTransactionReceipt({hash:n})}}if("ethers"===t.type){const e=t.signer,n=yield e.sendTransaction({to:i,data:m,value:l.toString()}),a=yield n.wait();return{txHash:n.hash,receipt:a}}{const e=t.signer;if("function"!=typeof e.sendTransaction)throw new T("Custom signer must implement sendTransaction() method to settle payment intents");const n=yield e.sendTransaction({to:i,data:m,value:l.toString()});if(n.wait&&"function"==typeof n.wait){const e=yield n.wait();return{txHash:n.hash,receipt:e}}return{txHash:n.hash||n}}}if(!this.viemClient)throw new v("Cannot settle payment intent: no signer or wallet connected. Please connect a wallet or provide a signer.");return yield this.buyAccess(s,a,r,o,d,y,c,u?l:void 0)}))}
195
+ /**
196
+ * Resolves a wallet address from an optional address parameter or connected wallet.
197
+ * Checks viemClient.account first, then falls back to eth_requestAccounts.
198
+ *
199
+ * @param viemClient The viem WalletClient instance.
200
+ * @param address Optional address to use directly.
201
+ * @returns The resolved wallet address.
202
+ * @throws Error if no address provided and no wallet connected or no accounts found.
203
+ */function pe(e,t){return a(this,void 0,void 0,(function*(){if(t)return t;if(!e)throw new Error("No address provided and no wallet connected. Please provide an address or connect a wallet.");if(e.account)return e.account.address;const n=yield e.request({method:"eth_requestAccounts",params:[]});if(!n||0===n.length)throw new Error("No accounts found in connected wallet.");return n[0]}))}
204
+ /**
205
+ * Enum representing the type of license for an IP NFT.
206
+ * - DURATION_BASED: License expires after a set duration (subscription model).
207
+ * - SINGLE_PAYMENT: One-time payment for perpetual access.
208
+ * - X402: HTTP 402-based micropayment license (no on-chain payments).
209
+ */var le,ye,ce;exports.LicenseType=void 0,(le=exports.LicenseType||(exports.LicenseType={}))[le.DURATION_BASED=0]="DURATION_BASED",le[le.SINGLE_PAYMENT=1]="SINGLE_PAYMENT",le[le.X402=2]="X402",
170
210
  /**
171
211
  * Enum representing the status of data in the system.
172
- * * - ACTIVE: The data is currently active and available.
173
- * * - PENDING_DELETE: The data is scheduled for deletion but not yet removed.
174
- * * - DELETED: The data has been deleted and is no longer available.
175
- */var Q;exports.DataStatus=void 0,(Q=exports.DataStatus||(exports.DataStatus={}))[Q.ACTIVE=0]="ACTIVE",Q[Q.PENDING_DELETE=1]="PENDING_DELETE",Q[Q.DELETED=2]="DELETED";
212
+ * - ACTIVE: The data is currently active and available.
213
+ * - DELETED: The data has been deleted and is no longer available.
214
+ * - DISPUTED: The data has been disputed and marked as potentially infringing.
215
+ */
216
+ exports.DataStatus=void 0,(ye=exports.DataStatus||(exports.DataStatus={}))[ye.ACTIVE=0]="ACTIVE",ye[ye.DELETED=1]="DELETED",ye[ye.DISPUTED=2]="DISPUTED",
217
+ /**
218
+ * Enum representing the status of a dispute.
219
+ * - Uninitialized: Dispute does not exist.
220
+ * - Raised: Dispute has been raised but not yet asserted by IP owner.
221
+ * - Asserted: IP owner has responded to the dispute.
222
+ * - Resolved: Dispute has been resolved (either valid or invalid).
223
+ * - Cancelled: Dispute was cancelled by the initiator.
224
+ */
225
+ exports.DisputeStatus=void 0,(ce=exports.DisputeStatus||(exports.DisputeStatus={}))[ce.Uninitialized=0]="Uninitialized",ce[ce.Raised=1]="Raised",ce[ce.Asserted=2]="Asserted",ce[ce.Resolved=3]="Resolved",ce[ce.Cancelled=4]="Cancelled";
176
226
  /**
177
227
  * Creates license terms for a digital asset.
178
228
  * @param price The price of the asset in wei.
179
- * @param duration The duration of the license in seconds.
229
+ * @param duration The duration of the license in seconds (use 0 for SINGLE_PAYMENT and X402).
180
230
  * @param royaltyBps The royalty percentage in basis points (0-10000).
181
231
  * @param paymentToken The address of the payment token (ERC20 / address(0) for native currency).
232
+ * @param licenseType The type of license (defaults to DURATION_BASED).
182
233
  * @returns The created license terms.
183
234
  */
184
- const ee={X402Intent:[{name:"payer",type:"address"},{name:"asset",type:"address"},{name:"amount",type:"uint256"},{name:"httpMethod",type:"string"},{name:"payTo",type:"address"},{name:"tokenId",type:"uint256"},{name:"duration",type:"uint32"},{name:"expiresAt",type:"uint256"},{name:"nonce",type:"bytes32"}]},te=(e,t,n)=>a(void 0,void 0,void 0,(function*(){return yield fetch(`${e.environment.AUTH_HUB_BASE_API}/${e.environment.AUTH_ENDPOINT}/origin/data/${t}`,{method:"GET",headers:Object.assign({"Content-Type":"application/json"},n)})}))
235
+ const me={X402Intent:[{name:"payer",type:"address"},{name:"asset",type:"address"},{name:"amount",type:"uint256"},{name:"httpMethod",type:"string"},{name:"payTo",type:"address"},{name:"tokenId",type:"uint256"},{name:"duration",type:"uint32"},{name:"expiresAt",type:"uint256"},{name:"nonce",type:"bytes32"}]},he=(e,t,n)=>a(void 0,void 0,void 0,(function*(){return yield fetch(`${e.environment.AUTH_HUB_BASE_API}/origin/data/${t}`,{method:"GET",headers:Object.assign({"Content-Type":"application/json"},n)})}))
185
236
  /**
186
237
  * EXPERIMENTAL METHOD
187
238
  * Fetch data with X402 payment handling.
@@ -192,34 +243,389 @@ const ee={X402Intent:[{name:"payer",type:"address"},{name:"asset",type:"address"
192
243
  */;
193
244
  /**
194
245
  * Defines the EIP-712 typed data structure for X402 Intent signatures.
195
- */function ne(t,n,i){return a(this,void 0,void 0,(function*(){var a;const r=this.viemClient;if(!n&&!r)throw new Error("No signer or wallet client provided for X402 intent.");const s=yield te(this,t,{});if(402!==s.status){if(!s.ok)throw new Error("Failed to fetch data");return s.json()}const o=r||p(n),d=r?yield re.call(this):yield o.getAddress(),u=yield s.json();if(u.error)throw new Error(u.error);const l=u.accepts[0],y=yield ie.call(this,l,e.checksumAddress(d),o),c=btoa(JSON.stringify(y)),m=yield te(this,t,{"X-PAYMENT":c});if(402===m.status){
246
+ */function Te(t,n,i){return a(this,void 0,void 0,(function*(){var a;const s=this.viemClient;if(!n&&!s)throw new v(`Cannot fetch data for token ${t}: no signer or wallet client provided. Please connect a wallet or provide a signer.`);const r=yield he(this,t,{});if(402!==r.status){if(!r.ok){const e=yield r.text().catch((()=>r.statusText));throw new h(`Failed to fetch data for token ${t} (HTTP ${r.status}): ${e}`,r.status)}return r.json()}const o=s||p(n),d=s?yield Ae.call(this):yield o.getAddress(),u=yield r.json();if(u.error)throw new h(`Failed to process X402 intent for token ${t}: ${u.error}`);const l=u.accepts[0],y=yield fe.call(this,l,e.checksumAddress(d),o),c=btoa(JSON.stringify(y)),m=yield he(this,t,{"X-PAYMENT":c});if(402===m.status){
196
247
  // subscription required
197
- if(i){const e=yield m.json();if(yield i(e.marketplaceAction)){const i=yield this.settlePaymentIntent(e,n||r);if(i&&!i.txHash)throw new Error(`Failed to settle payment intent for token ID ${t}`);
248
+ if(i){const e=yield m.json();if(yield i(e.marketplaceAction)){const i=yield this.settlePaymentIntent(e,n||s);if(i&&!i.txHash)throw new h(`Failed to settle X402 payment for token ${t}: no transaction hash returned`);
198
249
  // retry fetching data after settlement
199
250
  return yield this.getDataWithIntent(t,n,void 0)}
200
251
  // user declined to proceed with payment
201
- return{error:"User declined to proceed with payment",data:null}}return m.json()}if(!m.ok)throw new Error("Failed to fetch data after X402 payment");const h=yield m.json();return{error:null,data:null!==(a=h.data)&&void 0!==a?a:h}}))}
252
+ return{error:"User declined to proceed with payment",data:null}}return m.json()}if(!m.ok){const e=yield m.text().catch((()=>m.statusText));throw new h(`Failed to fetch data for token ${t} after X402 payment (HTTP ${m.status}): ${e}`,m.status)}const T=yield m.json();return{error:null,data:null!==(a=T.data)&&void 0!==a?a:T}}))}
202
253
  /**
203
254
  * Build the X402 payment payload.
204
255
  * @private
205
- */function ie(t,n,i){return a(this,void 0,void 0,(function*(){const a="native"===t.asset?e.zeroAddress:t.asset,r=BigInt(t.maxAmountRequired||0),s=t.extra.duration,o=ae.call(this),d=ee,u=crypto.randomUUID(),l=e.keccak256(e.toBytes(u)),y={payer:n,asset:a,amount:r.toString(),httpMethod:"GET",payTo:e.checksumAddress(this.environment.MARKETPLACE_CONTRACT_ADDRESS),tokenId:t.extra.tokenId,duration:s,expiresAt:Math.floor(Date.now()/1e3)+t.maxTimeoutSeconds,nonce:l},c=p(i),m=yield c.signTypedData(o,d,y);return{x402Version:1,scheme:"exact",network:t.network,payload:Object.assign(Object.assign({},y),{sigType:"eip712",signature:m,license:{tokenId:t.extra.tokenId,duration:s}})}}))}
256
+ */function fe(t,n,i){return a(this,void 0,void 0,(function*(){const a="native"===t.asset?e.zeroAddress:t.asset,s=BigInt(t.maxAmountRequired||0),r=t.extra.duration,o=ve.call(this),d=me,u=crypto.randomUUID(),l=e.keccak256(e.toBytes(u)),y={payer:n,asset:a,amount:s.toString(),httpMethod:"GET",payTo:e.checksumAddress(this.environment.MARKETPLACE_CONTRACT_ADDRESS),tokenId:t.extra.tokenId,duration:r,expiresAt:Math.floor(Date.now()/1e3)+t.maxTimeoutSeconds,nonce:l},c=p(i),m=yield c.signTypedData(o,d,y);return{x402Version:1,scheme:"exact",network:t.network,payload:Object.assign(Object.assign({},y),{sigType:"eip712",signature:m,license:{tokenId:t.extra.tokenId,duration:r}})}}))}
206
257
  /**
207
258
  * Create the X402 Intent domain for EIP-712 signing.
208
259
  * @private
209
- */function ae(){return{name:"Origin X402 Intent",version:"1",chainId:this.environment.CHAIN.id,verifyingContract:this.environment.MARKETPLACE_CONTRACT_ADDRESS}}
260
+ */function ve(){return{name:"Origin X402 Intent",version:"1",chainId:this.environment.CHAIN.id,verifyingContract:this.environment.MARKETPLACE_CONTRACT_ADDRESS}}
210
261
  /**
211
262
  * Get the current account address.
212
263
  * @private
213
- */function re(){return a(this,void 0,void 0,(function*(){const e=this.viemClient;if(!e)throw new Error("WalletClient not connected. Please connect a wallet.");
264
+ */function Ae(){return a(this,void 0,void 0,(function*(){const e=this.viemClient;if(!e)throw new v("No wallet connected. Please connect a wallet to perform this action.");
214
265
  // If account is already set on the client, return it directly
215
266
  if(e.account)return e.account.address;
216
267
  // Otherwise request accounts (browser wallet flow)
217
- const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.length)throw new Error("No accounts found in connected wallet.");return t[0]}))}
268
+ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.length)throw new v("No accounts found in connected wallet. Please unlock your wallet or add an account.");return t[0]}))}
269
+ /**
270
+ * Raises a dispute against an IP NFT.
271
+ * Requires the caller to have the dispute bond amount in dispute tokens.
272
+ *
273
+ * @param targetIpId The token ID of the IP NFT to dispute.
274
+ * @param evidenceHash The hash of evidence supporting the dispute.
275
+ * @param disputeTag A tag identifying the type of dispute.
276
+ * @returns A promise that resolves with the transaction result including the dispute ID.
277
+ *
278
+ * @example
279
+ * ```typescript
280
+ * const result = await origin.raiseDispute(
281
+ * 1n,
282
+ * "0x1234...", // evidence hash
283
+ * "0x5678..." // dispute tag (e.g., "infringement", "fraud")
284
+ * );
285
+ * ```
286
+ */function we(e,t,n){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"raiseDispute",[e,t,n],{waitForReceipt:!0})}))}
287
+ /**
288
+ * Raises a dispute with automatic evidence upload to IPFS.
289
+ * Uploads evidence JSON to IPFS, hashes the CID to bytes32 for on-chain storage,
290
+ * and calls raiseDispute.
291
+ *
292
+ * @param targetIpId The token ID of the IP NFT to dispute.
293
+ * @param evidence The evidence JSON object to upload to IPFS.
294
+ * @param disputeTag A tag identifying the type of dispute.
295
+ * @returns A promise that resolves with the transaction result, IPFS CID, and evidence hash.
296
+ *
297
+ * @example
298
+ * ```typescript
299
+ * const result = await origin.raiseDisputeSmart(
300
+ * 1n,
301
+ * { reason: "copyright", details: "Unauthorized use of copyrighted material" },
302
+ * "0x696e6672696e67656d656e74..." // dispute tag
303
+ * );
304
+ *
305
+ * // Store the CID for evidence retrieval
306
+ * console.log("Evidence CID:", result.evidenceCid);
307
+ *
308
+ * // Fetch evidence later via IPFS gateway
309
+ * // https://ipfs.io/ipfs/{result.evidenceCid}
310
+ *
311
+ * // Verify evidence hash matches on-chain: keccak256(toHex(evidenceCid)) === evidenceHash
312
+ * ```
313
+ */function Ie(t,n,i){return a(this,void 0,void 0,(function*(){const a=yield this.uploadJSONToIPFS(n),s=e.keccak256(e.toHex(a));return{transactionResult:yield this.raiseDispute(t,s,i),evidenceCid:a,evidenceHash:s}}))}
314
+ /**
315
+ * Asserts a dispute as the IP owner with counter-evidence.
316
+ * Must be called by the owner of the disputed IP within the cooldown period.
317
+ *
318
+ * @param disputeId The ID of the dispute to assert.
319
+ * @param counterEvidenceHash The hash of evidence countering the dispute.
320
+ * @returns A promise that resolves with the transaction result.
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * await origin.disputeAssertion(1n, "0x1234..."); // counter-evidence hash
325
+ * ```
326
+ */function ge(e,t){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"disputeAssertion",[e,t],{waitForReceipt:!0})}))}
327
+ /**
328
+ * Votes on a dispute as a CAMP token staker.
329
+ * Only users who staked before the dispute was raised can vote.
330
+ * Requires the caller to have voting power >= staking threshold.
331
+ *
332
+ * @param disputeId The ID of the dispute to vote on.
333
+ * @param support True to vote in favor of the dispute, false to vote against.
334
+ * @returns A promise that resolves with the transaction result.
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * // Vote in favor of the dispute
339
+ * await origin.voteOnDispute(1n, true);
340
+ *
341
+ * // Vote against the dispute
342
+ * await origin.voteOnDispute(1n, false);
343
+ * ```
344
+ */function be(e,t){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"voteOnDispute",[e,t],{waitForReceipt:!0})}))}
345
+ /**
346
+ * Resolves a dispute after the voting period has ended.
347
+ * Can be called by anyone - resolution is deterministic based on votes and quorum.
348
+ * If the dispute is valid, the IP is marked as disputed and bond is returned.
349
+ * If invalid, the bond is split between the IP owner and resolver (protocol fee to caller).
350
+ *
351
+ * @param disputeId The ID of the dispute to resolve.
352
+ * @returns A promise that resolves with the transaction result.
353
+ *
354
+ * @example
355
+ * ```typescript
356
+ * await origin.resolveDispute(1n);
357
+ * ```
358
+ */function Ce(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"resolveDispute",[e],{waitForReceipt:!0})}))}
359
+ /**
360
+ * Cancels a dispute that is still in the raised state.
361
+ * Can only be called by the dispute initiator during the cooldown period.
362
+ * The bond is returned to the initiator.
363
+ *
364
+ * @param disputeId The ID of the dispute to cancel.
365
+ * @returns A promise that resolves with the transaction result.
366
+ *
367
+ * @example
368
+ * ```typescript
369
+ * await origin.cancelDispute(1n);
370
+ * ```
371
+ */function Ee(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"cancelDispute",[e],{waitForReceipt:!0})}))}
372
+ /**
373
+ * Tags a child IP as disputed if its parent has been successfully disputed.
374
+ * This propagates the dispute status to derivative IPs.
375
+ *
376
+ * @param childIpId The token ID of the child IP to tag.
377
+ * @param infringerDisputeId The ID of the resolved dispute against the parent IP.
378
+ * @returns A promise that resolves with the transaction result.
379
+ *
380
+ * @example
381
+ * ```typescript
382
+ * // After parent IP (tokenId 1) has been disputed, tag child IP (tokenId 2)
383
+ * await origin.tagChildIp(2n, 1n); // childIpId, disputeId of parent
384
+ * ```
385
+ */function Se(e,t){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"tagChildIp",[e,t],{waitForReceipt:!0})}))}
386
+ /**
387
+ * Gets the details of a dispute by its ID.
388
+ *
389
+ * @param disputeId The ID of the dispute to fetch.
390
+ * @returns A promise that resolves with the dispute details.
391
+ *
392
+ * @example
393
+ * ```typescript
394
+ * const dispute = await origin.getDispute(1n);
395
+ * console.log(`Status: ${dispute.status}`);
396
+ * console.log(`Yes votes: ${dispute.yesVotes}`);
397
+ * console.log(`No votes: ${dispute.noVotes}`);
398
+ * ```
399
+ */function Pe(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.DISPUTE_CONTRACT_ADDRESS,this.environment.DISPUTE_ABI,"disputes",[e])}))}
400
+ // minimal ABI for staking vault
401
+ const De=[{inputs:[{name:"account",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{name:"account",type:"address"}],name:"userStakeTimestamp",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"}];
402
+ /**
403
+ * Checks if a user meets the requirements to vote on a dispute.
404
+ * Returns detailed information about eligibility and reason if ineligible.
405
+ *
406
+ * @param disputeId The ID of the dispute to check.
407
+ * @param voter Optional address to check. If not provided, uses connected wallet.
408
+ * @returns A promise that resolves with the vote eligibility details.
409
+ *
410
+ * @example
411
+ * ```typescript
412
+ * const eligibility = await origin.canVoteOnDispute(1n);
413
+ *
414
+ * if (eligibility.canVote) {
415
+ * console.log(`You can vote with weight: ${eligibility.votingWeight}`);
416
+ * await origin.voteOnDispute(1n, true);
417
+ * } else {
418
+ * console.log(`Cannot vote: ${eligibility.reason}`);
419
+ * }
420
+ * ```
421
+ */function Re(e,t){return a(this,void 0,void 0,(function*(){const n=yield pe(this.viemClient,t),i=C(),a=this.environment.DISPUTE_CONTRACT_ADDRESS,s=this.environment.DISPUTE_ABI,[r,o,d,u,p,l]=yield Promise.all([this.getDispute(e),i.readContract({address:a,abi:s,functionName:"stakingVault",args:[]}),i.readContract({address:a,abi:s,functionName:"stakingThreshold",args:[]}),i.readContract({address:a,abi:s,functionName:"disputeCoolDownPeriod",args:[]}),i.readContract({address:a,abi:s,functionName:"disputeJudgementPeriod",args:[]}),i.readContract({address:a,abi:s,functionName:"hasVoted",args:[e,n]})]),y=r.status,c=r.disputeTimestamp,m=r.assertionTimestamp,[h,T]=yield Promise.all([i.readContract({address:o,abi:De,functionName:"userStakeTimestamp",args:[n]}),i.readContract({address:o,abi:De,functionName:"balanceOf",args:[n]})]),f=BigInt(Math.floor(Date.now()/1e3));let v,A=!1;y===exports.DisputeStatus.Asserted?(
422
+ // for asserted disputes, voting period is relative to assertion timestamp
423
+ v=m+p,A=f<=v):y===exports.DisputeStatus.Raised&&(
424
+ // for raised disputes, voting period extends from cooldown through judgement
425
+ v=c+u+p,A=f<=v);
426
+ // build base result
427
+ const w={canVote:!1,votingWeight:T,stakingThreshold:d,hasAlreadyVoted:l,userStakeTimestamp:h,disputeTimestamp:c,disputeStatus:y,isVotingPeriodActive:A};
428
+ // check all requirements
429
+ return y!==exports.DisputeStatus.Raised&&y!==exports.DisputeStatus.Asserted?Object.assign(Object.assign({},w),{reason:`Dispute is not in a voteable status (current: ${exports.DisputeStatus[y]})`}):A?l?Object.assign(Object.assign({},w),{reason:"You have already voted on this dispute"}):h===BigInt(0)?Object.assign(Object.assign({},w),{reason:"You have never staked CAMP tokens"}):h>=c?Object.assign(Object.assign({},w),{reason:"You staked after this dispute was raised (vote recycling prevention)"}):T<d?Object.assign(Object.assign({},w),{reason:`Insufficient stake: you have ${T} but need at least ${d}`}):Object.assign(Object.assign({},w),{canVote:!0}):Object.assign(Object.assign({},w),{reason:"Voting period has ended"})}))}
430
+ /**
431
+ * Gets detailed progress and voting statistics for a dispute.
432
+ * Includes vote counts, percentages, quorum progress, and timeline.
433
+ *
434
+ * @param disputeId The ID of the dispute to check.
435
+ * @returns A promise that resolves with the dispute progress details.
436
+ *
437
+ * @example
438
+ * ```typescript
439
+ * const progress = await origin.getDisputeProgress(1n);
440
+ *
441
+ * console.log(`Yes: ${progress.yesPercentage}% | No: ${progress.noPercentage}%`);
442
+ * console.log(`Quorum: ${progress.quorumPercentage}% (${progress.quorumMet ? 'met' : 'not met'})`);
443
+ * console.log(`Projected outcome: ${progress.projectedOutcome}`);
444
+ *
445
+ * if (progress.timeline.canResolveNow) {
446
+ * await origin.resolveDispute(1n);
447
+ * } else {
448
+ * console.log(`Can resolve in ${progress.timeline.timeUntilResolution} seconds`);
449
+ * }
450
+ * ```
451
+ */function _e(e){return a(this,void 0,void 0,(function*(){var t,n,i,a,s,r,o,d,u;const p=C(),l=this.environment.DISPUTE_CONTRACT_ADDRESS,y=this.environment.DISPUTE_ABI,[c,m,h,T]=yield Promise.all([p.readContract({address:l,abi:y,functionName:"disputes",args:[e]}),p.readContract({address:l,abi:y,functionName:"disputeQuorum",args:[]}),p.readContract({address:l,abi:y,functionName:"disputeCoolDownPeriod",args:[]}),p.readContract({address:l,abi:y,functionName:"disputeJudgementPeriod",args:[]})]),f=Number(null!==(t=c.status)&&void 0!==t?t:c[9]),v=BigInt(null!==(i=null!==(n=c.disputeTimestamp)&&void 0!==n?n:c[5])&&void 0!==i?i:0),A=BigInt(null!==(s=null!==(a=c.assertionTimestamp)&&void 0!==a?a:c[6])&&void 0!==s?s:0),w=BigInt(null!==(o=null!==(r=c.yesVotes)&&void 0!==r?r:c[7])&&void 0!==o?o:0),I=BigInt(null!==(u=null!==(d=c.noVotes)&&void 0!==d?d:c[8])&&void 0!==u?u:0),g=w+I;let b=0,E=0;g>BigInt(0)&&(b=Number(w*BigInt(1e4)/g)/100,E=Number(I*BigInt(1e4)/g)/100);
452
+ // calculate quorum progress
453
+ let S=0;m>BigInt(0)&&(S=Number(g*BigInt(1e4)/m)/100);const P=g>=m;
454
+ // determine projected outcome
455
+ let D;D=P?w>I?"dispute_succeeds":"dispute_fails":"no_quorum";
456
+ // calculate timeline
457
+ const R=BigInt(Math.floor(Date.now()/1e3)),_=new Date(1e3*Number(v)),x=new Date(1e3*Number(v+h));let N,k;f===exports.DisputeStatus.Asserted?(
458
+ // for asserted disputes, voting ends relative to assertion
459
+ N=new Date(1e3*Number(A+T)),k=A+T):(
460
+ // for raised disputes, voting ends after cooldown + judgement
461
+ N=new Date(1e3*Number(v+h+T)),k=v+h+T);const M=(f===exports.DisputeStatus.Raised||f===exports.DisputeStatus.Asserted)&&R>k,F=M?0:Number(k-R);return{disputeId:e,status:f,yesVotes:w,noVotes:I,totalVotes:g,yesPercentage:b,noPercentage:E,quorum:m,quorumPercentage:S,quorumMet:P,projectedOutcome:D,timeline:{raisedAt:_,cooldownEndsAt:x,votingEndsAt:N,canResolveNow:M,timeUntilResolution:F}}}))}
462
+ /**
463
+ * Fractionalizes an IP NFT into fungible ERC20 tokens.
464
+ * The NFT is transferred to the fractionalizer contract and a new ERC20 token is created.
465
+ * The caller receives the full supply of fractional tokens.
466
+ *
467
+ * @param tokenId The token ID of the IP NFT to fractionalize.
468
+ * @returns A promise that resolves with the transaction result.
469
+ *
470
+ * @example
471
+ * ```typescript
472
+ * // First approve the fractionalizer contract to transfer your NFT
473
+ * await origin.approve(fractionalizerAddress, tokenId);
474
+ *
475
+ * // Then fractionalize
476
+ * const result = await origin.fractionalize(1n);
477
+ * ```
478
+ */function xe(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,this.environment.FRACTIONALIZER_ABI,"fractionalize",[e],{waitForReceipt:!0})}))}
479
+ /**
480
+ * Redeems an IP NFT by burning all of its fractional tokens.
481
+ * The caller must hold the entire supply of the NFT's fractional token.
482
+ * After redemption, the NFT is transferred back to the caller.
483
+ *
484
+ * @param tokenId The token ID of the IP NFT to redeem.
485
+ * @returns A promise that resolves with the transaction result.
486
+ *
487
+ * @example
488
+ * ```typescript
489
+ * // Requires holding 100% of the fractional token supply
490
+ * await origin.redeem(1n);
491
+ * ```
492
+ */function Ne(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,this.environment.FRACTIONALIZER_ABI,"redeem",[e],{waitForReceipt:!0})}))}
493
+ /**
494
+ * Gets the fractional ERC20 token address for a specific IP NFT.
495
+ * Returns zero address if the NFT has not been fractionalized.
496
+ *
497
+ * @param tokenId The token ID of the IP NFT.
498
+ * @returns A promise that resolves with the fractional token address.
499
+ *
500
+ * @example
501
+ * ```typescript
502
+ * const fractionalToken = await origin.getTokenForNFT(1n);
503
+ * if (fractionalToken !== zeroAddress) {
504
+ * console.log(`Fractional token: ${fractionalToken}`);
505
+ * } else {
506
+ * console.log("NFT has not been fractionalized");
507
+ * }
508
+ * ```
509
+ */function ke(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,this.environment.FRACTIONALIZER_ABI,"getTokenForNFT",[e])}))}
510
+ /**
511
+ * Fractionalizes an IP NFT with automatic approval.
512
+ * This method first approves the fractionalizer contract to transfer your NFT,
513
+ * then calls fractionalize. This is the recommended method for most use cases.
514
+ *
515
+ * @param tokenId The token ID of the IP NFT to fractionalize.
516
+ * @returns A promise that resolves with the transaction result.
517
+ *
518
+ * @example
519
+ * ```typescript
520
+ * // Single call handles approval and fractionalization
521
+ * const result = await origin.fractionalizeWithApproval(1n);
522
+ * ```
523
+ */function Me(e){return a(this,void 0,void 0,(function*(){return yield this.approve(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,e),this.callContractMethod(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,this.environment.FRACTIONALIZER_ABI,"fractionalize",[e],{waitForReceipt:!0})}))}
524
+ /**
525
+ * Redeems fractional tokens for the underlying NFT, but only if the caller owns 100% of the supply.
526
+ * This method checks the caller's balance before attempting to redeem, providing a clear error
527
+ * if they don't hold the full supply.
528
+ *
529
+ * @param tokenId The token ID of the original NFT to redeem.
530
+ * @returns A promise that resolves with the transaction result.
531
+ * @throws Error if the caller doesn't own 100% of the fractional tokens.
532
+ *
533
+ * @example
534
+ * ```typescript
535
+ * try {
536
+ * const result = await origin.redeemIfComplete(1n);
537
+ * console.log("NFT redeemed successfully!");
538
+ * } catch (error) {
539
+ * console.log("You don't own all fractional tokens yet");
540
+ * }
541
+ * ```
542
+ */function Fe(e){return a(this,void 0,void 0,(function*(){
543
+ // get the ERC20 token address for this NFT
544
+ const t=yield this.getTokenForNFT(e);if(!t||"0x0000000000000000000000000000000000000000"===t)throw new Error("This NFT has not been fractionalized");
545
+ // get current wallet address
546
+ const n=yield pe(this.viemClient),i=[{inputs:[{name:"owner",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"}],a=C(),[s,r]=yield Promise.all([a.readContract({address:t,abi:i,functionName:"balanceOf",args:[n]}),a.readContract({address:t,abi:i,functionName:"totalSupply",args:[]})]);
547
+ // check caller's balance and total supply
548
+ if(s<r){const e=s*BigInt(1e4)/r;throw new Error(`Cannot redeem: you own ${e/BigInt(100)}.${e%BigInt(100)}% of the fractional tokens (${s}/${r}). You need 100% to redeem.`)}
549
+ // proceed with redemption
550
+ return this.callContractMethod(this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,this.environment.FRACTIONALIZER_ABI,"redeem",[e],{waitForReceipt:!0})}))}
551
+ // minimal ERC20 ABI
552
+ const Be=[{inputs:[{name:"owner",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"}];
553
+ /**
554
+ * Gets a user's ownership percentage of a fractionalized NFT.
555
+ * Returns detailed information about the user's fractional token holdings.
556
+ *
557
+ * @param tokenId The token ID of the original NFT.
558
+ * @param owner Optional address to check. If not provided, uses connected wallet.
559
+ * @returns A promise that resolves with the ownership details.
560
+ *
561
+ * @example
562
+ * ```typescript
563
+ * const ownership = await origin.getFractionOwnership(1n);
564
+ *
565
+ * if (!ownership.isFractionalized) {
566
+ * console.log("This NFT has not been fractionalized");
567
+ * } else {
568
+ * console.log(`You own ${ownership.ownershipPercentage}% of this NFT`);
569
+ * console.log(`Balance: ${ownership.balance} / ${ownership.totalSupply}`);
570
+ *
571
+ * if (ownership.canRedeem) {
572
+ * console.log("You can redeem the original NFT!");
573
+ * await origin.redeem(1n);
574
+ * }
575
+ * }
576
+ * ```
577
+ */function Oe(t,n){return a(this,void 0,void 0,(function*(){const i=yield pe(this.viemClient,n),a=yield this.getTokenForNFT(t);
578
+ // get the ERC20 token address for this NFT
579
+ // check if fractionalized
580
+ if(!a||a===e.zeroAddress)return{tokenId:t,erc20Address:e.zeroAddress,isFractionalized:!1,balance:BigInt(0),totalSupply:BigInt(0),ownershipPercentage:0,canRedeem:!1,decimals:18};const s=C(),[r,o,d]=yield Promise.all([s.readContract({address:a,abi:Be,functionName:"balanceOf",args:[i]}),s.readContract({address:a,abi:Be,functionName:"totalSupply",args:[]}),s.readContract({address:a,abi:Be,functionName:"decimals",args:[]})]);
581
+ // fetch ERC20 data
582
+ // calculate ownership percentage
583
+ let u=0;o>BigInt(0)&&(u=Number(r*BigInt(1e4)/o)/100);const p=r>=o&&o>BigInt(0);return{tokenId:t,erc20Address:a,isFractionalized:!0,balance:r,totalSupply:o,ownershipPercentage:u,canRedeem:p,decimals:d}}))}
584
+ /**
585
+ * Checks if a user can fractionalize an NFT and why not if they can't.
586
+ * Returns detailed information about eligibility requirements.
587
+ *
588
+ * @param tokenId The token ID of the NFT to check.
589
+ * @param owner Optional address to check. If not provided, uses connected wallet.
590
+ * @returns A promise that resolves with the fractionalize eligibility details.
591
+ *
592
+ * @example
593
+ * ```typescript
594
+ * const eligibility = await origin.canFractionalize(1n);
595
+ *
596
+ * if (eligibility.canFractionalize) {
597
+ * if (eligibility.needsApproval) {
598
+ * // Use fractionalizeWithApproval for convenience
599
+ * await origin.fractionalizeWithApproval(1n);
600
+ * } else {
601
+ * await origin.fractionalize(1n);
602
+ * }
603
+ * } else {
604
+ * console.log(`Cannot fractionalize: ${eligibility.reason}`);
605
+ * }
606
+ * ```
607
+ */function Ue(t,n){return a(this,void 0,void 0,(function*(){const i=yield pe(this.viemClient,n),a=C(),s=this.environment.FRACTIONALIZER_CONTRACT_ADDRESS,[r,o,d,u,p]=yield Promise.all([this.ownerOf(t),this.dataStatus(t),this.getTokenForNFT(t),a.readContract({address:this.environment.DATANFT_CONTRACT_ADDRESS,abi:this.environment.IPNFT_ABI,functionName:"getApproved",args:[t]}),a.readContract({address:this.environment.DATANFT_CONTRACT_ADDRESS,abi:this.environment.IPNFT_ABI,functionName:"isApprovedForAll",args:[i,s]})]),l=r.toLowerCase()===i.toLowerCase(),y=d&&d!==e.zeroAddress,c=p||u.toLowerCase()===s.toLowerCase(),m={canFractionalize:!1,isOwner:l,currentOwner:r,isAlreadyFractionalized:!!y,existingErc20Address:y?d:void 0,dataStatus:o,isApproved:c,needsApproval:!c};
608
+ // check requirements
609
+ return l?y?Object.assign(Object.assign({},m),{reason:`This NFT is already fractionalized. ERC20: ${d}`}):o===exports.DataStatus.DELETED?Object.assign(Object.assign({},m),{reason:"This NFT has been deleted and cannot be fractionalized"}):o===exports.DataStatus.DISPUTED?Object.assign(Object.assign({},m),{reason:"This NFT is disputed and cannot be fractionalized"}):Object.assign(Object.assign({},m),{canFractionalize:!0}):Object.assign(Object.assign({},m),{reason:`You don't own this NFT. Current owner: ${r}`})}))}
610
+ /**
611
+ * Gets information about a registered app from the AppRegistry.
612
+ *
613
+ * @param appId The app ID to look up.
614
+ * @returns A promise that resolves with the app information.
615
+ *
616
+ * @example
617
+ * ```typescript
618
+ * const appInfo = await origin.getAppInfo("my-app-id");
619
+ * console.log(`Treasury: ${appInfo.treasury}`);
620
+ * console.log(`Revenue Share: ${appInfo.revenueShareBps / 100}%`);
621
+ * console.log(`Active: ${appInfo.isActive}`);
622
+ * ```
623
+ */function $e(e){return a(this,void 0,void 0,(function*(){return this.callContractMethod(this.environment.APP_REGISTRY_CONTRACT_ADDRESS,this.environment.APP_REGISTRY_ABI,"getAppInfo",[e])}))}
218
624
  /**
219
625
  * Approves a spender to spend a specified amount of tokens on behalf of the owner.
220
626
  * If the current allowance is less than the specified amount, it will perform the approval.
221
627
  * @param {ApproveParams} params - The parameters for the approval.
222
- */function se(t){return a(this,arguments,void 0,(function*({walletClient:t,publicClient:n,tokenAddress:i,owner:a,spender:r,amount:s}){(yield n.readContract({address:i,abi:e.erc20Abi,functionName:"allowance",args:[a,r]}))<s&&(yield t.writeContract({address:i,account:a,abi:e.erc20Abi,functionName:"approve",args:[r,s],chain:c}))}))}
628
+ */function He(t){return a(this,arguments,void 0,(function*({walletClient:t,publicClient:n,tokenAddress:i,owner:a,spender:s,amount:r}){(yield n.readContract({address:i,abi:e.erc20Abi,functionName:"allowance",args:[a,s]}))<r&&(yield t.writeContract({address:i,account:a,abi:e.erc20Abi,functionName:"approve",args:[s,r],chain:c}))}))}
223
629
  /**
224
630
  * Executes an atomic bulk purchase of multiple IP-NFT licenses.
225
631
  * All purchases succeed or all fail together.
@@ -238,7 +644,7 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
238
644
  * const totalValue = 3000000000000000n;
239
645
  * await origin.bulkBuyAccess(buyerAddress, purchases, totalValue);
240
646
  * ```
241
- */function oe(e,t,n){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"bulkBuyAccess",[e,t],{waitForReceipt:!0,value:n})}
647
+ */function je(e,t,n){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"bulkBuyAccess",[e,t],{waitForReceipt:!0,value:n})}
242
648
  /**
243
649
  * Executes a fault-tolerant bulk purchase of multiple IP-NFT licenses.
244
650
  * Individual purchases can fail without reverting the entire transaction.
@@ -255,7 +661,7 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
255
661
  * console.log(`Purchased ${result.successCount} of ${purchases.length} IPs`);
256
662
  * console.log(`Failed tokens: ${result.failedTokenIds}`);
257
663
  * ```
258
- */function de(e,t,n){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"bulkBuyAccessTolerant",[e,t],{waitForReceipt:!0,value:n})}
664
+ */function Le(e,t,n){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"bulkBuyAccessTolerant",[e,t],{waitForReceipt:!0,value:n})}
259
665
  /**
260
666
  * Previews the total cost of purchasing multiple IP-NFT licenses.
261
667
  * This is a view function that doesn't require a transaction.
@@ -269,7 +675,7 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
269
675
  * console.log(`Total cost: ${preview.totalNativeCost} wei`);
270
676
  * console.log(`Valid tokens: ${preview.validCount}`);
271
677
  * ```
272
- */function ue(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"previewBulkCost",[e])}
678
+ */function ze(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"previewBulkCost",[e])}
273
679
  /**
274
680
  * Builds purchase parameters for multiple tokens by fetching their current license terms.
275
681
  * This is a view function that doesn't require a transaction.
@@ -282,7 +688,7 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
282
688
  * const params = await origin.buildPurchaseParams([1n, 2n, 3n]);
283
689
  * await origin.bulkBuyAccess(buyer, params, totalValue);
284
690
  * ```
285
- */function pe(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"buildPurchaseParams",[e])}
691
+ */function Ve(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"buildPurchaseParams",[e])}
286
692
  /**
287
693
  * Checks the active status of multiple tokens.
288
694
  *
@@ -294,7 +700,7 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
294
700
  * const activeFlags = await origin.checkActiveStatus([1n, 2n, 3n]);
295
701
  * const activeTokens = tokenIds.filter((_, i) => activeFlags[i]);
296
702
  * ```
297
- */function le(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"checkActiveStatus",[e])}
703
+ */function qe(e){return this.callContractMethod(this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,this.environment.BATCH_PURCHASE_ABI,"checkActiveStatus",[e])}
298
704
  /**
299
705
  * Smart bulk purchase that automatically fetches terms and handles the entire purchase flow.
300
706
  * This is the recommended method for most use cases.
@@ -311,29 +717,41 @@ const t=yield e.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.l
311
717
  * // Tolerant purchase - continue even if some fail
312
718
  * const result = await origin.bulkBuyAccessSmart([1n, 2n, 3n], { tolerant: true });
313
719
  * ```
314
- */function ye(t,n){return a(this,void 0,void 0,(function*(){if(!t||0===t.length)throw new Error("No token IDs provided for bulk purchase");
720
+ */function Je(t,n){return a(this,void 0,void 0,(function*(){if(!t||0===t.length)throw new T("No token IDs provided for bulk purchase. Please provide at least one token ID.");
315
721
  // Get the buyer's wallet address
316
- const i=this.viemClient;if(!i)throw new Error("WalletClient not connected. Please connect a wallet.");let a;if(i.account)a=i.account.address;else{const e=yield i.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new Error("No accounts found in connected wallet.");a=e[0]}
722
+ const i=this.viemClient;if(!i)throw new v("Cannot perform bulk purchase: wallet not connected. Please connect a wallet first.");let a;if(i.account)a=i.account.address;else{const e=yield i.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new v("No accounts found in connected wallet. Please unlock your wallet or add an account.");a=e[0]}
317
723
  // Build purchase params from on-chain data
318
- const r=yield this.buildPurchaseParams(t);
724
+ const s=yield this.buildPurchaseParams(t);
319
725
  // Calculate total native token cost
320
- let s=BigInt(0);const o=[];for(const t of r)if(t.expectedPaymentToken===e.zeroAddress)s+=t.expectedPrice;else{
726
+ let r=BigInt(0);const o=[];for(const t of s)if(t.expectedPaymentToken===e.zeroAddress)r+=t.expectedPrice;else{
321
727
  // Group ERC20 purchases by token
322
728
  const e=o.find((e=>e.token===t.expectedPaymentToken));e?e.amount+=t.expectedPrice:o.push({token:t.expectedPaymentToken,amount:t.expectedPrice})}
323
729
  // Approve ERC20 tokens if needed
324
- const d=w();for(const e of o)yield se({walletClient:i,publicClient:d,tokenAddress:e.token,owner:a,spender:this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,amount:e.amount});
730
+ const d=C();for(const e of o)yield He({walletClient:i,publicClient:d,tokenAddress:e.token,owner:a,spender:this.environment.BATCH_PURCHASE_CONTRACT_ADDRESS,amount:e.amount});
325
731
  // Execute the purchase
326
- return(null==n?void 0:n.tolerant)?this.bulkBuyAccessTolerant(a,r,s):this.bulkBuyAccess(a,r,s)}))}var ce,me,he,Te,fe,ve,we,Ae,ge,Ie,be,Ee,Ce,Pe,ke,Se,_e,xe,Ne,De;
732
+ return(null==n?void 0:n.tolerant)?this.bulkBuyAccessTolerant(a,s,r):this.bulkBuyAccess(a,s,r)}))}var Ge,We,Ye,Ze,Ke,Xe,Qe,et,tt,nt,it,at,st,rt,ot,dt,ut,pt,lt,yt,ct,mt;
327
733
  /**
328
734
  * The Origin class
329
735
  * Handles interactions with Origin protocol.
330
- */class Me{constructor(e,t,n,i){ce.add(this),t?this.jwt=t:console.warn("JWT not provided. Some features may be unavailable."),this.viemClient=n,this.environment="string"==typeof e?x[e]:e||x.DEVELOPMENT,this.baseParentId=i,
736
+ */class ht{constructor(e,t,n,i,a){Ge.add(this),t?this.jwt=t:console.warn("JWT not provided. Some features may be unavailable."),this.viemClient=n,this.environment="string"==typeof e?U[e]:e||U.DEVELOPMENT,this.environment.AUTH_HUB_BASE_API+="PRODUCTION"===e?"/auth-mainnet":"",this.baseParentId=i,this.appId=a,
331
737
  // DataNFT methods
332
- this.mintWithSignature=R.bind(this),this.registerIpNFT=B.bind(this),this.updateTerms=F.bind(this),this.finalizeDelete=U.bind(this),this.getOrCreateRoyaltyVault=O.bind(this),this.getTerms=H.bind(this),this.ownerOf=$.bind(this),this.balanceOf=j.bind(this),this.tokenURI=L.bind(this),this.dataStatus=z.bind(this),this.isApprovedForAll=q.bind(this),this.transferFrom=W.bind(this),this.safeTransferFrom=J.bind(this),this.approve=V.bind(this),this.setApprovalForAll=K.bind(this),
738
+ this.mintWithSignature=z.bind(this),this.registerIpNFT=V.bind(this),this.updateTerms=q.bind(this),this.finalizeDelete=J.bind(this),this.getOrCreateRoyaltyVault=G.bind(this),this.getTerms=W.bind(this),this.ownerOf=Y.bind(this),this.balanceOf=Z.bind(this),this.tokenURI=K.bind(this),this.dataStatus=X.bind(this),this.isApprovedForAll=Q.bind(this),this.transferFrom=ee.bind(this),this.safeTransferFrom=te.bind(this),this.approve=ne.bind(this),this.setApprovalForAll=ie.bind(this),
333
739
  // Marketplace methods
334
- this.buyAccess=G.bind(this),this.hasAccess=X.bind(this),this.subscriptionExpiry=Z.bind(this),this.settlePaymentIntent=Y.bind(this),this.getDataWithIntent=ne.bind(this),
740
+ this.buyAccess=ae.bind(this),this.hasAccess=se.bind(this),this.subscriptionExpiry=re.bind(this),this.settlePaymentIntent=ue.bind(this),this.getDataWithIntent=Te.bind(this),
335
741
  // Bulk purchase methods
336
- this.bulkBuyAccess=oe.bind(this),this.bulkBuyAccessTolerant=de.bind(this),this.bulkBuyAccessSmart=ye.bind(this),this.previewBulkCost=ue.bind(this),this.buildPurchaseParams=pe.bind(this),this.checkActiveStatus=le.bind(this)}getJwt(){return this.jwt}setViemClient(e){this.viemClient=e}
742
+ this.bulkBuyAccess=je.bind(this),this.bulkBuyAccessTolerant=Le.bind(this),this.bulkBuyAccessSmart=Je.bind(this),this.previewBulkCost=ze.bind(this),this.buildPurchaseParams=Ve.bind(this),this.checkActiveStatus=qe.bind(this),
743
+ // Dispute module methods
744
+ this.raiseDispute=we.bind(this),this.raiseDisputeSmart=Ie.bind(this),this.disputeAssertion=ge.bind(this),this.voteOnDispute=be.bind(this),this.resolveDispute=Ce.bind(this),this.cancelDispute=Ee.bind(this),this.tagChildIp=Se.bind(this),this.getDispute=Pe.bind(this),this.canVoteOnDispute=Re.bind(this),this.getDisputeProgress=_e.bind(this),
745
+ // Fractionalizer module methods
746
+ this.fractionalize=xe.bind(this),this.redeem=Ne.bind(this),this.getTokenForNFT=ke.bind(this),this.fractionalizeWithApproval=Me.bind(this),this.redeemIfComplete=Fe.bind(this),this.getFractionOwnership=Oe.bind(this),this.canFractionalize=Ue.bind(this),
747
+ // AppRegistry module methods
748
+ this.getAppInfo=$e.bind(this)}getJwt(){return this.jwt}setViemClient(e){this.viemClient=e}
749
+ /**
750
+ * Uploads a JSON object to IPFS and returns the resulting CID.
751
+ * @param data The JSON object to upload.
752
+ * @returns The CID of the uploaded JSON.
753
+ * @throws {APIError} If the upload fails.
754
+ */uploadJSONToIPFS(e){return a(this,void 0,void 0,(function*(){const t=JSON.stringify(e),n=new File([t],"evidence.json",{type:"application/json"}),i=yield s(this,Ge,"m",Ze).call(this,n);if(!i)throw new h("Failed to upload evidence to IPFS");return i}))}
337
755
  /**
338
756
  * Mints a file-based IpNFT.
339
757
  * @param file The file to mint.
@@ -342,16 +760,20 @@ this.bulkBuyAccess=oe.bind(this),this.bulkBuyAccessTolerant=de.bind(this),this.b
342
760
  * @param parents Optional parent token IDs for lineage tracking.
343
761
  * @param options Optional parameters including progress callback, preview image, and use asset as preview flag.
344
762
  * @returns The token ID of the minted IpNFT as a string, or null if minting failed.
345
- */mintFile(e,t,n,i,s){return a(this,void 0,void 0,(function*(){let a,o=null;try{o=yield r(this,ce,"m",Ae).call(this)}catch(e){throw new Error("Failed to mint file IP. Wallet not connected.")}try{if(a=yield r(this,ce,"m",fe).call(this,e,s),!a||!a.key)throw new Error("Failed to upload file or get upload info.")}catch(e){throw new Error(`File upload failed: ${e instanceof Error?e.message:String(e)}`)}e.type&&(t.mimetype=e.type);let d=null;(null==s?void 0:s.previewImage)&&(null==s?void 0:s.previewImage.type.startsWith("image/"))?d=yield r(this,ce,"m",Te).call(this,s.previewImage):(null==s?void 0:s.useAssetAsPreview)&&e.type.startsWith("image/")&&(d=yield r(this,ce,"m",Te).call(this,e)),d&&(t.image=`ipfs://${d}`);const u=BigInt(Date.now()+6e5);// 10 minutes from now
346
- let p;this.baseParentId&&(i||(i=[]),i.unshift(this.baseParentId));try{p=yield this.registerIpNFT("file",u,n,t,a.key,i)}catch(e){throw yield r(this,ce,"m",he).call(this,a.key,"failed"),new Error(`Failed to register IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:l,signerAddress:y,creatorContentHash:c,signature:m,uri:h}=p;if(!(l&&y&&c&&void 0!==m&&h))throw new Error("Failed to register IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(o,l,i||[],!0,c,h,n,u,m);if(-1===["0x1","success"].indexOf(e.receipt.status))throw yield r(this,ce,"m",he).call(this,a.key,"failed"),new Error(`Minting failed with status: ${e.receipt.status}`)}catch(e){throw yield r(this,ce,"m",he).call(this,a.key,"failed"),new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return l.toString()}))}
763
+ */mintFile(e,t,n,i,r){return a(this,void 0,void 0,(function*(){let a,o=null;try{o=yield s(this,Ge,"m",et).call(this)}catch(t){throw new v(`Cannot mint file "${e.name}": wallet not connected. Please connect a wallet first.`)}try{if(a=yield s(this,Ge,"m",Ke).call(this,e,r),!a||!a.key)throw new h(`Failed to upload file "${e.name}": no upload info returned from server`)}catch(t){if(t instanceof h||t instanceof v)throw t;throw new h(`Failed to upload file "${e.name}": ${w(t)}`)}e.type&&(t.mimetype=e.type);let d=null;(null==r?void 0:r.previewImage)&&(null==r?void 0:r.previewImage.type.startsWith("image/"))?d=yield s(this,Ge,"m",Ze).call(this,r.previewImage):(null==r?void 0:r.useAssetAsPreview)&&e.type.startsWith("image/")&&(d=yield s(this,Ge,"m",Ze).call(this,e)),d&&(t.image=`ipfs://${d}`);const u=BigInt(Date.now()+6e5);// 10 minutes from now
764
+ let p;this.baseParentId&&(i||(i=[]),i.unshift(this.baseParentId));try{p=yield this.registerIpNFT("file",u,n,t,!0,// isIp
765
+ a.key,// fileKey
766
+ i,this.appId)}catch(e){throw yield s(this,Ge,"m",Ye).call(this,a.key,a.uploadId,[]),new Error(`Failed to register IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:l,signerAddress:y,creatorContentHash:c,signature:m,uri:T}=p;if(!(l&&y&&c&&void 0!==m&&T))throw new Error("Failed to register IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(o,l,i||[],!0,c,T,n,u,m,this.appId);if(-1===["0x1","success"].indexOf(e.receipt.status))throw yield s(this,Ge,"m",Ye).call(this,a.key,a.uploadId,[]),new Error(`Minting failed with status: ${e.receipt.status}`)}catch(e){throw yield s(this,Ge,"m",Ye).call(this,a.key,a.uploadId,[]),new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return l.toString()}))}
347
767
  /**
348
768
  * Mints a social IpNFT.
349
769
  * @param source The social media source (spotify, twitter, tiktok).
350
770
  * @param metadata The metadata associated with the social media content.
351
771
  * @param license The license terms for the IpNFT.
352
772
  * @return The token ID of the minted IpNFT as a string, or null if minting failed.
353
- */mintSocial(e,t,n){return a(this,void 0,void 0,(function*(){let i=null;try{i=yield r(this,ce,"m",Ae).call(this)}catch(e){throw new Error("Failed to mint social IP. Wallet not connected.")}t.mimetype=`social/${e}`;const a=BigInt(Math.floor(Date.now()/1e3)+600);// 10 minutes from now
354
- let s,o=this.baseParentId?[this.baseParentId]:[];try{s=yield this.registerIpNFT(e,a,n,t,void 0,o)}catch(e){throw new Error(`Failed to register Social IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:d,signerAddress:u,creatorContentHash:p,signature:l,uri:y}=s;if(!(d&&u&&p&&void 0!==l&&y))throw new Error("Failed to register Social IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(i,d,o,!0,p,y,n,a,l);if(-1===["0x1","success"].indexOf(e.receipt.status))throw new Error(`Minting Social IpNFT failed with status: ${e.receipt.status}`)}catch(e){throw new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return d.toString()}))}
773
+ */mintSocial(e,t,n){return a(this,void 0,void 0,(function*(){let i=null;try{i=yield s(this,Ge,"m",et).call(this)}catch(t){throw new v(`Cannot mint ${e} social IP: wallet not connected. Please connect a wallet first.`)}t.mimetype=`social/${e}`;const a=BigInt(Math.floor(Date.now()/1e3)+600);// 10 minutes from now
774
+ let r,o=this.baseParentId?[this.baseParentId]:[];try{r=yield this.registerIpNFT(e,a,n,t,!0,// isIp
775
+ void 0,// fileKey
776
+ o,this.appId)}catch(e){throw new Error(`Failed to register Social IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:d,signerAddress:u,creatorContentHash:p,signature:l,uri:y}=r;if(!(d&&u&&p&&void 0!==l&&y))throw new Error("Failed to register Social IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(i,d,o,!0,p,y,n,a,l,this.appId);if(-1===["0x1","success"].indexOf(e.receipt.status))throw new Error(`Minting Social IpNFT failed with status: ${e.receipt.status}`)}catch(e){throw new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return d.toString()}))}
355
777
  /**
356
778
  * Call a contract method.
357
779
  * @param {string} contractAddress The contract address.
@@ -361,20 +783,63 @@ let s,o=this.baseParentId?[this.baseParentId]:[];try{s=yield this.registerIpNFT(
361
783
  * @param {CallOptions} [options] The call options.
362
784
  * @returns {Promise<any>} A promise that resolves with the result of the contract call or transaction hash.
363
785
  * @throws {Error} - Throws an error if the wallet client is not connected and the method is not a view function.
364
- */callContractMethod(t,n,i,s){return a(this,arguments,void 0,(function*(t,n,i,a,s={}){var o;let d=null;try{d=yield r(this,ce,"m",Ae).call(this)}catch(e){throw new Error("Failed to call contract method. Wallet not connected.")}const u=e.getAbiItem({abi:n,name:i});if(u&&"stateMutability"in u&&("view"===u.stateMutability||"pure"===u.stateMutability)){const e=w();return(yield e.readContract({address:t,abi:n,functionName:i,args:a}))||null}yield r(this,ce,"m",we).call(this,this.environment.CHAIN);const p=w(),{result:l,request:y}=yield p.simulateContract({account:d,address:t,abi:n,functionName:i,args:a,value:s.value});
786
+ */callContractMethod(t,n,i,r){return a(this,arguments,void 0,(function*(t,n,i,a,r={}){var o;let d=null;try{d=yield s(this,Ge,"m",et).call(this)}catch(e){throw new v(`Cannot call "${i}" on contract ${t}: wallet not connected`)}const u=e.getAbiItem({abi:n,name:i});if(u&&"stateMutability"in u&&("view"===u.stateMutability||"pure"===u.stateMutability)){const e=C();return(yield e.readContract({address:t,abi:n,functionName:i,args:a}))||null}yield s(this,Ge,"m",Qe).call(this,this.environment.CHAIN);const p=C(),{result:l,request:y}=yield p.simulateContract({account:d,address:t,abi:n,functionName:i,args:a,value:r.value});
365
787
  // simulate
366
- if(s.simulate)return l;try{const e=yield null===(o=this.viemClient)||void 0===o?void 0:o.writeContract(y);if("string"!=typeof e)throw new Error("Transaction failed to send.");if(!s.waitForReceipt)return{txHash:e,simulatedResult:l};return{txHash:e,receipt:yield r(this,ce,"m",ve).call(this,e),simulatedResult:l}}catch(e){throw console.error("Transaction failed:",e),new Error("Transaction failed: "+e)}}))}
788
+ if(r.simulate)return l;try{const e=yield null===(o=this.viemClient)||void 0===o?void 0:o.writeContract(y);if("string"!=typeof e)throw new A(`Transaction for "${i}" failed to send: no transaction hash returned`,{contractName:t,methodName:i});if(!r.waitForReceipt)return{txHash:e,simulatedResult:l};return{txHash:e,receipt:yield s(this,Ge,"m",Xe).call(this,e),simulatedResult:l}}catch(e){if(e instanceof A||e instanceof v)throw e;throw new A(`Transaction for "${i}" failed: ${w(e)}`,{contractName:t,methodName:i})}}))}
789
+ /**
790
+ * Gets comprehensive token information in a single call.
791
+ * Combines owner, status, terms, URI, and access information.
792
+ *
793
+ * @param tokenId The token ID to get information for.
794
+ * @param owner Optional address to check access for. If not provided, uses connected wallet.
795
+ * @returns A promise that resolves with comprehensive token information.
796
+ *
797
+ * @example
798
+ * ```typescript
799
+ * const info = await origin.getTokenInfoSmart(1n);
800
+ * console.log(`Owner: ${info.owner}`);
801
+ * console.log(`Price: ${info.terms.price}`);
802
+ * console.log(`Has access: ${info.hasAccess}`);
803
+ * ```
804
+ */getTokenInfoSmart(e,t){return a(this,void 0,void 0,(function*(){var n;
805
+ // Resolve the address to check access for
806
+ let i;if(t)i=t;else if(null===(n=this.viemClient)||void 0===n?void 0:n.account)i=this.viemClient.account.address;else if(this.viemClient)try{const e=yield this.viemClient.request({method:"eth_requestAccounts",params:[]});i=e&&e.length>0?e[0]:"0x0000000000000000000000000000000000000000"}catch(e){i="0x0000000000000000000000000000000000000000"}else i="0x0000000000000000000000000000000000000000";
807
+ // Fetch all information in parallel
808
+ const[a,s,r,o,d]=yield Promise.all([this.ownerOf(e),this.tokenURI(e),this.dataStatus(e),this.getTerms(e),this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenInfo",[e]).catch((()=>({appId:""})))]);
809
+ // Get access info if we have a valid address
810
+ let u=!1,p=null;if("0x0000000000000000000000000000000000000000"!==i)try{[u,p]=yield Promise.all([this.hasAccess(i,e),this.subscriptionExpiry(e,i)])}catch(e){
811
+ // Access check failed, defaults are fine
812
+ }return{tokenId:e,owner:a,uri:s,status:r,terms:o,hasAccess:u,accessExpiry:p,appId:(null==d?void 0:d.appId)||""}}))}
367
813
  /**
368
814
  * Buy access to an asset by first checking its price via getTerms, then calling buyAccess.
369
- * @param {bigint} tokenId The token ID of the asset.
370
- * @returns {Promise<any>} The result of the buyAccess call.
371
- */buyAccessSmart(t){return a(this,void 0,void 0,(function*(){let n=null;try{n=yield r(this,ce,"m",Ae).call(this)}catch(e){throw new Error("Failed to buy access. Wallet not connected.")}const i=yield this.getTerms(t);if(!i)throw new Error("Failed to fetch terms for asset");const{price:a,paymentToken:s,duration:o}=i;if(void 0===a||void 0===s||void 0===o)throw new Error("Terms missing price, paymentToken, or duration");const d=a;return s===e.zeroAddress?this.buyAccess(n,t,d,o,s,d):(yield se({walletClient:this.viemClient,publicClient:w(),tokenAddress:s,owner:n,spender:this.environment.MARKETPLACE_CONTRACT_ADDRESS,amount:d}),this.buyAccess(n,t,d,o,s))}))}
815
+ * Automatically fetches protocol and app fees from the contracts.
816
+ * If the user already has access, returns null without making a transaction.
817
+ *
818
+ * @param tokenId The token ID of the asset.
819
+ * @returns The result of the buyAccess call, or null if user already has access.
820
+ *
821
+ * @example
822
+ * ```typescript
823
+ * const result = await origin.buyAccessSmart(1n);
824
+ * if (result === null) {
825
+ * console.log("You already have access to this asset");
826
+ * } else {
827
+ * console.log("Access purchased:", result.txHash);
828
+ * }
829
+ * ```
830
+ */buyAccessSmart(t){return a(this,void 0,void 0,(function*(){let n=null;try{n=yield s(this,Ge,"m",et).call(this)}catch(e){throw new v(`Cannot buy access to token ${t}: wallet not connected. Please connect a wallet first.`)}
831
+ // Check if user already has access
832
+ if(yield this.hasAccess(n,t))return console.log("User already has access to this asset"),null;const i=yield this.getTerms(t);if(!i)throw new h(`Failed to fetch license terms for token ${t}: no terms returned`);const{price:a,paymentToken:r,duration:o}=i;if(void 0===a||void 0===r||void 0===o)throw new h(`Invalid license terms for token ${t}: missing price, paymentToken, or duration`);
833
+ // Fetch protocol fee from marketplace
834
+ const d=yield s(this,Ge,"m",tt).call(this),u=yield s(this,Ge,"m",nt).call(this,t),p=a;
835
+ // Fetch app fee from token's appId
836
+ return r===e.zeroAddress?this.buyAccess(n,t,p,o,r,d,u,p):(yield He({walletClient:this.viemClient,publicClient:C(),tokenAddress:r,owner:n,spender:this.environment.MARKETPLACE_CONTRACT_ADDRESS,amount:p}),this.buyAccess(n,t,p,o,r,d,u))}))}
372
837
  /**
373
838
  * Fetch the underlying data associated with a specific token ID.
374
839
  * @param {bigint} tokenId - The token ID to fetch data for.
375
840
  * @returns {Promise<any>} A promise that resolves with the fetched data.
376
841
  * @throws {Error} Throws an error if the data cannot be fetched.
377
- */getData(e){return a(this,void 0,void 0,(function*(){const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/data/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!t.ok)throw new Error("Failed to fetch data");return t.json()}))}
842
+ */getData(e){return a(this,void 0,void 0,(function*(){const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/origin/data/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!t.ok){const n=yield t.text().catch((()=>t.statusText));throw new h(`Failed to fetch data for token ${e} (HTTP ${t.status}): ${n}`,t.status)}return t.json()}))}
378
843
  /**
379
844
  * Get the Token Bound Account (TBA) address for a specific token ID.
380
845
  * @param {bigint} tokenId - The token ID to get the TBA address for.
@@ -400,9 +865,9 @@ if(s.simulate)return l;try{const e=yield null===(o=this.viemClient)||void 0===o?
400
865
  * // Get ERC20 token royalties for a specific token
401
866
  * const royalties = await origin.getRoyalties(1n, "0x1234...");
402
867
  * ```
403
- */getRoyalties(t,n){return a(this,void 0,void 0,(function*(){try{const i=yield this.getTokenBoundAccount(t),a=w();let r,s;if(n&&n!==e.zeroAddress){
868
+ */getRoyalties(t,n){return a(this,void 0,void 0,(function*(){try{const i=yield this.getTokenBoundAccount(t),a=C();let s,r;if(n&&n!==e.zeroAddress){
404
869
  // erc20 (wrapped camp)
405
- const t=[{inputs:[{name:"owner",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"}];r=yield this.callContractMethod(n,t,"balanceOf",[i]);const a=yield this.callContractMethod(n,t,"decimals",[]);s=e.formatUnits(r,a)}else r=yield a.getBalance({address:i}),s=e.formatEther(r);return{tokenBoundAccount:i,balance:r,balanceFormatted:s}}catch(e){throw new Error(`Failed to retrieve royalties for token ${t}: ${e instanceof Error?e.message:String(e)}`)}}))}
870
+ const t=[{inputs:[{name:"owner",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"}];s=yield this.callContractMethod(n,t,"balanceOf",[i]);const a=yield this.callContractMethod(n,t,"decimals",[]);r=e.formatUnits(s,a)}else s=yield a.getBalance({address:i}),r=e.formatEther(s);return{tokenBoundAccount:i,balance:s,balanceFormatted:r}}catch(e){throw new Error(`Failed to retrieve royalties for token ${t}: ${e instanceof Error?e.message:String(e)}`)}}))}
406
871
  /**
407
872
  * Claim royalties from a token's Token Bound Account (TBA).
408
873
  * @param {bigint} tokenId - The token ID to claim royalties from.
@@ -418,7 +883,7 @@ const t=[{inputs:[{name:"owner",type:"address"}],name:"balanceOf",outputs:[{name
418
883
  * // Claim ERC20 token royalties to a specific address
419
884
  * await origin.claimRoyalties(1n, "0xRecipient...", "0xToken...");
420
885
  * ```
421
- */claimRoyalties(t,n,i){return a(this,void 0,void 0,(function*(){const a=yield r(this,ce,"m",ge).call(this,n),s=yield this.getTokenBoundAccount(t),o=(yield this.getRoyalties(t,i)).balance;if(o===BigInt(0))throw new Error("No royalties available to claim");let d,u,p;
886
+ */claimRoyalties(t,n,i){return a(this,void 0,void 0,(function*(){const a=yield s(this,Ge,"m",it).call(this,n),r=yield this.getTokenBoundAccount(t),o=(yield this.getRoyalties(t,i)).balance;if(o===BigInt(0))throw new Error("No royalties available to claim");let d,u,p;
422
887
  // Call execute on the TBA
423
888
  return i&&i!==e.zeroAddress?(
424
889
  // ERC20 token transfer
@@ -426,17 +891,29 @@ d=i,u=BigInt(0),
426
891
  // Encode ERC20 transfer call: transfer(address to, uint256 amount)
427
892
  p=e.encodeFunctionData({abi:[{inputs:[{name:"to",type:"address"},{name:"amount",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],functionName:"transfer",args:[a,o]})):(
428
893
  // Native token transfer
429
- d=a,u=o,p="0x"),this.callContractMethod(s,this.environment.TBA_ABI,"execute",[d,u,p,0],// operation: 0 = CALL
430
- {waitForReceipt:!0,value:BigInt(0)})}))}}ce=new WeakSet,me=function(e){return a(this,void 0,void 0,(function*(){try{const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/upload-url`,{method:"POST",body:JSON.stringify({name:e.name,type:e.type}),headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);const n=yield t.json();if(n.isError)throw new Error(n.message||"Failed to generate upload URL");return n.data}catch(e){throw console.error("Failed to generate upload URL:",e),e}}))},he=function(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/update-status`,{method:"PATCH",body:JSON.stringify({status:t,fileKey:e}),headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!n.ok){const e=yield n.text().catch((()=>"Unknown error"));throw new Error(`HTTP ${n.status}: ${e}`)}return!0}catch(e){throw console.error("Failed to update origin status:",e),e}}))},Te=function(e){return a(this,void 0,void 0,(function*(){var t;if(!e)return null;try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/upload-url-ipfs`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.jwt}`},body:JSON.stringify({fileName:e.name,fileType:e.type})});if(!n.ok){const e=yield n.text().catch((()=>"Unknown error"));throw new Error(`Failed to get presigned URL (HTTP ${n.status}): ${e}`)}const i=yield n.json(),{isError:a,data:r,message:s}=i;if(a||!r)throw new Error(`Failed to get presigned URL: ${s||"No URL returned from server"}`);const o=new FormData;o.append("file",e);const d=yield fetch(r,{method:"POST",body:o});if(!d.ok){const e=yield d.text().catch((()=>d.statusText));throw new Error(`Failed to upload preview image to IPFS (HTTP ${d.status}): ${e}`)}const u=yield d.json();if(!u||!u.data)throw new Error("Invalid response from IPFS upload: Missing data field");return null===(t=u.data)||void 0===t?void 0:t.cid}catch(e){const t=e instanceof Error?e.message:String(e);throw console.error("Error uploading preview image to IPFS:",t),new Error(`Failed to upload preview image to IPFS: ${t}`)}}))},fe=function(e,t){return a(this,void 0,void 0,(function*(){let n;try{n=yield r(this,ce,"m",me).call(this,e)}catch(e){throw console.error("Failed to generate upload URL:",e),new Error(`Failed to generate upload URL: ${e instanceof Error?e.message:String(e)}`)}if(!n)throw new Error("Failed to generate upload URL: No upload info returned");try{yield((e,t,n)=>new Promise(((a,r)=>{i.put(t,e,Object.assign({headers:{"Content-Type":e.type}},"undefined"!=typeof window&&"function"==typeof n?{onUploadProgress:e=>{if(e.total){const t=e.loaded/e.total*100;n(t)}}}:{})).then((e=>{a(e.data)})).catch((e=>{var t;const n=(null===(t=null==e?void 0:e.response)||void 0===t?void 0:t.data)||(null==e?void 0:e.message)||"Upload failed";r(n)}))})))(e,n.url,(null==t?void 0:t.progressCallback)||(()=>{}))}catch(e){try{yield r(this,ce,"m",he).call(this,n.key,"failed")}catch(e){console.error("Failed to update status to failed:",e)}const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to upload file: ${t}`)}try{yield r(this,ce,"m",he).call(this,n.key,"success")}catch(e){console.error("Failed to update status to success:",e)}return n}))},ve=function(e){return a(this,arguments,void 0,(function*(e,t={}){var n,i,a;const r=w();let s=e;const o=null!==(n=t.confirmations)&&void 0!==n?n:1,d=null!==(i=t.timeoutMs)&&void 0!==i?i:18e4,u=null!==(a=t.pollingIntervalMs)&&void 0!==a?a:1500;try{return yield r.waitForTransactionReceipt({hash:s,confirmations:o,timeout:d,pollingInterval:u,onReplaced:e=>{s=e.transaction.hash}})}catch(e){
894
+ d=a,u=o,p="0x"),this.callContractMethod(r,this.environment.TBA_ABI,"execute",[d,u,p,0],// operation: 0 = CALL
895
+ {waitForReceipt:!0,value:BigInt(0)})}))}}Ge=new WeakSet,We=function(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/origin/upload-url`,{method:"POST",body:JSON.stringify({name:e.name,type:e.type,partCount:t}),headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);const i=yield n.json();if(i.isError)throw new Error(i.message||"Failed to generate upload URL");return i.data}catch(e){throw console.error("Failed to generate upload URL:",e),e}}))},Ye=function(e,t,n){return a(this,void 0,void 0,(function*(){try{const i=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/origin/update-status`,{method:"PATCH",body:JSON.stringify({fileKey:e,uploadId:t,parts:n}),headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}});if(!i.ok){const e=yield i.text().catch((()=>"Unknown error"));throw new Error(`HTTP ${i.status}: ${e}`)}return!0}catch(e){throw console.error("Failed to update origin status:",e),e}}))},Ze=function(e){return a(this,void 0,void 0,(function*(){var t;if(!e)return null;try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/origin/upload-url-ipfs`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.jwt}`},body:JSON.stringify({fileName:e.name,fileType:e.type})});if(!n.ok){const e=yield n.text().catch((()=>"Unknown error"));throw new Error(`Failed to get presigned URL (HTTP ${n.status}): ${e}`)}const i=yield n.json(),{isError:a,data:s,message:r}=i;if(a||!s)throw new Error(`Failed to get presigned URL: ${r||"No URL returned from server"}`);const o=new FormData;o.append("file",e);const d=yield fetch(s,{method:"POST",body:o});if(!d.ok){const e=yield d.text().catch((()=>d.statusText));throw new Error(`Failed to upload preview image to IPFS (HTTP ${d.status}): ${e}`)}const u=yield d.json();if(!u||!u.data)throw new Error("Invalid response from IPFS upload: Missing data field");return null===(t=u.data)||void 0===t?void 0:t.cid}catch(e){const t=e instanceof Error?e.message:String(e);throw console.error("Error uploading preview image to IPFS:",t),new Error(`Failed to upload preview image to IPFS: ${t}`)}}))},Ke=function(e,t){return a(this,void 0,void 0,(function*(){let n,i;try{i=((e,t)=>{const n=[];let i=0;for(;i<e.size;)n.push(e.slice(i,i+t)),i+=t;return n})(e,10485760),n=yield s(this,Ge,"m",We).call(this,e,i.length)}catch(e){throw console.error("Failed to generate upload URL:",e),new Error(`Failed to generate upload URL: ${e instanceof Error?e.message:String(e)}`)}if(!n)throw new Error("Failed to generate upload URL: No upload info returned");let a;try{a=yield L(i,n.urls,(null==t?void 0:t.progressCallback)||(()=>{}))}catch(e){try{yield s(this,Ge,"m",Ye).call(this,n.key,n.uploadId,a||[])}catch(e){console.error("Failed to update status to failed:",e)}const t=e instanceof Error?e.message:String(e);throw new Error(`Failed to upload file: ${t}`)}try{yield s(this,Ge,"m",Ye).call(this,n.key,n.uploadId,a)}catch(e){console.error("Failed to update status to success:",e)}return n}))},Xe=function(e){return a(this,arguments,void 0,(function*(e,t={}){var n,i,a;const s=C();let r=e;const o=null!==(n=t.confirmations)&&void 0!==n?n:1,d=null!==(i=t.timeoutMs)&&void 0!==i?i:18e4,u=null!==(a=t.pollingIntervalMs)&&void 0!==a?a:1500;try{return yield s.waitForTransactionReceipt({hash:r,confirmations:o,timeout:d,pollingInterval:u,onReplaced:e=>{r=e.transaction.hash}})}catch(e){
431
896
  // fallback
432
- const t=Date.now();for(;Date.now()-t<d;){try{const e=yield r.getTransactionReceipt({hash:s});if(e&&e.blockNumber)return e}catch(e){}yield new Promise((e=>setTimeout(e,u)))}throw e}}))},we=function(e){return a(this,void 0,void 0,(function*(){if(!this.viemClient)throw new Error("WalletClient not connected. Could not ensure chain ID.");let t=yield this.viemClient.request({method:"eth_chainId",params:[]});if("string"==typeof t&&(t=parseInt(t,16)),t!==e.id){(e=>{v=e,f=null})// reset public client to be recreated with new chain
897
+ const t=Date.now();for(;Date.now()-t<d;){try{const e=yield s.getTransactionReceipt({hash:r});if(e&&e.blockNumber)return e}catch(e){}yield new Promise((e=>setTimeout(e,u)))}throw e}}))},Qe=function(e){return a(this,void 0,void 0,(function*(){if(!this.viemClient)throw new v(`Cannot switch to chain "${e.name}": wallet not connected. Please connect a wallet first.`);let t=yield this.viemClient.request({method:"eth_chainId",params:[]});if("string"==typeof t&&(t=parseInt(t,16)),t!==e.id){(e=>{b=e,g=null})// reset public client to be recreated with new chain
433
898
  (e);try{yield this.viemClient.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16)}]})}catch(t){
434
899
  // Unrecognized chain
435
- if(4902!==t.code)throw t;yield this.viemClient.request({method:"wallet_addEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16),chainName:e.name,rpcUrls:e.rpcUrls.default.http,nativeCurrency:e.nativeCurrency}]}),yield this.viemClient.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16)}]})}}}))},Ae=function(){return a(this,void 0,void 0,(function*(){if(!this.viemClient)throw new Error("WalletClient not connected. Please connect a wallet.");
900
+ if(4902!==t.code)throw t;yield this.viemClient.request({method:"wallet_addEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16),chainName:e.name,rpcUrls:e.rpcUrls.default.http,nativeCurrency:e.nativeCurrency}]}),yield this.viemClient.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16)}]})}}}))},et=function(){return a(this,void 0,void 0,(function*(){if(!this.viemClient)throw new v("No wallet connected. Please connect a wallet to perform this action.");
901
+ // If account is already set on the client, return it directly
902
+ if(this.viemClient.account)return this.viemClient.account.address;
903
+ // Otherwise request accounts (browser wallet flow)
904
+ const e=yield this.viemClient.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new v("No accounts found in connected wallet. Please unlock your wallet or add an account.");return e[0]}))},tt=function(){return a(this,void 0,void 0,(function*(){try{const e=yield this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"protocolFeeBps",[]);return Number(e)}catch(e){return console.warn("Failed to fetch protocol fee, defaulting to 0:",e),0}}))},nt=function(e){return a(this,void 0,void 0,(function*(){try{
905
+ // First, get the token info to find its appId
906
+ const t=yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenInfo",[e]),n=null==t?void 0:t.appId;if(!n||""===n)return 0;
907
+ // Check if app registry is configured
908
+ if(!this.environment.APP_REGISTRY_CONTRACT_ADDRESS||!this.environment.APP_REGISTRY_ABI)return 0;
909
+ // Fetch app info from registry
910
+ const i=yield this.callContractMethod(this.environment.APP_REGISTRY_CONTRACT_ADDRESS,this.environment.APP_REGISTRY_ABI,"getAppInfo",[n]);
911
+ // Only return fee if app is active
912
+ return(null==i?void 0:i.isActive)?Number(i.revenueShareBps):0}catch(e){return console.warn("Failed to fetch app fee, defaulting to 0:",e),0}}))},it=function(e){return a(this,void 0,void 0,(function*(){if(e)return e;if(!this.viemClient)throw new v("No wallet address provided and no wallet connected. Please provide an address or connect a wallet.");
436
913
  // If account is already set on the client, return it directly
437
914
  if(this.viemClient.account)return this.viemClient.account.address;
438
915
  // Otherwise request accounts (browser wallet flow)
439
- const e=yield this.viemClient.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new Error("No accounts found in connected wallet.");return e[0]}))},ge=function(e){return a(this,void 0,void 0,(function*(){if(e)return e;if(!this.viemClient)throw new Error("No wallet address provided and no wallet client connected. Please provide an owner address or connect a wallet.");try{const e=yield this.viemClient.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new Error("No accounts found in connected wallet.");return e[0]}catch(e){throw new Error(`Failed to get wallet address: ${e instanceof Error?e.message:String(e)}`)}}))};be=new WeakMap,Ee=new WeakMap,Ce=new WeakMap,Pe=new WeakMap,Ie=new WeakSet,ke=function(e,t){r(this,be,"f")[e]&&r(this,be,"f")[e].forEach((e=>e(t)))},Se=function(e){return a(this,void 0,void 0,(function*(){const t=yield r(this,Pe,"f").getItem("camp-sdk:wallet-address"),n=yield r(this,Pe,"f").getItem("camp-sdk:user-id"),i=yield r(this,Pe,"f").getItem("camp-sdk:jwt"),a=yield r(this,Pe,"f").getItem("camp-sdk:environment");t&&n&&i&&(a===this.environment.NAME||!a)?(this.walletAddress=t,this.userId=n,this.jwt=i,this.origin=new Me(this.environment,this.jwt,this.viem,this.baseParentId),this.isAuthenticated=!0,e?this.setProvider({provider:e.provider,info:e.info||{name:"Unknown"},address:t}):r(this,Ee,"f")||(console.warn("No matching provider was given for the stored wallet address. Trying to recover provider."),yield this.recoverProvider())):this.isAuthenticated=!1}))},_e=function(){return a(this,void 0,void 0,(function*(){try{const[t]=yield this.viem.requestAddresses();return this.walletAddress=e.checksumAddress(t),this.walletAddress}catch(e){throw new h(e)}}))},xe=function(){return a(this,void 0,void 0,(function*(){try{const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/client-user/nonce`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({walletAddress:this.walletAddress})}),t=yield e.json();return 200!==e.status?Promise.reject(t.message||"Failed to fetch nonce"):t.data}catch(e){throw new Error(e)}}))},Ne=function(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/client-user/verify`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({message:e,signature:t,walletAddress:this.walletAddress})}),i=yield n.json(),a=i.data.split(".")[1],r=JSON.parse(atob(a));return{success:!i.isError,userId:r.id,token:i.data}}catch(e){throw new h(e)}}))},De=function(e,t,i){return n.createSiweMessage({domain:t||(r(this,Ee,"f")?"localhost":window.location.host),address:this.walletAddress,statement:E,uri:i||(r(this,Ee,"f")?"http://localhost":window.location.origin),version:"1",chainId:this.environment.CHAIN.id,nonce:e})},exports.Auth=
916
+ const t=yield this.viemClient.request({method:"eth_requestAccounts",params:[]});if(!t||0===t.length)throw new v("No accounts found in connected wallet. Please unlock your wallet or add an account.");return t[0]}))};st=new WeakMap,rt=new WeakMap,ot=new WeakMap,dt=new WeakMap,at=new WeakSet,ut=function(e,t){s(this,st,"f")[e]&&s(this,st,"f")[e].forEach((e=>e(t)))},pt=function(e){return a(this,void 0,void 0,(function*(){const t=yield s(this,dt,"f").getItem("camp-sdk:wallet-address"),n=yield s(this,dt,"f").getItem("camp-sdk:user-id"),i=yield s(this,dt,"f").getItem("camp-sdk:jwt"),a=yield s(this,dt,"f").getItem("camp-sdk:environment");t&&n&&i&&(a===this.environment.NAME||!a)?(this.walletAddress=t,this.userId=n,this.jwt=i,this.origin=new ht(this.environment,this.jwt,this.viem,this.baseParentId,this.appId),this.isAuthenticated=!0,e?this.setProvider({provider:e.provider,info:e.info||{name:"Unknown"},address:t}):s(this,rt,"f")||(console.warn("No matching provider was given for the stored wallet address. Trying to recover provider."),yield this.recoverProvider())):this.isAuthenticated=!1}))},lt=function(){return a(this,void 0,void 0,(function*(){try{const[t]=yield this.viem.requestAddresses();return this.walletAddress=e.checksumAddress(t),this.walletAddress}catch(e){throw new v(`Failed to connect wallet: ${w(e)}`)}}))},yt=function(){return a(this,void 0,void 0,(function*(){try{const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/client-user/nonce`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({walletAddress:this.walletAddress})}),t=yield e.json();if(200!==e.status)throw new h(t.message||`Failed to fetch nonce (HTTP ${e.status})`,e.status);return t.data}catch(e){if(e instanceof h)throw e;throw new h(`Failed to fetch nonce: ${w(e)}`)}}))},ct=function(e,t){return a(this,void 0,void 0,(function*(){try{const n=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/client-user/verify`,{method:"POST",headers:{"Content-Type":"application/json","x-client-id":this.clientId},body:JSON.stringify({message:e,signature:t,walletAddress:this.walletAddress})}),i=yield n.json(),a=i.data.split(".")[1],s=JSON.parse(atob(a));return{success:!i.isError,userId:s.id,token:i.data}}catch(e){throw new h(`Failed to verify signature: ${w(e)}`)}}))},mt=function(e,t,i){return n.createSiweMessage({domain:t||(s(this,rt,"f")?"localhost":window.location.host),address:this.walletAddress,statement:N,uri:i||(s(this,rt,"f")?"http://localhost":window.location.origin),version:"1",chainId:this.environment.CHAIN.id,nonce:e})},exports.Auth=
440
917
  /**
441
918
  * The Auth class.
442
919
  * @class
@@ -452,9 +929,9 @@ class{
452
929
  * @param {StorageAdapter} [options.storage] Custom storage adapter. Defaults to localStorage in browser, memory storage in Node.js.
453
930
  * @throws {APIError} - Throws an error if the clientId is not provided.
454
931
  */
455
- constructor({clientId:e,redirectUri:t,environment:n="DEVELOPMENT",baseParentId:i,storage:a}){if(Ie.add(this),be.set(this,void 0),Ee.set(this,void 0),Ce.set(this,void 0),Pe.set(this,void 0),!e)throw new Error("clientId is required");if(-1===["PRODUCTION","DEVELOPMENT"].indexOf(n))throw new Error("Invalid environment, must be DEVELOPMENT or PRODUCTION");s(this,Ee,"undefined"==typeof window,"f"),s(this,Pe,a||(r(this,Ee,"f")?new y:new l),"f"),this.viem=null,this.environment=x[n],this.baseParentId=i,this.redirectUri=(e=>{const t=["twitter","spotify"];return"object"==typeof e?t.reduce(((t,n)=>(t[n]=e[n]||("undefined"!=typeof window?window.location.href:""),t)),{}):"string"==typeof e?t.reduce(((t,n)=>(t[n]=e,t)),{}):e?{}:t.reduce(((e,t)=>(e[t]="undefined"!=typeof window?window.location.href:"",e)),{})})(t),this.clientId=e,this.isAuthenticated=!1,this.jwt=null,this.origin=null,this.walletAddress=null,this.userId=null,s(this,be,{},"f"),
932
+ constructor({clientId:e,appId:t,redirectUri:n,environment:i="DEVELOPMENT",baseParentId:a,storage:o}){if(at.add(this),st.set(this,void 0),rt.set(this,void 0),ot.set(this,void 0),dt.set(this,void 0),!e)throw new T("clientId is required");if(!t)throw new T("appId is required");if(-1===["PRODUCTION","DEVELOPMENT"].indexOf(i))throw new T(`Invalid environment "${i}". Must be "DEVELOPMENT" or "PRODUCTION"`);r(this,rt,"undefined"==typeof window,"f"),r(this,dt,o||(s(this,rt,"f")?new y:new l),"f"),this.viem=null,this.environment=U[i],this.environment.AUTH_HUB_BASE_API+="PRODUCTION"===i?"/auth-mainnet":"",this.baseParentId=a,this.redirectUri=(e=>{const t=["twitter","spotify"];return"object"==typeof e?t.reduce(((t,n)=>(t[n]=e[n]||("undefined"!=typeof window?window.location.href:""),t)),{}):"string"==typeof e?t.reduce(((t,n)=>(t[n]=e,t)),{}):e?{}:t.reduce(((e,t)=>(e[t]="undefined"!=typeof window?window.location.href:"",e)),{})})(n),this.clientId=e,this.appId=t,this.isAuthenticated=!1,this.jwt=null,this.origin=null,this.walletAddress=null,this.userId=null,r(this,st,{},"f"),
456
933
  // only subscribe to providers in browser environment
457
- r(this,Ee,"f")||M((e=>{r(this,Ie,"m",ke).call(this,"providers",e)})),r(this,Ie,"m",Se).call(this)}
934
+ s(this,rt,"f")||j((e=>{s(this,at,"m",ut).call(this,"providers",e)})),s(this,at,"m",pt).call(this)}
458
935
  /**
459
936
  * Subscribe to an event. Possible events are "state", "provider", "providers", and "viem".
460
937
  * @param {("state"|"provider"|"providers"|"viem")} event The event.
@@ -464,26 +941,26 @@ r(this,Ee,"f")||M((e=>{r(this,Ie,"m",ke).call(this,"providers",e)})),r(this,Ie,"
464
941
  * auth.on("state", (state) => {
465
942
  * console.log(state);
466
943
  * });
467
- */on(e,t){r(this,be,"f")[e]||(r(this,be,"f")[e]=[]),r(this,be,"f")[e].push(t),"providers"===e&&t(D())}
944
+ */on(e,t){s(this,st,"f")[e]||(s(this,st,"f")[e]=[]),s(this,st,"f")[e].push(t),"providers"===e&&t(H())}
468
945
  /**
469
946
  * Unsubscribe from an event. Possible events are "state", "provider", "providers", and "viem".
470
947
  * @param {("state"|"provider"|"providers"|"viem")} event The event.
471
948
  * @param {function} callback The callback function.
472
949
  * @returns {void}
473
- */off(e,t){r(this,be,"f")[e]&&(r(this,be,"f")[e]=r(this,be,"f")[e].filter((e=>e!==t)))}
950
+ */off(e,t){s(this,st,"f")[e]&&(s(this,st,"f")[e]=s(this,st,"f")[e].filter((e=>e!==t)))}
474
951
  /**
475
952
  * Set the loading state.
476
953
  * @param {boolean} loading The loading state.
477
954
  * @returns {void}
478
- */setLoading(e){r(this,Ie,"m",ke).call(this,"state",e?"loading":this.isAuthenticated?"authenticated":"unauthenticated")}
955
+ */setLoading(e){s(this,at,"m",ut).call(this,"state",e?"loading":this.isAuthenticated?"authenticated":"unauthenticated")}
479
956
  /**
480
957
  * Set the provider. This is useful for setting the provider when the user selects a provider from the UI or when dApp wishes to use a specific provider.
481
958
  * @param {object} options The options object. Includes the provider and the provider info.
482
959
  * @returns {void}
483
960
  * @throws {APIError} - Throws an error if the provider is not provided.
484
- */setProvider({provider:n,info:i,address:a}){if(!n)throw new h("provider is required");this.viem=((n,i="window.ethereum",a,r)=>{var s,o;if(!n&&!T)return console.warn("Provider is required to create a client."),null;const d=a||c;if(!T||T.transport.name!==i&&n||r!==(null===(s=T.account)||void 0===s?void 0:s.address)&&n||(null==v?void 0:v.id)!==d.id){const a={chain:d,transport:e.custom(n,{name:i})};r&&(a.account=t.toAccount(r)),T=e.createWalletClient(a),v=d,f&&(null===(o=f.chain)||void 0===o?void 0:o.id)!==d.id&&(f=null)}return T})(n,i.name,this.environment.CHAIN,a),this.origin&&this.origin.setViemClient(this.viem),
961
+ */setProvider({provider:n,info:i,address:a}){if(!n)throw new h("provider is required");this.viem=((n,i="window.ethereum",a,s)=>{var r,o;if(!n&&!I)return console.warn("Provider is required to create a client."),null;const d=a||c;if(!I||I.transport.name!==i&&n||s!==(null===(r=I.account)||void 0===r?void 0:r.address)&&n||(null==b?void 0:b.id)!==d.id){const a={chain:d,transport:e.custom(n,{name:i})};s&&(a.account=t.toAccount(s)),I=e.createWalletClient(a),b=d,g&&(null===(o=g.chain)||void 0===o?void 0:o.id)!==d.id&&(g=null)}return I})(n,i.name,this.environment.CHAIN,a),this.origin&&this.origin.setViemClient(this.viem),
485
962
  // TODO: only use one of these
486
- r(this,Ie,"m",ke).call(this,"viem",this.viem),r(this,Ie,"m",ke).call(this,"provider",{provider:n,info:i}),r(this,Pe,"f").setItem("camp-sdk:provider",JSON.stringify(i))}
963
+ s(this,at,"m",ut).call(this,"viem",this.viem),s(this,at,"m",ut).call(this,"provider",{provider:n,info:i}),s(this,dt,"f").setItem("camp-sdk:provider",JSON.stringify(i))}
487
964
  /**
488
965
  * Set the wallet address. This is useful for edge cases where the provider can't return the wallet address. Don't use this unless you know what you're doing.
489
966
  * @param {string} walletAddress The wallet address.
@@ -492,7 +969,7 @@ r(this,Ie,"m",ke).call(this,"viem",this.viem),r(this,Ie,"m",ke).call(this,"provi
492
969
  /**
493
970
  * Recover the provider from local storage.
494
971
  * @returns {Promise<void>}
495
- */recoverProvider(){return a(this,void 0,void 0,(function*(){var e,t,n,i,a,s,o,d,u,p,l,y,c;if(!this.walletAddress)return void console.warn("No wallet address found in local storage. Please connect your wallet again.");const m=yield r(this,Pe,"f").getItem("camp-sdk:provider");if(!m)return;const h=JSON.parse(m);let T;const f=null!==(e=D())&&void 0!==e?e:[];
972
+ */recoverProvider(){return a(this,void 0,void 0,(function*(){var e,t,n,i,a,r,o,d,u,p,l,y,c;if(!this.walletAddress)return void console.warn("No wallet address found in local storage. Please connect your wallet again.");const m=yield s(this,dt,"f").getItem("camp-sdk:provider");if(!m)return;const h=JSON.parse(m);let T;const f=null!==(e=H())&&void 0!==e?e:[];
496
973
  // first pass: try to find provider by UUID/name and check if it has the right address
497
974
  // without prompting (using eth_accounts)
498
975
  for(const e of f)try{if(h.uuid&&(null===(t=e.info)||void 0===t?void 0:t.uuid)===h.uuid||h.name&&(null===(n=e.info)||void 0===n?void 0:n.name)===h.name){
@@ -502,19 +979,19 @@ const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null==
502
979
  // but still avoid prompting
503
980
  if(!T)for(const e of f)try{
504
981
  // skip providers we already checked in the first pass
505
- if(h.uuid&&(null===(s=e.info)||void 0===s?void 0:s.uuid)===h.uuid||h.name&&(null===(o=e.info)||void 0===o?void 0:o.name)===h.name)continue;const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(d=t[0])||void 0===d?void 0:d.toLowerCase())===(null===(u=this.walletAddress)||void 0===u?void 0:u.toLowerCase())){T=e;break}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
982
+ if(h.uuid&&(null===(r=e.info)||void 0===r?void 0:r.uuid)===h.uuid||h.name&&(null===(o=e.info)||void 0===o?void 0:o.name)===h.name)continue;const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(d=t[0])||void 0===d?void 0:d.toLowerCase())===(null===(u=this.walletAddress)||void 0===u?void 0:u.toLowerCase())){T=e;break}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
506
983
  // third pass: if still no provider found and we have UUID/name info,
507
984
  // try prompting the user (only for the stored provider)
508
985
  if(!T&&(h.uuid||h.name))for(const e of f)try{if(h.uuid&&(null===(p=e.info)||void 0===p?void 0:p.uuid)===h.uuid||h.name&&(null===(l=e.info)||void 0===l?void 0:l.name)===h.name){const t=yield e.provider.request({method:"eth_requestAccounts"});if(t.length>0&&(null===(y=t[0])||void 0===y?void 0:y.toLowerCase())===(null===(c=this.walletAddress)||void 0===c?void 0:c.toLowerCase())){T=e;break}}}catch(e){console.warn("Failed to reconnect to stored provider:",e)}T?this.setProvider({provider:T.provider,info:T.info||{name:"Unknown"},address:this.walletAddress}):console.warn("No matching provider found for the stored wallet address. Please connect your wallet again.")}))}
509
986
  /**
510
987
  * Disconnect the user.
511
988
  * @returns {Promise<void>}
512
- */disconnect(){return a(this,void 0,void 0,(function*(){this.isAuthenticated&&(r(this,Ie,"m",ke).call(this,"state","unauthenticated"),this.isAuthenticated=!1,this.walletAddress=null,this.userId=null,this.jwt=null,this.origin=null,s(this,Ce,void 0,"f"),yield r(this,Pe,"f").removeItem("camp-sdk:wallet-address"),yield r(this,Pe,"f").removeItem("camp-sdk:user-id"),yield r(this,Pe,"f").removeItem("camp-sdk:jwt"),yield r(this,Pe,"f").removeItem("camp-sdk:environment"))}))}
989
+ */disconnect(){return a(this,void 0,void 0,(function*(){this.isAuthenticated&&(s(this,at,"m",ut).call(this,"state","unauthenticated"),this.isAuthenticated=!1,this.walletAddress=null,this.userId=null,this.jwt=null,this.origin=null,r(this,ot,void 0,"f"),yield s(this,dt,"f").removeItem("camp-sdk:wallet-address"),yield s(this,dt,"f").removeItem("camp-sdk:user-id"),yield s(this,dt,"f").removeItem("camp-sdk:jwt"),yield s(this,dt,"f").removeItem("camp-sdk:environment"))}))}
513
990
  /**
514
991
  * Connect the user's wallet and sign the message.
515
992
  * @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
516
993
  * @throws {APIError} - Throws an error if the user cannot be authenticated.
517
- */connect(){return a(this,void 0,void 0,(function*(){r(this,Ie,"m",ke).call(this,"state","loading");try{this.walletAddress||(yield r(this,Ie,"m",_e).call(this)),this.walletAddress=e.checksumAddress(this.walletAddress);const t=yield r(this,Ie,"m",xe).call(this),n=r(this,Ie,"m",De).call(this,t),i=yield this.viem.signMessage({account:this.walletAddress,message:n}),a=yield r(this,Ie,"m",Ne).call(this,n,i);if(a.success)return this.isAuthenticated=!0,this.userId=a.userId,this.jwt=a.token,this.origin=new Me(this.environment,this.jwt,this.viem,this.baseParentId),yield r(this,Pe,"f").setItem("camp-sdk:jwt",this.jwt),yield r(this,Pe,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield r(this,Pe,"f").setItem("camp-sdk:user-id",this.userId),yield r(this,Pe,"f").setItem("camp-sdk:environment",this.environment.NAME),r(this,Ie,"m",ke).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,r(this,Ie,"m",ke).call(this,"state","unauthenticated"),new h("Failed to authenticate")}catch(e){throw this.isAuthenticated=!1,r(this,Ie,"m",ke).call(this,"state","unauthenticated"),new h(e)}}))}
994
+ */connect(){return a(this,void 0,void 0,(function*(){s(this,at,"m",ut).call(this,"state","loading");try{this.walletAddress||(yield s(this,at,"m",lt).call(this)),this.walletAddress=e.checksumAddress(this.walletAddress);const t=yield s(this,at,"m",yt).call(this),n=s(this,at,"m",mt).call(this,t),i=yield this.viem.signMessage({account:this.walletAddress,message:n}),a=yield s(this,at,"m",ct).call(this,n,i);if(a.success)return this.isAuthenticated=!0,this.userId=a.userId,this.jwt=a.token,this.origin=new ht(this.environment,this.jwt,this.viem,this.baseParentId,this.appId),yield s(this,dt,"f").setItem("camp-sdk:jwt",this.jwt),yield s(this,dt,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield s(this,dt,"f").setItem("camp-sdk:user-id",this.userId),yield s(this,dt,"f").setItem("camp-sdk:environment",this.environment.NAME),s(this,at,"m",ut).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,s(this,at,"m",ut).call(this,"state","unauthenticated"),new h("Failed to authenticate: signature verification failed")}catch(e){if(this.isAuthenticated=!1,s(this,at,"m",ut).call(this,"state","unauthenticated"),e instanceof h||e instanceof v)throw e;throw new h(`Failed to authenticate: ${w(e)}`)}}))}
518
995
  /**
519
996
  * Connect with a custom signer (for Node.js or custom wallet implementations).
520
997
  * This method bypasses browser wallet interactions and uses the provided signer directly.
@@ -533,9 +1010,9 @@ if(!T&&(h.uuid||h.name))for(const e of f)try{if(h.uuid&&(null===(p=e.info)||void
533
1010
  * const account = privateKeyToAccount('0x...');
534
1011
  * const client = createWalletClient({ account, chain: mainnet, transport: http() });
535
1012
  * await auth.connectWithSigner(client);
536
- */connectWithSigner(t,n){return a(this,void 0,void 0,(function*(){r(this,Ie,"m",ke).call(this,"state","loading");try{s(this,Ce,p(t),"f"),this.walletAddress=e.checksumAddress(yield r(this,Ce,"f").getAddress()),
1013
+ */connectWithSigner(t,n){return a(this,void 0,void 0,(function*(){s(this,at,"m",ut).call(this,"state","loading");try{r(this,ot,p(t),"f"),this.walletAddress=e.checksumAddress(yield s(this,ot,"f").getAddress()),
537
1014
  // store the signer as viem client if it's a viem client, otherwise keep adapter
538
- "viem"===r(this,Ce,"f").type&&(this.viem=t);const i=yield r(this,Ie,"m",xe).call(this),a=r(this,Ie,"m",De).call(this,i,null==n?void 0:n.domain,null==n?void 0:n.uri),o=yield r(this,Ce,"f").signMessage(a),d=yield r(this,Ie,"m",Ne).call(this,a,o);if(d.success)return this.isAuthenticated=!0,this.userId=d.userId,this.jwt=d.token,this.origin=new Me(this.environment,this.jwt,this.viem,this.baseParentId),yield r(this,Pe,"f").setItem("camp-sdk:jwt",this.jwt),yield r(this,Pe,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield r(this,Pe,"f").setItem("camp-sdk:user-id",this.userId),yield r(this,Pe,"f").setItem("camp-sdk:environment",this.environment.NAME),r(this,Ie,"m",ke).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,r(this,Ie,"m",ke).call(this,"state","unauthenticated"),new h("Failed to authenticate")}catch(e){throw this.isAuthenticated=!1,s(this,Ce,void 0,"f"),r(this,Ie,"m",ke).call(this,"state","unauthenticated"),new h(e)}}))}
1015
+ "viem"===s(this,ot,"f").type&&(this.viem=t);const i=yield s(this,at,"m",yt).call(this),a=s(this,at,"m",mt).call(this,i,null==n?void 0:n.domain,null==n?void 0:n.uri),o=yield s(this,ot,"f").signMessage(a),d=yield s(this,at,"m",ct).call(this,a,o);if(d.success)return this.isAuthenticated=!0,this.userId=d.userId,this.jwt=d.token,this.origin=new ht(this.environment,this.jwt,this.viem,this.baseParentId,this.appId),yield s(this,dt,"f").setItem("camp-sdk:jwt",this.jwt),yield s(this,dt,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield s(this,dt,"f").setItem("camp-sdk:user-id",this.userId),yield s(this,dt,"f").setItem("camp-sdk:environment",this.environment.NAME),s(this,at,"m",ut).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,s(this,at,"m",ut).call(this,"state","unauthenticated"),new h("Failed to authenticate: signature verification failed")}catch(e){if(this.isAuthenticated=!1,r(this,ot,void 0,"f"),s(this,at,"m",ut).call(this,"state","unauthenticated"),e instanceof h||e instanceof v)throw e;throw new h(`Failed to authenticate: ${w(e)}`)}}))}
539
1016
  /**
540
1017
  * Get the user's linked social accounts.
541
1018
  * @returns {Promise<Record<string, boolean>>} A promise that resolves with the user's linked social accounts.
@@ -544,34 +1021,34 @@ if(!T&&(h.uuid||h.name))for(const e of f)try{if(h.uuid&&(null===(p=e.info)||void
544
1021
  * const auth = new Auth({ clientId: "your-client-id" });
545
1022
  * const socials = await auth.getLinkedSocials();
546
1023
  * console.log(socials);
547
- */getLinkedSocials(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/client-user/connections-sdk`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"}}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to fetch connections");{const t={};return Object.keys(e.data.data).forEach((n=>{t[n.split("User")[0]]=e.data.data[n]})),t}}))}
1024
+ */getLinkedSocials(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to get linked social accounts");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/client-user/connections-sdk`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"}}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to fetch connections");{const t={};return Object.keys(e.data.data).forEach((n=>{t[n.split("User")[0]]=e.data.data[n]})),t}}))}
548
1025
  /**
549
1026
  * Link the user's Twitter account.
550
1027
  * @returns {Promise<void>}
551
1028
  * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
552
- */linkTwitter(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(r(this,Ee,"f"))throw new Error("Social linking requires browser environment for OAuth flow");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/twitter/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.twitter}`}))}
1029
+ */linkTwitter(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to link Twitter account");if(s(this,rt,"f"))throw new h("Cannot link Twitter: OAuth flow requires a browser environment");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/twitter/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.twitter}`}))}
553
1030
  /**
554
1031
  * Link the user's Discord account.
555
1032
  * @returns {Promise<void>}
556
1033
  * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
557
- */linkDiscord(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(r(this,Ee,"f"))throw new Error("Social linking requires browser environment for OAuth flow");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/discord/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.discord}`}))}
1034
+ */linkDiscord(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to link Discord account");if(s(this,rt,"f"))throw new h("Cannot link Discord: OAuth flow requires a browser environment");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/discord/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.discord}`}))}
558
1035
  /**
559
1036
  * Link the user's Spotify account.
560
1037
  * @returns {Promise<void>}
561
1038
  * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
562
- */linkSpotify(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(r(this,Ee,"f"))throw new Error("Social linking requires browser environment for OAuth flow");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/spotify/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.spotify}`}))}
1039
+ */linkSpotify(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to link Spotify account");if(s(this,rt,"f"))throw new h("Cannot link Spotify: OAuth flow requires a browser environment");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/spotify/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.spotify}`}))}
563
1040
  /**
564
1041
  * Link the user's TikTok account.
565
1042
  * @param {string} handle The user's TikTok handle.
566
1043
  * @returns {Promise<any>} A promise that resolves with the TikTok account data.
567
1044
  * @throws {Error|APIError} - Throws an error if the user is not authenticated.
568
- */linkTikTok(e){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/tiktok/connect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userHandle:e,clientId:this.clientId,userId:this.userId})}).then((e=>e.json()));if(t.isError)throw"Request failed with status code 502"===t.message?new h("TikTok service is currently unavailable, try again later"):new h(t.message||"Failed to link TikTok account");return t.data}))}
1045
+ */linkTikTok(e){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to link TikTok account");const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/tiktok/connect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userHandle:e,clientId:this.clientId,userId:this.userId})}).then((e=>e.json()));if(t.isError)throw"Request failed with status code 502"===t.message?new h("TikTok service is currently unavailable, try again later"):new h(t.message||"Failed to link TikTok account");return t.data}))}
569
1046
  /**
570
1047
  * Send an OTP to the user's Telegram account.
571
1048
  * @param {string} phoneNumber The user's phone number.
572
1049
  * @returns {Promise<any>} A promise that resolves with the OTP data.
573
1050
  * @throws {Error|APIError} - Throws an error if the user is not authenticated.
574
- */sendTelegramOTP(e){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e)throw new h("Phone number is required");yield this.unlinkTelegram();const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/sendOTP-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:e})}).then((e=>e.json()));if(t.isError)throw new h(t.message||"Failed to send Telegram OTP");return t.data}))}
1051
+ */sendTelegramOTP(e){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to send Telegram OTP");if(!e)throw new T("Phone number is required to send Telegram OTP");yield this.unlinkTelegram();const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/sendOTP-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:e})}).then((e=>e.json()));if(t.isError)throw new h(t.message||"Failed to send Telegram OTP");return t.data}))}
575
1052
  /**
576
1053
  * Link the user's Telegram account.
577
1054
  * @param {string} phoneNumber The user's phone number.
@@ -579,34 +1056,34 @@ if(!T&&(h.uuid||h.name))for(const e of f)try{if(h.uuid&&(null===(p=e.info)||void
579
1056
  * @param {string} phoneCodeHash The phone code hash.
580
1057
  * @returns {Promise<object>} A promise that resolves with the Telegram account data.
581
1058
  * @throws {APIError|Error} - Throws an error if the user is not authenticated. Also throws an error if the phone number, OTP, and phone code hash are not provided.
582
- */linkTelegram(e,t,n){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e||!t||!n)throw new h("Phone number, OTP, and phone code hash are required");const i=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/signIn-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:e,code:t,phone_code_hash:n,userId:this.userId,clientId:this.clientId})}).then((e=>e.json()));if(i.isError)throw new h(i.message||"Failed to link Telegram account");return i.data}))}
1059
+ */linkTelegram(e,t,n){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to link Telegram account");if(!e||!t||!n)throw new T("Phone number, OTP, and phone code hash are all required to link Telegram");const i=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/signIn-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({phone:e,code:t,phone_code_hash:n,userId:this.userId,clientId:this.clientId})}).then((e=>e.json()));if(i.isError)throw new h(i.message||"Failed to link Telegram account");return i.data}))}
583
1060
  /**
584
1061
  * Unlink the user's Twitter account.
585
1062
  * @returns {Promise<any>} A promise that resolves with the unlink result.
586
1063
  * @throws {Error} - Throws an error if the user is not authenticated.
587
1064
  * @throws {APIError} - Throws an error if the request fails.
588
- */unlinkTwitter(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/twitter/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Twitter account");return e.data}))}
1065
+ */unlinkTwitter(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to unlink Twitter account");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/twitter/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Twitter account");return e.data}))}
589
1066
  /**
590
1067
  * Unlink the user's Discord account.
591
1068
  * @returns {Promise<any>} A promise that resolves with the unlink result.
592
1069
  * @throws {Error} - Throws an error if the user is not authenticated.
593
1070
  * @throws {APIError} - Throws an error if the request fails.
594
- */unlinkDiscord(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new h("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/discord/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Discord account");return e.data}))}
1071
+ */unlinkDiscord(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to unlink Discord account");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/discord/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Discord account");return e.data}))}
595
1072
  /**
596
1073
  * Unlink the user's Spotify account.
597
1074
  * @returns {Promise<any>} A promise that resolves with the unlink result.
598
1075
  * @throws {Error} - Throws an error if the user is not authenticated.
599
1076
  * @throws {APIError} - Throws an error if the request fails.
600
- */unlinkSpotify(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new h("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/spotify/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Spotify account");return e.data}))}
1077
+ */unlinkSpotify(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to unlink Spotify account");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/spotify/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({id:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Spotify account");return e.data}))}
601
1078
  /**
602
1079
  * Unlink the user's TikTok account.
603
1080
  * @returns {Promise<any>} A promise that resolves with the unlink result.
604
1081
  * @throws {Error} - Throws an error if the user is not authenticated.
605
1082
  * @throws {APIError} - Throws an error if the request fails.
606
- */unlinkTikTok(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new h("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/tiktok/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink TikTok account");return e.data}))}
1083
+ */unlinkTikTok(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to unlink TikTok account");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/tiktok/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink TikTok account");return e.data}))}
607
1084
  /**
608
1085
  * Unlink the user's Telegram account.
609
1086
  * @returns {Promise<any>} A promise that resolves with the unlink result.
610
1087
  * @throws {Error} - Throws an error if the user is not authenticated.
611
1088
  * @throws {APIError} - Throws an error if the request fails.
612
- */unlinkTelegram(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new h("User needs to be authenticated");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Telegram account");return e.data}))}},exports.BrowserStorage=l,exports.CustomSignerAdapter=u,exports.EthersSignerAdapter=d,exports.MemoryStorage=y,exports.Origin=Me,exports.ViemSignerAdapter=o,exports.campMainnet=m,exports.campTestnet=c,exports.createLicenseTerms=(e,t,n,i)=>{if(n<S||n>_)throw new Error(`Royalty basis points must be between ${S} and ${_}`);if(t<P||t>C)throw new Error(`Duration must be between ${P} and ${C} seconds`);if(e<k)throw new Error(`Price must be at least ${k} wei`);return{price:e,duration:t,royaltyBps:n,paymentToken:i}},exports.createNodeWalletClient=function(t,n,i){return e.createWalletClient({account:t,chain:n,transport:e.http(i)})},exports.createSignerAdapter=p;
1089
+ */unlinkTelegram(){return a(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new f("User must be authenticated to unlink Telegram account");const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/telegram/disconnect-sdk`,{method:"POST",redirect:"follow",headers:{Authorization:`Bearer ${this.jwt}`,"x-client-id":this.clientId,"Content-Type":"application/json"},body:JSON.stringify({userId:this.userId})}).then((e=>e.json()));if(e.isError)throw new h(e.message||"Failed to unlink Telegram account");return e.data}))}},exports.BrowserStorage=l,exports.CustomSignerAdapter=u,exports.EthersSignerAdapter=d,exports.MemoryStorage=y,exports.Origin=ht,exports.ViemSignerAdapter=o,exports.campMainnet=m,exports.campTestnet=c,exports.createLicenseTerms=(e,t,n,i,a=exports.LicenseType.DURATION_BASED)=>{if(n<B||n>O)throw new Error(`Royalty basis points must be between ${B} and ${O}`);if(a===exports.LicenseType.DURATION_BASED){if(t<M||t>k)throw new Error(`Duration must be between ${M} and ${k} seconds for DURATION_BASED licenses`)}else if((a===exports.LicenseType.SINGLE_PAYMENT||a===exports.LicenseType.X402)&&t>0)throw new Error(`Duration must be 0 for ${exports.LicenseType[a]} licenses`);if(e<F)throw new Error(`Price must be at least ${F} wei`);return{price:e,duration:t,royaltyBps:n,paymentToken:i,licenseType:a}},exports.createNodeWalletClient=function(t,n,i){return e.createWalletClient({account:t,chain:n,transport:e.http(i)})},exports.createSignerAdapter=p;