{"version":3,"sources":["../src/constants/abi.json","../src/types/index.ts","../src/errors/index.ts","../src/utils/index.ts","../src/constants/abi.ts","../src/core/events.ts","../src/core/tickets.ts","../src/core/social.ts","../src/core/protocol.ts","../src/core/erc20.ts","../src/core/venue.ts","../src/core/private-events.ts","../src/core/platform-fees.ts","../src/core/refunds.ts","../src/core/tokens.ts","../src/core/client.ts","../src/constants/chains.ts"],"names":["EventVisibility","EventStatus","RSVPStatus","TokenType","RefundType","InvitationStatus","keccak256","toBytes","mainnet","sepolia","base","baseSepolia","optimism","arbitrum","polygon","zora"],"mappings":"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","file":"index.cjs","sourcesContent":["[\n  {\n    \"type\": \"constructor\",\n    \"inputs\": [\n      {\n        \"name\": \"_feeTo\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"MAX_PAYMENT_SPLITS\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"MAX_PLATFORM_FEE\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"MAX_PROTOCOL_FEE\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"MAX_TICKET_QUANTITY\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"REFUND_CLAIM_DEADLINE\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"addFriend\",\n    \"inputs\": [\n      {\n        \"name\": \"friend\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"allowance\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"approve\",\n    \"inputs\": [\n      {\n        \"name\": \"spender\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"id\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"balanceOf\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"banUser\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"calculatePrice\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tierId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"quantity\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"totalPrice\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"cancelEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"checkIn\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"checkInDelegate\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"ticketTokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"attendee\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"checkInWithTicket\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"ticketTokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"claimFunds\",\n    \"inputs\": [],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"claimOrganizerCredential\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"claimTicketRefund\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"claimTipRefund\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"comments\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"author\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"content\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      },\n      {\n        \"name\": \"parentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"isDeleted\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      },\n      {\n        \"name\": \"likes\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"createEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"params\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct Assemble.EventParams\",\n        \"components\": [\n          {\n            \"name\": \"title\",\n            \"type\": \"string\",\n            \"internalType\": \"string\"\n          },\n          {\n            \"name\": \"description\",\n            \"type\": \"string\",\n            \"internalType\": \"string\"\n          },\n          {\n            \"name\": \"imageUri\",\n            \"type\": \"string\",\n            \"internalType\": \"string\"\n          },\n          {\n            \"name\": \"startTime\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"endTime\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"capacity\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"venueId\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"visibility\",\n            \"type\": \"uint8\",\n            \"internalType\": \"enum Assemble.EventVisibility\"\n          }\n        ]\n      },\n      {\n        \"name\": \"tiers\",\n        \"type\": \"tuple[]\",\n        \"internalType\": \"struct Assemble.TicketTier[]\",\n        \"components\": [\n          {\n            \"name\": \"name\",\n            \"type\": \"string\",\n            \"internalType\": \"string\"\n          },\n          {\n            \"name\": \"price\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"maxSupply\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"sold\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"startSaleTime\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"endSaleTime\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"transferrable\",\n            \"type\": \"bool\",\n            \"internalType\": \"bool\"\n          }\n        ]\n      },\n      {\n        \"name\": \"splits\",\n        \"type\": \"tuple[]\",\n        \"internalType\": \"struct Assemble.PaymentSplit[]\",\n        \"components\": [\n          {\n            \"name\": \"recipient\",\n            \"type\": \"address\",\n            \"internalType\": \"address\"\n          },\n          {\n            \"name\": \"basisPoints\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          }\n        ]\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"deleteComment\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"eventCancelled\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"eventInvites\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"eventOrganizers\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"events\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"basePrice\",\n        \"type\": \"uint128\",\n        \"internalType\": \"uint128\"\n      },\n      {\n        \"name\": \"startTime\",\n        \"type\": \"uint64\",\n        \"internalType\": \"uint64\"\n      },\n      {\n        \"name\": \"capacity\",\n        \"type\": \"uint32\",\n        \"internalType\": \"uint32\"\n      },\n      {\n        \"name\": \"venueId\",\n        \"type\": \"uint16\",\n        \"internalType\": \"uint16\"\n      },\n      {\n        \"name\": \"visibility\",\n        \"type\": \"uint8\",\n        \"internalType\": \"uint8\"\n      },\n      {\n        \"name\": \"status\",\n        \"type\": \"uint8\",\n        \"internalType\": \"uint8\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"feeTo\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"generateTokenId\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenType\",\n        \"type\": \"uint8\",\n        \"internalType\": \"enum Assemble.TokenType\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tierId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"serialNumber\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"pure\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getComment\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct CommentLibrary.Comment\",\n        \"components\": [\n          {\n            \"name\": \"author\",\n            \"type\": \"address\",\n            \"internalType\": \"address\"\n          },\n          {\n            \"name\": \"timestamp\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"content\",\n            \"type\": \"string\",\n            \"internalType\": \"string\"\n          },\n          {\n            \"name\": \"parentId\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          },\n          {\n            \"name\": \"isDeleted\",\n            \"type\": \"bool\",\n            \"internalType\": \"bool\"\n          },\n          {\n            \"name\": \"likes\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          }\n        ]\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getEventComments\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256[]\",\n        \"internalType\": \"uint256[]\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getFriends\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address[]\",\n        \"internalType\": \"address[]\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getPaymentSplits\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"tuple[]\",\n        \"internalType\": \"struct Assemble.PaymentSplit[]\",\n        \"components\": [\n          {\n            \"name\": \"recipient\",\n            \"type\": \"address\",\n            \"internalType\": \"address\"\n          },\n          {\n            \"name\": \"basisPoints\",\n            \"type\": \"uint256\",\n            \"internalType\": \"uint256\"\n          }\n        ]\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getRefundAmounts\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"ticketRefund\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tipRefund\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getUserRSVP\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint8\",\n        \"internalType\": \"enum SocialLibrary.RSVPStatus\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"hasAttended\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"hasLikedComment\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"inviteToEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"invitees\",\n        \"type\": \"address[]\",\n        \"internalType\": \"address[]\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isEventCancelled\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isFriend\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isInvited\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"invited\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isOperator\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"isValidTicketForEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"tokenId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"isValid\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"pure\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"likeComment\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"nextCommentId\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"nextEventId\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"pendingWithdrawals\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"postComment\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"content\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      },\n      {\n        \"name\": \"parentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"protocolFeeBps\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"purchaseTickets\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tierId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"quantity\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"purchaseTickets\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tierId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"quantity\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"referrer\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"platformFeeBps\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"removeFriend\",\n    \"inputs\": [\n      {\n        \"name\": \"friend\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"removeInvitation\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"invitee\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"rsvps\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint8\",\n        \"internalType\": \"enum SocialLibrary.RSVPStatus\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setFeeTo\",\n    \"inputs\": [\n      {\n        \"name\": \"newFeeTo\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setOperator\",\n    \"inputs\": [\n      {\n        \"name\": \"operator\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"approved\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setProtocolFee\",\n    \"inputs\": [\n      {\n        \"name\": \"newFeeBps\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"ticketTiers\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"name\",\n        \"type\": \"string\",\n        \"internalType\": \"string\"\n      },\n      {\n        \"name\": \"price\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"maxSupply\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"sold\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"startSaleTime\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"endSaleTime\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"transferrable\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"tipEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"referrer\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"platformFeeBps\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"tipEvent\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"totalReferralFees\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"totalSupply\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"transfer\",\n    \"inputs\": [\n      {\n        \"name\": \"from\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"to\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"id\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"unbanUser\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"unlikeComment\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"updateRSVP\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"status\",\n        \"type\": \"uint8\",\n        \"internalType\": \"enum SocialLibrary.RSVPStatus\"\n      }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"usedTickets\",\n    \"inputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\",\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\",\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Approval\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"spender\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"id\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"AttendanceVerified\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"CommentDeleted\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"deletedBy\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"CommentLiked\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"CommentPosted\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"author\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"parentId\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"CommentUnliked\",\n    \"inputs\": [\n      {\n        \"name\": \"commentId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"EventCancelled\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"organizer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"EventCreated\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"organizer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"startTime\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"EventTipped\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tipper\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"FeeToUpdated\",\n    \"inputs\": [\n      {\n        \"name\": \"oldFeeTo\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"newFeeTo\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"FriendAdded\",\n    \"inputs\": [\n      {\n        \"name\": \"user1\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"user2\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"FriendRemoved\",\n    \"inputs\": [\n      {\n        \"name\": \"user1\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"user2\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"FundsClaimed\",\n    \"inputs\": [\n      {\n        \"name\": \"recipient\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"InvitationRevoked\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"invitee\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"organizer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"OperatorSet\",\n    \"inputs\": [\n      {\n        \"name\": \"owner\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"operator\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"approved\",\n        \"type\": \"bool\",\n        \"indexed\": false,\n        \"internalType\": \"bool\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"PaymentAllocated\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"recipient\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"role\",\n        \"type\": \"string\",\n        \"indexed\": false,\n        \"internalType\": \"string\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"PlatformFeeAllocated\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"referrer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"feeBps\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ProtocolFeeUpdated\",\n    \"inputs\": [\n      {\n        \"name\": \"oldFee\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"newFee\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"RSVPUpdated\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"status\",\n        \"type\": \"uint8\",\n        \"indexed\": false,\n        \"internalType\": \"enum SocialLibrary.RSVPStatus\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"RefundClaimed\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"refundType\",\n        \"type\": \"string\",\n        \"indexed\": false,\n        \"internalType\": \"string\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"TicketPurchased\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"buyer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"quantity\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"price\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"TicketUsed\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"ticketTokenId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"tierId\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Transfer\",\n    \"inputs\": [\n      {\n        \"name\": \"caller\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"from\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"to\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"id\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"amount\",\n        \"type\": \"uint256\",\n        \"indexed\": false,\n        \"internalType\": \"uint256\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"UserBanned\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"bannedBy\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"UserInvited\",\n    \"inputs\": [\n      {\n        \"name\": \"eventId\",\n        \"type\": \"uint256\",\n        \"indexed\": true,\n        \"internalType\": \"uint256\"\n      },\n      {\n        \"name\": \"invitee\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"organizer\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"UserUnbanned\",\n    \"inputs\": [\n      {\n        \"name\": \"user\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      },\n      {\n        \"name\": \"unbannedBy\",\n        \"type\": \"address\",\n        \"indexed\": true,\n        \"internalType\": \"address\"\n      }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AlreadyBan\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AlreadyFriends\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AlreadyInvited\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"AlreadyLiked\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadAddr\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadBps\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadCap\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadContent\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadEndTime\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadFeeTo\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadQty\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadRecipient\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadRef\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadSaleTimes\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadTime\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"BadTotal\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Banned\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Cancelled\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"CantAddSelf\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Ended\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"EventOver\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Expired\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"FeeHigh\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NeedMore\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NeedValue\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoComment\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoEvent\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoFunds\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoParent\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoPerms\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoRefund\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoSpace\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoSplits\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoSupply\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoTicket\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoTier\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NoTiers\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotActive\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotAuth\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotBan\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotCancelled\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotDone\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotEventTime\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotExpired\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotFriends\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotInvited\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotLiked\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotOrganizer\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotPrivate\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"NotStarted\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"ParentDel\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"PlatformHigh\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"RefundFail\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Soulbound\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Started\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"TooMany\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"TransferFail\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"Used\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"WrongEvent\",\n    \"inputs\": []\n  },\n  {\n    \"type\": \"error\",\n    \"name\": \"WrongOrg\",\n    \"inputs\": []\n  }\n]\n","import { Address } from 'viem'\n\n/**\n * Core Event Types\n */\nexport interface Event {\n  id: bigint\n  title: string\n  description: string\n  imageUri: string\n  startTime: bigint\n  endTime: bigint\n  capacity: number\n  venueId: bigint\n  visibility: EventVisibility\n  organizer: Address\n  isCancelled: boolean\n  \n  // ✅ NEW: Enhanced event fields\n  latitude: number\n  longitude: number\n  venueName: string\n  venueHash: bigint\n  status: EventStatus\n  tierCount: number\n  basePrice: bigint\n}\n\nexport enum EventVisibility {\n  PUBLIC = 0,\n  PRIVATE = 1,\n  INVITE_ONLY = 2,\n}\n\n// ✅ NEW: Event status enum\nexport enum EventStatus {\n  ACTIVE = 0,\n  CANCELLED = 1,\n  COMPLETED = 2,\n}\n\nexport enum RSVPStatus {\n  NOT_GOING = 0,\n  MAYBE = 1,\n  GOING = 2,\n}\n\n// ✅ NEW: Token types enum\nexport enum TokenType {\n  NONE = 0,\n  EVENT_TICKET = 1,\n  ATTENDANCE_BADGE = 2,\n  ORGANIZER_CRED = 3,\n  VENUE_CRED = 4,\n}\n\nexport enum RefundType {\n  TICKET = 0,\n  TIP = 1,\n}\n\n/**\n * Ticket Types\n */\nexport interface TicketTier {\n  name: string\n  price: bigint\n  maxSupply: number\n  sold: number\n  startSaleTime: bigint\n  endSaleTime: bigint\n  transferrable: boolean\n}\n\nexport interface Ticket {\n  eventId: bigint\n  tierId: number\n  tokenId: bigint\n  owner: Address\n  isUsed: boolean\n}\n\n/**\n * Payment Types\n */\nexport interface PaymentSplit {\n  recipient: Address\n  basisPoints: number\n}\n\nexport interface RefundAmounts {\n  ticketRefund: bigint\n  tipRefund: bigint\n}\n\n/**\n * Social Types\n */\nexport interface Friend {\n  user: Address\n  addedAt: bigint\n}\n\nexport interface Comment {\n  id: bigint\n  eventId: bigint\n  author: Address\n  content: string\n  parentId: bigint\n  timestamp: bigint\n  likes: number\n  isDeleted: boolean\n}\n\nexport interface CommentWithReplies extends Comment {\n  replies: Comment[]\n}\n\nexport interface AttendanceProof {\n  eventId: bigint\n  attendee: Address\n  timestamp: bigint\n  tokenId: bigint\n}\n\n/**\n * ✅ NEW: Location & Venue Types\n */\nexport interface LocationCoordinates {\n  latitude: number\n  longitude: number\n}\n\nexport interface LocationData {\n  coordinates: LocationCoordinates\n  venue: VenueData\n}\n\nexport interface VenueData {\n  hash: bigint\n  name: string\n  eventCount: number\n  coordinates?: LocationCoordinates\n}\n\nexport interface VenueCredential {\n  venueHash: bigint\n  venueName: string\n  eventCount: number\n  firstEventTimestamp: bigint\n  tokenId: bigint\n}\n\n/**\n * ✅ NEW: ERC20 Payment Types\n */\nexport interface ERC20PurchaseParams {\n  eventId: bigint\n  tierId: number\n  quantity: number\n  token: Address\n}\n\nexport interface ERC20PurchaseWithFeeParams extends ERC20PurchaseParams {\n  referrer: Address\n  platformFeeBps: number\n}\n\nexport interface ERC20TipParams {\n  eventId: bigint\n  token: Address\n  amount: bigint\n}\n\nexport interface ERC20TipWithFeeParams extends ERC20TipParams {\n  referrer: Address\n  platformFeeBps: number\n}\n\n/**\n * ✅ NEW: Private Event Types\n */\nexport interface EventInvitation {\n  eventId: bigint\n  event: Event\n  invitedAt: bigint\n  status: InvitationStatus\n}\n\nexport enum InvitationStatus {\n  PENDING = 0,\n  ACCEPTED = 1,\n  DECLINED = 2\n}\n\n/**\n * ✅ NEW: Platform Fee Types\n */\nexport interface PlatformFeeStats {\n  totalEarnings: bigint\n  totalTransactions: number\n  averageFee: bigint\n}\n\nexport interface ReferrerStats {\n  referrer: Address\n  totalEarnings: bigint\n  totalReferrals: number\n  rank: number\n}\n\n/**\n * ✅ NEW: Refund Types\n */\nexport interface RefundRecord {\n  eventId: bigint\n  refundType: RefundType\n  amount: bigint\n  claimedAt: bigint\n  transactionHash: string\n}\n\n/**\n * ✅ NEW: Token Management Types\n */\nexport interface TokenIdComponents {\n  tokenType: TokenType\n  eventId: bigint\n  tierId: number\n  serialNumber: bigint\n  metadata: bigint\n}\n\nexport interface SoulboundToken {\n  tokenId: bigint\n  tokenType: TokenType\n  owner: Address\n  mintedAt: bigint\n  eventId?: bigint\n  venueHash?: bigint\n}\n\n/**\n * Transaction Types\n */\nexport interface CreateEventParams {\n  title: string\n  description: string\n  imageUri: string\n  startTime: bigint\n  endTime: bigint\n  capacity: number\n  venueId: bigint\n  visibility: EventVisibility\n  tiers: TicketTier[]\n  paymentSplits: PaymentSplit[]\n  \n  // ✅ NEW: Enhanced event creation parameters\n  latitude: number\n  longitude: number\n  venueName: string\n}\n\nexport interface PurchaseTicketsParams {\n  eventId: bigint\n  tierId: number\n  quantity: number\n  referrer?: Address\n  platformFeeBps?: number\n}\n\nexport interface InviteParams {\n  eventId: bigint\n  invitees: Address[]\n}\n\nexport interface CheckInParams {\n  eventId: bigint\n  ticketTokenId?: bigint\n  attendee?: Address\n}\n\n/**\n * Client Configuration Types\n */\nexport interface AssembleClientConfig {\n  contractAddress: Address\n  publicClient: any // viem PublicClient\n  walletClient?: any // viem WalletClient\n}\n\n/**\n * Response Types\n */\nexport interface EventsResponse {\n  events: Event[]\n  total: number\n  hasMore: boolean\n}\n\nexport interface TicketsResponse {\n  tickets: Ticket[]\n  total: number\n}\n\nexport interface CommentsResponse {\n  comments: CommentWithReplies[]\n  total: number\n} ","/**\n * Custom Error Classes for Assemble SDK\n */\n\nexport class AssembleError extends Error {\n  constructor(message: string, public code?: string) {\n    super(message)\n    this.name = 'AssembleError'\n  }\n}\n\nexport class ContractError extends AssembleError {\n  constructor(message: string, public contractError?: string) {\n    super(message, 'CONTRACT_ERROR')\n    this.name = 'ContractError'\n  }\n}\n\nexport class ValidationError extends AssembleError {\n  constructor(message: string, public field?: string) {\n    super(message, 'VALIDATION_ERROR')\n    this.name = 'ValidationError'\n  }\n}\n\nexport class NetworkError extends AssembleError {\n  constructor(message: string, public chainId?: number) {\n    super(message, 'NETWORK_ERROR')\n    this.name = 'NetworkError'\n  }\n}\n\nexport class WalletError extends AssembleError {\n  constructor(message: string) {\n    super(message, 'WALLET_ERROR')\n    this.name = 'WalletError'\n  }\n}\n\n/**\n * Error type guards\n */\nexport function isAssembleError(error: unknown): error is AssembleError {\n  return error instanceof AssembleError\n}\n\nexport function isContractError(error: unknown): error is ContractError {\n  return error instanceof ContractError\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n  return error instanceof ValidationError\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n  return error instanceof NetworkError\n}\n\nexport function isWalletError(error: unknown): error is WalletError {\n  return error instanceof WalletError\n} ","import { Address } from 'viem'\nimport { ValidationError } from '../errors'\n\n/**\n * Address validation utilities\n */\nexport function isValidAddress(address: string): address is Address {\n  return /^0x[a-fA-F0-9]{40}$/.test(address)\n}\n\nexport function validateAddress(address: string, fieldName = 'address'): Address {\n  if (!isValidAddress(address)) {\n    throw new ValidationError(`Invalid ${fieldName}: ${address}`, fieldName)\n  }\n  return address as Address\n}\n\n/**\n * Time utilities\n */\nexport function toUnixTimestamp(date: Date): bigint {\n  return BigInt(Math.floor(date.getTime() / 1000))\n}\n\nexport function fromUnixTimestamp(timestamp: bigint): Date {\n  return new Date(Number(timestamp) * 1000)\n}\n\nexport function isValidTimestamp(timestamp: bigint): boolean {\n  const now = BigInt(Math.floor(Date.now() / 1000))\n  return timestamp > 0n && timestamp < now + BigInt(365 * 24 * 60 * 60) // Within next year\n}\n\n/**\n * Basis points utilities\n */\nexport function basisPointsToPercent(basisPoints: number): number {\n  return basisPoints / 100\n}\n\nexport function percentToBasisPoints(percent: number): number {\n  return Math.round(percent * 100)\n}\n\nexport function validateBasisPoints(basisPoints: number, maxBps = 10000): void {\n  if (basisPoints < 0 || basisPoints > maxBps) {\n    throw new ValidationError(`Basis points must be between 0 and ${maxBps}`)\n  }\n}\n\n/**\n * BigInt utilities\n */\nexport function formatEther(wei: bigint): string {\n  return (Number(wei) / 1e18).toFixed(4)\n}\n\nexport function parseEther(ether: string): bigint {\n  return BigInt(Math.floor(parseFloat(ether) * 1e18))\n}\n\n/**\n * Event validation utilities\n */\nexport function validateEventTiming(startTime: bigint, endTime: bigint): void {\n  const now = BigInt(Math.floor(Date.now() / 1000))\n  \n  if (endTime <= startTime) {\n    throw new ValidationError('Event end time must be after start time')\n  }\n  \n  // Allow events that have already started for testing purposes\n  if (endTime <= now) {\n    throw new ValidationError('Event end time must be in the future')\n  }\n  \n  // Allow events that started up to 24 hours ago\n  const twentyFourHoursAgo = now - 86400n\n  if (startTime < twentyFourHoursAgo) {\n    throw new ValidationError('Event start time is too far in the past (max 24 hours ago)')\n  }\n}\n\nexport function validateCapacity(capacity: number): void {\n  if (capacity <= 0 || capacity > 100000) {\n    throw new ValidationError('Event capacity must be between 1 and 100,000')\n  }\n}\n\n/**\n * Payment split validation\n */\nexport function validatePaymentSplits(splits: { recipient: Address; basisPoints: number }[]): void {\n  if (splits.length === 0) {\n    throw new ValidationError('At least one payment split is required')\n  }\n  \n  if (splits.length > 20) {\n    throw new ValidationError('Maximum 20 payment splits allowed')\n  }\n  \n  const totalBps = splits.reduce((sum, split) => sum + split.basisPoints, 0)\n  if (totalBps !== 10000) {\n    throw new ValidationError('Payment splits must total exactly 100% (10,000 basis points)')\n  }\n  \n  for (const split of splits) {\n    validateAddress(split.recipient, 'payment split recipient')\n    validateBasisPoints(split.basisPoints)\n  }\n} ","import { Abi } from 'viem'\n\n/**\n * Assemble Protocol Contract ABI\n * \n * Generated from the Assemble.sol contract\n */\nexport const ASSEMBLE_ABI: Abi = require('./abi.json')\n\nexport default ASSEMBLE_ABI ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, Event, CreateEventParams, EventsResponse, RSVPStatus, LocationData, LocationCoordinates, VenueData, EventStatus } from '../types'\nimport { WalletError, ContractError, ValidationError } from '../errors'\nimport { validateEventTiming, validateCapacity, validatePaymentSplits, validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for event-related operations\n */\nexport class EventManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Create a new event with enhanced location/venue support\n   */\n  async createEvent(params: CreateEventParams): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    validateEventTiming(params.startTime, params.endTime)\n    validateCapacity(params.capacity)\n    validatePaymentSplits(params.paymentSplits)\n\n    // ✅ Corrected Validation: Check for existence before using the values\n    if (params.latitude === undefined || params.longitude === undefined) {\n      throw new ValidationError('Latitude and Longitude are required')\n    }\n    if (params.latitude < -90 || params.latitude > 90) {\n      throw new ValidationError('Latitude must be between -90 and 90')\n    }\n    if (params.longitude < -180 || params.longitude > 180) {\n      throw new ValidationError('Longitude must be between -180 and 180')\n    }\n    if (!params.venueName || params.venueName.trim().length === 0) {\n      throw new ValidationError('Venue name is required')\n    }\n\n    try {\n      // ✅ Definitive Fix: Scale coordinates to int64, matching contract's 10^7 precision.\n      const scaledLatitude = BigInt(Math.round(params.latitude * 10_000_000))\n      const scaledLongitude = BigInt(Math.round(params.longitude * 10_000_000))\n\n      // ✅ Definitive Fix: Create an object matching the contract's `EventParams` struct exactly.\n      const eventParams = {\n        title: params.title,\n        description: params.description,\n        imageUri: params.imageUri,\n        startTime: params.startTime,\n        endTime: params.endTime,\n        capacity: params.capacity,\n        latitude: scaledLatitude,\n        longitude: scaledLongitude,\n        venueName: params.venueName,\n        visibility: params.visibility,\n      }\n\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'createEvent',\n        args: [eventParams, params.tiers, params.paymentSplits],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to create event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get event by ID with enhanced venue/location data\n   */\n  async getEvent(eventId: bigint): Promise<Event | null> {\n    try {\n      // Get basic event data from events mapping\n      const eventData = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'events',\n        args: [eventId],\n      }) as any\n\n      // Get organizer from separate mapping\n      const organizer = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'eventOrganizers',\n        args: [eventId],\n      }) as Address\n\n      // Get cancellation status from separate mapping\n      const isCancelled = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'eventCancelled',\n        args: [eventId],\n      }) as boolean\n\n      // Check if event exists (organizer is zero address for non-existent events)\n      if (!organizer || organizer === '0x0000000000000000000000000000000000000000') {\n        return null\n      }\n\n      // Contract structure based on ABI:\n      // [basePrice, startTime, capacity, venueId, visibility, status, locationData, venueName, venueHash, tierCount]\n      const [basePrice, startTime, capacity, venueId, visibility, status, locationData, venueName, venueHash, tierCount] = eventData\n\n      // ✅ FINAL, TRIPLE-CHECKED FIX: Unpack the 128-bit locationData field\n      const sixtyFourBits = 64n\n      const mask = (1n << sixtyFourBits) - 1n\n      const latFixed = BigInt(locationData) >> sixtyFourBits\n      const lonFixed = BigInt(locationData) & mask\n\n      // Convert from signed 64-bit integer\n      const signBit = 1n << (sixtyFourBits - 1n)\n      const latSigned = (latFixed & (signBit - 1n)) - (latFixed & signBit)\n      const lonSigned = (lonFixed & (signBit - 1n)) - (lonFixed & signBit)\n\n      // ✅ Definitive Fix: Use the correct 10^7 scaling factor when unpacking.\n      const latitude = Number(latSigned) / 10_000_000\n      const longitude = Number(lonSigned) / 10_000_000\n\n      return {\n        id: eventId,\n        // Note: title, description, imageUri, endTime would need to be from event logs or off-chain\n        title: `Event #${eventId}`, // Fallback since metadata not available from contract getters\n        description: '', // Not available from contract getters\n        imageUri: '', // Not available from contract getters\n        startTime: BigInt(startTime),\n        endTime: BigInt(startTime) + 7200n, // Fallback: assume 2 hours duration\n        capacity: Number(capacity),\n        venueId: BigInt(venueId), // Legacy field\n        visibility: Number(visibility),\n        organizer,\n        isCancelled: Boolean(isCancelled),\n        // ✅ NEW: Enhanced event fields\n        latitude,\n        longitude,\n        venueName: venueName || 'Unknown Venue',\n        venueHash: BigInt(venueHash),\n        status: Number(status),\n        tierCount: Number(tierCount),\n        basePrice: BigInt(basePrice),\n      } as Event\n    } catch (error) {\n      throw new ContractError('Failed to get event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get multiple events with pagination\n   */\n  async getEvents(options?: {\n    offset?: number\n    limit?: number\n    organizer?: Address\n  }): Promise<EventsResponse> {\n    try {\n      // Get next event ID to determine range\n      const nextEventId = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'nextEventId',\n        args: [],\n      }) as bigint\n\n      const offset = options?.offset || 0\n      const limit = options?.limit || 10\n      const events: Event[] = []\n\n      // Fetch events in range\n      const startId = Math.max(1, Number(nextEventId) - offset - limit)\n      const endId = Math.max(1, Number(nextEventId) - offset)\n\n      for (let i = startId; i < endId && events.length < limit; i++) {\n        try {\n          const event = await this.getEvent(BigInt(i))\n          if (event && (!options?.organizer || event.organizer === options.organizer)) {\n            events.push(event)\n          }\n        } catch {\n          // Skip invalid events\n          continue\n        }\n      }\n\n      return {\n        events: events.reverse(), // Most recent first\n        total: Number(nextEventId) - 1,\n        hasMore: offset + limit < Number(nextEventId) - 1,\n      }\n    } catch (error) {\n      throw new ContractError('Failed to get events', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Cancel an event\n   */\n  async cancelEvent(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'cancelEvent',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to cancel event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get events organized by a specific address\n   */\n  async getEventsByOrganizer(organizer: Address): Promise<Event[]> {\n    try {\n      const response = await this.getEvents({ organizer, limit: 100 })\n      return response.events\n    } catch (error) {\n      throw new ContractError('Failed to get events by organizer', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if an address is the organizer of an event\n   */\n  async isEventOrganizer(eventId: bigint, address: Address): Promise<boolean> {\n    try {\n      const organizer = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'eventOrganizers',\n        args: [eventId],\n      }) as Address\n\n      return organizer?.toLowerCase() === address.toLowerCase()\n    } catch (error) {\n      throw new ContractError('Failed to check event organizer', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Invite users to a private event\n   */\n  async inviteToEvent(eventId: bigint, invitees: Address[]): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    if (invitees.length === 0) {\n      throw new ValidationError('At least one invitee is required')\n    }\n\n    if (invitees.length > 100) {\n      throw new ValidationError('Maximum 100 invitees per transaction')\n    }\n\n    // Validate all addresses\n    invitees.forEach((address, index) => {\n      validateAddress(address, `invitee ${index}`)\n    })\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'inviteToEvent',\n        args: [eventId, invitees],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to invite users to event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Remove invitation from a user\n   */\n  async removeInvitation(eventId: bigint, invitee: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(invitee, 'invitee')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'removeInvitation',\n        args: [eventId, invitee],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to remove invitation', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a user is invited to an event\n   */\n  async isInvited(eventId: bigint, user: Address): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'isInvited',\n        args: [eventId, user],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check invitation status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Update RSVP status for an event\n   */\n  async updateRSVP(eventId: bigint, status: RSVPStatus): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'updateRSVP',\n        args: [eventId, status],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to update RSVP', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get user's RSVP status for an event\n   */\n  async getUserRSVP(eventId: bigint, user: Address): Promise<RSVPStatus> {\n    validateAddress(user, 'user')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getUserRSVP',\n        args: [eventId, user],\n      })\n\n      return result as RSVPStatus\n    } catch (error) {\n      throw new ContractError('Failed to get RSVP status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a user has attended an event\n   */\n  async hasAttended(eventId: bigint, user: Address): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'hasAttended',\n        args: [user, eventId],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check attendance', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if an event is cancelled (enhanced)\n   */\n  async isEventCancelled(eventId: bigint): Promise<boolean> {\n    try {\n      const event = await this.getEvent(eventId)\n      if (!event) {\n        throw new ValidationError('Event not found')\n      }\n\n      return event.isCancelled || event.status === EventStatus.CANCELLED\n    } catch (error) {\n      throw new ContractError('Failed to check if event is cancelled', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * ✅ NEW: Get event location data\n   */\n  async getEventLocation(eventId: bigint): Promise<LocationData> {\n    const event = await this.getEvent(eventId)\n    if (!event) {\n      throw new ValidationError('Event not found')\n    }\n\n    const coordinates: LocationCoordinates = {\n      latitude: event.latitude,\n      longitude: event.longitude,\n    }\n\n    const venue: VenueData = {\n      hash: event.venueHash,\n      name: event.venueName,\n      eventCount: 0, // Would need separate call to get venue event count\n      coordinates,\n    }\n\n    return {\n      coordinates,\n      venue,\n    }\n  }\n\n  /**\n   * ✅ NEW: Get event venue data\n   */\n  async getEventVenue(eventId: bigint): Promise<VenueData> {\n    const event = await this.getEvent(eventId)\n    if (!event) {\n      throw new ValidationError('Event not found')\n    }\n\n    // Get venue event count\n    const venueEventCount = await this.config.publicClient.readContract({\n      address: this.config.contractAddress,\n      abi: ASSEMBLE_ABI,\n      functionName: 'venueEventCount',\n      args: [event.venueHash],\n    }) as bigint\n\n    return {\n      hash: event.venueHash,\n      name: event.venueName,\n      eventCount: Number(venueEventCount),\n      coordinates: {\n        latitude: event.latitude,\n        longitude: event.longitude,\n      },\n    }\n  }\n\n  /**\n   * ✅ NEW: Get events by venue hash\n   */\n  async getEventsByVenue(venueHash: bigint): Promise<Event[]> {\n    // This would typically require event log filtering or off-chain indexing\n    // For now, we'll scan through events and filter by venue hash\n    try {\n      const allEvents = await this.getEvents({ limit: 100 })\n      return allEvents.events.filter(event => event.venueHash === venueHash)\n    } catch (error) {\n      throw new ContractError('Failed to get events by venue', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * ✅ NEW: Get event status\n   */\n  async getEventStatus(eventId: bigint): Promise<EventStatus> {\n    const event = await this.getEvent(eventId)\n    if (!event) {\n      throw new ValidationError('Event not found')\n    }\n\n    return event.status as EventStatus\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, Ticket, PurchaseTicketsParams, TicketsResponse, RefundAmounts } from '../types'\nimport { WalletError, ContractError, ValidationError } from '../errors'\nimport { validateAddress, validateBasisPoints } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for ticket-related operations\n */\nexport class TicketManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Purchase tickets for an event\n   */\n  async purchaseTickets(params: PurchaseTicketsParams, value: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    if (params.quantity <= 0 || params.quantity > 50) {\n      throw new ValidationError('Ticket quantity must be between 1 and 50')\n    }\n\n    if (params.referrer) {\n      validateAddress(params.referrer, 'referrer')\n    }\n\n    if (params.platformFeeBps !== undefined) {\n      validateBasisPoints(params.platformFeeBps, 500) // Max 5%\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'purchaseTickets',\n        args: [\n          params.eventId,\n          BigInt(params.tierId),\n          BigInt(params.quantity),\n          params.referrer || '0x0000000000000000000000000000000000000000',\n          BigInt(params.platformFeeBps || 0),\n        ],\n        value,\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to purchase tickets', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get ticket price for specific quantity\n   */\n  async calculatePrice(eventId: bigint, tierId: number, quantity: number): Promise<bigint> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'calculatePrice',\n        args: [eventId, BigInt(tierId), BigInt(quantity)], // Convert to BigInt for contract\n      })\n\n      // Contract returns a single uint256 totalPrice\n      return result as bigint\n    } catch (error) {\n      throw new ContractError('Failed to calculate price', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get tickets owned by an address\n   */\n  async getTickets(owner: Address): Promise<TicketsResponse> {\n    try {\n      // Get next event ID to determine range\n      const nextEventId = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'nextEventId',\n        args: [],\n      }) as bigint\n\n      const tickets: Ticket[] = []\n\n      // Check ticket balances for all events and tiers\n      for (let eventId = 1n; eventId < nextEventId; eventId++) {\n        try {\n          // Get event to check tier count\n          const event = await this.config.publicClient.readContract({\n            address: this.config.contractAddress,\n            abi: ASSEMBLE_ABI,\n            functionName: 'events',\n            args: [eventId],\n          })\n\n          if (!event) continue\n\n          // Check each tier (assuming max 10 tiers per event)\n          for (let tierId = 0; tierId < 10; tierId++) {\n            try {\n              const balance = await this.getTicketBalance(owner, eventId, tierId)\n              if (balance > 0) {\n                const tokenId = await this.generateTokenId(eventId, tierId)\n                \n                // Create ticket objects for each balance\n                for (let i = 0; i < balance; i++) {\n                  tickets.push({\n                    eventId,\n                    tierId,\n                    tokenId: tokenId + BigInt(i),\n                    owner,\n                    isUsed: false, // Would need to check actual usage status\n                  })\n                }\n              }\n            } catch {\n              // No more tiers for this event\n              break\n            }\n          }\n        } catch {\n          // Skip invalid events\n          continue\n        }\n      }\n      \n      return {\n        tickets,\n        total: tickets.length,\n      }\n    } catch (error) {\n      throw new ContractError('Failed to get tickets', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get ticket balance for a specific event and tier\n   */\n  async getTicketBalance(owner: Address, eventId: bigint, tierId: number): Promise<number> {\n    try {\n      const tokenId = await this.generateTokenId(eventId, tierId)\n      \n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'balanceOf',\n        args: [owner, tokenId],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get ticket balance', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Transfer tickets to another address\n   */\n  async transferTickets(\n    to: Address,\n    eventId: bigint,\n    tierId: number,\n    amount: number\n  ): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(to, 'recipient')\n\n    try {\n      const tokenId = await this.generateTokenId(eventId, tierId)\n      \n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'transfer',\n        args: [\n          this.config.walletClient.account!.address,\n          to,\n          tokenId,\n          BigInt(amount),\n        ],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to transfer tickets', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Use/check-in a ticket\n   */\n  async useTicket(eventId: bigint, tierId: number): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'useTicket',\n        args: [eventId, tierId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to use ticket', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Basic check-in to an event\n   */\n  async checkIn(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'checkIn',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to check in', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check-in with a specific ticket token\n   */\n  async checkInWithTicket(eventId: bigint, ticketTokenId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'checkInWithTicket',\n        args: [eventId, ticketTokenId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to check in with ticket', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Delegate check-in for another attendee\n   */\n  async checkInDelegate(eventId: bigint, ticketTokenId: bigint, attendee: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(attendee, 'attendee')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'checkInDelegate',\n        args: [eventId, ticketTokenId, attendee],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to delegate check in', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Validate if a ticket is valid for an event\n   */\n  async isValidTicketForEvent(tokenId: bigint, eventId: bigint): Promise<boolean> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'isValidTicketForEvent',\n        args: [tokenId, eventId],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to validate ticket', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get refund amounts for a cancelled event\n   */\n  async getRefundAmounts(eventId: bigint, user: Address): Promise<RefundAmounts> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getRefundAmounts',\n        args: [eventId, user],\n      })\n\n      const [ticketRefund, tipRefund] = result as [bigint, bigint]\n      return { ticketRefund, tipRefund }\n    } catch (error) {\n      throw new ContractError('Failed to get refund amounts', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim refund for cancelled event\n   */\n  async claimRefund(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimTicketRefund',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim refund', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim tip refund for cancelled event\n   */\n  async claimTipRefund(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimTipRefund',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim tip refund', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get total supply of a token\n   */\n  async totalSupply(tokenId: bigint): Promise<bigint> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'totalSupply',\n        args: [tokenId],\n      })\n\n      return result as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get total supply', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Generate token ID for ERC6909 tokens\n   * This should match the contract's token ID generation logic\n   */\n  public async generateTokenId(eventId: bigint, tierId: number, serialNumber = 0n): Promise<bigint> {\n    try {\n      // Call the contract's generateTokenId function for consistency\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'generateTokenId',\n        args: [0, eventId, tierId, serialNumber], // 0 = EVENT_TICKET type\n      })\n      return result as bigint\n    } catch (error) {\n      // Fallback to manual calculation if contract function not available\n      // This should match your contract's logic\n      return (eventId << 32n) | BigInt(tierId)\n    }\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, Comment, CommentsResponse, PaymentSplit } from '../types'\nimport { WalletError, ContractError, ValidationError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for social features (friends, comments, etc.)\n */\nexport class SocialManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Add a friend\n   */\n  async addFriend(friendAddress: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(friendAddress, 'friend address')\n\n    if (friendAddress === this.config.walletClient.account?.address) {\n      throw new ValidationError('Cannot add yourself as a friend')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'addFriend',\n        args: [friendAddress],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to add friend', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Remove a friend\n   */\n  async removeFriend(friendAddress: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(friendAddress, 'friend address')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'removeFriend',\n        args: [friendAddress],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to remove friend', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get friends list for an address\n   */\n  async getFriends(userAddress: Address): Promise<Address[]> {\n    validateAddress(userAddress, 'user address')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getFriends',\n        args: [userAddress],\n      })\n\n      return result as Address[]\n    } catch (error) {\n      throw new ContractError('Failed to get friends', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if two addresses are friends\n   */\n  async isFriend(user1: Address, user2: Address): Promise<boolean> {\n    validateAddress(user1, 'user1 address')\n    validateAddress(user2, 'user2 address')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'isFriend',\n        args: [user1, user2],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check friendship', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Post a comment on an event\n   */\n  async postComment(eventId: bigint, content: string, parentId = 0n): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    if (!content.trim()) {\n      throw new ValidationError('Comment content cannot be empty')\n    }\n\n    if (content.length > 1000) {\n      throw new ValidationError('Comment content cannot exceed 1000 characters')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'postComment',\n        args: [eventId, content, parentId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to post comment', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Delete a comment (moderator only)\n   */\n  async deleteComment(commentId: bigint, eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'deleteComment',\n        args: [commentId, eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to delete comment', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Like a comment\n   */\n  async likeComment(commentId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'likeComment',\n        args: [commentId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to like comment', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Unlike a comment\n   */\n  async unlikeComment(commentId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'unlikeComment',\n        args: [commentId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to unlike comment', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get comments for an event\n   */\n  async getComments(eventId: bigint): Promise<Comment[]> {\n    try {\n      // Get all comments for the event using the contract function\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getEventComments',\n        args: [eventId],\n      })\n\n      return result as Comment[]\n    } catch (error) {\n      throw new ContractError('Failed to get comments', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get all comments for an event (enhanced version)\n   */\n  async getEventComments(eventId: bigint): Promise<CommentsResponse> {\n    try {\n      // Get comment IDs from the contract (returns uint256[])\n      const commentIds = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getEventComments',\n        args: [eventId],\n      }) as bigint[]\n\n      // Fetch individual comments by ID\n      const comments: Comment[] = []\n      for (const commentId of commentIds) {\n        try {\n          const comment = await this.getComment(commentId)\n          if (comment) {\n            comments.push({ ...comment, id: commentId })\n          }\n        } catch (error) {\n          // Skip comments that can't be fetched\n          console.warn(`Failed to fetch comment ${commentId}:`, error)\n        }\n      }\n      \n      // Separate top-level comments and replies\n      const topLevelComments = comments.filter(c => c.parentId === 0n)\n      const replies = comments.filter(c => c.parentId !== 0n)\n      \n      // Organize comments with their replies\n      const commentsWithReplies = topLevelComments.map(comment => ({\n        ...comment,\n        replies: replies.filter(reply => reply.parentId === comment.id)\n      }))\n\n      return {\n        comments: commentsWithReplies,\n        total: comments.length\n      }\n    } catch (error) {\n      throw new ContractError('Failed to get event comments', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get a specific comment by ID\n   */\n  async getComment(commentId: bigint): Promise<Comment | null> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getComment',\n        args: [commentId],\n      }) as any\n\n      if (!result || !result.author || result.author === '0x0000000000000000000000000000000000000000') {\n        return null\n      }\n\n      // Contract returns: [author, timestamp, content, parentId, isDeleted, likes]\n      const { author, timestamp, content, parentId, isDeleted, likes } = result\n\n      return {\n        id: commentId,\n        author: author as Address,\n        timestamp: BigInt(timestamp),\n        content: content as string,\n        parentId: BigInt(parentId),\n        isDeleted: Boolean(isDeleted),\n        likes: Number(likes),\n      } as Comment\n    } catch (error) {\n      throw new ContractError('Failed to get comment', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a user has liked a comment\n   */\n  async hasLikedComment(commentId: bigint, userAddress: Address): Promise<boolean> {\n    validateAddress(userAddress, 'user address')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'hasLikedComment',\n        args: [commentId, userAddress],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check comment like status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Ban a user from an event\n   */\n  async banUser(user: Address, eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(user, 'user address')\n\n    if (user === this.config.walletClient.account?.address) {\n      throw new ValidationError('Cannot ban yourself')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'banUser',\n        args: [user, eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to ban user', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Unban a user from an event\n   */\n  async unbanUser(user: Address, eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(user, 'user address')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'unbanUser',\n        args: [user, eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to unban user', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get payment splits for an event\n   */\n  async getPaymentSplits(eventId: bigint): Promise<PaymentSplit[]> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'getPaymentSplits',\n        args: [eventId],\n      }) as any[]\n\n      // Contract returns array of tuples: [{recipient, basisPoints}, ...]\n      return result.map(split => ({\n        recipient: split.recipient as Address,\n        basisPoints: Number(split.basisPoints),\n      }))\n    } catch (error) {\n      throw new ContractError('Failed to get payment splits', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get pending withdrawals for a user\n   */\n  async getPendingWithdrawals(user: Address): Promise<bigint> {\n    validateAddress(user, 'user address')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'pendingWithdrawals',\n        args: [user],\n      })\n\n      return result as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get pending withdrawals', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Tip an event organizer\n   */\n  async tipEvent(eventId: bigint, amount: bigint, referrer?: Address, platformFeeBps?: number): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    if (amount <= 0n) {\n      throw new ValidationError('Tip amount must be greater than 0')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'tipEvent',\n        args: [\n          eventId,\n          referrer || '0x0000000000000000000000000000000000000000',\n          platformFeeBps || 0,\n        ],\n        value: amount,\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to tip event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig } from '../types'\nimport { WalletError, ContractError } from '../errors'\nimport { validateAddress, validateBasisPoints } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for protocol-level admin operations\n */\nexport class ProtocolManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Claim accumulated protocol funds\n   */\n  async claimFunds(): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimFunds',\n        args: [],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim funds', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim organizer credential for an event\n   */\n  async claimOrganizerCredential(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimOrganizerCredential',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim organizer credential', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Set protocol fee (admin only)\n   */\n  async setProtocolFee(newFeeBps: number): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateBasisPoints(newFeeBps, 10000) // Max 100%\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'setProtocolFee',\n        args: [newFeeBps],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to set protocol fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Set fee recipient address (admin only)\n   */\n  async setFeeTo(newFeeTo: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(newFeeTo, 'fee recipient')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'setFeeTo',\n        args: [newFeeTo],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to set fee recipient', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get maximum payment splits allowed\n   */\n  async getMaxPaymentSplits(): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'MAX_PAYMENT_SPLITS',\n        args: [],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get max payment splits', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get maximum platform fee\n   */\n  async getMaxPlatformFee(): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'MAX_PLATFORM_FEE',\n        args: [],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get max platform fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get maximum protocol fee\n   */\n  async getMaxProtocolFee(): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'MAX_PROTOCOL_FEE',\n        args: [],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get max protocol fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get maximum ticket quantity per purchase\n   */\n  async getMaxTicketQuantity(): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'MAX_TICKET_QUANTITY',\n        args: [],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get max ticket quantity', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get refund claim deadline\n   */\n  async getRefundClaimDeadline(): Promise<bigint> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'REFUND_CLAIM_DEADLINE',\n        args: [],\n      })\n\n      return result as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get refund claim deadline', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get current protocol fee in basis points\n   */\n  async getProtocolFee(): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'protocolFeeBps',\n        args: [],\n      })\n\n      return Number(result)\n    } catch (error) {\n      throw new ContractError('Failed to get protocol fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get current fee recipient address\n   */\n  async getFeeTo(): Promise<Address> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'feeTo',\n        args: [],\n      })\n\n      return result as Address\n    } catch (error) {\n      throw new ContractError('Failed to get fee recipient', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, ERC20PurchaseParams, ERC20PurchaseWithFeeParams, ERC20TipParams, ERC20TipWithFeeParams } from '../types'\nimport { WalletError, ContractError, ValidationError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for ERC20 payment operations\n */\nexport class ERC20Manager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Purchase tickets using ERC20 tokens\n   */\n  async purchaseTicketsERC20(params: ERC20PurchaseParams): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    validateAddress(params.token, 'token')\n    if (params.quantity === 0) {\n      throw new ValidationError('Quantity must be greater than 0')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'purchaseTicketsERC20',\n        args: [params.eventId, params.tierId, params.quantity, params.token],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to purchase tickets with ERC20', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Purchase tickets using ERC20 tokens with platform fee\n   */\n  async purchaseTicketsERC20WithPlatformFee(params: ERC20PurchaseWithFeeParams): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    validateAddress(params.token, 'token')\n    validateAddress(params.referrer, 'referrer')\n    if (params.quantity === 0) {\n      throw new ValidationError('Quantity must be greater than 0')\n    }\n    if (params.platformFeeBps > 500) {\n      throw new ValidationError('Platform fee cannot exceed 5%')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'purchaseTicketsERC20',\n        args: [params.eventId, params.tierId, params.quantity, params.token, params.referrer, params.platformFeeBps],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to purchase tickets with ERC20 and platform fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Tip event using ERC20 tokens\n   */\n  async tipEventERC20(params: ERC20TipParams): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    validateAddress(params.token, 'token')\n    if (params.amount === 0n) {\n      throw new ValidationError('Tip amount must be greater than 0')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'tipEventERC20',\n        args: [params.eventId, params.token, params.amount],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to tip event with ERC20', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Tip event using ERC20 tokens with platform fee\n   */\n  async tipEventERC20WithPlatformFee(params: ERC20TipWithFeeParams): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    validateAddress(params.token, 'token')\n    validateAddress(params.referrer, 'referrer')\n    if (params.amount === 0n) {\n      throw new ValidationError('Tip amount must be greater than 0')\n    }\n    if (params.platformFeeBps > 500) {\n      throw new ValidationError('Platform fee cannot exceed 5%')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'tipEventERC20',\n        args: [params.eventId, params.token, params.amount, params.referrer, params.platformFeeBps],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to tip event with ERC20 and platform fee', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim ERC20 funds from pending withdrawals\n   */\n  async claimERC20Funds(token: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(token, 'token')\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimERC20Funds',\n        args: [token],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim ERC20 funds', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get pending ERC20 withdrawals for a user\n   */\n  async getPendingERC20Withdrawals(user: Address, token: Address): Promise<bigint> {\n    validateAddress(user, 'user')\n    validateAddress(token, 'token')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'pendingERC20Withdrawals',\n        args: [token, user],\n      })\n\n      return result as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get pending ERC20 withdrawals', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a token is supported for payments\n   */\n  async isSupportedToken(token: Address): Promise<boolean> {\n    validateAddress(token, 'token')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'supportedTokens',\n        args: [token],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check token support', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get all supported tokens (would need to be tracked off-chain or via events)\n   * For now, returns common tokens that are typically supported\n   */\n  async getSupportedTokens(): Promise<Address[]> {\n    // Note: This would typically need to track TokenSupportUpdated events\n    // For now, returning a basic implementation\n    const commonTokens: Address[] = [\n      // Add common token addresses as they're added to the protocol\n    ]\n\n    const supportedTokens: Address[] = []\n    for (const token of commonTokens) {\n      try {\n        const isSupported = await this.isSupportedToken(token)\n        if (isSupported) {\n          supportedTokens.push(token)\n        }\n      } catch {\n        // Skip tokens that can't be checked\n        continue\n      }\n    }\n\n    return supportedTokens\n  }\n} ","import { Address, keccak256, toBytes } from 'viem'\nimport { AssembleClientConfig, VenueData, VenueCredential, LocationCoordinates, Event } from '../types'\nimport { ContractError, ValidationError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for venue-related operations\n */\nexport class VenueManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Generate venue hash from venue name (matches protocol implementation)\n   */\n  getVenueHash(venueName: string): bigint {\n    if (!venueName || venueName.trim().length === 0) {\n      throw new ValidationError('Venue name cannot be empty')\n    }\n\n    // Use keccak256 hash of venue name (as bytes32)\n    const hash = keccak256(toBytes(venueName))\n    return BigInt(hash)\n  }\n\n  /**\n   * Get venue event count\n   */\n  async getVenueEventCount(venueHash: bigint): Promise<number> {\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'venueEventCount',\n        args: [venueHash],\n      })\n\n      return Number(result as bigint)\n    } catch (error) {\n      throw new ContractError('Failed to get venue event count', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get venue data including event count and basic info\n   */\n  async getVenueData(venueHash: bigint, venueName?: string): Promise<VenueData> {\n    const eventCount = await this.getVenueEventCount(venueHash)\n\n    return {\n      hash: venueHash,\n      name: venueName || `Venue ${venueHash.toString().slice(0, 8)}...`,\n      eventCount,\n    }\n  }\n\n  /**\n   * Get all events for a specific venue\n   * Note: This requires indexing events by venue hash off-chain or via event logs\n   */\n  async getVenueEvents(_venueHash: bigint): Promise<Event[]> {\n    // This would typically require event log filtering or off-chain indexing\n    // For now, returning empty array - would need to implement event filtering\n    // based on the venue hash in event creation logs\n    \n    // TODO: Implement via event log filtering:\n    // 1. Filter EventCreated logs\n    // 2. Extract venue hash from event data\n    // 3. Match against requested venueHash\n    // 4. Fetch full event data for matches\n    \n    console.warn('getVenueEvents requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Check if an organizer has venue credentials for a specific venue\n   */\n  async hasVenueCredential(organizer: Address, venueHash: bigint): Promise<boolean> {\n    validateAddress(organizer, 'organizer')\n\n    try {\n      // Venue credentials are ERC-6909 tokens with type VENUE_CRED (4)\n      // Token ID format: (type << 224) | (venueHash << 128) | (0 << 64) | serialNumber\n      const tokenType = 4n // VENUE_CRED\n      const baseTokenId = (tokenType << 224n) | (venueHash << 128n)\n      \n      // Check if organizer has any venue credential tokens for this venue\n      // Note: This is simplified - in practice might need to check multiple serial numbers\n      const balance = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'balanceOf',\n        args: [organizer, baseTokenId],\n      })\n\n      return (balance as bigint) > 0n\n    } catch (error) {\n      throw new ContractError('Failed to check venue credential', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get all venue credentials for an organizer\n   * Note: This would typically require event log analysis or off-chain indexing\n   */\n  async getOrganizerVenues(organizer: Address): Promise<VenueCredential[]> {\n    validateAddress(organizer, 'organizer')\n\n    // This would require:\n    // 1. Filter Transfer events for VENUE_CRED tokens to this organizer\n    // 2. Extract venue hashes from token IDs\n    // 3. Get venue event counts and metadata\n    // 4. Construct VenueCredential objects\n\n    console.warn('getOrganizerVenues requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Pack location coordinates into a single bigint (as done in protocol)\n   */\n  packLocationData(latitude: number, longitude: number): bigint {\n    // Validate coordinates\n    if (latitude < -90 || latitude > 90) {\n      throw new ValidationError('Latitude must be between -90 and 90')\n    }\n    if (longitude < -180 || longitude > 180) {\n      throw new ValidationError('Longitude must be between -180 and 180')\n    }\n\n    // Convert to fixed-point representation (multiply by 1e6 for 6 decimal precision)\n    const latFixed = BigInt(Math.round(latitude * 1000000))\n    const lonFixed = BigInt(Math.round(longitude * 1000000))\n\n    // Pack into single 256-bit value: high 128 bits = lat, low 128 bits = lon\n    const packed = (latFixed << 128n) | (lonFixed & ((1n << 128n) - 1n))\n    \n    return packed\n  }\n\n  /**\n   * Unpack location coordinates from bigint (reverse of pack operation)\n   */\n  unpackLocationData(locationData: bigint): LocationCoordinates {\n    // Extract latitude (high 128 bits) and longitude (low 128 bits)\n    const lonMask = (1n << 128n) - 1n\n    const lonFixed = locationData & lonMask\n    const latFixed = locationData >> 128n\n\n    // Handle signed values (convert from unsigned to signed)\n    const signBit = 1n << 127n\n    const signMask = signBit - 1n\n\n    let latSigned = latFixed\n    if (latFixed & signBit) {\n      latSigned = latFixed | ~signMask\n    }\n\n    let lonSigned = lonFixed\n    if (lonFixed & signBit) {\n      lonSigned = lonFixed | ~signMask\n    }\n\n    // Convert back to decimal (divide by 1e6)\n    const latitude = Number(latSigned) / 1000000\n    const longitude = Number(lonSigned) / 1000000\n\n    return { latitude, longitude }\n  }\n\n  /**\n   * Find venues by name pattern (requires off-chain indexing)\n   */\n  async searchVenues(_namePattern: string, _limit: number = 10): Promise<VenueData[]> {\n    // This would require off-chain indexing of venue names from events\n    console.warn('searchVenues requires off-chain venue name indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Get top venues by event count (requires off-chain aggregation)\n   */\n  async getTopVenues(_limit: number = 10): Promise<VenueData[]> {\n    // This would require:\n    // 1. Index all venue hashes from events\n    // 2. Aggregate event counts per venue\n    // 3. Sort by event count\n    // 4. Return top N venues\n\n    console.warn('getTopVenues requires off-chain venue aggregation - returning empty array for now')\n    return []\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, EventInvitation, EventVisibility, InvitationStatus } from '../types'\nimport { WalletError, ContractError, ValidationError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for private event operations\n */\nexport class PrivateEventManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Invite users to an event\n   */\n  async inviteToEvent(eventId: bigint, invitees: Address[]): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    // Validate parameters\n    if (invitees.length === 0) {\n      throw new ValidationError('Must invite at least one user')\n    }\n\n    invitees.forEach((invitee, index) => {\n      validateAddress(invitee, `invitee ${index}`)\n    })\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'inviteToEvent',\n        args: [eventId, invitees],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to invite users to event', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Remove an invitation from an event\n   */\n  async removeInvitation(eventId: bigint, invitee: Address): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    validateAddress(invitee, 'invitee')\n\n    try {\n      // Note: The protocol doesn't have a removeInvitation function in the current ABI\n      // This would need to be added to the protocol or handled via reinviting without the user\n      throw new ContractError('Remove invitation functionality not available in current protocol')\n    } catch (error) {\n      throw new ContractError('Failed to remove invitation', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a user is invited to an event\n   */\n  async isInvited(eventId: bigint, user: Address): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      const result = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'eventInvites',\n        args: [eventId, user],\n      })\n\n      return result as boolean\n    } catch (error) {\n      throw new ContractError('Failed to check invitation status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get all invitations for an event\n   * Note: This requires event log analysis or off-chain indexing\n   */\n  async getEventInvitations(_eventId: bigint): Promise<Address[]> {\n    // This would require:\n    // 1. Filter InviteToEvent logs for this eventId\n    // 2. Extract invited addresses\n    // 3. Remove any that were later uninvited\n\n    console.warn('getEventInvitations requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Get all invitations for a user\n   * Note: This requires event log analysis or off-chain indexing\n   */\n  async getUserInvitations(user: Address): Promise<EventInvitation[]> {\n    validateAddress(user, 'user')\n\n    // This would require:\n    // 1. Filter InviteToEvent logs for this user\n    // 2. Get event data for each invitation\n    // 3. Check current invitation status\n    // 4. Construct EventInvitation objects\n\n    console.warn('getUserInvitations requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Check if a user can purchase tickets for an event\n   */\n  async canPurchaseTickets(eventId: bigint, user: Address): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      // Get event details to check visibility\n      const eventData = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'events',\n        args: [eventId],\n      }) as any\n\n      const [, , , , visibility] = eventData\n\n      // Check visibility rules\n      switch (visibility) {\n        case EventVisibility.PUBLIC:\n          return true\n        case EventVisibility.PRIVATE:\n          return false\n        case EventVisibility.INVITE_ONLY:\n          return await this.isInvited(eventId, user)\n        default:\n          return false\n      }\n    } catch (error) {\n      throw new ContractError('Failed to check purchase permissions', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get event visibility\n   */\n  async getEventVisibility(eventId: bigint): Promise<EventVisibility> {\n    try {\n      const eventData = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'events',\n        args: [eventId],\n      }) as any\n\n      const [, , , , visibility] = eventData\n      return Number(visibility) as EventVisibility\n    } catch (error) {\n      throw new ContractError('Failed to get event visibility', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check invitation status for a user and event\n   */\n  async getInvitationStatus(eventId: bigint, user: Address): Promise<InvitationStatus> {\n    validateAddress(user, 'user')\n\n    try {\n      const isInvited = await this.isInvited(eventId, user)\n      \n      if (!isInvited) {\n        // Not invited at all - but this doesn't map to our enum\n        // For now, treating as pending (could also be a separate state)\n        return InvitationStatus.PENDING\n      }\n\n      // Note: The protocol doesn't track invitation response status\n      // It only tracks if someone is invited or not\n      // For ACCEPTED/DECLINED status, we'd need additional contract state\n      \n      return InvitationStatus.PENDING\n    } catch (error) {\n      throw new ContractError('Failed to get invitation status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Accept an invitation (via RSVP)\n   * Note: Invitation acceptance could be tracked via RSVP status\n   */\n  async acceptInvitation(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      // Use RSVP system to indicate acceptance\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'updateRSVP',\n        args: [eventId, 2], // RSVPStatus.GOING = 2\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to accept invitation', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Decline an invitation (via RSVP)\n   */\n  async declineInvitation(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      // Use RSVP system to indicate decline\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'updateRSVP',\n        args: [eventId, 0], // RSVPStatus.NOT_GOING = 0\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to decline invitation', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n} ","import { Address } from 'viem'\nimport { AssembleClientConfig, PlatformFeeStats, ReferrerStats } from '../types'\nimport { ValidationError } from '../errors'\nimport { validateAddress } from '../utils'\n\n/**\n * Manager for platform fee operations\n */\nexport class PlatformFeeManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Calculate platform fee for a given amount\n   */\n  calculatePlatformFee(amount: bigint, feeBps: number): bigint {\n    if (feeBps < 0 || feeBps > 10000) {\n      throw new ValidationError('Fee basis points must be between 0 and 10000')\n    }\n\n    return (amount * BigInt(feeBps)) / 10000n\n  }\n\n  /**\n   * Calculate total price including platform fee\n   */\n  calculateTotalPrice(basePrice: bigint, platformFeeBps?: number): bigint {\n    if (!platformFeeBps || platformFeeBps === 0) {\n      return basePrice\n    }\n\n    const platformFee = this.calculatePlatformFee(basePrice, platformFeeBps)\n    return basePrice + platformFee\n  }\n\n  /**\n   * Get platform fee earnings for a referrer (ETH)\n   * Note: This requires tracking via event logs or off-chain indexing\n   */\n  async getPlatformFeeEarnings(referrer: Address): Promise<bigint> {\n    validateAddress(referrer, 'referrer')\n\n    // This would require:\n    // 1. Filter all ticket purchase/tip events with platform fees\n    // 2. Sum up fees earned by this referrer\n    // 3. Account for any claimed fees\n\n    console.warn('getPlatformFeeEarnings requires event log aggregation - returning 0 for now')\n    return 0n\n  }\n\n  /**\n   * Get platform fee earnings for a referrer for specific ERC20 token\n   * Note: This requires tracking via event logs or off-chain indexing\n   */\n  async getPlatformFeeEarningsERC20(referrer: Address, token: Address): Promise<bigint> {\n    validateAddress(referrer, 'referrer')\n    validateAddress(token, 'token')\n\n    // This would require:\n    // 1. Filter all ERC20 ticket purchase/tip events with platform fees\n    // 2. Filter by token address\n    // 3. Sum up fees earned by this referrer\n    // 4. Account for any claimed fees\n\n    console.warn('getPlatformFeeEarningsERC20 requires event log aggregation - returning 0 for now')\n    return 0n\n  }\n\n  /**\n   * Get comprehensive platform fee statistics for a referrer\n   */\n  async getTotalPlatformFeesGenerated(referrer: Address): Promise<PlatformFeeStats> {\n    validateAddress(referrer, 'referrer')\n\n    // This would require comprehensive event log analysis\n    // For now, returning zero stats\n\n    console.warn('getTotalPlatformFeesGenerated requires event log aggregation - returning zero stats for now')\n    \n    return {\n      totalEarnings: 0n,\n      totalTransactions: 0,\n      averageFee: 0n,\n    }\n  }\n\n  /**\n   * Get top referrers by platform fees earned\n   */\n  async getTopReferrers(limit: number = 10): Promise<ReferrerStats[]> {\n    if (limit <= 0 || limit > 100) {\n      throw new ValidationError('Limit must be between 1 and 100')\n    }\n\n    // This would require:\n    // 1. Aggregate all platform fee events\n    // 2. Group by referrer address\n    // 3. Calculate totals and rank\n    // 4. Return top N\n\n    console.warn('getTopReferrers requires comprehensive event log aggregation - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Calculate platform fee percentage from basis points\n   */\n  bpsToPercentage(bps: number): number {\n    return bps / 100\n  }\n\n  /**\n   * Calculate basis points from percentage\n   */\n  percentageToBps(percentage: number): number {\n    if (percentage < 0 || percentage > 100) {\n      throw new ValidationError('Percentage must be between 0 and 100')\n    }\n    return Math.round(percentage * 100)\n  }\n\n  /**\n   * Validate platform fee basis points\n   */\n  validatePlatformFeeBps(feeBps: number): boolean {\n    return feeBps >= 0 && feeBps <= 500 // Max 5% platform fee\n  }\n\n  /**\n   * Get default platform fee for the protocol\n   * Note: This would typically be stored in the contract\n   */\n  async getDefaultPlatformFee(): Promise<number> {\n    // For now, return a default value - could be enhanced to read from contract\n    return 250 // 2.5% default platform fee\n  }\n\n  /**\n   * Estimate total cost with platform fee\n   */\n  estimateTotalCost(basePrice: bigint, quantity: number, platformFeeBps?: number): {\n    baseTotal: bigint\n    platformFee: bigint\n    grandTotal: bigint\n  } {\n    const baseTotal = basePrice * BigInt(quantity)\n    const platformFee = platformFeeBps ? this.calculatePlatformFee(baseTotal, platformFeeBps) : 0n\n    const grandTotal = baseTotal + platformFee\n\n    return {\n      baseTotal,\n      platformFee,\n      grandTotal,\n    }\n  }\n\n  /**\n   * Check if a platform fee rate is reasonable\n   */\n  isReasonableFeeRate(feeBps: number): boolean {\n    // Consider fees between 0.5% and 5% as reasonable\n    return feeBps >= 50 && feeBps <= 500\n  }\n} ","import { Address, Hash } from 'viem'\nimport { AssembleClientConfig, RefundAmounts, RefundRecord, RefundType } from '../types'\nimport { WalletError, ContractError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for refund operations\n */\nexport class RefundManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Get refund amounts for a user for an event\n   */\n  async getRefundAmounts(eventId: bigint, user: Address): Promise<RefundAmounts> {\n    validateAddress(user, 'user')\n\n    try {\n      // Get ticket refund amount\n      const ticketRefund = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'userTicketPayments',\n        args: [eventId, user],\n      }) as bigint\n\n      // Get tip refund amount\n      const tipRefund = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'userTipPayments',\n        args: [eventId, user],\n      }) as bigint\n\n      return {\n        ticketRefund,\n        tipRefund,\n      }\n    } catch (error) {\n      throw new ContractError('Failed to get refund amounts', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if a user can claim refunds for an event\n   */\n  async canClaimRefund(eventId: bigint, user: Address): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      // Check if event is cancelled\n      const isCancelled = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'eventCancelled',\n        args: [eventId],\n      }) as boolean\n\n      if (!isCancelled) {\n        return false\n      }\n\n      // Check if user has any refunds available\n      const refundAmounts = await this.getRefundAmounts(eventId, user)\n      return refundAmounts.ticketRefund > 0n || refundAmounts.tipRefund > 0n\n    } catch (error) {\n      throw new ContractError('Failed to check refund eligibility', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get the refund claim deadline for an event\n   */\n  async getRefundDeadline(_eventId: bigint): Promise<bigint> {\n    try {\n      // Note: The protocol implements a 90-day refund window from cancellation\n      // This would typically be stored or calculated from cancellation timestamp\n      // For now, we'll estimate based on current time + 90 days\n      const currentTime = BigInt(Math.floor(Date.now() / 1000))\n      const ninetyDays = 90n * 24n * 60n * 60n // 90 days in seconds\n      \n      return currentTime + ninetyDays\n    } catch (error) {\n      throw new ContractError('Failed to get refund deadline', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim ticket refund for an event\n   */\n  async claimTicketRefund(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimTicketRefund',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim ticket refund', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim tip refund for an event\n   */\n  async claimTipRefund(eventId: bigint): Promise<Hash> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const hash = await this.config.walletClient.writeContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'claimTipRefund',\n        args: [eventId],\n      })\n\n      return hash\n    } catch (error) {\n      throw new ContractError('Failed to claim tip refund', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Claim all refunds (tickets and tips) for an event\n   */\n  async claimAllRefunds(eventId: bigint): Promise<Hash[]> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    const hashes: Hash[] = []\n\n    try {\n      // Get refund amounts to see what's available\n      const account = this.config.walletClient.account?.address\n      if (!account) {\n        throw new WalletError('No account connected')\n      }\n\n      const refunds = await this.getRefundAmounts(eventId, account)\n\n      // Claim ticket refund if available\n      if (refunds.ticketRefund > 0n) {\n        const ticketHash = await this.claimTicketRefund(eventId)\n        hashes.push(ticketHash)\n      }\n\n      // Claim tip refund if available\n      if (refunds.tipRefund > 0n) {\n        const tipHash = await this.claimTipRefund(eventId)\n        hashes.push(tipHash)\n      }\n\n      return hashes\n    } catch (error) {\n      throw new ContractError('Failed to claim all refunds', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get refund history for a user\n   * Note: This requires event log analysis or off-chain indexing\n   */\n  async getRefundHistory(user: Address): Promise<RefundRecord[]> {\n    validateAddress(user, 'user')\n\n    // This would require:\n    // 1. Filter TicketRefundClaimed and TipRefundClaimed events for this user\n    // 2. Extract event IDs, amounts, and timestamps\n    // 3. Construct RefundRecord objects\n\n    console.warn('getRefundHistory requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Check if refunds have been claimed for an event by a user\n   */\n  async hasClaimedRefunds(eventId: bigint, user: Address): Promise<{\n    ticketRefundClaimed: boolean\n    tipRefundClaimed: boolean\n  }> {\n    validateAddress(user, 'user')\n\n    try {\n      // Check current refund amounts - if 0, they may have been claimed\n      // Note: This isn't foolproof as amounts could be 0 if user never paid\n      const currentRefunds = await this.getRefundAmounts(eventId, user)\n      \n      // This is a simplified check - ideally we'd track claimed status separately\n      return {\n        ticketRefundClaimed: currentRefunds.ticketRefund === 0n,\n        tipRefundClaimed: currentRefunds.tipRefund === 0n,\n      }\n    } catch (error) {\n      throw new ContractError('Failed to check refund claim status', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Estimate gas cost for refund claims\n   */\n  async estimateRefundGas(eventId: bigint, refundType: RefundType): Promise<bigint> {\n    if (!this.config.walletClient) {\n      throw new WalletError('Wallet not connected')\n    }\n\n    try {\n      const functionName = refundType === RefundType.TICKET ? 'claimTicketRefund' : 'claimTipRefund'\n      \n      const gasEstimate = await this.config.publicClient.estimateContractGas({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName,\n        args: [eventId],\n        account: this.config.walletClient.account?.address,\n      })\n\n      return gasEstimate\n    } catch (error) {\n      throw new ContractError('Failed to estimate gas for refund', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get total refunds available for a user across all events\n   */\n  async getTotalRefundsAvailable(user: Address): Promise<bigint> {\n    validateAddress(user, 'user')\n\n    // This would require:\n    // 1. Get all events user has payments for\n    // 2. Check which are cancelled\n    // 3. Sum up all available refunds\n    // 4. For now, returning 0\n\n    console.warn('getTotalRefundsAvailable requires comprehensive event analysis - returning 0 for now')\n    return 0n\n  }\n} ","import { Address } from 'viem'\nimport { AssembleClientConfig, TokenIdComponents, SoulboundToken, TokenType } from '../types'\nimport { ContractError } from '../errors'\nimport { validateAddress } from '../utils'\nimport { ASSEMBLE_ABI } from '../constants/abi'\n\n/**\n * Manager for ERC-6909 token operations\n */\nexport class TokenManager {\n  constructor(private config: AssembleClientConfig) {}\n\n  /**\n   * Parse token ID into its components\n   * Token ID format: (type << 224) | (eventId << 128) | (tierId << 64) | serialNumber\n   */\n  parseTokenId(tokenId: bigint): TokenIdComponents {\n    const tokenType = Number((tokenId >> 224n) & 0xFFn) as TokenType\n    const eventId = (tokenId >> 128n) & 0xFFFFFFFFFFFFFFFFFFFFFFFFn\n    const tierId = Number((tokenId >> 64n) & 0xFFFFFFFFFFFFFFFFn)\n    const serialNumber = tokenId & 0xFFFFFFFFFFFFFFFFn\n    const metadata = 0n // Reserved for future use\n\n    return {\n      tokenType,\n      eventId,\n      tierId,\n      serialNumber,\n      metadata,\n    }\n  }\n\n  /**\n   * Construct token ID from components\n   */\n  constructTokenId(components: Omit<TokenIdComponents, 'metadata'>): bigint {\n    const { tokenType, eventId, tierId, serialNumber } = components\n    \n    return (BigInt(tokenType) << 224n) | \n           (eventId << 128n) | \n           (BigInt(tierId) << 64n) | \n           serialNumber\n  }\n\n  /**\n   * Check if a token is soulbound (non-transferable)\n   */\n  isSoulboundToken(tokenType: TokenType): boolean {\n    return tokenType === TokenType.ATTENDANCE_BADGE || \n           tokenType === TokenType.ORGANIZER_CRED || \n           tokenType === TokenType.VENUE_CRED\n  }\n\n  /**\n   * Get token balance for a user\n   */\n  async getTokenBalance(user: Address, tokenId: bigint): Promise<bigint> {\n    validateAddress(user, 'user')\n\n    try {\n      const balance = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'balanceOf',\n        args: [user, tokenId],\n      })\n\n      return balance as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get token balance', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get all token balances for a user (requires event log analysis)\n   */\n  async getUserTokens(user: Address): Promise<SoulboundToken[]> {\n    validateAddress(user, 'user')\n\n    // This would require:\n    // 1. Filter Transfer events to this user\n    // 2. Parse token IDs to get types and metadata\n    // 3. Filter for current balances > 0\n    // 4. Construct SoulboundToken objects\n\n    console.warn('getUserTokens requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Get attendance badges for a user\n   */\n  async getAttendanceBadges(user: Address): Promise<SoulboundToken[]> {\n    validateAddress(user, 'user')\n\n    // This would filter getUserTokens for ATTENDANCE_BADGE type\n    console.warn('getAttendanceBadges requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Get organizer credentials for a user\n   */\n  async getOrganizerCredentials(user: Address): Promise<SoulboundToken[]> {\n    validateAddress(user, 'user')\n\n    // This would filter getUserTokens for ORGANIZER_CRED type\n    console.warn('getOrganizerCredentials requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Get venue credentials for a user\n   */\n  async getVenueCredentials(user: Address): Promise<SoulboundToken[]> {\n    validateAddress(user, 'user')\n\n    // This would filter getUserTokens for VENUE_CRED type\n    console.warn('getVenueCredentials requires event log indexing - returning empty array for now')\n    return []\n  }\n\n  /**\n   * Check if user has attended a specific event\n   */\n  async hasAttendanceBadge(user: Address, eventId: bigint): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      // Construct attendance badge token ID\n      const tokenId = this.constructTokenId({\n        tokenType: TokenType.ATTENDANCE_BADGE,\n        eventId,\n        tierId: 0,\n        serialNumber: 0n, // For attendance badges, serial number might be 0 or user-specific\n      })\n\n      const balance = await this.getTokenBalance(user, tokenId)\n      return balance > 0n\n    } catch (error) {\n      throw new ContractError('Failed to check attendance badge', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if user has organizer credentials for a specific event\n   */\n  async hasOrganizerCredential(user: Address, eventId: bigint): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      // Construct organizer credential token ID\n      const tokenId = this.constructTokenId({\n        tokenType: TokenType.ORGANIZER_CRED,\n        eventId,\n        tierId: 0,\n        serialNumber: 0n,\n      })\n\n      const balance = await this.getTokenBalance(user, tokenId)\n      return balance > 0n\n    } catch (error) {\n      throw new ContractError('Failed to check organizer credential', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Check if user has venue credentials for a specific venue\n   */\n  async hasVenueCredential(user: Address, venueHash: bigint): Promise<boolean> {\n    validateAddress(user, 'user')\n\n    try {\n      // For venue credentials, the eventId field contains the venue hash\n      const tokenId = this.constructTokenId({\n        tokenType: TokenType.VENUE_CRED,\n        eventId: venueHash, // Venue hash stored in eventId field\n        tierId: 0,\n        serialNumber: 0n,\n      })\n\n      const balance = await this.getTokenBalance(user, tokenId)\n      return balance > 0n\n    } catch (error) {\n      throw new ContractError('Failed to check venue credential', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get total supply of a token\n   */\n  async getTotalSupply(tokenId: bigint): Promise<bigint> {\n    try {\n      const supply = await this.config.publicClient.readContract({\n        address: this.config.contractAddress,\n        abi: ASSEMBLE_ABI,\n        functionName: 'totalSupply',\n        args: [tokenId],\n      })\n\n      return supply as bigint\n    } catch (error) {\n      throw new ContractError('Failed to get total supply', error instanceof Error ? error.message : 'Unknown error')\n    }\n  }\n\n  /**\n   * Get token type name\n   */\n  getTokenTypeName(tokenType: TokenType): string {\n    switch (tokenType) {\n      case TokenType.NONE:\n        return 'None'\n      case TokenType.EVENT_TICKET:\n        return 'Event Ticket'\n      case TokenType.ATTENDANCE_BADGE:\n        return 'Attendance Badge'\n      case TokenType.ORGANIZER_CRED:\n        return 'Organizer Credential'\n      case TokenType.VENUE_CRED:\n        return 'Venue Credential'\n      default:\n        return 'Unknown'\n    }\n  }\n\n  /**\n   * Validate token ID format\n   */\n  isValidTokenId(tokenId: bigint): boolean {\n    try {\n      const components = this.parseTokenId(tokenId)\n      return Object.values(TokenType).includes(components.tokenType)\n    } catch {\n      return false\n    }\n  }\n} ","import { Address, PublicClient, WalletClient } from 'viem'\nimport { AssembleClientConfig } from '../types'\nimport { EventManager } from './events'\nimport { TicketManager } from './tickets'\nimport { SocialManager } from './social'\nimport { ProtocolManager } from './protocol'\nimport { ERC20Manager } from './erc20'\nimport { VenueManager } from './venue'\nimport { PrivateEventManager } from './private-events'\nimport { PlatformFeeManager } from './platform-fees'\nimport { RefundManager } from './refunds'\nimport { TokenManager } from './tokens'\nimport { NetworkError, WalletError } from '../errors'\n\nexport interface CreateClientOptions {\n  contractAddress: Address\n  publicClient: PublicClient\n  walletClient?: WalletClient\n}\n\nexport type { AssembleClientConfig } from '../types'\n\n/**\n * Main client for interacting with the Assemble Protocol\n */\nexport class AssembleClient {\n  public readonly config: AssembleClientConfig\n  public readonly events: EventManager\n  public readonly tickets: TicketManager\n  public readonly social: SocialManager\n  public readonly protocol: ProtocolManager\n  public readonly erc20: ERC20Manager\n  public readonly venues: VenueManager\n  public readonly privateEvents: PrivateEventManager\n  public readonly platformFees: PlatformFeeManager\n  public readonly refunds: RefundManager\n  public readonly tokens: TokenManager\n\n  constructor(config: AssembleClientConfig) {\n    this.config = config\n    \n    // Initialize managers\n    this.events = new EventManager(config)\n    this.tickets = new TicketManager(config)\n    this.social = new SocialManager(config)\n    this.protocol = new ProtocolManager(config)\n    this.erc20 = new ERC20Manager(config)\n    this.venues = new VenueManager(config)\n    this.privateEvents = new PrivateEventManager(config)\n    this.platformFees = new PlatformFeeManager(config)\n    this.refunds = new RefundManager(config)\n    this.tokens = new TokenManager(config)\n  }\n\n  /**\n   * Create a new Assemble client\n   */\n  static create(options: CreateClientOptions): AssembleClient {\n    const config: AssembleClientConfig = {\n      contractAddress: options.contractAddress,\n      publicClient: options.publicClient,\n      walletClient: options.walletClient,\n    }\n\n    return new AssembleClient(config)\n  }\n\n  /**\n   * Get the current account address\n   */\n  get account(): Address | undefined {\n    return this.config.walletClient?.account?.address\n  }\n\n  /**\n   * Check if the client has a wallet connected\n   */\n  get isConnected(): boolean {\n    return !!this.config.walletClient && !!this.account\n  }\n\n  /**\n   * Get the current chain ID\n   */\n  async getChainId(): Promise<number> {\n    try {\n      return await this.config.publicClient.getChainId()\n    } catch (error) {\n      throw new NetworkError('Failed to get chain ID')\n    }\n  }\n\n  /**\n   * Switch to a specific chain\n   */\n  async switchChain(chainId: number): Promise<void> {\n    if (!this.config.walletClient) {\n      throw new WalletError('No wallet connected')\n    }\n\n    try {\n      await this.config.walletClient.switchChain({ id: chainId })\n    } catch (error) {\n      throw new NetworkError(`Failed to switch to chain ${chainId}`)\n    }\n  }\n\n  /**\n   * Set a new wallet client\n   */\n  setWalletClient(walletClient: WalletClient): void {\n    this.config.walletClient = walletClient\n  }\n\n  /**\n   * Remove the wallet client (disconnect)\n   */\n  disconnect(): void {\n    this.config.walletClient = undefined\n  }\n} ","import { Chain } from 'viem'\nimport { mainnet, sepolia, base, baseSepolia, optimism, arbitrum, polygon, zora } from 'viem/chains'\n\n// Vanity contract address - deployed on all supported networks\nexport const ASSEMBLE_CONTRACT_ADDRESS = '0x000000000a020d45fFc5cfcF7B28B5020ddd6a85' as const\n\nexport const SUPPORTED_CHAINS = {\n  mainnet,\n  sepolia,\n  base,\n  baseSepolia,\n  optimism,\n  arbitrum,\n  polygon,\n  zora,\n} as const\n\nexport type SupportedChainId = keyof typeof SUPPORTED_CHAINS\n\nexport const CHAIN_CONTRACT_ADDRESSES: Record<SupportedChainId, `0x${string}`> = {\n  mainnet: ASSEMBLE_CONTRACT_ADDRESS,\n  sepolia: ASSEMBLE_CONTRACT_ADDRESS,\n  base: ASSEMBLE_CONTRACT_ADDRESS,\n  baseSepolia: ASSEMBLE_CONTRACT_ADDRESS,\n  optimism: ASSEMBLE_CONTRACT_ADDRESS,\n  arbitrum: ASSEMBLE_CONTRACT_ADDRESS,\n  polygon: ASSEMBLE_CONTRACT_ADDRESS,\n  zora: ASSEMBLE_CONTRACT_ADDRESS,\n}\n\nexport function getContractAddress(chain: Chain): `0x${string}` {\n  const chainName = Object.keys(SUPPORTED_CHAINS).find(\n    (key) => SUPPORTED_CHAINS[key as SupportedChainId].id === chain.id\n  ) as SupportedChainId | undefined\n\n  if (!chainName) {\n    throw new Error(`Unsupported chain: ${chain.name} (${chain.id})`)\n  }\n\n  return CHAIN_CONTRACT_ADDRESSES[chainName]\n}\n\n// Re-export ABI for convenience\nexport { ASSEMBLE_ABI } from './abi' "]}