@medialane/sdk 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -957,6 +957,8 @@ var ApiClient = class {
957
957
  if (query.page !== void 0) params.set("page", String(query.page));
958
958
  if (query.limit !== void 0) params.set("limit", String(query.limit));
959
959
  if (query.offerer) params.set("offerer", query.offerer);
960
+ if (query.minPrice) params.set("minPrice", query.minPrice);
961
+ if (query.maxPrice) params.set("maxPrice", query.maxPrice);
960
962
  const qs = params.toString();
961
963
  return this.get(`/v1/orders${qs ? `?${qs}` : ""}`);
962
964
  }
@@ -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/api/client.ts","../src/client.ts","../src/utils/address.ts"],"names":["z","TypedDataRevision","constants","RpcProvider","Contract","shortString","cairo","byteArray","num"],"mappings":"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","file":"index.cjs","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05e73b7be06d82beeb390a0e0d655f2c9e7cf519658e04f05d9c690ccc41da03\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical — preferred)\n symbol: \"USDC\",\n address: \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n },\n {\n // Bridged USDC.e (Ethereum USDC bridged via Starkgate)\n symbol: \"USDC.e\",\n address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n decimals: 6,\n },\n {\n symbol: \"USDT\",\n address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n },\n {\n symbol: \"ETH\",\n address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n },\n {\n symbol: \"STRK\",\n address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\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\", \"sepolia\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URLS: Record<Network, string> = {\n mainnet: \"https://starknet-mainnet.public.blastapi.io\",\n sepolia: \"https://starknet-sepolia.public.blastapi.io\",\n};\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URLS,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.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 /** API key for authenticated /v1/* backend endpoints */\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n collectionContract: z.string().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 collectionContract: string;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URLS[parsed.network],\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\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","/**\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","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 {\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 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 config.network === \"mainnet\"\n ? constants.StarknetChainId.SN_MAIN\n : constants.StarknetChainId.SN_SEPOLIA;\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}`);\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\", 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\", 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\", 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\", 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\", 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\", 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\");\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\", 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 {\n ApiOrder,\n ApiOrdersQuery,\n ApiToken,\n ApiCollection,\n ApiActivity,\n ApiActivitiesQuery,\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 ApiResponse,\n} from \"../types/api.js\";\n\nexport class MedialaneApiError extends Error {\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\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 fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!res.ok) {\n let message = res.statusText;\n try {\n const body = (await res.json()) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use statusText\n }\n throw new MedialaneApiError(res.status, message);\n }\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\", query.offerer);\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/${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/${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/${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(page = 1, limit = 20): Promise<ApiResponse<ApiCollection[]>> {\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?page=${page}&limit=${limit}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/${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/${address}?page=${page}&limit=${limit}`\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 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 // ─── 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","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { ApiClient } from \"./api/client.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\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 private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\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);\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","/**\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"]}
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/api/client.ts","../src/client.ts","../src/utils/address.ts"],"names":["z","TypedDataRevision","constants","RpcProvider","Contract","shortString","cairo","byteArray","num"],"mappings":"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","file":"index.cjs","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05e73b7be06d82beeb390a0e0d655f2c9e7cf519658e04f05d9c690ccc41da03\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical — preferred)\n symbol: \"USDC\",\n address: \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n },\n {\n // Bridged USDC.e (Ethereum USDC bridged via Starkgate)\n symbol: \"USDC.e\",\n address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n decimals: 6,\n },\n {\n symbol: \"USDT\",\n address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n },\n {\n symbol: \"ETH\",\n address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n },\n {\n symbol: \"STRK\",\n address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\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\", \"sepolia\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URLS: Record<Network, string> = {\n mainnet: \"https://starknet-mainnet.public.blastapi.io\",\n sepolia: \"https://starknet-sepolia.public.blastapi.io\",\n};\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URLS,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.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 /** API key for authenticated /v1/* backend endpoints */\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n collectionContract: z.string().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 collectionContract: string;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URLS[parsed.network],\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\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","/**\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","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 {\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 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 config.network === \"mainnet\"\n ? constants.StarknetChainId.SN_MAIN\n : constants.StarknetChainId.SN_SEPOLIA;\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}`);\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\", 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\", 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\", 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\", 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\", 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\", 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\");\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\", 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 {\n ApiOrder,\n ApiOrdersQuery,\n ApiToken,\n ApiCollection,\n ApiActivity,\n ApiActivitiesQuery,\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 ApiResponse,\n} from \"../types/api.js\";\n\nexport class MedialaneApiError extends Error {\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\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 fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!res.ok) {\n let message = res.statusText;\n try {\n const body = (await res.json()) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use statusText\n }\n throw new MedialaneApiError(res.status, message);\n }\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\", 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/${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/${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/${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(page = 1, limit = 20): Promise<ApiResponse<ApiCollection[]>> {\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?page=${page}&limit=${limit}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/${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/${address}?page=${page}&limit=${limit}`\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 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 // ─── 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","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { ApiClient } from \"./api/client.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\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 private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\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);\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","/**\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"]}
package/dist/index.d.cts CHANGED
@@ -191,6 +191,8 @@ interface ApiOrdersQuery {
191
191
  page?: number;
192
192
  limit?: number;
193
193
  offerer?: string;
194
+ minPrice?: string;
195
+ maxPrice?: string;
194
196
  }
195
197
  interface ApiOrderOffer {
196
198
  itemType: string;
@@ -419,7 +421,10 @@ interface CreateCollectionIntentParams {
419
421
  owner: string;
420
422
  name: string;
421
423
  symbol: string;
422
- baseUri: string;
424
+ /** Optional description stored server-side and surfaced on the collection page. */
425
+ description?: string;
426
+ /** Base URI for token metadata. Defaults to empty string if not provided. */
427
+ baseUri?: string;
423
428
  /** Optional: override the default collection contract address */
424
429
  collectionContract?: string;
425
430
  }
package/dist/index.d.ts CHANGED
@@ -191,6 +191,8 @@ interface ApiOrdersQuery {
191
191
  page?: number;
192
192
  limit?: number;
193
193
  offerer?: string;
194
+ minPrice?: string;
195
+ maxPrice?: string;
194
196
  }
195
197
  interface ApiOrderOffer {
196
198
  itemType: string;
@@ -419,7 +421,10 @@ interface CreateCollectionIntentParams {
419
421
  owner: string;
420
422
  name: string;
421
423
  symbol: string;
422
- baseUri: string;
424
+ /** Optional description stored server-side and surfaced on the collection page. */
425
+ description?: string;
426
+ /** Base URI for token metadata. Defaults to empty string if not provided. */
427
+ baseUri?: string;
423
428
  /** Optional: override the default collection contract address */
424
429
  collectionContract?: string;
425
430
  }
package/dist/index.js CHANGED
@@ -955,6 +955,8 @@ var ApiClient = class {
955
955
  if (query.page !== void 0) params.set("page", String(query.page));
956
956
  if (query.limit !== void 0) params.set("limit", String(query.limit));
957
957
  if (query.offerer) params.set("offerer", query.offerer);
958
+ if (query.minPrice) params.set("minPrice", query.minPrice);
959
+ if (query.maxPrice) params.set("maxPrice", query.maxPrice);
958
960
  const qs = params.toString();
959
961
  return this.get(`/v1/orders${qs ? `?${qs}` : ""}`);
960
962
  }
package/dist/index.js.map CHANGED
@@ -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/api/client.ts","../src/client.ts","../src/utils/address.ts"],"names":["constants"],"mappings":"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","file":"index.js","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05e73b7be06d82beeb390a0e0d655f2c9e7cf519658e04f05d9c690ccc41da03\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical — preferred)\n symbol: \"USDC\",\n address: \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n },\n {\n // Bridged USDC.e (Ethereum USDC bridged via Starkgate)\n symbol: \"USDC.e\",\n address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n decimals: 6,\n },\n {\n symbol: \"USDT\",\n address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n },\n {\n symbol: \"ETH\",\n address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n },\n {\n symbol: \"STRK\",\n address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\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\", \"sepolia\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URLS: Record<Network, string> = {\n mainnet: \"https://starknet-mainnet.public.blastapi.io\",\n sepolia: \"https://starknet-sepolia.public.blastapi.io\",\n};\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URLS,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.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 /** API key for authenticated /v1/* backend endpoints */\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n collectionContract: z.string().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 collectionContract: string;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URLS[parsed.network],\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\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","/**\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","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 {\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 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 config.network === \"mainnet\"\n ? constants.StarknetChainId.SN_MAIN\n : constants.StarknetChainId.SN_SEPOLIA;\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}`);\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\", 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\", 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\", 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\", 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\", 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\", 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\");\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\", 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 {\n ApiOrder,\n ApiOrdersQuery,\n ApiToken,\n ApiCollection,\n ApiActivity,\n ApiActivitiesQuery,\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 ApiResponse,\n} from \"../types/api.js\";\n\nexport class MedialaneApiError extends Error {\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\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 fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!res.ok) {\n let message = res.statusText;\n try {\n const body = (await res.json()) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use statusText\n }\n throw new MedialaneApiError(res.status, message);\n }\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\", query.offerer);\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/${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/${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/${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(page = 1, limit = 20): Promise<ApiResponse<ApiCollection[]>> {\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?page=${page}&limit=${limit}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/${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/${address}?page=${page}&limit=${limit}`\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 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 // ─── 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","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { ApiClient } from \"./api/client.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\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 private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\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);\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","/**\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"]}
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/api/client.ts","../src/client.ts","../src/utils/address.ts"],"names":["constants"],"mappings":"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","file":"index.js","sourcesContent":["export const MARKETPLACE_CONTRACT_MAINNET =\n \"0x059deafbbafbf7051c315cf75a94b03c5547892bc0c6dfa36d7ac7290d4cc33a\";\n\nexport const COLLECTION_CONTRACT_MAINNET =\n \"0x05e73b7be06d82beeb390a0e0d655f2c9e7cf519658e04f05d9c690ccc41da03\";\n\nexport const INDEXER_START_BLOCK_MAINNET = 6204232;\n\nexport const SUPPORTED_TOKENS = [\n {\n // Circle-native USDC on Starknet (canonical — preferred)\n symbol: \"USDC\",\n address: \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n },\n {\n // Bridged USDC.e (Ethereum USDC bridged via Starkgate)\n symbol: \"USDC.e\",\n address: \"0x053c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8\",\n decimals: 6,\n },\n {\n symbol: \"USDT\",\n address: \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n },\n {\n symbol: \"ETH\",\n address: \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n },\n {\n symbol: \"STRK\",\n address: \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\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\", \"sepolia\"] as const;\nexport type Network = (typeof SUPPORTED_NETWORKS)[number];\n\nexport const DEFAULT_RPC_URLS: Record<Network, string> = {\n mainnet: \"https://starknet-mainnet.public.blastapi.io\",\n sepolia: \"https://starknet-sepolia.public.blastapi.io\",\n};\n","import { z } from \"zod\";\nimport {\n SUPPORTED_NETWORKS,\n DEFAULT_RPC_URLS,\n MARKETPLACE_CONTRACT_MAINNET,\n COLLECTION_CONTRACT_MAINNET,\n type Network,\n} from \"./constants.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 /** API key for authenticated /v1/* backend endpoints */\n apiKey: z.string().optional(),\n marketplaceContract: z.string().optional(),\n collectionContract: z.string().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 collectionContract: string;\n}\n\nexport function resolveConfig(raw: MedialaneConfig): ResolvedConfig {\n const parsed = MedialaneConfigSchema.parse(raw);\n return {\n network: parsed.network,\n rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URLS[parsed.network],\n backendUrl: parsed.backendUrl,\n apiKey: parsed.apiKey,\n marketplaceContract: parsed.marketplaceContract ?? MARKETPLACE_CONTRACT_MAINNET,\n collectionContract: parsed.collectionContract ?? COLLECTION_CONTRACT_MAINNET,\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","/**\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","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 {\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 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 config.network === \"mainnet\"\n ? constants.StarknetChainId.SN_MAIN\n : constants.StarknetChainId.SN_SEPOLIA;\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}`);\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\", 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\", 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\", 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\", 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\", 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\", 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\");\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\", 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 {\n ApiOrder,\n ApiOrdersQuery,\n ApiToken,\n ApiCollection,\n ApiActivity,\n ApiActivitiesQuery,\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 ApiResponse,\n} from \"../types/api.js\";\n\nexport class MedialaneApiError extends Error {\n constructor(\n public readonly status: number,\n message: string\n ) {\n super(message);\n this.name = \"MedialaneApiError\";\n }\n}\n\nexport class ApiClient {\n private readonly baseHeaders: Record<string, string>;\n\n constructor(\n private readonly baseUrl: string,\n apiKey?: string\n ) {\n this.baseHeaders = apiKey ? { \"x-api-key\": apiKey } : {};\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 fetch(url, {\n ...init,\n headers: { ...headers, ...(init?.headers as Record<string, string> | undefined) },\n });\n if (!res.ok) {\n let message = res.statusText;\n try {\n const body = (await res.json()) as { error?: string };\n if (body.error) message = body.error;\n } catch {\n // use statusText\n }\n throw new MedialaneApiError(res.status, message);\n }\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\", 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/${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/${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/${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(page = 1, limit = 20): Promise<ApiResponse<ApiCollection[]>> {\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?page=${page}&limit=${limit}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/${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/${address}?page=${page}&limit=${limit}`\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 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 // ─── 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","import { type MedialaneConfig, resolveConfig, type ResolvedConfig } from \"./config.js\";\nimport { MarketplaceModule } from \"./marketplace/index.js\";\nimport { ApiClient } from \"./api/client.js\";\n\nexport class MedialaneClient {\n /** On-chain marketplace interactions (create listing, fulfill order, etc.) */\n readonly marketplace: MarketplaceModule;\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 private readonly config: ResolvedConfig;\n\n constructor(rawConfig: MedialaneConfig = {}) {\n this.config = resolveConfig(rawConfig);\n\n this.marketplace = new MarketplaceModule(this.config);\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);\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","/**\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/sdk",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Framework-agnostic TypeScript SDK for Medialane.io — the IP marketplace on Starknet",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -17,7 +17,9 @@
17
17
  "publishConfig": {
18
18
  "access": "public"
19
19
  },
20
- "files": ["dist"],
20
+ "files": [
21
+ "dist"
22
+ ],
21
23
  "scripts": {
22
24
  "build": "tsup",
23
25
  "dev": "tsup --watch",