@medialane/sdk 0.36.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,70 +1,48 @@
1
1
  import { z } from 'zod';
2
2
  import { hash, cairo, num, Contract, uint256, RpcProvider, TypedDataRevision, shortString, constants } from 'starknet';
3
+ import { keccak_256 } from '@noble/hashes/sha3.js';
4
+ import { base58 } from '@scure/base';
3
5
 
4
6
  // src/config.ts
5
7
 
6
- // src/constants.ts
7
- var MARKETPLACE_721_CONTRACT_MAINNET = "0x069cf5391077e3ebdd9cb6aebf90ed530d29f0d6aa34a43f5afae938c0fb565e";
8
- var MARKETPLACE_721_CLASS_HASH_MAINNET = "0x04c6f952d747ad7ead1b3dad4c1d587837d38f8ec29d6c095a4afa5b5ece5957";
9
- var MARKETPLACE_721_START_BLOCK_MAINNET = 10350340;
10
- var MARKETPLACE_1155_CONTRACT_MAINNET = "0x040cd7b3e73bb3c892166e34bdc01d1797f97ecbc356c23f1cf38033cacf0077";
11
- var MARKETPLACE_1155_CLASS_HASH_MAINNET = "0x02600bb720908f119afe482309d36c39d087587f0df9576454acfb6363e78cd8";
12
- var MARKETPLACE_1155_START_BLOCK_MAINNET = 10350855;
13
- var COLLECTION_721_CONTRACT_MAINNET = "0x0322cb7119955e01ac778d40976eb3ba50540bb0899f812d612f9c7e63e49fd2";
14
- var IPNFT_CLASS_HASH_MAINNET = "0x27ee4ded786d51bced1e94afec3034d6ffce71c032c45ee1ff283ccfa9db12e";
15
- var IPCOLLECTION_CLASS_HASH_MAINNET = "0x287ccdff8b6655a2248cfe170d82eae3a35303cd00ef3e751b25ddca26d9095";
16
- var COLLECTION_721_START_BLOCK_MAINNET = 10046166;
17
- var DROP_FACTORY_CONTRACT_MAINNET = "0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800";
18
- var POP_FACTORY_CONTRACT_MAINNET = "0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111";
19
- var NFTCOMMENTS_CONTRACT_MAINNET = "0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843";
20
- var SUPPORTED_TOKENS = [
21
- {
22
- // Circle-native USDC on Starknet (canonical)
23
- symbol: "USDC",
24
- address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb",
25
- decimals: 6,
26
- listable: true
27
- },
28
- {
29
- symbol: "USDT",
30
- address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
31
- decimals: 6,
32
- listable: true
33
- },
34
- {
35
- symbol: "ETH",
36
- address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
37
- decimals: 18,
38
- listable: true
39
- },
40
- {
41
- symbol: "STRK",
42
- address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
43
- decimals: 18,
44
- listable: true
45
- },
46
- {
47
- symbol: "WBTC",
48
- address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
49
- decimals: 8,
50
- listable: true
8
+ // src/chains.ts
9
+ var CHAINS = ["STARKNET", "ETHEREUM", "SOLANA", "BASE", "BITCOIN"];
10
+ var COORDINATES = {
11
+ STARKNET: {
12
+ rpcUrl: "https://rpc.starknet.lava.build",
13
+ marketplace721: "0x069cf5391077e3ebdd9cb6aebf90ed530d29f0d6aa34a43f5afae938c0fb565e",
14
+ marketplace721ClassHash: "0x04c6f952d747ad7ead1b3dad4c1d587837d38f8ec29d6c095a4afa5b5ece5957",
15
+ marketplace721StartBlock: 10350340,
16
+ marketplace1155: "0x040cd7b3e73bb3c892166e34bdc01d1797f97ecbc356c23f1cf38033cacf0077",
17
+ marketplace1155ClassHash: "0x02600bb720908f119afe482309d36c39d087587f0df9576454acfb6363e78cd8",
18
+ marketplace1155StartBlock: 10350855,
19
+ collection721: "0x0322cb7119955e01ac778d40976eb3ba50540bb0899f812d612f9c7e63e49fd2",
20
+ collection721StartBlock: 10046166,
21
+ ipNftClassHash: "0x27ee4ded786d51bced1e94afec3034d6ffce71c032c45ee1ff283ccfa9db12e",
22
+ ipCollectionClassHash: "0x287ccdff8b6655a2248cfe170d82eae3a35303cd00ef3e751b25ddca26d9095",
23
+ collection1155: "0x0083543c3ee15040a419fc539fa6889f5b956e7d071bcfa97842cb0ae42ad6cc",
24
+ collection1155FactoryClassHash: "0x331a69da8655a882ba1fbcb55188b8fa09116521db901bbbaafc9fead0689f8",
25
+ collection1155ClassHash: "0x4e110b59af240ae6c7742999964c4eae13fb2ed935c47fe97653ec017ebea34",
26
+ collection1155StartBlock: 10665319,
27
+ popFactory: "0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111",
28
+ popCollectionClassHash: "0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f",
29
+ dropFactory: "0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800",
30
+ dropCollectionClassHash: "0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282",
31
+ nftComments: "0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843",
32
+ creatorCoinFactory: "0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c",
33
+ creatorCoinEkuboLauncher: "0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4",
34
+ creatorCoinClassHash: "0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6",
35
+ creatorCoinFactoryClassHash: "0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55",
36
+ creatorCoinStartBlock: 10474544,
37
+ ekuboCore: "0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b"
51
38
  }
52
- ];
53
- var DEFAULT_CURRENCY = "USDC";
54
- var SUPPORTED_NETWORKS = ["mainnet"];
55
- var DEFAULT_RPC_URL = "https://rpc.starknet.lava.build";
56
- var POP_COLLECTION_CLASS_HASH_MAINNET = "0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f";
57
- var DROP_COLLECTION_CLASS_HASH_MAINNET = "0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282";
58
- var COLLECTION_1155_CONTRACT_MAINNET = "0x0083543c3ee15040a419fc539fa6889f5b956e7d071bcfa97842cb0ae42ad6cc";
59
- var COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = "0x331a69da8655a882ba1fbcb55188b8fa09116521db901bbbaafc9fead0689f8";
60
- var COLLECTION_1155_CLASS_HASH_MAINNET = "0x4e110b59af240ae6c7742999964c4eae13fb2ed935c47fe97653ec017ebea34";
61
- var COLLECTION_1155_START_BLOCK_MAINNET = 10665319;
62
- var CREATOR_COIN_FACTORY_CONTRACT_MAINNET = "0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c";
63
- var CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = "0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4";
64
- var CREATOR_COIN_CLASS_HASH_MAINNET = "0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6";
65
- var CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = "0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55";
66
- var CREATOR_COIN_START_BLOCK_MAINNET = 10474544;
67
- var EKUBO_CORE_MAINNET = "0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b";
39
+ };
40
+ function getCoordinates(chain) {
41
+ const c = COORDINATES[chain];
42
+ if (!c) throw new Error(`No coordinates configured for chain "${chain}"`);
43
+ return c;
44
+ }
45
+ var DEFAULT_CHAIN = "STARKNET";
68
46
  var FeeConfigSchema = z.object({
69
47
  enabled: z.boolean().default(true),
70
48
  fundAddress: z.string().min(1).optional(),
@@ -96,10 +74,13 @@ function buildFeeCall(p, cfg) {
96
74
 
97
75
  // src/config.ts
98
76
  var MedialaneConfigSchema = z.object({
99
- network: z.enum(SUPPORTED_NETWORKS).default("mainnet"),
77
+ // Chain-scoped client (spec 2026-06-13 Decision B): one client per chain,
78
+ // coordinates resolved from the registry. Replaces the removed `network` axis.
79
+ chain: z.enum(CHAINS).default(DEFAULT_CHAIN),
100
80
  rpcUrl: z.string().url().optional(),
101
81
  backendUrl: z.string().url().optional(),
102
82
  apiKey: z.string().optional(),
83
+ // Per-contract overrides remain for tests/forks; default from the registry.
103
84
  marketplace721Contract: z.string().optional(),
104
85
  marketplaceContract: z.string().optional(),
105
86
  marketplace1155Contract: z.string().optional(),
@@ -115,19 +96,20 @@ var MedialaneConfigSchema = z.object({
115
96
  });
116
97
  function resolveConfig(raw) {
117
98
  const parsed = MedialaneConfigSchema.parse(raw);
118
- const marketplace721Contract = parsed.marketplace721Contract ?? parsed.marketplaceContract ?? MARKETPLACE_721_CONTRACT_MAINNET;
119
- const collection721Contract = parsed.collection721Contract ?? parsed.collectionContract ?? COLLECTION_721_CONTRACT_MAINNET;
99
+ const coords = getCoordinates(parsed.chain);
100
+ const marketplace721Contract = parsed.marketplace721Contract ?? parsed.marketplaceContract ?? coords.marketplace721;
101
+ const collection721Contract = parsed.collection721Contract ?? parsed.collectionContract ?? coords.collection721;
120
102
  return {
121
- network: parsed.network,
122
- rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URL,
103
+ chain: parsed.chain,
104
+ rpcUrl: parsed.rpcUrl ?? coords.rpcUrl,
123
105
  backendUrl: parsed.backendUrl,
124
106
  apiKey: parsed.apiKey,
125
107
  marketplace721Contract,
126
108
  marketplaceContract: marketplace721Contract,
127
- marketplace1155Contract: parsed.marketplace1155Contract ?? MARKETPLACE_1155_CONTRACT_MAINNET,
109
+ marketplace1155Contract: parsed.marketplace1155Contract ?? coords.marketplace1155,
128
110
  collection721Contract,
129
111
  collectionContract: collection721Contract,
130
- collection1155Contract: parsed.collection1155Contract ?? COLLECTION_1155_CONTRACT_MAINNET,
112
+ collection1155Contract: parsed.collection1155Contract ?? coords.collection1155,
131
113
  retryOptions: parsed.retryOptions,
132
114
  feeConfig: resolveFeeConfig(parsed.feeConfig)
133
115
  };
@@ -4529,6 +4511,68 @@ var IPNftABI = [
4529
4511
  // src/abis/creatorCoinFactory.ts
4530
4512
  var CreatorCoinFactoryABI = [{ "type": "impl", "name": "FactoryImpl", "interface_name": "creator_coin::factory::interface::IFactory" }, { "type": "struct", "name": "core::integer::u256", "members": [{ "name": "low", "type": "core::integer::u128" }, { "name": "high", "type": "core::integer::u128" }] }, { "type": "struct", "name": "core::array::Span::<core::starknet::contract_address::ContractAddress>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<core::starknet::contract_address::ContractAddress>" }] }, { "type": "struct", "name": "core::array::Span::<core::integer::u256>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<core::integer::u256>" }] }, { "type": "struct", "name": "creator_coin::factory::LaunchParameters", "members": [{ "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "transfer_restriction_delay", "type": "core::integer::u64" }, { "name": "max_percentage_buy_launch", "type": "core::integer::u16" }, { "name": "quote_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "initial_holders", "type": "core::array::Span::<core::starknet::contract_address::ContractAddress>" }, { "name": "initial_holders_amounts", "type": "core::array::Span::<core::integer::u256>" }] }, { "type": "enum", "name": "core::bool", "variants": [{ "name": "False", "type": "()" }, { "name": "True", "type": "()" }] }, { "type": "struct", "name": "ekubo::types::i129::i129", "members": [{ "name": "mag", "type": "core::integer::u128" }, { "name": "sign", "type": "core::bool" }] }, { "type": "struct", "name": "creator_coin::exchanges::ekubo::ekubo_adapter::EkuboPoolParameters", "members": [{ "name": "fee", "type": "core::integer::u128" }, { "name": "tick_spacing", "type": "core::integer::u128" }, { "name": "starting_price", "type": "ekubo::types::i129::i129" }, { "name": "bound", "type": "core::integer::u128" }] }, { "type": "struct", "name": "ekubo::types::keys::PoolKey", "members": [{ "name": "token0", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "token1", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "fee", "type": "core::integer::u128" }, { "name": "tick_spacing", "type": "core::integer::u128" }, { "name": "extension", "type": "core::starknet::contract_address::ContractAddress" }] }, { "type": "struct", "name": "ekubo::types::bounds::Bounds", "members": [{ "name": "lower", "type": "ekubo::types::i129::i129" }, { "name": "upper", "type": "ekubo::types::i129::i129" }] }, { "type": "struct", "name": "creator_coin::exchanges::ekubo::launcher::EkuboLP", "members": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "quote_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "pool_key", "type": "ekubo::types::keys::PoolKey" }, { "name": "bounds", "type": "ekubo::types::bounds::Bounds" }] }, { "type": "enum", "name": "creator_coin::exchanges::SupportedExchanges", "variants": [{ "name": "Jediswap", "type": "()" }, { "name": "Ekubo", "type": "()" }, { "name": "Starkdefi", "type": "()" }] }, { "type": "enum", "name": "creator_coin::token::creator_coin::LiquidityType", "variants": [{ "name": "JediERC20", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "StarkDeFiERC20", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "EkuboNFT", "type": "core::integer::u64" }] }, { "type": "enum", "name": "core::option::Option::<(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)>", "variants": [{ "name": "Some", "type": "(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)" }, { "name": "None", "type": "()" }] }, { "type": "interface", "name": "creator_coin::factory::interface::IFactory", "items": [{ "type": "function", "name": "create_creator_coin", "inputs": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "name", "type": "core::felt252" }, { "name": "symbol", "type": "core::felt252" }, { "name": "initial_supply", "type": "core::integer::u256" }, { "name": "contract_address_salt", "type": "core::felt252" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_jediswap", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "quote_amount", "type": "core::integer::u256" }, { "name": "unlock_time", "type": "core::integer::u64" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_ekubo", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "ekubo_parameters", "type": "creator_coin::exchanges::ekubo::ekubo_adapter::EkuboPoolParameters" }], "outputs": [{ "type": "(core::integer::u64, creator_coin::exchanges::ekubo::launcher::EkuboLP)" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_starkdefi", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "quote_amount", "type": "core::integer::u256" }, { "name": "unlock_time", "type": "core::integer::u64" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "exchange_address", "inputs": [{ "name": "exchange", "type": "creator_coin::exchanges::SupportedExchanges" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }, { "type": "function", "name": "lock_manager_address", "inputs": [], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }, { "type": "function", "name": "locked_liquidity", "inputs": [{ "name": "token", "type": "core::starknet::contract_address::ContractAddress" }], "outputs": [{ "type": "core::option::Option::<(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)>" }], "state_mutability": "view" }, { "type": "function", "name": "is_creator_coin", "inputs": [{ "name": "address", "type": "core::starknet::contract_address::ContractAddress" }], "outputs": [{ "type": "core::bool" }], "state_mutability": "view" }, { "type": "function", "name": "ekubo_core_address", "inputs": [], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }] }, { "type": "struct", "name": "core::array::Span::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "struct", "name": "core::array::Span::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "constructor", "name": "constructor", "inputs": [{ "name": "creator_coin_class_hash", "type": "core::starknet::class_hash::ClassHash" }, { "name": "lock_manager_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "exchanges", "type": "core::array::Span::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>" }, { "name": "migrated_tokens", "type": "core::array::Span::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::CreatorCoinCreated", "kind": "struct", "members": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "name", "type": "core::felt252", "kind": "data" }, { "name": "symbol", "type": "core::felt252", "kind": "data" }, { "name": "initial_supply", "type": "core::integer::u256", "kind": "data" }, { "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::CreatorCoinLaunched", "kind": "struct", "members": [{ "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "quote_token", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "exchange_name", "type": "core::felt252", "kind": "data" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::Event", "kind": "enum", "variants": [{ "name": "CreatorCoinCreated", "type": "creator_coin::factory::factory::Factory::CreatorCoinCreated", "kind": "nested" }, { "name": "CreatorCoinLaunched", "type": "creator_coin::factory::factory::Factory::CreatorCoinLaunched", "kind": "nested" }] }];
4531
4513
 
4514
+ // src/constants.ts
4515
+ var SN = getCoordinates("STARKNET");
4516
+ var MARKETPLACE_721_CONTRACT_MAINNET = SN.marketplace721;
4517
+ var MARKETPLACE_721_CLASS_HASH_MAINNET = SN.marketplace721ClassHash;
4518
+ var MARKETPLACE_721_START_BLOCK_MAINNET = SN.marketplace721StartBlock;
4519
+ var MARKETPLACE_1155_CONTRACT_MAINNET = SN.marketplace1155;
4520
+ var MARKETPLACE_1155_CLASS_HASH_MAINNET = SN.marketplace1155ClassHash;
4521
+ var MARKETPLACE_1155_START_BLOCK_MAINNET = SN.marketplace1155StartBlock;
4522
+ var COLLECTION_721_CONTRACT_MAINNET = SN.collection721;
4523
+ var IPNFT_CLASS_HASH_MAINNET = SN.ipNftClassHash;
4524
+ var IPCOLLECTION_CLASS_HASH_MAINNET = SN.ipCollectionClassHash;
4525
+ var COLLECTION_721_START_BLOCK_MAINNET = SN.collection721StartBlock;
4526
+ var DROP_FACTORY_CONTRACT_MAINNET = SN.dropFactory;
4527
+ var POP_FACTORY_CONTRACT_MAINNET = SN.popFactory;
4528
+ var NFTCOMMENTS_CONTRACT_MAINNET = SN.nftComments;
4529
+ var SUPPORTED_TOKENS = [
4530
+ {
4531
+ // Circle-native USDC on Starknet (canonical)
4532
+ symbol: "USDC",
4533
+ address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb",
4534
+ decimals: 6,
4535
+ listable: true
4536
+ },
4537
+ {
4538
+ symbol: "USDT",
4539
+ address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
4540
+ decimals: 6,
4541
+ listable: true
4542
+ },
4543
+ {
4544
+ symbol: "ETH",
4545
+ address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
4546
+ decimals: 18,
4547
+ listable: true
4548
+ },
4549
+ {
4550
+ symbol: "STRK",
4551
+ address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
4552
+ decimals: 18,
4553
+ listable: true
4554
+ },
4555
+ {
4556
+ symbol: "WBTC",
4557
+ address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
4558
+ decimals: 8,
4559
+ listable: true
4560
+ }
4561
+ ];
4562
+ var DEFAULT_CURRENCY = "USDC";
4563
+ var POP_COLLECTION_CLASS_HASH_MAINNET = SN.popCollectionClassHash;
4564
+ var DROP_COLLECTION_CLASS_HASH_MAINNET = SN.dropCollectionClassHash;
4565
+ var COLLECTION_1155_CONTRACT_MAINNET = SN.collection1155;
4566
+ var COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = SN.collection1155FactoryClassHash;
4567
+ var COLLECTION_1155_CLASS_HASH_MAINNET = SN.collection1155ClassHash;
4568
+ var COLLECTION_1155_START_BLOCK_MAINNET = SN.collection1155StartBlock;
4569
+ var CREATOR_COIN_FACTORY_CONTRACT_MAINNET = SN.creatorCoinFactory;
4570
+ var CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = SN.creatorCoinEkuboLauncher;
4571
+ var CREATOR_COIN_CLASS_HASH_MAINNET = SN.creatorCoinClassHash;
4572
+ var CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = SN.creatorCoinFactoryClassHash;
4573
+ var CREATOR_COIN_START_BLOCK_MAINNET = SN.creatorCoinStartBlock;
4574
+ var EKUBO_CORE_MAINNET = SN.ekuboCore;
4575
+
4532
4576
  // src/utils/bigint.ts
4533
4577
  function stringifyBigInts(obj) {
4534
4578
  if (typeof obj === "bigint") {
@@ -4669,7 +4713,10 @@ function toSignatureArray(sig) {
4669
4713
  const s = sig;
4670
4714
  return [s.r.toString(), s.s.toString()];
4671
4715
  }
4672
- function getChainId(_config) {
4716
+ function getChainId(config) {
4717
+ if (config.chain !== "STARKNET") {
4718
+ throw new Error(`SNIP-12 signing is Starknet-only; got chain "${config.chain}"`);
4719
+ }
4673
4720
  return constants.StarknetChainId.SN_MAIN;
4674
4721
  }
4675
4722
  function resolveToken(currency) {
@@ -4736,7 +4783,7 @@ async function createListing(account, params, config) {
4736
4783
  salt: generateSalt(),
4737
4784
  counter
4738
4785
  };
4739
- const chainId = getChainId();
4786
+ const chainId = getChainId(config);
4740
4787
  const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId));
4741
4788
  const signature = await account.signMessage(typedData);
4742
4789
  const signatureArray = toSignatureArray(signature);
@@ -4818,7 +4865,7 @@ async function makeOffer(account, params, config) {
4818
4865
  salt: generateSalt(),
4819
4866
  counter
4820
4867
  };
4821
- const chainId = getChainId();
4868
+ const chainId = getChainId(config);
4822
4869
  const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId));
4823
4870
  const signature = await account.signMessage(typedData);
4824
4871
  const signatureArray = toSignatureArray(signature);
@@ -4885,7 +4932,7 @@ async function fulfillOrder(account, params, config) {
4885
4932
  async function cancelOrder(account, params, config) {
4886
4933
  const { orderHash } = params;
4887
4934
  const { contract, provider } = makeContract(config);
4888
- const chainId = getChainId();
4935
+ const chainId = getChainId(config);
4889
4936
  const cancelParams = {
4890
4937
  order_hash: orderHash,
4891
4938
  offerer: account.address
@@ -5071,7 +5118,7 @@ async function createListing1155(account, params, config) {
5071
5118
  const priceWei = parseAmount(pricePerUnit, token.decimals);
5072
5119
  const now = Math.floor(Date.now() / 1e3);
5073
5120
  const endTime = now + durationSeconds;
5074
- const chainId = getChainId();
5121
+ const chainId = getChainId(config);
5075
5122
  const counter = (await contract.get_counter(account.address)).toString();
5076
5123
  const royaltyMaxBps = await resolveRoyaltyMaxBps(provider, nftContract, tokenId, params.royaltyMaxBps);
5077
5124
  const orderParams = {
@@ -5171,7 +5218,7 @@ async function cancelOrder1155(account, params, config) {
5171
5218
  const { orderHash } = params;
5172
5219
  const contract = getContract(config);
5173
5220
  const provider = getProvider(config);
5174
- const chainId = getChainId();
5221
+ const chainId = getChainId(config);
5175
5222
  const cancelParams = {
5176
5223
  order_hash: orderHash,
5177
5224
  offerer: account.address
@@ -5205,7 +5252,7 @@ async function makeOffer1155(account, params, config) {
5205
5252
  } = params;
5206
5253
  const contract = getContract(config);
5207
5254
  const provider = getProvider(config);
5208
- const chainId = getChainId();
5255
+ const chainId = getChainId(config);
5209
5256
  const token = resolveToken(currency);
5210
5257
  const priceWei = parseAmount(price, token.decimals);
5211
5258
  const now = Math.floor(Date.now() / 1e3);
@@ -5387,12 +5434,46 @@ var Medialane1155Module = class {
5387
5434
  return build1155CancellationTypedData(params, chainId);
5388
5435
  }
5389
5436
  };
5390
- function normalizeAddress(address) {
5437
+ function normalizeAddress(chain, address) {
5438
+ switch (chain) {
5439
+ case "STARKNET":
5440
+ return normalizeStarknet(address);
5441
+ case "ETHEREUM":
5442
+ case "BASE":
5443
+ return normalizeEvm(address);
5444
+ case "SOLANA":
5445
+ return normalizeSolana(address);
5446
+ case "BITCOIN":
5447
+ throw new Error("BITCOIN address normalization not implemented");
5448
+ }
5449
+ }
5450
+ function normalizeStarknet(address) {
5391
5451
  try {
5392
5452
  const hex = num.toHex(BigInt(address));
5393
5453
  return "0x" + hex.slice(2).padStart(64, "0").toLowerCase();
5394
5454
  } catch {
5395
- throw new Error(`Invalid Starknet address: "${address}"`);
5455
+ throw new Error(`Invalid STARKNET address: "${address}"`);
5456
+ }
5457
+ }
5458
+ function normalizeEvm(address) {
5459
+ const m = /^0x([0-9a-fA-F]{40})$/.exec(address);
5460
+ if (!m) throw new Error(`Invalid ETHEREUM/BASE address: "${address}"`);
5461
+ const lower = m[1].toLowerCase();
5462
+ const hash2 = keccak_256(new TextEncoder().encode(lower));
5463
+ let out = "0x";
5464
+ for (let i = 0; i < 40; i++) {
5465
+ const nibble = hash2[i >> 1] >> (i % 2 === 0 ? 4 : 0) & 15;
5466
+ out += nibble >= 8 ? lower[i].toUpperCase() : lower[i];
5467
+ }
5468
+ return out;
5469
+ }
5470
+ function normalizeSolana(address) {
5471
+ try {
5472
+ const bytes = base58.decode(address);
5473
+ if (bytes.length !== 32) throw new Error("not a 32-byte key");
5474
+ return address;
5475
+ } catch {
5476
+ throw new Error(`Invalid SOLANA address: "${address}"`);
5396
5477
  }
5397
5478
  }
5398
5479
  function normalizeHash(hash2) {
@@ -5400,11 +5481,11 @@ function normalizeHash(hash2) {
5400
5481
  const hex = num.toHex(BigInt(hash2));
5401
5482
  return "0x" + hex.slice(2).padStart(64, "0").toLowerCase();
5402
5483
  } catch {
5403
- throw new Error(`Invalid Starknet hash: "${hash2}"`);
5484
+ throw new Error(`Invalid hash: "${hash2}"`);
5404
5485
  }
5405
5486
  }
5406
- function shortenAddress(address, chars = 4) {
5407
- const norm = normalizeAddress(address);
5487
+ function shortenAddress(chain, address, chars = 4) {
5488
+ const norm = normalizeAddress(chain, address);
5408
5489
  return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
5409
5490
  }
5410
5491
 
@@ -5458,11 +5539,16 @@ var MedialaneApiError = class extends Error {
5458
5539
  }
5459
5540
  };
5460
5541
  var ApiClient = class {
5461
- constructor(baseUrl, apiKey, retryOptions) {
5542
+ constructor(baseUrl, apiKey, retryOptions, chain = "STARKNET") {
5462
5543
  this.baseUrl = baseUrl;
5544
+ this.chain = chain;
5463
5545
  this.baseHeaders = apiKey ? { "x-api-key": apiKey } : {};
5464
5546
  this.retryOptions = retryOptions;
5465
5547
  }
5548
+ /** Normalize an address for this client's chain (chain-scoped — Decision B). */
5549
+ addr(a) {
5550
+ return normalizeAddress(this.chain, a);
5551
+ }
5466
5552
  async request(path, init) {
5467
5553
  const url = `${this.baseUrl.replace(/\/$/, "")}${path}`;
5468
5554
  const headers = { ...this.baseHeaders };
@@ -5524,7 +5610,7 @@ var ApiClient = class {
5524
5610
  if (query.sort) params.set("sort", query.sort);
5525
5611
  if (query.page !== void 0) params.set("page", String(query.page));
5526
5612
  if (query.limit !== void 0) params.set("limit", String(query.limit));
5527
- if (query.offerer) params.set("offerer", normalizeAddress(query.offerer));
5613
+ if (query.offerer) params.set("offerer", this.addr(query.offerer));
5528
5614
  if (query.minPrice) params.set("minPrice", query.minPrice);
5529
5615
  if (query.maxPrice) params.set("maxPrice", query.maxPrice);
5530
5616
  const qs = params.toString();
@@ -5534,11 +5620,11 @@ var ApiClient = class {
5534
5620
  return this.get(`/v1/orders/${orderHash}`);
5535
5621
  }
5536
5622
  getActiveOrdersForToken(contract, tokenId) {
5537
- return this.get(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);
5623
+ return this.get(`/v1/orders/token/${this.addr(contract)}/${tokenId}`);
5538
5624
  }
5539
5625
  getOrdersByUser(address, page = 1, limit = 20) {
5540
5626
  return this.get(
5541
- `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5627
+ `/v1/orders/user/${this.addr(address)}?page=${page}&limit=${limit}`
5542
5628
  );
5543
5629
  }
5544
5630
  // ─── Tokens ────────────────────────────────────────────────────────────────
@@ -5549,7 +5635,7 @@ var ApiClient = class {
5549
5635
  }
5550
5636
  getTokensByOwner(address, page = 1, limit = 20) {
5551
5637
  return this.get(
5552
- `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5638
+ `/v1/tokens/owned/${this.addr(address)}?page=${page}&limit=${limit}`
5553
5639
  );
5554
5640
  }
5555
5641
  getTokenHistory(contract, tokenId, page = 1, limit = 20) {
@@ -5566,15 +5652,15 @@ var ApiClient = class {
5566
5652
  return this.get(`/v1/collections?${params}`);
5567
5653
  }
5568
5654
  getCollectionsByOwner(owner, page = 1, limit = 50) {
5569
- const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });
5655
+ const params = new URLSearchParams({ owner: this.addr(owner), page: String(page), limit: String(limit) });
5570
5656
  return this.get(`/v1/collections?${params}`);
5571
5657
  }
5572
5658
  getCollection(contract) {
5573
- return this.get(`/v1/collections/${normalizeAddress(contract)}`);
5659
+ return this.get(`/v1/collections/${this.addr(contract)}`);
5574
5660
  }
5575
5661
  getCollectionTokens(contract, page = 1, limit = 20) {
5576
5662
  return this.get(
5577
- `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`
5663
+ `/v1/collections/${this.addr(contract)}/tokens?page=${page}&limit=${limit}`
5578
5664
  );
5579
5665
  }
5580
5666
  // ─── Activities ────────────────────────────────────────────────────────────
@@ -5588,7 +5674,7 @@ var ApiClient = class {
5588
5674
  }
5589
5675
  getActivitiesByAddress(address, page = 1, limit = 20) {
5590
5676
  return this.get(
5591
- `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5677
+ `/v1/activities/${this.addr(address)}?page=${page}&limit=${limit}`
5592
5678
  );
5593
5679
  }
5594
5680
  // ─── Comments ──────────────────────────────────────────────────────────────
@@ -5598,7 +5684,7 @@ var ApiClient = class {
5598
5684
  if (opts.limit !== void 0) params.set("limit", String(opts.limit));
5599
5685
  const qs = params.toString();
5600
5686
  return this.get(
5601
- `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/comments${qs ? `?${qs}` : ""}`
5687
+ `/v1/tokens/${this.addr(contract)}/${tokenId}/comments${qs ? `?${qs}` : ""}`
5602
5688
  );
5603
5689
  }
5604
5690
  // ─── Search ────────────────────────────────────────────────────────────────
@@ -5736,7 +5822,7 @@ var ApiClient = class {
5736
5822
  }
5737
5823
  // ─── Collection Profiles ────────────────────────────────────────────────────
5738
5824
  async getCollectionProfile(contractAddress) {
5739
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;
5825
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/profile`;
5740
5826
  const res = await fetch(url, { headers: this.baseHeaders });
5741
5827
  return this.checkResponse(res, { allow404: true });
5742
5828
  }
@@ -5744,7 +5830,7 @@ var ApiClient = class {
5744
5830
  * Update collection profile. Requires Clerk JWT for ownership check.
5745
5831
  */
5746
5832
  async updateCollectionProfile(contractAddress, data, clerkToken) {
5747
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;
5833
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/profile`;
5748
5834
  const res = await fetch(url, {
5749
5835
  method: "PATCH",
5750
5836
  headers: {
@@ -5757,7 +5843,7 @@ var ApiClient = class {
5757
5843
  return this.checkResponse(res);
5758
5844
  }
5759
5845
  async getGatedContent(contractAddress, clerkToken) {
5760
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/gated-content`;
5846
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/gated-content`;
5761
5847
  const res = await fetch(url, {
5762
5848
  headers: { ...this.baseHeaders, "Authorization": `Bearer ${clerkToken}` }
5763
5849
  });
@@ -5775,7 +5861,7 @@ var ApiClient = class {
5775
5861
  return this.checkResponse(res);
5776
5862
  }
5777
5863
  async getCreatorProfile(walletAddress) {
5778
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;
5864
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${this.addr(walletAddress)}/profile`;
5779
5865
  const res = await fetch(url, { headers: this.baseHeaders });
5780
5866
  return this.checkResponse(res, { allow404: true });
5781
5867
  }
@@ -5789,7 +5875,7 @@ var ApiClient = class {
5789
5875
  * Update creator profile. Requires Clerk JWT; wallet must match authenticated user.
5790
5876
  */
5791
5877
  async updateCreatorProfile(walletAddress, data, clerkToken) {
5792
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;
5878
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${this.addr(walletAddress)}/profile`;
5793
5879
  const res = await fetch(url, {
5794
5880
  method: "PATCH",
5795
5881
  headers: {
@@ -5889,7 +5975,7 @@ var ApiClient = class {
5889
5975
  if (opts.limit !== void 0) params.set("limit", String(opts.limit));
5890
5976
  const qs = params.toString();
5891
5977
  return this.get(
5892
- `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/remixes${qs ? `?${qs}` : ""}`
5978
+ `/v1/tokens/${this.addr(contract)}/${tokenId}/remixes${qs ? `?${qs}` : ""}`
5893
5979
  );
5894
5980
  }
5895
5981
  /**
@@ -5984,14 +6070,14 @@ var ApiClient = class {
5984
6070
  }
5985
6071
  async getPopEligibility(collection, wallet) {
5986
6072
  const res = await this.get(
5987
- `/v1/pop/eligibility/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`
6073
+ `/v1/pop/eligibility/${this.addr(collection)}/${this.addr(wallet)}`
5988
6074
  );
5989
6075
  return res.data;
5990
6076
  }
5991
6077
  async getPopEligibilityBatch(collection, wallets) {
5992
- const params = new URLSearchParams({ wallets: wallets.map(normalizeAddress).join(",") });
6078
+ const params = new URLSearchParams({ wallets: wallets.map((w) => this.addr(w)).join(",") });
5993
6079
  const res = await this.get(
5994
- `/v1/pop/eligibility/${normalizeAddress(collection)}?${params}`
6080
+ `/v1/pop/eligibility/${this.addr(collection)}?${params}`
5995
6081
  );
5996
6082
  return res.data;
5997
6083
  }
@@ -6001,7 +6087,7 @@ var ApiClient = class {
6001
6087
  }
6002
6088
  async getDropMintStatus(collection, wallet) {
6003
6089
  const res = await this.get(
6004
- `/v1/drop/mint-status/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`
6090
+ `/v1/drop/mint-status/${this.addr(collection)}/${this.addr(wallet)}`
6005
6091
  );
6006
6092
  return res.data;
6007
6093
  }
@@ -6011,7 +6097,7 @@ var PopService = class {
6011
6097
  this.factoryAddress = POP_FACTORY_CONTRACT_MAINNET;
6012
6098
  }
6013
6099
  _collection(address, account) {
6014
- return new Contract(POPCollectionABI, normalizeAddress(address), account);
6100
+ return new Contract(POPCollectionABI, normalizeAddress("STARKNET", address), account);
6015
6101
  }
6016
6102
  async claim(account, collectionAddress) {
6017
6103
  const call = this._collection(collectionAddress, account).populate("claim", []);
@@ -6087,7 +6173,7 @@ var DropService = class {
6087
6173
  this.config = config;
6088
6174
  }
6089
6175
  _collection(address, account) {
6090
- return new Contract(DropCollectionABI, normalizeAddress(address), account);
6176
+ return new Contract(DropCollectionABI, normalizeAddress("STARKNET", address), account);
6091
6177
  }
6092
6178
  async claim(account, collectionAddress, quantity = 1) {
6093
6179
  const collection = this._collection(collectionAddress, account);
@@ -6170,14 +6256,14 @@ var ERC1155CollectionService = class {
6170
6256
  _factory(account) {
6171
6257
  return new Contract(
6172
6258
  IPCollection1155FactoryABI,
6173
- normalizeAddress(this.factoryAddress),
6259
+ normalizeAddress("STARKNET", this.factoryAddress),
6174
6260
  account
6175
6261
  );
6176
6262
  }
6177
6263
  _collection(address, account) {
6178
6264
  return new Contract(
6179
6265
  IPCollection1155ABI,
6180
- normalizeAddress(address),
6266
+ normalizeAddress("STARKNET", address),
6181
6267
  account
6182
6268
  );
6183
6269
  }
@@ -6299,7 +6385,7 @@ async function getCreatorCoinPrice(coinAddress, provider) {
6299
6385
  if (BigInt(r[0]) !== 0n || BigInt(r[1]) !== 0n) return null;
6300
6386
  const fee = r[2];
6301
6387
  const tickSpacing = r[3];
6302
- const quoteToken = normalizeAddress("0x" + BigInt(r[7]).toString(16));
6388
+ const quoteToken = normalizeAddress("STARKNET", "0x" + BigInt(r[7]).toString(16));
6303
6389
  const token = getTokenByAddress(quoteToken);
6304
6390
  const quoteDecimals = token?.decimals ?? 18;
6305
6391
  const ci = BigInt(coinAddress);
@@ -6367,20 +6453,20 @@ function buildLaunchOnEkuboCalls(params) {
6367
6453
  }
6368
6454
  var CREATOR_COIN_CREATED_SELECTOR = hash.getSelectorFromName("CreatorCoinCreated");
6369
6455
  function parseCreatorCoinCreated(receipt) {
6370
- const factory = normalizeAddress(CREATOR_COIN_FACTORY_CONTRACT_MAINNET);
6456
+ const factory = normalizeAddress("STARKNET", CREATOR_COIN_FACTORY_CONTRACT_MAINNET);
6371
6457
  for (const ev of receipt?.events ?? []) {
6372
6458
  let from;
6373
6459
  try {
6374
- from = normalizeAddress(ev.from_address ?? "");
6460
+ from = normalizeAddress("STARKNET", ev.from_address ?? "");
6375
6461
  } catch {
6376
6462
  continue;
6377
6463
  }
6378
6464
  if (from !== factory) continue;
6379
6465
  const k0 = ev.keys?.[0];
6380
- if (!k0 || normalizeAddress(k0) !== normalizeAddress(CREATOR_COIN_CREATED_SELECTOR)) continue;
6466
+ if (!k0 || normalizeAddress("STARKNET", k0) !== normalizeAddress("STARKNET", CREATOR_COIN_CREATED_SELECTOR)) continue;
6381
6467
  const data = ev.data ?? [];
6382
6468
  if (data.length < 1) continue;
6383
- return normalizeAddress(data[data.length - 1]);
6469
+ return normalizeAddress("STARKNET", data[data.length - 1]);
6384
6470
  }
6385
6471
  throw new Error("Coin deployed but the coin address could not be read from the receipt");
6386
6472
  }
@@ -6450,11 +6536,11 @@ var MedialaneClient = class {
6450
6536
  }
6451
6537
  });
6452
6538
  } else {
6453
- this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions);
6539
+ this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions, this.config.chain);
6454
6540
  }
6455
6541
  }
6456
- get network() {
6457
- return this.config.network;
6542
+ get chain() {
6543
+ return this.config.chain;
6458
6544
  }
6459
6545
  get rpcUrl() {
6460
6546
  return this.config.rpcUrl;
@@ -6516,8 +6602,10 @@ var SERVICES = {
6516
6602
  standard: "ERC721",
6517
6603
  provenance: "MEDIALANE",
6518
6604
  onchain: {
6519
- factoryAddress: COLLECTION_721_CONTRACT_MAINNET,
6520
- startBlock: COLLECTION_721_START_BLOCK_MAINNET
6605
+ STARKNET: {
6606
+ factoryAddress: COLLECTION_721_CONTRACT_MAINNET,
6607
+ startBlock: COLLECTION_721_START_BLOCK_MAINNET
6608
+ }
6521
6609
  },
6522
6610
  uiVariant: "standard",
6523
6611
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
@@ -6539,7 +6627,7 @@ var SERVICES = {
6539
6627
  uiVariant: "standard",
6540
6628
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
6541
6629
  // No factory — single shared contract. Events declared when the genesis
6542
- // contract address is wired into onchain.factoryAddress here.
6630
+ // contract address is wired into onchain.STARKNET.factoryAddress here.
6543
6631
  metadataSchema: { licenseDefault: "CC BY-SA" }
6544
6632
  },
6545
6633
  "mip-erc1155": {
@@ -6549,9 +6637,11 @@ var SERVICES = {
6549
6637
  standard: "ERC1155",
6550
6638
  provenance: "MEDIALANE",
6551
6639
  onchain: {
6552
- factoryAddress: COLLECTION_1155_CONTRACT_MAINNET,
6553
- classHash: COLLECTION_1155_CLASS_HASH_MAINNET,
6554
- startBlock: COLLECTION_1155_START_BLOCK_MAINNET
6640
+ STARKNET: {
6641
+ factoryAddress: COLLECTION_1155_CONTRACT_MAINNET,
6642
+ classHash: COLLECTION_1155_CLASS_HASH_MAINNET,
6643
+ startBlock: COLLECTION_1155_START_BLOCK_MAINNET
6644
+ }
6555
6645
  },
6556
6646
  uiVariant: "edition",
6557
6647
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
@@ -6567,8 +6657,10 @@ var SERVICES = {
6567
6657
  standard: "ERC721",
6568
6658
  provenance: "MEDIALANE",
6569
6659
  onchain: {
6570
- factoryAddress: POP_FACTORY_CONTRACT_MAINNET,
6571
- classHash: POP_COLLECTION_CLASS_HASH_MAINNET
6660
+ STARKNET: {
6661
+ factoryAddress: POP_FACTORY_CONTRACT_MAINNET,
6662
+ classHash: POP_COLLECTION_CLASS_HASH_MAINNET
6663
+ }
6572
6664
  },
6573
6665
  uiVariant: "pop",
6574
6666
  capabilities: ["claim", "transfer"],
@@ -6585,8 +6677,10 @@ var SERVICES = {
6585
6677
  standard: "ERC721",
6586
6678
  provenance: "MEDIALANE",
6587
6679
  onchain: {
6588
- factoryAddress: DROP_FACTORY_CONTRACT_MAINNET,
6589
- classHash: DROP_COLLECTION_CLASS_HASH_MAINNET
6680
+ STARKNET: {
6681
+ factoryAddress: DROP_FACTORY_CONTRACT_MAINNET,
6682
+ classHash: DROP_COLLECTION_CLASS_HASH_MAINNET
6683
+ }
6590
6684
  },
6591
6685
  uiVariant: "drop",
6592
6686
  capabilities: ["claim", "list", "buy", "make_offer", "cancel", "transfer"],
@@ -6603,9 +6697,11 @@ var SERVICES = {
6603
6697
  standard: "ERC20",
6604
6698
  provenance: "MEDIALANE",
6605
6699
  onchain: {
6606
- factoryAddress: CREATOR_COIN_FACTORY_CONTRACT_MAINNET,
6607
- classHash: CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET,
6608
- startBlock: CREATOR_COIN_START_BLOCK_MAINNET
6700
+ STARKNET: {
6701
+ factoryAddress: CREATOR_COIN_FACTORY_CONTRACT_MAINNET,
6702
+ classHash: CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET,
6703
+ startBlock: CREATOR_COIN_START_BLOCK_MAINNET
6704
+ }
6609
6705
  },
6610
6706
  uiVariant: "coin",
6611
6707
  // `swap` is a UI affordance (05 §III): the marketplace renders an embedded
@@ -6625,9 +6721,11 @@ var SERVICES = {
6625
6721
  standard: "ERC721",
6626
6722
  provenance: "MEDIALANE",
6627
6723
  onchain: {
6628
- factoryAddress: MARKETPLACE_721_CONTRACT_MAINNET,
6629
- classHash: MARKETPLACE_721_CLASS_HASH_MAINNET,
6630
- startBlock: MARKETPLACE_721_START_BLOCK_MAINNET
6724
+ STARKNET: {
6725
+ factoryAddress: MARKETPLACE_721_CONTRACT_MAINNET,
6726
+ classHash: MARKETPLACE_721_CLASS_HASH_MAINNET,
6727
+ startBlock: MARKETPLACE_721_START_BLOCK_MAINNET
6728
+ }
6631
6729
  },
6632
6730
  uiVariant: "standard",
6633
6731
  capabilities: ["list", "buy", "make_offer", "cancel"],
@@ -6644,9 +6742,11 @@ var SERVICES = {
6644
6742
  standard: "ERC1155",
6645
6743
  provenance: "MEDIALANE",
6646
6744
  onchain: {
6647
- factoryAddress: MARKETPLACE_1155_CONTRACT_MAINNET,
6648
- classHash: MARKETPLACE_1155_CLASS_HASH_MAINNET,
6649
- startBlock: MARKETPLACE_1155_START_BLOCK_MAINNET
6745
+ STARKNET: {
6746
+ factoryAddress: MARKETPLACE_1155_CONTRACT_MAINNET,
6747
+ classHash: MARKETPLACE_1155_CLASS_HASH_MAINNET,
6748
+ startBlock: MARKETPLACE_1155_START_BLOCK_MAINNET
6749
+ }
6650
6750
  },
6651
6751
  uiVariant: "edition",
6652
6752
  capabilities: ["list", "buy", "make_offer", "cancel"],
@@ -6699,6 +6799,6 @@ function getServicesByCapability(cap) {
6699
6799
  );
6700
6800
  }
6701
6801
 
6702
- export { ApiClient, MAX_SUPPLY as COIN_MAX_SUPPLY, MIN_SUPPLY as COIN_MIN_SUPPLY, COLLECTION_1155_CLASS_HASH_MAINNET, COLLECTION_1155_CONTRACT_MAINNET, COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET, COLLECTION_1155_START_BLOCK_MAINNET, COLLECTION_721_CONTRACT_MAINNET, COLLECTION_721_START_BLOCK_MAINNET, CREATOR_COIN_CLASS_HASH_MAINNET, CREATOR_COIN_EKUBO_LAUNCHER_MAINNET, CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET, CREATOR_COIN_FACTORY_CONTRACT_MAINNET, CREATOR_COIN_START_BLOCK_MAINNET, CollectionRegistryABI, CreatorCoinFactoryABI, CreatorCoinService, DEFAULT_RPC_URL, DROP_COLLECTION_CLASS_HASH_MAINNET, DROP_FACTORY_CONTRACT_MAINNET, DropCollectionABI, DropFactoryABI, DropService, EKUBO_CORE_MAINNET, ERC1155CollectionService, FeeConfigSchema, IPCOLLECTION_CLASS_HASH_MAINNET, IPCollection1155ABI, IPCollection1155FactoryABI, IPCollectionABI, IPMarketplaceABI, IPNFT_CLASS_HASH_MAINNET, IPNftABI, LAUNCH_PRICE_QUOTE_PER_COIN, MARKETPLACE_1155_CLASS_HASH_MAINNET, MARKETPLACE_1155_CONTRACT_MAINNET, MARKETPLACE_1155_START_BLOCK_MAINNET, MARKETPLACE_721_CLASS_HASH_MAINNET, MARKETPLACE_721_CONTRACT_MAINNET, MARKETPLACE_721_START_BLOCK_MAINNET, MarketplaceModule, Medialane1155ABI, Medialane1155Module, MedialaneApiError, MedialaneClient, MedialaneError, NFTCOMMENTS_CONTRACT_MAINNET, OPEN_LICENSES, POPCollectionABI, POPFactoryABI, POP_COLLECTION_CLASS_HASH_MAINNET, POP_FACTORY_CONTRACT_MAINNET, PUBLIC_RPC_FALLBACKS, PopService, SUPPORTED_NETWORKS, SUPPORTED_TOKENS, VALIDATED_EKUBO_PARAMS, build1155CancellationTypedData, build1155OrderTypedData, buildCancellationTypedData, buildCreateCreatorCoinCall, buildFeeCall, buildLaunchOnEkuboCalls, buildOrderTypedData, buybackQuoteRaw, toRaw as coinToRaw, createFailoverFetch, encodeByteArray, fdvHuman, formatAmount, getCreatorCoinPrice, getListableTokens, getService, getServicesByCapability, getTokenByAddress, getTokenBySymbol, isServiceId, isTransientRpcError, listServices, normalizeAddress, normalizeHash, parseAmount, parseCreatorCoinCreated, resolveConfig, resolveFeeConfig, shortenAddress, stringifyBigInts, teamCoinsRaw, u256ToBigInt, validateName as validateCoinName, validateSupply as validateCoinSupply, validateSymbol as validateCoinSymbol };
6802
+ export { ApiClient, CHAINS, MAX_SUPPLY as COIN_MAX_SUPPLY, MIN_SUPPLY as COIN_MIN_SUPPLY, COLLECTION_1155_CLASS_HASH_MAINNET, COLLECTION_1155_CONTRACT_MAINNET, COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET, COLLECTION_1155_START_BLOCK_MAINNET, COLLECTION_721_CONTRACT_MAINNET, COLLECTION_721_START_BLOCK_MAINNET, CREATOR_COIN_CLASS_HASH_MAINNET, CREATOR_COIN_EKUBO_LAUNCHER_MAINNET, CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET, CREATOR_COIN_FACTORY_CONTRACT_MAINNET, CREATOR_COIN_START_BLOCK_MAINNET, CollectionRegistryABI, CreatorCoinFactoryABI, CreatorCoinService, DEFAULT_CHAIN, DROP_COLLECTION_CLASS_HASH_MAINNET, DROP_FACTORY_CONTRACT_MAINNET, DropCollectionABI, DropFactoryABI, DropService, EKUBO_CORE_MAINNET, ERC1155CollectionService, FeeConfigSchema, IPCOLLECTION_CLASS_HASH_MAINNET, IPCollection1155ABI, IPCollection1155FactoryABI, IPCollectionABI, IPMarketplaceABI, IPNFT_CLASS_HASH_MAINNET, IPNftABI, LAUNCH_PRICE_QUOTE_PER_COIN, MARKETPLACE_1155_CLASS_HASH_MAINNET, MARKETPLACE_1155_CONTRACT_MAINNET, MARKETPLACE_1155_START_BLOCK_MAINNET, MARKETPLACE_721_CLASS_HASH_MAINNET, MARKETPLACE_721_CONTRACT_MAINNET, MARKETPLACE_721_START_BLOCK_MAINNET, MarketplaceModule, Medialane1155ABI, Medialane1155Module, MedialaneApiError, MedialaneClient, MedialaneError, NFTCOMMENTS_CONTRACT_MAINNET, OPEN_LICENSES, POPCollectionABI, POPFactoryABI, POP_COLLECTION_CLASS_HASH_MAINNET, POP_FACTORY_CONTRACT_MAINNET, PUBLIC_RPC_FALLBACKS, PopService, SUPPORTED_TOKENS, VALIDATED_EKUBO_PARAMS, build1155CancellationTypedData, build1155OrderTypedData, buildCancellationTypedData, buildCreateCreatorCoinCall, buildFeeCall, buildLaunchOnEkuboCalls, buildOrderTypedData, buybackQuoteRaw, toRaw as coinToRaw, createFailoverFetch, encodeByteArray, fdvHuman, formatAmount, getCoordinates, getCreatorCoinPrice, getListableTokens, getService, getServicesByCapability, getTokenByAddress, getTokenBySymbol, isServiceId, isTransientRpcError, listServices, normalizeAddress, normalizeHash, parseAmount, parseCreatorCoinCreated, resolveConfig, resolveFeeConfig, shortenAddress, stringifyBigInts, teamCoinsRaw, u256ToBigInt, validateName as validateCoinName, validateSupply as validateCoinSupply, validateSymbol as validateCoinSymbol };
6703
6803
  //# sourceMappingURL=index.js.map
6704
6804
  //# sourceMappingURL=index.js.map