@medialane/sdk 0.2.8 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -64,8 +64,8 @@ import { MedialaneClient } from "@medialane/sdk";
64
64
 
65
65
  const client = new MedialaneClient({
66
66
  network: "mainnet", // "mainnet" | "sepolia"
67
- rpcUrl: "https://starknet-mainnet.public.blastapi.io", // optional; defaults to BlastAPI
68
- backendUrl: "https://api.medialane.xyz", // required for .api methods
67
+ rpcUrl: "https://rpc.starknet.lava.build", // optional; defaults to Lava
68
+ backendUrl: "https://medialane-backend-production.up.railway.app", // required for .api methods
69
69
  apiKey: "ml_live_...", // from Medialane Portal
70
70
  });
71
71
  ```
@@ -362,7 +362,7 @@ try {
362
362
  | Option | Type | Default | Description |
363
363
  |---|---|---|---|
364
364
  | `network` | `"mainnet" \| "sepolia"` | `"mainnet"` | Starknet network |
365
- | `rpcUrl` | `string` | BlastAPI public endpoint | JSON-RPC URL |
365
+ | `rpcUrl` | `string` | Lava public endpoint | JSON-RPC URL |
366
366
  | `backendUrl` | `string` | — | Medialane API base URL (required for `.api.*`) |
367
367
  | `apiKey` | `string` | — | API key from [Medialane Portal](https://medialane.xyz) |
368
368
  | `marketplaceContract` | `string` | Mainnet default | Marketplace contract override |
package/dist/index.cjs CHANGED
@@ -40,8 +40,8 @@ var SUPPORTED_TOKENS = [
40
40
  var DEFAULT_CURRENCY = "USDC";
41
41
  var SUPPORTED_NETWORKS = ["mainnet", "sepolia"];
42
42
  var DEFAULT_RPC_URLS = {
43
- mainnet: "https://starknet-mainnet.public.blastapi.io",
44
- sepolia: "https://starknet-sepolia.public.blastapi.io"
43
+ mainnet: "https://rpc.starknet.lava.build",
44
+ sepolia: "https://rpc.starknet-sepolia.lava.build"
45
45
  };
46
46
 
47
47
  // src/config.ts
@@ -901,6 +901,16 @@ var MarketplaceModule = class {
901
901
  }
902
902
  };
903
903
 
904
+ // src/utils/address.ts
905
+ function normalizeAddress(address) {
906
+ const hex = address.replace(/^0x/, "").toLowerCase();
907
+ return "0x" + hex.padStart(64, "0");
908
+ }
909
+ function shortenAddress(address, chars = 4) {
910
+ const norm = normalizeAddress(address);
911
+ return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
912
+ }
913
+
904
914
  // src/api/client.ts
905
915
  var MedialaneApiError = class extends Error {
906
916
  constructor(status, message) {
@@ -956,7 +966,7 @@ var ApiClient = class {
956
966
  if (query.sort) params.set("sort", query.sort);
957
967
  if (query.page !== void 0) params.set("page", String(query.page));
958
968
  if (query.limit !== void 0) params.set("limit", String(query.limit));
959
- if (query.offerer) params.set("offerer", query.offerer);
969
+ if (query.offerer) params.set("offerer", normalizeAddress(query.offerer));
960
970
  if (query.minPrice) params.set("minPrice", query.minPrice);
961
971
  if (query.maxPrice) params.set("maxPrice", query.maxPrice);
962
972
  const qs = params.toString();
@@ -966,11 +976,11 @@ var ApiClient = class {
966
976
  return this.get(`/v1/orders/${orderHash}`);
967
977
  }
968
978
  getActiveOrdersForToken(contract, tokenId) {
969
- return this.get(`/v1/orders/token/${contract}/${tokenId}`);
979
+ return this.get(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);
970
980
  }
971
981
  getOrdersByUser(address, page = 1, limit = 20) {
972
982
  return this.get(
973
- `/v1/orders/user/${address}?page=${page}&limit=${limit}`
983
+ `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`
974
984
  );
975
985
  }
976
986
  // ─── Tokens ────────────────────────────────────────────────────────────────
@@ -981,7 +991,7 @@ var ApiClient = class {
981
991
  }
982
992
  getTokensByOwner(address, page = 1, limit = 20) {
983
993
  return this.get(
984
- `/v1/tokens/owned/${address}?page=${page}&limit=${limit}`
994
+ `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`
985
995
  );
986
996
  }
987
997
  getTokenHistory(contract, tokenId, page = 1, limit = 20) {
@@ -996,15 +1006,15 @@ var ApiClient = class {
996
1006
  return this.get(`/v1/collections?${params}`);
997
1007
  }
998
1008
  getCollectionsByOwner(owner, page = 1, limit = 50) {
999
- const params = new URLSearchParams({ owner, page: String(page), limit: String(limit) });
1009
+ const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });
1000
1010
  return this.get(`/v1/collections?${params}`);
1001
1011
  }
1002
1012
  getCollection(contract) {
1003
- return this.get(`/v1/collections/${contract}`);
1013
+ return this.get(`/v1/collections/${normalizeAddress(contract)}`);
1004
1014
  }
1005
1015
  getCollectionTokens(contract, page = 1, limit = 20) {
1006
1016
  return this.get(
1007
- `/v1/collections/${contract}/tokens?page=${page}&limit=${limit}`
1017
+ `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`
1008
1018
  );
1009
1019
  }
1010
1020
  // ─── Activities ────────────────────────────────────────────────────────────
@@ -1018,7 +1028,7 @@ var ApiClient = class {
1018
1028
  }
1019
1029
  getActivitiesByAddress(address, page = 1, limit = 20) {
1020
1030
  return this.get(
1021
- `/v1/activities/${address}?page=${page}&limit=${limit}`
1031
+ `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`
1022
1032
  );
1023
1033
  }
1024
1034
  // ─── Search ────────────────────────────────────────────────────────────────
@@ -1131,16 +1141,6 @@ var MedialaneClient = class {
1131
1141
  }
1132
1142
  };
1133
1143
 
1134
- // src/utils/address.ts
1135
- function normalizeAddress(address) {
1136
- const hex = address.replace(/^0x/, "").toLowerCase();
1137
- return "0x" + hex.padStart(64, "0");
1138
- }
1139
- function shortenAddress(address, chars = 4) {
1140
- const norm = normalizeAddress(address);
1141
- return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
1142
- }
1143
-
1144
1144
  exports.ApiClient = ApiClient;
1145
1145
  exports.COLLECTION_CONTRACT_MAINNET = COLLECTION_CONTRACT_MAINNET;
1146
1146
  exports.DEFAULT_RPC_URLS = DEFAULT_RPC_URLS;
@@ -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 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, isKnown?: boolean): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner, page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/utils/address.ts","../src/api/client.ts","../src/client.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://rpc.starknet.lava.build\",\n sepolia: \"https://rpc.starknet-sepolia.lava.build\",\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","/**\n * Normalize a Starknet address to a 0x-prefixed 64-character hex string.\n */\nexport function normalizeAddress(address: string): string {\n const hex = address.replace(/^0x/, \"\").toLowerCase();\n return \"0x\" + hex.padStart(64, \"0\");\n}\n\n/**\n * Shorten an address to \"0x1234...abcd\" format.\n */\nexport function shortenAddress(address: string, chars = 4): string {\n const norm = normalizeAddress(address);\n return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;\n}\n","import { normalizeAddress } from \"../utils/address.js\";\nimport 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\", normalizeAddress(query.offerer));\n if (query.minPrice) params.set(\"minPrice\", query.minPrice);\n if (query.maxPrice) params.set(\"maxPrice\", query.maxPrice);\n const qs = params.toString();\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders${qs ? `?${qs}` : \"\"}`);\n }\n\n getOrder(orderHash: string): Promise<ApiResponse<ApiOrder>> {\n return this.get<ApiResponse<ApiOrder>>(`/v1/orders/${orderHash}`);\n }\n\n getActiveOrdersForToken(contract: string, tokenId: string): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);\n }\n\n getOrdersByUser(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(\n `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Tokens ────────────────────────────────────────────────────────────────\n\n getToken(contract: string, tokenId: string, wait = false): Promise<ApiResponse<ApiToken>> {\n return this.get<ApiResponse<ApiToken>>(\n `/v1/tokens/${contract}/${tokenId}${wait ? \"?wait=true\" : \"\"}`\n );\n }\n\n getTokensByOwner(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n getTokenHistory(\n contract: string,\n tokenId: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/tokens/${contract}/${tokenId}/history?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Collections ───────────────────────────────────────────────────────────\n\n getCollections(page = 1, limit = 20, isKnown?: boolean): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${normalizeAddress(contract)}`);\n }\n\n getCollectionTokens(\n contract: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Activities ────────────────────────────────────────────────────────────\n\n getActivities(query: ApiActivitiesQuery = {}): Promise<ApiResponse<ApiActivity[]>> {\n const params = new URLSearchParams();\n if (query.type) params.set(\"type\", query.type);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiActivity[]>>(`/v1/activities${qs ? `?${qs}` : \"\"}`);\n }\n\n getActivitiesByAddress(\n address: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // ─── 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"]}
package/dist/index.d.cts CHANGED
@@ -311,6 +311,7 @@ interface ApiCollection {
311
311
  id: string;
312
312
  chain: string;
313
313
  contractAddress: string;
314
+ collectionId: string | null;
314
315
  name: string | null;
315
316
  symbol: string | null;
316
317
  description: string | null;
package/dist/index.d.ts CHANGED
@@ -311,6 +311,7 @@ interface ApiCollection {
311
311
  id: string;
312
312
  chain: string;
313
313
  contractAddress: string;
314
+ collectionId: string | null;
314
315
  name: string | null;
315
316
  symbol: string | null;
316
317
  description: string | null;
package/dist/index.js CHANGED
@@ -38,8 +38,8 @@ var SUPPORTED_TOKENS = [
38
38
  var DEFAULT_CURRENCY = "USDC";
39
39
  var SUPPORTED_NETWORKS = ["mainnet", "sepolia"];
40
40
  var DEFAULT_RPC_URLS = {
41
- mainnet: "https://starknet-mainnet.public.blastapi.io",
42
- sepolia: "https://starknet-sepolia.public.blastapi.io"
41
+ mainnet: "https://rpc.starknet.lava.build",
42
+ sepolia: "https://rpc.starknet-sepolia.lava.build"
43
43
  };
44
44
 
45
45
  // src/config.ts
@@ -899,6 +899,16 @@ var MarketplaceModule = class {
899
899
  }
900
900
  };
901
901
 
902
+ // src/utils/address.ts
903
+ function normalizeAddress(address) {
904
+ const hex = address.replace(/^0x/, "").toLowerCase();
905
+ return "0x" + hex.padStart(64, "0");
906
+ }
907
+ function shortenAddress(address, chars = 4) {
908
+ const norm = normalizeAddress(address);
909
+ return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
910
+ }
911
+
902
912
  // src/api/client.ts
903
913
  var MedialaneApiError = class extends Error {
904
914
  constructor(status, message) {
@@ -954,7 +964,7 @@ var ApiClient = class {
954
964
  if (query.sort) params.set("sort", query.sort);
955
965
  if (query.page !== void 0) params.set("page", String(query.page));
956
966
  if (query.limit !== void 0) params.set("limit", String(query.limit));
957
- if (query.offerer) params.set("offerer", query.offerer);
967
+ if (query.offerer) params.set("offerer", normalizeAddress(query.offerer));
958
968
  if (query.minPrice) params.set("minPrice", query.minPrice);
959
969
  if (query.maxPrice) params.set("maxPrice", query.maxPrice);
960
970
  const qs = params.toString();
@@ -964,11 +974,11 @@ var ApiClient = class {
964
974
  return this.get(`/v1/orders/${orderHash}`);
965
975
  }
966
976
  getActiveOrdersForToken(contract, tokenId) {
967
- return this.get(`/v1/orders/token/${contract}/${tokenId}`);
977
+ return this.get(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);
968
978
  }
969
979
  getOrdersByUser(address, page = 1, limit = 20) {
970
980
  return this.get(
971
- `/v1/orders/user/${address}?page=${page}&limit=${limit}`
981
+ `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`
972
982
  );
973
983
  }
974
984
  // ─── Tokens ────────────────────────────────────────────────────────────────
@@ -979,7 +989,7 @@ var ApiClient = class {
979
989
  }
980
990
  getTokensByOwner(address, page = 1, limit = 20) {
981
991
  return this.get(
982
- `/v1/tokens/owned/${address}?page=${page}&limit=${limit}`
992
+ `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`
983
993
  );
984
994
  }
985
995
  getTokenHistory(contract, tokenId, page = 1, limit = 20) {
@@ -994,15 +1004,15 @@ var ApiClient = class {
994
1004
  return this.get(`/v1/collections?${params}`);
995
1005
  }
996
1006
  getCollectionsByOwner(owner, page = 1, limit = 50) {
997
- const params = new URLSearchParams({ owner, page: String(page), limit: String(limit) });
1007
+ const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });
998
1008
  return this.get(`/v1/collections?${params}`);
999
1009
  }
1000
1010
  getCollection(contract) {
1001
- return this.get(`/v1/collections/${contract}`);
1011
+ return this.get(`/v1/collections/${normalizeAddress(contract)}`);
1002
1012
  }
1003
1013
  getCollectionTokens(contract, page = 1, limit = 20) {
1004
1014
  return this.get(
1005
- `/v1/collections/${contract}/tokens?page=${page}&limit=${limit}`
1015
+ `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`
1006
1016
  );
1007
1017
  }
1008
1018
  // ─── Activities ────────────────────────────────────────────────────────────
@@ -1016,7 +1026,7 @@ var ApiClient = class {
1016
1026
  }
1017
1027
  getActivitiesByAddress(address, page = 1, limit = 20) {
1018
1028
  return this.get(
1019
- `/v1/activities/${address}?page=${page}&limit=${limit}`
1029
+ `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`
1020
1030
  );
1021
1031
  }
1022
1032
  // ─── Search ────────────────────────────────────────────────────────────────
@@ -1129,16 +1139,6 @@ var MedialaneClient = class {
1129
1139
  }
1130
1140
  };
1131
1141
 
1132
- // src/utils/address.ts
1133
- function normalizeAddress(address) {
1134
- const hex = address.replace(/^0x/, "").toLowerCase();
1135
- return "0x" + hex.padStart(64, "0");
1136
- }
1137
- function shortenAddress(address, chars = 4) {
1138
- const norm = normalizeAddress(address);
1139
- return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
1140
- }
1141
-
1142
1142
  export { ApiClient, COLLECTION_CONTRACT_MAINNET, DEFAULT_RPC_URLS, IPMarketplaceABI, MARKETPLACE_CONTRACT_MAINNET, MarketplaceModule, MedialaneApiError, MedialaneClient, MedialaneError, SUPPORTED_NETWORKS, SUPPORTED_TOKENS, buildCancellationTypedData, buildFulfillmentTypedData, buildOrderTypedData, formatAmount, getTokenByAddress, getTokenBySymbol, normalizeAddress, parseAmount, resolveConfig, shortenAddress, stringifyBigInts, u256ToBigInt };
1143
1143
  //# sourceMappingURL=index.js.map
1144
1144
  //# sourceMappingURL=index.js.map
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 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, isKnown?: boolean): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner, page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${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/utils/address.ts","../src/api/client.ts","../src/client.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://rpc.starknet.lava.build\",\n sepolia: \"https://rpc.starknet-sepolia.lava.build\",\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","/**\n * Normalize a Starknet address to a 0x-prefixed 64-character hex string.\n */\nexport function normalizeAddress(address: string): string {\n const hex = address.replace(/^0x/, \"\").toLowerCase();\n return \"0x\" + hex.padStart(64, \"0\");\n}\n\n/**\n * Shorten an address to \"0x1234...abcd\" format.\n */\nexport function shortenAddress(address: string, chars = 4): string {\n const norm = normalizeAddress(address);\n return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;\n}\n","import { normalizeAddress } from \"../utils/address.js\";\nimport 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\", normalizeAddress(query.offerer));\n if (query.minPrice) params.set(\"minPrice\", query.minPrice);\n if (query.maxPrice) params.set(\"maxPrice\", query.maxPrice);\n const qs = params.toString();\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders${qs ? `?${qs}` : \"\"}`);\n }\n\n getOrder(orderHash: string): Promise<ApiResponse<ApiOrder>> {\n return this.get<ApiResponse<ApiOrder>>(`/v1/orders/${orderHash}`);\n }\n\n getActiveOrdersForToken(contract: string, tokenId: string): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);\n }\n\n getOrdersByUser(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiOrder[]>> {\n return this.get<ApiResponse<ApiOrder[]>>(\n `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Tokens ────────────────────────────────────────────────────────────────\n\n getToken(contract: string, tokenId: string, wait = false): Promise<ApiResponse<ApiToken>> {\n return this.get<ApiResponse<ApiToken>>(\n `/v1/tokens/${contract}/${tokenId}${wait ? \"?wait=true\" : \"\"}`\n );\n }\n\n getTokensByOwner(address: string, page = 1, limit = 20): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n getTokenHistory(\n contract: string,\n tokenId: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/tokens/${contract}/${tokenId}/history?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Collections ───────────────────────────────────────────────────────────\n\n getCollections(page = 1, limit = 20, isKnown?: boolean): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ page: String(page), limit: String(limit) });\n if (isKnown !== undefined) params.set(\"isKnown\", String(isKnown));\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollectionsByOwner(owner: string, page = 1, limit = 50): Promise<ApiResponse<ApiCollection[]>> {\n const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });\n return this.get<ApiResponse<ApiCollection[]>>(`/v1/collections?${params}`);\n }\n\n getCollection(contract: string): Promise<ApiResponse<ApiCollection>> {\n return this.get<ApiResponse<ApiCollection>>(`/v1/collections/${normalizeAddress(contract)}`);\n }\n\n getCollectionTokens(\n contract: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiToken[]>> {\n return this.get<ApiResponse<ApiToken[]>>(\n `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`\n );\n }\n\n // ─── Activities ────────────────────────────────────────────────────────────\n\n getActivities(query: ApiActivitiesQuery = {}): Promise<ApiResponse<ApiActivity[]>> {\n const params = new URLSearchParams();\n if (query.type) params.set(\"type\", query.type);\n if (query.page !== undefined) params.set(\"page\", String(query.page));\n if (query.limit !== undefined) params.set(\"limit\", String(query.limit));\n const qs = params.toString();\n return this.get<ApiResponse<ApiActivity[]>>(`/v1/activities${qs ? `?${qs}` : \"\"}`);\n }\n\n getActivitiesByAddress(\n address: string,\n page = 1,\n limit = 20\n ): Promise<ApiResponse<ApiActivity[]>> {\n return this.get<ApiResponse<ApiActivity[]>>(\n `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`\n );\n }\n\n // ─── 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/sdk",
3
- "version": "0.2.8",
3
+ "version": "0.3.1",
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",