@medialane/sdk 0.85.4 → 0.85.6

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.
@@ -42,11 +42,6 @@ var COORDINATES = {
42
42
  ipClubFactoryClassHash: "0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266",
43
43
  ipClubCollectionClassHash: "0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5",
44
44
  ipClubFactoryStartBlock: 11928775,
45
- // v3 redesign (deployed 2026-07-15): single contract is both the
46
- // offer/bid/proposal registry and the license collection (embeds
47
- // ERC721Component directly) — no separate receipt contract, no
48
- // set_minter bootstrap. Supersedes the 2026-07-02 v2 address, which had
49
- // zero offers/licenses ever issued (clean cutover, no reclassification).
50
45
  ipSponsorship: "0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c",
51
46
  ipSponsorshipClassHash: "0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3",
52
47
  ipSponsorshipStartBlock: 11896456,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chains.ts","../../src/stellar/venue.ts"],"names":["sha256","Contract","nativeToScVal","TransactionBuilder","rpc","scValToNative"],"mappings":"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","file":"index.cjs","sourcesContent":["// Single source of per-chain coordinates for Medialane's own services\n// (spec 2026-06-13 §3.1, Decision A). Keyed by CHAIN ALONE — Medialane is\n// mainnet-only, so there is no network axis (refines decisions.md D-9).\n\n/** Mirrors the backend Prisma `Chain` enum. */\nexport const CHAINS = [\"STARKNET\", \"ETHEREUM\", \"SOLANA\", \"BASE\", \"STELLAR\", \"BITCOIN\"] as const;\nexport type Chain = (typeof CHAINS)[number];\n\n/** Starknet coordinates of Medialane services + venues. All fields optional\n * because not every service exists on every chain. */\nexport interface StarknetCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721ClassHash?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155ClassHash?: `0x${string}`;\n marketplace1155StartBlock?: number;\n collection721?: `0x${string}`;\n collection721StartBlock?: number;\n ipNftClassHash?: `0x${string}`;\n ipCollectionClassHash?: `0x${string}`;\n collection1155?: `0x${string}`;\n collection1155FactoryClassHash?: `0x${string}`;\n collection1155ClassHash?: `0x${string}`;\n collection1155StartBlock?: number;\n popFactory?: `0x${string}`;\n popCollectionClassHash?: `0x${string}`;\n dropFactory?: `0x${string}`;\n dropCollectionClassHash?: `0x${string}`;\n nftComments?: `0x${string}`;\n creatorCoinFactory?: `0x${string}`;\n creatorCoinEkuboLauncher?: `0x${string}`;\n creatorCoinClassHash?: `0x${string}`;\n creatorCoinFactoryClassHash?: `0x${string}`;\n creatorCoinStartBlock?: number;\n ekuboCore?: `0x${string}`;\n ipTicketsFactory?: `0x${string}`;\n ipTicketCollectionClassHash?: `0x${string}`;\n ipTicketsFactoryClassHash?: `0x${string}`;\n ipTicketsStartBlock?: number;\n ipClubFactory?: `0x${string}`;\n ipClubFactoryClassHash?: `0x${string}`;\n ipClubCollectionClassHash?: `0x${string}`;\n ipClubFactoryStartBlock?: number;\n ipSponsorship?: `0x${string}`;\n ipSponsorshipClassHash?: `0x${string}`;\n ipSponsorshipStartBlock?: number;\n mediaWalletClassHash?: `0x${string}`;\n}\n\n/** Coordinates per chain. Only STARKNET is populated today; adding a chain\n * means adding an entry here (litmus test, spec §7). */\n/** EVM coordinates — one shape for Ethereum and Base (same bytecode, two\n * chains). Populated at deploy time (federation Phase 4). */\nexport interface EvmCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155StartBlock?: number;\n mipRegistry?: `0x${string}`;\n mipRegistryStartBlock?: number;\n mipEditionsRegistry?: `0x${string}`;\n mipEditionsRegistryStartBlock?: number;\n}\n\n/** Solana coordinates — base58 program ids. Populated at deploy time. */\nexport interface SolanaCoordinates {\n rpcUrl: string;\n mipCollectionsProgram?: string;\n marketplaceProgram?: string;\n startSlot?: number;\n}\n\n/** Stellar (Soroban) coordinates — strkey contract ids. Populated at deploy\n * time; the registry takes the collection WASM hash as a constructor arg. */\nexport interface StellarCoordinates {\n rpcUrl: string;\n mipRegistry?: string;\n marketplace?: string;\n collectionWasmHash?: string;\n startLedger?: number;\n}\n\n/** Per-chain coordinate shapes. Every chain is an equal entry — no chain is\n * privileged in core (chain-sovereignty I2/I4). */\nexport interface CoordinatesByChain {\n STARKNET?: StarknetCoordinates;\n ETHEREUM?: EvmCoordinates;\n BASE?: EvmCoordinates;\n SOLANA?: SolanaCoordinates;\n STELLAR?: StellarCoordinates;\n BITCOIN?: never;\n}\n\n/** @deprecated Renamed — use `StarknetCoordinates` (coordinates are per-chain-shaped). */\nexport type ChainCoordinates = StarknetCoordinates;\n\nconst COORDINATES: CoordinatesByChain = {\n STARKNET: {\n rpcUrl: \"https://rpc.starknet.lava.build\",\n marketplace721: \"0x03eda9a2b6ad90845a43591bac8083ebaf677d51fdf20f503b2c01889e3131fc\",\n marketplace721ClassHash: \"0x0700d9230d07e5203e27778c0dc70f9134d2b25bf319f7cf8348dc66a6923e90\",\n marketplace721StartBlock: 11198146,\n marketplace1155: \"0x07c4ce1c19ea48cc11135ed22b19ff745f5aec508c3828593002e4f76fdb1b38\",\n marketplace1155ClassHash: \"0x0242f5c388da7cee2d99e2a69453c8159bf927fbec4e797a3cfdcbbcb5b68328\",\n marketplace1155StartBlock: 11198267,\n collection721: \"0x0225c3ae09506b8d97adc39649ca740dad5aac195b7f5f0441cc1852947acaea\",\n collection721StartBlock: 11198496,\n ipNftClassHash: \"0x012d3ae40ba35c7e2be0946532dac60e48932447912fdf96b674da67c029b9cc\",\n ipCollectionClassHash: \"0x022155a1a130a40e57aac4b89c07fab3f616bc351b1270fc40f756b963afe8b4\",\n collection1155: \"0x015368976d46fae5bfa1c58600f641d5aa5dbbf53ebc6b78aa3922194aad3551\",\n collection1155FactoryClassHash: \"0x04eb6b419770f13bd191f120b9fc9ee624c0613ad4490062d293ca2016b3b1d2\",\n collection1155ClassHash: \"0x06cf3f5a2322dac35e07a6064a5b8802f19fda8aa3f4726f0cb7bc05dea1bd78\",\n collection1155StartBlock: 11199527,\n popFactory: \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\",\n popCollectionClassHash: \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\",\n dropFactory: \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\",\n dropCollectionClassHash: \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\",\n nftComments: \"0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843\",\n creatorCoinFactory: \"0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c\",\n creatorCoinEkuboLauncher: \"0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4\",\n creatorCoinClassHash: \"0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6\",\n creatorCoinFactoryClassHash: \"0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55\",\n creatorCoinStartBlock: 10474544,\n ekuboCore: \"0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b\",\n ipTicketsFactory: \"0x0767bf5b57e1f812463159b5ed683183e1b0c3f942b74871b5c6cd6a93c15e99\",\n ipTicketCollectionClassHash: \"0x0449e8eb7c117740d07cb8e0157d32c8ba3d19d1cfd2784ed5e139f5a1e04acc\",\n ipTicketsFactoryClassHash: \"0x04a739ac3a673ebd0db96bb24475600797c3ed34827e79517f9b2b1640276e6a\",\n ipTicketsStartBlock: 11933694,\n ipClubFactory: \"0x06a0b0be16d70c78f2e18119dbf90e5911cbfd5d8d484bc555dc61d96f56a2b9\",\n ipClubFactoryClassHash: \"0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266\",\n ipClubCollectionClassHash: \"0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5\",\n ipClubFactoryStartBlock: 11928775,\n // v3 redesign (deployed 2026-07-15): single contract is both the\n // offer/bid/proposal registry and the license collection (embeds\n // ERC721Component directly) — no separate receipt contract, no\n // set_minter bootstrap. Supersedes the 2026-07-02 v2 address, which had\n // zero offers/licenses ever issued (clean cutover, no reclassification).\n ipSponsorship: \"0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c\",\n ipSponsorshipClassHash: \"0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3\",\n ipSponsorshipStartBlock: 11896456,\n mediaWalletClassHash: \"0x014b210c7d47392691144bafecdca3c6c7791cc295ea305988da0a724c05ac31\",\n },\n};\n\nexport function getCoordinates(chain: \"STARKNET\"): StarknetCoordinates;\nexport function getCoordinates(chain: \"ETHEREUM\" | \"BASE\"): EvmCoordinates;\nexport function getCoordinates(chain: \"SOLANA\"): SolanaCoordinates;\nexport function getCoordinates(chain: \"STELLAR\"): StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates {\n const c = COORDINATES[chain];\n if (!c) throw new Error(`No coordinates configured for chain \"${chain}\"`);\n return c;\n}\n\nexport const DEFAULT_CHAIN: Chain = \"STARKNET\";\n\n/** Typed Starknet coordinates for Starknet-only modules; throws when the\n * client is scoped to another chain. */\nexport function getStarknetCoordinates(chain: Chain): StarknetCoordinates {\n if (chain !== \"STARKNET\") {\n throw new Error(`This module is Starknet-only (client chain: \"${chain}\")`);\n }\n return getCoordinates(\"STARKNET\");\n}\n","import {\n Contract,\n TransactionBuilder,\n nativeToScVal,\n scValToNative,\n type Transaction,\n rpc,\n} from \"@stellar/stellar-sdk\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport type { Chain } from \"../chains.js\";\nimport { getCoordinates, type StellarCoordinates } from \"../chains.js\";\nimport type {\n AdapterTxResult,\n OrderRef,\n RegisterOrderParams,\n VenueAdapter,\n} from \"../adapters/types.js\";\n\n/** Signer shape: the account's public key + a transaction signer (a wallet\n * kit or a Keypair-backed callback). */\nexport interface StellarSigner {\n publicKey: string;\n signTransaction(xdr: string, networkPassphrase: string): Promise<string>;\n}\n\nexport interface StellarVenueOptions {\n server: rpc.Server;\n networkPassphrase: string;\n /** Defaults to the chain registry's venue contract (populated at deploy). */\n contractId?: string;\n baseFee?: string;\n}\n\n/** Canonical order id on Stellar (spec §3.2b): a stable hex digest of\n * (contract, offerer, salt) — orders are storage-keyed, not hashed on-chain. */\nexport function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef {\n const payload = new TextEncoder().encode(`${contractId}:${offerer}:${salt.toString()}`);\n return \"0x\" + Buffer.from(sha256(payload)).toString(\"hex\");\n}\n\n/** The Medialane venue adapter for Stellar (Soroban). Both directions settle\n * in any SEP-41 token including native XLM (the native SAC) — the chain with\n * no native-bid restriction. */\nexport class StellarVenue implements VenueAdapter<StellarSigner> {\n readonly chain: Chain = \"STELLAR\";\n private readonly server: rpc.Server;\n private readonly passphrase: string;\n private readonly contract: Contract;\n private readonly contractId: string;\n private readonly baseFee: string;\n\n constructor(opts: StellarVenueOptions) {\n this.server = opts.server;\n this.passphrase = opts.networkPassphrase;\n const contractId = opts.contractId ?? maybeCoords()?.marketplace;\n if (!contractId) throw new Error(\"No Stellar venue contract configured\");\n this.contractId = contractId;\n this.contract = new Contract(contractId);\n this.baseFee = opts.baseFee ?? \"100\";\n }\n\n async registerOrder(\n signer: StellarSigner,\n params: RegisterOrderParams,\n ): Promise<AdapterTxResult & { orderRef: OrderRef }> {\n const salt = BigInt(params.salt);\n const counter = await this.getCounter(signer.publicKey);\n const op = this.contract.call(\n \"register_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n nativeToScVal([params.side === \"listing\" ? \"Listing\" : \"Bid\"], { type: \"symbol\" }),\n nativeToScVal(params.asset.contract, { type: \"address\" }),\n nativeToScVal(Number(params.asset.tokenId), { type: \"u32\" }),\n nativeToScVal(params.paymentToken, { type: \"address\" }),\n nativeToScVal(BigInt(params.amount), { type: \"i128\" }),\n nativeToScVal(params.royaltyMaxBps, { type: \"u32\" }),\n nativeToScVal(BigInt(params.startTime), { type: \"u64\" }),\n nativeToScVal(BigInt(params.endTime), { type: \"u64\" }),\n nativeToScVal(counter, { type: \"u64\" }),\n );\n const txHash = await this.invoke(signer, op);\n return { txHash, orderRef: stellarOrderRef(this.contractId, signer.publicKey, salt) };\n }\n\n async fulfillOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { offerer?: string; salt?: string },\n ): Promise<AdapterTxResult> {\n if (!opts?.offerer || opts.salt === undefined) {\n throw new Error(\"Stellar fulfillment needs { offerer, salt } (orders are storage-keyed)\");\n }\n const op = this.contract.call(\n \"fulfill_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(opts.offerer, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async cancelOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { salt?: string },\n ): Promise<AdapterTxResult> {\n if (opts?.salt === undefined) throw new Error(\"Stellar cancel needs { salt }\");\n const op = this.contract.call(\n \"cancel_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async incrementCounter(signer: StellarSigner): Promise<AdapterTxResult> {\n const op = this.contract.call(\n \"increment_counter\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async getOrderDetails(_orderRef: OrderRef): Promise<unknown> {\n throw new Error(\"Use getOrder(offerer, salt) — Stellar orders are storage-keyed\");\n }\n\n async getOrder(offerer: string, salt: bigint): Promise<unknown> {\n return this.view(\"get_order\", [\n nativeToScVal(offerer, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n ]);\n }\n\n async getCounter(address: string): Promise<bigint> {\n const value = await this.view(\"get_counter\", [nativeToScVal(address, { type: \"address\" })]);\n return BigInt((value as bigint | number | undefined) ?? 0);\n }\n\n private async view(method: string, args: Parameters<Contract[\"call\"]>[1][]): Promise<unknown> {\n const account = await this.server.getAccount(PLACEHOLDER_SOURCE);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(this.contract.call(method, ...args))\n .setTimeout(30)\n .build();\n const sim = await this.server.simulateTransaction(tx);\n if (rpc.Api.isSimulationSuccess(sim) && sim.result?.retval) {\n return scValToNative(sim.result.retval);\n }\n return undefined;\n }\n\n private async invoke(\n signer: StellarSigner,\n op: ReturnType<Contract[\"call\"]>,\n ): Promise<string> {\n const account = await this.server.getAccount(signer.publicKey);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(op)\n .setTimeout(60)\n .build();\n const prepared = await this.server.prepareTransaction(tx);\n const signedXdr = await signer.signTransaction(prepared.toXDR(), this.passphrase);\n const signed = TransactionBuilder.fromXDR(signedXdr, this.passphrase) as Transaction;\n const sent = await this.server.sendTransaction(signed);\n return sent.hash;\n }\n}\n\n/** Public \"muxed-free\" placeholder for view simulations (any funded account\n * works as a simulation source; callers can override via getAccount). */\nconst PLACEHOLDER_SOURCE = \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n\nfunction maybeCoords(): StellarCoordinates | undefined {\n try {\n return getCoordinates(\"STELLAR\");\n } catch {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/chains.ts","../../src/stellar/venue.ts"],"names":["sha256","Contract","nativeToScVal","TransactionBuilder","rpc","scValToNative"],"mappings":"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","file":"index.cjs","sourcesContent":["\n\nexport const CHAINS = [\"STARKNET\", \"ETHEREUM\", \"SOLANA\", \"BASE\", \"STELLAR\", \"BITCOIN\"] as const;\nexport type Chain = (typeof CHAINS)[number];\n\nexport interface StarknetCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721ClassHash?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155ClassHash?: `0x${string}`;\n marketplace1155StartBlock?: number;\n collection721?: `0x${string}`;\n collection721StartBlock?: number;\n ipNftClassHash?: `0x${string}`;\n ipCollectionClassHash?: `0x${string}`;\n collection1155?: `0x${string}`;\n collection1155FactoryClassHash?: `0x${string}`;\n collection1155ClassHash?: `0x${string}`;\n collection1155StartBlock?: number;\n popFactory?: `0x${string}`;\n popCollectionClassHash?: `0x${string}`;\n dropFactory?: `0x${string}`;\n dropCollectionClassHash?: `0x${string}`;\n nftComments?: `0x${string}`;\n creatorCoinFactory?: `0x${string}`;\n creatorCoinEkuboLauncher?: `0x${string}`;\n creatorCoinClassHash?: `0x${string}`;\n creatorCoinFactoryClassHash?: `0x${string}`;\n creatorCoinStartBlock?: number;\n ekuboCore?: `0x${string}`;\n ipTicketsFactory?: `0x${string}`;\n ipTicketCollectionClassHash?: `0x${string}`;\n ipTicketsFactoryClassHash?: `0x${string}`;\n ipTicketsStartBlock?: number;\n ipClubFactory?: `0x${string}`;\n ipClubFactoryClassHash?: `0x${string}`;\n ipClubCollectionClassHash?: `0x${string}`;\n ipClubFactoryStartBlock?: number;\n ipSponsorship?: `0x${string}`;\n ipSponsorshipClassHash?: `0x${string}`;\n ipSponsorshipStartBlock?: number;\n mediaWalletClassHash?: `0x${string}`;\n}\n\nexport interface EvmCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155StartBlock?: number;\n mipRegistry?: `0x${string}`;\n mipRegistryStartBlock?: number;\n mipEditionsRegistry?: `0x${string}`;\n mipEditionsRegistryStartBlock?: number;\n}\n\nexport interface SolanaCoordinates {\n rpcUrl: string;\n mipCollectionsProgram?: string;\n marketplaceProgram?: string;\n startSlot?: number;\n}\n\nexport interface StellarCoordinates {\n rpcUrl: string;\n mipRegistry?: string;\n marketplace?: string;\n collectionWasmHash?: string;\n startLedger?: number;\n}\n\nexport interface CoordinatesByChain {\n STARKNET?: StarknetCoordinates;\n ETHEREUM?: EvmCoordinates;\n BASE?: EvmCoordinates;\n SOLANA?: SolanaCoordinates;\n STELLAR?: StellarCoordinates;\n BITCOIN?: never;\n}\n\nexport type ChainCoordinates = StarknetCoordinates;\n\nconst COORDINATES: CoordinatesByChain = {\n STARKNET: {\n rpcUrl: \"https://rpc.starknet.lava.build\",\n marketplace721: \"0x03eda9a2b6ad90845a43591bac8083ebaf677d51fdf20f503b2c01889e3131fc\",\n marketplace721ClassHash: \"0x0700d9230d07e5203e27778c0dc70f9134d2b25bf319f7cf8348dc66a6923e90\",\n marketplace721StartBlock: 11198146,\n marketplace1155: \"0x07c4ce1c19ea48cc11135ed22b19ff745f5aec508c3828593002e4f76fdb1b38\",\n marketplace1155ClassHash: \"0x0242f5c388da7cee2d99e2a69453c8159bf927fbec4e797a3cfdcbbcb5b68328\",\n marketplace1155StartBlock: 11198267,\n collection721: \"0x0225c3ae09506b8d97adc39649ca740dad5aac195b7f5f0441cc1852947acaea\",\n collection721StartBlock: 11198496,\n ipNftClassHash: \"0x012d3ae40ba35c7e2be0946532dac60e48932447912fdf96b674da67c029b9cc\",\n ipCollectionClassHash: \"0x022155a1a130a40e57aac4b89c07fab3f616bc351b1270fc40f756b963afe8b4\",\n collection1155: \"0x015368976d46fae5bfa1c58600f641d5aa5dbbf53ebc6b78aa3922194aad3551\",\n collection1155FactoryClassHash: \"0x04eb6b419770f13bd191f120b9fc9ee624c0613ad4490062d293ca2016b3b1d2\",\n collection1155ClassHash: \"0x06cf3f5a2322dac35e07a6064a5b8802f19fda8aa3f4726f0cb7bc05dea1bd78\",\n collection1155StartBlock: 11199527,\n popFactory: \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\",\n popCollectionClassHash: \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\",\n dropFactory: \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\",\n dropCollectionClassHash: \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\",\n nftComments: \"0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843\",\n creatorCoinFactory: \"0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c\",\n creatorCoinEkuboLauncher: \"0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4\",\n creatorCoinClassHash: \"0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6\",\n creatorCoinFactoryClassHash: \"0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55\",\n creatorCoinStartBlock: 10474544,\n ekuboCore: \"0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b\",\n ipTicketsFactory: \"0x0767bf5b57e1f812463159b5ed683183e1b0c3f942b74871b5c6cd6a93c15e99\",\n ipTicketCollectionClassHash: \"0x0449e8eb7c117740d07cb8e0157d32c8ba3d19d1cfd2784ed5e139f5a1e04acc\",\n ipTicketsFactoryClassHash: \"0x04a739ac3a673ebd0db96bb24475600797c3ed34827e79517f9b2b1640276e6a\",\n ipTicketsStartBlock: 11933694,\n ipClubFactory: \"0x06a0b0be16d70c78f2e18119dbf90e5911cbfd5d8d484bc555dc61d96f56a2b9\",\n ipClubFactoryClassHash: \"0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266\",\n ipClubCollectionClassHash: \"0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5\",\n ipClubFactoryStartBlock: 11928775,\n\n ipSponsorship: \"0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c\",\n ipSponsorshipClassHash: \"0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3\",\n ipSponsorshipStartBlock: 11896456,\n mediaWalletClassHash: \"0x014b210c7d47392691144bafecdca3c6c7791cc295ea305988da0a724c05ac31\",\n },\n};\n\nexport function getCoordinates(chain: \"STARKNET\"): StarknetCoordinates;\nexport function getCoordinates(chain: \"ETHEREUM\" | \"BASE\"): EvmCoordinates;\nexport function getCoordinates(chain: \"SOLANA\"): SolanaCoordinates;\nexport function getCoordinates(chain: \"STELLAR\"): StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates {\n const c = COORDINATES[chain];\n if (!c) throw new Error(`No coordinates configured for chain \"${chain}\"`);\n return c;\n}\n\nexport const DEFAULT_CHAIN: Chain = \"STARKNET\";\n\nexport function getStarknetCoordinates(chain: Chain): StarknetCoordinates {\n if (chain !== \"STARKNET\") {\n throw new Error(`This module is Starknet-only (client chain: \"${chain}\")`);\n }\n return getCoordinates(\"STARKNET\");\n}\n","import {\n Contract,\n TransactionBuilder,\n nativeToScVal,\n scValToNative,\n type Transaction,\n rpc,\n} from \"@stellar/stellar-sdk\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport type { Chain } from \"../chains.js\";\nimport { getCoordinates, type StellarCoordinates } from \"../chains.js\";\nimport type {\n AdapterTxResult,\n OrderRef,\n RegisterOrderParams,\n VenueAdapter,\n} from \"../adapters/types.js\";\n\nexport interface StellarSigner {\n publicKey: string;\n signTransaction(xdr: string, networkPassphrase: string): Promise<string>;\n}\n\nexport interface StellarVenueOptions {\n server: rpc.Server;\n networkPassphrase: string;\n\n contractId?: string;\n baseFee?: string;\n}\n\nexport function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef {\n const payload = new TextEncoder().encode(`${contractId}:${offerer}:${salt.toString()}`);\n return \"0x\" + Buffer.from(sha256(payload)).toString(\"hex\");\n}\n\nexport class StellarVenue implements VenueAdapter<StellarSigner> {\n readonly chain: Chain = \"STELLAR\";\n private readonly server: rpc.Server;\n private readonly passphrase: string;\n private readonly contract: Contract;\n private readonly contractId: string;\n private readonly baseFee: string;\n\n constructor(opts: StellarVenueOptions) {\n this.server = opts.server;\n this.passphrase = opts.networkPassphrase;\n const contractId = opts.contractId ?? maybeCoords()?.marketplace;\n if (!contractId) throw new Error(\"No Stellar venue contract configured\");\n this.contractId = contractId;\n this.contract = new Contract(contractId);\n this.baseFee = opts.baseFee ?? \"100\";\n }\n\n async registerOrder(\n signer: StellarSigner,\n params: RegisterOrderParams,\n ): Promise<AdapterTxResult & { orderRef: OrderRef }> {\n const salt = BigInt(params.salt);\n const counter = await this.getCounter(signer.publicKey);\n const op = this.contract.call(\n \"register_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n nativeToScVal([params.side === \"listing\" ? \"Listing\" : \"Bid\"], { type: \"symbol\" }),\n nativeToScVal(params.asset.contract, { type: \"address\" }),\n nativeToScVal(Number(params.asset.tokenId), { type: \"u32\" }),\n nativeToScVal(params.paymentToken, { type: \"address\" }),\n nativeToScVal(BigInt(params.amount), { type: \"i128\" }),\n nativeToScVal(params.royaltyMaxBps, { type: \"u32\" }),\n nativeToScVal(BigInt(params.startTime), { type: \"u64\" }),\n nativeToScVal(BigInt(params.endTime), { type: \"u64\" }),\n nativeToScVal(counter, { type: \"u64\" }),\n );\n const txHash = await this.invoke(signer, op);\n return { txHash, orderRef: stellarOrderRef(this.contractId, signer.publicKey, salt) };\n }\n\n async fulfillOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { offerer?: string; salt?: string },\n ): Promise<AdapterTxResult> {\n if (!opts?.offerer || opts.salt === undefined) {\n throw new Error(\"Stellar fulfillment needs { offerer, salt } (orders are storage-keyed)\");\n }\n const op = this.contract.call(\n \"fulfill_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(opts.offerer, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async cancelOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { salt?: string },\n ): Promise<AdapterTxResult> {\n if (opts?.salt === undefined) throw new Error(\"Stellar cancel needs { salt }\");\n const op = this.contract.call(\n \"cancel_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async incrementCounter(signer: StellarSigner): Promise<AdapterTxResult> {\n const op = this.contract.call(\n \"increment_counter\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async getOrderDetails(_orderRef: OrderRef): Promise<unknown> {\n throw new Error(\"Use getOrder(offerer, salt) — Stellar orders are storage-keyed\");\n }\n\n async getOrder(offerer: string, salt: bigint): Promise<unknown> {\n return this.view(\"get_order\", [\n nativeToScVal(offerer, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n ]);\n }\n\n async getCounter(address: string): Promise<bigint> {\n const value = await this.view(\"get_counter\", [nativeToScVal(address, { type: \"address\" })]);\n return BigInt((value as bigint | number | undefined) ?? 0);\n }\n\n private async view(method: string, args: Parameters<Contract[\"call\"]>[1][]): Promise<unknown> {\n const account = await this.server.getAccount(PLACEHOLDER_SOURCE);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(this.contract.call(method, ...args))\n .setTimeout(30)\n .build();\n const sim = await this.server.simulateTransaction(tx);\n if (rpc.Api.isSimulationSuccess(sim) && sim.result?.retval) {\n return scValToNative(sim.result.retval);\n }\n return undefined;\n }\n\n private async invoke(\n signer: StellarSigner,\n op: ReturnType<Contract[\"call\"]>,\n ): Promise<string> {\n const account = await this.server.getAccount(signer.publicKey);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(op)\n .setTimeout(60)\n .build();\n const prepared = await this.server.prepareTransaction(tx);\n const signedXdr = await signer.signTransaction(prepared.toXDR(), this.passphrase);\n const signed = TransactionBuilder.fromXDR(signedXdr, this.passphrase) as Transaction;\n const sent = await this.server.sendTransaction(signed);\n return sent.hash;\n }\n}\n\nconst PLACEHOLDER_SOURCE = \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n\nfunction maybeCoords(): StellarCoordinates | undefined {\n try {\n return getCoordinates(\"STELLAR\");\n } catch {\n return undefined;\n }\n}\n"]}
@@ -1,8 +1,6 @@
1
1
  import { rpc } from '@stellar/stellar-sdk';
2
- import { V as VenueAdapter, C as Chain, R as RegisterOrderParams, A as AdapterTxResult, O as OrderRef } from '../types-sIc3OCpo.cjs';
2
+ import { V as VenueAdapter, C as Chain, R as RegisterOrderParams, A as AdapterTxResult, O as OrderRef } from '../types-nPIXtCF5.cjs';
3
3
 
4
- /** Signer shape: the account's public key + a transaction signer (a wallet
5
- * kit or a Keypair-backed callback). */
6
4
  interface StellarSigner {
7
5
  publicKey: string;
8
6
  signTransaction(xdr: string, networkPassphrase: string): Promise<string>;
@@ -10,16 +8,10 @@ interface StellarSigner {
10
8
  interface StellarVenueOptions {
11
9
  server: rpc.Server;
12
10
  networkPassphrase: string;
13
- /** Defaults to the chain registry's venue contract (populated at deploy). */
14
11
  contractId?: string;
15
12
  baseFee?: string;
16
13
  }
17
- /** Canonical order id on Stellar (spec §3.2b): a stable hex digest of
18
- * (contract, offerer, salt) — orders are storage-keyed, not hashed on-chain. */
19
14
  declare function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef;
20
- /** The Medialane venue adapter for Stellar (Soroban). Both directions settle
21
- * in any SEP-41 token including native XLM (the native SAC) — the chain with
22
- * no native-bid restriction. */
23
15
  declare class StellarVenue implements VenueAdapter<StellarSigner> {
24
16
  readonly chain: Chain;
25
17
  private readonly server;
@@ -1,8 +1,6 @@
1
1
  import { rpc } from '@stellar/stellar-sdk';
2
- import { V as VenueAdapter, C as Chain, R as RegisterOrderParams, A as AdapterTxResult, O as OrderRef } from '../types-sIc3OCpo.js';
2
+ import { V as VenueAdapter, C as Chain, R as RegisterOrderParams, A as AdapterTxResult, O as OrderRef } from '../types-nPIXtCF5.js';
3
3
 
4
- /** Signer shape: the account's public key + a transaction signer (a wallet
5
- * kit or a Keypair-backed callback). */
6
4
  interface StellarSigner {
7
5
  publicKey: string;
8
6
  signTransaction(xdr: string, networkPassphrase: string): Promise<string>;
@@ -10,16 +8,10 @@ interface StellarSigner {
10
8
  interface StellarVenueOptions {
11
9
  server: rpc.Server;
12
10
  networkPassphrase: string;
13
- /** Defaults to the chain registry's venue contract (populated at deploy). */
14
11
  contractId?: string;
15
12
  baseFee?: string;
16
13
  }
17
- /** Canonical order id on Stellar (spec §3.2b): a stable hex digest of
18
- * (contract, offerer, salt) — orders are storage-keyed, not hashed on-chain. */
19
14
  declare function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef;
20
- /** The Medialane venue adapter for Stellar (Soroban). Both directions settle
21
- * in any SEP-41 token including native XLM (the native SAC) — the chain with
22
- * no native-bid restriction. */
23
15
  declare class StellarVenue implements VenueAdapter<StellarSigner> {
24
16
  readonly chain: Chain;
25
17
  private readonly server;
@@ -40,11 +40,6 @@ var COORDINATES = {
40
40
  ipClubFactoryClassHash: "0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266",
41
41
  ipClubCollectionClassHash: "0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5",
42
42
  ipClubFactoryStartBlock: 11928775,
43
- // v3 redesign (deployed 2026-07-15): single contract is both the
44
- // offer/bid/proposal registry and the license collection (embeds
45
- // ERC721Component directly) — no separate receipt contract, no
46
- // set_minter bootstrap. Supersedes the 2026-07-02 v2 address, which had
47
- // zero offers/licenses ever issued (clean cutover, no reclassification).
48
43
  ipSponsorship: "0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c",
49
44
  ipSponsorshipClassHash: "0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3",
50
45
  ipSponsorshipStartBlock: 11896456,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/chains.ts","../../src/stellar/venue.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Single source of per-chain coordinates for Medialane's own services\n// (spec 2026-06-13 §3.1, Decision A). Keyed by CHAIN ALONE — Medialane is\n// mainnet-only, so there is no network axis (refines decisions.md D-9).\n\n/** Mirrors the backend Prisma `Chain` enum. */\nexport const CHAINS = [\"STARKNET\", \"ETHEREUM\", \"SOLANA\", \"BASE\", \"STELLAR\", \"BITCOIN\"] as const;\nexport type Chain = (typeof CHAINS)[number];\n\n/** Starknet coordinates of Medialane services + venues. All fields optional\n * because not every service exists on every chain. */\nexport interface StarknetCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721ClassHash?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155ClassHash?: `0x${string}`;\n marketplace1155StartBlock?: number;\n collection721?: `0x${string}`;\n collection721StartBlock?: number;\n ipNftClassHash?: `0x${string}`;\n ipCollectionClassHash?: `0x${string}`;\n collection1155?: `0x${string}`;\n collection1155FactoryClassHash?: `0x${string}`;\n collection1155ClassHash?: `0x${string}`;\n collection1155StartBlock?: number;\n popFactory?: `0x${string}`;\n popCollectionClassHash?: `0x${string}`;\n dropFactory?: `0x${string}`;\n dropCollectionClassHash?: `0x${string}`;\n nftComments?: `0x${string}`;\n creatorCoinFactory?: `0x${string}`;\n creatorCoinEkuboLauncher?: `0x${string}`;\n creatorCoinClassHash?: `0x${string}`;\n creatorCoinFactoryClassHash?: `0x${string}`;\n creatorCoinStartBlock?: number;\n ekuboCore?: `0x${string}`;\n ipTicketsFactory?: `0x${string}`;\n ipTicketCollectionClassHash?: `0x${string}`;\n ipTicketsFactoryClassHash?: `0x${string}`;\n ipTicketsStartBlock?: number;\n ipClubFactory?: `0x${string}`;\n ipClubFactoryClassHash?: `0x${string}`;\n ipClubCollectionClassHash?: `0x${string}`;\n ipClubFactoryStartBlock?: number;\n ipSponsorship?: `0x${string}`;\n ipSponsorshipClassHash?: `0x${string}`;\n ipSponsorshipStartBlock?: number;\n mediaWalletClassHash?: `0x${string}`;\n}\n\n/** Coordinates per chain. Only STARKNET is populated today; adding a chain\n * means adding an entry here (litmus test, spec §7). */\n/** EVM coordinates — one shape for Ethereum and Base (same bytecode, two\n * chains). Populated at deploy time (federation Phase 4). */\nexport interface EvmCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155StartBlock?: number;\n mipRegistry?: `0x${string}`;\n mipRegistryStartBlock?: number;\n mipEditionsRegistry?: `0x${string}`;\n mipEditionsRegistryStartBlock?: number;\n}\n\n/** Solana coordinates — base58 program ids. Populated at deploy time. */\nexport interface SolanaCoordinates {\n rpcUrl: string;\n mipCollectionsProgram?: string;\n marketplaceProgram?: string;\n startSlot?: number;\n}\n\n/** Stellar (Soroban) coordinates — strkey contract ids. Populated at deploy\n * time; the registry takes the collection WASM hash as a constructor arg. */\nexport interface StellarCoordinates {\n rpcUrl: string;\n mipRegistry?: string;\n marketplace?: string;\n collectionWasmHash?: string;\n startLedger?: number;\n}\n\n/** Per-chain coordinate shapes. Every chain is an equal entry — no chain is\n * privileged in core (chain-sovereignty I2/I4). */\nexport interface CoordinatesByChain {\n STARKNET?: StarknetCoordinates;\n ETHEREUM?: EvmCoordinates;\n BASE?: EvmCoordinates;\n SOLANA?: SolanaCoordinates;\n STELLAR?: StellarCoordinates;\n BITCOIN?: never;\n}\n\n/** @deprecated Renamed — use `StarknetCoordinates` (coordinates are per-chain-shaped). */\nexport type ChainCoordinates = StarknetCoordinates;\n\nconst COORDINATES: CoordinatesByChain = {\n STARKNET: {\n rpcUrl: \"https://rpc.starknet.lava.build\",\n marketplace721: \"0x03eda9a2b6ad90845a43591bac8083ebaf677d51fdf20f503b2c01889e3131fc\",\n marketplace721ClassHash: \"0x0700d9230d07e5203e27778c0dc70f9134d2b25bf319f7cf8348dc66a6923e90\",\n marketplace721StartBlock: 11198146,\n marketplace1155: \"0x07c4ce1c19ea48cc11135ed22b19ff745f5aec508c3828593002e4f76fdb1b38\",\n marketplace1155ClassHash: \"0x0242f5c388da7cee2d99e2a69453c8159bf927fbec4e797a3cfdcbbcb5b68328\",\n marketplace1155StartBlock: 11198267,\n collection721: \"0x0225c3ae09506b8d97adc39649ca740dad5aac195b7f5f0441cc1852947acaea\",\n collection721StartBlock: 11198496,\n ipNftClassHash: \"0x012d3ae40ba35c7e2be0946532dac60e48932447912fdf96b674da67c029b9cc\",\n ipCollectionClassHash: \"0x022155a1a130a40e57aac4b89c07fab3f616bc351b1270fc40f756b963afe8b4\",\n collection1155: \"0x015368976d46fae5bfa1c58600f641d5aa5dbbf53ebc6b78aa3922194aad3551\",\n collection1155FactoryClassHash: \"0x04eb6b419770f13bd191f120b9fc9ee624c0613ad4490062d293ca2016b3b1d2\",\n collection1155ClassHash: \"0x06cf3f5a2322dac35e07a6064a5b8802f19fda8aa3f4726f0cb7bc05dea1bd78\",\n collection1155StartBlock: 11199527,\n popFactory: \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\",\n popCollectionClassHash: \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\",\n dropFactory: \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\",\n dropCollectionClassHash: \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\",\n nftComments: \"0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843\",\n creatorCoinFactory: \"0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c\",\n creatorCoinEkuboLauncher: \"0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4\",\n creatorCoinClassHash: \"0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6\",\n creatorCoinFactoryClassHash: \"0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55\",\n creatorCoinStartBlock: 10474544,\n ekuboCore: \"0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b\",\n ipTicketsFactory: \"0x0767bf5b57e1f812463159b5ed683183e1b0c3f942b74871b5c6cd6a93c15e99\",\n ipTicketCollectionClassHash: \"0x0449e8eb7c117740d07cb8e0157d32c8ba3d19d1cfd2784ed5e139f5a1e04acc\",\n ipTicketsFactoryClassHash: \"0x04a739ac3a673ebd0db96bb24475600797c3ed34827e79517f9b2b1640276e6a\",\n ipTicketsStartBlock: 11933694,\n ipClubFactory: \"0x06a0b0be16d70c78f2e18119dbf90e5911cbfd5d8d484bc555dc61d96f56a2b9\",\n ipClubFactoryClassHash: \"0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266\",\n ipClubCollectionClassHash: \"0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5\",\n ipClubFactoryStartBlock: 11928775,\n // v3 redesign (deployed 2026-07-15): single contract is both the\n // offer/bid/proposal registry and the license collection (embeds\n // ERC721Component directly) — no separate receipt contract, no\n // set_minter bootstrap. Supersedes the 2026-07-02 v2 address, which had\n // zero offers/licenses ever issued (clean cutover, no reclassification).\n ipSponsorship: \"0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c\",\n ipSponsorshipClassHash: \"0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3\",\n ipSponsorshipStartBlock: 11896456,\n mediaWalletClassHash: \"0x014b210c7d47392691144bafecdca3c6c7791cc295ea305988da0a724c05ac31\",\n },\n};\n\nexport function getCoordinates(chain: \"STARKNET\"): StarknetCoordinates;\nexport function getCoordinates(chain: \"ETHEREUM\" | \"BASE\"): EvmCoordinates;\nexport function getCoordinates(chain: \"SOLANA\"): SolanaCoordinates;\nexport function getCoordinates(chain: \"STELLAR\"): StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates {\n const c = COORDINATES[chain];\n if (!c) throw new Error(`No coordinates configured for chain \"${chain}\"`);\n return c;\n}\n\nexport const DEFAULT_CHAIN: Chain = \"STARKNET\";\n\n/** Typed Starknet coordinates for Starknet-only modules; throws when the\n * client is scoped to another chain. */\nexport function getStarknetCoordinates(chain: Chain): StarknetCoordinates {\n if (chain !== \"STARKNET\") {\n throw new Error(`This module is Starknet-only (client chain: \"${chain}\")`);\n }\n return getCoordinates(\"STARKNET\");\n}\n","import {\n Contract,\n TransactionBuilder,\n nativeToScVal,\n scValToNative,\n type Transaction,\n rpc,\n} from \"@stellar/stellar-sdk\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport type { Chain } from \"../chains.js\";\nimport { getCoordinates, type StellarCoordinates } from \"../chains.js\";\nimport type {\n AdapterTxResult,\n OrderRef,\n RegisterOrderParams,\n VenueAdapter,\n} from \"../adapters/types.js\";\n\n/** Signer shape: the account's public key + a transaction signer (a wallet\n * kit or a Keypair-backed callback). */\nexport interface StellarSigner {\n publicKey: string;\n signTransaction(xdr: string, networkPassphrase: string): Promise<string>;\n}\n\nexport interface StellarVenueOptions {\n server: rpc.Server;\n networkPassphrase: string;\n /** Defaults to the chain registry's venue contract (populated at deploy). */\n contractId?: string;\n baseFee?: string;\n}\n\n/** Canonical order id on Stellar (spec §3.2b): a stable hex digest of\n * (contract, offerer, salt) — orders are storage-keyed, not hashed on-chain. */\nexport function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef {\n const payload = new TextEncoder().encode(`${contractId}:${offerer}:${salt.toString()}`);\n return \"0x\" + Buffer.from(sha256(payload)).toString(\"hex\");\n}\n\n/** The Medialane venue adapter for Stellar (Soroban). Both directions settle\n * in any SEP-41 token including native XLM (the native SAC) — the chain with\n * no native-bid restriction. */\nexport class StellarVenue implements VenueAdapter<StellarSigner> {\n readonly chain: Chain = \"STELLAR\";\n private readonly server: rpc.Server;\n private readonly passphrase: string;\n private readonly contract: Contract;\n private readonly contractId: string;\n private readonly baseFee: string;\n\n constructor(opts: StellarVenueOptions) {\n this.server = opts.server;\n this.passphrase = opts.networkPassphrase;\n const contractId = opts.contractId ?? maybeCoords()?.marketplace;\n if (!contractId) throw new Error(\"No Stellar venue contract configured\");\n this.contractId = contractId;\n this.contract = new Contract(contractId);\n this.baseFee = opts.baseFee ?? \"100\";\n }\n\n async registerOrder(\n signer: StellarSigner,\n params: RegisterOrderParams,\n ): Promise<AdapterTxResult & { orderRef: OrderRef }> {\n const salt = BigInt(params.salt);\n const counter = await this.getCounter(signer.publicKey);\n const op = this.contract.call(\n \"register_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n nativeToScVal([params.side === \"listing\" ? \"Listing\" : \"Bid\"], { type: \"symbol\" }),\n nativeToScVal(params.asset.contract, { type: \"address\" }),\n nativeToScVal(Number(params.asset.tokenId), { type: \"u32\" }),\n nativeToScVal(params.paymentToken, { type: \"address\" }),\n nativeToScVal(BigInt(params.amount), { type: \"i128\" }),\n nativeToScVal(params.royaltyMaxBps, { type: \"u32\" }),\n nativeToScVal(BigInt(params.startTime), { type: \"u64\" }),\n nativeToScVal(BigInt(params.endTime), { type: \"u64\" }),\n nativeToScVal(counter, { type: \"u64\" }),\n );\n const txHash = await this.invoke(signer, op);\n return { txHash, orderRef: stellarOrderRef(this.contractId, signer.publicKey, salt) };\n }\n\n async fulfillOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { offerer?: string; salt?: string },\n ): Promise<AdapterTxResult> {\n if (!opts?.offerer || opts.salt === undefined) {\n throw new Error(\"Stellar fulfillment needs { offerer, salt } (orders are storage-keyed)\");\n }\n const op = this.contract.call(\n \"fulfill_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(opts.offerer, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async cancelOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { salt?: string },\n ): Promise<AdapterTxResult> {\n if (opts?.salt === undefined) throw new Error(\"Stellar cancel needs { salt }\");\n const op = this.contract.call(\n \"cancel_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async incrementCounter(signer: StellarSigner): Promise<AdapterTxResult> {\n const op = this.contract.call(\n \"increment_counter\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async getOrderDetails(_orderRef: OrderRef): Promise<unknown> {\n throw new Error(\"Use getOrder(offerer, salt) — Stellar orders are storage-keyed\");\n }\n\n async getOrder(offerer: string, salt: bigint): Promise<unknown> {\n return this.view(\"get_order\", [\n nativeToScVal(offerer, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n ]);\n }\n\n async getCounter(address: string): Promise<bigint> {\n const value = await this.view(\"get_counter\", [nativeToScVal(address, { type: \"address\" })]);\n return BigInt((value as bigint | number | undefined) ?? 0);\n }\n\n private async view(method: string, args: Parameters<Contract[\"call\"]>[1][]): Promise<unknown> {\n const account = await this.server.getAccount(PLACEHOLDER_SOURCE);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(this.contract.call(method, ...args))\n .setTimeout(30)\n .build();\n const sim = await this.server.simulateTransaction(tx);\n if (rpc.Api.isSimulationSuccess(sim) && sim.result?.retval) {\n return scValToNative(sim.result.retval);\n }\n return undefined;\n }\n\n private async invoke(\n signer: StellarSigner,\n op: ReturnType<Contract[\"call\"]>,\n ): Promise<string> {\n const account = await this.server.getAccount(signer.publicKey);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(op)\n .setTimeout(60)\n .build();\n const prepared = await this.server.prepareTransaction(tx);\n const signedXdr = await signer.signTransaction(prepared.toXDR(), this.passphrase);\n const signed = TransactionBuilder.fromXDR(signedXdr, this.passphrase) as Transaction;\n const sent = await this.server.sendTransaction(signed);\n return sent.hash;\n }\n}\n\n/** Public \"muxed-free\" placeholder for view simulations (any funded account\n * works as a simulation source; callers can override via getAccount). */\nconst PLACEHOLDER_SOURCE = \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n\nfunction maybeCoords(): StellarCoordinates | undefined {\n try {\n return getCoordinates(\"STELLAR\");\n } catch {\n return undefined;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/chains.ts","../../src/stellar/venue.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["\n\nexport const CHAINS = [\"STARKNET\", \"ETHEREUM\", \"SOLANA\", \"BASE\", \"STELLAR\", \"BITCOIN\"] as const;\nexport type Chain = (typeof CHAINS)[number];\n\nexport interface StarknetCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721ClassHash?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155ClassHash?: `0x${string}`;\n marketplace1155StartBlock?: number;\n collection721?: `0x${string}`;\n collection721StartBlock?: number;\n ipNftClassHash?: `0x${string}`;\n ipCollectionClassHash?: `0x${string}`;\n collection1155?: `0x${string}`;\n collection1155FactoryClassHash?: `0x${string}`;\n collection1155ClassHash?: `0x${string}`;\n collection1155StartBlock?: number;\n popFactory?: `0x${string}`;\n popCollectionClassHash?: `0x${string}`;\n dropFactory?: `0x${string}`;\n dropCollectionClassHash?: `0x${string}`;\n nftComments?: `0x${string}`;\n creatorCoinFactory?: `0x${string}`;\n creatorCoinEkuboLauncher?: `0x${string}`;\n creatorCoinClassHash?: `0x${string}`;\n creatorCoinFactoryClassHash?: `0x${string}`;\n creatorCoinStartBlock?: number;\n ekuboCore?: `0x${string}`;\n ipTicketsFactory?: `0x${string}`;\n ipTicketCollectionClassHash?: `0x${string}`;\n ipTicketsFactoryClassHash?: `0x${string}`;\n ipTicketsStartBlock?: number;\n ipClubFactory?: `0x${string}`;\n ipClubFactoryClassHash?: `0x${string}`;\n ipClubCollectionClassHash?: `0x${string}`;\n ipClubFactoryStartBlock?: number;\n ipSponsorship?: `0x${string}`;\n ipSponsorshipClassHash?: `0x${string}`;\n ipSponsorshipStartBlock?: number;\n mediaWalletClassHash?: `0x${string}`;\n}\n\nexport interface EvmCoordinates {\n rpcUrl: string;\n marketplace721?: `0x${string}`;\n marketplace721StartBlock?: number;\n marketplace1155?: `0x${string}`;\n marketplace1155StartBlock?: number;\n mipRegistry?: `0x${string}`;\n mipRegistryStartBlock?: number;\n mipEditionsRegistry?: `0x${string}`;\n mipEditionsRegistryStartBlock?: number;\n}\n\nexport interface SolanaCoordinates {\n rpcUrl: string;\n mipCollectionsProgram?: string;\n marketplaceProgram?: string;\n startSlot?: number;\n}\n\nexport interface StellarCoordinates {\n rpcUrl: string;\n mipRegistry?: string;\n marketplace?: string;\n collectionWasmHash?: string;\n startLedger?: number;\n}\n\nexport interface CoordinatesByChain {\n STARKNET?: StarknetCoordinates;\n ETHEREUM?: EvmCoordinates;\n BASE?: EvmCoordinates;\n SOLANA?: SolanaCoordinates;\n STELLAR?: StellarCoordinates;\n BITCOIN?: never;\n}\n\nexport type ChainCoordinates = StarknetCoordinates;\n\nconst COORDINATES: CoordinatesByChain = {\n STARKNET: {\n rpcUrl: \"https://rpc.starknet.lava.build\",\n marketplace721: \"0x03eda9a2b6ad90845a43591bac8083ebaf677d51fdf20f503b2c01889e3131fc\",\n marketplace721ClassHash: \"0x0700d9230d07e5203e27778c0dc70f9134d2b25bf319f7cf8348dc66a6923e90\",\n marketplace721StartBlock: 11198146,\n marketplace1155: \"0x07c4ce1c19ea48cc11135ed22b19ff745f5aec508c3828593002e4f76fdb1b38\",\n marketplace1155ClassHash: \"0x0242f5c388da7cee2d99e2a69453c8159bf927fbec4e797a3cfdcbbcb5b68328\",\n marketplace1155StartBlock: 11198267,\n collection721: \"0x0225c3ae09506b8d97adc39649ca740dad5aac195b7f5f0441cc1852947acaea\",\n collection721StartBlock: 11198496,\n ipNftClassHash: \"0x012d3ae40ba35c7e2be0946532dac60e48932447912fdf96b674da67c029b9cc\",\n ipCollectionClassHash: \"0x022155a1a130a40e57aac4b89c07fab3f616bc351b1270fc40f756b963afe8b4\",\n collection1155: \"0x015368976d46fae5bfa1c58600f641d5aa5dbbf53ebc6b78aa3922194aad3551\",\n collection1155FactoryClassHash: \"0x04eb6b419770f13bd191f120b9fc9ee624c0613ad4490062d293ca2016b3b1d2\",\n collection1155ClassHash: \"0x06cf3f5a2322dac35e07a6064a5b8802f19fda8aa3f4726f0cb7bc05dea1bd78\",\n collection1155StartBlock: 11199527,\n popFactory: \"0x00b32c34b427d8f346b5843ada6a37bd3368d879fc752cd52b68a87287f60111\",\n popCollectionClassHash: \"0x077c421686f10851872561953ea16898d933364b7f8937a5d7e2b1ba0a36263f\",\n dropFactory: \"0x03587f42e29daee1b193f6cf83bf8627908ed6632d0d83fcb26225c50547d800\",\n dropCollectionClassHash: \"0x00092e72cdb63067521e803aaf7d4101c3e3ce026ae6bc045ec4228027e58282\",\n nftComments: \"0x02cdac70c94447189af0389dfea63f4d5e4154ea8a563de288a5ab1c39e37843\",\n creatorCoinFactory: \"0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c\",\n creatorCoinEkuboLauncher: \"0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4\",\n creatorCoinClassHash: \"0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6\",\n creatorCoinFactoryClassHash: \"0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55\",\n creatorCoinStartBlock: 10474544,\n ekuboCore: \"0x00000005dd3d2f4429af886cd1a3b08289dbcea99a294197e9eb43b0e0325b4b\",\n ipTicketsFactory: \"0x0767bf5b57e1f812463159b5ed683183e1b0c3f942b74871b5c6cd6a93c15e99\",\n ipTicketCollectionClassHash: \"0x0449e8eb7c117740d07cb8e0157d32c8ba3d19d1cfd2784ed5e139f5a1e04acc\",\n ipTicketsFactoryClassHash: \"0x04a739ac3a673ebd0db96bb24475600797c3ed34827e79517f9b2b1640276e6a\",\n ipTicketsStartBlock: 11933694,\n ipClubFactory: \"0x06a0b0be16d70c78f2e18119dbf90e5911cbfd5d8d484bc555dc61d96f56a2b9\",\n ipClubFactoryClassHash: \"0x05d9d431bd3532b1fa4d5bab572f49c5ad8034ee3cc83951aa41ae82c9cad266\",\n ipClubCollectionClassHash: \"0x05b8477c72e6bf0cf64967d71155021fd4d77d9a57e8805c6b40709121c002c5\",\n ipClubFactoryStartBlock: 11928775,\n\n ipSponsorship: \"0x03729ebe0fedf29ec97fca34db09174772af7f870af26a26e024a61040143e5c\",\n ipSponsorshipClassHash: \"0x0626daac2ed7e2bf630ef5b10104b3202db1559216c0c1a504c0e99be2fbfec3\",\n ipSponsorshipStartBlock: 11896456,\n mediaWalletClassHash: \"0x014b210c7d47392691144bafecdca3c6c7791cc295ea305988da0a724c05ac31\",\n },\n};\n\nexport function getCoordinates(chain: \"STARKNET\"): StarknetCoordinates;\nexport function getCoordinates(chain: \"ETHEREUM\" | \"BASE\"): EvmCoordinates;\nexport function getCoordinates(chain: \"SOLANA\"): SolanaCoordinates;\nexport function getCoordinates(chain: \"STELLAR\"): StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;\nexport function getCoordinates(\n chain: Chain,\n): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates {\n const c = COORDINATES[chain];\n if (!c) throw new Error(`No coordinates configured for chain \"${chain}\"`);\n return c;\n}\n\nexport const DEFAULT_CHAIN: Chain = \"STARKNET\";\n\nexport function getStarknetCoordinates(chain: Chain): StarknetCoordinates {\n if (chain !== \"STARKNET\") {\n throw new Error(`This module is Starknet-only (client chain: \"${chain}\")`);\n }\n return getCoordinates(\"STARKNET\");\n}\n","import {\n Contract,\n TransactionBuilder,\n nativeToScVal,\n scValToNative,\n type Transaction,\n rpc,\n} from \"@stellar/stellar-sdk\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport type { Chain } from \"../chains.js\";\nimport { getCoordinates, type StellarCoordinates } from \"../chains.js\";\nimport type {\n AdapterTxResult,\n OrderRef,\n RegisterOrderParams,\n VenueAdapter,\n} from \"../adapters/types.js\";\n\nexport interface StellarSigner {\n publicKey: string;\n signTransaction(xdr: string, networkPassphrase: string): Promise<string>;\n}\n\nexport interface StellarVenueOptions {\n server: rpc.Server;\n networkPassphrase: string;\n\n contractId?: string;\n baseFee?: string;\n}\n\nexport function stellarOrderRef(contractId: string, offerer: string, salt: bigint): OrderRef {\n const payload = new TextEncoder().encode(`${contractId}:${offerer}:${salt.toString()}`);\n return \"0x\" + Buffer.from(sha256(payload)).toString(\"hex\");\n}\n\nexport class StellarVenue implements VenueAdapter<StellarSigner> {\n readonly chain: Chain = \"STELLAR\";\n private readonly server: rpc.Server;\n private readonly passphrase: string;\n private readonly contract: Contract;\n private readonly contractId: string;\n private readonly baseFee: string;\n\n constructor(opts: StellarVenueOptions) {\n this.server = opts.server;\n this.passphrase = opts.networkPassphrase;\n const contractId = opts.contractId ?? maybeCoords()?.marketplace;\n if (!contractId) throw new Error(\"No Stellar venue contract configured\");\n this.contractId = contractId;\n this.contract = new Contract(contractId);\n this.baseFee = opts.baseFee ?? \"100\";\n }\n\n async registerOrder(\n signer: StellarSigner,\n params: RegisterOrderParams,\n ): Promise<AdapterTxResult & { orderRef: OrderRef }> {\n const salt = BigInt(params.salt);\n const counter = await this.getCounter(signer.publicKey);\n const op = this.contract.call(\n \"register_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n nativeToScVal([params.side === \"listing\" ? \"Listing\" : \"Bid\"], { type: \"symbol\" }),\n nativeToScVal(params.asset.contract, { type: \"address\" }),\n nativeToScVal(Number(params.asset.tokenId), { type: \"u32\" }),\n nativeToScVal(params.paymentToken, { type: \"address\" }),\n nativeToScVal(BigInt(params.amount), { type: \"i128\" }),\n nativeToScVal(params.royaltyMaxBps, { type: \"u32\" }),\n nativeToScVal(BigInt(params.startTime), { type: \"u64\" }),\n nativeToScVal(BigInt(params.endTime), { type: \"u64\" }),\n nativeToScVal(counter, { type: \"u64\" }),\n );\n const txHash = await this.invoke(signer, op);\n return { txHash, orderRef: stellarOrderRef(this.contractId, signer.publicKey, salt) };\n }\n\n async fulfillOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { offerer?: string; salt?: string },\n ): Promise<AdapterTxResult> {\n if (!opts?.offerer || opts.salt === undefined) {\n throw new Error(\"Stellar fulfillment needs { offerer, salt } (orders are storage-keyed)\");\n }\n const op = this.contract.call(\n \"fulfill_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(opts.offerer, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async cancelOrder(\n signer: StellarSigner,\n _orderRef: OrderRef,\n opts?: { salt?: string },\n ): Promise<AdapterTxResult> {\n if (opts?.salt === undefined) throw new Error(\"Stellar cancel needs { salt }\");\n const op = this.contract.call(\n \"cancel_order\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n nativeToScVal(BigInt(opts.salt), { type: \"u64\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async incrementCounter(signer: StellarSigner): Promise<AdapterTxResult> {\n const op = this.contract.call(\n \"increment_counter\",\n nativeToScVal(signer.publicKey, { type: \"address\" }),\n );\n return { txHash: await this.invoke(signer, op) };\n }\n\n async getOrderDetails(_orderRef: OrderRef): Promise<unknown> {\n throw new Error(\"Use getOrder(offerer, salt) — Stellar orders are storage-keyed\");\n }\n\n async getOrder(offerer: string, salt: bigint): Promise<unknown> {\n return this.view(\"get_order\", [\n nativeToScVal(offerer, { type: \"address\" }),\n nativeToScVal(salt, { type: \"u64\" }),\n ]);\n }\n\n async getCounter(address: string): Promise<bigint> {\n const value = await this.view(\"get_counter\", [nativeToScVal(address, { type: \"address\" })]);\n return BigInt((value as bigint | number | undefined) ?? 0);\n }\n\n private async view(method: string, args: Parameters<Contract[\"call\"]>[1][]): Promise<unknown> {\n const account = await this.server.getAccount(PLACEHOLDER_SOURCE);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(this.contract.call(method, ...args))\n .setTimeout(30)\n .build();\n const sim = await this.server.simulateTransaction(tx);\n if (rpc.Api.isSimulationSuccess(sim) && sim.result?.retval) {\n return scValToNative(sim.result.retval);\n }\n return undefined;\n }\n\n private async invoke(\n signer: StellarSigner,\n op: ReturnType<Contract[\"call\"]>,\n ): Promise<string> {\n const account = await this.server.getAccount(signer.publicKey);\n const tx = new TransactionBuilder(account, { fee: this.baseFee, networkPassphrase: this.passphrase })\n .addOperation(op)\n .setTimeout(60)\n .build();\n const prepared = await this.server.prepareTransaction(tx);\n const signedXdr = await signer.signTransaction(prepared.toXDR(), this.passphrase);\n const signed = TransactionBuilder.fromXDR(signedXdr, this.passphrase) as Transaction;\n const sent = await this.server.sendTransaction(signed);\n return sent.hash;\n }\n}\n\nconst PLACEHOLDER_SOURCE = \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n\nfunction maybeCoords(): StellarCoordinates | undefined {\n try {\n return getCoordinates(\"STELLAR\");\n } catch {\n return undefined;\n }\n}\n"]}
@@ -1,8 +1,5 @@
1
- /** Mirrors the backend Prisma `Chain` enum. */
2
1
  declare const CHAINS: readonly ["STARKNET", "ETHEREUM", "SOLANA", "BASE", "STELLAR", "BITCOIN"];
3
2
  type Chain = (typeof CHAINS)[number];
4
- /** Starknet coordinates of Medialane services + venues. All fields optional
5
- * because not every service exists on every chain. */
6
3
  interface StarknetCoordinates {
7
4
  rpcUrl: string;
8
5
  marketplace721?: `0x${string}`;
@@ -43,10 +40,6 @@ interface StarknetCoordinates {
43
40
  ipSponsorshipStartBlock?: number;
44
41
  mediaWalletClassHash?: `0x${string}`;
45
42
  }
46
- /** Coordinates per chain. Only STARKNET is populated today; adding a chain
47
- * means adding an entry here (litmus test, spec §7). */
48
- /** EVM coordinates — one shape for Ethereum and Base (same bytecode, two
49
- * chains). Populated at deploy time (federation Phase 4). */
50
43
  interface EvmCoordinates {
51
44
  rpcUrl: string;
52
45
  marketplace721?: `0x${string}`;
@@ -58,15 +51,12 @@ interface EvmCoordinates {
58
51
  mipEditionsRegistry?: `0x${string}`;
59
52
  mipEditionsRegistryStartBlock?: number;
60
53
  }
61
- /** Solana coordinates — base58 program ids. Populated at deploy time. */
62
54
  interface SolanaCoordinates {
63
55
  rpcUrl: string;
64
56
  mipCollectionsProgram?: string;
65
57
  marketplaceProgram?: string;
66
58
  startSlot?: number;
67
59
  }
68
- /** Stellar (Soroban) coordinates — strkey contract ids. Populated at deploy
69
- * time; the registry takes the collection WASM hash as a constructor arg. */
70
60
  interface StellarCoordinates {
71
61
  rpcUrl: string;
72
62
  mipRegistry?: string;
@@ -74,8 +64,6 @@ interface StellarCoordinates {
74
64
  collectionWasmHash?: string;
75
65
  startLedger?: number;
76
66
  }
77
- /** Per-chain coordinate shapes. Every chain is an equal entry — no chain is
78
- * privileged in core (chain-sovereignty I2/I4). */
79
67
  interface CoordinatesByChain {
80
68
  STARKNET?: StarknetCoordinates;
81
69
  ETHEREUM?: EvmCoordinates;
@@ -84,7 +72,6 @@ interface CoordinatesByChain {
84
72
  STELLAR?: StellarCoordinates;
85
73
  BITCOIN?: never;
86
74
  }
87
- /** @deprecated Renamed — use `StarknetCoordinates` (coordinates are per-chain-shaped). */
88
75
  type ChainCoordinates = StarknetCoordinates;
89
76
  declare function getCoordinates(chain: "STARKNET"): StarknetCoordinates;
90
77
  declare function getCoordinates(chain: "ETHEREUM" | "BASE"): EvmCoordinates;
@@ -92,28 +79,8 @@ declare function getCoordinates(chain: "SOLANA"): SolanaCoordinates;
92
79
  declare function getCoordinates(chain: "STELLAR"): StellarCoordinates;
93
80
  declare function getCoordinates(chain: Chain): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;
94
81
  declare const DEFAULT_CHAIN: Chain;
95
- /** Typed Starknet coordinates for Starknet-only modules; throws when the
96
- * client is scoped to another chain. */
97
82
  declare function getStarknetCoordinates(chain: Chain): StarknetCoordinates;
98
83
 
99
- /**
100
- * Chain-neutral adapter interfaces — the target surface every chain adapter
101
- * (`@medialane/sdk/starknet`, `/evm`, `/solana`, `/stellar`) implements, so
102
- * apps can transact against a chain-tagged asset without knowing the chain
103
- * (chain-sovereignty I2/I4; platform-federation spec §2.2). `Signer` is the
104
- * chain's `VenueSigner` capability port (see {@link VenueSigner}), not a raw
105
- * account — the app implements it over its own wallet layer.
106
- */
107
- /**
108
- * A chain-neutral capability port the app implements over its own wallet layer.
109
- * The adapter orchestrates with only these three capabilities — it never holds a
110
- * chain account or an execution provider. Confirmation lives behind `execute`
111
- * (the app awaits + revert-detects the receipt before resolving), so there is no
112
- * separate receipt method: a resolved `execute` means "on-chain, not reverted".
113
- * `TypedData`/`Call` are the chain's native shapes (Starknet: SNIP-12 typed data
114
- * and `{ contractAddress, entrypoint, calldata }`); the signature is `string[]`
115
- * (Starknet felt array).
116
- */
117
84
  interface VenueSigner<TypedData = unknown, Call = unknown> {
118
85
  readonly address: string;
119
86
  signTypedData(data: TypedData): Promise<string[]>;
@@ -121,32 +88,20 @@ interface VenueSigner<TypedData = unknown, Call = unknown> {
121
88
  txHash: string;
122
89
  }>;
123
90
  }
124
- /** A chain-tagged asset reference — the working asset identity `(chain, contract, tokenId)`. */
125
91
  interface AssetRef {
126
92
  chain: Chain;
127
93
  contract: string;
128
94
  tokenId: string;
129
95
  }
130
- /** Canonical order identity per chain (platform-federation spec §3.2b):
131
- * Starknet/EVM = the typed-data digest; Solana = the order PDA address;
132
- * Stellar = a stable digest of (contract, offerer, salt). */
133
96
  type OrderRef = string;
134
97
  interface RegisterOrderParams {
135
98
  asset: AssetRef;
136
- /** "listing" offers the asset; "bid" offers payment. */
137
99
  side: "listing" | "bid";
138
- /** Payment token in the chain's canonical address form; adapters define the
139
- * native-currency sentinel where the chain has one. */
140
100
  paymentToken: string;
141
- /** Per-unit price in base units, as a decimal string. For single-item (721)
142
- * orders this is the whole price; for multi-unit (1155) orders it is the price
143
- * per unit and the total is `amount × quantity`. */
144
101
  amount: string;
145
- /** Units offered — 1155 only; defaults to "1" (and is inert for 721). */
146
102
  quantity?: string;
147
103
  royaltyMaxBps: number;
148
104
  startTime: number;
149
- /** 0 = no expiry. */
150
105
  endTime: number;
151
106
  salt: string;
152
107
  }
@@ -1,8 +1,5 @@
1
- /** Mirrors the backend Prisma `Chain` enum. */
2
1
  declare const CHAINS: readonly ["STARKNET", "ETHEREUM", "SOLANA", "BASE", "STELLAR", "BITCOIN"];
3
2
  type Chain = (typeof CHAINS)[number];
4
- /** Starknet coordinates of Medialane services + venues. All fields optional
5
- * because not every service exists on every chain. */
6
3
  interface StarknetCoordinates {
7
4
  rpcUrl: string;
8
5
  marketplace721?: `0x${string}`;
@@ -43,10 +40,6 @@ interface StarknetCoordinates {
43
40
  ipSponsorshipStartBlock?: number;
44
41
  mediaWalletClassHash?: `0x${string}`;
45
42
  }
46
- /** Coordinates per chain. Only STARKNET is populated today; adding a chain
47
- * means adding an entry here (litmus test, spec §7). */
48
- /** EVM coordinates — one shape for Ethereum and Base (same bytecode, two
49
- * chains). Populated at deploy time (federation Phase 4). */
50
43
  interface EvmCoordinates {
51
44
  rpcUrl: string;
52
45
  marketplace721?: `0x${string}`;
@@ -58,15 +51,12 @@ interface EvmCoordinates {
58
51
  mipEditionsRegistry?: `0x${string}`;
59
52
  mipEditionsRegistryStartBlock?: number;
60
53
  }
61
- /** Solana coordinates — base58 program ids. Populated at deploy time. */
62
54
  interface SolanaCoordinates {
63
55
  rpcUrl: string;
64
56
  mipCollectionsProgram?: string;
65
57
  marketplaceProgram?: string;
66
58
  startSlot?: number;
67
59
  }
68
- /** Stellar (Soroban) coordinates — strkey contract ids. Populated at deploy
69
- * time; the registry takes the collection WASM hash as a constructor arg. */
70
60
  interface StellarCoordinates {
71
61
  rpcUrl: string;
72
62
  mipRegistry?: string;
@@ -74,8 +64,6 @@ interface StellarCoordinates {
74
64
  collectionWasmHash?: string;
75
65
  startLedger?: number;
76
66
  }
77
- /** Per-chain coordinate shapes. Every chain is an equal entry — no chain is
78
- * privileged in core (chain-sovereignty I2/I4). */
79
67
  interface CoordinatesByChain {
80
68
  STARKNET?: StarknetCoordinates;
81
69
  ETHEREUM?: EvmCoordinates;
@@ -84,7 +72,6 @@ interface CoordinatesByChain {
84
72
  STELLAR?: StellarCoordinates;
85
73
  BITCOIN?: never;
86
74
  }
87
- /** @deprecated Renamed — use `StarknetCoordinates` (coordinates are per-chain-shaped). */
88
75
  type ChainCoordinates = StarknetCoordinates;
89
76
  declare function getCoordinates(chain: "STARKNET"): StarknetCoordinates;
90
77
  declare function getCoordinates(chain: "ETHEREUM" | "BASE"): EvmCoordinates;
@@ -92,28 +79,8 @@ declare function getCoordinates(chain: "SOLANA"): SolanaCoordinates;
92
79
  declare function getCoordinates(chain: "STELLAR"): StellarCoordinates;
93
80
  declare function getCoordinates(chain: Chain): StarknetCoordinates | EvmCoordinates | SolanaCoordinates | StellarCoordinates;
94
81
  declare const DEFAULT_CHAIN: Chain;
95
- /** Typed Starknet coordinates for Starknet-only modules; throws when the
96
- * client is scoped to another chain. */
97
82
  declare function getStarknetCoordinates(chain: Chain): StarknetCoordinates;
98
83
 
99
- /**
100
- * Chain-neutral adapter interfaces — the target surface every chain adapter
101
- * (`@medialane/sdk/starknet`, `/evm`, `/solana`, `/stellar`) implements, so
102
- * apps can transact against a chain-tagged asset without knowing the chain
103
- * (chain-sovereignty I2/I4; platform-federation spec §2.2). `Signer` is the
104
- * chain's `VenueSigner` capability port (see {@link VenueSigner}), not a raw
105
- * account — the app implements it over its own wallet layer.
106
- */
107
- /**
108
- * A chain-neutral capability port the app implements over its own wallet layer.
109
- * The adapter orchestrates with only these three capabilities — it never holds a
110
- * chain account or an execution provider. Confirmation lives behind `execute`
111
- * (the app awaits + revert-detects the receipt before resolving), so there is no
112
- * separate receipt method: a resolved `execute` means "on-chain, not reverted".
113
- * `TypedData`/`Call` are the chain's native shapes (Starknet: SNIP-12 typed data
114
- * and `{ contractAddress, entrypoint, calldata }`); the signature is `string[]`
115
- * (Starknet felt array).
116
- */
117
84
  interface VenueSigner<TypedData = unknown, Call = unknown> {
118
85
  readonly address: string;
119
86
  signTypedData(data: TypedData): Promise<string[]>;
@@ -121,32 +88,20 @@ interface VenueSigner<TypedData = unknown, Call = unknown> {
121
88
  txHash: string;
122
89
  }>;
123
90
  }
124
- /** A chain-tagged asset reference — the working asset identity `(chain, contract, tokenId)`. */
125
91
  interface AssetRef {
126
92
  chain: Chain;
127
93
  contract: string;
128
94
  tokenId: string;
129
95
  }
130
- /** Canonical order identity per chain (platform-federation spec §3.2b):
131
- * Starknet/EVM = the typed-data digest; Solana = the order PDA address;
132
- * Stellar = a stable digest of (contract, offerer, salt). */
133
96
  type OrderRef = string;
134
97
  interface RegisterOrderParams {
135
98
  asset: AssetRef;
136
- /** "listing" offers the asset; "bid" offers payment. */
137
99
  side: "listing" | "bid";
138
- /** Payment token in the chain's canonical address form; adapters define the
139
- * native-currency sentinel where the chain has one. */
140
100
  paymentToken: string;
141
- /** Per-unit price in base units, as a decimal string. For single-item (721)
142
- * orders this is the whole price; for multi-unit (1155) orders it is the price
143
- * per unit and the total is `amount × quantity`. */
144
101
  amount: string;
145
- /** Units offered — 1155 only; defaults to "1" (and is inert for 721). */
146
102
  quantity?: string;
147
103
  royaltyMaxBps: number;
148
104
  startTime: number;
149
- /** 0 = no expiry. */
150
105
  endTime: number;
151
106
  salt: string;
152
107
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medialane/sdk",
3
- "version": "0.85.4",
3
+ "version": "0.85.6",
4
4
  "description": "Framework-agnostic TypeScript SDK for Medialane.io — the IP marketplace on Starknet",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",