@medialane/sdk 0.36.0 → 0.38.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.cjs CHANGED
@@ -2,71 +2,49 @@
2
2
 
3
3
  var zod = require('zod');
4
4
  var starknet = require('starknet');
5
+ var sha3_js = require('@noble/hashes/sha3.js');
6
+ var base = require('@scure/base');
5
7
 
6
8
  // src/config.ts
7
9
 
8
- // src/constants.ts
9
- var MARKETPLACE_721_CONTRACT_MAINNET = "0x069cf5391077e3ebdd9cb6aebf90ed530d29f0d6aa34a43f5afae938c0fb565e";
10
- var MARKETPLACE_721_CLASS_HASH_MAINNET = "0x04c6f952d747ad7ead1b3dad4c1d587837d38f8ec29d6c095a4afa5b5ece5957";
11
- var MARKETPLACE_721_START_BLOCK_MAINNET = 10350340;
12
- var MARKETPLACE_1155_CONTRACT_MAINNET = "0x040cd7b3e73bb3c892166e34bdc01d1797f97ecbc356c23f1cf38033cacf0077";
13
- var MARKETPLACE_1155_CLASS_HASH_MAINNET = "0x02600bb720908f119afe482309d36c39d087587f0df9576454acfb6363e78cd8";
14
- var MARKETPLACE_1155_START_BLOCK_MAINNET = 10350855;
15
- var COLLECTION_721_CONTRACT_MAINNET = "0x0322cb7119955e01ac778d40976eb3ba50540bb0899f812d612f9c7e63e49fd2";
16
- var IPNFT_CLASS_HASH_MAINNET = "0x27ee4ded786d51bced1e94afec3034d6ffce71c032c45ee1ff283ccfa9db12e";
17
- var IPCOLLECTION_CLASS_HASH_MAINNET = "0x287ccdff8b6655a2248cfe170d82eae3a35303cd00ef3e751b25ddca26d9095";
18
- var COLLECTION_721_START_BLOCK_MAINNET = 10046166;
19
- var DROP_FACTORY_CONTRACT_MAINNET = "0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800";
20
- var POP_FACTORY_CONTRACT_MAINNET = "0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111";
21
- var NFTCOMMENTS_CONTRACT_MAINNET = "0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843";
22
- var SUPPORTED_TOKENS = [
23
- {
24
- // Circle-native USDC on Starknet (canonical)
25
- symbol: "USDC",
26
- address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb",
27
- decimals: 6,
28
- listable: true
29
- },
30
- {
31
- symbol: "USDT",
32
- address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
33
- decimals: 6,
34
- listable: true
35
- },
36
- {
37
- symbol: "ETH",
38
- address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
39
- decimals: 18,
40
- listable: true
41
- },
42
- {
43
- symbol: "STRK",
44
- address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
45
- decimals: 18,
46
- listable: true
47
- },
48
- {
49
- symbol: "WBTC",
50
- address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
51
- decimals: 8,
52
- listable: true
10
+ // src/chains.ts
11
+ var CHAINS = ["STARKNET", "ETHEREUM", "SOLANA", "BASE", "BITCOIN"];
12
+ var COORDINATES = {
13
+ STARKNET: {
14
+ rpcUrl: "https://rpc.starknet.lava.build",
15
+ marketplace721: "0x069cf5391077e3ebdd9cb6aebf90ed530d29f0d6aa34a43f5afae938c0fb565e",
16
+ marketplace721ClassHash: "0x04c6f952d747ad7ead1b3dad4c1d587837d38f8ec29d6c095a4afa5b5ece5957",
17
+ marketplace721StartBlock: 10350340,
18
+ marketplace1155: "0x040cd7b3e73bb3c892166e34bdc01d1797f97ecbc356c23f1cf38033cacf0077",
19
+ marketplace1155ClassHash: "0x02600bb720908f119afe482309d36c39d087587f0df9576454acfb6363e78cd8",
20
+ marketplace1155StartBlock: 10350855,
21
+ collection721: "0x0322cb7119955e01ac778d40976eb3ba50540bb0899f812d612f9c7e63e49fd2",
22
+ collection721StartBlock: 10046166,
23
+ ipNftClassHash: "0x27ee4ded786d51bced1e94afec3034d6ffce71c032c45ee1ff283ccfa9db12e",
24
+ ipCollectionClassHash: "0x287ccdff8b6655a2248cfe170d82eae3a35303cd00ef3e751b25ddca26d9095",
25
+ collection1155: "0x0083543c3ee15040a419fc539fa6889f5b956e7d071bcfa97842cb0ae42ad6cc",
26
+ collection1155FactoryClassHash: "0x331a69da8655a882ba1fbcb55188b8fa09116521db901bbbaafc9fead0689f8",
27
+ collection1155ClassHash: "0x4e110b59af240ae6c7742999964c4eae13fb2ed935c47fe97653ec017ebea34",
28
+ collection1155StartBlock: 10665319,
29
+ popFactory: "0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111",
30
+ popCollectionClassHash: "0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f",
31
+ dropFactory: "0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800",
32
+ dropCollectionClassHash: "0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282",
33
+ nftComments: "0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843",
34
+ creatorCoinFactory: "0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c",
35
+ creatorCoinEkuboLauncher: "0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4",
36
+ creatorCoinClassHash: "0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6",
37
+ creatorCoinFactoryClassHash: "0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55",
38
+ creatorCoinStartBlock: 10474544,
39
+ ekuboCore: "0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b"
53
40
  }
54
- ];
55
- var DEFAULT_CURRENCY = "USDC";
56
- var SUPPORTED_NETWORKS = ["mainnet"];
57
- var DEFAULT_RPC_URL = "https://rpc.starknet.lava.build";
58
- var POP_COLLECTION_CLASS_HASH_MAINNET = "0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f";
59
- var DROP_COLLECTION_CLASS_HASH_MAINNET = "0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282";
60
- var COLLECTION_1155_CONTRACT_MAINNET = "0x0083543c3ee15040a419fc539fa6889f5b956e7d071bcfa97842cb0ae42ad6cc";
61
- var COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = "0x331a69da8655a882ba1fbcb55188b8fa09116521db901bbbaafc9fead0689f8";
62
- var COLLECTION_1155_CLASS_HASH_MAINNET = "0x4e110b59af240ae6c7742999964c4eae13fb2ed935c47fe97653ec017ebea34";
63
- var COLLECTION_1155_START_BLOCK_MAINNET = 10665319;
64
- var CREATOR_COIN_FACTORY_CONTRACT_MAINNET = "0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c";
65
- var CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = "0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4";
66
- var CREATOR_COIN_CLASS_HASH_MAINNET = "0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6";
67
- var CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = "0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55";
68
- var CREATOR_COIN_START_BLOCK_MAINNET = 10474544;
69
- var EKUBO_CORE_MAINNET = "0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b";
41
+ };
42
+ function getCoordinates(chain) {
43
+ const c = COORDINATES[chain];
44
+ if (!c) throw new Error(`No coordinates configured for chain "${chain}"`);
45
+ return c;
46
+ }
47
+ var DEFAULT_CHAIN = "STARKNET";
70
48
  var FeeConfigSchema = zod.z.object({
71
49
  enabled: zod.z.boolean().default(true),
72
50
  fundAddress: zod.z.string().min(1).optional(),
@@ -98,10 +76,13 @@ function buildFeeCall(p, cfg) {
98
76
 
99
77
  // src/config.ts
100
78
  var MedialaneConfigSchema = zod.z.object({
101
- network: zod.z.enum(SUPPORTED_NETWORKS).default("mainnet"),
79
+ // Chain-scoped client (spec 2026-06-13 Decision B): one client per chain,
80
+ // coordinates resolved from the registry. Replaces the removed `network` axis.
81
+ chain: zod.z.enum(CHAINS).default(DEFAULT_CHAIN),
102
82
  rpcUrl: zod.z.string().url().optional(),
103
83
  backendUrl: zod.z.string().url().optional(),
104
84
  apiKey: zod.z.string().optional(),
85
+ // Per-contract overrides remain for tests/forks; default from the registry.
105
86
  marketplace721Contract: zod.z.string().optional(),
106
87
  marketplaceContract: zod.z.string().optional(),
107
88
  marketplace1155Contract: zod.z.string().optional(),
@@ -117,19 +98,20 @@ var MedialaneConfigSchema = zod.z.object({
117
98
  });
118
99
  function resolveConfig(raw) {
119
100
  const parsed = MedialaneConfigSchema.parse(raw);
120
- const marketplace721Contract = parsed.marketplace721Contract ?? parsed.marketplaceContract ?? MARKETPLACE_721_CONTRACT_MAINNET;
121
- const collection721Contract = parsed.collection721Contract ?? parsed.collectionContract ?? COLLECTION_721_CONTRACT_MAINNET;
101
+ const coords = getCoordinates(parsed.chain);
102
+ const marketplace721Contract = parsed.marketplace721Contract ?? parsed.marketplaceContract ?? coords.marketplace721;
103
+ const collection721Contract = parsed.collection721Contract ?? parsed.collectionContract ?? coords.collection721;
122
104
  return {
123
- network: parsed.network,
124
- rpcUrl: parsed.rpcUrl ?? DEFAULT_RPC_URL,
105
+ chain: parsed.chain,
106
+ rpcUrl: parsed.rpcUrl ?? coords.rpcUrl,
125
107
  backendUrl: parsed.backendUrl,
126
108
  apiKey: parsed.apiKey,
127
109
  marketplace721Contract,
128
110
  marketplaceContract: marketplace721Contract,
129
- marketplace1155Contract: parsed.marketplace1155Contract ?? MARKETPLACE_1155_CONTRACT_MAINNET,
111
+ marketplace1155Contract: parsed.marketplace1155Contract ?? coords.marketplace1155,
130
112
  collection721Contract,
131
113
  collectionContract: collection721Contract,
132
- collection1155Contract: parsed.collection1155Contract ?? COLLECTION_1155_CONTRACT_MAINNET,
114
+ collection1155Contract: parsed.collection1155Contract ?? coords.collection1155,
133
115
  retryOptions: parsed.retryOptions,
134
116
  feeConfig: resolveFeeConfig(parsed.feeConfig)
135
117
  };
@@ -4531,6 +4513,68 @@ var IPNftABI = [
4531
4513
  // src/abis/creatorCoinFactory.ts
4532
4514
  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" }] }];
4533
4515
 
4516
+ // src/constants.ts
4517
+ var SN = getCoordinates("STARKNET");
4518
+ var MARKETPLACE_721_CONTRACT_MAINNET = SN.marketplace721;
4519
+ var MARKETPLACE_721_CLASS_HASH_MAINNET = SN.marketplace721ClassHash;
4520
+ var MARKETPLACE_721_START_BLOCK_MAINNET = SN.marketplace721StartBlock;
4521
+ var MARKETPLACE_1155_CONTRACT_MAINNET = SN.marketplace1155;
4522
+ var MARKETPLACE_1155_CLASS_HASH_MAINNET = SN.marketplace1155ClassHash;
4523
+ var MARKETPLACE_1155_START_BLOCK_MAINNET = SN.marketplace1155StartBlock;
4524
+ var COLLECTION_721_CONTRACT_MAINNET = SN.collection721;
4525
+ var IPNFT_CLASS_HASH_MAINNET = SN.ipNftClassHash;
4526
+ var IPCOLLECTION_CLASS_HASH_MAINNET = SN.ipCollectionClassHash;
4527
+ var COLLECTION_721_START_BLOCK_MAINNET = SN.collection721StartBlock;
4528
+ var DROP_FACTORY_CONTRACT_MAINNET = SN.dropFactory;
4529
+ var POP_FACTORY_CONTRACT_MAINNET = SN.popFactory;
4530
+ var NFTCOMMENTS_CONTRACT_MAINNET = SN.nftComments;
4531
+ var SUPPORTED_TOKENS = [
4532
+ {
4533
+ // Circle-native USDC on Starknet (canonical)
4534
+ symbol: "USDC",
4535
+ address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb",
4536
+ decimals: 6,
4537
+ listable: true
4538
+ },
4539
+ {
4540
+ symbol: "USDT",
4541
+ address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
4542
+ decimals: 6,
4543
+ listable: true
4544
+ },
4545
+ {
4546
+ symbol: "ETH",
4547
+ address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
4548
+ decimals: 18,
4549
+ listable: true
4550
+ },
4551
+ {
4552
+ symbol: "STRK",
4553
+ address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
4554
+ decimals: 18,
4555
+ listable: true
4556
+ },
4557
+ {
4558
+ symbol: "WBTC",
4559
+ address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
4560
+ decimals: 8,
4561
+ listable: true
4562
+ }
4563
+ ];
4564
+ var DEFAULT_CURRENCY = "USDC";
4565
+ var POP_COLLECTION_CLASS_HASH_MAINNET = SN.popCollectionClassHash;
4566
+ var DROP_COLLECTION_CLASS_HASH_MAINNET = SN.dropCollectionClassHash;
4567
+ var COLLECTION_1155_CONTRACT_MAINNET = SN.collection1155;
4568
+ var COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = SN.collection1155FactoryClassHash;
4569
+ var COLLECTION_1155_CLASS_HASH_MAINNET = SN.collection1155ClassHash;
4570
+ var COLLECTION_1155_START_BLOCK_MAINNET = SN.collection1155StartBlock;
4571
+ var CREATOR_COIN_FACTORY_CONTRACT_MAINNET = SN.creatorCoinFactory;
4572
+ var CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = SN.creatorCoinEkuboLauncher;
4573
+ var CREATOR_COIN_CLASS_HASH_MAINNET = SN.creatorCoinClassHash;
4574
+ var CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = SN.creatorCoinFactoryClassHash;
4575
+ var CREATOR_COIN_START_BLOCK_MAINNET = SN.creatorCoinStartBlock;
4576
+ var EKUBO_CORE_MAINNET = SN.ekuboCore;
4577
+
4534
4578
  // src/utils/bigint.ts
4535
4579
  function stringifyBigInts(obj) {
4536
4580
  if (typeof obj === "bigint") {
@@ -4671,7 +4715,10 @@ function toSignatureArray(sig) {
4671
4715
  const s = sig;
4672
4716
  return [s.r.toString(), s.s.toString()];
4673
4717
  }
4674
- function getChainId(_config) {
4718
+ function getChainId(config) {
4719
+ if (config.chain !== "STARKNET") {
4720
+ throw new Error(`SNIP-12 signing is Starknet-only; got chain "${config.chain}"`);
4721
+ }
4675
4722
  return starknet.constants.StarknetChainId.SN_MAIN;
4676
4723
  }
4677
4724
  function resolveToken(currency) {
@@ -4738,7 +4785,7 @@ async function createListing(account, params, config) {
4738
4785
  salt: generateSalt(),
4739
4786
  counter
4740
4787
  };
4741
- const chainId = getChainId();
4788
+ const chainId = getChainId(config);
4742
4789
  const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId));
4743
4790
  const signature = await account.signMessage(typedData);
4744
4791
  const signatureArray = toSignatureArray(signature);
@@ -4820,7 +4867,7 @@ async function makeOffer(account, params, config) {
4820
4867
  salt: generateSalt(),
4821
4868
  counter
4822
4869
  };
4823
- const chainId = getChainId();
4870
+ const chainId = getChainId(config);
4824
4871
  const typedData = stringifyBigInts(buildOrderTypedData(orderParams, chainId));
4825
4872
  const signature = await account.signMessage(typedData);
4826
4873
  const signatureArray = toSignatureArray(signature);
@@ -4887,7 +4934,7 @@ async function fulfillOrder(account, params, config) {
4887
4934
  async function cancelOrder(account, params, config) {
4888
4935
  const { orderHash } = params;
4889
4936
  const { contract, provider } = makeContract(config);
4890
- const chainId = getChainId();
4937
+ const chainId = getChainId(config);
4891
4938
  const cancelParams = {
4892
4939
  order_hash: orderHash,
4893
4940
  offerer: account.address
@@ -5073,7 +5120,7 @@ async function createListing1155(account, params, config) {
5073
5120
  const priceWei = parseAmount(pricePerUnit, token.decimals);
5074
5121
  const now = Math.floor(Date.now() / 1e3);
5075
5122
  const endTime = now + durationSeconds;
5076
- const chainId = getChainId();
5123
+ const chainId = getChainId(config);
5077
5124
  const counter = (await contract.get_counter(account.address)).toString();
5078
5125
  const royaltyMaxBps = await resolveRoyaltyMaxBps(provider, nftContract, tokenId, params.royaltyMaxBps);
5079
5126
  const orderParams = {
@@ -5173,7 +5220,7 @@ async function cancelOrder1155(account, params, config) {
5173
5220
  const { orderHash } = params;
5174
5221
  const contract = getContract(config);
5175
5222
  const provider = getProvider(config);
5176
- const chainId = getChainId();
5223
+ const chainId = getChainId(config);
5177
5224
  const cancelParams = {
5178
5225
  order_hash: orderHash,
5179
5226
  offerer: account.address
@@ -5207,7 +5254,7 @@ async function makeOffer1155(account, params, config) {
5207
5254
  } = params;
5208
5255
  const contract = getContract(config);
5209
5256
  const provider = getProvider(config);
5210
- const chainId = getChainId();
5257
+ const chainId = getChainId(config);
5211
5258
  const token = resolveToken(currency);
5212
5259
  const priceWei = parseAmount(price, token.decimals);
5213
5260
  const now = Math.floor(Date.now() / 1e3);
@@ -5389,12 +5436,46 @@ var Medialane1155Module = class {
5389
5436
  return build1155CancellationTypedData(params, chainId);
5390
5437
  }
5391
5438
  };
5392
- function normalizeAddress(address) {
5439
+ function normalizeAddress(chain, address) {
5440
+ switch (chain) {
5441
+ case "STARKNET":
5442
+ return normalizeStarknet(address);
5443
+ case "ETHEREUM":
5444
+ case "BASE":
5445
+ return normalizeEvm(address);
5446
+ case "SOLANA":
5447
+ return normalizeSolana(address);
5448
+ case "BITCOIN":
5449
+ throw new Error("BITCOIN address normalization not implemented");
5450
+ }
5451
+ }
5452
+ function normalizeStarknet(address) {
5393
5453
  try {
5394
5454
  const hex = starknet.num.toHex(BigInt(address));
5395
5455
  return "0x" + hex.slice(2).padStart(64, "0").toLowerCase();
5396
5456
  } catch {
5397
- throw new Error(`Invalid Starknet address: "${address}"`);
5457
+ throw new Error(`Invalid STARKNET address: "${address}"`);
5458
+ }
5459
+ }
5460
+ function normalizeEvm(address) {
5461
+ const m = /^0x([0-9a-fA-F]{40})$/.exec(address);
5462
+ if (!m) throw new Error(`Invalid ETHEREUM/BASE address: "${address}"`);
5463
+ const lower = m[1].toLowerCase();
5464
+ const hash2 = sha3_js.keccak_256(new TextEncoder().encode(lower));
5465
+ let out = "0x";
5466
+ for (let i = 0; i < 40; i++) {
5467
+ const nibble = hash2[i >> 1] >> (i % 2 === 0 ? 4 : 0) & 15;
5468
+ out += nibble >= 8 ? lower[i].toUpperCase() : lower[i];
5469
+ }
5470
+ return out;
5471
+ }
5472
+ function normalizeSolana(address) {
5473
+ try {
5474
+ const bytes = base.base58.decode(address);
5475
+ if (bytes.length !== 32) throw new Error("not a 32-byte key");
5476
+ return address;
5477
+ } catch {
5478
+ throw new Error(`Invalid SOLANA address: "${address}"`);
5398
5479
  }
5399
5480
  }
5400
5481
  function normalizeHash(hash2) {
@@ -5402,11 +5483,11 @@ function normalizeHash(hash2) {
5402
5483
  const hex = starknet.num.toHex(BigInt(hash2));
5403
5484
  return "0x" + hex.slice(2).padStart(64, "0").toLowerCase();
5404
5485
  } catch {
5405
- throw new Error(`Invalid Starknet hash: "${hash2}"`);
5486
+ throw new Error(`Invalid hash: "${hash2}"`);
5406
5487
  }
5407
5488
  }
5408
- function shortenAddress(address, chars = 4) {
5409
- const norm = normalizeAddress(address);
5489
+ function shortenAddress(chain, address, chars = 4) {
5490
+ const norm = normalizeAddress(chain, address);
5410
5491
  return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;
5411
5492
  }
5412
5493
 
@@ -5460,11 +5541,16 @@ var MedialaneApiError = class extends Error {
5460
5541
  }
5461
5542
  };
5462
5543
  var ApiClient = class {
5463
- constructor(baseUrl, apiKey, retryOptions) {
5544
+ constructor(baseUrl, apiKey, retryOptions, chain = "STARKNET") {
5464
5545
  this.baseUrl = baseUrl;
5546
+ this.chain = chain;
5465
5547
  this.baseHeaders = apiKey ? { "x-api-key": apiKey } : {};
5466
5548
  this.retryOptions = retryOptions;
5467
5549
  }
5550
+ /** Normalize an address for this client's chain (chain-scoped — Decision B). */
5551
+ addr(a) {
5552
+ return normalizeAddress(this.chain, a);
5553
+ }
5468
5554
  async request(path, init) {
5469
5555
  const url = `${this.baseUrl.replace(/\/$/, "")}${path}`;
5470
5556
  const headers = { ...this.baseHeaders };
@@ -5526,7 +5612,7 @@ var ApiClient = class {
5526
5612
  if (query.sort) params.set("sort", query.sort);
5527
5613
  if (query.page !== void 0) params.set("page", String(query.page));
5528
5614
  if (query.limit !== void 0) params.set("limit", String(query.limit));
5529
- if (query.offerer) params.set("offerer", normalizeAddress(query.offerer));
5615
+ if (query.offerer) params.set("offerer", this.addr(query.offerer));
5530
5616
  if (query.minPrice) params.set("minPrice", query.minPrice);
5531
5617
  if (query.maxPrice) params.set("maxPrice", query.maxPrice);
5532
5618
  const qs = params.toString();
@@ -5536,11 +5622,11 @@ var ApiClient = class {
5536
5622
  return this.get(`/v1/orders/${orderHash}`);
5537
5623
  }
5538
5624
  getActiveOrdersForToken(contract, tokenId) {
5539
- return this.get(`/v1/orders/token/${normalizeAddress(contract)}/${tokenId}`);
5625
+ return this.get(`/v1/orders/token/${this.addr(contract)}/${tokenId}`);
5540
5626
  }
5541
5627
  getOrdersByUser(address, page = 1, limit = 20) {
5542
5628
  return this.get(
5543
- `/v1/orders/user/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5629
+ `/v1/orders/user/${this.addr(address)}?page=${page}&limit=${limit}`
5544
5630
  );
5545
5631
  }
5546
5632
  // ─── Tokens ────────────────────────────────────────────────────────────────
@@ -5551,7 +5637,7 @@ var ApiClient = class {
5551
5637
  }
5552
5638
  getTokensByOwner(address, page = 1, limit = 20) {
5553
5639
  return this.get(
5554
- `/v1/tokens/owned/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5640
+ `/v1/tokens/owned/${this.addr(address)}?page=${page}&limit=${limit}`
5555
5641
  );
5556
5642
  }
5557
5643
  getTokenHistory(contract, tokenId, page = 1, limit = 20) {
@@ -5568,15 +5654,15 @@ var ApiClient = class {
5568
5654
  return this.get(`/v1/collections?${params}`);
5569
5655
  }
5570
5656
  getCollectionsByOwner(owner, page = 1, limit = 50) {
5571
- const params = new URLSearchParams({ owner: normalizeAddress(owner), page: String(page), limit: String(limit) });
5657
+ const params = new URLSearchParams({ owner: this.addr(owner), page: String(page), limit: String(limit) });
5572
5658
  return this.get(`/v1/collections?${params}`);
5573
5659
  }
5574
5660
  getCollection(contract) {
5575
- return this.get(`/v1/collections/${normalizeAddress(contract)}`);
5661
+ return this.get(`/v1/collections/${this.addr(contract)}`);
5576
5662
  }
5577
5663
  getCollectionTokens(contract, page = 1, limit = 20) {
5578
5664
  return this.get(
5579
- `/v1/collections/${normalizeAddress(contract)}/tokens?page=${page}&limit=${limit}`
5665
+ `/v1/collections/${this.addr(contract)}/tokens?page=${page}&limit=${limit}`
5580
5666
  );
5581
5667
  }
5582
5668
  // ─── Activities ────────────────────────────────────────────────────────────
@@ -5590,7 +5676,7 @@ var ApiClient = class {
5590
5676
  }
5591
5677
  getActivitiesByAddress(address, page = 1, limit = 20) {
5592
5678
  return this.get(
5593
- `/v1/activities/${normalizeAddress(address)}?page=${page}&limit=${limit}`
5679
+ `/v1/activities/${this.addr(address)}?page=${page}&limit=${limit}`
5594
5680
  );
5595
5681
  }
5596
5682
  // ─── Comments ──────────────────────────────────────────────────────────────
@@ -5600,7 +5686,7 @@ var ApiClient = class {
5600
5686
  if (opts.limit !== void 0) params.set("limit", String(opts.limit));
5601
5687
  const qs = params.toString();
5602
5688
  return this.get(
5603
- `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/comments${qs ? `?${qs}` : ""}`
5689
+ `/v1/tokens/${this.addr(contract)}/${tokenId}/comments${qs ? `?${qs}` : ""}`
5604
5690
  );
5605
5691
  }
5606
5692
  // ─── Search ────────────────────────────────────────────────────────────────
@@ -5738,7 +5824,7 @@ var ApiClient = class {
5738
5824
  }
5739
5825
  // ─── Collection Profiles ────────────────────────────────────────────────────
5740
5826
  async getCollectionProfile(contractAddress) {
5741
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;
5827
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/profile`;
5742
5828
  const res = await fetch(url, { headers: this.baseHeaders });
5743
5829
  return this.checkResponse(res, { allow404: true });
5744
5830
  }
@@ -5746,7 +5832,7 @@ var ApiClient = class {
5746
5832
  * Update collection profile. Requires Clerk JWT for ownership check.
5747
5833
  */
5748
5834
  async updateCollectionProfile(contractAddress, data, clerkToken) {
5749
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/profile`;
5835
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/profile`;
5750
5836
  const res = await fetch(url, {
5751
5837
  method: "PATCH",
5752
5838
  headers: {
@@ -5759,7 +5845,7 @@ var ApiClient = class {
5759
5845
  return this.checkResponse(res);
5760
5846
  }
5761
5847
  async getGatedContent(contractAddress, clerkToken) {
5762
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${normalizeAddress(contractAddress)}/gated-content`;
5848
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/collections/${this.addr(contractAddress)}/gated-content`;
5763
5849
  const res = await fetch(url, {
5764
5850
  headers: { ...this.baseHeaders, "Authorization": `Bearer ${clerkToken}` }
5765
5851
  });
@@ -5777,7 +5863,7 @@ var ApiClient = class {
5777
5863
  return this.checkResponse(res);
5778
5864
  }
5779
5865
  async getCreatorProfile(walletAddress) {
5780
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;
5866
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${this.addr(walletAddress)}/profile`;
5781
5867
  const res = await fetch(url, { headers: this.baseHeaders });
5782
5868
  return this.checkResponse(res, { allow404: true });
5783
5869
  }
@@ -5791,7 +5877,7 @@ var ApiClient = class {
5791
5877
  * Update creator profile. Requires Clerk JWT; wallet must match authenticated user.
5792
5878
  */
5793
5879
  async updateCreatorProfile(walletAddress, data, clerkToken) {
5794
- const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${normalizeAddress(walletAddress)}/profile`;
5880
+ const url = `${this.baseUrl.replace(/\/$/, "")}/v1/creators/${this.addr(walletAddress)}/profile`;
5795
5881
  const res = await fetch(url, {
5796
5882
  method: "PATCH",
5797
5883
  headers: {
@@ -5891,7 +5977,7 @@ var ApiClient = class {
5891
5977
  if (opts.limit !== void 0) params.set("limit", String(opts.limit));
5892
5978
  const qs = params.toString();
5893
5979
  return this.get(
5894
- `/v1/tokens/${normalizeAddress(contract)}/${tokenId}/remixes${qs ? `?${qs}` : ""}`
5980
+ `/v1/tokens/${this.addr(contract)}/${tokenId}/remixes${qs ? `?${qs}` : ""}`
5895
5981
  );
5896
5982
  }
5897
5983
  /**
@@ -5986,24 +6072,38 @@ var ApiClient = class {
5986
6072
  }
5987
6073
  async getPopEligibility(collection, wallet) {
5988
6074
  const res = await this.get(
5989
- `/v1/pop/eligibility/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`
6075
+ `/v1/pop/eligibility/${this.addr(collection)}/${this.addr(wallet)}`
5990
6076
  );
5991
6077
  return res.data;
5992
6078
  }
5993
6079
  async getPopEligibilityBatch(collection, wallets) {
5994
- const params = new URLSearchParams({ wallets: wallets.map(normalizeAddress).join(",") });
6080
+ const params = new URLSearchParams({ wallets: wallets.map((w) => this.addr(w)).join(",") });
5995
6081
  const res = await this.get(
5996
- `/v1/pop/eligibility/${normalizeAddress(collection)}?${params}`
6082
+ `/v1/pop/eligibility/${this.addr(collection)}?${params}`
5997
6083
  );
5998
6084
  return res.data;
5999
6085
  }
6086
+ // ─── Coins (fungible — ERC-20 etc.) ───────────────────────────────────────────
6087
+ // Coins are a separate model from Collections (spec 2026-06-14). Price/liquidity
6088
+ // is read live from Ekubo (CreatorCoinService.getPrice), never from these.
6089
+ getCoins(opts = {}) {
6090
+ const params = new URLSearchParams();
6091
+ if (opts.page) params.set("page", String(opts.page));
6092
+ if (opts.limit) params.set("limit", String(opts.limit));
6093
+ if (opts.service) params.set("service", opts.service);
6094
+ const qs = params.toString();
6095
+ return this.get(`/v1/coins${qs ? `?${qs}` : ""}`);
6096
+ }
6097
+ getCoin(contract) {
6098
+ return this.get(`/v1/coins/${this.addr(contract)}`);
6099
+ }
6000
6100
  // ─── Collection Drop ────────────────────────────────────────────────────────
6001
6101
  getDropCollections(opts = {}) {
6002
6102
  return this.getCollections(opts.page ?? 1, opts.limit ?? 20, void 0, opts.sort, "COLLECTION_DROP");
6003
6103
  }
6004
6104
  async getDropMintStatus(collection, wallet) {
6005
6105
  const res = await this.get(
6006
- `/v1/drop/mint-status/${normalizeAddress(collection)}/${normalizeAddress(wallet)}`
6106
+ `/v1/drop/mint-status/${this.addr(collection)}/${this.addr(wallet)}`
6007
6107
  );
6008
6108
  return res.data;
6009
6109
  }
@@ -6013,7 +6113,7 @@ var PopService = class {
6013
6113
  this.factoryAddress = POP_FACTORY_CONTRACT_MAINNET;
6014
6114
  }
6015
6115
  _collection(address, account) {
6016
- return new starknet.Contract(POPCollectionABI, normalizeAddress(address), account);
6116
+ return new starknet.Contract(POPCollectionABI, normalizeAddress("STARKNET", address), account);
6017
6117
  }
6018
6118
  async claim(account, collectionAddress) {
6019
6119
  const call = this._collection(collectionAddress, account).populate("claim", []);
@@ -6089,7 +6189,7 @@ var DropService = class {
6089
6189
  this.config = config;
6090
6190
  }
6091
6191
  _collection(address, account) {
6092
- return new starknet.Contract(DropCollectionABI, normalizeAddress(address), account);
6192
+ return new starknet.Contract(DropCollectionABI, normalizeAddress("STARKNET", address), account);
6093
6193
  }
6094
6194
  async claim(account, collectionAddress, quantity = 1) {
6095
6195
  const collection = this._collection(collectionAddress, account);
@@ -6172,14 +6272,14 @@ var ERC1155CollectionService = class {
6172
6272
  _factory(account) {
6173
6273
  return new starknet.Contract(
6174
6274
  IPCollection1155FactoryABI,
6175
- normalizeAddress(this.factoryAddress),
6275
+ normalizeAddress("STARKNET", this.factoryAddress),
6176
6276
  account
6177
6277
  );
6178
6278
  }
6179
6279
  _collection(address, account) {
6180
6280
  return new starknet.Contract(
6181
6281
  IPCollection1155ABI,
6182
- normalizeAddress(address),
6282
+ normalizeAddress("STARKNET", address),
6183
6283
  account
6184
6284
  );
6185
6285
  }
@@ -6301,7 +6401,7 @@ async function getCreatorCoinPrice(coinAddress, provider) {
6301
6401
  if (BigInt(r[0]) !== 0n || BigInt(r[1]) !== 0n) return null;
6302
6402
  const fee = r[2];
6303
6403
  const tickSpacing = r[3];
6304
- const quoteToken = normalizeAddress("0x" + BigInt(r[7]).toString(16));
6404
+ const quoteToken = normalizeAddress("STARKNET", "0x" + BigInt(r[7]).toString(16));
6305
6405
  const token = getTokenByAddress(quoteToken);
6306
6406
  const quoteDecimals = token?.decimals ?? 18;
6307
6407
  const ci = BigInt(coinAddress);
@@ -6369,20 +6469,20 @@ function buildLaunchOnEkuboCalls(params) {
6369
6469
  }
6370
6470
  var CREATOR_COIN_CREATED_SELECTOR = starknet.hash.getSelectorFromName("CreatorCoinCreated");
6371
6471
  function parseCreatorCoinCreated(receipt) {
6372
- const factory = normalizeAddress(CREATOR_COIN_FACTORY_CONTRACT_MAINNET);
6472
+ const factory = normalizeAddress("STARKNET", CREATOR_COIN_FACTORY_CONTRACT_MAINNET);
6373
6473
  for (const ev of receipt?.events ?? []) {
6374
6474
  let from;
6375
6475
  try {
6376
- from = normalizeAddress(ev.from_address ?? "");
6476
+ from = normalizeAddress("STARKNET", ev.from_address ?? "");
6377
6477
  } catch {
6378
6478
  continue;
6379
6479
  }
6380
6480
  if (from !== factory) continue;
6381
6481
  const k0 = ev.keys?.[0];
6382
- if (!k0 || normalizeAddress(k0) !== normalizeAddress(CREATOR_COIN_CREATED_SELECTOR)) continue;
6482
+ if (!k0 || normalizeAddress("STARKNET", k0) !== normalizeAddress("STARKNET", CREATOR_COIN_CREATED_SELECTOR)) continue;
6383
6483
  const data = ev.data ?? [];
6384
6484
  if (data.length < 1) continue;
6385
- return normalizeAddress(data[data.length - 1]);
6485
+ return normalizeAddress("STARKNET", data[data.length - 1]);
6386
6486
  }
6387
6487
  throw new Error("Coin deployed but the coin address could not be read from the receipt");
6388
6488
  }
@@ -6452,11 +6552,11 @@ var MedialaneClient = class {
6452
6552
  }
6453
6553
  });
6454
6554
  } else {
6455
- this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions);
6555
+ this.api = new ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions, this.config.chain);
6456
6556
  }
6457
6557
  }
6458
- get network() {
6459
- return this.config.network;
6558
+ get chain() {
6559
+ return this.config.chain;
6460
6560
  }
6461
6561
  get rpcUrl() {
6462
6562
  return this.config.rpcUrl;
@@ -6518,8 +6618,10 @@ var SERVICES = {
6518
6618
  standard: "ERC721",
6519
6619
  provenance: "MEDIALANE",
6520
6620
  onchain: {
6521
- factoryAddress: COLLECTION_721_CONTRACT_MAINNET,
6522
- startBlock: COLLECTION_721_START_BLOCK_MAINNET
6621
+ STARKNET: {
6622
+ factoryAddress: COLLECTION_721_CONTRACT_MAINNET,
6623
+ startBlock: COLLECTION_721_START_BLOCK_MAINNET
6624
+ }
6523
6625
  },
6524
6626
  uiVariant: "standard",
6525
6627
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
@@ -6541,7 +6643,7 @@ var SERVICES = {
6541
6643
  uiVariant: "standard",
6542
6644
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
6543
6645
  // No factory — single shared contract. Events declared when the genesis
6544
- // contract address is wired into onchain.factoryAddress here.
6646
+ // contract address is wired into onchain.STARKNET.factoryAddress here.
6545
6647
  metadataSchema: { licenseDefault: "CC BY-SA" }
6546
6648
  },
6547
6649
  "mip-erc1155": {
@@ -6551,9 +6653,11 @@ var SERVICES = {
6551
6653
  standard: "ERC1155",
6552
6654
  provenance: "MEDIALANE",
6553
6655
  onchain: {
6554
- factoryAddress: COLLECTION_1155_CONTRACT_MAINNET,
6555
- classHash: COLLECTION_1155_CLASS_HASH_MAINNET,
6556
- startBlock: COLLECTION_1155_START_BLOCK_MAINNET
6656
+ STARKNET: {
6657
+ factoryAddress: COLLECTION_1155_CONTRACT_MAINNET,
6658
+ classHash: COLLECTION_1155_CLASS_HASH_MAINNET,
6659
+ startBlock: COLLECTION_1155_START_BLOCK_MAINNET
6660
+ }
6557
6661
  },
6558
6662
  uiVariant: "edition",
6559
6663
  capabilities: ["list", "buy", "make_offer", "cancel", "transfer", "mint", "remix", "license"],
@@ -6569,8 +6673,10 @@ var SERVICES = {
6569
6673
  standard: "ERC721",
6570
6674
  provenance: "MEDIALANE",
6571
6675
  onchain: {
6572
- factoryAddress: POP_FACTORY_CONTRACT_MAINNET,
6573
- classHash: POP_COLLECTION_CLASS_HASH_MAINNET
6676
+ STARKNET: {
6677
+ factoryAddress: POP_FACTORY_CONTRACT_MAINNET,
6678
+ classHash: POP_COLLECTION_CLASS_HASH_MAINNET
6679
+ }
6574
6680
  },
6575
6681
  uiVariant: "pop",
6576
6682
  capabilities: ["claim", "transfer"],
@@ -6587,8 +6693,10 @@ var SERVICES = {
6587
6693
  standard: "ERC721",
6588
6694
  provenance: "MEDIALANE",
6589
6695
  onchain: {
6590
- factoryAddress: DROP_FACTORY_CONTRACT_MAINNET,
6591
- classHash: DROP_COLLECTION_CLASS_HASH_MAINNET
6696
+ STARKNET: {
6697
+ factoryAddress: DROP_FACTORY_CONTRACT_MAINNET,
6698
+ classHash: DROP_COLLECTION_CLASS_HASH_MAINNET
6699
+ }
6592
6700
  },
6593
6701
  uiVariant: "drop",
6594
6702
  capabilities: ["claim", "list", "buy", "make_offer", "cancel", "transfer"],
@@ -6605,9 +6713,11 @@ var SERVICES = {
6605
6713
  standard: "ERC20",
6606
6714
  provenance: "MEDIALANE",
6607
6715
  onchain: {
6608
- factoryAddress: CREATOR_COIN_FACTORY_CONTRACT_MAINNET,
6609
- classHash: CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET,
6610
- startBlock: CREATOR_COIN_START_BLOCK_MAINNET
6716
+ STARKNET: {
6717
+ factoryAddress: CREATOR_COIN_FACTORY_CONTRACT_MAINNET,
6718
+ classHash: CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET,
6719
+ startBlock: CREATOR_COIN_START_BLOCK_MAINNET
6720
+ }
6611
6721
  },
6612
6722
  uiVariant: "coin",
6613
6723
  // `swap` is a UI affordance (05 §III): the marketplace renders an embedded
@@ -6627,9 +6737,11 @@ var SERVICES = {
6627
6737
  standard: "ERC721",
6628
6738
  provenance: "MEDIALANE",
6629
6739
  onchain: {
6630
- factoryAddress: MARKETPLACE_721_CONTRACT_MAINNET,
6631
- classHash: MARKETPLACE_721_CLASS_HASH_MAINNET,
6632
- startBlock: MARKETPLACE_721_START_BLOCK_MAINNET
6740
+ STARKNET: {
6741
+ factoryAddress: MARKETPLACE_721_CONTRACT_MAINNET,
6742
+ classHash: MARKETPLACE_721_CLASS_HASH_MAINNET,
6743
+ startBlock: MARKETPLACE_721_START_BLOCK_MAINNET
6744
+ }
6633
6745
  },
6634
6746
  uiVariant: "standard",
6635
6747
  capabilities: ["list", "buy", "make_offer", "cancel"],
@@ -6646,9 +6758,11 @@ var SERVICES = {
6646
6758
  standard: "ERC1155",
6647
6759
  provenance: "MEDIALANE",
6648
6760
  onchain: {
6649
- factoryAddress: MARKETPLACE_1155_CONTRACT_MAINNET,
6650
- classHash: MARKETPLACE_1155_CLASS_HASH_MAINNET,
6651
- startBlock: MARKETPLACE_1155_START_BLOCK_MAINNET
6761
+ STARKNET: {
6762
+ factoryAddress: MARKETPLACE_1155_CONTRACT_MAINNET,
6763
+ classHash: MARKETPLACE_1155_CLASS_HASH_MAINNET,
6764
+ startBlock: MARKETPLACE_1155_START_BLOCK_MAINNET
6765
+ }
6652
6766
  },
6653
6767
  uiVariant: "edition",
6654
6768
  capabilities: ["list", "buy", "make_offer", "cancel"],
@@ -6702,6 +6816,7 @@ function getServicesByCapability(cap) {
6702
6816
  }
6703
6817
 
6704
6818
  exports.ApiClient = ApiClient;
6819
+ exports.CHAINS = CHAINS;
6705
6820
  exports.COIN_MAX_SUPPLY = MAX_SUPPLY;
6706
6821
  exports.COIN_MIN_SUPPLY = MIN_SUPPLY;
6707
6822
  exports.COLLECTION_1155_CLASS_HASH_MAINNET = COLLECTION_1155_CLASS_HASH_MAINNET;
@@ -6718,7 +6833,7 @@ exports.CREATOR_COIN_START_BLOCK_MAINNET = CREATOR_COIN_START_BLOCK_MAINNET;
6718
6833
  exports.CollectionRegistryABI = CollectionRegistryABI;
6719
6834
  exports.CreatorCoinFactoryABI = CreatorCoinFactoryABI;
6720
6835
  exports.CreatorCoinService = CreatorCoinService;
6721
- exports.DEFAULT_RPC_URL = DEFAULT_RPC_URL;
6836
+ exports.DEFAULT_CHAIN = DEFAULT_CHAIN;
6722
6837
  exports.DROP_COLLECTION_CLASS_HASH_MAINNET = DROP_COLLECTION_CLASS_HASH_MAINNET;
6723
6838
  exports.DROP_FACTORY_CONTRACT_MAINNET = DROP_FACTORY_CONTRACT_MAINNET;
6724
6839
  exports.DropCollectionABI = DropCollectionABI;
@@ -6755,7 +6870,6 @@ exports.POP_COLLECTION_CLASS_HASH_MAINNET = POP_COLLECTION_CLASS_HASH_MAINNET;
6755
6870
  exports.POP_FACTORY_CONTRACT_MAINNET = POP_FACTORY_CONTRACT_MAINNET;
6756
6871
  exports.PUBLIC_RPC_FALLBACKS = PUBLIC_RPC_FALLBACKS;
6757
6872
  exports.PopService = PopService;
6758
- exports.SUPPORTED_NETWORKS = SUPPORTED_NETWORKS;
6759
6873
  exports.SUPPORTED_TOKENS = SUPPORTED_TOKENS;
6760
6874
  exports.VALIDATED_EKUBO_PARAMS = VALIDATED_EKUBO_PARAMS;
6761
6875
  exports.build1155CancellationTypedData = build1155CancellationTypedData;
@@ -6771,6 +6885,7 @@ exports.createFailoverFetch = createFailoverFetch;
6771
6885
  exports.encodeByteArray = encodeByteArray;
6772
6886
  exports.fdvHuman = fdvHuman;
6773
6887
  exports.formatAmount = formatAmount;
6888
+ exports.getCoordinates = getCoordinates;
6774
6889
  exports.getCreatorCoinPrice = getCreatorCoinPrice;
6775
6890
  exports.getListableTokens = getListableTokens;
6776
6891
  exports.getService = getService;