@campnetwork/origin 1.2.0-1 → 1.2.0-2

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.esm.js CHANGED
@@ -1,536 +1,623 @@
1
- import e from"axios";import{custom as t,createWalletClient as n,createPublicClient as i,http as a,erc20Abi as r,getAbiItem as s,zeroAddress as o,formatEther as d,formatUnits as u,encodeFunctionData as p,checksumAddress as l}from"viem";import{toAccount as y}from"viem/accounts";import{createSiweMessage as c}from"viem/siwe";
2
- /******************************************************************************
3
- Copyright (c) Microsoft Corporation.
4
-
5
- Permission to use, copy, modify, and/or distribute this software for any
6
- purpose with or without fee is hereby granted.
7
-
8
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
- PERFORMANCE OF THIS SOFTWARE.
15
- ***************************************************************************** */
16
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */function m(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 h(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"==typeof SuppressedError&&SuppressedError;class T 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}}}const f={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/"}}};var v=[{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:[]}],w=[{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:[]}],A=[{type:"constructor",inputs:[{name:"_owner",type:"address",internalType:"address"}],stateMutability:"nonpayable"},{type:"receive",stateMutability:"payable"},{type:"function",name:"claimRoyalty",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]}],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="Connect with Camp Network";const g={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",CHAIN:f,IPNFT_ABI:v,MARKETPLACE_ABI:w,ROYALTY_VAULT_ABI:A,TBA_ABI:I},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",CHAIN:{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/"}}},IPNFT_ABI:v,MARKETPLACE_ABI:w,ROYALTY_VAULT_ABI:A,TBA_ABI:I}};
17
- /**
18
- * Makes a GET request to the given URL with the provided headers.
19
- *
20
- * @param {string} url - The URL to send the GET request to.
21
- * @param {object} headers - The headers to include in the request.
22
- * @returns {Promise<object>} - The response data.
23
- * @throws {APIError} - Throws an error if the request fails.
24
- */function E(t){return m(this,arguments,void 0,(function*(t,n={}){try{return(yield e.get(t,{headers:n})).data}catch(e){if(e.response)throw new T(e.response.data.message||"API request failed",e.response.status);throw new T("Network error or server is unavailable",500)}}))}
25
- /**
26
- * Constructs a query string from an object of query parameters.
27
- *
28
- * @param {object} params - An object representing query parameters.
29
- * @returns {string} - The encoded query string.
30
- */
31
- /**
32
- * Builds a complete URL with query parameters.
33
- *
34
- * @param {string} baseURL - The base URL of the endpoint.
35
- * @param {object} params - An object representing query parameters.
36
- * @returns {string} - The complete URL with query string.
37
- */
38
- function _(e,t={}){const n=function(e={}){return Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}(t);return n?`${e}?${n}`:e}const C="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/twitter",S="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/spotify";
39
- /**
40
- * The TwitterAPI class.
41
- * @class
42
- * @classdesc The TwitterAPI class is used to interact with the Twitter API.
43
- */
44
- class k{
45
- /**
46
- * Constructor for the TwitterAPI class.
47
- * @param {object} options - The options object.
48
- * @param {string} options.apiKey - The API key. (Needed for data fetching)
49
- */
50
- constructor({apiKey:e}){this.apiKey=e}
51
- /**
52
- * Fetch Twitter user details by username.
53
- * @param {string} twitterUserName - The Twitter username.
54
- * @returns {Promise<object>} - The user details.
55
- * @throws {APIError} - Throws an error if the request fails.
56
- */fetchUserByUsername(e){return m(this,void 0,void 0,(function*(){const t=_(`${C}/user`,{twitterUserName:e});return this._fetchDataWithAuth(t)}))}
57
- /**
58
- * Fetch tweets by Twitter username.
59
- * @param {string} twitterUserName - The Twitter username.
60
- * @param {number} page - The page number.
61
- * @param {number} limit - The number of items per page.
62
- * @returns {Promise<object>} - The tweets.
63
- * @throws {APIError} - Throws an error if the request fails.
64
- */fetchTweetsByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/tweets`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
65
- /**
66
- * Fetch followers by Twitter username.
67
- * @param {string} twitterUserName - The Twitter username.
68
- * @param {number} page - The page number.
69
- * @param {number} limit - The number of items per page.
70
- * @returns {Promise<object>} - The followers.
71
- * @throws {APIError} - Throws an error if the request fails.
72
- */fetchFollowersByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/followers`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
73
- /**
74
- * Fetch following by Twitter username.
75
- * @param {string} twitterUserName - The Twitter username.
76
- * @param {number} page - The page number.
77
- * @param {number} limit - The number of items per page.
78
- * @returns {Promise<object>} - The following.
79
- * @throws {APIError} - Throws an error if the request fails.
80
- */fetchFollowingByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/following`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
81
- /**
82
- * Fetch tweet by tweet ID.
83
- * @param {string} tweetId - The tweet ID.
84
- * @returns {Promise<object>} - The tweet.
85
- * @throws {APIError} - Throws an error if the request fails.
86
- */fetchTweetById(e){return m(this,void 0,void 0,(function*(){const t=_(`${C}/getTweetById`,{tweetId:e});return this._fetchDataWithAuth(t)}))}
87
- /**
88
- * Fetch user by wallet address.
89
- * @param {string} walletAddress - The wallet address.
90
- * @param {number} page - The page number.
91
- * @param {number} limit - The number of items per page.
92
- * @returns {Promise<object>} - The user data.
93
- * @throws {APIError} - Throws an error if the request fails.
94
- */fetchUserByWalletAddress(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/wallet-twitter-data`,{walletAddress:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
95
- /**
96
- * Fetch reposted tweets by Twitter username.
97
- * @param {string} twitterUserName - The Twitter username.
98
- * @param {number} page - The page number.
99
- * @param {number} limit - The number of items per page.
100
- * @returns {Promise<object>} - The reposted tweets.
101
- * @throws {APIError} - Throws an error if the request fails.
102
- */fetchRepostedByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/reposted`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
103
- /**
104
- * Fetch replies by Twitter username.
105
- * @param {string} twitterUserName - The Twitter username.
106
- * @param {number} page - The page number.
107
- * @param {number} limit - The number of items per page.
108
- * @returns {Promise<object>} - The replies.
109
- * @throws {APIError} - Throws an error if the request fails.
110
- */fetchRepliesByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/replies`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
111
- /**
112
- * Fetch likes by Twitter username.
113
- * @param {string} twitterUserName - The Twitter username.
114
- * @param {number} page - The page number.
115
- * @param {number} limit - The number of items per page.
116
- * @returns {Promise<object>} - The likes.
117
- * @throws {APIError} - Throws an error if the request fails.
118
- */fetchLikesByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/event/likes/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
119
- /**
120
- * Fetch follows by Twitter username.
121
- * @param {string} twitterUserName - The Twitter username.
122
- * @param {number} page - The page number.
123
- * @param {number} limit - The number of items per page.
124
- * @returns {Promise<object>} - The follows.
125
- * @throws {APIError} - Throws an error if the request fails.
126
- */fetchFollowsByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/event/follows/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
127
- /**
128
- * Fetch viewed tweets by Twitter username.
129
- * @param {string} twitterUserName - The Twitter username.
130
- * @param {number} page - The page number.
131
- * @param {number} limit - The number of items per page.
132
- * @returns {Promise<object>} - The viewed tweets.
133
- * @throws {APIError} - Throws an error if the request fails.
134
- */fetchViewedTweetsByUsername(e){return m(this,arguments,void 0,(function*(e,t=1,n=10){const i=_(`${C}/event/viewed-tweets/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
135
- /**
136
- * Private method to fetch data with authorization header.
137
- * @param {string} url - The URL to fetch.
138
- * @returns {Promise<object>} - The response data.
139
- * @throws {APIError} - Throws an error if the request fails.
140
- */_fetchDataWithAuth(e){return m(this,void 0,void 0,(function*(){if(!this.apiKey)throw new T("API key is required for fetching data",401);try{return yield E(e,{"x-api-key":this.apiKey})}catch(e){throw new T(e.message,e.statusCode)}}))}}
141
- /**
142
- * The SpotifyAPI class.
143
- * @class
144
- */class x{
145
- /**
146
- * Constructor for the SpotifyAPI class.
147
- * @constructor
148
- * @param {SpotifyAPIOptions} options - The Spotify API options.
149
- * @param {string} options.apiKey - The Spotify API key.
150
- * @throws {Error} - Throws an error if the API key is not provided.
151
- */
152
- constructor(e){this.apiKey=e.apiKey}
153
- /**
154
- * Fetch the user's saved tracks by Spotify user ID.
155
- * @param {string} spotifyId - The user's Spotify ID.
156
- * @returns {Promise<object>} - The saved tracks.
157
- * @throws {APIError} - Throws an error if the request fails.
158
- */fetchSavedTracksById(e){return m(this,void 0,void 0,(function*(){const t=_(`${S}/save-tracks`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
159
- /**
160
- * Fetch the played tracks of a user by Spotify ID.
161
- * @param {string} spotifyId - The user's Spotify ID.
162
- * @returns {Promise<object>} - The played tracks.
163
- * @throws {APIError} - Throws an error if the request fails.
164
- */fetchPlayedTracksById(e){return m(this,void 0,void 0,(function*(){const t=_(`${S}/played-tracks`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
165
- /**
166
- * Fetch the user's saved albums by Spotify user ID.
167
- * @param {string} spotifyId - The user's Spotify ID.
168
- * @returns {Promise<object>} - The saved albums.
169
- * @throws {APIError} - Throws an error if the request fails.
170
- */fetchSavedAlbumsById(e){return m(this,void 0,void 0,(function*(){const t=_(`${S}/saved-albums`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
171
- /**
172
- * Fetch the user's saved playlists by Spotify user ID.
173
- * @param {string} spotifyId - The user's Spotify ID.
174
- * @returns {Promise<object>} - The saved playlists.
175
- * @throws {APIError} - Throws an error if the request fails.
176
- */fetchSavedPlaylistsById(e){return m(this,void 0,void 0,(function*(){const t=_(`${S}/saved-playlists`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
177
- /**
178
- * Fetch the tracks of an album by album ID.
179
- * @param {string} spotifyId - The Spotify ID of the user.
180
- * @param {string} albumId - The album ID.
181
- * @returns {Promise<object>} - The tracks in the album.
182
- * @throws {APIError} - Throws an error if the request fails.
183
- */fetchTracksInAlbum(e,t){return m(this,void 0,void 0,(function*(){const n=_(`${S}/album/tracks`,{spotifyId:e,albumId:t});return this._fetchDataWithAuth(n)}))}
184
- /**
185
- * Fetch the tracks in a playlist by playlist ID.
186
- * @param {string} spotifyId - The Spotify ID of the user.
187
- * @param {string} playlistId - The playlist ID.
188
- * @returns {Promise<object>} - The tracks in the playlist.
189
- * @throws {APIError} - Throws an error if the request fails.
190
- */fetchTracksInPlaylist(e,t){return m(this,void 0,void 0,(function*(){const n=_(`${S}/playlist/tracks`,{spotifyId:e,playlistId:t});return this._fetchDataWithAuth(n)}))}
191
- /**
192
- * Fetch the user's Spotify data by wallet address.
193
- * @param {string} walletAddress - The wallet address.
194
- * @returns {Promise<object>} - The user's Spotify data.
195
- * @throws {APIError} - Throws an error if the request fails.
196
- */fetchUserByWalletAddress(e){return m(this,void 0,void 0,(function*(){const t=_(`${S}/wallet-spotify-data`,{walletAddress:e});return this._fetchDataWithAuth(t)}))}
197
- /**
198
- * Private method to fetch data with authorization header.
199
- * @param {string} url - The URL to fetch.
200
- * @returns {Promise<object>} - The response data.
201
- * @throws {APIError} - Throws an error if the request fails.
202
- */_fetchDataWithAuth(e){return m(this,void 0,void 0,(function*(){if(!this.apiKey)throw new T("API key is required for fetching data",401);try{return yield E(e,{"x-api-key":this.apiKey})}catch(e){throw new T(e.message,e.statusCode)}}))}}
203
- // @ts-ignore
204
- let P=null,N=null,U=null;const D=e=>{var t;const n=U||f;return N&&(null===(t=N.chain)||void 0===t?void 0:t.id)===n.id||(N=i({chain:n,transport:a()})),N};let M=[];const B=()=>M,O=e=>{function t(t){M.some((e=>e.info.uuid===t.detail.info.uuid))||(M=[...M,t.detail],e(M))}if("undefined"!=typeof window)return window.addEventListener("eip6963:announceProvider",t),window.dispatchEvent(new Event("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",t)};
205
- /**
206
- * Mints a Data NFT with a signature.
207
- * @param to The address to mint the NFT to.
208
- * @param tokenId The ID of the token to mint.
209
- * @param parents The IDs of the parent NFTs, if applicable.
210
- * @param hash The hash of the data associated with the NFT.
211
- * @param uri The URI of the NFT metadata.
212
- * @param licenseTerms The terms of the license for the NFT.
213
- * @param deadline The deadline for the minting operation.
214
- * @param signature The signature for the minting operation.
215
- * @returns A promise that resolves when the minting is complete.
216
- */function F(e,t,n,i,a,r,s,o,d){return m(this,void 0,void 0,(function*(){return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"mintWithSignature",[e,t,a,r,s,o,n,i,d],{waitForReceipt:!0})}))}
217
- /**
218
- * Registers a Data NFT with the Origin service in order to obtain a signature for minting.
219
- * @param source The source of the Data NFT (e.g., "spotify", "twitter", "tiktok", or "file").
220
- * @param deadline The deadline for the registration operation.
221
- * @param fileKey Optional file key for file uploads.
222
- * @return A promise that resolves with the registration data.
223
- */function R(e,t,n,i,a,r){return m(this,void 0,void 0,(function*(){const s={source:e,deadline:Number(t),licenseTerms:{price:n.price.toString(),duration:n.duration,royaltyBps:n.royaltyBps,paymentToken:n.paymentToken},metadata:i,parentId:r||[]};void 0!==a&&(s.fileKey=a);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(s)});if(!o.ok)throw new Error(`Failed to get signature: ${o.statusText}`);const d=yield o.json();if(d.isError)throw new Error(`Failed to get signature: ${d.message}`);return d.data}))}
224
- /**
225
- * Updates the license terms of a specified IPNFT.
226
- * @param tokenId The ID of the IPNFT to update.
227
- * @param newTerms The new license terms to set.
228
- * @returns A promise that resolves when the transaction is complete.
229
- */function $(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"updateTerms",[e,t],{waitForReceipt:!0})}
230
- /**
231
- * Sets the IPNFT as deleted
232
- * @param tokenId The token ID to set as deleted.
233
- * @returns A promise that resolves when the transaction is complete.
234
- */function H(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"finalizeDelete",[e])}
235
- /**
236
- * Calls the getOrCreateRoyaltyVault method on the IPNFT contract.
237
- * @param tokenOwner The address of the token owner for whom to get or create the royalty vault.
238
- * @param simulateOnly If true, simulates the transaction without executing it.
239
- * @returns The address of the royalty vault associated with the specified token owner.
240
- */function j(e){return m(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}))}
241
- /**
242
- * Returns the license terms associated with a specific token ID.
243
- * @param tokenId The token ID to query.
244
- * @returns The license terms of the token ID.
245
- */function z(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getTerms",[e])}
246
- /**
247
- * Returns the owner of the specified IPNFT.
248
- * @param tokenId The ID of the IPNFT to query.
249
- * @returns The address of the owner of the IPNFT.
250
- */function L(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"ownerOf",[e])}
251
- /**
252
- * Returns the number of IPNFTs owned by the given address.
253
- * @param owner The address to query.
254
- * @returns The number of IPNFTs owned by the address.
255
- */function W(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"balanceOf",[e])}
256
- /**
257
- * Returns the metadata URI associated with a specific token ID.
258
- * @param tokenId The token ID to query.
259
- * @returns The metadata URI of the token ID.
260
- */function q(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenURI",[e])}
261
- /**
262
- * Returns the data status of the given token ID.
263
- * @param tokenId The token ID to query.
264
- * @returns The data status of the token ID.
265
- */function J(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"dataStatus",[e])}
266
- /**
267
- * Checks if an operator is approved to manage all assets of a given owner.
268
- * @param owner The address of the asset owner.
269
- * @param operator The address of the operator to check.
270
- * @return A promise that resolves to a boolean indicating if the operator is approved for all assets of the owner.
271
- */function K(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"isApprovedForAll",[e,t])}function V(e,t,n){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"transferFrom",[e,t,n])}function G(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 Y(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"approve",[e,t])}function X(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"setApprovalForAll",[e,t])}
272
- /**
273
- * Buys access to a data NFT for a specified duration.
274
- * @param buyer The address of the buyer.
275
- * @param tokenId The ID of the data NFT.
276
- * @param expectedPrice The expected price for the access.
277
- * @param expectedDuration The expected duration of the access in seconds.
278
- * @param expectedPaymentToken The address of the payment token (use zero address for native token).
279
- * @param value The amount of native token to send (only required if paying with native token).
280
- * @returns A promise that resolves when the transaction is confirmed.
281
- */function Z(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})}
282
- /**
283
- * Checks if a user has access to a specific token based on subscription expiry.
284
- * @param user - The address of the user.
285
- * @param tokenId - The ID of the token.
286
- * @returns A promise that resolves to a boolean indicating if the user has access.
287
- */function Q(e,t){return m(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 ee(e,t){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"subscriptionExpiry",[e,t])}
288
- /**
289
- * Approves a spender to spend a specified amount of tokens on behalf of the owner.
290
- * If the current allowance is less than the specified amount, it will perform the approval.
291
- * @param {ApproveParams} params - The parameters for the approval.
292
- */var te,ne,ie,ae,re,se,oe,de,ue,pe,le,ye,ce,me,he;
293
- /**
294
- * The Origin class
295
- * Handles the upload of files to Origin, as well as querying the user's stats
296
- */class Te{constructor(e,t,n){te.add(this),this.jwt=e,this.viemClient=n,this.environment=t,
297
- // DataNFT methods
298
- this.mintWithSignature=F.bind(this),this.registerIpNFT=R.bind(this),this.updateTerms=$.bind(this),this.finalizeDelete=H.bind(this),this.getOrCreateRoyaltyVault=j.bind(this),this.getTerms=z.bind(this),this.ownerOf=L.bind(this),this.balanceOf=W.bind(this),this.tokenURI=q.bind(this),this.dataStatus=J.bind(this),this.isApprovedForAll=K.bind(this),this.transferFrom=V.bind(this),this.safeTransferFrom=G.bind(this),this.approve=Y.bind(this),this.setApprovalForAll=X.bind(this),
299
- // Marketplace methods
300
- this.buyAccess=Z.bind(this),this.hasAccess=Q.bind(this),this.subscriptionExpiry=ee.bind(this)}getJwt(){return this.jwt}setViemClient(e){this.viemClient=e}uploadFile(t,n){return m(this,void 0,void 0,(function*(){let i;try{i=yield h(this,te,"m",ne).call(this,t)}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(!i)throw new Error("Failed to generate upload URL: No upload info returned");try{yield((t,n,i)=>new Promise(((a,r)=>{e.put(n,t,Object.assign({headers:{"Content-Type":t.type}},"undefined"!=typeof window&&"function"==typeof i?{onUploadProgress:e=>{if(e.total){const t=e.loaded/e.total*100;i(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)}))})))(t,i.url,(null==n?void 0:n.progressCallback)||(()=>{}))}catch(e){try{yield h(this,te,"m",ie).call(this,i.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 h(this,te,"m",ie).call(this,i.key,"success")}catch(e){console.error("Failed to update status to success:",e)}return i}))}mintFile(e,t,n,i,a){return m(this,void 0,void 0,(function*(){let r,s=null;try{s=yield h(this,te,"m",se).call(this)}catch(e){throw new Error("Failed to mint file IP. Wallet not connected.")}try{if(r=yield this.uploadFile(e,a),!r||!r.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);const o=BigInt(Date.now()+6e5);// 10 minutes from now
301
- let d;try{d=yield this.registerIpNFT("file",o,n,t,r.key,i)}catch(e){throw yield h(this,te,"m",ie).call(this,r.key,"failed"),new Error(`Failed to register IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:u,signerAddress:p,creatorContentHash:l,signature:y,uri:c}=d;if(!(u&&p&&l&&void 0!==y&&c))throw new Error("Failed to register IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(s,u,i||[],!0,l,c,n,o,y);if(-1===["0x1","success"].indexOf(e.receipt.status))throw yield h(this,te,"m",ie).call(this,r.key,"failed"),new Error(`Minting failed with status: ${e.receipt.status}`)}catch(e){throw yield h(this,te,"m",ie).call(this,r.key,"failed"),new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return u.toString()}))}mintSocial(e,t,n){return m(this,void 0,void 0,(function*(){let i=null;try{i=yield h(this,te,"m",se).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
302
- let r;try{r=yield this.registerIpNFT(e,a,n,t)}catch(e){throw new Error(`Failed to register Social IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:s,signerAddress:o,creatorContentHash:d,signature:u,uri:p}=r;if(!(s&&o&&d&&void 0!==u&&p))throw new Error("Failed to register Social IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(i,s,[],!0,d,p,n,a,u);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 s.toString()}))}getOriginUploads(){return m(this,void 0,void 0,(function*(){const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/files`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`}});if(!e.ok)return console.error("Failed to get origin uploads"),null;return(yield e.json()).data}))}
303
- /**
304
- * Get the user's Origin stats (multiplier, consent, usage, etc.).
305
- * @returns {Promise<OriginUsageReturnType>} A promise that resolves with the user's Origin stats.
306
- */getOriginUsage(){return m(this,void 0,void 0,(function*(){const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/usage`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}}).then((e=>e.json()));if(!e.isError&&e.data.user)return e;throw new T(e.message||"Failed to fetch Origin usage")}))}
307
- /**
308
- * Set the user's consent for Origin usage.
309
- * @param {boolean} consent The user's consent.
310
- * @returns {Promise<void>}
311
- * @throws {Error|APIError} - Throws an error if the user is not authenticated. Also throws an error if the consent is not provided.
312
- */setOriginConsent(e){return m(this,void 0,void 0,(function*(){if(void 0===e)throw new T("Consent is required");const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/status`,{method:"PATCH",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"},body:JSON.stringify({active:e})}).then((e=>e.json()));if(t.isError)throw new T(t.message||"Failed to set Origin consent")}))}
313
- /**
314
- * Call a contract method.
315
- * @param {string} contractAddress The contract address.
316
- * @param {Abi} abi The contract ABI.
317
- * @param {string} methodName The method name.
318
- * @param {any[]} params The method parameters.
319
- * @param {CallOptions} [options] The call options.
320
- * @returns {Promise<any>} A promise that resolves with the result of the contract call or transaction hash.
321
- * @throws {Error} - Throws an error if the wallet client is not connected and the method is not a view function.
322
- */callContractMethod(e,t,n,i){return m(this,arguments,void 0,(function*(e,t,n,i,a={}){var r;let o=null;try{o=yield h(this,te,"m",se).call(this)}catch(e){throw new Error("Failed to call contract method. Wallet not connected.")}const d=s({abi:t,name:n});if(d&&"stateMutability"in d&&("view"===d.stateMutability||"pure"===d.stateMutability)){const a=D();return(yield a.readContract({address:e,abi:t,functionName:n,args:i}))||null}yield h(this,te,"m",re).call(this,this.environment.CHAIN);const u=D(),{result:p,request:l}=yield u.simulateContract({account:o,address:e,abi:t,functionName:n,args:i,value:a.value});
323
- // simulate
324
- if(a.simulate)return p;try{const e=yield null===(r=this.viemClient)||void 0===r?void 0:r.writeContract(l);if("string"!=typeof e)throw new Error("Transaction failed to send.");if(!a.waitForReceipt)return{txHash:e,simulatedResult:p};return{txHash:e,receipt:yield h(this,te,"m",ae).call(this,e),simulatedResult:p}}catch(e){throw console.error("Transaction failed:",e),new Error("Transaction failed: "+e)}}))}
325
- /**
326
- * Buy access to an asset by first checking its price via getTerms, then calling buyAccess.
327
- * @param {bigint} tokenId The token ID of the asset.
328
- * @returns {Promise<any>} The result of the buyAccess call.
329
- */buyAccessSmart(e){return m(this,void 0,void 0,(function*(){let t=null;try{t=yield h(this,te,"m",se).call(this)}catch(e){throw new Error("Failed to buy access. Wallet not connected.")}const n=yield this.getTerms(e);if(!n)throw new Error("Failed to fetch terms for asset");const{price:i,paymentToken:a,duration:s}=n;if(void 0===i||void 0===a||void 0===s)throw new Error("Terms missing price, paymentToken, or duration");const d=i;return a===o?this.buyAccess(t,e,d,s,a,d):(yield function(e){return m(this,arguments,void 0,(function*({walletClient:e,publicClient:t,tokenAddress:n,owner:i,spender:a,amount:s}){(yield t.readContract({address:n,abi:r,functionName:"allowance",args:[i,a]}))<s&&(yield e.writeContract({address:n,account:i,abi:r,functionName:"approve",args:[a,s],chain:f}))}))}({walletClient:this.viemClient,publicClient:D(),tokenAddress:a,owner:t,spender:this.environment.MARKETPLACE_CONTRACT_ADDRESS,amount:d}),this.buyAccess(t,e,d,s,a))}))}getData(e){return m(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()}))}
330
- /**
331
- * Get the Token Bound Account (TBA) address for a specific token ID.
332
- * @param {bigint} tokenId - The token ID to get the TBA address for.
333
- * @returns {Promise<Address>} A promise that resolves with the TBA address.
334
- * @throws {Error} Throws an error if the TBA address cannot be retrieved.
335
- * @example
336
- * ```typescript
337
- * const tbaAddress = await origin.getTokenBoundAccount(1n);
338
- * console.log(`TBA Address: ${tbaAddress}`);
339
- * ```
340
- */getTokenBoundAccount(e){return m(this,void 0,void 0,(function*(){try{return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getAccount",[e],{simulate:!0})}catch(t){throw new Error(`Failed to get Token Bound Account for token ${e}: ${t instanceof Error?t.message:String(t)}`)}}))}
341
- /**
342
- * Get royalty information for a token ID, including the token bound account address and its balance.
343
- * @param {bigint} tokenId - The token ID to check royalties for.
344
- * @param {Address} [token] - Optional token address to check royalties for. If not provided, checks for native token.
345
- * @returns {Promise<RoyaltyInfo>} A promise that resolves with the token bound account address and balance information.
346
- * @throws {Error} Throws an error if the token bound account cannot be retrieved.
347
- * @example
348
- * ```typescript
349
- * // Get royalties for a specific token
350
- * const royalties = await origin.getRoyalties(1n);
351
- *
352
- * // Get ERC20 token royalties for a specific token
353
- * const royalties = await origin.getRoyalties(1n, "0x1234...");
354
- * ```
355
- */getRoyalties(e,t){return m(this,void 0,void 0,(function*(){try{const n=yield this.getTokenBoundAccount(e),i=D();let a,r;if(t&&t!==o){
356
- // erc20 (wrapped camp)
357
- const e=[{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"}];a=yield this.callContractMethod(t,e,"balanceOf",[n]);const i=yield this.callContractMethod(t,e,"decimals",[]);r=u(a,i)}else a=yield i.getBalance({address:n}),r=d(a);return{tokenBoundAccount:n,balance:a,balanceFormatted:r}}catch(t){throw new Error(`Failed to retrieve royalties for token ${e}: ${t instanceof Error?t.message:String(t)}`)}}))}
358
- /**
359
- * Claim royalties from a token's Token Bound Account (TBA).
360
- * @param {bigint} tokenId - The token ID to claim royalties from.
361
- * @param {Address} [recipient] - Optional recipient address. If not provided, uses the connected wallet.
362
- * @param {Address} [token] - Optional token address to claim royalties in. If not provided, claims in native token.
363
- * @returns {Promise<any>} A promise that resolves when the claim transaction is confirmed.
364
- * @throws {Error} Throws an error if no wallet is connected and no recipient address is provided.
365
- * @example
366
- * ```typescript
367
- * // Claim native token royalties for token #1 to connected wallet
368
- * await origin.claimRoyalties(1n);
369
- *
370
- * // Claim ERC20 token royalties to a specific address
371
- * await origin.claimRoyalties(1n, "0xRecipient...", "0xToken...");
372
- * ```
373
- */claimRoyalties(e,t,n){return m(this,void 0,void 0,(function*(){const i=yield h(this,te,"m",oe).call(this,t),a=yield this.getTokenBoundAccount(e),r=(yield this.getRoyalties(e,n)).balance;if(r===BigInt(0))throw new Error("No royalties available to claim");let s,d,u;
374
- // Call execute on the TBA
375
- return n&&n!==o?(
376
- // ERC20 token transfer
377
- s=n,d=BigInt(0),
378
- // Encode ERC20 transfer call: transfer(address to, uint256 amount)
379
- u=p({abi:[{inputs:[{name:"to",type:"address"},{name:"amount",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],functionName:"transfer",args:[i,r]})):(
380
- // Native token transfer
381
- s=i,d=r,u="0x"),this.callContractMethod(a,this.environment.TBA_ABI,"execute",[s,d,u,0],// operation: 0 = CALL
382
- {waitForReceipt:!0,value:BigInt(0)})}))}}te=new WeakSet,ne=function(e){return m(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}}))},ie=function(e,t){return m(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}}))},ae=function(e){return m(this,arguments,void 0,(function*(e,t={}){var n,i,a;const r=D();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){
383
- // fallback
384
- 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}}))},re=function(e){return m(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=>{U=e,N=null})// reset public client to be recreated with new chain
385
- (e);try{yield this.viemClient.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16)}]})}catch(t){
386
- // Unrecognized chain
387
- 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)}]})}}}))},se=function(){return m(this,void 0,void 0,(function*(){if(!this.viemClient)throw new Error("WalletClient not connected. Please connect a wallet.");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]}))},oe=function(e){return m(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)}`)}}))};
388
- /**
389
- * The Auth class.
390
- * @class
391
- * @classdesc The Auth class is used to authenticate the user.
392
- */
393
- class fe{
394
- /**
395
- * Constructor for the Auth class.
396
- * @param {object} options The options object.
397
- * @param {string} options.clientId The client ID.
398
- * @param {string|object} options.redirectUri The redirect URI used for oauth. Leave empty if you want to use the current URL. If you want different redirect URIs for different socials, pass an object with the socials as keys and the redirect URIs as values.
399
- * @param {("DEVELOPMENT"|"PRODUCTION")} [options.environment="DEVELOPMENT"] The environment to use.
400
- * @throws {APIError} - Throws an error if the clientId is not provided.
401
- */
402
- constructor({clientId:e,redirectUri:t,environment:n="DEVELOPMENT"}){if(de.add(this),ue.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");this.viem=null,this.environment=g[n],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,function(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");"a"===i?a.call(e,n):a?a.value=n:t.set(e,n)}(this,ue,{},"f"),O((e=>{h(this,de,"m",pe).call(this,"providers",e)})),h(this,de,"m",le).call(this)}
403
- /**
404
- * Subscribe to an event. Possible events are "state", "provider", "providers", and "viem".
405
- * @param {("state"|"provider"|"providers"|"viem")} event The event.
406
- * @param {function} callback The callback function.
407
- * @returns {void}
408
- * @example
409
- * auth.on("state", (state) => {
410
- * console.log(state);
411
- * });
412
- */on(e,t){h(this,ue,"f")[e]||(h(this,ue,"f")[e]=[]),h(this,ue,"f")[e].push(t),"providers"===e&&t(B())}
413
- /**
414
- * Unsubscribe from an event. Possible events are "state", "provider", "providers", and "viem".
415
- * @param {("state"|"provider"|"providers"|"viem")} event The event.
416
- * @param {function} callback The callback function.
417
- * @returns {void}
418
- */off(e,t){h(this,ue,"f")[e]&&(h(this,ue,"f")[e]=h(this,ue,"f")[e].filter((e=>e!==t)))}
419
- /**
420
- * Set the loading state.
421
- * @param {boolean} loading The loading state.
422
- * @returns {void}
423
- */setLoading(e){h(this,de,"m",pe).call(this,"state",e?"loading":this.isAuthenticated?"authenticated":"unauthenticated")}
424
- /**
425
- * 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.
426
- * @param {object} options The options object. Includes the provider and the provider info.
427
- * @returns {void}
428
- * @throws {APIError} - Throws an error if the provider is not provided.
429
- */setProvider({provider:e,info:i,address:a}){if(!e)throw new T("provider is required");this.viem=((e,i="window.ethereum",a,r)=>{var s,o;if(!e&&!P)return console.warn("Provider is required to create a client."),null;const d=a||f;if(!P||P.transport.name!==i&&e||r!==(null===(s=P.account)||void 0===s?void 0:s.address)&&e||(null==U?void 0:U.id)!==d.id){const a={chain:d,transport:t(e,{name:i})};r&&(a.account=y(r)),P=n(a),U=d,N&&(null===(o=N.chain)||void 0===o?void 0:o.id)!==d.id&&(N=null)}return P})(e,i.name,this.environment.CHAIN,a),this.origin&&this.origin.setViemClient(this.viem),
430
- // TODO: only use one of these
431
- h(this,de,"m",pe).call(this,"viem",this.viem),h(this,de,"m",pe).call(this,"provider",{provider:e,info:i}),localStorage.setItem("camp-sdk:provider",JSON.stringify(i))}
432
- /**
433
- * 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.
434
- * @param {string} walletAddress The wallet address.
435
- * @returns {void}
436
- */setWalletAddress(e){this.walletAddress=e}
437
- /**
438
- * Recover the provider from local storage.
439
- * @returns {Promise<void>}
440
- */recoverProvider(){return m(this,void 0,void 0,(function*(){var e,t,n,i,a,r,s,o,d,u,p,l,y;if(!this.walletAddress)return void console.warn("No wallet address found in local storage. Please connect your wallet again.");const c=JSON.parse(localStorage.getItem("camp-sdk:provider")||"{}");let m;const h=null!==(e=B())&&void 0!==e?e:[];
441
- // first pass: try to find provider by UUID/name and check if it has the right address
442
- // without prompting (using eth_accounts)
443
- for(const e of h)try{if(c.uuid&&(null===(t=e.info)||void 0===t?void 0:t.uuid)===c.uuid||c.name&&(null===(n=e.info)||void 0===n?void 0:n.name)===c.name){
444
- // silently check if the wallet address matches first
445
- const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(i=t[0])||void 0===i?void 0:i.toLowerCase())===(null===(a=this.walletAddress)||void 0===a?void 0:a.toLowerCase())){m=e;break}}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
446
- // second pass: if no provider found by UUID/name match, try to find by address only
447
- // but still avoid prompting
448
- if(!m)for(const e of h)try{
449
- // skip providers we already checked in the first pass
450
- if(c.uuid&&(null===(r=e.info)||void 0===r?void 0:r.uuid)===c.uuid||c.name&&(null===(s=e.info)||void 0===s?void 0:s.name)===c.name)continue;const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(o=t[0])||void 0===o?void 0:o.toLowerCase())===(null===(d=this.walletAddress)||void 0===d?void 0:d.toLowerCase())){m=e;break}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
451
- // third pass: if still no provider found and we have UUID/name info,
452
- // try prompting the user (only for the stored provider)
453
- if(!m&&(c.uuid||c.name))for(const e of h)try{if(c.uuid&&(null===(u=e.info)||void 0===u?void 0:u.uuid)===c.uuid||c.name&&(null===(p=e.info)||void 0===p?void 0:p.name)===c.name){const t=yield e.provider.request({method:"eth_requestAccounts"});if(t.length>0&&(null===(l=t[0])||void 0===l?void 0:l.toLowerCase())===(null===(y=this.walletAddress)||void 0===y?void 0:y.toLowerCase())){m=e;break}}}catch(e){console.warn("Failed to reconnect to stored provider:",e)}m?this.setProvider({provider:m.provider,info:m.info||{name:"Unknown"},address:this.walletAddress}):console.warn("No matching provider found for the stored wallet address. Please connect your wallet again.")}))}
454
- /**
455
- * Disconnect the user.
456
- * @returns {Promise<void>}
457
- */disconnect(){return m(this,void 0,void 0,(function*(){this.isAuthenticated&&(h(this,de,"m",pe).call(this,"state","unauthenticated"),this.isAuthenticated=!1,this.walletAddress=null,this.userId=null,this.jwt=null,this.origin=null,localStorage.removeItem("camp-sdk:wallet-address"),localStorage.removeItem("camp-sdk:user-id"),localStorage.removeItem("camp-sdk:jwt"),localStorage.removeItem("camp-sdk:environment"))}))}
458
- /**
459
- * Connect the user's wallet and sign the message.
460
- * @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
461
- * @throws {APIError} - Throws an error if the user cannot be authenticated.
462
- */connect(){return m(this,void 0,void 0,(function*(){h(this,de,"m",pe).call(this,"state","loading");try{this.walletAddress||(yield h(this,de,"m",ye).call(this)),this.walletAddress=l(this.walletAddress);const e=yield h(this,de,"m",ce).call(this),t=h(this,de,"m",he).call(this,e),n=yield this.viem.signMessage({account:this.walletAddress,message:t}),i=yield h(this,de,"m",me).call(this,t,n);if(i.success)return this.isAuthenticated=!0,this.userId=i.userId,this.jwt=i.token,this.origin=new Te(this.jwt,this.environment,this.viem),localStorage.setItem("camp-sdk:jwt",this.jwt),localStorage.setItem("camp-sdk:wallet-address",this.walletAddress),localStorage.setItem("camp-sdk:user-id",this.userId),localStorage.setItem("camp-sdk:environment",this.environment.NAME),h(this,de,"m",pe).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,h(this,de,"m",pe).call(this,"state","unauthenticated"),new T("Failed to authenticate")}catch(e){throw this.isAuthenticated=!1,h(this,de,"m",pe).call(this,"state","unauthenticated"),new T(e)}}))}
463
- /**
464
- * Get the user's linked social accounts.
465
- * @returns {Promise<Record<string, boolean>>} A promise that resolves with the user's linked social accounts.
466
- * @throws {Error|APIError} - Throws an error if the user is not authenticated or if the request fails.
467
- * @example
468
- * const auth = new Auth({ clientId: "your-client-id" });
469
- * const socials = await auth.getLinkedSocials();
470
- * console.log(socials);
471
- */getLinkedSocials(){return m(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 T(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}}))}
472
- /**
473
- * Link the user's Twitter account.
474
- * @returns {Promise<void>}
475
- * @throws {Error} - Throws an error if the user is not authenticated.
476
- */linkTwitter(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/twitter/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.twitter}`}))}
477
- /**
478
- * Link the user's Discord account.
479
- * @returns {Promise<void>}
480
- * @throws {Error} - Throws an error if the user is not authenticated.
481
- */linkDiscord(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/discord/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.discord}`}))}
482
- /**
483
- * Link the user's Spotify account.
484
- * @returns {Promise<void>}
485
- * @throws {Error} - Throws an error if the user is not authenticated.
486
- */linkSpotify(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");window.location.href=`${this.environment.AUTH_HUB_BASE_API}/spotify/connect?clientId=${this.clientId}&userId=${this.userId}&redirect_url=${this.redirectUri.spotify}`}))}
487
- /**
488
- * Link the user's TikTok account.
489
- * @param {string} handle The user's TikTok handle.
490
- * @returns {Promise<any>} A promise that resolves with the TikTok account data.
491
- * @throws {Error|APIError} - Throws an error if the user is not authenticated.
492
- */linkTikTok(e){return m(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 T("TikTok service is currently unavailable, try again later"):new T(t.message||"Failed to link TikTok account");return t.data}))}
493
- /**
494
- * Send an OTP to the user's Telegram account.
495
- * @param {string} phoneNumber The user's phone number.
496
- * @returns {Promise<any>} A promise that resolves with the OTP data.
497
- * @throws {Error|APIError} - Throws an error if the user is not authenticated.
498
- */sendTelegramOTP(e){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e)throw new T("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 T(t.message||"Failed to send Telegram OTP");return t.data}))}
499
- /**
500
- * Link the user's Telegram account.
501
- * @param {string} phoneNumber The user's phone number.
502
- * @param {string} otp The OTP.
503
- * @param {string} phoneCodeHash The phone code hash.
504
- * @returns {Promise<object>} A promise that resolves with the Telegram account data.
505
- * @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.
506
- */linkTelegram(e,t,n){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e||!t||!n)throw new T("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 T(i.message||"Failed to link Telegram account");return i.data}))}
507
- /**
508
- * Unlink the user's Twitter account.
509
- * @returns {Promise<any>} A promise that resolves with the unlink result.
510
- * @throws {Error} - Throws an error if the user is not authenticated.
511
- * @throws {APIError} - Throws an error if the request fails.
512
- */unlinkTwitter(){return m(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 T(e.message||"Failed to unlink Twitter account");return e.data}))}
513
- /**
514
- * Unlink the user's Discord account.
515
- * @returns {Promise<any>} A promise that resolves with the unlink result.
516
- * @throws {Error} - Throws an error if the user is not authenticated.
517
- * @throws {APIError} - Throws an error if the request fails.
518
- */unlinkDiscord(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Discord account");return e.data}))}
519
- /**
520
- * Unlink the user's Spotify account.
521
- * @returns {Promise<any>} A promise that resolves with the unlink result.
522
- * @throws {Error} - Throws an error if the user is not authenticated.
523
- * @throws {APIError} - Throws an error if the request fails.
524
- */unlinkSpotify(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Spotify account");return e.data}))}
525
- /**
526
- * Unlink the user's TikTok account.
527
- * @returns {Promise<any>} A promise that resolves with the unlink result.
528
- * @throws {Error} - Throws an error if the user is not authenticated.
529
- * @throws {APIError} - Throws an error if the request fails.
530
- */unlinkTikTok(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink TikTok account");return e.data}))}
531
- /**
532
- * Unlink the user's Telegram account.
533
- * @returns {Promise<any>} A promise that resolves with the unlink result.
534
- * @throws {Error} - Throws an error if the user is not authenticated.
535
- * @throws {APIError} - Throws an error if the request fails.
536
- */unlinkTelegram(){return m(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Telegram account");return e.data}))}}ue=new WeakMap,de=new WeakSet,pe=function(e,t){h(this,ue,"f")[e]&&h(this,ue,"f")[e].forEach((e=>e(t)))},le=function(e){return m(this,void 0,void 0,(function*(){if("undefined"==typeof localStorage)return;const t=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:wallet-address"),n=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:user-id"),i=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:jwt"),a=null===localStorage||void 0===localStorage?void 0:localStorage.getItem("camp-sdk:environment");t&&n&&i&&(a===this.environment.NAME||!a)?(this.walletAddress=t,this.userId=n,this.jwt=i,this.origin=new Te(this.jwt,this.environment),this.isAuthenticated=!0,e?this.setProvider({provider:e.provider,info:e.info||{name:"Unknown"},address:t}):(console.warn("No matching provider was given for the stored wallet address. Trying to recover provider."),yield this.recoverProvider())):this.isAuthenticated=!1}))},ye=function(){return m(this,void 0,void 0,(function*(){try{const[e]=yield this.viem.requestAddresses();return this.walletAddress=l(e),this.walletAddress}catch(e){throw new T(e)}}))},ce=function(){return m(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)}}))},me=function(e,t){return m(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 T(e)}}))},he=function(e){return c({domain:window.location.host,address:this.walletAddress,statement:b,uri:window.location.origin,version:"1",chainId:this.viem.chain.id,nonce:e})};export{fe as Auth,x as SpotifyAPI,k as TwitterAPI};
1
+ import e from"axios";import{custom as t,createWalletClient as n,createPublicClient as i,http as a,erc20Abi as r,getAbiItem as s,zeroAddress as o,formatEther as d,formatUnits as u,encodeFunctionData as p,checksumAddress as l}from"viem";import{toAccount as y}from"viem/accounts";import{createSiweMessage as c}from"viem/siwe";
2
+ /******************************************************************************
3
+ Copyright (c) Microsoft Corporation.
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
15
+ ***************************************************************************** */
16
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */function h(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 m(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 f(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;class T 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}}}const v={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/"}}},w={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/"}}};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:"constructor",inputs:[{name:"_owner",type:"address",internalType:"address"}],stateMutability:"nonpayable"},{type:"receive",stateMutability:"payable"},{type:"function",name:"claimRoyalty",inputs:[{name:"token",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"error",name:"OwnableInvalidOwner",inputs:[{name:"owner",type:"address",internalType:"address"}]},{type:"error",name:"OwnableUnauthorizedAccount",inputs:[{name:"account",type:"address",internalType:"address"}]}],b=[{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"}],E="Connect with Camp Network",C=2628e3,_=86400,k=1e15,N=1,x=1e4;const P={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",CHAIN:v,IPNFT_ABI:A,MARKETPLACE_ABI:g,ROYALTY_VAULT_ABI:I,TBA_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",CHAIN:w,IPNFT_ABI:A,MARKETPLACE_ABI:g,ROYALTY_VAULT_ABI:I,TBA_ABI:b}};
17
+ /**
18
+ * Makes a GET request to the given URL with the provided headers.
19
+ *
20
+ * @param {string} url - The URL to send the GET request to.
21
+ * @param {object} headers - The headers to include in the request.
22
+ * @returns {Promise<object>} - The response data.
23
+ * @throws {APIError} - Throws an error if the request fails.
24
+ */function M(t){return h(this,arguments,void 0,(function*(t,n={}){try{return(yield e.get(t,{headers:n})).data}catch(e){if(e.response)throw new T(e.response.data.message||"API request failed",e.response.status);throw new T("Network error or server is unavailable",500)}}))}
25
+ /**
26
+ * Constructs a query string from an object of query parameters.
27
+ *
28
+ * @param {object} params - An object representing query parameters.
29
+ * @returns {string} - The encoded query string.
30
+ */
31
+ /**
32
+ * Builds a complete URL with query parameters.
33
+ *
34
+ * @param {string} baseURL - The base URL of the endpoint.
35
+ * @param {object} params - An object representing query parameters.
36
+ * @returns {string} - The complete URL with query string.
37
+ */
38
+ function S(e,t={}){const n=function(e={}){return Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}(t);return n?`${e}?${n}`:e}const D="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/twitter",U="https://wv2h4to5qa.execute-api.us-east-2.amazonaws.com/dev/spotify";
39
+ /**
40
+ * The TwitterAPI class.
41
+ * @class
42
+ * @classdesc The TwitterAPI class is used to interact with the Twitter API.
43
+ */
44
+ class B{
45
+ /**
46
+ * Constructor for the TwitterAPI class.
47
+ * @param {object} options - The options object.
48
+ * @param {string} options.apiKey - The API key. (Needed for data fetching)
49
+ */
50
+ constructor({apiKey:e}){this.apiKey=e}
51
+ /**
52
+ * Fetch Twitter user details by username.
53
+ * @param {string} twitterUserName - The Twitter username.
54
+ * @returns {Promise<object>} - The user details.
55
+ * @throws {APIError} - Throws an error if the request fails.
56
+ */fetchUserByUsername(e){return h(this,void 0,void 0,(function*(){const t=S(`${D}/user`,{twitterUserName:e});return this._fetchDataWithAuth(t)}))}
57
+ /**
58
+ * Fetch tweets by Twitter username.
59
+ * @param {string} twitterUserName - The Twitter username.
60
+ * @param {number} page - The page number.
61
+ * @param {number} limit - The number of items per page.
62
+ * @returns {Promise<object>} - The tweets.
63
+ * @throws {APIError} - Throws an error if the request fails.
64
+ */fetchTweetsByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/tweets`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
65
+ /**
66
+ * Fetch followers by Twitter username.
67
+ * @param {string} twitterUserName - The Twitter username.
68
+ * @param {number} page - The page number.
69
+ * @param {number} limit - The number of items per page.
70
+ * @returns {Promise<object>} - The followers.
71
+ * @throws {APIError} - Throws an error if the request fails.
72
+ */fetchFollowersByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/followers`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
73
+ /**
74
+ * Fetch following by Twitter username.
75
+ * @param {string} twitterUserName - The Twitter username.
76
+ * @param {number} page - The page number.
77
+ * @param {number} limit - The number of items per page.
78
+ * @returns {Promise<object>} - The following.
79
+ * @throws {APIError} - Throws an error if the request fails.
80
+ */fetchFollowingByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/following`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
81
+ /**
82
+ * Fetch tweet by tweet ID.
83
+ * @param {string} tweetId - The tweet ID.
84
+ * @returns {Promise<object>} - The tweet.
85
+ * @throws {APIError} - Throws an error if the request fails.
86
+ */fetchTweetById(e){return h(this,void 0,void 0,(function*(){const t=S(`${D}/getTweetById`,{tweetId:e});return this._fetchDataWithAuth(t)}))}
87
+ /**
88
+ * Fetch user by wallet address.
89
+ * @param {string} walletAddress - The wallet address.
90
+ * @param {number} page - The page number.
91
+ * @param {number} limit - The number of items per page.
92
+ * @returns {Promise<object>} - The user data.
93
+ * @throws {APIError} - Throws an error if the request fails.
94
+ */fetchUserByWalletAddress(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/wallet-twitter-data`,{walletAddress:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
95
+ /**
96
+ * Fetch reposted tweets by Twitter username.
97
+ * @param {string} twitterUserName - The Twitter username.
98
+ * @param {number} page - The page number.
99
+ * @param {number} limit - The number of items per page.
100
+ * @returns {Promise<object>} - The reposted tweets.
101
+ * @throws {APIError} - Throws an error if the request fails.
102
+ */fetchRepostedByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/reposted`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
103
+ /**
104
+ * Fetch replies by Twitter username.
105
+ * @param {string} twitterUserName - The Twitter username.
106
+ * @param {number} page - The page number.
107
+ * @param {number} limit - The number of items per page.
108
+ * @returns {Promise<object>} - The replies.
109
+ * @throws {APIError} - Throws an error if the request fails.
110
+ */fetchRepliesByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/replies`,{twitterUserName:e,page:t,limit:n});return this._fetchDataWithAuth(i)}))}
111
+ /**
112
+ * Fetch likes by Twitter username.
113
+ * @param {string} twitterUserName - The Twitter username.
114
+ * @param {number} page - The page number.
115
+ * @param {number} limit - The number of items per page.
116
+ * @returns {Promise<object>} - The likes.
117
+ * @throws {APIError} - Throws an error if the request fails.
118
+ */fetchLikesByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/event/likes/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
119
+ /**
120
+ * Fetch follows by Twitter username.
121
+ * @param {string} twitterUserName - The Twitter username.
122
+ * @param {number} page - The page number.
123
+ * @param {number} limit - The number of items per page.
124
+ * @returns {Promise<object>} - The follows.
125
+ * @throws {APIError} - Throws an error if the request fails.
126
+ */fetchFollowsByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/event/follows/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
127
+ /**
128
+ * Fetch viewed tweets by Twitter username.
129
+ * @param {string} twitterUserName - The Twitter username.
130
+ * @param {number} page - The page number.
131
+ * @param {number} limit - The number of items per page.
132
+ * @returns {Promise<object>} - The viewed tweets.
133
+ * @throws {APIError} - Throws an error if the request fails.
134
+ */fetchViewedTweetsByUsername(e){return h(this,arguments,void 0,(function*(e,t=1,n=10){const i=S(`${D}/event/viewed-tweets/${e}`,{page:t,limit:n});return this._fetchDataWithAuth(i)}))}
135
+ /**
136
+ * Private method to fetch data with authorization header.
137
+ * @param {string} url - The URL to fetch.
138
+ * @returns {Promise<object>} - The response data.
139
+ * @throws {APIError} - Throws an error if the request fails.
140
+ */_fetchDataWithAuth(e){return h(this,void 0,void 0,(function*(){if(!this.apiKey)throw new T("API key is required for fetching data",401);try{return yield M(e,{"x-api-key":this.apiKey})}catch(e){throw new T(e.message,e.statusCode)}}))}}
141
+ /**
142
+ * The SpotifyAPI class.
143
+ * @class
144
+ */class O{
145
+ /**
146
+ * Constructor for the SpotifyAPI class.
147
+ * @constructor
148
+ * @param {SpotifyAPIOptions} options - The Spotify API options.
149
+ * @param {string} options.apiKey - The Spotify API key.
150
+ * @throws {Error} - Throws an error if the API key is not provided.
151
+ */
152
+ constructor(e){this.apiKey=e.apiKey}
153
+ /**
154
+ * Fetch the user's saved tracks by Spotify user ID.
155
+ * @param {string} spotifyId - The user's Spotify ID.
156
+ * @returns {Promise<object>} - The saved tracks.
157
+ * @throws {APIError} - Throws an error if the request fails.
158
+ */fetchSavedTracksById(e){return h(this,void 0,void 0,(function*(){const t=S(`${U}/save-tracks`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
159
+ /**
160
+ * Fetch the played tracks of a user by Spotify ID.
161
+ * @param {string} spotifyId - The user's Spotify ID.
162
+ * @returns {Promise<object>} - The played tracks.
163
+ * @throws {APIError} - Throws an error if the request fails.
164
+ */fetchPlayedTracksById(e){return h(this,void 0,void 0,(function*(){const t=S(`${U}/played-tracks`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
165
+ /**
166
+ * Fetch the user's saved albums by Spotify user ID.
167
+ * @param {string} spotifyId - The user's Spotify ID.
168
+ * @returns {Promise<object>} - The saved albums.
169
+ * @throws {APIError} - Throws an error if the request fails.
170
+ */fetchSavedAlbumsById(e){return h(this,void 0,void 0,(function*(){const t=S(`${U}/saved-albums`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
171
+ /**
172
+ * Fetch the user's saved playlists by Spotify user ID.
173
+ * @param {string} spotifyId - The user's Spotify ID.
174
+ * @returns {Promise<object>} - The saved playlists.
175
+ * @throws {APIError} - Throws an error if the request fails.
176
+ */fetchSavedPlaylistsById(e){return h(this,void 0,void 0,(function*(){const t=S(`${U}/saved-playlists`,{spotifyId:e});return this._fetchDataWithAuth(t)}))}
177
+ /**
178
+ * Fetch the tracks of an album by album ID.
179
+ * @param {string} spotifyId - The Spotify ID of the user.
180
+ * @param {string} albumId - The album ID.
181
+ * @returns {Promise<object>} - The tracks in the album.
182
+ * @throws {APIError} - Throws an error if the request fails.
183
+ */fetchTracksInAlbum(e,t){return h(this,void 0,void 0,(function*(){const n=S(`${U}/album/tracks`,{spotifyId:e,albumId:t});return this._fetchDataWithAuth(n)}))}
184
+ /**
185
+ * Fetch the tracks in a playlist by playlist ID.
186
+ * @param {string} spotifyId - The Spotify ID of the user.
187
+ * @param {string} playlistId - The playlist ID.
188
+ * @returns {Promise<object>} - The tracks in the playlist.
189
+ * @throws {APIError} - Throws an error if the request fails.
190
+ */fetchTracksInPlaylist(e,t){return h(this,void 0,void 0,(function*(){const n=S(`${U}/playlist/tracks`,{spotifyId:e,playlistId:t});return this._fetchDataWithAuth(n)}))}
191
+ /**
192
+ * Fetch the user's Spotify data by wallet address.
193
+ * @param {string} walletAddress - The wallet address.
194
+ * @returns {Promise<object>} - The user's Spotify data.
195
+ * @throws {APIError} - Throws an error if the request fails.
196
+ */fetchUserByWalletAddress(e){return h(this,void 0,void 0,(function*(){const t=S(`${U}/wallet-spotify-data`,{walletAddress:e});return this._fetchDataWithAuth(t)}))}
197
+ /**
198
+ * Private method to fetch data with authorization header.
199
+ * @param {string} url - The URL to fetch.
200
+ * @returns {Promise<object>} - The response data.
201
+ * @throws {APIError} - Throws an error if the request fails.
202
+ */_fetchDataWithAuth(e){return h(this,void 0,void 0,(function*(){if(!this.apiKey)throw new T("API key is required for fetching data",401);try{return yield M(e,{"x-api-key":this.apiKey})}catch(e){throw new T(e.message,e.statusCode)}}))}}
203
+ // @ts-ignore
204
+ let F=null,R=null,$=null;const H=e=>{var t;const n=$||v;return R&&(null===(t=R.chain)||void 0===t?void 0:t.id)===n.id||(R=i({chain:n,transport:a()})),R};let j=[];const L=()=>j,z=e=>{function t(t){j.some((e=>e.info.uuid===t.detail.info.uuid))||(j=[...j,t.detail],e(j))}if("undefined"!=typeof window)return window.addEventListener("eip6963:announceProvider",t),window.dispatchEvent(new Event("eip6963:requestProvider")),()=>window.removeEventListener("eip6963:announceProvider",t)};
205
+ /**
206
+ * Mints a Data NFT with a signature.
207
+ * @param to The address to mint the NFT to.
208
+ * @param tokenId The ID of the token to mint.
209
+ * @param parents The IDs of the parent NFTs, if applicable.
210
+ * @param hash The hash of the data associated with the NFT.
211
+ * @param uri The URI of the NFT metadata.
212
+ * @param licenseTerms The terms of the license for the NFT.
213
+ * @param deadline The deadline for the minting operation.
214
+ * @param signature The signature for the minting operation.
215
+ * @returns A promise that resolves when the minting is complete.
216
+ */function W(e,t,n,i,a,r,s,o,d){return h(this,void 0,void 0,(function*(){return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"mintWithSignature",[e,t,a,r,s,o,n,i,d],{waitForReceipt:!0})}))}
217
+ /**
218
+ * Registers a Data NFT with the Origin service in order to obtain a signature for minting.
219
+ * @param source The source of the Data NFT (e.g., "spotify", "twitter", "tiktok", or "file").
220
+ * @param deadline The deadline for the registration operation.
221
+ * @param fileKey Optional file key for file uploads.
222
+ * @return A promise that resolves with the registration data.
223
+ */function q(e,t,n,i,a,r){return h(this,void 0,void 0,(function*(){const s={source:e,deadline:Number(t),licenseTerms:{price:n.price.toString(),duration:n.duration,royaltyBps:n.royaltyBps,paymentToken:n.paymentToken},metadata:i,parentId:r||[]};void 0!==a&&(s.fileKey=a);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(s)});if(!o.ok)throw new Error(`Failed to get signature: ${o.statusText}`);const d=yield o.json();if(d.isError)throw new Error(`Failed to get signature: ${d.message}`);return d.data}))}
224
+ /**
225
+ * Updates the license terms of a specified IPNFT.
226
+ * @param tokenId The ID of the IPNFT to update.
227
+ * @param newTerms The new license terms to set.
228
+ * @returns A promise that resolves when the transaction is complete.
229
+ */function J(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"updateTerms",[e,t],{waitForReceipt:!0})}
230
+ /**
231
+ * Sets the IPNFT as deleted
232
+ * @param tokenId The token ID to set as deleted.
233
+ * @returns A promise that resolves when the transaction is complete.
234
+ */function K(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"finalizeDelete",[e])}
235
+ /**
236
+ * Calls the getOrCreateRoyaltyVault method on the IPNFT contract.
237
+ * @param tokenOwner The address of the token owner for whom to get or create the royalty vault.
238
+ * @param simulateOnly If true, simulates the transaction without executing it.
239
+ * @returns The address of the royalty vault associated with the specified token owner.
240
+ */function V(e){return h(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}))}
241
+ /**
242
+ * Returns the license terms associated with a specific token ID.
243
+ * @param tokenId The token ID to query.
244
+ * @returns The license terms of the token ID.
245
+ */function G(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getTerms",[e])}
246
+ /**
247
+ * Returns the owner of the specified IPNFT.
248
+ * @param tokenId The ID of the IPNFT to query.
249
+ * @returns The address of the owner of the IPNFT.
250
+ */function Y(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"ownerOf",[e])}
251
+ /**
252
+ * Returns the number of IPNFTs owned by the given address.
253
+ * @param owner The address to query.
254
+ * @returns The number of IPNFTs owned by the address.
255
+ */function X(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"balanceOf",[e])}
256
+ /**
257
+ * Returns the metadata URI associated with a specific token ID.
258
+ * @param tokenId The token ID to query.
259
+ * @returns The metadata URI of the token ID.
260
+ */function Z(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"tokenURI",[e])}
261
+ /**
262
+ * Returns the data status of the given token ID.
263
+ * @param tokenId The token ID to query.
264
+ * @returns The data status of the token ID.
265
+ */function Q(e){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"dataStatus",[e])}
266
+ /**
267
+ * Checks if an operator is approved to manage all assets of a given owner.
268
+ * @param owner The address of the asset owner.
269
+ * @param operator The address of the operator to check.
270
+ * @return A promise that resolves to a boolean indicating if the operator is approved for all assets of the owner.
271
+ */function ee(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"isApprovedForAll",[e,t])}function te(e,t,n){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"transferFrom",[e,t,n])}function ne(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 ie(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"approve",[e,t])}function ae(e,t){return this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"setApprovalForAll",[e,t])}
272
+ /**
273
+ * Buys access to a data NFT for a specified duration.
274
+ * @param buyer The address of the buyer.
275
+ * @param tokenId The ID of the data NFT.
276
+ * @param expectedPrice The expected price for the access.
277
+ * @param expectedDuration The expected duration of the access in seconds.
278
+ * @param expectedPaymentToken The address of the payment token (use zero address for native token).
279
+ * @param value The amount of native token to send (only required if paying with native token).
280
+ * @returns A promise that resolves when the transaction is confirmed.
281
+ */function re(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})}
282
+ /**
283
+ * Checks if a user has access to a specific token based on subscription expiry.
284
+ * @param user - The address of the user.
285
+ * @param tokenId - The ID of the token.
286
+ * @returns A promise that resolves to a boolean indicating if the user has access.
287
+ */function se(e,t){return h(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 oe(e,t){return this.callContractMethod(this.environment.MARKETPLACE_CONTRACT_ADDRESS,this.environment.MARKETPLACE_ABI,"subscriptionExpiry",[e,t])}
288
+ /**
289
+ * Approves a spender to spend a specified amount of tokens on behalf of the owner.
290
+ * If the current allowance is less than the specified amount, it will perform the approval.
291
+ * @param {ApproveParams} params - The parameters for the approval.
292
+ */
293
+ /**
294
+ * Enum representing the status of data in the system.
295
+ * * - ACTIVE: The data is currently active and available.
296
+ * * - PENDING_DELETE: The data is scheduled for deletion but not yet removed.
297
+ * * - DELETED: The data has been deleted and is no longer available.
298
+ */
299
+ var de;!function(e){e[e.ACTIVE=0]="ACTIVE",e[e.PENDING_DELETE=1]="PENDING_DELETE",e[e.DELETED=2]="DELETED"}(de||(de={}));
300
+ /**
301
+ * Creates license terms for a digital asset.
302
+ * @param price The price of the asset in wei.
303
+ * @param duration The duration of the license in seconds.
304
+ * @param royaltyBps The royalty percentage in basis points (0-10000).
305
+ * @param paymentToken The address of the payment token (ERC20 / address(0) for native currency).
306
+ * @returns The created license terms.
307
+ */
308
+ const ue=(e,t,n,i)=>{if(n<N||n>x)throw new Error(`Royalty basis points must be between ${N} and ${x}`);if(t<_||t>C)throw new Error(`Duration must be between ${_} 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}};var pe,le,ye,ce,he,me,fe,Te,ve,we,Ae,ge,Ie,be,Ee,Ce,_e,ke;
309
+ /**
310
+ * The Origin class
311
+ * Handles the upload of files to Origin, as well as querying the user's stats
312
+ */class Ne{constructor(e,t,n){pe.add(this),this.jwt=e,this.viemClient=n,this.environment=t,
313
+ // DataNFT methods
314
+ this.mintWithSignature=W.bind(this),this.registerIpNFT=q.bind(this),this.updateTerms=J.bind(this),this.finalizeDelete=K.bind(this),this.getOrCreateRoyaltyVault=V.bind(this),this.getTerms=G.bind(this),this.ownerOf=Y.bind(this),this.balanceOf=X.bind(this),this.tokenURI=Z.bind(this),this.dataStatus=Q.bind(this),this.isApprovedForAll=ee.bind(this),this.transferFrom=te.bind(this),this.safeTransferFrom=ne.bind(this),this.approve=ie.bind(this),this.setApprovalForAll=ae.bind(this),
315
+ // Marketplace methods
316
+ this.buyAccess=re.bind(this),this.hasAccess=se.bind(this),this.subscriptionExpiry=oe.bind(this)}getJwt(){return this.jwt}setViemClient(e){this.viemClient=e}uploadFile(t,n){return h(this,void 0,void 0,(function*(){let i;try{i=yield m(this,pe,"m",le).call(this,t)}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(!i)throw new Error("Failed to generate upload URL: No upload info returned");try{yield((t,n,i)=>new Promise(((a,r)=>{e.put(n,t,Object.assign({headers:{"Content-Type":t.type}},"undefined"!=typeof window&&"function"==typeof i?{onUploadProgress:e=>{if(e.total){const t=e.loaded/e.total*100;i(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)}))})))(t,i.url,(null==n?void 0:n.progressCallback)||(()=>{}))}catch(e){try{yield m(this,pe,"m",ye).call(this,i.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 m(this,pe,"m",ye).call(this,i.key,"success")}catch(e){console.error("Failed to update status to success:",e)}return i}))}mintFile(e,t,n,i,a){return h(this,void 0,void 0,(function*(){let r,s=null;try{s=yield m(this,pe,"m",me).call(this)}catch(e){throw new Error("Failed to mint file IP. Wallet not connected.")}try{if(r=yield this.uploadFile(e,a),!r||!r.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);const o=BigInt(Date.now()+6e5);// 10 minutes from now
317
+ let d;try{d=yield this.registerIpNFT("file",o,n,t,r.key,i)}catch(e){throw yield m(this,pe,"m",ye).call(this,r.key,"failed"),new Error(`Failed to register IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:u,signerAddress:p,creatorContentHash:l,signature:y,uri:c}=d;if(!(u&&p&&l&&void 0!==y&&c))throw new Error("Failed to register IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(s,u,i||[],!0,l,c,n,o,y);if(-1===["0x1","success"].indexOf(e.receipt.status))throw yield m(this,pe,"m",ye).call(this,r.key,"failed"),new Error(`Minting failed with status: ${e.receipt.status}`)}catch(e){throw yield m(this,pe,"m",ye).call(this,r.key,"failed"),new Error(`Minting transaction failed: ${e instanceof Error?e.message:String(e)}`)}return u.toString()}))}mintSocial(e,t,n){return h(this,void 0,void 0,(function*(){let i=null;try{i=yield m(this,pe,"m",me).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
318
+ let r;try{r=yield this.registerIpNFT(e,a,n,t)}catch(e){throw new Error(`Failed to register Social IpNFT: ${e instanceof Error?e.message:String(e)}`)}const{tokenId:s,signerAddress:o,creatorContentHash:d,signature:u,uri:p}=r;if(!(s&&o&&d&&void 0!==u&&p))throw new Error("Failed to register Social IpNFT: Missing required fields in registration response.");try{const e=yield this.mintWithSignature(i,s,[],!0,d,p,n,a,u);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 s.toString()}))}getOriginUploads(){return h(this,void 0,void 0,(function*(){const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/files`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`}});if(!e.ok)return console.error("Failed to get origin uploads"),null;return(yield e.json()).data}))}
319
+ /**
320
+ * Get the user's Origin stats (multiplier, consent, usage, etc.).
321
+ * @returns {Promise<OriginUsageReturnType>} A promise that resolves with the user's Origin stats.
322
+ */getOriginUsage(){return h(this,void 0,void 0,(function*(){const e=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/usage`,{method:"GET",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"}}).then((e=>e.json()));if(!e.isError&&e.data.user)return e;throw new T(e.message||"Failed to fetch Origin usage")}))}
323
+ /**
324
+ * Set the user's consent for Origin usage.
325
+ * @param {boolean} consent The user's consent.
326
+ * @returns {Promise<void>}
327
+ * @throws {Error|APIError} - Throws an error if the user is not authenticated. Also throws an error if the consent is not provided.
328
+ */setOriginConsent(e){return h(this,void 0,void 0,(function*(){if(void 0===e)throw new T("Consent is required");const t=yield fetch(`${this.environment.AUTH_HUB_BASE_API}/${this.environment.AUTH_ENDPOINT}/origin/status`,{method:"PATCH",headers:{Authorization:`Bearer ${this.jwt}`,"Content-Type":"application/json"},body:JSON.stringify({active:e})}).then((e=>e.json()));if(t.isError)throw new T(t.message||"Failed to set Origin consent")}))}
329
+ /**
330
+ * Call a contract method.
331
+ * @param {string} contractAddress The contract address.
332
+ * @param {Abi} abi The contract ABI.
333
+ * @param {string} methodName The method name.
334
+ * @param {any[]} params The method parameters.
335
+ * @param {CallOptions} [options] The call options.
336
+ * @returns {Promise<any>} A promise that resolves with the result of the contract call or transaction hash.
337
+ * @throws {Error} - Throws an error if the wallet client is not connected and the method is not a view function.
338
+ */callContractMethod(e,t,n,i){return h(this,arguments,void 0,(function*(e,t,n,i,a={}){var r;let o=null;try{o=yield m(this,pe,"m",me).call(this)}catch(e){throw new Error("Failed to call contract method. Wallet not connected.")}const d=s({abi:t,name:n});if(d&&"stateMutability"in d&&("view"===d.stateMutability||"pure"===d.stateMutability)){const a=H();return(yield a.readContract({address:e,abi:t,functionName:n,args:i}))||null}yield m(this,pe,"m",he).call(this,this.environment.CHAIN);const u=H(),{result:p,request:l}=yield u.simulateContract({account:o,address:e,abi:t,functionName:n,args:i,value:a.value});
339
+ // simulate
340
+ if(a.simulate)return p;try{const e=yield null===(r=this.viemClient)||void 0===r?void 0:r.writeContract(l);if("string"!=typeof e)throw new Error("Transaction failed to send.");if(!a.waitForReceipt)return{txHash:e,simulatedResult:p};return{txHash:e,receipt:yield m(this,pe,"m",ce).call(this,e),simulatedResult:p}}catch(e){throw console.error("Transaction failed:",e),new Error("Transaction failed: "+e)}}))}
341
+ /**
342
+ * Buy access to an asset by first checking its price via getTerms, then calling buyAccess.
343
+ * @param {bigint} tokenId The token ID of the asset.
344
+ * @returns {Promise<any>} The result of the buyAccess call.
345
+ */buyAccessSmart(e){return h(this,void 0,void 0,(function*(){let t=null;try{t=yield m(this,pe,"m",me).call(this)}catch(e){throw new Error("Failed to buy access. Wallet not connected.")}const n=yield this.getTerms(e);if(!n)throw new Error("Failed to fetch terms for asset");const{price:i,paymentToken:a,duration:s}=n;if(void 0===i||void 0===a||void 0===s)throw new Error("Terms missing price, paymentToken, or duration");const d=i;return a===o?this.buyAccess(t,e,d,s,a,d):(yield function(e){return h(this,arguments,void 0,(function*({walletClient:e,publicClient:t,tokenAddress:n,owner:i,spender:a,amount:s}){(yield t.readContract({address:n,abi:r,functionName:"allowance",args:[i,a]}))<s&&(yield e.writeContract({address:n,account:i,abi:r,functionName:"approve",args:[a,s],chain:v}))}))}({walletClient:this.viemClient,publicClient:H(),tokenAddress:a,owner:t,spender:this.environment.MARKETPLACE_CONTRACT_ADDRESS,amount:d}),this.buyAccess(t,e,d,s,a))}))}getData(e){return h(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()}))}
346
+ /**
347
+ * Get the Token Bound Account (TBA) address for a specific token ID.
348
+ * @param {bigint} tokenId - The token ID to get the TBA address for.
349
+ * @returns {Promise<Address>} A promise that resolves with the TBA address.
350
+ * @throws {Error} Throws an error if the TBA address cannot be retrieved.
351
+ * @example
352
+ * ```typescript
353
+ * const tbaAddress = await origin.getTokenBoundAccount(1n);
354
+ * console.log(`TBA Address: ${tbaAddress}`);
355
+ * ```
356
+ */getTokenBoundAccount(e){return h(this,void 0,void 0,(function*(){try{return yield this.callContractMethod(this.environment.DATANFT_CONTRACT_ADDRESS,this.environment.IPNFT_ABI,"getAccount",[e],{simulate:!0})}catch(t){throw new Error(`Failed to get Token Bound Account for token ${e}: ${t instanceof Error?t.message:String(t)}`)}}))}
357
+ /**
358
+ * Get royalty information for a token ID, including the token bound account address and its balance.
359
+ * @param {bigint} tokenId - The token ID to check royalties for.
360
+ * @param {Address} [token] - Optional token address to check royalties for. If not provided, checks for native token.
361
+ * @returns {Promise<RoyaltyInfo>} A promise that resolves with the token bound account address and balance information.
362
+ * @throws {Error} Throws an error if the token bound account cannot be retrieved.
363
+ * @example
364
+ * ```typescript
365
+ * // Get royalties for a specific token
366
+ * const royalties = await origin.getRoyalties(1n);
367
+ *
368
+ * // Get ERC20 token royalties for a specific token
369
+ * const royalties = await origin.getRoyalties(1n, "0x1234...");
370
+ * ```
371
+ */getRoyalties(e,t){return h(this,void 0,void 0,(function*(){try{const n=yield this.getTokenBoundAccount(e),i=H();let a,r;if(t&&t!==o){
372
+ // erc20 (wrapped camp)
373
+ const e=[{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"}];a=yield this.callContractMethod(t,e,"balanceOf",[n]);const i=yield this.callContractMethod(t,e,"decimals",[]);r=u(a,i)}else a=yield i.getBalance({address:n}),r=d(a);return{tokenBoundAccount:n,balance:a,balanceFormatted:r}}catch(t){throw new Error(`Failed to retrieve royalties for token ${e}: ${t instanceof Error?t.message:String(t)}`)}}))}
374
+ /**
375
+ * Claim royalties from a token's Token Bound Account (TBA).
376
+ * @param {bigint} tokenId - The token ID to claim royalties from.
377
+ * @param {Address} [recipient] - Optional recipient address. If not provided, uses the connected wallet.
378
+ * @param {Address} [token] - Optional token address to claim royalties in. If not provided, claims in native token.
379
+ * @returns {Promise<any>} A promise that resolves when the claim transaction is confirmed.
380
+ * @throws {Error} Throws an error if no wallet is connected and no recipient address is provided.
381
+ * @example
382
+ * ```typescript
383
+ * // Claim native token royalties for token #1 to connected wallet
384
+ * await origin.claimRoyalties(1n);
385
+ *
386
+ * // Claim ERC20 token royalties to a specific address
387
+ * await origin.claimRoyalties(1n, "0xRecipient...", "0xToken...");
388
+ * ```
389
+ */claimRoyalties(e,t,n){return h(this,void 0,void 0,(function*(){const i=yield m(this,pe,"m",fe).call(this,t),a=yield this.getTokenBoundAccount(e),r=(yield this.getRoyalties(e,n)).balance;if(r===BigInt(0))throw new Error("No royalties available to claim");let s,d,u;
390
+ // Call execute on the TBA
391
+ return n&&n!==o?(
392
+ // ERC20 token transfer
393
+ s=n,d=BigInt(0),
394
+ // Encode ERC20 transfer call: transfer(address to, uint256 amount)
395
+ u=p({abi:[{inputs:[{name:"to",type:"address"},{name:"amount",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],functionName:"transfer",args:[i,r]})):(
396
+ // Native token transfer
397
+ s=i,d=r,u="0x"),this.callContractMethod(a,this.environment.TBA_ABI,"execute",[s,d,u,0],// operation: 0 = CALL
398
+ {waitForReceipt:!0,value:BigInt(0)})}))}}pe=new WeakSet,le=function(e){return h(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}}))},ye=function(e,t){return h(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}}))},ce=function(e){return h(this,arguments,void 0,(function*(e,t={}){var n,i,a;const r=H();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){
399
+ // fallback
400
+ 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}}))},he=function(e){return h(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=>{$=e,R=null})// reset public client to be recreated with new chain
401
+ (e);try{yield this.viemClient.request({method:"wallet_switchEthereumChain",params:[{chainId:"0x"+BigInt(e.id).toString(16)}]})}catch(t){
402
+ // Unrecognized chain
403
+ 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)}]})}}}))},me=function(){return h(this,void 0,void 0,(function*(){if(!this.viemClient)throw new Error("WalletClient not connected. Please connect a wallet.");
404
+ // If account is already set on the client, return it directly
405
+ if(this.viemClient.account)return this.viemClient.account.address;
406
+ // Otherwise request accounts (browser wallet flow)
407
+ 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]}))},fe=function(e){return h(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)}`)}}))};
408
+ /**
409
+ * Adapter for viem WalletClient
410
+ */
411
+ class xe{constructor(e){this.type="viem",this.signer=e}getAddress(){return h(this,void 0,void 0,(function*(){if(this.signer.account)return this.signer.account.address;const e=yield this.signer.request({method:"eth_requestAccounts",params:[]});if(!e||0===e.length)throw new Error("No accounts found in viem wallet client");return e[0]}))}signMessage(e){return h(this,void 0,void 0,(function*(){const t=yield this.getAddress();return yield this.signer.signMessage({account:t,message:e})}))}getChainId(){return h(this,void 0,void 0,(function*(){var e;return(null===(e=this.signer.chain)||void 0===e?void 0:e.id)||1}))}}
412
+ /**
413
+ * Adapter for ethers Signer (v5 and v6)
414
+ */class Pe{constructor(e){this.type="ethers",this.signer=e}getAddress(){return h(this,void 0,void 0,(function*(){
415
+ // Works for both ethers v5 and v6
416
+ if("function"==typeof this.signer.getAddress)return yield this.signer.getAddress();if(this.signer.address)return this.signer.address;throw new Error("Unable to get address from ethers signer")}))}signMessage(e){return h(this,void 0,void 0,(function*(){if("function"!=typeof this.signer.signMessage)throw new Error("Signer does not support signMessage");return yield this.signer.signMessage(e)}))}getChainId(){return h(this,void 0,void 0,(function*(){
417
+ // Try ethers v6 first
418
+ if(this.signer.provider&&"function"==typeof this.signer.provider.getNetwork){const e=yield this.signer.provider.getNetwork();
419
+ // ethers v6 returns bigint, v5 returns number
420
+ return"bigint"==typeof e.chainId?Number(e.chainId):e.chainId}
421
+ // Fallback for ethers v5
422
+ return"function"==typeof this.signer.getChainId?yield this.signer.getChainId():484;
423
+ // Default to mainnet if we can't determine
424
+ }))}}
425
+ /**
426
+ * Adapter for custom signer implementations
427
+ */class Me{constructor(e){this.type="custom",this.signer=e}getAddress(){return h(this,void 0,void 0,(function*(){if("function"==typeof this.signer.getAddress)return yield this.signer.getAddress();if(this.signer.address)return this.signer.address;throw new Error("Custom signer must implement getAddress() or have address property")}))}signMessage(e){return h(this,void 0,void 0,(function*(){if("function"!=typeof this.signer.signMessage)throw new Error("Custom signer must implement signMessage()");return yield this.signer.signMessage(e)}))}getChainId(){return h(this,void 0,void 0,(function*(){if("function"==typeof this.signer.getChainId){const e=yield this.signer.getChainId();return"bigint"==typeof e?Number(e):e}return void 0!==this.signer.chainId?"bigint"==typeof this.signer.chainId?Number(this.signer.chainId):this.signer.chainId:484;
428
+ // Default to mainnet
429
+ }))}}
430
+ /**
431
+ * Factory function to create appropriate adapter based on signer type
432
+ */function Se(e){
433
+ // Check for viem WalletClient
434
+ return e.transport&&e.chain&&"function"==typeof e.signMessage?new xe(e):
435
+ // Check for ethers signer (v5 or v6)
436
+ e._isSigner||e.provider&&"function"==typeof e.signMessage?new Pe(e):new Me(e)}
437
+ /**
438
+ * Browser localStorage adapter
439
+ */class De{getItem(e){return h(this,void 0,void 0,(function*(){return"undefined"==typeof localStorage?null:localStorage.getItem(e)}))}setItem(e,t){return h(this,void 0,void 0,(function*(){"undefined"!=typeof localStorage&&localStorage.setItem(e,t)}))}removeItem(e){return h(this,void 0,void 0,(function*(){"undefined"!=typeof localStorage&&localStorage.removeItem(e)}))}}
440
+ /**
441
+ * In-memory storage adapter for Node.js
442
+ */class Ue{constructor(){this.storage=new Map}getItem(e){return h(this,void 0,void 0,(function*(){return this.storage.get(e)||null}))}setItem(e,t){return h(this,void 0,void 0,(function*(){this.storage.set(e,t)}))}removeItem(e){return h(this,void 0,void 0,(function*(){this.storage.delete(e)}))}clear(){this.storage.clear()}}
443
+ /**
444
+ * The Auth class.
445
+ * @class
446
+ * @classdesc The Auth class is used to authenticate the user.
447
+ */
448
+ class Be{
449
+ /**
450
+ * Constructor for the Auth class.
451
+ * @param {object} options The options object.
452
+ * @param {string} options.clientId The client ID.
453
+ * @param {string|object} options.redirectUri The redirect URI used for oauth. Leave empty if you want to use the current URL. If you want different redirect URIs for different socials, pass an object with the socials as keys and the redirect URIs as values.
454
+ * @param {("DEVELOPMENT"|"PRODUCTION")} [options.environment="DEVELOPMENT"] The environment to use.
455
+ * @param {StorageAdapter} [options.storage] Custom storage adapter. Defaults to localStorage in browser, memory storage in Node.js.
456
+ * @throws {APIError} - Throws an error if the clientId is not provided.
457
+ */
458
+ constructor({clientId:e,redirectUri:t,environment:n="DEVELOPMENT",storage:i}){if(Te.add(this),ve.set(this,void 0),we.set(this,void 0),Ae.set(this,void 0),ge.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");f(this,we,"undefined"==typeof window,"f"),f(this,ge,i||(m(this,we,"f")?new Ue:new De),"f"),this.viem=null,this.environment=P[n],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,f(this,ve,{},"f"),
459
+ // only subscribe to providers in browser environment
460
+ m(this,we,"f")||z((e=>{m(this,Te,"m",Ie).call(this,"providers",e)})),m(this,Te,"m",be).call(this)}
461
+ /**
462
+ * Subscribe to an event. Possible events are "state", "provider", "providers", and "viem".
463
+ * @param {("state"|"provider"|"providers"|"viem")} event The event.
464
+ * @param {function} callback The callback function.
465
+ * @returns {void}
466
+ * @example
467
+ * auth.on("state", (state) => {
468
+ * console.log(state);
469
+ * });
470
+ */on(e,t){m(this,ve,"f")[e]||(m(this,ve,"f")[e]=[]),m(this,ve,"f")[e].push(t),"providers"===e&&t(L())}
471
+ /**
472
+ * Unsubscribe from an event. Possible events are "state", "provider", "providers", and "viem".
473
+ * @param {("state"|"provider"|"providers"|"viem")} event The event.
474
+ * @param {function} callback The callback function.
475
+ * @returns {void}
476
+ */off(e,t){m(this,ve,"f")[e]&&(m(this,ve,"f")[e]=m(this,ve,"f")[e].filter((e=>e!==t)))}
477
+ /**
478
+ * Set the loading state.
479
+ * @param {boolean} loading The loading state.
480
+ * @returns {void}
481
+ */setLoading(e){m(this,Te,"m",Ie).call(this,"state",e?"loading":this.isAuthenticated?"authenticated":"unauthenticated")}
482
+ /**
483
+ * 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.
484
+ * @param {object} options The options object. Includes the provider and the provider info.
485
+ * @returns {void}
486
+ * @throws {APIError} - Throws an error if the provider is not provided.
487
+ */setProvider({provider:e,info:i,address:a}){if(!e)throw new T("provider is required");this.viem=((e,i="window.ethereum",a,r)=>{var s,o;if(!e&&!F)return console.warn("Provider is required to create a client."),null;const d=a||v;if(!F||F.transport.name!==i&&e||r!==(null===(s=F.account)||void 0===s?void 0:s.address)&&e||(null==$?void 0:$.id)!==d.id){const a={chain:d,transport:t(e,{name:i})};r&&(a.account=y(r)),F=n(a),$=d,R&&(null===(o=R.chain)||void 0===o?void 0:o.id)!==d.id&&(R=null)}return F})(e,i.name,this.environment.CHAIN,a),this.origin&&this.origin.setViemClient(this.viem),
488
+ // TODO: only use one of these
489
+ m(this,Te,"m",Ie).call(this,"viem",this.viem),m(this,Te,"m",Ie).call(this,"provider",{provider:e,info:i}),m(this,ge,"f").setItem("camp-sdk:provider",JSON.stringify(i))}
490
+ /**
491
+ * 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.
492
+ * @param {string} walletAddress The wallet address.
493
+ * @returns {void}
494
+ */setWalletAddress(e){this.walletAddress=e}
495
+ /**
496
+ * Recover the provider from local storage.
497
+ * @returns {Promise<void>}
498
+ */recoverProvider(){return h(this,void 0,void 0,(function*(){var e,t,n,i,a,r,s,o,d,u,p,l,y;if(!this.walletAddress)return void console.warn("No wallet address found in local storage. Please connect your wallet again.");const c=yield m(this,ge,"f").getItem("camp-sdk:provider");if(!c)return;const h=JSON.parse(c);let f;const T=null!==(e=L())&&void 0!==e?e:[];
499
+ // first pass: try to find provider by UUID/name and check if it has the right address
500
+ // without prompting (using eth_accounts)
501
+ for(const e of T)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
+ // silently check if the wallet address matches first
503
+ const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(i=t[0])||void 0===i?void 0:i.toLowerCase())===(null===(a=this.walletAddress)||void 0===a?void 0:a.toLowerCase())){f=e;break}}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
504
+ // second pass: if no provider found by UUID/name match, try to find by address only
505
+ // but still avoid prompting
506
+ if(!f)for(const e of T)try{
507
+ // skip providers we already checked in the first pass
508
+ if(h.uuid&&(null===(r=e.info)||void 0===r?void 0:r.uuid)===h.uuid||h.name&&(null===(s=e.info)||void 0===s?void 0:s.name)===h.name)continue;const t=yield e.provider.request({method:"eth_accounts"});if(t.length>0&&(null===(o=t[0])||void 0===o?void 0:o.toLowerCase())===(null===(d=this.walletAddress)||void 0===d?void 0:d.toLowerCase())){f=e;break}}catch(e){console.warn("Failed to fetch accounts from provider:",e)}
509
+ // third pass: if still no provider found and we have UUID/name info,
510
+ // try prompting the user (only for the stored provider)
511
+ if(!f&&(h.uuid||h.name))for(const e of T)try{if(h.uuid&&(null===(u=e.info)||void 0===u?void 0:u.uuid)===h.uuid||h.name&&(null===(p=e.info)||void 0===p?void 0:p.name)===h.name){const t=yield e.provider.request({method:"eth_requestAccounts"});if(t.length>0&&(null===(l=t[0])||void 0===l?void 0:l.toLowerCase())===(null===(y=this.walletAddress)||void 0===y?void 0:y.toLowerCase())){f=e;break}}}catch(e){console.warn("Failed to reconnect to stored provider:",e)}f?this.setProvider({provider:f.provider,info:f.info||{name:"Unknown"},address:this.walletAddress}):console.warn("No matching provider found for the stored wallet address. Please connect your wallet again.")}))}
512
+ /**
513
+ * Disconnect the user.
514
+ * @returns {Promise<void>}
515
+ */disconnect(){return h(this,void 0,void 0,(function*(){this.isAuthenticated&&(m(this,Te,"m",Ie).call(this,"state","unauthenticated"),this.isAuthenticated=!1,this.walletAddress=null,this.userId=null,this.jwt=null,this.origin=null,f(this,Ae,void 0,"f"),yield m(this,ge,"f").removeItem("camp-sdk:wallet-address"),yield m(this,ge,"f").removeItem("camp-sdk:user-id"),yield m(this,ge,"f").removeItem("camp-sdk:jwt"),yield m(this,ge,"f").removeItem("camp-sdk:environment"))}))}
516
+ /**
517
+ * Connect the user's wallet and sign the message.
518
+ * @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
519
+ * @throws {APIError} - Throws an error if the user cannot be authenticated.
520
+ */connect(){return h(this,void 0,void 0,(function*(){m(this,Te,"m",Ie).call(this,"state","loading");try{this.walletAddress||(yield m(this,Te,"m",Ee).call(this)),this.walletAddress=l(this.walletAddress);const e=yield m(this,Te,"m",Ce).call(this),t=m(this,Te,"m",ke).call(this,e),n=yield this.viem.signMessage({account:this.walletAddress,message:t}),i=yield m(this,Te,"m",_e).call(this,t,n);if(i.success)return this.isAuthenticated=!0,this.userId=i.userId,this.jwt=i.token,this.origin=new Ne(this.jwt,this.environment,this.viem),yield m(this,ge,"f").setItem("camp-sdk:jwt",this.jwt),yield m(this,ge,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield m(this,ge,"f").setItem("camp-sdk:user-id",this.userId),yield m(this,ge,"f").setItem("camp-sdk:environment",this.environment.NAME),m(this,Te,"m",Ie).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,m(this,Te,"m",Ie).call(this,"state","unauthenticated"),new T("Failed to authenticate")}catch(e){throw this.isAuthenticated=!1,m(this,Te,"m",Ie).call(this,"state","unauthenticated"),new T(e)}}))}
521
+ /**
522
+ * Connect with a custom signer (for Node.js or custom wallet implementations).
523
+ * This method bypasses browser wallet interactions and uses the provided signer directly.
524
+ * @param {any} signer The signer instance (viem WalletClient, ethers Signer, or custom signer).
525
+ * @param {object} [options] Optional configuration.
526
+ * @param {string} [options.domain] The domain to use in SIWE message (defaults to 'localhost').
527
+ * @param {string} [options.uri] The URI to use in SIWE message (defaults to 'http://localhost').
528
+ * @returns {Promise<{ success: boolean; message: string; walletAddress: string }>} A promise that resolves with the authentication result.
529
+ * @throws {APIError} - Throws an error if authentication fails.
530
+ * @example
531
+ * // Using with ethers
532
+ * const signer = new ethers.Wallet(privateKey, provider);
533
+ * await auth.connectWithSigner(signer, { domain: 'myapp.com', uri: 'https://myapp.com' });
534
+ *
535
+ * // Using with viem
536
+ * const account = privateKeyToAccount('0x...');
537
+ * const client = createWalletClient({ account, chain: mainnet, transport: http() });
538
+ * await auth.connectWithSigner(client);
539
+ */connectWithSigner(e,t){return h(this,void 0,void 0,(function*(){m(this,Te,"m",Ie).call(this,"state","loading");try{f(this,Ae,Se(e),"f"),this.walletAddress=l(yield m(this,Ae,"f").getAddress()),
540
+ // store the signer as viem client if it's a viem client, otherwise keep adapter
541
+ "viem"===m(this,Ae,"f").type&&(this.viem=e);const n=yield m(this,Te,"m",Ce).call(this),i=m(this,Te,"m",ke).call(this,n,null==t?void 0:t.domain,null==t?void 0:t.uri),a=yield m(this,Ae,"f").signMessage(i),r=yield m(this,Te,"m",_e).call(this,i,a);if(r.success)return this.isAuthenticated=!0,this.userId=r.userId,this.jwt=r.token,this.origin=new Ne(this.jwt,this.environment,this.viem),yield m(this,ge,"f").setItem("camp-sdk:jwt",this.jwt),yield m(this,ge,"f").setItem("camp-sdk:wallet-address",this.walletAddress),yield m(this,ge,"f").setItem("camp-sdk:user-id",this.userId),yield m(this,ge,"f").setItem("camp-sdk:environment",this.environment.NAME),m(this,Te,"m",Ie).call(this,"state","authenticated"),{success:!0,message:"Successfully authenticated",walletAddress:this.walletAddress};throw this.isAuthenticated=!1,m(this,Te,"m",Ie).call(this,"state","unauthenticated"),new T("Failed to authenticate")}catch(e){throw this.isAuthenticated=!1,f(this,Ae,void 0,"f"),m(this,Te,"m",Ie).call(this,"state","unauthenticated"),new T(e)}}))}
542
+ /**
543
+ * Get the user's linked social accounts.
544
+ * @returns {Promise<Record<string, boolean>>} A promise that resolves with the user's linked social accounts.
545
+ * @throws {Error|APIError} - Throws an error if the user is not authenticated or if the request fails.
546
+ * @example
547
+ * const auth = new Auth({ clientId: "your-client-id" });
548
+ * const socials = await auth.getLinkedSocials();
549
+ * console.log(socials);
550
+ */getLinkedSocials(){return h(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 T(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}}))}
551
+ /**
552
+ * Link the user's Twitter account.
553
+ * @returns {Promise<void>}
554
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
555
+ */linkTwitter(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(m(this,we,"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}`}))}
556
+ /**
557
+ * Link the user's Discord account.
558
+ * @returns {Promise<void>}
559
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
560
+ */linkDiscord(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(m(this,we,"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}`}))}
561
+ /**
562
+ * Link the user's Spotify account.
563
+ * @returns {Promise<void>}
564
+ * @throws {Error} - Throws an error if the user is not authenticated or in Node.js environment.
565
+ */linkSpotify(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(m(this,we,"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}`}))}
566
+ /**
567
+ * Link the user's TikTok account.
568
+ * @param {string} handle The user's TikTok handle.
569
+ * @returns {Promise<any>} A promise that resolves with the TikTok account data.
570
+ * @throws {Error|APIError} - Throws an error if the user is not authenticated.
571
+ */linkTikTok(e){return h(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 T("TikTok service is currently unavailable, try again later"):new T(t.message||"Failed to link TikTok account");return t.data}))}
572
+ /**
573
+ * Send an OTP to the user's Telegram account.
574
+ * @param {string} phoneNumber The user's phone number.
575
+ * @returns {Promise<any>} A promise that resolves with the OTP data.
576
+ * @throws {Error|APIError} - Throws an error if the user is not authenticated.
577
+ */sendTelegramOTP(e){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e)throw new T("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 T(t.message||"Failed to send Telegram OTP");return t.data}))}
578
+ /**
579
+ * Link the user's Telegram account.
580
+ * @param {string} phoneNumber The user's phone number.
581
+ * @param {string} otp The OTP.
582
+ * @param {string} phoneCodeHash The phone code hash.
583
+ * @returns {Promise<object>} A promise that resolves with the Telegram account data.
584
+ * @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.
585
+ */linkTelegram(e,t,n){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new Error("User needs to be authenticated");if(!e||!t||!n)throw new T("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 T(i.message||"Failed to link Telegram account");return i.data}))}
586
+ /**
587
+ * Unlink the user's Twitter account.
588
+ * @returns {Promise<any>} A promise that resolves with the unlink result.
589
+ * @throws {Error} - Throws an error if the user is not authenticated.
590
+ * @throws {APIError} - Throws an error if the request fails.
591
+ */unlinkTwitter(){return h(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 T(e.message||"Failed to unlink Twitter account");return e.data}))}
592
+ /**
593
+ * Unlink the user's Discord account.
594
+ * @returns {Promise<any>} A promise that resolves with the unlink result.
595
+ * @throws {Error} - Throws an error if the user is not authenticated.
596
+ * @throws {APIError} - Throws an error if the request fails.
597
+ */unlinkDiscord(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Discord account");return e.data}))}
598
+ /**
599
+ * Unlink the user's Spotify account.
600
+ * @returns {Promise<any>} A promise that resolves with the unlink result.
601
+ * @throws {Error} - Throws an error if the user is not authenticated.
602
+ * @throws {APIError} - Throws an error if the request fails.
603
+ */unlinkSpotify(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Spotify account");return e.data}))}
604
+ /**
605
+ * Unlink the user's TikTok account.
606
+ * @returns {Promise<any>} A promise that resolves with the unlink result.
607
+ * @throws {Error} - Throws an error if the user is not authenticated.
608
+ * @throws {APIError} - Throws an error if the request fails.
609
+ */unlinkTikTok(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink TikTok account");return e.data}))}
610
+ /**
611
+ * Unlink the user's Telegram account.
612
+ * @returns {Promise<any>} A promise that resolves with the unlink result.
613
+ * @throws {Error} - Throws an error if the user is not authenticated.
614
+ * @throws {APIError} - Throws an error if the request fails.
615
+ */unlinkTelegram(){return h(this,void 0,void 0,(function*(){if(!this.isAuthenticated)throw new T("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 T(e.message||"Failed to unlink Telegram account");return e.data}))}}
616
+ /**
617
+ * Create a wallet client for Node.js environment
618
+ * @param account The viem account
619
+ * @param chain The chain to use
620
+ * @param rpcUrl Optional RPC URL (defaults to chain's default RPC)
621
+ * @returns WalletClient
622
+ */
623
+ function Oe(e,t,i){return n({account:e,chain:t,transport:a(i)})}ve=new WeakMap,we=new WeakMap,Ae=new WeakMap,ge=new WeakMap,Te=new WeakSet,Ie=function(e,t){m(this,ve,"f")[e]&&m(this,ve,"f")[e].forEach((e=>e(t)))},be=function(e){return h(this,void 0,void 0,(function*(){const t=yield m(this,ge,"f").getItem("camp-sdk:wallet-address"),n=yield m(this,ge,"f").getItem("camp-sdk:user-id"),i=yield m(this,ge,"f").getItem("camp-sdk:jwt"),a=yield m(this,ge,"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 Ne(this.jwt,this.environment),this.isAuthenticated=!0,e?this.setProvider({provider:e.provider,info:e.info||{name:"Unknown"},address:t}):m(this,we,"f")||(console.warn("No matching provider was given for the stored wallet address. Trying to recover provider."),yield this.recoverProvider())):this.isAuthenticated=!1}))},Ee=function(){return h(this,void 0,void 0,(function*(){try{const[e]=yield this.viem.requestAddresses();return this.walletAddress=l(e),this.walletAddress}catch(e){throw new T(e)}}))},Ce=function(){return h(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)}}))},_e=function(e,t){return h(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 T(e)}}))},ke=function(e,t,n){return c({domain:t||(m(this,we,"f")?"localhost":window.location.host),address:this.walletAddress,statement:E,uri:n||(m(this,we,"f")?"http://localhost":window.location.origin),version:"1",chainId:this.environment.CHAIN.id,nonce:e})};export{Be as Auth,De as BrowserStorage,Me as CustomSignerAdapter,de as DataStatus,Pe as EthersSignerAdapter,Ue as MemoryStorage,O as SpotifyAPI,B as TwitterAPI,xe as ViemSignerAdapter,w as campMainnet,v as campTestnet,ue as createLicenseTerms,Oe as createNodeWalletClient,Se as createSignerAdapter};