@medialane/sdk 0.7.3 โ†’ 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/config.ts","../src/marketplace/signing.ts","../src/abis.ts","../src/utils/bigint.ts","../src/utils/token.ts","../src/marketplace/orders.ts","../src/marketplace/index.ts","../src/marketplace1155/signing.ts","../src/marketplace1155/orders.ts","../src/marketplace1155/index.ts","../src/utils/address.ts","../src/utils/retry.ts","../src/api/client.ts","../src/services/pop.ts","../src/services/drop.ts","../src/client.ts","../src/types/api.ts","../src/services/erc1155collection.ts"],"names":["z","TypedDataRevision","constants","RpcProvider","Contract","shortString","cairo","byteArray","num","toSignatureArray","getChainId","_providerCache","_contractCache","getProvider","resolveToken"],"mappings":"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","file":"index.cjs","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x0234f4e8838801ebf01d7f4166d42aed9a55bc67c1301162decf9e2040e05f16\";\n\n/** Medialane1155 โ€” dedicated ERC-1155 marketplace. Deployed 2026-04-15. */\nexport const MARKETPLACE_1155_CONTRACT_MAINNET =\n \"0x042005e9b85536072bfa260b95aa6aaef07f48e622031657384d2375195d7123\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05c49ee5d3208a2c2e150fdd0c247d1195ed9ab54fa2d5dea7a633f39e4b205b\";\n\nexport const DROP_FACTORY_CONTRACT_MAINNET =\n \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\";\n\nexport const POP_FACTORY_CONTRACT_MAINNET =\n \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical)\n symbol: \"USDC\",\n address:\n \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"USDT\",\n address:\n \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"ETH\",\n address:\n \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"STRK\",\n address:\n \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"WBTC\",\n address:\n \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n decimals: 8,\n listable: true,\n },\n] as const;\n\nexport type SupportedTokenSymbol = (typeof SUPPORTED_TOKENS)[number][\"symbol\"];\n\n/** Default currency for listings and offers โ€” Circle-native USDC on Starknet. */\nexport const DEFAULT_CURRENCY: SupportedTokenSymbol = \"USDC\";\n\nexport const SUPPORTED_NETWORKS = [\"mainnet\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URL = \"https://rpc.starknet.lava.build\";\n\nexport const POP_COLLECTION_CLASS_HASH_MAINNET = \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\";\n\nexport const DROP_COLLECTION_CLASS_HASH_MAINNET = \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\";\n\n/** IP-Programmable-ERC1155-Collections factory. Redeployed 2026-04-16 (v2 โ€” adds base_uri). */\nexport const ERC1155_FACTORY_CONTRACT_MAINNET =\n \"0x006b2dc7ca7c4f466bb4575ba043d934310f052074f849caf853a86bcb819fd6\";\n\n/** Class hash of the IPCollection ERC-1155 implementation. Redeployed 2026-04-16 (v2). */\nexport const ERC1155_COLLECTION_CLASS_HASH_MAINNET =\n \"0x39a85126c6627db263617e5bce2bb72e49d2bb1f20961efc8b8954665bcfd25\";\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URL,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n MARKETPLACE_1155_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.js\";\nimport type { RetryOptions } from \"./utils/retry.js\";\n\nexport const MedialaneConfigSchema = z.object({\n network: z.enum(SUPPORTED_NETWORKS).default(\"mainnet\"),\n rpcUrl: z.string().url().optional(),\n backendUrl: z.string().url().optional(),\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n marketplace1155Contract: z.string().optional(),\n collectionContract: z.string().optional(),\n retryOptions: z.object({\n maxAttempts: z.number().int().min(1).max(10).optional(),\n baseDelayMs: z.number().int().min(0).optional(),\n maxDelayMs: z.number().int().min(0).optional(),\n }).optional(),\n});\n\nexport type MedialaneConfig = z.input<typeof MedialaneConfigSchema>;\n\nexport interface ResolvedConfig {\n network: Network;\n rpcUrl: string;\n backendUrl: string | undefined;\n apiKey: string | undefined;\n marketplaceContract: string;\n marketplace1155Contract: string;\n collectionContract: string;\n retryOptions?: RetryOptions;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URL,\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n marketplace1155Contract: parsed.marketplace1155Contract ?? MARKETPLACE_1155_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\n retryOptions: parsed.retryOptions,\n };\n}\n","import { type TypedData, TypedDataRevision, constants } from \"starknet\";\n\n/**\n * Build SNIP-12 typed data for signing an OrderParameters struct.\n * Uses TypedDataRevision.ACTIVE and ContractAddress / shortstring SNIP-12 types.\n */\nexport function buildOrderTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderParameters\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderParameters: [\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"offer\", type: \"OfferItem\" },\n { name: \"consideration\", type: \"ConsiderationItem\" },\n { name: \"start_time\", type: \"felt\" },\n { name: \"end_time\", type: \"felt\" },\n { name: \"salt\", type: \"felt\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n OfferItem: [\n { name: \"item_type\", type: \"shortstring\" },\n { name: \"token\", type: \"ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"felt\" },\n { name: \"start_amount\", type: \"felt\" },\n { name: \"end_amount\", type: \"felt\" },\n ],\n ConsiderationItem: [\n { name: \"item_type\", type: \"shortstring\" },\n { name: \"token\", type: \"ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"felt\" },\n { name: \"start_amount\", type: \"felt\" },\n { name: \"end_amount\", type: \"felt\" },\n { name: \"recipient\", type: \"ContractAddress\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an OrderFulfillment struct.\n */\nexport function buildFulfillmentTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderFulfillment\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderFulfillment: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"fulfiller\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an OrderCancellation struct.\n */\nexport function buildCancellationTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderCancellation\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderCancellation: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n","// Auto-generated from on-chain ABI at contract:\n// 0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\n// Fetched on 2026-02-16\n\nexport const IPMarketplaceABI = [\n {\n type: \"impl\",\n name: \"UpgradeableImpl\",\n interface_name: \"openzeppelin_upgrades::interface::IUpgradeable\",\n },\n {\n type: \"interface\",\n name: \"openzeppelin_upgrades::interface::IUpgradeable\",\n items: [\n {\n type: \"function\",\n name: \"upgrade\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"MedialaneImpl\",\n interface_name: \"mediolano_core::core::interface::IMedialane\",\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OfferItem\",\n members: [\n { name: \"item_type\", type: \"core::felt252\" },\n { name: \"token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"core::felt252\" },\n { name: \"start_amount\", type: \"core::felt252\" },\n { name: \"end_amount\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::ConsiderationItem\",\n members: [\n { name: \"item_type\", type: \"core::felt252\" },\n { name: \"token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"core::felt252\" },\n { name: \"start_amount\", type: \"core::felt252\" },\n { name: \"end_amount\", type: \"core::felt252\" },\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderParameters\",\n members: [\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"offer\", type: \"mediolano_core::core::types::OfferItem\" },\n { name: \"consideration\", type: \"mediolano_core::core::types::ConsiderationItem\" },\n { name: \"start_time\", type: \"core::felt252\" },\n { name: \"end_time\", type: \"core::felt252\" },\n { name: \"salt\", type: \"core::felt252\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::Order\",\n members: [\n { name: \"parameters\", type: \"mediolano_core::core::types::OrderParameters\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderFulfillment\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\" },\n { name: \"fulfiller\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::FulfillmentRequest\",\n members: [\n { name: \"fulfillment\", type: \"mediolano_core::core::types::OrderFulfillment\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderCancellation\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\" },\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::CancelRequest\",\n members: [\n { name: \"cancelation\", type: \"mediolano_core::core::types::OrderCancellation\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"enum\",\n name: \"mediolano_core::core::types::OrderStatus\",\n variants: [\n { name: \"None\", type: \"()\" },\n { name: \"Created\", type: \"()\" },\n { name: \"Filled\", type: \"()\" },\n { name: \"Cancelled\", type: \"()\" },\n ],\n },\n {\n type: \"enum\",\n name: \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n variants: [\n { name: \"Some\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"None\", type: \"()\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderDetails\",\n members: [\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"offer\", type: \"mediolano_core::core::types::OfferItem\" },\n { name: \"consideration\", type: \"mediolano_core::core::types::ConsiderationItem\" },\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"order_status\", type: \"mediolano_core::core::types::OrderStatus\" },\n {\n name: \"fulfiller\",\n type: \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n },\n ],\n },\n {\n type: \"interface\",\n name: \"mediolano_core::core::interface::IMedialane\",\n items: [\n {\n type: \"function\",\n name: \"register_order\",\n inputs: [{ name: \"order\", type: \"mediolano_core::core::types::Order\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"fulfill_order\",\n inputs: [\n {\n name: \"fulfillment_request\",\n type: \"mediolano_core::core::types::FulfillmentRequest\",\n },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"cancel_order\",\n inputs: [{ name: \"cancel_request\", type: \"mediolano_core::core::types::CancelRequest\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_order_details\",\n inputs: [{ name: \"order_hash\", type: \"core::felt252\" }],\n outputs: [{ type: \"mediolano_core::core::types::OrderDetails\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_order_hash\",\n inputs: [\n { name: \"parameters\", type: \"mediolano_core::core::types::OrderParameters\" },\n { name: \"signer\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::felt252\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"NoncesImpl\",\n interface_name: \"openzeppelin_utils::cryptography::interface::INonces\",\n },\n {\n type: \"interface\",\n name: \"openzeppelin_utils::cryptography::interface::INonces\",\n items: [\n {\n type: \"function\",\n name: \"nonces\",\n inputs: [\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::felt252\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"SRC5Impl\",\n interface_name: \"openzeppelin_introspection::interface::ISRC5\",\n },\n {\n type: \"enum\",\n name: \"core::bool\",\n variants: [\n { name: \"False\", type: \"()\" },\n { name: \"True\", type: \"()\" },\n ],\n },\n {\n type: \"interface\",\n name: \"openzeppelin_introspection::interface::ISRC5\",\n items: [\n {\n type: \"function\",\n name: \"supports_interface\",\n inputs: [{ name: \"interface_id\", type: \"core::felt252\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"constructor\",\n name: \"constructor\",\n inputs: [\n { name: \"manager\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"native_token_address\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderCreated\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderFulfilled\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n {\n name: \"fulfiller\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderCancelled\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::medialane::Medialane::Event\",\n kind: \"enum\",\n variants: [\n {\n name: \"OrderCreated\",\n type: \"mediolano_core::core::events::OrderCreated\",\n kind: \"nested\",\n },\n {\n name: \"OrderFulfilled\",\n type: \"mediolano_core::core::events::OrderFulfilled\",\n kind: \"nested\",\n },\n {\n name: \"OrderCancelled\",\n type: \"mediolano_core::core::events::OrderCancelled\",\n kind: \"nested\",\n },\n ],\n },\n] as const;\n\nexport const POPCollectionABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"admin_mint\",\n inputs: [\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"custom_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"add_to_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_add_to_allowlist\",\n inputs: [{ name: \"addresses\", type: \"core::array::Array::<core::starknet::contract_address::ContractAddress>\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"remove_from_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_uri\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_paused\",\n inputs: [{ name: \"paused\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_eligible\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"has_claimed\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"total_minted\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n] as const;\n\nexport const POPFactoryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"enum\",\n name: \"pop_protocol::types::EventType\",\n variants: [\n { name: \"Conference\", type: \"()\" },\n { name: \"Bootcamp\", type: \"()\" },\n { name: \"Workshop\", type: \"()\" },\n { name: \"Hackathon\", type: \"()\" },\n { name: \"Meetup\", type: \"()\" },\n { name: \"Course\", type: \"()\" },\n { name: \"Other\", type: \"()\" },\n ],\n },\n {\n type: \"function\",\n name: \"create_collection\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"claim_end_time\", type: \"core::integer::u64\" },\n { name: \"event_type\", type: \"pop_protocol::types::EventType\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"register_provider\",\n inputs: [\n { name: \"provider\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"website_url\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_pop_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;\n\nexport const DropCollectionABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"collection_drop::types::ClaimConditions\",\n members: [\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"price\", type: \"core::integer::u256\" },\n { name: \"payment_token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"max_quantity_per_wallet\", type: \"core::integer::u256\" },\n ],\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [{ name: \"quantity\", type: \"core::integer::u256\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"admin_mint\",\n inputs: [\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"quantity\", type: \"core::integer::u256\" },\n { name: \"custom_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_claim_conditions\",\n inputs: [{ name: \"conditions\", type: \"collection_drop::types::ClaimConditions\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_claim_conditions\",\n inputs: [],\n outputs: [{ type: \"collection_drop::types::ClaimConditions\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_allowlist_enabled\",\n inputs: [{ name: \"enabled\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_allowlist_enabled\",\n inputs: [],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"add_to_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_add_to_allowlist\",\n inputs: [{ name: \"addresses\", type: \"core::array::Array::<core::starknet::contract_address::ContractAddress>\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"remove_from_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_allowlisted\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_base_uri\",\n inputs: [{ name: \"new_uri\", type: \"core::byte_array::ByteArray\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_uri\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_paused\",\n inputs: [{ name: \"paused\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"withdraw_payments\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_drop_id\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_max_supply\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"total_minted\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"remaining_supply\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"minted_by_wallet\",\n inputs: [{ name: \"wallet\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"is_paused\",\n inputs: [],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n] as const;\n\nexport const DropFactoryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"collection_drop::types::ClaimConditions\",\n members: [\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"price\", type: \"core::integer::u256\" },\n { name: \"payment_token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"max_quantity_per_wallet\", type: \"core::integer::u256\" },\n ],\n },\n {\n type: \"function\",\n name: \"register_organizer\",\n inputs: [\n { name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"revoke_organizer\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_active_organizer\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"create_drop\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"max_supply\", type: \"core::integer::u256\" },\n { name: \"initial_conditions\", type: \"collection_drop::types::ClaimConditions\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_drop_address\",\n inputs: [{ name: \"drop_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_last_drop_id\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_organizer_drop_count\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::integer::u32\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_drop_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;\n\n// Collection Registry ABI โ€” minimal subset for list_user_collections + get_collection\n// Contract: 0x05c49ee5d3208a2c2e150fdd0c247d1195ed9ab54fa2d5dea7a633f39e4b205b\n// Fetched on 2026-04-10\nexport const CollectionRegistryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"ip_collection_erc_721::types::Collection\",\n members: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"ip_nft\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"is_active\", type: \"core::bool\" },\n ],\n },\n {\n type: \"function\",\n name: \"list_user_collections\",\n inputs: [{ name: \"user\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::array::Span::<core::integer::u256>\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_collection\",\n inputs: [{ name: \"collection_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"ip_collection_erc_721::types::Collection\" }],\n state_mutability: \"view\",\n },\n] as const;\n\n// โ”€โ”€โ”€ Medialane1155 ABI โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Auto-generated from on-chain ABI at contract:\n// 0x042005e9b85536072bfa260b95aa6aaef07f48e622031657384d2375195d7123\n// Deployed 2026-04-15\n\nexport const Medialane1155ABI = [\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_upgrades::interface::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_upgrades::interface::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"Medialane1155Impl\",\n \"interface_name\": \"medialane_erc1155::core::interface::IMedialane1155\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderParameters\",\n \"members\": [\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"start_time\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::Order\",\n \"members\": [\n {\n \"name\": \"parameters\",\n \"type\": \"medialane_erc1155::core::types::OrderParameters\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderFulfillment\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::FulfillmentRequest\",\n \"members\": [\n {\n \"name\": \"fulfillment\",\n \"type\": \"medialane_erc1155::core::types::OrderFulfillment\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderCancellation\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::CancelRequest\",\n \"members\": [\n {\n \"name\": \"cancelation\",\n \"type\": \"medialane_erc1155::core::types::OrderCancellation\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"medialane_erc1155::core::types::OrderStatus\",\n \"variants\": [\n {\n \"name\": \"None\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Created\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Filled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Cancelled\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderDetails\",\n \"members\": [\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"start_time\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"order_status\",\n \"type\": \"medialane_erc1155::core::types::OrderStatus\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"medialane_erc1155::core::interface::IMedialane1155\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"register_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"medialane_erc1155::core::types::Order\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fulfill_order\",\n \"inputs\": [\n {\n \"name\": \"fulfillment_request\",\n \"type\": \"medialane_erc1155::core::types::FulfillmentRequest\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_order\",\n \"inputs\": [\n {\n \"name\": \"cancel_request\",\n \"type\": \"medialane_erc1155::core::types::CancelRequest\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_order_details\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"medialane_erc1155::core::types::OrderDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_order_hash\",\n \"inputs\": [\n {\n \"name\": \"parameters\",\n \"type\": \"medialane_erc1155::core::types::OrderParameters\"\n },\n {\n \"name\": \"signer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_native_token\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"NoncesImpl\",\n \"interface_name\": \"openzeppelin_utils::cryptography::interface::INonces\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_utils::cryptography::interface::INonces\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_introspection::interface::ISRC5\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_introspection::interface::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"AccessControlImpl\",\n \"interface_name\": \"openzeppelin_access::accesscontrol::interface::IAccessControl\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_access::accesscontrol::interface::IAccessControl\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_role_admin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grant_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revoke_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"manager\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"native_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderFulfilled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"royalty_receiver\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"royalty_amount\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGranted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGrantedWithDelay\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"delay\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleRevoked\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleAdminChanged\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"previous_admin_role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"new_admin_role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"RoleGranted\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGranted\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleGrantedWithDelay\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGrantedWithDelay\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleRevoked\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleRevoked\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleAdminChanged\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleAdminChanged\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::medialane::Medialane1155::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OrderCreated\",\n \"type\": \"medialane_erc1155::core::events::OrderCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderFulfilled\",\n \"type\": \"medialane_erc1155::core::events::OrderFulfilled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderCancelled\",\n \"type\": \"medialane_erc1155::core::events::OrderCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"NoncesEvent\",\n \"type\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"AccessControlEvent\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n] as const;\n\n// โ”€โ”€โ”€ ERC-1155 IP Collection Factory (v2) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Deployed on Starknet mainnet at:\n// 0x006b2dc7ca7c4f466bb4575ba043d934310f052074f849caf853a86bcb819fd6\n// v2 adds base_uri as third argument to deploy_collection.\n\nexport const IPCollection1155FactoryABI = [\n {\n type: \"function\",\n name: \"collection_class_hash\",\n inputs: [],\n outputs: [{ type: \"core::starknet::class_hash::ClassHash\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deploy_collection\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"update_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n] as const;\n\n// โ”€โ”€โ”€ ERC-1155 IP Collection (per-collection, v2) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Class hash: 0x39a85126c6627db263617e5bce2bb72e49d2bb1f20961efc8b8954665bcfd25\n// v2 adds name(), symbol(), base_uri() view functions and requires value > 0 on mint.\n\nexport const IPCollection1155ABI = [\n // โ”€โ”€ Metadata views โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"base_uri\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ Minting โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"mint_item\",\n inputs: [\n { name: \"to\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"value\", type: \"core::integer::u256\" },\n { name: \"token_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_mint_item\",\n inputs: [\n { name: \"to\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_ids\", type: \"core::array::Span::<core::integer::u256>\" },\n { name: \"values\", type: \"core::array::Span::<core::integer::u256>\" },\n { name: \"token_uris\", type: \"core::array::Array::<core::byte_array::ByteArray>\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n // โ”€โ”€ Provenance queries โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"get_collection_creator\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_token_creator\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_token_registered_at\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::integer::u64\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ Ownership โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ ERC-1155 standard โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"balance_of\",\n inputs: [\n { name: \"account\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_id\", type: \"core::integer::u256\" },\n ],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_approval_for_all\",\n inputs: [\n { name: \"operator\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"approved\", type: \"core::bool\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_approved_for_all\",\n inputs: [\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"operator\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ ERC-2981 royalties โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"royalty_info\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"sale_price\", type: \"core::integer::u256\" },\n ],\n outputs: [\n { type: \"core::starknet::contract_address::ContractAddress\" },\n { type: \"core::integer::u256\" },\n ],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_default_royalty\",\n inputs: [\n { name: \"receiver\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"fee_numerator\", type: \"core::integer::u128\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_royalty\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"receiver\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"fee_numerator\", type: \"core::integer::u128\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"delete_default_royalty\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"reset_token_royalty\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;","/**\n * Recursively convert all BigInt values to their decimal string representations.\n * Required before JSON serialisation and before passing objects to starknet.js\n * functions that expect string felts.\n */\nexport function stringifyBigInts(obj: unknown): unknown {\n if (typeof obj === \"bigint\") {\n return obj.toString();\n }\n if (Array.isArray(obj)) {\n return obj.map(stringifyBigInts);\n }\n if (obj !== null && typeof obj === \"object\") {\n return Object.fromEntries(\n Object.entries(obj as Record<string, unknown>).map(([key, value]) => [\n key,\n stringifyBigInts(value),\n ])\n );\n }\n return obj;\n}\n\n/**\n * Convert a u256 represented as { low: string; high: string } to a single BigInt.\n */\nexport function u256ToBigInt(low: string, high: string): bigint {\n return BigInt(low) + (BigInt(high) << 128n);\n}\n","import { SUPPORTED_TOKENS } from \"../constants.js\";\n\nexport type SupportedToken = (typeof SUPPORTED_TOKENS)[number];\n\n/**\n * Parse a human-readable amount (e.g. \"1.5\") to its raw integer string\n * representation given the token's decimal places.\n * Uses pure BigInt arithmetic to avoid floating point precision loss.\n */\nexport function parseAmount(human: string, decimals: number): string {\n const [whole, frac = \"\"] = human.split(\".\");\n const fracPadded = frac.padEnd(decimals, \"0\").slice(0, decimals);\n return (BigInt(whole) * BigInt(10) ** BigInt(decimals) + BigInt(fracPadded)).toString();\n}\n\n/**\n * Format a raw integer string (e.g. \"1500000\") to a human-readable decimal\n * string given the token's decimal places.\n */\nexport function formatAmount(raw: string, decimals: number): string {\n const value = BigInt(raw);\n const factor = BigInt(Math.pow(10, decimals));\n const whole = value / factor;\n const remainder = value % factor;\n const fractional = remainder.toString().padStart(decimals, \"0\");\n return `${whole}.${fractional}`;\n}\n\n/**\n * Find a supported token by its contract address (case-insensitive).\n */\nexport function getTokenByAddress(address: string): SupportedToken | undefined {\n const lower = address.toLowerCase();\n return SUPPORTED_TOKENS.find((t) => t.address.toLowerCase() === lower);\n}\n\n/**\n * Find a supported token by its symbol (case-insensitive).\n */\nexport function getTokenBySymbol(symbol: string): SupportedToken | undefined {\n const upper = symbol.toUpperCase();\n return SUPPORTED_TOKENS.find((t) => t.symbol === upper);\n}\n\n/**\n * Return all tokens available for use in listing and offer dialogs.\n * Tokens with listable: false appear only as marketplace filter chips.\n */\nexport function getListableTokens(): ReadonlyArray<SupportedToken> {\n return SUPPORTED_TOKENS.filter((t) => t.listable);\n}\n","import {\n type AccountInterface,\n type Abi,\n Contract,\n RpcProvider,\n cairo,\n byteArray,\n num,\n shortString,\n constants,\n type TypedData,\n} from \"starknet\";\nimport { IPMarketplaceABI } from \"../abis.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { SUPPORTED_TOKENS, DEFAULT_CURRENCY } from \"../constants.js\";\nimport type { MedialaneErrorCode } from \"../types/errors.js\";\nimport type {\n CreateListingParams,\n MakeOfferParams,\n FulfillOrderParams,\n CancelOrderParams,\n CartItem,\n MintParams,\n CreateCollectionParams,\n TxResult,\n} from \"../types/marketplace.js\";\nimport { stringifyBigInts } from \"../utils/bigint.js\";\nimport { parseAmount } from \"../utils/token.js\";\nimport {\n buildOrderTypedData,\n buildFulfillmentTypedData,\n buildCancellationTypedData,\n} from \"./signing.js\";\n\nexport class MedialaneError extends Error {\n constructor(\n message: string,\n public readonly code: MedialaneErrorCode = \"UNKNOWN\",\n public readonly cause?: unknown\n ) {\n super(message);\n this.name = \"MedialaneError\";\n }\n}\n\nfunction toSignatureArray(sig: unknown): string[] {\n if (Array.isArray(sig)) return sig as string[];\n const s = sig as { r: bigint | string; s: bigint | string };\n return [s.r.toString(), s.s.toString()];\n}\n\nfunction getChainId(_config: ResolvedConfig): constants.StarknetChainId {\n return constants.StarknetChainId.SN_MAIN;\n}\n\nconst _contractCache = new WeakMap<ResolvedConfig, { contract: Contract; provider: RpcProvider }>();\nconst _providerCache = new WeakMap<ResolvedConfig, RpcProvider>();\n\nfunction getProvider(config: ResolvedConfig): RpcProvider {\n let provider = _providerCache.get(config);\n if (!provider) {\n provider = new RpcProvider({ nodeUrl: config.rpcUrl });\n _providerCache.set(config, provider);\n }\n return provider;\n}\n\nfunction makeContract(config: ResolvedConfig): { contract: Contract; provider: RpcProvider } {\n const cached = _contractCache.get(config);\n if (cached) return cached;\n\n const provider = getProvider(config);\n const contract = new Contract(\n IPMarketplaceABI as unknown as Abi,\n config.marketplaceContract,\n provider\n );\n const result = { contract, provider };\n _contractCache.set(config, result);\n return result;\n}\n\nfunction resolveToken(currency: string) {\n const token = SUPPORTED_TOKENS.find(\n (t) => t.symbol === currency.toUpperCase() || t.address.toLowerCase() === currency.toLowerCase()\n );\n if (!token) throw new MedialaneError(`Unsupported currency: ${currency}`, \"INVALID_PARAMS\");\n return token;\n}\n\n\n/**\n * Create a listing โ€” offerer offers ERC721, asks for ERC20.\n */\nexport async function createListing(\n account: AccountInterface,\n params: CreateListingParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { nftContract, tokenId, price, currency = DEFAULT_CURRENCY, durationSeconds } = params;\n const { contract, provider } = makeContract(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(price, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const startTime = now + 300;\n const endTime = now + durationSeconds;\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n\n const orderParams = {\n offerer: account.address,\n offer: {\n item_type: \"ERC721\",\n token: nftContract,\n identifier_or_criteria: tokenId,\n start_amount: \"1\",\n end_amount: \"1\",\n },\n consideration: {\n item_type: \"ERC20\",\n token: token.address,\n identifier_or_criteria: \"0\",\n start_amount: priceWei,\n end_amount: priceWei,\n recipient: account.address,\n },\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const chainId = getChainId(config);\n const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId)) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const registerPayload = stringifyBigInts({\n parameters: {\n ...orderParams,\n offer: {\n ...orderParams.offer,\n item_type: shortString.encodeShortString(orderParams.offer.item_type),\n },\n consideration: {\n ...orderParams.consideration,\n item_type: shortString.encodeShortString(orderParams.consideration.item_type),\n },\n },\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const tokenIdUint256 = cairo.uint256(tokenId);\n\n // Check approval status before adding approve call\n let isAlreadyApproved = false;\n try {\n const result = await provider.callContract({\n contractAddress: nftContract,\n entrypoint: \"get_approved\",\n calldata: [tokenIdUint256.low.toString(), tokenIdUint256.high.toString()],\n });\n isAlreadyApproved =\n BigInt(result[0]).toString() === BigInt(config.marketplaceContract).toString();\n } catch {\n // Cannot check โ€” include approve to be safe\n }\n\n const registerCall = contract.populate(\"register_order\", [registerPayload]);\n const calls = isAlreadyApproved\n ? [registerCall]\n : [\n {\n contractAddress: nftContract,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n tokenIdUint256.low.toString(),\n tokenIdUint256.high.toString(),\n ],\n },\n registerCall,\n ];\n\n try {\n const tx = await account.execute(calls);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create listing\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Make an offer โ€” offerer offers ERC20, asks for ERC721.\n */\nexport async function makeOffer(\n account: AccountInterface,\n params: MakeOfferParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { nftContract, tokenId, price, currency = DEFAULT_CURRENCY, durationSeconds } = params;\n const { contract, provider } = makeContract(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(price, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const startTime = now + 300;\n const endTime = now + durationSeconds;\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n\n const orderParams = {\n offerer: account.address,\n offer: {\n item_type: \"ERC20\",\n token: token.address,\n identifier_or_criteria: \"0\",\n start_amount: priceWei,\n end_amount: priceWei,\n },\n consideration: {\n item_type: \"ERC721\",\n token: nftContract,\n identifier_or_criteria: tokenId,\n start_amount: \"1\",\n end_amount: \"1\",\n recipient: account.address,\n },\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const chainId = getChainId(config);\n const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId)) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const registerPayload = stringifyBigInts({\n parameters: {\n ...orderParams,\n offer: {\n ...orderParams.offer,\n item_type: shortString.encodeShortString(orderParams.offer.item_type),\n },\n consideration: {\n ...orderParams.consideration,\n item_type: shortString.encodeShortString(orderParams.consideration.item_type),\n },\n },\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const amountUint256 = cairo.uint256(priceWei);\n const approveCall = {\n contractAddress: token.address,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n amountUint256.low.toString(),\n amountUint256.high.toString(),\n ],\n };\n\n const registerCall = contract.populate(\"register_order\", [registerPayload]);\n\n try {\n const tx = await account.execute([approveCall, registerCall]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to make offer\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Fulfill (buy) a single order.\n */\nexport async function fulfillOrder(\n account: AccountInterface,\n params: FulfillOrderParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n const { contract, provider } = makeContract(config);\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const fulfillmentParams = {\n order_hash: orderHash,\n fulfiller: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n buildFulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const call = contract.populate(\"fulfill_order\", [fulfillPayload]);\n\n try {\n const tx = await account.execute(call);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to fulfill order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Cancel an order.\n */\nexport async function cancelOrder(\n account: AccountInterface,\n params: CancelOrderParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n const { contract, provider } = makeContract(config);\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const cancelParams = {\n order_hash: orderHash,\n offerer: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n buildCancellationTypedData(cancelParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const cancelRequest = stringifyBigInts({\n cancelation: cancelParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const call = contract.populate(\"cancel_order\", [cancelRequest]);\n\n try {\n const tx = await account.execute(call);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to cancel order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/** Serialize a string as Cairo ByteArray calldata felts. */\nfunction encodeByteArray(str: string): string[] {\n const ba = byteArray.byteArrayFromString(str);\n return [\n ba.data.length.toString(),\n ...ba.data.map((d) => num.toHex(d)),\n num.toHex(ba.pending_word),\n ba.pending_word_len.toString(),\n ];\n}\n\n/**\n * Mint an NFT into a Medialane collection.\n * Calls `mint(collection_id, recipient, token_uri)` โ€” no SNIP-12 signing required.\n */\nexport async function mint(\n account: AccountInterface,\n params: MintParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { collectionId, recipient, tokenUri, collectionContract } = params;\n const provider = getProvider(config);\n const contractAddress = collectionContract ?? config.collectionContract;\n\n const id = cairo.uint256(collectionId);\n const calldata = [id.low.toString(), id.high.toString(), recipient, ...encodeByteArray(tokenUri)];\n\n try {\n const tx = await account.execute([{ contractAddress, entrypoint: \"mint\", calldata }]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to mint NFT\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Create a new collection on the Medialane collection registry.\n * Calls `create_collection(name, symbol, base_uri)` โ€” no SNIP-12 signing required.\n * Returns the transaction hash; listen for the CollectionCreated event to get the collection_id.\n */\nexport async function createCollection(\n account: AccountInterface,\n params: CreateCollectionParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { name, symbol, baseUri, collectionContract } = params;\n const provider = getProvider(config);\n const contractAddress = collectionContract ?? config.collectionContract;\n\n const calldata = [\n ...encodeByteArray(name),\n ...encodeByteArray(symbol),\n ...encodeByteArray(baseUri),\n ];\n\n try {\n const tx = await account.execute([{ contractAddress, entrypoint: \"create_collection\", calldata }]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create collection\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Checkout a cart of multiple orders in a single atomic multicall.\n * Prompts wallet signatures sequentially (one per item), then executes\n * all approve + fulfill calls atomically.\n */\nexport async function checkoutCart(\n account: AccountInterface,\n items: CartItem[],\n config: ResolvedConfig\n): Promise<TxResult> {\n if (items.length === 0) throw new MedialaneError(\"Cart is empty\", \"INVALID_PARAMS\");\n\n const { contract, provider } = makeContract(config);\n\n // Group total ERC20 approval amounts by token\n const tokenTotals = new Map<string, bigint>();\n for (const item of items) {\n const prev = tokenTotals.get(item.considerationToken) ?? 0n;\n tokenTotals.set(item.considerationToken, prev + BigInt(item.considerationAmount));\n }\n\n const approveCalls = Array.from(tokenTotals.entries()).map(([tokenAddr, totalWei]) => {\n const amount = cairo.uint256(totalWei.toString());\n return {\n contractAddress: tokenAddr,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n amount.low.toString(),\n amount.high.toString(),\n ],\n };\n });\n\n const currentNonce = await contract.nonces(account.address);\n const baseNonce = BigInt(currentNonce.toString());\n const chainId = getChainId(config);\n\n const fulfillCalls = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const nonce = (baseNonce + BigInt(i)).toString();\n\n const fulfillmentParams = {\n order_hash: item.orderHash,\n fulfiller: account.address,\n nonce,\n };\n\n const typedData = stringifyBigInts(\n buildFulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n fulfillCalls.push(contract.populate(\"fulfill_order\", [fulfillPayload]));\n }\n\n try {\n const tx = await account.execute([...approveCalls, ...fulfillCalls]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Cart checkout failed\", \"TRANSACTION_FAILED\", err);\n }\n}\n","import { type AccountInterface, type TypedData, constants } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport type {\n CreateListingParams,\n MakeOfferParams,\n FulfillOrderParams,\n CancelOrderParams,\n CartItem,\n MintParams,\n CreateCollectionParams,\n TxResult,\n} from \"../types/marketplace.js\";\nimport {\n buildOrderTypedData,\n buildFulfillmentTypedData,\n buildCancellationTypedData,\n} from \"./signing.js\";\nimport {\n createListing,\n makeOffer,\n fulfillOrder,\n cancelOrder,\n checkoutCart,\n mint,\n createCollection,\n} from \"./orders.js\";\n\nexport { MedialaneError } from \"./orders.js\";\n\nexport class MarketplaceModule {\n constructor(private readonly config: ResolvedConfig) {}\n\n // โ”€โ”€โ”€ Writes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n createListing(account: AccountInterface, params: CreateListingParams): Promise<TxResult> {\n return createListing(account, params, this.config);\n }\n\n makeOffer(account: AccountInterface, params: MakeOfferParams): Promise<TxResult> {\n return makeOffer(account, params, this.config);\n }\n\n fulfillOrder(account: AccountInterface, params: FulfillOrderParams): Promise<TxResult> {\n return fulfillOrder(account, params, this.config);\n }\n\n cancelOrder(account: AccountInterface, params: CancelOrderParams): Promise<TxResult> {\n return cancelOrder(account, params, this.config);\n }\n\n checkoutCart(account: AccountInterface, items: CartItem[]): Promise<TxResult> {\n return checkoutCart(account, items, this.config);\n }\n\n mint(account: AccountInterface, params: MintParams): Promise<TxResult> {\n return mint(account, params, this.config);\n }\n\n createCollection(account: AccountInterface, params: CreateCollectionParams): Promise<TxResult> {\n return createCollection(account, params, this.config);\n }\n\n // โ”€โ”€โ”€ Typed data builders (for ChipiPay / custom signing flows) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n buildListingTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildOrderTypedData(params, chainId);\n }\n\n buildFulfillmentTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildFulfillmentTypedData(params, chainId);\n }\n\n buildCancellationTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildCancellationTypedData(params, chainId);\n }\n}\n","import { type TypedData, TypedDataRevision, constants } from \"starknet\";\n\nconst STARKNET_DOMAIN = [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n];\n\nfunction domain1155(chainId: constants.StarknetChainId) {\n return {\n name: \"Medialane1155\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderParameters struct.\n *\n * Differs from the ERC-721 Medialane signing:\n * - Domain name is \"Medialane1155\"\n * - OrderParameters is flat (no nested OfferItem / ConsiderationItem structs)\n */\nexport function build1155OrderTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderParameters\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderParameters: [\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nft_contract\", type: \"ContractAddress\" },\n { name: \"token_id\", type: \"felt\" },\n { name: \"amount\", type: \"felt\" },\n { name: \"payment_token\", type: \"ContractAddress\" },\n { name: \"price_per_unit\", type: \"felt\" },\n { name: \"start_time\", type: \"felt\" },\n { name: \"end_time\", type: \"felt\" },\n { name: \"salt\", type: \"felt\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderFulfillment struct.\n */\nexport function build1155FulfillmentTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderFulfillment\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderFulfillment: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"fulfiller\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderCancellation struct.\n */\nexport function build1155CancellationTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderCancellation\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderCancellation: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n","import {\n type AccountInterface,\n type Abi,\n type TypedData,\n Contract,\n RpcProvider,\n cairo,\n num,\n constants,\n} from \"starknet\";\nimport { Medialane1155ABI } from \"../abis.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { SUPPORTED_TOKENS, DEFAULT_CURRENCY } from \"../constants.js\";\nimport { MedialaneError } from \"../marketplace/orders.js\";\nimport type {\n CreateListing1155Params,\n FulfillOrder1155Params,\n CancelOrder1155Params,\n TxResult,\n} from \"../types/marketplace.js\";\nimport { stringifyBigInts } from \"../utils/bigint.js\";\nimport { parseAmount } from \"../utils/token.js\";\nimport {\n build1155OrderTypedData,\n build1155FulfillmentTypedData,\n build1155CancellationTypedData,\n} from \"./signing.js\";\n\nfunction toSignatureArray(sig: unknown): string[] {\n if (Array.isArray(sig)) return sig as string[];\n const s = sig as { r: bigint | string; s: bigint | string };\n return [s.r.toString(), s.s.toString()];\n}\n\nfunction getChainId(_config: ResolvedConfig): constants.StarknetChainId {\n return constants.StarknetChainId.SN_MAIN;\n}\n\nconst _providerCache = new WeakMap<ResolvedConfig, RpcProvider>();\nconst _contractCache = new WeakMap<ResolvedConfig, Contract>();\n\nfunction getProvider(config: ResolvedConfig): RpcProvider {\n let p = _providerCache.get(config);\n if (!p) {\n p = new RpcProvider({ nodeUrl: config.rpcUrl });\n _providerCache.set(config, p);\n }\n return p;\n}\n\nfunction getContract(config: ResolvedConfig): Contract {\n let c = _contractCache.get(config);\n if (!c) {\n const provider = getProvider(config);\n c = new Contract(\n Medialane1155ABI as unknown as Abi,\n config.marketplace1155Contract,\n provider\n );\n _contractCache.set(config, c);\n }\n return c;\n}\n\nfunction resolveToken(currency: string) {\n const token = SUPPORTED_TOKENS.find(\n (t) => t.symbol === currency.toUpperCase() || t.address.toLowerCase() === currency.toLowerCase()\n );\n if (!token) throw new MedialaneError(`Unsupported currency: ${currency}`, \"INVALID_PARAMS\");\n return token;\n}\n\n/**\n * Create an ERC-1155 listing on Medialane1155.\n *\n * The offerer signs `OrderParameters` off-chain via SNIP-12, then the signed\n * order is submitted to `register_order`. The ERC-1155 token approval\n * (`set_approval_for_all`) must be granted before the buyer calls `fulfill_order`.\n */\nexport async function createListing1155(\n account: AccountInterface,\n params: CreateListing1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const {\n nftContract,\n tokenId,\n amount,\n pricePerUnit,\n currency = DEFAULT_CURRENCY,\n durationSeconds,\n } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(pricePerUnit, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const endTime = now + durationSeconds;\n\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const orderParams = {\n offerer: account.address,\n nft_contract: nftContract,\n token_id: tokenId,\n amount,\n payment_token: token.address,\n price_per_unit: priceWei,\n start_time: now.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155OrderTypedData(orderParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const orderPayload = stringifyBigInts({\n parameters: orderParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n // Check if the marketplace is already approved to transfer the ERC-1155 tokens.\n let isApproved = false;\n try {\n const result = await provider.callContract({\n contractAddress: nftContract,\n entrypoint: \"is_approved_for_all\",\n calldata: [account.address, config.marketplace1155Contract],\n });\n // Returns a felt252: 1 = true, 0 = false\n isApproved = BigInt(result[0]) === 1n;\n } catch {\n // Cannot check โ€” include approval call to be safe\n }\n\n const registerCall = contract.populate(\"register_order\", [orderPayload]);\n const calls = isApproved\n ? [registerCall]\n : [\n {\n contractAddress: nftContract,\n entrypoint: \"set_approval_for_all\",\n calldata: [config.marketplace1155Contract, \"1\"],\n },\n registerCall,\n ];\n\n try {\n const tx = await account.execute(calls);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create ERC-1155 listing\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Fulfill (buy) an ERC-1155 order.\n *\n * The fulfiller signs `OrderFulfillment` off-chain, then the signed\n * fulfillment is submitted to `fulfill_order`. The fulfiller must have\n * approved the Medialane1155 contract to spend `pricePerUnit ร— amount`\n * of the payment token before calling this.\n */\nexport async function fulfillOrder1155(\n account: AccountInterface,\n params: FulfillOrder1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash, paymentToken, totalPrice } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n const chainId = getChainId(config);\n\n const currentNonce = await contract.nonces(account.address);\n\n const fulfillmentParams = {\n order_hash: orderHash,\n fulfiller: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155FulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const totalPriceU256 = cairo.uint256(totalPrice);\n const approveCall = {\n contractAddress: paymentToken,\n entrypoint: \"approve\",\n calldata: [\n config.marketplace1155Contract,\n totalPriceU256.low.toString(),\n totalPriceU256.high.toString(),\n ],\n };\n\n const fulfillCall = contract.populate(\"fulfill_order\", [fulfillPayload]);\n\n try {\n const tx = await account.execute([approveCall, fulfillCall]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to fulfill ERC-1155 order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Cancel an ERC-1155 order.\n *\n * Only the original offerer can cancel. The offerer signs `OrderCancellation`\n * off-chain, then the signed cancellation is submitted to `cancel_order`.\n */\nexport async function cancelOrder1155(\n account: AccountInterface,\n params: CancelOrder1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n const chainId = getChainId(config);\n\n const currentNonce = await contract.nonces(account.address);\n\n const cancelParams = {\n order_hash: orderHash,\n offerer: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155CancellationTypedData(cancelParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const cancelPayload = stringifyBigInts({\n cancelation: cancelParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const cancelCall = contract.populate(\"cancel_order\", [cancelPayload]);\n\n try {\n const tx = await account.execute(cancelCall);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to cancel ERC-1155 order\", \"TRANSACTION_FAILED\", err);\n }\n}\n","import { type AccountInterface, type TypedData, constants } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport type {\n CreateListing1155Params,\n FulfillOrder1155Params,\n CancelOrder1155Params,\n TxResult,\n} from \"../types/marketplace.js\";\nimport {\n build1155OrderTypedData,\n build1155FulfillmentTypedData,\n build1155CancellationTypedData,\n} from \"./signing.js\";\nimport {\n createListing1155,\n fulfillOrder1155,\n cancelOrder1155,\n} from \"./orders.js\";\n\nexport class Medialane1155Module {\n constructor(private readonly config: ResolvedConfig) {}\n\n // โ”€โ”€โ”€ Writes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Create an ERC-1155 sell listing.\n * Optionally grants `set_approval_for_all` if not already approved.\n */\n createListing(account: AccountInterface, params: CreateListing1155Params): Promise<TxResult> {\n return createListing1155(account, params, this.config);\n }\n\n /**\n * Fulfill (buy) an ERC-1155 listing.\n * Approves the payment token then calls `fulfill_order` atomically.\n */\n fulfillOrder(account: AccountInterface, params: FulfillOrder1155Params): Promise<TxResult> {\n return fulfillOrder1155(account, params, this.config);\n }\n\n /**\n * Cancel an ERC-1155 listing (offerer only).\n */\n cancelOrder(account: AccountInterface, params: CancelOrder1155Params): Promise<TxResult> {\n return cancelOrder1155(account, params, this.config);\n }\n\n // โ”€โ”€โ”€ Typed data builders (for ChipiPay / custom signing flows) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n buildListingTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155OrderTypedData(params, chainId);\n }\n\n buildFulfillmentTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155FulfillmentTypedData(params, chainId);\n }\n\n buildCancellationTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155CancellationTypedData(params, chainId);\n }\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed 64-character hex string.\n */\nexport function normalizeAddress(address: string): string {\n const hex = address.replace(/^0x/, \"\").toLowerCase();\n return \"0x\" + hex.padStart(64, \"0\");\n}\n\n/**\n * Shorten an address to \"0x1234...abcd\" format.\n */\nexport function shortenAddress(address: string, chars = 4): string {\n const norm = normalizeAddress(address);\n return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;\n}\n","import { MedialaneApiError } from \"../api/client.js\";\n\nexport interface RetryOptions {\n maxAttempts?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_BASE_DELAY_MS = 300;\nconst DEFAULT_MAX_DELAY_MS = 5000;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n opts?: RetryOptions\n): Promise<T> {\n const maxAttempts = opts?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const baseDelayMs = opts?.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;\n const maxDelayMs = opts?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n\n // Don't retry 4xx errors (client errors) โ€” they won't succeed on retry\n if (err instanceof MedialaneApiError && err.status < 500) {\n throw err;\n }\n\n // Retry on 5xx or network errors (TypeError from fetch)\n const isRetryable =\n (err instanceof MedialaneApiError && err.status >= 500) ||\n err instanceof TypeError;\n\n if (!isRetryable || attempt === maxAttempts - 1) {\n throw err;\n }\n\n // Exponential backoff with jitter\n const jitter = Math.random() * baseDelayMs;\n const delay = Math.min(baseDelayMs * Math.pow(2, attempt) + jitter, maxDelayMs);\n await sleep(delay);\n }\n }\n\n throw lastError;\n}\n","import { normalizeAddress } from \"../utils/address.js\";\nimport type { MedialaneErrorCode } from \"../types/errors.js\";\nimport { withRetry, type RetryOptions } from \"../utils/retry.js\";\nimport type {\n ApiOrder,\n ApiOrdersQuery,\n ApiCounterOffersQuery,\n ApiToken,\n ApiCollection,\n ApiCollectionProfile,\n ApiCreatorProfile,\n ApiCreatorListResult,\n ApiCollectionClaim,\n ApiUserWallet,\n ApiActivity,\n ApiActivitiesQuery,\n ApiComment,\n ApiRemixOffer,\n ApiRemixOffersQuery,\n ApiPublicRemix,\n ApiSearchResult,\n ApiIntent,\n ApiIntentCreated,\n ApiMetadataSignedUrl,\n ApiMetadataUpload,\n ApiPortalMe,\n ApiPortalKey,\n ApiPortalKeyCreated,\n ApiUsageDay,\n ApiWebhookEndpoint,\n ApiWebhookCreated,\n CreateWebhookParams,\n CreateListingIntentParams,\n MakeOfferIntentParams,\n FulfillOrderIntentParams,\n CancelOrderIntentParams,\n CreateMintIntentParams,\n CreateCollectionIntentParams,\n CreateCounterOfferIntentParams,\n CreateRemixOfferParams,\n AutoRemixOfferParams,\n ConfirmSelfRemixParams,\n ConfirmRemixOfferParams,\n ApiResponse,\n CollectionSort,\n CollectionSource,\n PopClaimStatus,\n PopBatchEligibilityItem,\n DropMintStatus,\n} from \"../types/api.js\";\n\nfunction deriveErrorCode(status: number): MedialaneErrorCode {\n if (status === 404) return \"TOKEN_NOT_FOUND\";\n if (status === 429) return \"RATE_LIMITED\";\n if (status === 410) return \"INTENT_EXPIRED\";\n if (status === 401 || status === 403) return \"UNAUTHORIZED\";\n if (status === 400) return \"INVALID_PARAMS\";\n return \"UNKNOWN\";\n}\n\nexport class MedialaneApiError extends Error {\n readonly code: MedialaneErrorCode;\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n this.code = deriveErrorCode(status);\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n private readonly retryOptions: RetryOptions | undefined;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string,\n retryOptions?: RetryOptions\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\n this.retryOptions = retryOptions;\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}${path}`;\n const headers: Record<string, string> = { ...this.baseHeaders };\n if (!(init?.body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n const res = await withRetry(async () => {\n const response = await fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!response.ok) {\n const text = await response.text().catch(() => response.statusText);\n let message = text;\n try {\n const body = JSON.parse(text) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use raw text\n }\n throw new MedialaneApiError(response.status, message);\n }\n return response;\n }, this.retryOptions);\n return res.json() as Promise<T>;\n }\n\n private get<T>(path: string): Promise<T> {\n return this.request<T>(path, { method: \"GET\" });\n }\n\n private post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body: JSON.stringify(body) });\n }\n\n private patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body: JSON.stringify(body) });\n }\n\n private del<T>(path: string): Promise<T> {\n return this.request<T>(path, { method: \"DELETE\" });\n }\n\n // โ”€โ”€โ”€ Orders โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getOrders(query: ApiOrdersQuery = {}): Promise<ApiResponse<ApiOrder[]>> {\n const params = new URLSearchParams();\n if (query.status) params.set(\"status\", query.status);\n if (query.collection) params.set(\"collection\", query.collection);\n if (query.currency) params.set(\"currency\", query.currency);\n if (query.sort) params.set(\"sort\", query.sort);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n if (query.offerer) params.set(\"offerer\", normalizeAddress(query.offerer));\n if (query.minPrice) params.set(\"minPrice\", query.minPrice);\n if (query.maxPrice) params.set(\"maxPrice\", query.maxPrice);\n const qs = params.toString();\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders${qs ? `?${qs}` : \"\"}`);\n }\n\n getOrder(orderHash: string): Promise<ApiResponse<ApiOrder>> {\n return this.get<ApiResponse<ApiOrder>>(`/v1/orders/${orderHash}`);\n }\n\n getActiveOrdersForToken(contract: string, tokenId: string): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);\n }\n\n getOrdersByUser(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(\n `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Tokens โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getToken(contract: string, tokenId: string, wait = false): Promise<ApiResponse<ApiToken>> {\n return this.get<ApiResponse<ApiToken>>(\n `/v1/tokens/${contract}/${tokenId}${wait ? \"?wait=true\" : \"\"}`\n );\n }\n\n getTokensByOwner(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n getTokenHistory(\n contract: string,\n tokenId: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/tokens/${contract}/${tokenId}/history?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Collections โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getCollections(\n page = 1,\n limit = 20,\n isKnown?: boolean,\n sort?: CollectionSort,\n source?: CollectionSource\n ): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n if (sort) params.set(\"sort\", sort);\n if (source) params.set(\"source\", source);\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${normalizeAddress(contract)}`);\n }\n\n getCollectionTokens(\n contract: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Activities โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getActivities(query: ApiActivitiesQuery = {}): Promise<ApiResponse<ApiActivity[]>> {\n const params = new URLSearchParams();\n if (query.type) params.set(\"type\", query.type);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiActivity[]>>(`/v1/activities${qs ? `?${qs}` : \"\"}`);\n }\n\n getActivitiesByAddress(\n address: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Comments โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getTokenComments(\n contract: string,\n tokenId: string,\n opts: { page?: number; limit?: number } = {}\n ): Promise<ApiResponse<ApiComment[]>> {\n const params = new URLSearchParams();\n if (opts.page !== undefined) params.set(\"page\", String(opts.page));\n if (opts.limit !== undefined) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiComment[]>>(\n `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/comments${qs ? `?${qs}` : \"\"}`\n );\n }\n\n // โ”€โ”€โ”€ Search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n search(q: string, limit = 10): Promise<ApiResponse<ApiSearchResult> & { query: string }> {\n const params = new URLSearchParams({ q, limit: String(limit) });\n return this.get<ApiResponse<ApiSearchResult> & { query: string }>(\n `/v1/search?${params.toString()}`\n );\n }\n\n // โ”€โ”€โ”€ Intents โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n createListingIntent(\n params: CreateListingIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/listing\", params);\n }\n\n createOfferIntent(\n params: MakeOfferIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/offer\", params);\n }\n\n createFulfillIntent(\n params: FulfillOrderIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/fulfill\", params);\n }\n\n createCancelIntent(\n params: CancelOrderIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/cancel\", params);\n }\n\n getIntent(id: string): Promise<ApiResponse<ApiIntent>> {\n return this.get<ApiResponse<ApiIntent>>(`/v1/intents/${id}`);\n }\n\n submitIntentSignature(id: string, signature: string[]): Promise<ApiResponse<ApiIntent>> {\n return this.patch<ApiResponse<ApiIntent>>(`/v1/intents/${id}/signature`, { signature });\n }\n\n confirmIntent(id: string, txHash: string): Promise<ApiResponse<ApiIntent>> {\n return this.patch<ApiResponse<ApiIntent>>(`/v1/intents/${id}/confirm`, { txHash });\n }\n\n createMintIntent(params: CreateMintIntentParams): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/mint\", params);\n }\n\n createCollectionIntent(params: CreateCollectionIntentParams): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/create-collection\", params);\n }\n\n /**\n * Create a counter-offer intent. The seller proposes a new price in response\n * to a buyer's active bid. clerkToken is optional โ€” the endpoint authenticates\n * via the tenant API key; pass a Clerk JWT only if your backend requires it.\n */\n createCounterOfferIntent(\n params: CreateCounterOfferIntentParams,\n clerkToken?: string\n ): Promise<ApiResponse<ApiIntentCreated>> {\n const extraHeaders: Record<string, string> = clerkToken ? { \"Authorization\": `Bearer ${clerkToken}` } : {};\n return this.request<ApiResponse<ApiIntentCreated>>(\"/v1/intents/counter-offer\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: extraHeaders,\n });\n }\n\n /**\n * Fetch counter-offers. Pass `originalOrderHash` (buyer view) or\n * `sellerAddress` (seller view) โ€” at least one is required.\n */\n getCounterOffers(query: ApiCounterOffersQuery): Promise<ApiResponse<ApiOrder[]>> {\n const params = new URLSearchParams();\n if (query.originalOrderHash) params.set(\"originalOrderHash\", query.originalOrderHash);\n if (query.sellerAddress) params.set(\"sellerAddress\", query.sellerAddress);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/counter-offers?${params}`);\n }\n\n // โ”€โ”€โ”€ Metadata โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getMetadataSignedUrl(): Promise<ApiResponse<ApiMetadataSignedUrl>> {\n return this.get<ApiResponse<ApiMetadataSignedUrl>>(\"/v1/metadata/signed-url\");\n }\n\n uploadMetadata(metadata: Record<string, unknown>): Promise<ApiResponse<ApiMetadataUpload>> {\n return this.post<ApiResponse<ApiMetadataUpload>>(\"/v1/metadata/upload\", metadata);\n }\n\n resolveMetadata(uri: string): Promise<ApiResponse<unknown>> {\n const params = new URLSearchParams({ uri });\n return this.get<ApiResponse<unknown>>(`/v1/metadata/resolve?${params.toString()}`);\n }\n\n uploadFile(file: File): Promise<ApiResponse<ApiMetadataUpload>> {\n const formData = new FormData();\n formData.append(\"file\", file);\n // Content-Type is intentionally omitted โ€” request() detects FormData and\n // lets the runtime set multipart/form-data with the correct boundary.\n return this.request<ApiResponse<ApiMetadataUpload>>(\"/v1/metadata/upload-file\", {\n method: \"POST\",\n body: formData,\n });\n }\n\n // โ”€โ”€โ”€ Portal (tenant self-service) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getMe(): Promise<ApiResponse<ApiPortalMe>> {\n return this.get<ApiResponse<ApiPortalMe>>(\"/v1/portal/me\");\n }\n\n getApiKeys(): Promise<ApiResponse<ApiPortalKey[]>> {\n return this.get<ApiResponse<ApiPortalKey[]>>(\"/v1/portal/keys\");\n }\n\n createApiKey(label?: string): Promise<ApiResponse<ApiPortalKeyCreated>> {\n return this.post<ApiResponse<ApiPortalKeyCreated>>(\"/v1/portal/keys\", label ? { label } : {});\n }\n\n deleteApiKey(id: string): Promise<ApiResponse<{ id: string; status: string }>> {\n return this.del<ApiResponse<{ id: string; status: string }>>(`/v1/portal/keys/${id}`);\n }\n\n getUsage(): Promise<ApiResponse<ApiUsageDay[]>> {\n return this.get<ApiResponse<ApiUsageDay[]>>(\"/v1/portal/usage\");\n }\n\n getWebhooks(): Promise<ApiResponse<ApiWebhookEndpoint[]>> {\n return this.get<ApiResponse<ApiWebhookEndpoint[]>>(\"/v1/portal/webhooks\");\n }\n\n createWebhook(params: CreateWebhookParams): Promise<ApiResponse<ApiWebhookCreated>> {\n return this.post<ApiResponse<ApiWebhookCreated>>(\"/v1/portal/webhooks\", params);\n }\n\n deleteWebhook(id: string): Promise<ApiResponse<{ id: string; status: string }>> {\n return this.del<ApiResponse<{ id: string; status: string }>>(\n `/v1/portal/webhooks/${id}`\n );\n }\n\n // โ”€โ”€โ”€ Collection Claims โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Path 1: On-chain auto claim. Sends both x-api-key (tenant auth) and\n * Authorization: Bearer (Clerk JWT) simultaneously.\n */\n async claimCollection(\n contractAddress: string,\n walletAddress: string,\n clerkToken: string\n ): Promise<{ verified: boolean; collection?: ApiCollection; reason?: string }> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/claim`;\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify({ contractAddress, walletAddress }),\n });\n return res.json();\n }\n\n /**\n * Path 3: Manual off-chain claim request (email-based).\n */\n requestCollectionClaim(params: {\n contractAddress: string;\n walletAddress?: string;\n email: string;\n notes?: string;\n }): Promise<{ claim: ApiCollectionClaim }> {\n return this.request(\"/v1/collections/claim/request\", {\n method: \"POST\",\n body: JSON.stringify(params),\n });\n }\n\n // โ”€โ”€โ”€ Collection Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n async getCollectionProfile(contractAddress: string): Promise<ApiCollectionProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /**\n * Update collection profile. Requires Clerk JWT for ownership check.\n */\n async updateCollectionProfile(\n contractAddress: string,\n data: Partial<Omit<ApiCollectionProfile, \"contractAddress\" | \"chain\" | \"updatedBy\" | \"updatedAt\">>,\n clerkToken: string\n ): Promise<ApiCollectionProfile> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;\n const res = await fetch(url, {\n method: \"PATCH\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify(data),\n });\n return res.json();\n }\n\n async getGatedContent(\n contractAddress: string,\n clerkToken: string\n ): Promise<{ title: string; url: string; type: string } | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/gated-content`;\n const res = await fetch(url, {\n headers: { ...this.baseHeaders, \"Authorization\": `Bearer ${clerkToken}` },\n });\n if (res.status === 403 || res.status === 404) return null;\n return res.json();\n }\n\n // โ”€โ”€โ”€ Creator Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /** List all creators with an approved username. */\n async getCreators(opts: { search?: string; page?: number; limit?: number } = {}): Promise<ApiCreatorListResult> {\n const params = new URLSearchParams();\n if (opts.search) params.set(\"search\", opts.search);\n if (opts.page) params.set(\"page\", String(opts.page));\n if (opts.limit) params.set(\"limit\", String(opts.limit));\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators?${params}`;\n const res = await fetch(url, { headers: this.baseHeaders });\n return res.json();\n }\n\n async getCreatorProfile(walletAddress: string): Promise<ApiCreatorProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /** Resolve a username slug to a creator profile (public). */\n async getCreatorByUsername(username: string): Promise<ApiCreatorProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/by-username/${encodeURIComponent(username.toLowerCase().trim())}`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /**\n * Update creator profile. Requires Clerk JWT; wallet must match authenticated user.\n */\n async updateCreatorProfile(\n walletAddress: string,\n data: Partial<Omit<ApiCreatorProfile, \"walletAddress\" | \"chain\" | \"updatedAt\">>,\n clerkToken: string\n ): Promise<ApiCreatorProfile> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;\n const res = await fetch(url, {\n method: \"PATCH\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify(data),\n });\n return res.json();\n }\n\n // โ”€โ”€โ”€ User Wallet โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Upsert the authenticated user's wallet address in the backend DB.\n * Call after onboarding when ChipiPay confirms the wallet address.\n * Requires Clerk JWT; no tenant API key needed.\n */\n async upsertMyWallet(clerkToken: string): Promise<ApiUserWallet> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/users/me`;\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n });\n return res.json();\n }\n\n /**\n * Get the authenticated user's stored wallet address from the backend DB.\n * Returns null if the user has not completed onboarding yet.\n * Requires Clerk JWT; no tenant API key needed.\n */\n async getMyWallet(clerkToken: string): Promise<ApiUserWallet | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/users/me`;\n const res = await fetch(url, {\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n if (res.status === 404) return null;\n return res.json();\n }\n\n // โ”€โ”€โ”€ Remix Licensing โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Get public remixes of a token (open to everyone).\n */\n getTokenRemixes(\n contract: string,\n tokenId: string,\n opts: { page?: number; limit?: number } = {}\n ): Promise<ApiResponse<ApiPublicRemix[]>> {\n const params = new URLSearchParams();\n if (opts.page !== undefined) params.set(\"page\", String(opts.page));\n if (opts.limit !== undefined) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiPublicRemix[]>>(\n `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/remixes${qs ? `?${qs}` : \"\"}`\n );\n }\n\n /**\n * Submit a custom remix offer for a token. Requires Clerk JWT.\n */\n submitRemixOffer(\n params: CreateRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Submit an auto remix offer for a token with an open license. Requires Clerk JWT.\n */\n submitAutoRemixOffer(\n params: AutoRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers/auto\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Record a self-remix (owner remixing their own token). Requires Clerk JWT.\n */\n confirmSelfRemix(\n params: ConfirmSelfRemixParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers/self/confirm\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * List remix offers by role. Requires Clerk JWT.\n * role=\"creator\" โ€” offers where you are the original creator.\n * role=\"requester\" โ€” offers you made.\n */\n async getRemixOffers(\n query: ApiRemixOffersQuery,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer[]>> {\n const params = new URLSearchParams({ role: query.role });\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/remix-offers?${params}`;\n const res = await fetch(url, {\n headers: { ...this.baseHeaders, \"Authorization\": `Bearer ${clerkToken}` },\n });\n return res.json();\n }\n\n /**\n * Get a single remix offer. Clerk JWT optional (price/currency hidden for non-participants).\n */\n async getRemixOffer(id: string, clerkToken?: string): Promise<ApiResponse<ApiRemixOffer>> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/remix-offers/${id}`;\n const headers: Record<string, string> = { ...this.baseHeaders };\n if (clerkToken) headers[\"Authorization\"] = `Bearer ${clerkToken}`;\n const res = await fetch(url, { headers });\n return res.json();\n }\n\n /**\n * Creator approves a remix offer (authorises the requester to mint). Requires Clerk JWT.\n */\n confirmRemixOffer(\n id: string,\n params: ConfirmRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/confirm`, {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Creator rejects a remix offer. Requires Clerk JWT.\n */\n rejectRemixOffer(id: string, clerkToken: string): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/reject`, {\n method: \"POST\",\n body: JSON.stringify({}),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Requester extends the expiry of a pending remix offer by 1โ€“30 days.\n * Requires Clerk JWT.\n */\n extendRemixOffer(id: string, days: number, clerkToken: string): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/extend`, {\n method: \"POST\",\n body: JSON.stringify({ days }),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n // โ”€โ”€โ”€ POP Protocol โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getPopCollections(opts: { page?: number; limit?: number; sort?: CollectionSort } = {}): Promise<ApiResponse<ApiCollection[]>> {\n return this.getCollections(opts.page ?? 1, opts.limit ?? 20, undefined, opts.sort, \"POP_PROTOCOL\");\n }\n\n async getPopEligibility(collection: string, wallet: string): Promise<PopClaimStatus> {\n const res = await this.get<{ data: PopClaimStatus }>(\n `/v1/pop/eligibility/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`\n );\n return res.data;\n }\n\n async getPopEligibilityBatch(collection: string, wallets: string[]): Promise<PopBatchEligibilityItem[]> {\n const params = new URLSearchParams({ wallets: wallets.map(normalizeAddress).join(\",\") });\n const res = await this.get<{ data: PopBatchEligibilityItem[] }>(\n `/v1/pop/eligibility/${normalizeAddress(collection)}?${params}`\n );\n return res.data;\n }\n\n // โ”€โ”€โ”€ Collection Drop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getDropCollections(opts: { page?: number; limit?: number; sort?: CollectionSort } = {}): Promise<ApiResponse<ApiCollection[]>> {\n return this.getCollections(opts.page ?? 1, opts.limit ?? 20, undefined, opts.sort, \"COLLECTION_DROP\");\n }\n\n async getDropMintStatus(collection: string, wallet: string): Promise<DropMintStatus> {\n const res = await this.get<{ data: DropMintStatus }>(\n `/v1/drop/mint-status/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`\n );\n return res.data;\n }\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { POPCollectionABI, POPFactoryABI } from \"../abis.js\";\nimport { POP_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { CreatePopCollectionParams } from \"../types/services.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport type { CreatePopCollectionParams };\n\nexport class PopService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = POP_FACTORY_CONTRACT_MAINNET;\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(POPCollectionABI as any, normalizeAddress(address), account as any);\n }\n\n async claim(account: AccountInterface, collectionAddress: string): Promise<TxResult> {\n const call = this._collection(collectionAddress, account).populate(\"claim\", []);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async adminMint(\n account: AccountInterface,\n params: { collection: string; recipient: string; customUri?: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"admin_mint\", [\n params.recipient,\n params.customUri ?? \"\",\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async addToAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"add_to_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async batchAddToAllowlist(\n account: AccountInterface,\n params: { collection: string; addresses: string[] }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const CHUNK = 200;\n const calls = [];\n for (let i = 0; i < params.addresses.length; i += CHUNK) {\n calls.push(collection.populate(\"batch_add_to_allowlist\", [params.addresses.slice(i, i + CHUNK)]));\n }\n const res = await account.execute(calls);\n return { txHash: res.transaction_hash };\n }\n\n async removeFromAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"remove_from_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setTokenUri(\n account: AccountInterface,\n params: { collection: string; tokenId: string | bigint; uri: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_token_uri\", [\n BigInt(params.tokenId),\n params.uri,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setPaused(\n account: AccountInterface,\n params: { collection: string; paused: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_paused\", [params.paused]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async createCollection(\n account: AccountInterface,\n params: CreatePopCollectionParams\n ): Promise<TxResult> {\n const factory = new Contract(POPFactoryABI as any, this.factoryAddress, account as any);\n const call = factory.populate(\"create_collection\", [\n params.name,\n params.symbol,\n params.baseUri,\n params.claimEndTime,\n { [params.eventType]: {} },\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { DropCollectionABI, DropFactoryABI } from \"../abis.js\";\nimport { DROP_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { ClaimConditions, CreateDropParams } from \"../types/services.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport type { ClaimConditions, CreateDropParams };\n\nfunction toContractConditions(c: ClaimConditions) {\n return {\n start_time: c.startTime,\n end_time: c.endTime,\n price: BigInt(c.price),\n payment_token: c.paymentToken,\n max_quantity_per_wallet: BigInt(c.maxQuantityPerWallet),\n };\n}\n\nexport class DropService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = DROP_FACTORY_CONTRACT_MAINNET;\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(DropCollectionABI as any, normalizeAddress(address), account as any);\n }\n\n async claim(\n account: AccountInterface,\n collectionAddress: string,\n quantity: bigint | string | number = 1\n ): Promise<TxResult> {\n const call = this._collection(collectionAddress, account).populate(\"claim\", [BigInt(quantity)]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async adminMint(\n account: AccountInterface,\n params: { collection: string; recipient: string; quantity?: bigint | string | number; customUri?: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"admin_mint\", [\n params.recipient,\n BigInt(params.quantity ?? 1),\n params.customUri ?? \"\",\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setClaimConditions(\n account: AccountInterface,\n params: { collection: string; conditions: ClaimConditions }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_claim_conditions\", [\n toContractConditions(params.conditions),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setAllowlistEnabled(\n account: AccountInterface,\n params: { collection: string; enabled: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_allowlist_enabled\", [params.enabled]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async addToAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"add_to_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async batchAddToAllowlist(\n account: AccountInterface,\n params: { collection: string; addresses: string[] }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const CHUNK = 200;\n const calls = [];\n for (let i = 0; i < params.addresses.length; i += CHUNK) {\n calls.push(collection.populate(\"batch_add_to_allowlist\", [params.addresses.slice(i, i + CHUNK)]));\n }\n const res = await account.execute(calls);\n return { txHash: res.transaction_hash };\n }\n\n async setPaused(\n account: AccountInterface,\n params: { collection: string; paused: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_paused\", [params.paused]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async withdrawPayments(\n account: AccountInterface,\n params: { collection: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"withdraw_payments\", []);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async createDrop(account: AccountInterface, params: CreateDropParams): Promise<TxResult> {\n const factory = new Contract(DropFactoryABI as any, this.factoryAddress, account as any);\n const call = factory.populate(\"create_drop\", [\n params.name,\n params.symbol,\n params.baseUri,\n BigInt(params.maxSupply),\n toContractConditions(params.initialConditions),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { Medialane1155Module } from \"./marketplace1155/index.js\";\nimport { ApiClient } from \"./api/client.js\";\nimport { PopService } from \"./services/pop.js\";\nimport { DropService } from \"./services/drop.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions for ERC-721 assets (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\n\n /** On-chain marketplace interactions for ERC-1155 assets (Medialane1155 contract). */\n readonly marketplace1155: Medialane1155Module;\n\n /**\n * Off-chain API client โ€” covers all /v1/* backend endpoints.\n * Requires `backendUrl` in config; pass `apiKey` for authenticated routes.\n */\n readonly api: ApiClient;\n\n readonly services: {\n readonly pop: PopService;\n readonly drop: DropService;\n };\n\n private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\n this.marketplace1155 = new Medialane1155Module(this.config);\n\n this.services = {\n pop: new PopService(this.config),\n drop: new DropService(this.config),\n };\n\n if (!this.config.backendUrl) {\n this.api = new Proxy({} as ApiClient, {\n get(_target, prop) {\n return () => {\n throw new Error(\n `backendUrl not configured. Pass backendUrl to MedialaneClient to use .api.${String(prop)}()`\n );\n };\n },\n });\n } else {\n this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions);\n }\n }\n\n get network() {\n return this.config.network;\n }\n\n get rpcUrl() {\n return this.config.rpcUrl;\n }\n\n get marketplaceContract() {\n return this.config.marketplaceContract;\n }\n}\n","export type IPType =\n | \"Audio\"\n | \"Art\"\n | \"Documents\"\n | \"NFT\"\n | \"Video\"\n | \"Photography\"\n | \"Patents\"\n | \"Posts\"\n | \"Publications\"\n | \"RWA\"\n | \"Software\"\n | \"Custom\";\n\nexport type CollectionSort = \"recent\" | \"supply\" | \"floor\" | \"volume\" | \"name\";\n\nexport type CollectionSource = \"MEDIALANE_REGISTRY\" | \"EXTERNAL\" | \"PARTNERSHIP\" | \"IP_TICKET\" | \"IP_CLUB\" | \"GAME\" | \"POP_PROTOCOL\" | \"COLLECTION_DROP\";\n\nexport interface ApiCollectionsQuery {\n page?: number;\n limit?: number;\n isKnown?: boolean;\n sort?: CollectionSort;\n owner?: string;\n source?: CollectionSource;\n}\n\nexport type OrderStatus = \"ACTIVE\" | \"FULFILLED\" | \"CANCELLED\" | \"EXPIRED\" | \"COUNTER_OFFERED\";\nexport type SortOrder = \"price_asc\" | \"price_desc\" | \"recent\";\nexport type ActivityType = \"transfer\" | \"sale\" | \"listing\" | \"offer\" | \"cancelled\";\nexport type IntentType = \"CREATE_LISTING\" | \"MAKE_OFFER\" | \"FULFILL_ORDER\" | \"CANCEL_ORDER\" | \"MINT\" | \"CREATE_COLLECTION\" | \"COUNTER_OFFER\";\nexport type IntentStatus = \"PENDING\" | \"SIGNED\" | \"SUBMITTED\" | \"CONFIRMED\" | \"FAILED\" | \"EXPIRED\";\nexport type WebhookEventType = \"ORDER_CREATED\" | \"ORDER_FULFILLED\" | \"ORDER_CANCELLED\" | \"TRANSFER\";\nexport type WebhookStatus = \"ACTIVE\" | \"DISABLED\";\nexport type ApiKeyStatus = \"ACTIVE\" | \"REVOKED\";\nexport type TenantPlan = \"FREE\" | \"PREMIUM\";\n\n// โ”€โ”€โ”€ Shared โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiMeta {\n page: number;\n limit: number;\n total?: number;\n}\n\nexport interface ApiResponse<T> {\n data: T;\n meta?: ApiMeta;\n}\n\n// โ”€โ”€โ”€ Orders โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiOrdersQuery {\n status?: OrderStatus;\n collection?: string;\n currency?: string;\n sort?: SortOrder;\n page?: number;\n limit?: number;\n offerer?: string;\n minPrice?: string;\n maxPrice?: string;\n}\n\nexport interface ApiOrderOffer {\n itemType: string;\n token: string;\n identifier: string;\n startAmount: string;\n endAmount: string;\n}\n\nexport interface ApiOrderConsideration extends ApiOrderOffer {\n recipient: string;\n}\n\nexport interface ApiOrderPrice {\n raw: string | null;\n formatted: string | null;\n currency: string | null;\n decimals: number;\n}\n\nexport interface ApiOrderTxHash {\n created: string | null;\n fulfilled: string | null;\n cancelled: string | null;\n}\n\nexport interface ApiOrderTokenMeta {\n name: string | null;\n image: string | null;\n description: string | null;\n}\n\nexport interface ApiOrder {\n id: string;\n chain: string;\n orderHash: string;\n offerer: string;\n offer: ApiOrderOffer;\n consideration: ApiOrderConsideration;\n startTime: string;\n endTime: string;\n status: OrderStatus;\n fulfiller: string | null;\n nftContract: string | null;\n nftTokenId: string | null;\n price: ApiOrderPrice;\n txHash: ApiOrderTxHash;\n createdBlockNumber: string;\n createdAt: string;\n updatedAt: string;\n /** Embedded token metadata (name/image/description). Null when not yet indexed. */\n token: ApiOrderTokenMeta | null;\n /** Set when this is a counter-offer listing โ€” points to the original buyer bid. */\n parentOrderHash?: string | null;\n /** Optional seller message accompanying a counter-offer. */\n counterOfferMessage?: string | null;\n}\n\n// โ”€โ”€โ”€ IP / IPFS Metadata types โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n/**\n * A single OpenSea-compatible ERC-721 attribute.\n * Medialane embeds licensing, provenance, and IP metadata as attributes.\n */\nexport interface IpAttribute {\n trait_type: string;\n value: string;\n}\n\n/**\n * Full on-chain + IPFS metadata for a Medialane IP NFT.\n * Conforms to the OpenSea ERC-721 metadata standard and embeds\n * Berne Convention-compatible licensing data in `attributes`.\n *\n * Common licensing attributes (all optional โ€” absent on pre-v2 tokens):\n * License ยท Commercial Use ยท Derivatives ยท Attribution ยท Territory\n * AI Policy ยท Royalty ยท Standard (\"Berne Convention\") ยท Registration\n */\nexport interface IpNftMetadata {\n name: string;\n description?: string;\n image?: string | null;\n external_url?: string;\n attributes?: IpAttribute[];\n /** Populated by the indexer for fast access โ€” not stored in IPFS */\n ipType?: string | null;\n licenseType?: string | null;\n commercialUse?: string | null;\n derivatives?: string | null;\n attribution?: string | null;\n territory?: string | null;\n aiPolicy?: string | null;\n royalty?: string | null;\n registration?: string | null;\n}\n\n// โ”€โ”€โ”€ Tokens โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n/** Indexed token metadata as returned by the Medialane API. */\nexport interface ApiTokenMetadata {\n name: string | null;\n description: string | null;\n image: string | null;\n /** Parsed OpenSea-standard attributes array. Null when metadata hasn't been fetched. */\n attributes: IpAttribute[] | null;\n /** Short-circuit fields extracted from attributes by the indexer */\n ipType: string | null;\n licenseType: string | null;\n commercialUse: string | null;\n derivatives: string | null;\n attribution: string | null;\n territory: string | null;\n aiPolicy: string | null;\n royalty: string | null;\n registration: string | null;\n author: string | null;\n}\n\n/** Per-holder balance entry. Present for ERC-1155 (multi-holder); single entry for ERC-721. */\nexport interface ApiTokenBalance {\n owner: string;\n /** Quantity held. Always \"1\" for ERC-721. */\n amount: string;\n}\n\nexport interface ApiToken {\n id: string;\n chain: string;\n contractAddress: string;\n tokenId: string;\n /** @deprecated Use `balances` for ownership checks โ€” always null after ERC-1155 migration. */\n owner: string | null;\n tokenUri: string | null;\n metadataStatus: \"PENDING\" | \"FETCHING\" | \"FETCHED\" | \"FAILED\";\n metadata: ApiTokenMetadata;\n /** Current holders with amounts. Only present on single-token fetches; null on list responses. */\n balances: ApiTokenBalance[] | null;\n activeOrders: ApiOrder[];\n createdAt: string;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ Collections โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollection {\n id: string;\n chain: string;\n contractAddress: string;\n collectionId: string | null;\n name: string | null;\n symbol: string | null;\n description: string | null;\n image: string | null;\n owner: string | null;\n startBlock: string;\n metadataStatus: \"PENDING\" | \"FETCHING\" | \"FETCHED\" | \"FAILED\";\n /** Token standard detected via ERC-165. */\n standard: \"ERC721\" | \"ERC1155\" | \"UNKNOWN\";\n isKnown: boolean;\n source: CollectionSource;\n claimedBy: string | null;\n profile?: ApiCollectionProfile | null;\n floorPrice: string | null;\n totalVolume: string | null;\n holderCount: number | null;\n totalSupply: number | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ Activities โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiActivityPrice {\n raw: string | null;\n formatted: string | null;\n currency: string | null;\n}\n\nexport interface ApiActivity {\n type: ActivityType;\n // Transfer fields\n contractAddress?: string;\n tokenId?: string;\n from?: string;\n to?: string;\n blockNumber?: string;\n // Order fields\n orderHash?: string;\n nftContract?: string;\n nftTokenId?: string;\n offerer?: string;\n fulfiller?: string | null;\n price?: ApiActivityPrice;\n txHash: string | null;\n timestamp: string;\n}\n\nexport interface ApiActivitiesQuery {\n type?: ActivityType;\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Comments โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiComment {\n id: string;\n chain: string; // \"starknet\"\n contractAddress: string; // normalized 0x-padded Starknet address\n tokenId: string;\n author: string; // normalized 0x-padded Starknet address\n content: string; // sanitized plain text\n txHash: string | null;\n blockNumber: string; // BigInt serialized as string\n postedAt: string; // ISO 8601 derived from blockTimestamp โ€” use for display\n}\n\n// โ”€โ”€โ”€ Search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiSearchTokenResult {\n contractAddress: string;\n tokenId: string;\n name: string | null;\n image: string | null;\n owner: string;\n metadataStatus: string;\n}\n\nexport interface ApiSearchCollectionResult {\n contractAddress: string;\n name: string | null;\n image: string | null;\n totalSupply: number | null;\n floorPrice: string | null;\n holderCount: number | null;\n}\n\nexport interface ApiSearchCreatorResult {\n walletAddress: string;\n username: string | null;\n displayName: string | null;\n bio: string | null;\n avatarImage: string | null;\n}\n\nexport interface ApiSearchResult {\n tokens: ApiSearchTokenResult[];\n collections: ApiSearchCollectionResult[];\n creators: ApiSearchCreatorResult[];\n}\n\n// โ”€โ”€โ”€ Intents โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiIntent {\n id: string;\n chain: string;\n type: IntentType;\n status: IntentStatus;\n requester: string;\n typedData: unknown;\n calls: unknown;\n signature: string[];\n txHash: string | null;\n orderHash: string | null;\n /** Set on COUNTER_OFFER intents โ€” the original bid order hash being countered. */\n parentOrderHash?: string | null;\n /** Optional seller message on counter-offer intents. */\n counterOfferMessage?: string | null;\n expiresAt: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApiIntentCreated {\n id: string;\n typedData: unknown;\n calls: unknown;\n expiresAt: string;\n}\n\nexport interface CreateListingIntentParams {\n offerer: string;\n nftContract: string;\n tokenId: string;\n currency: string;\n price: string;\n endTime: number;\n salt?: string;\n /** Number of units to list โ€” required for ERC-1155, omit for ERC-721. */\n amount?: string;\n}\n\nexport interface MakeOfferIntentParams {\n offerer: string;\n nftContract: string;\n tokenId: string;\n currency: string;\n price: string;\n endTime: number;\n salt?: string;\n}\n\nexport interface FulfillOrderIntentParams {\n fulfiller: string;\n orderHash: string;\n /** Caller hint โ€” \"ERC1155\" forces 1155 routing even if the order isn't in the DB yet */\n tokenStandard?: string;\n}\n\nexport interface CancelOrderIntentParams {\n offerer: string;\n orderHash: string;\n /** Caller hint โ€” \"ERC1155\" forces 1155 routing even if the order isn't in the DB yet */\n tokenStandard?: string;\n}\n\nexport interface CreateMintIntentParams {\n /** Collection owner wallet address โ€” must be the collection owner on-chain */\n owner: string;\n collectionId: string;\n recipient: string;\n tokenUri: string;\n /** Optional: override the default collection contract address */\n collectionContract?: string;\n}\n\nexport interface CreateCollectionIntentParams {\n owner: string;\n name: string;\n symbol: string;\n /** Optional description stored server-side and surfaced on the collection page. */\n description?: string;\n /** Optional IPFS image URI (ipfs://...) for the collection cover image. */\n image?: string;\n /** Base URI for token metadata. Defaults to empty string if not provided. */\n baseUri?: string;\n /** Optional: override the default collection contract address */\n collectionContract?: string;\n}\n\nexport interface CreateCounterOfferIntentParams {\n /** Wallet address of the NFT owner making the counter-offer. */\n sellerAddress: string;\n /** Order hash of the original buyer bid being countered. */\n originalOrderHash: string;\n /** Counter price as a raw wei integer string (not human-readable). */\n counterPrice: string;\n /** Duration in seconds the counter-offer will be valid (3600โ€“2592000). */\n durationSeconds: number;\n /** Optional message from the seller to the buyer. Max 500 chars. */\n message?: string;\n}\n\nexport interface ApiCounterOffersQuery {\n /** Original bid order hash โ€” returns the counter-offer for this specific bid. */\n originalOrderHash?: string;\n /** Seller address โ€” returns all counter-offers sent by this seller. */\n sellerAddress?: string;\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Remix Licensing โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport const OPEN_LICENSES = [\"CC0\", \"CC BY\", \"CC BY-SA\", \"CC BY-NC\"] as const;\nexport type OpenLicense = (typeof OPEN_LICENSES)[number];\n\nexport type RemixOfferStatus =\n | \"PENDING\"\n | \"AUTO_PENDING\"\n | \"APPROVED\"\n | \"COMPLETED\"\n | \"REJECTED\"\n | \"EXPIRED\"\n | \"SELF_MINTED\";\n\nexport interface ApiRemixOfferPrice {\n raw: string;\n formatted: string;\n currency: string;\n decimals: number;\n}\n\nexport interface ApiRemixOffer {\n id: string;\n status: RemixOfferStatus;\n originalContract: string;\n originalTokenId: string;\n creatorAddress: string;\n requesterAddress: string | null;\n message?: string | null;\n /** Visible only to creator and requester โ€” includes formatted price */\n price?: ApiRemixOfferPrice;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct: number | null;\n approvedCollection: string | null;\n remixContract: string | null;\n remixTokenId: string | null;\n orderHash: string | null;\n createdAt: string;\n expiresAt: string;\n updatedAt: string;\n}\n\n/** Public remix record โ€” price/currency omitted for non-participants */\nexport interface ApiPublicRemix {\n id: string;\n remixContract: string | null;\n remixTokenId: string | null;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n createdAt: string;\n}\n\nexport interface CreateRemixOfferParams {\n originalContract: string;\n originalTokenId: string;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct?: number;\n proposedPrice?: string;\n proposedCurrency?: string;\n message?: string;\n /** Offer validity in days (server default applies if omitted) */\n expiresInDays?: number;\n}\n\nexport interface AutoRemixOfferParams {\n originalContract: string;\n originalTokenId: string;\n licenseType: string;\n}\n\nexport interface ConfirmSelfRemixParams {\n originalContract: string;\n originalTokenId: string;\n remixContract: string;\n remixTokenId: string;\n /** On-chain transaction hash of the mint tx */\n txHash?: string;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct?: number;\n}\n\nexport interface ConfirmRemixOfferParams {\n approvedCollection: string;\n remixContract: string;\n remixTokenId: string;\n orderHash?: string;\n}\n\nexport interface ApiRemixOffersQuery {\n /** \"creator\" = offers where you are the original creator; \"requester\" = offers you made */\n role: \"creator\" | \"requester\";\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Metadata โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiMetadataSignedUrl {\n url: string;\n}\n\nexport interface ApiMetadataUpload {\n cid: string;\n url: string;\n}\n\n// โ”€โ”€โ”€ Portal (tenant self-service) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiPortalMe {\n id: string;\n name: string;\n email: string;\n plan: TenantPlan;\n status: string;\n}\n\nexport interface ApiPortalKey {\n id: string;\n prefix: string;\n label: string;\n status: ApiKeyStatus;\n lastUsedAt: string | null;\n createdAt: string;\n}\n\nexport interface ApiPortalKeyCreated {\n id: string;\n prefix: string;\n label: string | null;\n /** Plaintext key โ€” shown ONCE at creation */\n plaintext: string;\n}\n\nexport interface ApiUsageDay {\n day: string;\n requests: number;\n}\n\nexport interface ApiWebhookEndpoint {\n id: string;\n url: string;\n events: WebhookEventType[];\n status: WebhookStatus;\n createdAt: string;\n}\n\nexport interface ApiWebhookCreated extends ApiWebhookEndpoint {\n /** Signing secret โ€” shown ONCE at creation, not stored in plaintext */\n secret: string;\n}\n\nexport interface CreateWebhookParams {\n url: string;\n events: WebhookEventType[];\n label?: string;\n}\n\n// โ”€โ”€โ”€ Collection & Creator Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollectionProfile {\n contractAddress: string;\n chain: string;\n displayName: string | null;\n description: string | null;\n image: string | null;\n bannerImage: string | null;\n websiteUrl: string | null;\n twitterUrl: string | null;\n discordUrl: string | null;\n telegramUrl: string | null;\n hasGatedContent: boolean;\n gatedContentTitle: string | null;\n updatedBy: string | null;\n updatedAt: string;\n}\n\nexport interface ApiCreatorProfile {\n walletAddress: string;\n chain: string;\n username: string | null;\n displayName: string | null;\n bio: string | null;\n avatarImage: string | null;\n bannerImage: string | null;\n websiteUrl: string | null;\n twitterUrl: string | null;\n discordUrl: string | null;\n telegramUrl: string | null;\n updatedAt: string;\n}\n\nexport interface ApiCreatorListResult {\n creators: ApiCreatorProfile[];\n total: number;\n page: number;\n limit: number;\n}\n\n// โ”€โ”€โ”€ User Wallet โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiUserWallet {\n walletAddress: string;\n}\n\n// โ”€โ”€โ”€ Collection Claims โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollectionClaim {\n id: string;\n contractAddress: string;\n chain: string;\n claimantAddress: string | null;\n status: \"PENDING\" | \"AUTO_APPROVED\" | \"APPROVED\" | \"REJECTED\";\n verificationMethod: \"ONCHAIN\" | \"SIGNATURE\" | \"MANUAL\";\n createdAt: string;\n}\n\nexport interface ApiAdminCollectionClaim extends ApiCollectionClaim {\n claimantEmail: string | null;\n notes: string | null;\n adminNotes: string | null;\n reviewedBy: string | null;\n reviewedAt: string | null;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ POP Protocol โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface PopClaimStatus {\n isEligible: boolean;\n hasClaimed: boolean;\n tokenId: string | null;\n}\n\nexport interface PopBatchEligibilityItem extends PopClaimStatus {\n wallet: string;\n}\n\nexport type PopEventType =\n | \"Conference\"\n | \"Bootcamp\"\n | \"Workshop\"\n | \"Hackathon\"\n | \"Meetup\"\n | \"Course\"\n | \"Other\";\n\n// โ”€โ”€โ”€ Collection Drop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface DropMintStatus {\n mintedByWallet: number;\n totalMinted: number;\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { IPCollection1155FactoryABI, IPCollection1155ABI } from \"../abis.js\";\nimport { ERC1155_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport interface DeployCollectionParams {\n /** Human-readable collection name (e.g. \"My IP Collection\") */\n name: string;\n /** Short ticker symbol (e.g. \"MIP\") */\n symbol: string;\n /**\n * Collection-level metadata URI (e.g. \"ipfs://Qmโ€ฆ/collection.json\").\n * Should point to a JSON containing `name`, `description`, `image`, and `external_link`.\n * Stored on-chain at deploy time. Pass an empty string if not available.\n */\n baseUri: string;\n}\n\nexport interface MintItemParams {\n /** ERC-1155 collection contract address */\n collection: string;\n /** Recipient wallet address */\n to: string;\n /** Token ID (u256 โ€” use a numeric string or bigint) */\n tokenId: bigint | string;\n /** Number of copies to mint */\n value: bigint | string;\n /**\n * Metadata URI โ€” must start with `ipfs://` or `ar://`.\n * Immutable: validated and stored on first mint of each token_id.\n */\n tokenUri: string;\n}\n\nexport interface BatchMintItemParams {\n /** ERC-1155 collection contract address */\n collection: string;\n /** Recipient wallet address */\n to: string;\n items: Array<{\n tokenId: bigint | string;\n value: bigint | string;\n tokenUri: string;\n }>;\n}\n\nexport class ERC1155CollectionService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = ERC1155_FACTORY_CONTRACT_MAINNET;\n }\n\n private _factory(account: AccountInterface) {\n return new Contract(\n IPCollection1155FactoryABI as any,\n normalizeAddress(this.factoryAddress),\n account as any\n );\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(\n IPCollection1155ABI as any,\n normalizeAddress(address),\n account as any\n );\n }\n\n /**\n * Deploy a new ERC-1155 IP collection.\n * Caller becomes the collection owner and can mint items.\n * Returns the transaction hash; the deployed collection address is emitted\n * in the `CollectionDeployed` event of the factory.\n */\n async deployCollection(\n account: AccountInterface,\n params: DeployCollectionParams\n ): Promise<TxResult> {\n const factory = this._factory(account);\n const call = factory.populate(\"deploy_collection\", [params.name, params.symbol, params.baseUri]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Mint a single token into an existing ERC-1155 collection.\n * Caller must be the collection owner.\n * The `tokenUri` is immutable โ€” validated and stored on the first mint only.\n */\n async mintItem(\n account: AccountInterface,\n params: MintItemParams\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"mint_item\", [\n params.to,\n BigInt(params.tokenId),\n BigInt(params.value),\n params.tokenUri,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Batch-mint multiple token IDs into an existing ERC-1155 collection.\n * All items go to the same `to` address.\n * Caller must be the collection owner.\n */\n async batchMintItem(\n account: AccountInterface,\n params: BatchMintItemParams\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const tokenIds = params.items.map((i) => BigInt(i.tokenId));\n const values = params.items.map((i) => BigInt(i.value));\n const tokenUris = params.items.map((i) => i.tokenUri);\n const call = collection.populate(\"batch_mint_item\", [\n params.to,\n tokenIds,\n values,\n tokenUris,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Set the default ERC-2981 royalty for the entire collection.\n * `feeNumerator` is out of 10 000 (e.g. 500 = 5%).\n * Caller must be the collection owner.\n */\n async setDefaultRoyalty(\n account: AccountInterface,\n params: { collection: string; receiver: string; feeNumerator: number }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_default_royalty\", [\n params.receiver,\n BigInt(params.feeNumerator),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Set a per-token ERC-2981 royalty override.\n * `feeNumerator` is out of 10 000. Caller must be the collection owner.\n */\n async setTokenRoyalty(\n account: AccountInterface,\n params: { collection: string; tokenId: bigint | string; receiver: string; feeNumerator: number }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_token_royalty\", [\n BigInt(params.tokenId),\n params.receiver,\n BigInt(params.feeNumerator),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Approve the Medialane1155 marketplace (or any operator) to transfer\n * all tokens on behalf of `account`. Required before listing.\n */\n async setApprovalForAll(\n account: AccountInterface,\n params: { collection: string; operator: string; approved: boolean }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_approval_for_all\", [\n params.operator,\n params.approved,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/config.ts","../src/marketplace/signing.ts","../src/abis.ts","../src/utils/bigint.ts","../src/utils/token.ts","../src/marketplace/orders.ts","../src/marketplace/index.ts","../src/marketplace1155/signing.ts","../src/marketplace1155/orders.ts","../src/marketplace1155/index.ts","../src/utils/address.ts","../src/utils/retry.ts","../src/api/client.ts","../src/services/pop.ts","../src/services/drop.ts","../src/client.ts","../src/types/api.ts","../src/services/erc1155collection.ts"],"names":["z","TypedDataRevision","constants","RpcProvider","Contract","shortString","cairo","byteArray","num","toSignatureArray","getChainId","_providerCache","_contractCache","getProvider","resolveToken"],"mappings":"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","file":"index.cjs","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x0234f4e8838801ebf01d7f4166d42aed9a55bc67c1301162decf9e2040e05f16\";\n\n/** Medialane1155 โ€” dedicated ERC-1155 marketplace. Deployed 2026-04-15. */\nexport const MARKETPLACE_1155_CONTRACT_MAINNET =\n \"0x042005e9b85536072bfa260b95aa6aaef07f48e622031657384d2375195d7123\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05c49ee5d3208a2c2e150fdd0c247d1195ed9ab54fa2d5dea7a633f39e4b205b\";\n\nexport const DROP_FACTORY_CONTRACT_MAINNET =\n \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\";\n\nexport const POP_FACTORY_CONTRACT_MAINNET =\n \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical)\n symbol: \"USDC\",\n address:\n \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"USDT\",\n address:\n \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"ETH\",\n address:\n \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"STRK\",\n address:\n \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"WBTC\",\n address:\n \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n decimals: 8,\n listable: true,\n },\n] as const;\n\nexport type SupportedTokenSymbol = (typeof SUPPORTED_TOKENS)[number][\"symbol\"];\n\n/** Default currency for listings and offers โ€” Circle-native USDC on Starknet. */\nexport const DEFAULT_CURRENCY: SupportedTokenSymbol = \"USDC\";\n\nexport const SUPPORTED_NETWORKS = [\"mainnet\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URL = \"https://rpc.starknet.lava.build\";\n\nexport const POP_COLLECTION_CLASS_HASH_MAINNET = \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\";\n\nexport const DROP_COLLECTION_CLASS_HASH_MAINNET = \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\";\n\n/** IP-Programmable-ERC1155-Collections factory. Redeployed 2026-04-16 (v2 โ€” adds base_uri). */\nexport const ERC1155_FACTORY_CONTRACT_MAINNET =\n \"0x006b2dc7ca7c4f466bb4575ba043d934310f052074f849caf853a86bcb819fd6\";\n\n/** Class hash of the IPCollection ERC-1155 implementation. Redeployed 2026-04-16 (v2). */\nexport const ERC1155_COLLECTION_CLASS_HASH_MAINNET =\n \"0x39a85126c6627db263617e5bce2bb72e49d2bb1f20961efc8b8954665bcfd25\";\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URL,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n MARKETPLACE_1155_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.js\";\nimport type { RetryOptions } from \"./utils/retry.js\";\n\nexport const MedialaneConfigSchema = z.object({\n network: z.enum(SUPPORTED_NETWORKS).default(\"mainnet\"),\n rpcUrl: z.string().url().optional(),\n backendUrl: z.string().url().optional(),\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n marketplace1155Contract: z.string().optional(),\n collectionContract: z.string().optional(),\n retryOptions: z.object({\n maxAttempts: z.number().int().min(1).max(10).optional(),\n baseDelayMs: z.number().int().min(0).optional(),\n maxDelayMs: z.number().int().min(0).optional(),\n }).optional(),\n});\n\nexport type MedialaneConfig = z.input<typeof MedialaneConfigSchema>;\n\nexport interface ResolvedConfig {\n network: Network;\n rpcUrl: string;\n backendUrl: string | undefined;\n apiKey: string | undefined;\n marketplaceContract: string;\n marketplace1155Contract: string;\n collectionContract: string;\n retryOptions?: RetryOptions;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URL,\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n marketplace1155Contract: parsed.marketplace1155Contract ?? MARKETPLACE_1155_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\n retryOptions: parsed.retryOptions,\n };\n}\n","import { type TypedData, TypedDataRevision, constants } from \"starknet\";\n\n/**\n * Build SNIP-12 typed data for signing an OrderParameters struct.\n * Uses TypedDataRevision.ACTIVE and ContractAddress / shortstring SNIP-12 types.\n */\nexport function buildOrderTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderParameters\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderParameters: [\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"offer\", type: \"OfferItem\" },\n { name: \"consideration\", type: \"ConsiderationItem\" },\n { name: \"start_time\", type: \"felt\" },\n { name: \"end_time\", type: \"felt\" },\n { name: \"salt\", type: \"felt\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n OfferItem: [\n { name: \"item_type\", type: \"shortstring\" },\n { name: \"token\", type: \"ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"felt\" },\n { name: \"start_amount\", type: \"felt\" },\n { name: \"end_amount\", type: \"felt\" },\n ],\n ConsiderationItem: [\n { name: \"item_type\", type: \"shortstring\" },\n { name: \"token\", type: \"ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"felt\" },\n { name: \"start_amount\", type: \"felt\" },\n { name: \"end_amount\", type: \"felt\" },\n { name: \"recipient\", type: \"ContractAddress\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an OrderFulfillment struct.\n */\nexport function buildFulfillmentTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderFulfillment\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderFulfillment: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"fulfiller\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an OrderCancellation struct.\n */\nexport function buildCancellationTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: {\n name: \"Medialane\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n },\n primaryType: \"OrderCancellation\",\n types: {\n StarknetDomain: [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n ],\n OrderCancellation: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n","// Auto-generated from on-chain ABI at contract:\n// 0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\n// Fetched on 2026-02-16\n\nexport const IPMarketplaceABI = [\n {\n type: \"impl\",\n name: \"UpgradeableImpl\",\n interface_name: \"openzeppelin_upgrades::interface::IUpgradeable\",\n },\n {\n type: \"interface\",\n name: \"openzeppelin_upgrades::interface::IUpgradeable\",\n items: [\n {\n type: \"function\",\n name: \"upgrade\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"MedialaneImpl\",\n interface_name: \"mediolano_core::core::interface::IMedialane\",\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OfferItem\",\n members: [\n { name: \"item_type\", type: \"core::felt252\" },\n { name: \"token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"core::felt252\" },\n { name: \"start_amount\", type: \"core::felt252\" },\n { name: \"end_amount\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::ConsiderationItem\",\n members: [\n { name: \"item_type\", type: \"core::felt252\" },\n { name: \"token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"identifier_or_criteria\", type: \"core::felt252\" },\n { name: \"start_amount\", type: \"core::felt252\" },\n { name: \"end_amount\", type: \"core::felt252\" },\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderParameters\",\n members: [\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"offer\", type: \"mediolano_core::core::types::OfferItem\" },\n { name: \"consideration\", type: \"mediolano_core::core::types::ConsiderationItem\" },\n { name: \"start_time\", type: \"core::felt252\" },\n { name: \"end_time\", type: \"core::felt252\" },\n { name: \"salt\", type: \"core::felt252\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::Order\",\n members: [\n { name: \"parameters\", type: \"mediolano_core::core::types::OrderParameters\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderFulfillment\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\" },\n { name: \"fulfiller\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::FulfillmentRequest\",\n members: [\n { name: \"fulfillment\", type: \"mediolano_core::core::types::OrderFulfillment\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderCancellation\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\" },\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"nonce\", type: \"core::felt252\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::CancelRequest\",\n members: [\n { name: \"cancelation\", type: \"mediolano_core::core::types::OrderCancellation\" },\n { name: \"signature\", type: \"core::array::Array::<core::felt252>\" },\n ],\n },\n {\n type: \"enum\",\n name: \"mediolano_core::core::types::OrderStatus\",\n variants: [\n { name: \"None\", type: \"()\" },\n { name: \"Created\", type: \"()\" },\n { name: \"Filled\", type: \"()\" },\n { name: \"Cancelled\", type: \"()\" },\n ],\n },\n {\n type: \"enum\",\n name: \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n variants: [\n { name: \"Some\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"None\", type: \"()\" },\n ],\n },\n {\n type: \"struct\",\n name: \"mediolano_core::core::types::OrderDetails\",\n members: [\n { name: \"offerer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"offer\", type: \"mediolano_core::core::types::OfferItem\" },\n { name: \"consideration\", type: \"mediolano_core::core::types::ConsiderationItem\" },\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"order_status\", type: \"mediolano_core::core::types::OrderStatus\" },\n {\n name: \"fulfiller\",\n type: \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n },\n ],\n },\n {\n type: \"interface\",\n name: \"mediolano_core::core::interface::IMedialane\",\n items: [\n {\n type: \"function\",\n name: \"register_order\",\n inputs: [{ name: \"order\", type: \"mediolano_core::core::types::Order\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"fulfill_order\",\n inputs: [\n {\n name: \"fulfillment_request\",\n type: \"mediolano_core::core::types::FulfillmentRequest\",\n },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"cancel_order\",\n inputs: [{ name: \"cancel_request\", type: \"mediolano_core::core::types::CancelRequest\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_order_details\",\n inputs: [{ name: \"order_hash\", type: \"core::felt252\" }],\n outputs: [{ type: \"mediolano_core::core::types::OrderDetails\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_order_hash\",\n inputs: [\n { name: \"parameters\", type: \"mediolano_core::core::types::OrderParameters\" },\n { name: \"signer\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::felt252\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"NoncesImpl\",\n interface_name: \"openzeppelin_utils::cryptography::interface::INonces\",\n },\n {\n type: \"interface\",\n name: \"openzeppelin_utils::cryptography::interface::INonces\",\n items: [\n {\n type: \"function\",\n name: \"nonces\",\n inputs: [\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::felt252\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"impl\",\n name: \"SRC5Impl\",\n interface_name: \"openzeppelin_introspection::interface::ISRC5\",\n },\n {\n type: \"enum\",\n name: \"core::bool\",\n variants: [\n { name: \"False\", type: \"()\" },\n { name: \"True\", type: \"()\" },\n ],\n },\n {\n type: \"interface\",\n name: \"openzeppelin_introspection::interface::ISRC5\",\n items: [\n {\n type: \"function\",\n name: \"supports_interface\",\n inputs: [{ name: \"interface_id\", type: \"core::felt252\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n ],\n },\n {\n type: \"constructor\",\n name: \"constructor\",\n inputs: [\n { name: \"manager\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"native_token_address\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderCreated\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderFulfilled\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n {\n name: \"fulfiller\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::events::OrderCancelled\",\n kind: \"struct\",\n members: [\n { name: \"order_hash\", type: \"core::felt252\", kind: \"key\" },\n {\n name: \"offerer\",\n type: \"core::starknet::contract_address::ContractAddress\",\n kind: \"key\",\n },\n ],\n },\n {\n type: \"event\",\n name: \"mediolano_core::core::medialane::Medialane::Event\",\n kind: \"enum\",\n variants: [\n {\n name: \"OrderCreated\",\n type: \"mediolano_core::core::events::OrderCreated\",\n kind: \"nested\",\n },\n {\n name: \"OrderFulfilled\",\n type: \"mediolano_core::core::events::OrderFulfilled\",\n kind: \"nested\",\n },\n {\n name: \"OrderCancelled\",\n type: \"mediolano_core::core::events::OrderCancelled\",\n kind: \"nested\",\n },\n ],\n },\n] as const;\n\nexport const POPCollectionABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"admin_mint\",\n inputs: [\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"custom_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"add_to_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_add_to_allowlist\",\n inputs: [{ name: \"addresses\", type: \"core::array::Array::<core::starknet::contract_address::ContractAddress>\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"remove_from_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_uri\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_paused\",\n inputs: [{ name: \"paused\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_eligible\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"has_claimed\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"total_minted\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n] as const;\n\nexport const POPFactoryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"enum\",\n name: \"pop_protocol::types::EventType\",\n variants: [\n { name: \"Conference\", type: \"()\" },\n { name: \"Bootcamp\", type: \"()\" },\n { name: \"Workshop\", type: \"()\" },\n { name: \"Hackathon\", type: \"()\" },\n { name: \"Meetup\", type: \"()\" },\n { name: \"Course\", type: \"()\" },\n { name: \"Other\", type: \"()\" },\n ],\n },\n {\n type: \"function\",\n name: \"create_collection\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"claim_end_time\", type: \"core::integer::u64\" },\n { name: \"event_type\", type: \"pop_protocol::types::EventType\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"register_provider\",\n inputs: [\n { name: \"provider\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"website_url\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_pop_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;\n\nexport const DropCollectionABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"collection_drop::types::ClaimConditions\",\n members: [\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"price\", type: \"core::integer::u256\" },\n { name: \"payment_token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"max_quantity_per_wallet\", type: \"core::integer::u256\" },\n ],\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [{ name: \"quantity\", type: \"core::integer::u256\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"admin_mint\",\n inputs: [\n { name: \"recipient\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"quantity\", type: \"core::integer::u256\" },\n { name: \"custom_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_claim_conditions\",\n inputs: [{ name: \"conditions\", type: \"collection_drop::types::ClaimConditions\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_claim_conditions\",\n inputs: [],\n outputs: [{ type: \"collection_drop::types::ClaimConditions\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_allowlist_enabled\",\n inputs: [{ name: \"enabled\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_allowlist_enabled\",\n inputs: [],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"add_to_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_add_to_allowlist\",\n inputs: [{ name: \"addresses\", type: \"core::array::Array::<core::starknet::contract_address::ContractAddress>\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"remove_from_allowlist\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_allowlisted\",\n inputs: [{ name: \"address\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_base_uri\",\n inputs: [{ name: \"new_uri\", type: \"core::byte_array::ByteArray\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_uri\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_paused\",\n inputs: [{ name: \"paused\", type: \"core::bool\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"withdraw_payments\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_drop_id\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_max_supply\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"total_minted\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"remaining_supply\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"minted_by_wallet\",\n inputs: [{ name: \"wallet\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"is_paused\",\n inputs: [],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n] as const;\n\nexport const DropFactoryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"collection_drop::types::ClaimConditions\",\n members: [\n { name: \"start_time\", type: \"core::integer::u64\" },\n { name: \"end_time\", type: \"core::integer::u64\" },\n { name: \"price\", type: \"core::integer::u256\" },\n { name: \"payment_token\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"max_quantity_per_wallet\", type: \"core::integer::u256\" },\n ],\n },\n {\n type: \"function\",\n name: \"register_organizer\",\n inputs: [\n { name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"revoke_organizer\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_active_organizer\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"create_drop\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"max_supply\", type: \"core::integer::u256\" },\n { name: \"initial_conditions\", type: \"collection_drop::types::ClaimConditions\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"get_drop_address\",\n inputs: [{ name: \"drop_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_last_drop_id\",\n inputs: [],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_organizer_drop_count\",\n inputs: [{ name: \"organizer\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::integer::u32\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_drop_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;\n\n// Collection Registry ABI โ€” minimal subset for list_user_collections + get_collection\n// Contract: 0x05c49ee5d3208a2c2e150fdd0c247d1195ed9ab54fa2d5dea7a633f39e4b205b\n// Fetched on 2026-04-10\nexport const CollectionRegistryABI = [\n {\n type: \"struct\",\n name: \"core::byte_array::ByteArray\",\n members: [\n { name: \"data\", type: \"core::array::Array::<core::felt252>\" },\n { name: \"pending_word\", type: \"core::felt252\" },\n { name: \"pending_word_len\", type: \"core::integer::u32\" },\n ],\n },\n {\n type: \"struct\",\n name: \"ip_collection_erc_721::types::Collection\",\n members: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"ip_nft\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"is_active\", type: \"core::bool\" },\n ],\n },\n {\n type: \"function\",\n name: \"list_user_collections\",\n inputs: [{ name: \"user\", type: \"core::starknet::contract_address::ContractAddress\" }],\n outputs: [{ type: \"core::array::Span::<core::integer::u256>\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_collection\",\n inputs: [{ name: \"collection_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"ip_collection_erc_721::types::Collection\" }],\n state_mutability: \"view\",\n },\n] as const;\n\n// โ”€โ”€โ”€ Medialane1155 ABI โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Auto-generated from on-chain ABI at contract:\n// 0x042005e9b85536072bfa260b95aa6aaef07f48e622031657384d2375195d7123\n// Deployed 2026-04-15\n\nexport const Medialane1155ABI = [\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_upgrades::interface::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_upgrades::interface::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"Medialane1155Impl\",\n \"interface_name\": \"medialane_erc1155::core::interface::IMedialane1155\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderParameters\",\n \"members\": [\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"start_time\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::Order\",\n \"members\": [\n {\n \"name\": \"parameters\",\n \"type\": \"medialane_erc1155::core::types::OrderParameters\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderFulfillment\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::FulfillmentRequest\",\n \"members\": [\n {\n \"name\": \"fulfillment\",\n \"type\": \"medialane_erc1155::core::types::OrderFulfillment\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderCancellation\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nonce\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::CancelRequest\",\n \"members\": [\n {\n \"name\": \"cancelation\",\n \"type\": \"medialane_erc1155::core::types::OrderCancellation\"\n },\n {\n \"name\": \"signature\",\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"medialane_erc1155::core::types::OrderStatus\",\n \"variants\": [\n {\n \"name\": \"None\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Created\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Filled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Cancelled\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"medialane_erc1155::core::types::OrderDetails\",\n \"members\": [\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"start_time\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"order_status\",\n \"type\": \"medialane_erc1155::core::types::OrderStatus\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"medialane_erc1155::core::interface::IMedialane1155\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"register_order\",\n \"inputs\": [\n {\n \"name\": \"order\",\n \"type\": \"medialane_erc1155::core::types::Order\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"fulfill_order\",\n \"inputs\": [\n {\n \"name\": \"fulfillment_request\",\n \"type\": \"medialane_erc1155::core::types::FulfillmentRequest\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"cancel_order\",\n \"inputs\": [\n {\n \"name\": \"cancel_request\",\n \"type\": \"medialane_erc1155::core::types::CancelRequest\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_order_details\",\n \"inputs\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"medialane_erc1155::core::types::OrderDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_order_hash\",\n \"inputs\": [\n {\n \"name\": \"parameters\",\n \"type\": \"medialane_erc1155::core::types::OrderParameters\"\n },\n {\n \"name\": \"signer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_native_token\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"NoncesImpl\",\n \"interface_name\": \"openzeppelin_utils::cryptography::interface::INonces\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_utils::cryptography::interface::INonces\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"nonces\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_introspection::interface::ISRC5\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_introspection::interface::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"AccessControlImpl\",\n \"interface_name\": \"openzeppelin_access::accesscontrol::interface::IAccessControl\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_access::accesscontrol::interface::IAccessControl\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_role_admin\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::felt252\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"grant_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revoke_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_role\",\n \"inputs\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"manager\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"native_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"nft_contract\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"price_per_unit\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"payment_token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderFulfilled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"fulfiller\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"royalty_receiver\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"royalty_amount\",\n \"type\": \"core::integer::u256\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::events::OrderCancelled\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"order_hash\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"offerer\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGranted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGrantedWithDelay\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"delay\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleRevoked\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"account\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleAdminChanged\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"previous_admin_role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"new_admin_role\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"RoleGranted\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGranted\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleGrantedWithDelay\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleGrantedWithDelay\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleRevoked\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleRevoked\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RoleAdminChanged\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::RoleAdminChanged\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"medialane_erc1155::core::medialane::Medialane1155::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OrderCreated\",\n \"type\": \"medialane_erc1155::core::events::OrderCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderFulfilled\",\n \"type\": \"medialane_erc1155::core::events::OrderFulfilled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OrderCancelled\",\n \"type\": \"medialane_erc1155::core::events::OrderCancelled\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"NoncesEvent\",\n \"type\": \"openzeppelin_utils::cryptography::nonces::NoncesComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"AccessControlEvent\",\n \"type\": \"openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n] as const;\n\n// โ”€โ”€โ”€ ERC-1155 IP Collection Factory (v2) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Deployed on Starknet mainnet at:\n// 0x006b2dc7ca7c4f466bb4575ba043d934310f052074f849caf853a86bcb819fd6\n// v2 adds base_uri as third argument to deploy_collection.\n\nexport const IPCollection1155FactoryABI = [\n {\n type: \"function\",\n name: \"collection_class_hash\",\n inputs: [],\n outputs: [{ type: \"core::starknet::class_hash::ClassHash\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"deploy_collection\",\n inputs: [\n { name: \"name\", type: \"core::byte_array::ByteArray\" },\n { name: \"symbol\", type: \"core::byte_array::ByteArray\" },\n { name: \"base_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"update_collection_class_hash\",\n inputs: [{ name: \"new_class_hash\", type: \"core::starknet::class_hash::ClassHash\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n] as const;\n\n// โ”€โ”€โ”€ ERC-1155 IP Collection (per-collection, v2) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n// Class hash: 0x39a85126c6627db263617e5bce2bb72e49d2bb1f20961efc8b8954665bcfd25\n// v2 adds name(), symbol(), base_uri() view functions and requires value > 0 on mint.\n\nexport const IPCollection1155ABI = [\n // โ”€โ”€ Metadata views โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"name\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"symbol\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"base_uri\",\n inputs: [],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"uri\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::byte_array::ByteArray\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ Minting โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"mint_item\",\n inputs: [\n { name: \"to\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"value\", type: \"core::integer::u256\" },\n { name: \"token_uri\", type: \"core::byte_array::ByteArray\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"batch_mint_item\",\n inputs: [\n { name: \"to\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_ids\", type: \"core::array::Span::<core::integer::u256>\" },\n { name: \"values\", type: \"core::array::Span::<core::integer::u256>\" },\n { name: \"token_uris\", type: \"core::array::Array::<core::byte_array::ByteArray>\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n // โ”€โ”€ Provenance queries โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"get_collection_creator\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_token_creator\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"get_token_registered_at\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [{ type: \"core::integer::u64\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ Ownership โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"owner\",\n inputs: [],\n outputs: [{ type: \"core::starknet::contract_address::ContractAddress\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ ERC-1155 standard โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"balance_of\",\n inputs: [\n { name: \"account\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"token_id\", type: \"core::integer::u256\" },\n ],\n outputs: [{ type: \"core::integer::u256\" }],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_approval_for_all\",\n inputs: [\n { name: \"operator\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"approved\", type: \"core::bool\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"is_approved_for_all\",\n inputs: [\n { name: \"owner\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"operator\", type: \"core::starknet::contract_address::ContractAddress\" },\n ],\n outputs: [{ type: \"core::bool\" }],\n state_mutability: \"view\",\n },\n // โ”€โ”€ ERC-2981 royalties โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n {\n type: \"function\",\n name: \"royalty_info\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"sale_price\", type: \"core::integer::u256\" },\n ],\n outputs: [\n { type: \"core::starknet::contract_address::ContractAddress\" },\n { type: \"core::integer::u256\" },\n ],\n state_mutability: \"view\",\n },\n {\n type: \"function\",\n name: \"set_default_royalty\",\n inputs: [\n { name: \"receiver\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"fee_numerator\", type: \"core::integer::u128\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"set_token_royalty\",\n inputs: [\n { name: \"token_id\", type: \"core::integer::u256\" },\n { name: \"receiver\", type: \"core::starknet::contract_address::ContractAddress\" },\n { name: \"fee_numerator\", type: \"core::integer::u128\" },\n ],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"delete_default_royalty\",\n inputs: [],\n outputs: [],\n state_mutability: \"external\",\n },\n {\n type: \"function\",\n name: \"reset_token_royalty\",\n inputs: [{ name: \"token_id\", type: \"core::integer::u256\" }],\n outputs: [],\n state_mutability: \"external\",\n },\n] as const;","/**\n * Recursively convert all BigInt values to their decimal string representations.\n * Required before JSON serialisation and before passing objects to starknet.js\n * functions that expect string felts.\n */\nexport function stringifyBigInts(obj: unknown): unknown {\n if (typeof obj === \"bigint\") {\n return obj.toString();\n }\n if (Array.isArray(obj)) {\n return obj.map(stringifyBigInts);\n }\n if (obj !== null && typeof obj === \"object\") {\n return Object.fromEntries(\n Object.entries(obj as Record<string, unknown>).map(([key, value]) => [\n key,\n stringifyBigInts(value),\n ])\n );\n }\n return obj;\n}\n\n/**\n * Convert a u256 represented as { low: string; high: string } to a single BigInt.\n */\nexport function u256ToBigInt(low: string, high: string): bigint {\n return BigInt(low) + (BigInt(high) << 128n);\n}\n","import { SUPPORTED_TOKENS } from \"../constants.js\";\n\nexport type SupportedToken = (typeof SUPPORTED_TOKENS)[number];\n\n/**\n * Parse a human-readable amount (e.g. \"1.5\") to its raw integer string\n * representation given the token's decimal places.\n * Uses pure BigInt arithmetic to avoid floating point precision loss.\n */\nexport function parseAmount(human: string, decimals: number): string {\n const [whole, frac = \"\"] = human.split(\".\");\n const fracPadded = frac.padEnd(decimals, \"0\").slice(0, decimals);\n return (BigInt(whole) * BigInt(10) ** BigInt(decimals) + BigInt(fracPadded)).toString();\n}\n\n/**\n * Format a raw integer string (e.g. \"1500000\") to a human-readable decimal\n * string given the token's decimal places.\n */\nexport function formatAmount(raw: string, decimals: number): string {\n const value = BigInt(raw);\n const factor = BigInt(Math.pow(10, decimals));\n const whole = value / factor;\n const remainder = value % factor;\n const fractional = remainder.toString().padStart(decimals, \"0\");\n return `${whole}.${fractional}`;\n}\n\n/**\n * Find a supported token by its contract address (case-insensitive).\n */\nexport function getTokenByAddress(address: string): SupportedToken | undefined {\n const lower = address.toLowerCase();\n return SUPPORTED_TOKENS.find((t) => t.address.toLowerCase() === lower);\n}\n\n/**\n * Find a supported token by its symbol (case-insensitive).\n */\nexport function getTokenBySymbol(symbol: string): SupportedToken | undefined {\n const upper = symbol.toUpperCase();\n return SUPPORTED_TOKENS.find((t) => t.symbol === upper);\n}\n\n/**\n * Return all tokens available for use in listing and offer dialogs.\n * Tokens with listable: false appear only as marketplace filter chips.\n */\nexport function getListableTokens(): ReadonlyArray<SupportedToken> {\n return SUPPORTED_TOKENS.filter((t) => t.listable);\n}\n","import {\n type AccountInterface,\n type Abi,\n Contract,\n RpcProvider,\n cairo,\n byteArray,\n num,\n shortString,\n constants,\n type TypedData,\n} from \"starknet\";\nimport { IPMarketplaceABI } from \"../abis.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { SUPPORTED_TOKENS, DEFAULT_CURRENCY } from \"../constants.js\";\nimport type { MedialaneErrorCode } from \"../types/errors.js\";\nimport type {\n CreateListingParams,\n MakeOfferParams,\n FulfillOrderParams,\n CancelOrderParams,\n CartItem,\n MintParams,\n CreateCollectionParams,\n TxResult,\n} from \"../types/marketplace.js\";\nimport { stringifyBigInts } from \"../utils/bigint.js\";\nimport { parseAmount } from \"../utils/token.js\";\nimport {\n buildOrderTypedData,\n buildFulfillmentTypedData,\n buildCancellationTypedData,\n} from \"./signing.js\";\n\nexport class MedialaneError extends Error {\n constructor(\n message: string,\n public readonly code: MedialaneErrorCode = \"UNKNOWN\",\n public readonly cause?: unknown\n ) {\n super(message);\n this.name = \"MedialaneError\";\n }\n}\n\nfunction toSignatureArray(sig: unknown): string[] {\n if (Array.isArray(sig)) return sig as string[];\n const s = sig as { r: bigint | string; s: bigint | string };\n return [s.r.toString(), s.s.toString()];\n}\n\nfunction getChainId(_config: ResolvedConfig): constants.StarknetChainId {\n return constants.StarknetChainId.SN_MAIN;\n}\n\nconst _contractCache = new WeakMap<ResolvedConfig, { contract: Contract; provider: RpcProvider }>();\nconst _providerCache = new WeakMap<ResolvedConfig, RpcProvider>();\n\nfunction getProvider(config: ResolvedConfig): RpcProvider {\n let provider = _providerCache.get(config);\n if (!provider) {\n provider = new RpcProvider({ nodeUrl: config.rpcUrl });\n _providerCache.set(config, provider);\n }\n return provider;\n}\n\nfunction makeContract(config: ResolvedConfig): { contract: Contract; provider: RpcProvider } {\n const cached = _contractCache.get(config);\n if (cached) return cached;\n\n const provider = getProvider(config);\n const contract = new Contract(\n IPMarketplaceABI as unknown as Abi,\n config.marketplaceContract,\n provider\n );\n const result = { contract, provider };\n _contractCache.set(config, result);\n return result;\n}\n\nfunction resolveToken(currency: string) {\n const token = SUPPORTED_TOKENS.find(\n (t) => t.symbol === currency.toUpperCase() || t.address.toLowerCase() === currency.toLowerCase()\n );\n if (!token) throw new MedialaneError(`Unsupported currency: ${currency}`, \"INVALID_PARAMS\");\n return token;\n}\n\n\n/**\n * Create a listing โ€” offerer offers ERC721, asks for ERC20.\n */\nexport async function createListing(\n account: AccountInterface,\n params: CreateListingParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { nftContract, tokenId, price, currency = DEFAULT_CURRENCY, durationSeconds } = params;\n const { contract, provider } = makeContract(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(price, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const startTime = now + 300;\n const endTime = now + durationSeconds;\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n\n const orderParams = {\n offerer: account.address,\n offer: {\n item_type: \"ERC721\",\n token: nftContract,\n identifier_or_criteria: tokenId,\n start_amount: \"1\",\n end_amount: \"1\",\n },\n consideration: {\n item_type: \"ERC20\",\n token: token.address,\n identifier_or_criteria: \"0\",\n start_amount: priceWei,\n end_amount: priceWei,\n recipient: account.address,\n },\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const chainId = getChainId(config);\n const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId)) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const registerPayload = stringifyBigInts({\n parameters: {\n ...orderParams,\n offer: {\n ...orderParams.offer,\n item_type: shortString.encodeShortString(orderParams.offer.item_type),\n },\n consideration: {\n ...orderParams.consideration,\n item_type: shortString.encodeShortString(orderParams.consideration.item_type),\n },\n },\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const tokenIdUint256 = cairo.uint256(tokenId);\n\n // Check approval status before adding approve call\n let isAlreadyApproved = false;\n try {\n const result = await provider.callContract({\n contractAddress: nftContract,\n entrypoint: \"get_approved\",\n calldata: [tokenIdUint256.low.toString(), tokenIdUint256.high.toString()],\n });\n isAlreadyApproved =\n BigInt(result[0]).toString() === BigInt(config.marketplaceContract).toString();\n } catch {\n // Cannot check โ€” include approve to be safe\n }\n\n const registerCall = contract.populate(\"register_order\", [registerPayload]);\n const calls = isAlreadyApproved\n ? [registerCall]\n : [\n {\n contractAddress: nftContract,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n tokenIdUint256.low.toString(),\n tokenIdUint256.high.toString(),\n ],\n },\n registerCall,\n ];\n\n try {\n const tx = await account.execute(calls);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create listing\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Make an offer โ€” offerer offers ERC20, asks for ERC721.\n */\nexport async function makeOffer(\n account: AccountInterface,\n params: MakeOfferParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { nftContract, tokenId, price, currency = DEFAULT_CURRENCY, durationSeconds } = params;\n const { contract, provider } = makeContract(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(price, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const startTime = now + 300;\n const endTime = now + durationSeconds;\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n\n const orderParams = {\n offerer: account.address,\n offer: {\n item_type: \"ERC20\",\n token: token.address,\n identifier_or_criteria: \"0\",\n start_amount: priceWei,\n end_amount: priceWei,\n },\n consideration: {\n item_type: \"ERC721\",\n token: nftContract,\n identifier_or_criteria: tokenId,\n start_amount: \"1\",\n end_amount: \"1\",\n recipient: account.address,\n },\n start_time: startTime.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const chainId = getChainId(config);\n const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId)) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const registerPayload = stringifyBigInts({\n parameters: {\n ...orderParams,\n offer: {\n ...orderParams.offer,\n item_type: shortString.encodeShortString(orderParams.offer.item_type),\n },\n consideration: {\n ...orderParams.consideration,\n item_type: shortString.encodeShortString(orderParams.consideration.item_type),\n },\n },\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const amountUint256 = cairo.uint256(priceWei);\n const approveCall = {\n contractAddress: token.address,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n amountUint256.low.toString(),\n amountUint256.high.toString(),\n ],\n };\n\n const registerCall = contract.populate(\"register_order\", [registerPayload]);\n\n try {\n const tx = await account.execute([approveCall, registerCall]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to make offer\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Fulfill (buy) a single order.\n */\nexport async function fulfillOrder(\n account: AccountInterface,\n params: FulfillOrderParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n const { contract, provider } = makeContract(config);\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const fulfillmentParams = {\n order_hash: orderHash,\n fulfiller: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n buildFulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const call = contract.populate(\"fulfill_order\", [fulfillPayload]);\n\n try {\n const tx = await account.execute(call);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to fulfill order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Cancel an order.\n */\nexport async function cancelOrder(\n account: AccountInterface,\n params: CancelOrderParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n const { contract, provider } = makeContract(config);\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const cancelParams = {\n order_hash: orderHash,\n offerer: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n buildCancellationTypedData(cancelParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const cancelRequest = stringifyBigInts({\n cancelation: cancelParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const call = contract.populate(\"cancel_order\", [cancelRequest]);\n\n try {\n const tx = await account.execute(call);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to cancel order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/** Serialize a string as Cairo ByteArray calldata felts. */\nfunction encodeByteArray(str: string): string[] {\n const ba = byteArray.byteArrayFromString(str);\n return [\n ba.data.length.toString(),\n ...ba.data.map((d) => num.toHex(d)),\n num.toHex(ba.pending_word),\n ba.pending_word_len.toString(),\n ];\n}\n\n/**\n * Mint an NFT into a Medialane collection.\n * Calls `mint(collection_id, recipient, token_uri)` โ€” no SNIP-12 signing required.\n */\nexport async function mint(\n account: AccountInterface,\n params: MintParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { collectionId, recipient, tokenUri, collectionContract } = params;\n const provider = getProvider(config);\n const contractAddress = collectionContract ?? config.collectionContract;\n\n const id = cairo.uint256(collectionId);\n const calldata = [id.low.toString(), id.high.toString(), recipient, ...encodeByteArray(tokenUri)];\n\n try {\n const tx = await account.execute([{ contractAddress, entrypoint: \"mint\", calldata }]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to mint NFT\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Create a new collection on the Medialane collection registry.\n * Calls `create_collection(name, symbol, base_uri)` โ€” no SNIP-12 signing required.\n * Returns the transaction hash; listen for the CollectionCreated event to get the collection_id.\n */\nexport async function createCollection(\n account: AccountInterface,\n params: CreateCollectionParams,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { name, symbol, baseUri, collectionContract } = params;\n const provider = getProvider(config);\n const contractAddress = collectionContract ?? config.collectionContract;\n\n const calldata = [\n ...encodeByteArray(name),\n ...encodeByteArray(symbol),\n ...encodeByteArray(baseUri),\n ];\n\n try {\n const tx = await account.execute([{ contractAddress, entrypoint: \"create_collection\", calldata }]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create collection\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Checkout a cart of multiple orders in a single atomic multicall.\n * Prompts wallet signatures sequentially (one per item), then executes\n * all approve + fulfill calls atomically.\n */\nexport async function checkoutCart(\n account: AccountInterface,\n items: CartItem[],\n config: ResolvedConfig\n): Promise<TxResult> {\n if (items.length === 0) throw new MedialaneError(\"Cart is empty\", \"INVALID_PARAMS\");\n\n const { contract, provider } = makeContract(config);\n\n // Group total ERC20 approval amounts by token\n const tokenTotals = new Map<string, bigint>();\n for (const item of items) {\n const prev = tokenTotals.get(item.considerationToken) ?? 0n;\n tokenTotals.set(item.considerationToken, prev + BigInt(item.considerationAmount));\n }\n\n const approveCalls = Array.from(tokenTotals.entries()).map(([tokenAddr, totalWei]) => {\n const amount = cairo.uint256(totalWei.toString());\n return {\n contractAddress: tokenAddr,\n entrypoint: \"approve\",\n calldata: [\n config.marketplaceContract,\n amount.low.toString(),\n amount.high.toString(),\n ],\n };\n });\n\n const currentNonce = await contract.nonces(account.address);\n const baseNonce = BigInt(currentNonce.toString());\n const chainId = getChainId(config);\n\n const fulfillCalls = [];\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const nonce = (baseNonce + BigInt(i)).toString();\n\n const fulfillmentParams = {\n order_hash: item.orderHash,\n fulfiller: account.address,\n nonce,\n };\n\n const typedData = stringifyBigInts(\n buildFulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n fulfillCalls.push(contract.populate(\"fulfill_order\", [fulfillPayload]));\n }\n\n try {\n const tx = await account.execute([...approveCalls, ...fulfillCalls]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Cart checkout failed\", \"TRANSACTION_FAILED\", err);\n }\n}\n","import { type AccountInterface, type TypedData, constants } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport type {\n CreateListingParams,\n MakeOfferParams,\n FulfillOrderParams,\n CancelOrderParams,\n CartItem,\n MintParams,\n CreateCollectionParams,\n TxResult,\n} from \"../types/marketplace.js\";\nimport {\n buildOrderTypedData,\n buildFulfillmentTypedData,\n buildCancellationTypedData,\n} from \"./signing.js\";\nimport {\n createListing,\n makeOffer,\n fulfillOrder,\n cancelOrder,\n checkoutCart,\n mint,\n createCollection,\n} from \"./orders.js\";\n\nexport { MedialaneError } from \"./orders.js\";\n\nexport class MarketplaceModule {\n constructor(private readonly config: ResolvedConfig) {}\n\n // โ”€โ”€โ”€ Writes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n createListing(account: AccountInterface, params: CreateListingParams): Promise<TxResult> {\n return createListing(account, params, this.config);\n }\n\n makeOffer(account: AccountInterface, params: MakeOfferParams): Promise<TxResult> {\n return makeOffer(account, params, this.config);\n }\n\n fulfillOrder(account: AccountInterface, params: FulfillOrderParams): Promise<TxResult> {\n return fulfillOrder(account, params, this.config);\n }\n\n cancelOrder(account: AccountInterface, params: CancelOrderParams): Promise<TxResult> {\n return cancelOrder(account, params, this.config);\n }\n\n checkoutCart(account: AccountInterface, items: CartItem[]): Promise<TxResult> {\n return checkoutCart(account, items, this.config);\n }\n\n mint(account: AccountInterface, params: MintParams): Promise<TxResult> {\n return mint(account, params, this.config);\n }\n\n createCollection(account: AccountInterface, params: CreateCollectionParams): Promise<TxResult> {\n return createCollection(account, params, this.config);\n }\n\n // โ”€โ”€โ”€ Typed data builders (for ChipiPay / custom signing flows) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n buildListingTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildOrderTypedData(params, chainId);\n }\n\n buildFulfillmentTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildFulfillmentTypedData(params, chainId);\n }\n\n buildCancellationTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return buildCancellationTypedData(params, chainId);\n }\n}\n","import { type TypedData, TypedDataRevision, constants } from \"starknet\";\n\nconst STARKNET_DOMAIN = [\n { name: \"name\", type: \"shortstring\" },\n { name: \"version\", type: \"shortstring\" },\n { name: \"chainId\", type: \"shortstring\" },\n { name: \"revision\", type: \"shortstring\" },\n];\n\nfunction domain1155(chainId: constants.StarknetChainId) {\n return {\n name: \"Medialane1155\",\n version: \"1\",\n chainId,\n revision: TypedDataRevision.ACTIVE,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderParameters struct.\n *\n * Differs from the ERC-721 Medialane signing:\n * - Domain name is \"Medialane1155\"\n * - OrderParameters is flat (no nested OfferItem / ConsiderationItem structs)\n */\nexport function build1155OrderTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderParameters\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderParameters: [\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nft_contract\", type: \"ContractAddress\" },\n { name: \"token_id\", type: \"felt\" },\n { name: \"amount\", type: \"felt\" },\n { name: \"payment_token\", type: \"ContractAddress\" },\n { name: \"price_per_unit\", type: \"felt\" },\n { name: \"start_time\", type: \"felt\" },\n { name: \"end_time\", type: \"felt\" },\n { name: \"salt\", type: \"felt\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderFulfillment struct.\n */\nexport function build1155FulfillmentTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderFulfillment\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderFulfillment: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"fulfiller\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n\n/**\n * Build SNIP-12 typed data for signing an ERC-1155 OrderCancellation struct.\n */\nexport function build1155CancellationTypedData(\n message: Record<string, unknown>,\n chainId: constants.StarknetChainId\n): TypedData {\n return {\n domain: domain1155(chainId),\n primaryType: \"OrderCancellation\",\n types: {\n StarknetDomain: STARKNET_DOMAIN,\n OrderCancellation: [\n { name: \"order_hash\", type: \"felt\" },\n { name: \"offerer\", type: \"ContractAddress\" },\n { name: \"nonce\", type: \"felt\" },\n ],\n },\n message,\n };\n}\n","import {\n type AccountInterface,\n type Abi,\n type TypedData,\n Contract,\n RpcProvider,\n cairo,\n num,\n constants,\n} from \"starknet\";\nimport { Medialane1155ABI } from \"../abis.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { SUPPORTED_TOKENS, DEFAULT_CURRENCY } from \"../constants.js\";\nimport { MedialaneError } from \"../marketplace/orders.js\";\nimport type {\n CreateListing1155Params,\n FulfillOrder1155Params,\n CancelOrder1155Params,\n TxResult,\n} from \"../types/marketplace.js\";\nimport { stringifyBigInts } from \"../utils/bigint.js\";\nimport { parseAmount } from \"../utils/token.js\";\nimport {\n build1155OrderTypedData,\n build1155FulfillmentTypedData,\n build1155CancellationTypedData,\n} from \"./signing.js\";\n\nfunction toSignatureArray(sig: unknown): string[] {\n if (Array.isArray(sig)) return sig as string[];\n const s = sig as { r: bigint | string; s: bigint | string };\n return [s.r.toString(), s.s.toString()];\n}\n\nfunction getChainId(_config: ResolvedConfig): constants.StarknetChainId {\n return constants.StarknetChainId.SN_MAIN;\n}\n\nconst _providerCache = new WeakMap<ResolvedConfig, RpcProvider>();\nconst _contractCache = new WeakMap<ResolvedConfig, Contract>();\n\nfunction getProvider(config: ResolvedConfig): RpcProvider {\n let p = _providerCache.get(config);\n if (!p) {\n p = new RpcProvider({ nodeUrl: config.rpcUrl });\n _providerCache.set(config, p);\n }\n return p;\n}\n\nfunction getContract(config: ResolvedConfig): Contract {\n let c = _contractCache.get(config);\n if (!c) {\n const provider = getProvider(config);\n c = new Contract(\n Medialane1155ABI as unknown as Abi,\n config.marketplace1155Contract,\n provider\n );\n _contractCache.set(config, c);\n }\n return c;\n}\n\nfunction resolveToken(currency: string) {\n const token = SUPPORTED_TOKENS.find(\n (t) => t.symbol === currency.toUpperCase() || t.address.toLowerCase() === currency.toLowerCase()\n );\n if (!token) throw new MedialaneError(`Unsupported currency: ${currency}`, \"INVALID_PARAMS\");\n return token;\n}\n\n/**\n * Create an ERC-1155 listing on Medialane1155.\n *\n * The offerer signs `OrderParameters` off-chain via SNIP-12, then the signed\n * order is submitted to `register_order`. The ERC-1155 token approval\n * (`set_approval_for_all`) must be granted before the buyer calls `fulfill_order`.\n */\nexport async function createListing1155(\n account: AccountInterface,\n params: CreateListing1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const {\n nftContract,\n tokenId,\n amount,\n pricePerUnit,\n currency = DEFAULT_CURRENCY,\n durationSeconds,\n } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n\n const token = resolveToken(currency);\n const priceWei = parseAmount(pricePerUnit, token.decimals);\n\n const now = Math.floor(Date.now() / 1000);\n const endTime = now + durationSeconds;\n\n const saltBytes = new Uint8Array(4);\n crypto.getRandomValues(saltBytes);\n const salt = new DataView(saltBytes.buffer).getUint32(0).toString();\n\n const currentNonce = await contract.nonces(account.address);\n const chainId = getChainId(config);\n\n const orderParams = {\n offerer: account.address,\n nft_contract: nftContract,\n token_id: tokenId,\n amount,\n payment_token: token.address,\n price_per_unit: priceWei,\n start_time: now.toString(),\n end_time: endTime.toString(),\n salt,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155OrderTypedData(orderParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const orderPayload = stringifyBigInts({\n parameters: orderParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n // Check if the marketplace is already approved to transfer the ERC-1155 tokens.\n let isApproved = false;\n try {\n const result = await provider.callContract({\n contractAddress: nftContract,\n entrypoint: \"is_approved_for_all\",\n calldata: [account.address, config.marketplace1155Contract],\n });\n // Returns a felt252: 1 = true, 0 = false\n isApproved = BigInt(result[0]) === 1n;\n } catch {\n // Cannot check โ€” include approval call to be safe\n }\n\n const registerCall = contract.populate(\"register_order\", [orderPayload]);\n const calls = isApproved\n ? [registerCall]\n : [\n {\n contractAddress: nftContract,\n entrypoint: \"set_approval_for_all\",\n calldata: [config.marketplace1155Contract, \"1\"],\n },\n registerCall,\n ];\n\n try {\n const tx = await account.execute(calls);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to create ERC-1155 listing\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Fulfill (buy) an ERC-1155 order.\n *\n * The fulfiller signs `OrderFulfillment` off-chain, then the signed\n * fulfillment is submitted to `fulfill_order`. The fulfiller must have\n * approved the Medialane1155 contract to spend `pricePerUnit ร— amount`\n * of the payment token before calling this.\n */\nexport async function fulfillOrder1155(\n account: AccountInterface,\n params: FulfillOrder1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash, paymentToken, totalPrice } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n const chainId = getChainId(config);\n\n const currentNonce = await contract.nonces(account.address);\n\n const fulfillmentParams = {\n order_hash: orderHash,\n fulfiller: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155FulfillmentTypedData(fulfillmentParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const fulfillPayload = stringifyBigInts({\n fulfillment: fulfillmentParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const totalPriceU256 = cairo.uint256(totalPrice);\n const approveCall = {\n contractAddress: paymentToken,\n entrypoint: \"approve\",\n calldata: [\n config.marketplace1155Contract,\n totalPriceU256.low.toString(),\n totalPriceU256.high.toString(),\n ],\n };\n\n const fulfillCall = contract.populate(\"fulfill_order\", [fulfillPayload]);\n\n try {\n const tx = await account.execute([approveCall, fulfillCall]);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to fulfill ERC-1155 order\", \"TRANSACTION_FAILED\", err);\n }\n}\n\n/**\n * Cancel an ERC-1155 order.\n *\n * Only the original offerer can cancel. The offerer signs `OrderCancellation`\n * off-chain, then the signed cancellation is submitted to `cancel_order`.\n */\nexport async function cancelOrder1155(\n account: AccountInterface,\n params: CancelOrder1155Params,\n config: ResolvedConfig\n): Promise<TxResult> {\n const { orderHash } = params;\n\n const contract = getContract(config);\n const provider = getProvider(config);\n const chainId = getChainId(config);\n\n const currentNonce = await contract.nonces(account.address);\n\n const cancelParams = {\n order_hash: orderHash,\n offerer: account.address,\n nonce: currentNonce.toString(),\n };\n\n const typedData = stringifyBigInts(\n build1155CancellationTypedData(cancelParams, chainId)\n ) as TypedData;\n\n const signature = await account.signMessage(typedData);\n const signatureArray = toSignatureArray(signature);\n\n const cancelPayload = stringifyBigInts({\n cancelation: cancelParams,\n signature: signatureArray,\n }) as Record<string, unknown>;\n\n const cancelCall = contract.populate(\"cancel_order\", [cancelPayload]);\n\n try {\n const tx = await account.execute(cancelCall);\n await provider.waitForTransaction(tx.transaction_hash);\n return { txHash: tx.transaction_hash };\n } catch (err) {\n throw new MedialaneError(\"Failed to cancel ERC-1155 order\", \"TRANSACTION_FAILED\", err);\n }\n}\n","import { type AccountInterface, type TypedData, constants } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport type {\n CreateListing1155Params,\n FulfillOrder1155Params,\n CancelOrder1155Params,\n TxResult,\n} from \"../types/marketplace.js\";\nimport {\n build1155OrderTypedData,\n build1155FulfillmentTypedData,\n build1155CancellationTypedData,\n} from \"./signing.js\";\nimport {\n createListing1155,\n fulfillOrder1155,\n cancelOrder1155,\n} from \"./orders.js\";\n\nexport class Medialane1155Module {\n constructor(private readonly config: ResolvedConfig) {}\n\n // โ”€โ”€โ”€ Writes โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Create an ERC-1155 sell listing.\n * Optionally grants `set_approval_for_all` if not already approved.\n */\n createListing(account: AccountInterface, params: CreateListing1155Params): Promise<TxResult> {\n return createListing1155(account, params, this.config);\n }\n\n /**\n * Fulfill (buy) an ERC-1155 listing.\n * Approves the payment token then calls `fulfill_order` atomically.\n */\n fulfillOrder(account: AccountInterface, params: FulfillOrder1155Params): Promise<TxResult> {\n return fulfillOrder1155(account, params, this.config);\n }\n\n /**\n * Cancel an ERC-1155 listing (offerer only).\n */\n cancelOrder(account: AccountInterface, params: CancelOrder1155Params): Promise<TxResult> {\n return cancelOrder1155(account, params, this.config);\n }\n\n // โ”€โ”€โ”€ Typed data builders (for ChipiPay / custom signing flows) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n buildListingTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155OrderTypedData(params, chainId);\n }\n\n buildFulfillmentTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155FulfillmentTypedData(params, chainId);\n }\n\n buildCancellationTypedData(\n params: Record<string, unknown>,\n chainId: constants.StarknetChainId\n ): TypedData {\n return build1155CancellationTypedData(params, chainId);\n }\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed 64-character hex string.\n */\nexport function normalizeAddress(address: string): string {\n const hex = address.replace(/^0x/, \"\").toLowerCase();\n return \"0x\" + hex.padStart(64, \"0\");\n}\n\n/**\n * Shorten an address to \"0x1234...abcd\" format.\n */\nexport function shortenAddress(address: string, chars = 4): string {\n const norm = normalizeAddress(address);\n return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;\n}\n","import { MedialaneApiError } from \"../api/client.js\";\n\nexport interface RetryOptions {\n maxAttempts?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_BASE_DELAY_MS = 300;\nconst DEFAULT_MAX_DELAY_MS = 5000;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n opts?: RetryOptions\n): Promise<T> {\n const maxAttempts = opts?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const baseDelayMs = opts?.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;\n const maxDelayMs = opts?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n\n // Don't retry 4xx errors (client errors) โ€” they won't succeed on retry\n if (err instanceof MedialaneApiError && err.status < 500) {\n throw err;\n }\n\n // Retry on 5xx or network errors (TypeError from fetch)\n const isRetryable =\n (err instanceof MedialaneApiError && err.status >= 500) ||\n err instanceof TypeError;\n\n if (!isRetryable || attempt === maxAttempts - 1) {\n throw err;\n }\n\n // Exponential backoff with jitter\n const jitter = Math.random() * baseDelayMs;\n const delay = Math.min(baseDelayMs * Math.pow(2, attempt) + jitter, maxDelayMs);\n await sleep(delay);\n }\n }\n\n throw lastError;\n}\n","import { normalizeAddress } from \"../utils/address.js\";\nimport type { MedialaneErrorCode } from \"../types/errors.js\";\nimport { withRetry, type RetryOptions } from \"../utils/retry.js\";\nimport type {\n ApiOrder,\n ApiOrdersQuery,\n ApiCounterOffersQuery,\n ApiToken,\n ApiCollection,\n ApiCollectionProfile,\n ApiCreatorProfile,\n ApiCreatorListResult,\n ApiCollectionClaim,\n ApiUserWallet,\n ApiActivity,\n ApiActivitiesQuery,\n ApiComment,\n ApiRemixOffer,\n ApiRemixOffersQuery,\n ApiPublicRemix,\n ApiSearchResult,\n ApiIntent,\n ApiIntentCreated,\n ApiMetadataSignedUrl,\n ApiMetadataUpload,\n ApiPortalMe,\n ApiPortalKey,\n ApiPortalKeyCreated,\n ApiUsageDay,\n ApiWebhookEndpoint,\n ApiWebhookCreated,\n CreateWebhookParams,\n CreateListingIntentParams,\n MakeOfferIntentParams,\n FulfillOrderIntentParams,\n CancelOrderIntentParams,\n CreateMintIntentParams,\n CreateCollectionIntentParams,\n CreateCounterOfferIntentParams,\n CreateRemixOfferParams,\n AutoRemixOfferParams,\n ConfirmSelfRemixParams,\n ConfirmRemixOfferParams,\n ApiResponse,\n CollectionSort,\n CollectionSource,\n PopClaimStatus,\n PopBatchEligibilityItem,\n DropMintStatus,\n} from \"../types/api.js\";\n\nfunction deriveErrorCode(status: number): MedialaneErrorCode {\n if (status === 404) return \"TOKEN_NOT_FOUND\";\n if (status === 429) return \"RATE_LIMITED\";\n if (status === 410) return \"INTENT_EXPIRED\";\n if (status === 401 || status === 403) return \"UNAUTHORIZED\";\n if (status === 400) return \"INVALID_PARAMS\";\n return \"UNKNOWN\";\n}\n\nexport class MedialaneApiError extends Error {\n readonly code: MedialaneErrorCode;\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n this.code = deriveErrorCode(status);\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n private readonly retryOptions: RetryOptions | undefined;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string,\n retryOptions?: RetryOptions\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\n this.retryOptions = retryOptions;\n }\n\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}${path}`;\n const headers: Record<string, string> = { ...this.baseHeaders };\n if (!(init?.body instanceof FormData)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n const res = await withRetry(async () => {\n const response = await fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!response.ok) {\n const text = await response.text().catch(() => response.statusText);\n let message = text;\n try {\n const body = JSON.parse(text) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use raw text\n }\n throw new MedialaneApiError(response.status, message);\n }\n return response;\n }, this.retryOptions);\n return res.json() as Promise<T>;\n }\n\n private get<T>(path: string): Promise<T> {\n return this.request<T>(path, { method: \"GET\" });\n }\n\n private post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body: JSON.stringify(body) });\n }\n\n private patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body: JSON.stringify(body) });\n }\n\n private del<T>(path: string): Promise<T> {\n return this.request<T>(path, { method: \"DELETE\" });\n }\n\n // โ”€โ”€โ”€ Orders โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getOrders(query: ApiOrdersQuery = {}): Promise<ApiResponse<ApiOrder[]>> {\n const params = new URLSearchParams();\n if (query.status) params.set(\"status\", query.status);\n if (query.collection) params.set(\"collection\", query.collection);\n if (query.currency) params.set(\"currency\", query.currency);\n if (query.sort) params.set(\"sort\", query.sort);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n if (query.offerer) params.set(\"offerer\", normalizeAddress(query.offerer));\n if (query.minPrice) params.set(\"minPrice\", query.minPrice);\n if (query.maxPrice) params.set(\"maxPrice\", query.maxPrice);\n const qs = params.toString();\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders${qs ? `?${qs}` : \"\"}`);\n }\n\n getOrder(orderHash: string): Promise<ApiResponse<ApiOrder>> {\n return this.get<ApiResponse<ApiOrder>>(`/v1/orders/${orderHash}`);\n }\n\n getActiveOrdersForToken(contract: string, tokenId: string): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);\n }\n\n getOrdersByUser(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(\n `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Tokens โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getToken(contract: string, tokenId: string, wait = false): Promise<ApiResponse<ApiToken>> {\n return this.get<ApiResponse<ApiToken>>(\n `/v1/tokens/${contract}/${tokenId}${wait ? \"?wait=true\" : \"\"}`\n );\n }\n\n getTokensByOwner(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n getTokenHistory(\n contract: string,\n tokenId: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/tokens/${contract}/${tokenId}/history?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Collections โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getCollections(\n page = 1,\n limit = 20,\n isKnown?: boolean,\n sort?: CollectionSort,\n source?: CollectionSource\n ): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n if (sort) params.set(\"sort\", sort);\n if (source) params.set(\"source\", source);\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${normalizeAddress(contract)}`);\n }\n\n getCollectionTokens(\n contract: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Activities โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getActivities(query: ApiActivitiesQuery = {}): Promise<ApiResponse<ApiActivity[]>> {\n const params = new URLSearchParams();\n if (query.type) params.set(\"type\", query.type);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiActivity[]>>(`/v1/activities${qs ? `?${qs}` : \"\"}`);\n }\n\n getActivitiesByAddress(\n address: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // โ”€โ”€โ”€ Comments โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getTokenComments(\n contract: string,\n tokenId: string,\n opts: { page?: number; limit?: number } = {}\n ): Promise<ApiResponse<ApiComment[]>> {\n const params = new URLSearchParams();\n if (opts.page !== undefined) params.set(\"page\", String(opts.page));\n if (opts.limit !== undefined) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiComment[]>>(\n `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/comments${qs ? `?${qs}` : \"\"}`\n );\n }\n\n // โ”€โ”€โ”€ Search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n search(q: string, limit = 10): Promise<ApiResponse<ApiSearchResult> & { query: string }> {\n const params = new URLSearchParams({ q, limit: String(limit) });\n return this.get<ApiResponse<ApiSearchResult> & { query: string }>(\n `/v1/search?${params.toString()}`\n );\n }\n\n // โ”€โ”€โ”€ Intents โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n createListingIntent(\n params: CreateListingIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/listing\", params);\n }\n\n createOfferIntent(\n params: MakeOfferIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/offer\", params);\n }\n\n createFulfillIntent(\n params: FulfillOrderIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/fulfill\", params);\n }\n\n createCancelIntent(\n params: CancelOrderIntentParams\n ): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/cancel\", params);\n }\n\n getIntent(id: string): Promise<ApiResponse<ApiIntent>> {\n return this.get<ApiResponse<ApiIntent>>(`/v1/intents/${id}`);\n }\n\n submitIntentSignature(id: string, signature: string[]): Promise<ApiResponse<ApiIntent>> {\n return this.patch<ApiResponse<ApiIntent>>(`/v1/intents/${id}/signature`, { signature });\n }\n\n confirmIntent(id: string, txHash: string): Promise<ApiResponse<ApiIntent>> {\n return this.patch<ApiResponse<ApiIntent>>(`/v1/intents/${id}/confirm`, { txHash });\n }\n\n createMintIntent(params: CreateMintIntentParams): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/mint\", params);\n }\n\n createCollectionIntent(params: CreateCollectionIntentParams): Promise<ApiResponse<ApiIntentCreated>> {\n return this.post<ApiResponse<ApiIntentCreated>>(\"/v1/intents/create-collection\", params);\n }\n\n /**\n * Create a counter-offer intent. The seller proposes a new price in response\n * to a buyer's active bid. clerkToken is optional โ€” the endpoint authenticates\n * via the tenant API key; pass a Clerk JWT only if your backend requires it.\n */\n createCounterOfferIntent(\n params: CreateCounterOfferIntentParams,\n clerkToken?: string\n ): Promise<ApiResponse<ApiIntentCreated>> {\n const extraHeaders: Record<string, string> = clerkToken ? { \"Authorization\": `Bearer ${clerkToken}` } : {};\n return this.request<ApiResponse<ApiIntentCreated>>(\"/v1/intents/counter-offer\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: extraHeaders,\n });\n }\n\n /**\n * Fetch counter-offers. Pass `originalOrderHash` (buyer view) or\n * `sellerAddress` (seller view) โ€” at least one is required.\n */\n getCounterOffers(query: ApiCounterOffersQuery): Promise<ApiResponse<ApiOrder[]>> {\n const params = new URLSearchParams();\n if (query.originalOrderHash) params.set(\"originalOrderHash\", query.originalOrderHash);\n if (query.sellerAddress) params.set(\"sellerAddress\", query.sellerAddress);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/counter-offers?${params}`);\n }\n\n // โ”€โ”€โ”€ Metadata โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getMetadataSignedUrl(): Promise<ApiResponse<ApiMetadataSignedUrl>> {\n return this.get<ApiResponse<ApiMetadataSignedUrl>>(\"/v1/metadata/signed-url\");\n }\n\n uploadMetadata(metadata: Record<string, unknown>): Promise<ApiResponse<ApiMetadataUpload>> {\n return this.post<ApiResponse<ApiMetadataUpload>>(\"/v1/metadata/upload\", metadata);\n }\n\n resolveMetadata(uri: string): Promise<ApiResponse<unknown>> {\n const params = new URLSearchParams({ uri });\n return this.get<ApiResponse<unknown>>(`/v1/metadata/resolve?${params.toString()}`);\n }\n\n uploadFile(file: File): Promise<ApiResponse<ApiMetadataUpload>> {\n const formData = new FormData();\n formData.append(\"file\", file);\n // Content-Type is intentionally omitted โ€” request() detects FormData and\n // lets the runtime set multipart/form-data with the correct boundary.\n return this.request<ApiResponse<ApiMetadataUpload>>(\"/v1/metadata/upload-file\", {\n method: \"POST\",\n body: formData,\n });\n }\n\n // โ”€โ”€โ”€ Portal (tenant self-service) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getMe(): Promise<ApiResponse<ApiPortalMe>> {\n return this.get<ApiResponse<ApiPortalMe>>(\"/v1/portal/me\");\n }\n\n getApiKeys(): Promise<ApiResponse<ApiPortalKey[]>> {\n return this.get<ApiResponse<ApiPortalKey[]>>(\"/v1/portal/keys\");\n }\n\n createApiKey(label?: string): Promise<ApiResponse<ApiPortalKeyCreated>> {\n return this.post<ApiResponse<ApiPortalKeyCreated>>(\"/v1/portal/keys\", label ? { label } : {});\n }\n\n deleteApiKey(id: string): Promise<ApiResponse<{ id: string; status: string }>> {\n return this.del<ApiResponse<{ id: string; status: string }>>(`/v1/portal/keys/${id}`);\n }\n\n getUsage(): Promise<ApiResponse<ApiUsageDay[]>> {\n return this.get<ApiResponse<ApiUsageDay[]>>(\"/v1/portal/usage\");\n }\n\n getWebhooks(): Promise<ApiResponse<ApiWebhookEndpoint[]>> {\n return this.get<ApiResponse<ApiWebhookEndpoint[]>>(\"/v1/portal/webhooks\");\n }\n\n createWebhook(params: CreateWebhookParams): Promise<ApiResponse<ApiWebhookCreated>> {\n return this.post<ApiResponse<ApiWebhookCreated>>(\"/v1/portal/webhooks\", params);\n }\n\n deleteWebhook(id: string): Promise<ApiResponse<{ id: string; status: string }>> {\n return this.del<ApiResponse<{ id: string; status: string }>>(\n `/v1/portal/webhooks/${id}`\n );\n }\n\n // โ”€โ”€โ”€ Collection Claims โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Path 1: On-chain auto claim. Sends both x-api-key (tenant auth) and\n * Authorization: Bearer (Clerk JWT) simultaneously.\n */\n async claimCollection(\n contractAddress: string,\n walletAddress: string,\n clerkToken: string\n ): Promise<{ verified: boolean; collection?: ApiCollection; reason?: string }> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/claim`;\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify({ contractAddress, walletAddress }),\n });\n return res.json();\n }\n\n /**\n * Path 3: Manual off-chain claim request (email-based).\n */\n requestCollectionClaim(params: {\n contractAddress: string;\n walletAddress?: string;\n email: string;\n notes?: string;\n }): Promise<{ claim: ApiCollectionClaim }> {\n return this.request(\"/v1/collections/claim/request\", {\n method: \"POST\",\n body: JSON.stringify(params),\n });\n }\n\n // โ”€โ”€โ”€ Collection Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n async getCollectionProfile(contractAddress: string): Promise<ApiCollectionProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /**\n * Update collection profile. Requires Clerk JWT for ownership check.\n */\n async updateCollectionProfile(\n contractAddress: string,\n data: Partial<Omit<ApiCollectionProfile, \"contractAddress\" | \"chain\" | \"updatedBy\" | \"updatedAt\">>,\n clerkToken: string\n ): Promise<ApiCollectionProfile> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;\n const res = await fetch(url, {\n method: \"PATCH\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify(data),\n });\n return res.json();\n }\n\n async getGatedContent(\n contractAddress: string,\n clerkToken: string\n ): Promise<{ title: string; url: string; type: string } | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/collections/${normalizeAddress(contractAddress)}/gated-content`;\n const res = await fetch(url, {\n headers: { ...this.baseHeaders, \"Authorization\": `Bearer ${clerkToken}` },\n });\n if (res.status === 403 || res.status === 404) return null;\n return res.json();\n }\n\n // โ”€โ”€โ”€ Creator Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /** List all creators with an approved username. */\n async getCreators(opts: { search?: string; page?: number; limit?: number } = {}): Promise<ApiCreatorListResult> {\n const params = new URLSearchParams();\n if (opts.search) params.set(\"search\", opts.search);\n if (opts.page) params.set(\"page\", String(opts.page));\n if (opts.limit) params.set(\"limit\", String(opts.limit));\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators?${params}`;\n const res = await fetch(url, { headers: this.baseHeaders });\n return res.json();\n }\n\n async getCreatorProfile(walletAddress: string): Promise<ApiCreatorProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /** Resolve a username slug to a creator profile (public). */\n async getCreatorByUsername(username: string): Promise<ApiCreatorProfile | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/by-username/${encodeURIComponent(username.toLowerCase().trim())}`;\n const res = await fetch(url, { headers: this.baseHeaders });\n if (res.status === 404) return null;\n return res.json();\n }\n\n /**\n * Update creator profile. Requires Clerk JWT; wallet must match authenticated user.\n */\n async updateCreatorProfile(\n walletAddress: string,\n data: Partial<Omit<ApiCreatorProfile, \"walletAddress\" | \"chain\" | \"updatedAt\">>,\n clerkToken: string\n ): Promise<ApiCreatorProfile> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;\n const res = await fetch(url, {\n method: \"PATCH\",\n headers: {\n \"x-api-key\": this.baseHeaders[\"x-api-key\"] ?? \"\",\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n body: JSON.stringify(data),\n });\n return res.json();\n }\n\n // โ”€โ”€โ”€ User Wallet โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Upsert the authenticated user's wallet address in the backend DB.\n * Call after onboarding when ChipiPay confirms the wallet address.\n * Requires Clerk JWT; no tenant API key needed.\n */\n async upsertMyWallet(clerkToken: string): Promise<ApiUserWallet> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/users/me`;\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${clerkToken}`,\n },\n });\n return res.json();\n }\n\n /**\n * Get the authenticated user's stored wallet address from the backend DB.\n * Returns null if the user has not completed onboarding yet.\n * Requires Clerk JWT; no tenant API key needed.\n */\n async getMyWallet(clerkToken: string): Promise<ApiUserWallet | null> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/users/me`;\n const res = await fetch(url, {\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n if (res.status === 404) return null;\n return res.json();\n }\n\n // โ”€โ”€โ”€ Remix Licensing โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n /**\n * Get public remixes of a token (open to everyone).\n */\n getTokenRemixes(\n contract: string,\n tokenId: string,\n opts: { page?: number; limit?: number } = {}\n ): Promise<ApiResponse<ApiPublicRemix[]>> {\n const params = new URLSearchParams();\n if (opts.page !== undefined) params.set(\"page\", String(opts.page));\n if (opts.limit !== undefined) params.set(\"limit\", String(opts.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiPublicRemix[]>>(\n `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/remixes${qs ? `?${qs}` : \"\"}`\n );\n }\n\n /**\n * Submit a custom remix offer for a token. Requires Clerk JWT.\n */\n submitRemixOffer(\n params: CreateRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Submit an auto remix offer for a token with an open license. Requires Clerk JWT.\n */\n submitAutoRemixOffer(\n params: AutoRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers/auto\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Record a self-remix (owner remixing their own token). Requires Clerk JWT.\n */\n confirmSelfRemix(\n params: ConfirmSelfRemixParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(\"/v1/remix-offers/self/confirm\", {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * List remix offers by role. Requires Clerk JWT.\n * role=\"creator\" โ€” offers where you are the original creator.\n * role=\"requester\" โ€” offers you made.\n */\n async getRemixOffers(\n query: ApiRemixOffersQuery,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer[]>> {\n const params = new URLSearchParams({ role: query.role });\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/remix-offers?${params}`;\n const res = await fetch(url, {\n headers: { ...this.baseHeaders, \"Authorization\": `Bearer ${clerkToken}` },\n });\n return res.json();\n }\n\n /**\n * Get a single remix offer. Clerk JWT optional (price/currency hidden for non-participants).\n */\n async getRemixOffer(id: string, clerkToken?: string): Promise<ApiResponse<ApiRemixOffer>> {\n const url = `${this.baseUrl.replace(/\\/$/, \"\")}/v1/remix-offers/${id}`;\n const headers: Record<string, string> = { ...this.baseHeaders };\n if (clerkToken) headers[\"Authorization\"] = `Bearer ${clerkToken}`;\n const res = await fetch(url, { headers });\n return res.json();\n }\n\n /**\n * Creator approves a remix offer (authorises the requester to mint). Requires Clerk JWT.\n */\n confirmRemixOffer(\n id: string,\n params: ConfirmRemixOfferParams,\n clerkToken: string\n ): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/confirm`, {\n method: \"POST\",\n body: JSON.stringify(params),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Creator rejects a remix offer. Requires Clerk JWT.\n */\n rejectRemixOffer(id: string, clerkToken: string): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/reject`, {\n method: \"POST\",\n body: JSON.stringify({}),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n /**\n * Requester extends the expiry of a pending remix offer by 1โ€“30 days.\n * Requires Clerk JWT.\n */\n extendRemixOffer(id: string, days: number, clerkToken: string): Promise<ApiResponse<ApiRemixOffer>> {\n return this.request<ApiResponse<ApiRemixOffer>>(`/v1/remix-offers/${id}/extend`, {\n method: \"POST\",\n body: JSON.stringify({ days }),\n headers: { \"Authorization\": `Bearer ${clerkToken}` },\n });\n }\n\n // โ”€โ”€โ”€ POP Protocol โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getPopCollections(opts: { page?: number; limit?: number; sort?: CollectionSort } = {}): Promise<ApiResponse<ApiCollection[]>> {\n return this.getCollections(opts.page ?? 1, opts.limit ?? 20, undefined, opts.sort, \"POP_PROTOCOL\");\n }\n\n async getPopEligibility(collection: string, wallet: string): Promise<PopClaimStatus> {\n const res = await this.get<{ data: PopClaimStatus }>(\n `/v1/pop/eligibility/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`\n );\n return res.data;\n }\n\n async getPopEligibilityBatch(collection: string, wallets: string[]): Promise<PopBatchEligibilityItem[]> {\n const params = new URLSearchParams({ wallets: wallets.map(normalizeAddress).join(\",\") });\n const res = await this.get<{ data: PopBatchEligibilityItem[] }>(\n `/v1/pop/eligibility/${normalizeAddress(collection)}?${params}`\n );\n return res.data;\n }\n\n // โ”€โ”€โ”€ Collection Drop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n getDropCollections(opts: { page?: number; limit?: number; sort?: CollectionSort } = {}): Promise<ApiResponse<ApiCollection[]>> {\n return this.getCollections(opts.page ?? 1, opts.limit ?? 20, undefined, opts.sort, \"COLLECTION_DROP\");\n }\n\n async getDropMintStatus(collection: string, wallet: string): Promise<DropMintStatus> {\n const res = await this.get<{ data: DropMintStatus }>(\n `/v1/drop/mint-status/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`\n );\n return res.data;\n }\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { POPCollectionABI, POPFactoryABI } from \"../abis.js\";\nimport { POP_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { CreatePopCollectionParams } from \"../types/services.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport type { CreatePopCollectionParams };\n\nexport class PopService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = POP_FACTORY_CONTRACT_MAINNET;\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(POPCollectionABI as any, normalizeAddress(address), account as any);\n }\n\n async claim(account: AccountInterface, collectionAddress: string): Promise<TxResult> {\n const call = this._collection(collectionAddress, account).populate(\"claim\", []);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async adminMint(\n account: AccountInterface,\n params: { collection: string; recipient: string; customUri?: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"admin_mint\", [\n params.recipient,\n params.customUri ?? \"\",\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async addToAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"add_to_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async batchAddToAllowlist(\n account: AccountInterface,\n params: { collection: string; addresses: string[] }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const CHUNK = 200;\n const calls = [];\n for (let i = 0; i < params.addresses.length; i += CHUNK) {\n calls.push(collection.populate(\"batch_add_to_allowlist\", [params.addresses.slice(i, i + CHUNK)]));\n }\n const res = await account.execute(calls);\n return { txHash: res.transaction_hash };\n }\n\n async removeFromAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"remove_from_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setTokenUri(\n account: AccountInterface,\n params: { collection: string; tokenId: string | bigint; uri: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_token_uri\", [\n BigInt(params.tokenId),\n params.uri,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setPaused(\n account: AccountInterface,\n params: { collection: string; paused: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_paused\", [params.paused]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async createCollection(\n account: AccountInterface,\n params: CreatePopCollectionParams\n ): Promise<TxResult> {\n const factory = new Contract(POPFactoryABI as any, this.factoryAddress, account as any);\n const call = factory.populate(\"create_collection\", [\n params.name,\n params.symbol,\n params.baseUri,\n params.claimEndTime,\n { [params.eventType]: {} },\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { DropCollectionABI, DropFactoryABI } from \"../abis.js\";\nimport { DROP_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { ClaimConditions, CreateDropParams } from \"../types/services.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport type { ClaimConditions, CreateDropParams };\n\nfunction toContractConditions(c: ClaimConditions) {\n return {\n start_time: c.startTime,\n end_time: c.endTime,\n price: BigInt(c.price),\n payment_token: c.paymentToken,\n max_quantity_per_wallet: BigInt(c.maxQuantityPerWallet),\n };\n}\n\nexport class DropService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = DROP_FACTORY_CONTRACT_MAINNET;\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(DropCollectionABI as any, normalizeAddress(address), account as any);\n }\n\n async claim(\n account: AccountInterface,\n collectionAddress: string,\n quantity: bigint | string | number = 1\n ): Promise<TxResult> {\n const call = this._collection(collectionAddress, account).populate(\"claim\", [BigInt(quantity)]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async adminMint(\n account: AccountInterface,\n params: { collection: string; recipient: string; quantity?: bigint | string | number; customUri?: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"admin_mint\", [\n params.recipient,\n BigInt(params.quantity ?? 1),\n params.customUri ?? \"\",\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setClaimConditions(\n account: AccountInterface,\n params: { collection: string; conditions: ClaimConditions }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_claim_conditions\", [\n toContractConditions(params.conditions),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async setAllowlistEnabled(\n account: AccountInterface,\n params: { collection: string; enabled: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_allowlist_enabled\", [params.enabled]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async addToAllowlist(\n account: AccountInterface,\n params: { collection: string; address: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"add_to_allowlist\", [params.address]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async batchAddToAllowlist(\n account: AccountInterface,\n params: { collection: string; addresses: string[] }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const CHUNK = 200;\n const calls = [];\n for (let i = 0; i < params.addresses.length; i += CHUNK) {\n calls.push(collection.populate(\"batch_add_to_allowlist\", [params.addresses.slice(i, i + CHUNK)]));\n }\n const res = await account.execute(calls);\n return { txHash: res.transaction_hash };\n }\n\n async setPaused(\n account: AccountInterface,\n params: { collection: string; paused: boolean }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"set_paused\", [params.paused]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async withdrawPayments(\n account: AccountInterface,\n params: { collection: string }\n ): Promise<TxResult> {\n const call = this._collection(params.collection, account).populate(\"withdraw_payments\", []);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n async createDrop(account: AccountInterface, params: CreateDropParams): Promise<TxResult> {\n const factory = new Contract(DropFactoryABI as any, this.factoryAddress, account as any);\n const call = factory.populate(\"create_drop\", [\n params.name,\n params.symbol,\n params.baseUri,\n BigInt(params.maxSupply),\n toContractConditions(params.initialConditions),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { Medialane1155Module } from \"./marketplace1155/index.js\";\nimport { ApiClient } from \"./api/client.js\";\nimport { PopService } from \"./services/pop.js\";\nimport { DropService } from \"./services/drop.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions for ERC-721 assets (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\n\n /** On-chain marketplace interactions for ERC-1155 assets (Medialane1155 contract). */\n readonly marketplace1155: Medialane1155Module;\n\n /**\n * Off-chain API client โ€” covers all /v1/* backend endpoints.\n * Requires `backendUrl` in config; pass `apiKey` for authenticated routes.\n */\n readonly api: ApiClient;\n\n readonly services: {\n readonly pop: PopService;\n readonly drop: DropService;\n };\n\n private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\n this.marketplace1155 = new Medialane1155Module(this.config);\n\n this.services = {\n pop: new PopService(this.config),\n drop: new DropService(this.config),\n };\n\n if (!this.config.backendUrl) {\n this.api = new Proxy({} as ApiClient, {\n get(_target, prop) {\n return () => {\n throw new Error(\n `backendUrl not configured. Pass backendUrl to MedialaneClient to use .api.${String(prop)}()`\n );\n };\n },\n });\n } else {\n this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions);\n }\n }\n\n get network() {\n return this.config.network;\n }\n\n get rpcUrl() {\n return this.config.rpcUrl;\n }\n\n get marketplaceContract() {\n return this.config.marketplaceContract;\n }\n}\n","export type IPType =\n | \"Audio\"\n | \"Art\"\n | \"Documents\"\n | \"NFT\"\n | \"Video\"\n | \"Photography\"\n | \"Patents\"\n | \"Posts\"\n | \"Publications\"\n | \"RWA\"\n | \"Software\"\n | \"Custom\";\n\nexport type CollectionSort = \"recent\" | \"supply\" | \"floor\" | \"volume\" | \"name\";\n\nexport type CollectionSource = \"MEDIALANE_REGISTRY\" | \"EXTERNAL\" | \"PARTNERSHIP\" | \"IP_TICKET\" | \"IP_CLUB\" | \"GAME\" | \"POP_PROTOCOL\" | \"COLLECTION_DROP\";\n\nexport interface ApiCollectionsQuery {\n page?: number;\n limit?: number;\n isKnown?: boolean;\n sort?: CollectionSort;\n owner?: string;\n source?: CollectionSource;\n}\n\nexport type OrderStatus = \"ACTIVE\" | \"FULFILLED\" | \"CANCELLED\" | \"EXPIRED\" | \"COUNTER_OFFERED\";\nexport type SortOrder = \"price_asc\" | \"price_desc\" | \"recent\";\nexport type ActivityType = \"transfer\" | \"sale\" | \"listing\" | \"offer\" | \"cancelled\";\nexport type IntentType = \"CREATE_LISTING\" | \"MAKE_OFFER\" | \"FULFILL_ORDER\" | \"CANCEL_ORDER\" | \"MINT\" | \"CREATE_COLLECTION\" | \"COUNTER_OFFER\";\nexport type IntentStatus = \"PENDING\" | \"SIGNED\" | \"SUBMITTED\" | \"CONFIRMED\" | \"FAILED\" | \"EXPIRED\";\nexport type WebhookEventType = \"ORDER_CREATED\" | \"ORDER_FULFILLED\" | \"ORDER_CANCELLED\" | \"TRANSFER\";\nexport type WebhookStatus = \"ACTIVE\" | \"DISABLED\";\nexport type ApiKeyStatus = \"ACTIVE\" | \"REVOKED\";\nexport type TenantPlan = \"FREE\" | \"PREMIUM\";\n\n// โ”€โ”€โ”€ Shared โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiMeta {\n page: number;\n limit: number;\n total?: number;\n}\n\nexport interface ApiResponse<T> {\n data: T;\n meta?: ApiMeta;\n}\n\n// โ”€โ”€โ”€ Orders โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiOrdersQuery {\n status?: OrderStatus;\n collection?: string;\n currency?: string;\n sort?: SortOrder;\n page?: number;\n limit?: number;\n offerer?: string;\n minPrice?: string;\n maxPrice?: string;\n}\n\nexport interface ApiOrderOffer {\n itemType: string;\n token: string;\n identifier: string;\n startAmount: string;\n endAmount: string;\n}\n\nexport interface ApiOrderConsideration extends ApiOrderOffer {\n recipient: string;\n}\n\nexport interface ApiOrderPrice {\n raw: string | null;\n formatted: string | null;\n currency: string | null;\n decimals: number;\n}\n\nexport interface ApiOrderTxHash {\n created: string | null;\n fulfilled: string | null;\n cancelled: string | null;\n}\n\nexport interface ApiOrderTokenMeta {\n name: string | null;\n image: string | null;\n description: string | null;\n}\n\nexport interface ApiOrder {\n id: string;\n chain: string;\n orderHash: string;\n offerer: string;\n offer: ApiOrderOffer;\n consideration: ApiOrderConsideration;\n startTime: string;\n endTime: string;\n status: OrderStatus;\n fulfiller: string | null;\n nftContract: string | null;\n nftTokenId: string | null;\n price: ApiOrderPrice;\n txHash: ApiOrderTxHash;\n createdBlockNumber: string;\n createdAt: string;\n updatedAt: string;\n /** Embedded token metadata (name/image/description). Null when not yet indexed. */\n token: ApiOrderTokenMeta | null;\n /** Set when this is a counter-offer listing โ€” points to the original buyer bid. */\n parentOrderHash?: string | null;\n /** Optional seller message accompanying a counter-offer. */\n counterOfferMessage?: string | null;\n}\n\n// โ”€โ”€โ”€ IP / IPFS Metadata types โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n/**\n * A single OpenSea-compatible ERC-721 attribute.\n * Medialane embeds licensing, provenance, and IP metadata as attributes.\n */\nexport interface IpAttribute {\n trait_type: string;\n value: string;\n}\n\n/**\n * Full on-chain + IPFS metadata for a Medialane IP NFT.\n * Conforms to the OpenSea ERC-721 metadata standard and embeds\n * Berne Convention-compatible licensing data in `attributes`.\n *\n * Common licensing attributes (all optional โ€” absent on pre-v2 tokens):\n * License ยท Commercial Use ยท Derivatives ยท Attribution ยท Territory\n * AI Policy ยท Royalty ยท Standard (\"Berne Convention\") ยท Registration\n */\nexport interface IpNftMetadata {\n name: string;\n description?: string;\n image?: string | null;\n external_url?: string;\n attributes?: IpAttribute[];\n /** Populated by the indexer for fast access โ€” not stored in IPFS */\n ipType?: string | null;\n licenseType?: string | null;\n commercialUse?: string | null;\n derivatives?: string | null;\n attribution?: string | null;\n territory?: string | null;\n aiPolicy?: string | null;\n royalty?: string | null;\n registration?: string | null;\n}\n\n// โ”€โ”€โ”€ Tokens โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\n/** Indexed token metadata as returned by the Medialane API. */\nexport interface ApiTokenMetadata {\n name: string | null;\n description: string | null;\n image: string | null;\n /** Parsed OpenSea-standard attributes array. Null when metadata hasn't been fetched. */\n attributes: IpAttribute[] | null;\n /** Short-circuit fields extracted from attributes by the indexer */\n ipType: string | null;\n licenseType: string | null;\n commercialUse: string | null;\n derivatives: string | null;\n attribution: string | null;\n territory: string | null;\n aiPolicy: string | null;\n royalty: string | null;\n registration: string | null;\n author: string | null;\n}\n\n/** Per-holder balance entry. Present for ERC-1155 (multi-holder); single entry for ERC-721. */\nexport interface ApiTokenBalance {\n owner: string;\n /** Quantity held. Always \"1\" for ERC-721. */\n amount: string;\n}\n\nexport interface ApiToken {\n id: string;\n chain: string;\n contractAddress: string;\n tokenId: string;\n /** @deprecated Use `balances` for ownership checks โ€” always null after ERC-1155 migration. */\n owner: string | null;\n tokenUri: string | null;\n metadataStatus: \"PENDING\" | \"FETCHING\" | \"FETCHED\" | \"FAILED\";\n /** Token standard derived from the parent collection. Use this to determine ERC-721 vs ERC-1155 behavior. */\n standard: \"ERC721\" | \"ERC1155\" | \"UNKNOWN\";\n metadata: ApiTokenMetadata;\n /** Current holders with amounts. Only present on single-token fetches; null on list responses. */\n balances: ApiTokenBalance[] | null;\n activeOrders: ApiOrder[];\n createdAt: string;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ Collections โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollection {\n id: string;\n chain: string;\n contractAddress: string;\n collectionId: string | null;\n name: string | null;\n symbol: string | null;\n description: string | null;\n image: string | null;\n owner: string | null;\n startBlock: string;\n metadataStatus: \"PENDING\" | \"FETCHING\" | \"FETCHED\" | \"FAILED\";\n /** Token standard detected via ERC-165. */\n standard: \"ERC721\" | \"ERC1155\" | \"UNKNOWN\";\n isKnown: boolean;\n source: CollectionSource;\n claimedBy: string | null;\n profile?: ApiCollectionProfile | null;\n floorPrice: string | null;\n totalVolume: string | null;\n holderCount: number | null;\n totalSupply: number | null;\n createdAt: string;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ Activities โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiActivityPrice {\n raw: string | null;\n formatted: string | null;\n currency: string | null;\n}\n\nexport interface ApiActivity {\n type: ActivityType;\n // Transfer fields\n contractAddress?: string;\n tokenId?: string;\n from?: string;\n to?: string;\n blockNumber?: string;\n // Order fields\n orderHash?: string;\n nftContract?: string;\n nftTokenId?: string;\n offerer?: string;\n fulfiller?: string | null;\n price?: ApiActivityPrice;\n txHash: string | null;\n timestamp: string;\n}\n\nexport interface ApiActivitiesQuery {\n type?: ActivityType;\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Comments โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiComment {\n id: string;\n chain: string; // \"starknet\"\n contractAddress: string; // normalized 0x-padded Starknet address\n tokenId: string;\n author: string; // normalized 0x-padded Starknet address\n content: string; // sanitized plain text\n txHash: string | null;\n blockNumber: string; // BigInt serialized as string\n postedAt: string; // ISO 8601 derived from blockTimestamp โ€” use for display\n}\n\n// โ”€โ”€โ”€ Search โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiSearchTokenResult {\n contractAddress: string;\n tokenId: string;\n name: string | null;\n image: string | null;\n owner: string;\n metadataStatus: string;\n}\n\nexport interface ApiSearchCollectionResult {\n contractAddress: string;\n name: string | null;\n image: string | null;\n totalSupply: number | null;\n floorPrice: string | null;\n holderCount: number | null;\n}\n\nexport interface ApiSearchCreatorResult {\n walletAddress: string;\n username: string | null;\n displayName: string | null;\n bio: string | null;\n avatarImage: string | null;\n}\n\nexport interface ApiSearchResult {\n tokens: ApiSearchTokenResult[];\n collections: ApiSearchCollectionResult[];\n creators: ApiSearchCreatorResult[];\n}\n\n// โ”€โ”€โ”€ Intents โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiIntent {\n id: string;\n chain: string;\n type: IntentType;\n status: IntentStatus;\n requester: string;\n typedData: unknown;\n calls: unknown;\n signature: string[];\n txHash: string | null;\n orderHash: string | null;\n /** Set on COUNTER_OFFER intents โ€” the original bid order hash being countered. */\n parentOrderHash?: string | null;\n /** Optional seller message on counter-offer intents. */\n counterOfferMessage?: string | null;\n expiresAt: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApiIntentCreated {\n id: string;\n typedData: unknown;\n calls: unknown;\n expiresAt: string;\n}\n\nexport interface CreateListingIntentParams {\n offerer: string;\n nftContract: string;\n tokenId: string;\n currency: string;\n price: string;\n endTime: number;\n salt?: string;\n /** Number of units to list โ€” required for ERC-1155, omit for ERC-721. */\n amount?: string;\n}\n\nexport interface MakeOfferIntentParams {\n offerer: string;\n nftContract: string;\n tokenId: string;\n currency: string;\n price: string;\n endTime: number;\n salt?: string;\n}\n\nexport interface FulfillOrderIntentParams {\n fulfiller: string;\n orderHash: string;\n /** Caller hint โ€” \"ERC1155\" forces 1155 routing even if the order isn't in the DB yet */\n tokenStandard?: string;\n}\n\nexport interface CancelOrderIntentParams {\n offerer: string;\n orderHash: string;\n /** Caller hint โ€” \"ERC1155\" forces 1155 routing even if the order isn't in the DB yet */\n tokenStandard?: string;\n}\n\nexport interface CreateMintIntentParams {\n /** Collection owner wallet address โ€” must be the collection owner on-chain */\n owner: string;\n collectionId: string;\n recipient: string;\n tokenUri: string;\n /** Optional: override the default collection contract address */\n collectionContract?: string;\n}\n\nexport interface CreateCollectionIntentParams {\n owner: string;\n name: string;\n symbol: string;\n /** Optional description stored server-side and surfaced on the collection page. */\n description?: string;\n /** Optional IPFS image URI (ipfs://...) for the collection cover image. */\n image?: string;\n /** Base URI for token metadata. Defaults to empty string if not provided. */\n baseUri?: string;\n /** Optional: override the default collection contract address */\n collectionContract?: string;\n}\n\nexport interface CreateCounterOfferIntentParams {\n /** Wallet address of the NFT owner making the counter-offer. */\n sellerAddress: string;\n /** Order hash of the original buyer bid being countered. */\n originalOrderHash: string;\n /** Counter price as a raw wei integer string (not human-readable). */\n counterPrice: string;\n /** Duration in seconds the counter-offer will be valid (3600โ€“2592000). */\n durationSeconds: number;\n /** Optional message from the seller to the buyer. Max 500 chars. */\n message?: string;\n}\n\nexport interface ApiCounterOffersQuery {\n /** Original bid order hash โ€” returns the counter-offer for this specific bid. */\n originalOrderHash?: string;\n /** Seller address โ€” returns all counter-offers sent by this seller. */\n sellerAddress?: string;\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Remix Licensing โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport const OPEN_LICENSES = [\"CC0\", \"CC BY\", \"CC BY-SA\", \"CC BY-NC\"] as const;\nexport type OpenLicense = (typeof OPEN_LICENSES)[number];\n\nexport type RemixOfferStatus =\n | \"PENDING\"\n | \"AUTO_PENDING\"\n | \"APPROVED\"\n | \"COMPLETED\"\n | \"REJECTED\"\n | \"EXPIRED\"\n | \"SELF_MINTED\";\n\nexport interface ApiRemixOfferPrice {\n raw: string;\n formatted: string;\n currency: string;\n decimals: number;\n}\n\nexport interface ApiRemixOffer {\n id: string;\n status: RemixOfferStatus;\n originalContract: string;\n originalTokenId: string;\n creatorAddress: string;\n requesterAddress: string | null;\n message?: string | null;\n /** Visible only to creator and requester โ€” includes formatted price */\n price?: ApiRemixOfferPrice;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct: number | null;\n approvedCollection: string | null;\n remixContract: string | null;\n remixTokenId: string | null;\n orderHash: string | null;\n createdAt: string;\n expiresAt: string;\n updatedAt: string;\n}\n\n/** Public remix record โ€” price/currency omitted for non-participants */\nexport interface ApiPublicRemix {\n id: string;\n remixContract: string | null;\n remixTokenId: string | null;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n createdAt: string;\n}\n\nexport interface CreateRemixOfferParams {\n originalContract: string;\n originalTokenId: string;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct?: number;\n proposedPrice?: string;\n proposedCurrency?: string;\n message?: string;\n /** Offer validity in days (server default applies if omitted) */\n expiresInDays?: number;\n}\n\nexport interface AutoRemixOfferParams {\n originalContract: string;\n originalTokenId: string;\n licenseType: string;\n}\n\nexport interface ConfirmSelfRemixParams {\n originalContract: string;\n originalTokenId: string;\n remixContract: string;\n remixTokenId: string;\n /** On-chain transaction hash of the mint tx */\n txHash?: string;\n licenseType: string;\n commercial: boolean;\n derivatives: boolean;\n royaltyPct?: number;\n}\n\nexport interface ConfirmRemixOfferParams {\n approvedCollection: string;\n remixContract: string;\n remixTokenId: string;\n orderHash?: string;\n}\n\nexport interface ApiRemixOffersQuery {\n /** \"creator\" = offers where you are the original creator; \"requester\" = offers you made */\n role: \"creator\" | \"requester\";\n page?: number;\n limit?: number;\n}\n\n// โ”€โ”€โ”€ Metadata โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiMetadataSignedUrl {\n url: string;\n}\n\nexport interface ApiMetadataUpload {\n cid: string;\n url: string;\n}\n\n// โ”€โ”€โ”€ Portal (tenant self-service) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiPortalMe {\n id: string;\n name: string;\n email: string;\n plan: TenantPlan;\n status: string;\n}\n\nexport interface ApiPortalKey {\n id: string;\n prefix: string;\n label: string;\n status: ApiKeyStatus;\n lastUsedAt: string | null;\n createdAt: string;\n}\n\nexport interface ApiPortalKeyCreated {\n id: string;\n prefix: string;\n label: string | null;\n /** Plaintext key โ€” shown ONCE at creation */\n plaintext: string;\n}\n\nexport interface ApiUsageDay {\n day: string;\n requests: number;\n}\n\nexport interface ApiWebhookEndpoint {\n id: string;\n url: string;\n events: WebhookEventType[];\n status: WebhookStatus;\n createdAt: string;\n}\n\nexport interface ApiWebhookCreated extends ApiWebhookEndpoint {\n /** Signing secret โ€” shown ONCE at creation, not stored in plaintext */\n secret: string;\n}\n\nexport interface CreateWebhookParams {\n url: string;\n events: WebhookEventType[];\n label?: string;\n}\n\n// โ”€โ”€โ”€ Collection & Creator Profiles โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollectionProfile {\n contractAddress: string;\n chain: string;\n displayName: string | null;\n description: string | null;\n image: string | null;\n bannerImage: string | null;\n websiteUrl: string | null;\n twitterUrl: string | null;\n discordUrl: string | null;\n telegramUrl: string | null;\n hasGatedContent: boolean;\n gatedContentTitle: string | null;\n updatedBy: string | null;\n updatedAt: string;\n}\n\nexport interface ApiCreatorProfile {\n walletAddress: string;\n chain: string;\n username: string | null;\n displayName: string | null;\n bio: string | null;\n avatarImage: string | null;\n bannerImage: string | null;\n websiteUrl: string | null;\n twitterUrl: string | null;\n discordUrl: string | null;\n telegramUrl: string | null;\n updatedAt: string;\n}\n\nexport interface ApiCreatorListResult {\n creators: ApiCreatorProfile[];\n total: number;\n page: number;\n limit: number;\n}\n\n// โ”€โ”€โ”€ User Wallet โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiUserWallet {\n walletAddress: string;\n}\n\n// โ”€โ”€โ”€ Collection Claims โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface ApiCollectionClaim {\n id: string;\n contractAddress: string;\n chain: string;\n claimantAddress: string | null;\n status: \"PENDING\" | \"AUTO_APPROVED\" | \"APPROVED\" | \"REJECTED\";\n verificationMethod: \"ONCHAIN\" | \"SIGNATURE\" | \"MANUAL\";\n createdAt: string;\n}\n\nexport interface ApiAdminCollectionClaim extends ApiCollectionClaim {\n claimantEmail: string | null;\n notes: string | null;\n adminNotes: string | null;\n reviewedBy: string | null;\n reviewedAt: string | null;\n updatedAt: string;\n}\n\n// โ”€โ”€โ”€ POP Protocol โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface PopClaimStatus {\n isEligible: boolean;\n hasClaimed: boolean;\n tokenId: string | null;\n}\n\nexport interface PopBatchEligibilityItem extends PopClaimStatus {\n wallet: string;\n}\n\nexport type PopEventType =\n | \"Conference\"\n | \"Bootcamp\"\n | \"Workshop\"\n | \"Hackathon\"\n | \"Meetup\"\n | \"Course\"\n | \"Other\";\n\n// โ”€โ”€โ”€ Collection Drop โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n\nexport interface DropMintStatus {\n mintedByWallet: number;\n totalMinted: number;\n}\n","import { Contract, type AccountInterface } from \"starknet\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport { IPCollection1155FactoryABI, IPCollection1155ABI } from \"../abis.js\";\nimport { ERC1155_FACTORY_CONTRACT_MAINNET } from \"../constants.js\";\nimport type { TxResult } from \"../types/marketplace.js\";\n\nexport interface DeployCollectionParams {\n /** Human-readable collection name (e.g. \"My IP Collection\") */\n name: string;\n /** Short ticker symbol (e.g. \"MIP\") */\n symbol: string;\n /**\n * Collection-level metadata URI (e.g. \"ipfs://Qmโ€ฆ/collection.json\").\n * Should point to a JSON containing `name`, `description`, `image`, and `external_link`.\n * Stored on-chain at deploy time. Pass an empty string if not available.\n */\n baseUri: string;\n}\n\nexport interface MintItemParams {\n /** ERC-1155 collection contract address */\n collection: string;\n /** Recipient wallet address */\n to: string;\n /** Token ID (u256 โ€” use a numeric string or bigint) */\n tokenId: bigint | string;\n /** Number of copies to mint */\n value: bigint | string;\n /**\n * Metadata URI โ€” must start with `ipfs://` or `ar://`.\n * Immutable: validated and stored on first mint of each token_id.\n */\n tokenUri: string;\n}\n\nexport interface BatchMintItemParams {\n /** ERC-1155 collection contract address */\n collection: string;\n /** Recipient wallet address */\n to: string;\n items: Array<{\n tokenId: bigint | string;\n value: bigint | string;\n tokenUri: string;\n }>;\n}\n\nexport class ERC1155CollectionService {\n private readonly factoryAddress: string;\n\n constructor(_config: ResolvedConfig) {\n this.factoryAddress = ERC1155_FACTORY_CONTRACT_MAINNET;\n }\n\n private _factory(account: AccountInterface) {\n return new Contract(\n IPCollection1155FactoryABI as any,\n normalizeAddress(this.factoryAddress),\n account as any\n );\n }\n\n private _collection(address: string, account: AccountInterface) {\n return new Contract(\n IPCollection1155ABI as any,\n normalizeAddress(address),\n account as any\n );\n }\n\n /**\n * Deploy a new ERC-1155 IP collection.\n * Caller becomes the collection owner and can mint items.\n * Returns the transaction hash; the deployed collection address is emitted\n * in the `CollectionDeployed` event of the factory.\n */\n async deployCollection(\n account: AccountInterface,\n params: DeployCollectionParams\n ): Promise<TxResult> {\n const factory = this._factory(account);\n const call = factory.populate(\"deploy_collection\", [params.name, params.symbol, params.baseUri]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Mint a single token into an existing ERC-1155 collection.\n * Caller must be the collection owner.\n * The `tokenUri` is immutable โ€” validated and stored on the first mint only.\n */\n async mintItem(\n account: AccountInterface,\n params: MintItemParams\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"mint_item\", [\n params.to,\n BigInt(params.tokenId),\n BigInt(params.value),\n params.tokenUri,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Batch-mint multiple token IDs into an existing ERC-1155 collection.\n * All items go to the same `to` address.\n * Caller must be the collection owner.\n */\n async batchMintItem(\n account: AccountInterface,\n params: BatchMintItemParams\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const tokenIds = params.items.map((i) => BigInt(i.tokenId));\n const values = params.items.map((i) => BigInt(i.value));\n const tokenUris = params.items.map((i) => i.tokenUri);\n const call = collection.populate(\"batch_mint_item\", [\n params.to,\n tokenIds,\n values,\n tokenUris,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Set the default ERC-2981 royalty for the entire collection.\n * `feeNumerator` is out of 10 000 (e.g. 500 = 5%).\n * Caller must be the collection owner.\n */\n async setDefaultRoyalty(\n account: AccountInterface,\n params: { collection: string; receiver: string; feeNumerator: number }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_default_royalty\", [\n params.receiver,\n BigInt(params.feeNumerator),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Set a per-token ERC-2981 royalty override.\n * `feeNumerator` is out of 10 000. Caller must be the collection owner.\n */\n async setTokenRoyalty(\n account: AccountInterface,\n params: { collection: string; tokenId: bigint | string; receiver: string; feeNumerator: number }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_token_royalty\", [\n BigInt(params.tokenId),\n params.receiver,\n BigInt(params.feeNumerator),\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n\n /**\n * Approve the Medialane1155 marketplace (or any operator) to transfer\n * all tokens on behalf of `account`. Required before listing.\n */\n async setApprovalForAll(\n account: AccountInterface,\n params: { collection: string; operator: string; approved: boolean }\n ): Promise<TxResult> {\n const collection = this._collection(params.collection, account);\n const call = collection.populate(\"set_approval_for_all\", [\n params.operator,\n params.approved,\n ]);\n const res = await account.execute([call]);\n return { txHash: res.transaction_hash };\n }\n}\n"]}