@misofm/sdk 0.1.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/LICENSE +201 -0
- package/README.md +248 -0
- package/dist/catalog.d.ts +31 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +45 -0
- package/dist/catalog.js.map +1 -0
- package/dist/client.d.ts +134 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +113 -0
- package/dist/client.js.map +1 -0
- package/dist/contracts/miso_pressing/certificate.d.ts +78 -0
- package/dist/contracts/miso_pressing/certificate.d.ts.map +1 -0
- package/dist/contracts/miso_pressing/certificate.js +91 -0
- package/dist/contracts/miso_pressing/certificate.js.map +1 -0
- package/dist/contracts/miso_pressing/deps/std/type_name.d.ts +18 -0
- package/dist/contracts/miso_pressing/deps/std/type_name.d.ts.map +1 -0
- package/dist/contracts/miso_pressing/deps/std/type_name.js +20 -0
- package/dist/contracts/miso_pressing/deps/std/type_name.js.map +1 -0
- package/dist/contracts/miso_pressing/listing.d.ts +449 -0
- package/dist/contracts/miso_pressing/listing.d.ts.map +1 -0
- package/dist/contracts/miso_pressing/listing.js +416 -0
- package/dist/contracts/miso_pressing/listing.js.map +1 -0
- package/dist/contracts/miso_pressing/pressing.d.ts +365 -0
- package/dist/contracts/miso_pressing/pressing.d.ts.map +1 -0
- package/dist/contracts/miso_pressing/pressing.js +335 -0
- package/dist/contracts/miso_pressing/pressing.js.map +1 -0
- package/dist/contracts/utils/index.d.ts +31 -0
- package/dist/contracts/utils/index.d.ts.map +1 -0
- package/dist/contracts/utils/index.js +162 -0
- package/dist/contracts/utils/index.js.map +1 -0
- package/dist/execute.d.ts +17 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +21 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/pressing.d.ts +223 -0
- package/dist/pressing.d.ts.map +1 -0
- package/dist/pressing.js +280 -0
- package/dist/pressing.js.map +1 -0
- package/dist/queries.d.ts +2 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +8 -0
- package/dist/queries.js.map +1 -0
- package/dist/release-graph.d.ts +93 -0
- package/dist/release-graph.d.ts.map +1 -0
- package/dist/release-graph.js +143 -0
- package/dist/release-graph.js.map +1 -0
- package/dist/share-template.d.ts +3 -0
- package/dist/share-template.d.ts.map +1 -0
- package/dist/share-template.js +46 -0
- package/dist/share-template.js.map +1 -0
- package/dist/share.d.ts +66 -0
- package/dist/share.d.ts.map +1 -0
- package/dist/share.js +156 -0
- package/dist/share.js.map +1 -0
- package/dist/transactions.d.ts +177 -0
- package/dist/transactions.d.ts.map +1 -0
- package/dist/transactions.js +237 -0
- package/dist/transactions.js.map +1 -0
- package/package.json +99 -0
- package/src/catalog.ts +77 -0
- package/src/client.ts +249 -0
- package/src/contracts/miso_pressing/certificate.ts +129 -0
- package/src/contracts/miso_pressing/deps/std/type_name.ts +22 -0
- package/src/contracts/miso_pressing/listing.ts +621 -0
- package/src/contracts/miso_pressing/pressing.ts +454 -0
- package/src/contracts/utils/index.ts +229 -0
- package/src/execute.ts +34 -0
- package/src/index.ts +29 -0
- package/src/pressing.ts +497 -0
- package/src/queries.ts +9 -0
- package/src/release-graph.ts +279 -0
- package/src/share-template.ts +55 -0
- package/src/share.ts +258 -0
- package/src/transactions.ts +440 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type { ClientWithCoreApi } from "@mysten/sui/client";
|
|
2
|
+
import type { TxThunk } from "./transactions.ts";
|
|
3
|
+
/** Pricing policy: pay exactly `amount` (fixed) or at least `amount` (floor). */
|
|
4
|
+
export type ListingPrice = {
|
|
5
|
+
kind: "fixed" | "floor";
|
|
6
|
+
amount: bigint | number | string;
|
|
7
|
+
};
|
|
8
|
+
/** Whether a currency's listing takes payment. Below the pressing's own run state. */
|
|
9
|
+
export type ListingSwitch = "enabled" | "disabled";
|
|
10
|
+
/**
|
|
11
|
+
* The run's state, across every currency at once.
|
|
12
|
+
*
|
|
13
|
+
* `scheduled` is transitional: the first sale past `startTimestampMs` rewrites it to
|
|
14
|
+
* `active` inside `mint_next`, and the start time leaves the object with it. "When was
|
|
15
|
+
* this run scheduled for" is an event-log question once a run has sold anything.
|
|
16
|
+
*/
|
|
17
|
+
export type PressingRunState = {
|
|
18
|
+
kind: "scheduled";
|
|
19
|
+
startTimestampMs: bigint | number;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "active";
|
|
22
|
+
} | {
|
|
23
|
+
kind: "paused";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Where `releaseId`'s pressing lives — computable before it has been opened, and
|
|
27
|
+
* stable forever after, because a release can only ever claim one.
|
|
28
|
+
*
|
|
29
|
+
* `misoPressingPackageId` must be the package's ORIGINAL (first-published) id, since
|
|
30
|
+
* that is the address a Move type tag canonicalises to. `miso_pressing` is published
|
|
31
|
+
* immutable, so its original and current ids are the same.
|
|
32
|
+
*/
|
|
33
|
+
export declare function derivePressingId(releaseId: string, misoPressingPackageId: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Where `pressingId`'s admin cap was minted. The cap is transferable, so this is not
|
|
36
|
+
* where it lives — only where it came from.
|
|
37
|
+
*/
|
|
38
|
+
export declare function derivePressingAdminCapId(pressingId: string, misoPressingPackageId: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Where `currencyType`'s listing on `pressingId` lives. The key is phantom-typed, so
|
|
41
|
+
* the currency rides in the key's TYPE — one listing per (pressing, currency), ever.
|
|
42
|
+
*/
|
|
43
|
+
export declare function deriveListingId(pressingId: string, currencyType: string, misoPressingPackageId: string): string;
|
|
44
|
+
/** Both derived ids a sale needs, from the release id alone. */
|
|
45
|
+
export declare function deriveSaleIds(releaseId: string, currencyType: string, misoPressingPackageId: string): {
|
|
46
|
+
pressingId: string;
|
|
47
|
+
listingId: string;
|
|
48
|
+
};
|
|
49
|
+
/** One currency's offer, as `openPressing` takes it. */
|
|
50
|
+
export interface ListingTerms {
|
|
51
|
+
/** The `Currency` type argument, e.g. `0x2::sui::SUI`. */
|
|
52
|
+
currencyType: string;
|
|
53
|
+
price: ListingPrice;
|
|
54
|
+
/** Defaults to `"enabled"` — a listing opened disabled takes no payment yet. */
|
|
55
|
+
state?: ListingSwitch;
|
|
56
|
+
}
|
|
57
|
+
export interface OpenPressingParams {
|
|
58
|
+
/** The `Release` this run presses copies of — also the pressing's derivation parent. */
|
|
59
|
+
releaseId: string;
|
|
60
|
+
/** The release's `ReleaseAdminCap`. Needed ONLY to open the run; every later change
|
|
61
|
+
* authorizes against the `PressingAdminCap` this mints. */
|
|
62
|
+
releaseAdminCapId: string;
|
|
63
|
+
/** Currencies to open the run in. May be empty — listings can be added later with
|
|
64
|
+
* {@link openListing} — but a run with no listings sells nothing. */
|
|
65
|
+
listings: ListingTerms[];
|
|
66
|
+
/** Run state at open. Defaults to `active` (sell immediately); `scheduled` is the
|
|
67
|
+
* trustless drop moment, and needs no later transaction to open. */
|
|
68
|
+
state?: PressingRunState;
|
|
69
|
+
/** Where to send the minted `PressingAdminCap` (usually the artist or their vault). */
|
|
70
|
+
adminCapRecipient: string;
|
|
71
|
+
misoPressingPackageId: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Opens a release's pressing and lists it, in ONE transaction.
|
|
75
|
+
*
|
|
76
|
+
* `pressing::new` hands the `Pressing` back UNSHARED precisely so the listings can be
|
|
77
|
+
* claimed off it before `share` puts it on chain — that ordering is the whole reason
|
|
78
|
+
* this is a single builder and not three. A release can only ever open one pressing,
|
|
79
|
+
* so this call is once-per-release forever; changing price or currency afterwards is
|
|
80
|
+
* an edit ({@link setListingPrice}, {@link openListing}), never a re-open.
|
|
81
|
+
*/
|
|
82
|
+
export declare function openPressing(p: OpenPressingParams): TxThunk;
|
|
83
|
+
export interface OpenListingParams {
|
|
84
|
+
/** The release whose pressing gains a currency. The pressing id derives from it. */
|
|
85
|
+
releaseId: string;
|
|
86
|
+
pressingAdminCapId: string;
|
|
87
|
+
terms: ListingTerms;
|
|
88
|
+
misoPressingPackageId: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Adds a currency to a live pressing. Once per currency, ever — the slot is a derived
|
|
92
|
+
* claim, so a second call for the same currency aborts. Everything after is an edit.
|
|
93
|
+
*/
|
|
94
|
+
export declare function openListing(p: OpenListingParams): TxThunk;
|
|
95
|
+
export interface SetListingPriceParams {
|
|
96
|
+
releaseId: string;
|
|
97
|
+
currencyType: string;
|
|
98
|
+
pressingAdminCapId: string;
|
|
99
|
+
price: ListingPrice;
|
|
100
|
+
misoPressingPackageId: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Reprices one currency in place, keeping the listing's address and identity. Safe
|
|
104
|
+
* against in-flight buys by construction: a `fixed` buyer pays exactly, so a stale
|
|
105
|
+
* payment aborts against the new price, and a `floor` buyer never pays more than the
|
|
106
|
+
* balance they sent.
|
|
107
|
+
*/
|
|
108
|
+
export declare function setListingPrice(p: SetListingPriceParams): TxThunk;
|
|
109
|
+
export interface SetListingStateParams {
|
|
110
|
+
releaseId: string;
|
|
111
|
+
currencyType: string;
|
|
112
|
+
pressingAdminCapId: string;
|
|
113
|
+
state: ListingSwitch;
|
|
114
|
+
misoPressingPackageId: string;
|
|
115
|
+
}
|
|
116
|
+
/** Stops or resumes ONE currency. The run's other currencies carry on. */
|
|
117
|
+
export declare function setListingState(p: SetListingStateParams): TxThunk;
|
|
118
|
+
export interface SetPressingStateParams {
|
|
119
|
+
releaseId: string;
|
|
120
|
+
pressingAdminCapId: string;
|
|
121
|
+
state: PressingRunState;
|
|
122
|
+
misoPressingPackageId: string;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Moves the whole run between its three modes, over every currency at once. There is
|
|
126
|
+
* no "end" — ending a campaign is `{ kind: "paused" }`.
|
|
127
|
+
*/
|
|
128
|
+
export declare function setPressingState(p: SetPressingStateParams): TxThunk;
|
|
129
|
+
export interface BuyRecordParams {
|
|
130
|
+
/**
|
|
131
|
+
* The `Release` being bought a copy of. The pressing and this currency's listing
|
|
132
|
+
* BOTH derive from it (see {@link deriveSaleIds}), so there is nothing to look up
|
|
133
|
+
* and no way to pair a listing with the wrong pressing.
|
|
134
|
+
*/
|
|
135
|
+
releaseId: string;
|
|
136
|
+
/** Amount to pay in the currency's smallest unit (exact for `fixed`, ≥ for `floor`). */
|
|
137
|
+
amount: bigint | number | string;
|
|
138
|
+
/** The listing's `Currency` type, e.g. `0x2::sui::SUI`. */
|
|
139
|
+
currencyType: string;
|
|
140
|
+
/** The `miso_record` `Settings` shared object — it must authorize `miso_pressing`'s
|
|
141
|
+
* `MintWitness`, or the mint aborts. */
|
|
142
|
+
settingsId: string;
|
|
143
|
+
/** Where to send the pressed `Record` (usually the buyer). */
|
|
144
|
+
recipient: string;
|
|
145
|
+
misoPressingPackageId: string;
|
|
146
|
+
/**
|
|
147
|
+
* Set only when the buyer pays their OWN gas. Miso sponsors every purchase — the gas
|
|
148
|
+
* coin is the sponsor's, so drawing a payment out of it would spend the wrong
|
|
149
|
+
* wallet's money. Defaults to sponsored; bites only on SUI-priced listings.
|
|
150
|
+
*/
|
|
151
|
+
useGasCoin?: boolean;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Buys one record: sources the payment, calls `listing::buy`, and sends the pressed
|
|
155
|
+
* `Record` to `recipient`. `buy` RETURNS the record rather than transferring it, so
|
|
156
|
+
* the transfer here is not optional. The `Clock` is auto-supplied.
|
|
157
|
+
*
|
|
158
|
+
* ONE payment path, no coin picking. `tx.balance()` resolves the money at build time,
|
|
159
|
+
* preferring the buyer's ADDRESS BALANCE — where value is assumed to live — and falling
|
|
160
|
+
* back to coin objects inside the SDK if it must. Callers never enumerate coins: that
|
|
161
|
+
* road showed a buyer their $1000 and then refused to spend a cent of it, because the
|
|
162
|
+
* listing only saw `Coin<T>` objects and the money was in the address balance.
|
|
163
|
+
*
|
|
164
|
+
* `listing::buy` takes a bare `Balance<Currency>`, which is what makes that resolution
|
|
165
|
+
* cheap: when the address balance covers the price, `tx.balance()` emits a single
|
|
166
|
+
* `balance::redeem_funds` straight off the accumulator and no coin object is minted,
|
|
167
|
+
* touched, or destroyed — leaving the sale free of any owned-object contention. Only
|
|
168
|
+
* when it must fall back to coins does it merge, split, and `coin::into_balance`.
|
|
169
|
+
*/
|
|
170
|
+
export declare function buyRecord(p: BuyRecordParams): TxThunk;
|
|
171
|
+
/** A parsed `Pressing` — the run itself. */
|
|
172
|
+
export interface PressingView {
|
|
173
|
+
id: string;
|
|
174
|
+
releaseId: string;
|
|
175
|
+
state: PressingRunState & {
|
|
176
|
+
startTimestampMs?: bigint;
|
|
177
|
+
};
|
|
178
|
+
/** Records pressed so far; also the most recent number. Not a cap — nothing counts
|
|
179
|
+
* against it, and there is no sold-out state to reach. */
|
|
180
|
+
supply: bigint;
|
|
181
|
+
}
|
|
182
|
+
/** A parsed `Listing<Currency>` — one currency's offer on the run. */
|
|
183
|
+
export interface ListingView {
|
|
184
|
+
id: string;
|
|
185
|
+
releaseId: string;
|
|
186
|
+
pressingId: string;
|
|
187
|
+
price: {
|
|
188
|
+
kind: "fixed" | "floor";
|
|
189
|
+
amount: bigint;
|
|
190
|
+
};
|
|
191
|
+
state: ListingSwitch;
|
|
192
|
+
/** The `Currency` type, parsed from the object's type tag (`null` if unavailable). */
|
|
193
|
+
currencyType: string | null;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Fetches and parses a `Pressing`, or `null` if the release has never opened one.
|
|
197
|
+
*
|
|
198
|
+
* NOTE: like the old drop reader, this deliberately deviates from the core-getter
|
|
199
|
+
* convention in `./queries.ts` (throw on missing object). A pressing's address is
|
|
200
|
+
* computable for ANY release, so probing one that was never opened is a normal state,
|
|
201
|
+
* not a broken reference — absence is `null` and only transport failures throw.
|
|
202
|
+
*/
|
|
203
|
+
export declare function getPressing(client: ClientWithCoreApi, pressingId: string): Promise<PressingView | null>;
|
|
204
|
+
/** Fetches and parses a `Listing<Currency>`, or `null` if that currency is not listed. */
|
|
205
|
+
export declare function getListing(client: ClientWithCoreApi, listingId: string): Promise<ListingView | null>;
|
|
206
|
+
export interface GetSaleParams {
|
|
207
|
+
/** The release to resolve a sale for. */
|
|
208
|
+
releaseId: string;
|
|
209
|
+
/** The currency the buyer intends to pay in. */
|
|
210
|
+
currencyType: string;
|
|
211
|
+
misoPressingPackageId: string;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Resolves a release's run AND one currency's offer in a single round trip, by pure
|
|
215
|
+
* address math — no registry, no pointer, no event scan. `pressing: null` means the
|
|
216
|
+
* release has never opened one; `listing: null` means it does not sell in that
|
|
217
|
+
* currency (the other currencies, if any, are unaffected).
|
|
218
|
+
*/
|
|
219
|
+
export declare function getSale(client: ClientWithCoreApi, p: GetSaleParams): Promise<{
|
|
220
|
+
pressing: PressingView | null;
|
|
221
|
+
listing: ListingView | null;
|
|
222
|
+
}>;
|
|
223
|
+
//# sourceMappingURL=pressing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressing.d.ts","sourceRoot":"","sources":["../src/pressing.ts"],"names":[],"mappings":"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"}
|
package/dist/pressing.js
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// Copyright (c) Miso Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { deriveObjectID, normalizeStructTag } from "@mysten/sui/utils";
|
|
4
|
+
import { isNotFound } from "./queries.js";
|
|
5
|
+
import * as listing from "./contracts/miso_pressing/listing.js";
|
|
6
|
+
import * as pressing from "./contracts/miso_pressing/pressing.js";
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Address math
|
|
9
|
+
// ============================================================================
|
|
10
|
+
/** Key bytes for Move unit structs (single `0x00` for `dummy_field: bool = false`). */
|
|
11
|
+
const UNIT_STRUCT_KEY_BYTES = new Uint8Array([0x00]);
|
|
12
|
+
/**
|
|
13
|
+
* Where `releaseId`'s pressing lives — computable before it has been opened, and
|
|
14
|
+
* stable forever after, because a release can only ever claim one.
|
|
15
|
+
*
|
|
16
|
+
* `misoPressingPackageId` must be the package's ORIGINAL (first-published) id, since
|
|
17
|
+
* that is the address a Move type tag canonicalises to. `miso_pressing` is published
|
|
18
|
+
* immutable, so its original and current ids are the same.
|
|
19
|
+
*/
|
|
20
|
+
export function derivePressingId(releaseId, misoPressingPackageId) {
|
|
21
|
+
return deriveObjectID(releaseId, `${misoPressingPackageId}::pressing::PressingKey`, UNIT_STRUCT_KEY_BYTES);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Where `pressingId`'s admin cap was minted. The cap is transferable, so this is not
|
|
25
|
+
* where it lives — only where it came from.
|
|
26
|
+
*/
|
|
27
|
+
export function derivePressingAdminCapId(pressingId, misoPressingPackageId) {
|
|
28
|
+
return deriveObjectID(pressingId, `${misoPressingPackageId}::pressing::PressingAdminCapKey`, UNIT_STRUCT_KEY_BYTES);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Where `currencyType`'s listing on `pressingId` lives. The key is phantom-typed, so
|
|
32
|
+
* the currency rides in the key's TYPE — one listing per (pressing, currency), ever.
|
|
33
|
+
*/
|
|
34
|
+
export function deriveListingId(pressingId, currencyType, misoPressingPackageId) {
|
|
35
|
+
return deriveObjectID(pressingId, `${misoPressingPackageId}::listing::ListingKey<${normalizeStructTag(currencyType)}>`, UNIT_STRUCT_KEY_BYTES);
|
|
36
|
+
}
|
|
37
|
+
/** Both derived ids a sale needs, from the release id alone. */
|
|
38
|
+
export function deriveSaleIds(releaseId, currencyType, misoPressingPackageId) {
|
|
39
|
+
const pressingId = derivePressingId(releaseId, misoPressingPackageId);
|
|
40
|
+
return { pressingId, listingId: deriveListingId(pressingId, currencyType, misoPressingPackageId) };
|
|
41
|
+
}
|
|
42
|
+
function priceArg(tx, misoPressingPackageId, price) {
|
|
43
|
+
const make = price.kind === "fixed" ? listing.newFixedPrice : listing.newFloorPrice;
|
|
44
|
+
return tx.add(make({ package: misoPressingPackageId, arguments: [BigInt(price.amount)] }));
|
|
45
|
+
}
|
|
46
|
+
function switchArg(tx, misoPressingPackageId, state) {
|
|
47
|
+
const make = state === "enabled" ? listing.newEnabledState : listing.newDisabledState;
|
|
48
|
+
return tx.add(make({ package: misoPressingPackageId }));
|
|
49
|
+
}
|
|
50
|
+
function runStateArg(tx, misoPressingPackageId, state) {
|
|
51
|
+
const pkg = { package: misoPressingPackageId };
|
|
52
|
+
switch (state.kind) {
|
|
53
|
+
case "scheduled":
|
|
54
|
+
return tx.add(pressing.newScheduledState({ ...pkg, arguments: [BigInt(state.startTimestampMs)] }));
|
|
55
|
+
case "active":
|
|
56
|
+
return tx.add(pressing.newActiveState(pkg));
|
|
57
|
+
case "paused":
|
|
58
|
+
return tx.add(pressing.newPausedState(pkg));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Opens a release's pressing and lists it, in ONE transaction.
|
|
63
|
+
*
|
|
64
|
+
* `pressing::new` hands the `Pressing` back UNSHARED precisely so the listings can be
|
|
65
|
+
* claimed off it before `share` puts it on chain — that ordering is the whole reason
|
|
66
|
+
* this is a single builder and not three. A release can only ever open one pressing,
|
|
67
|
+
* so this call is once-per-release forever; changing price or currency afterwards is
|
|
68
|
+
* an edit ({@link setListingPrice}, {@link openListing}), never a re-open.
|
|
69
|
+
*/
|
|
70
|
+
export function openPressing(p) {
|
|
71
|
+
return (tx) => {
|
|
72
|
+
const pkg = p.misoPressingPackageId;
|
|
73
|
+
const [run, adminCap] = tx.add(pressing._new({
|
|
74
|
+
package: pkg,
|
|
75
|
+
arguments: [p.releaseId, p.releaseAdminCapId, runStateArg(tx, pkg, p.state ?? { kind: "active" })],
|
|
76
|
+
}));
|
|
77
|
+
for (const terms of p.listings) {
|
|
78
|
+
tx.add(listing._new({
|
|
79
|
+
package: pkg,
|
|
80
|
+
arguments: [
|
|
81
|
+
run,
|
|
82
|
+
adminCap,
|
|
83
|
+
priceArg(tx, pkg, terms.price),
|
|
84
|
+
switchArg(tx, pkg, terms.state ?? "enabled"),
|
|
85
|
+
],
|
|
86
|
+
typeArguments: [terms.currencyType],
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
tx.add(pressing.share({ package: pkg, arguments: [run] }));
|
|
90
|
+
tx.transferObjects([adminCap], p.adminCapRecipient);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Adds a currency to a live pressing. Once per currency, ever — the slot is a derived
|
|
95
|
+
* claim, so a second call for the same currency aborts. Everything after is an edit.
|
|
96
|
+
*/
|
|
97
|
+
export function openListing(p) {
|
|
98
|
+
return (tx) => {
|
|
99
|
+
const pkg = p.misoPressingPackageId;
|
|
100
|
+
tx.add(listing._new({
|
|
101
|
+
package: pkg,
|
|
102
|
+
arguments: [
|
|
103
|
+
derivePressingId(p.releaseId, pkg),
|
|
104
|
+
p.pressingAdminCapId,
|
|
105
|
+
priceArg(tx, pkg, p.terms.price),
|
|
106
|
+
switchArg(tx, pkg, p.terms.state ?? "enabled"),
|
|
107
|
+
],
|
|
108
|
+
typeArguments: [p.terms.currencyType],
|
|
109
|
+
}));
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Reprices one currency in place, keeping the listing's address and identity. Safe
|
|
114
|
+
* against in-flight buys by construction: a `fixed` buyer pays exactly, so a stale
|
|
115
|
+
* payment aborts against the new price, and a `floor` buyer never pays more than the
|
|
116
|
+
* balance they sent.
|
|
117
|
+
*/
|
|
118
|
+
export function setListingPrice(p) {
|
|
119
|
+
return (tx) => {
|
|
120
|
+
const pkg = p.misoPressingPackageId;
|
|
121
|
+
const { listingId } = deriveSaleIds(p.releaseId, p.currencyType, pkg);
|
|
122
|
+
tx.add(listing.setPrice({
|
|
123
|
+
package: pkg,
|
|
124
|
+
arguments: [listingId, p.pressingAdminCapId, priceArg(tx, pkg, p.price)],
|
|
125
|
+
typeArguments: [p.currencyType],
|
|
126
|
+
}));
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** Stops or resumes ONE currency. The run's other currencies carry on. */
|
|
130
|
+
export function setListingState(p) {
|
|
131
|
+
return (tx) => {
|
|
132
|
+
const pkg = p.misoPressingPackageId;
|
|
133
|
+
const { listingId } = deriveSaleIds(p.releaseId, p.currencyType, pkg);
|
|
134
|
+
tx.add(listing.setState({
|
|
135
|
+
package: pkg,
|
|
136
|
+
arguments: [listingId, p.pressingAdminCapId, switchArg(tx, pkg, p.state)],
|
|
137
|
+
typeArguments: [p.currencyType],
|
|
138
|
+
}));
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Moves the whole run between its three modes, over every currency at once. There is
|
|
143
|
+
* no "end" — ending a campaign is `{ kind: "paused" }`.
|
|
144
|
+
*/
|
|
145
|
+
export function setPressingState(p) {
|
|
146
|
+
return (tx) => {
|
|
147
|
+
const pkg = p.misoPressingPackageId;
|
|
148
|
+
tx.add(pressing.setState({
|
|
149
|
+
package: pkg,
|
|
150
|
+
arguments: [
|
|
151
|
+
derivePressingId(p.releaseId, pkg),
|
|
152
|
+
p.pressingAdminCapId,
|
|
153
|
+
runStateArg(tx, pkg, p.state),
|
|
154
|
+
],
|
|
155
|
+
}));
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Buys one record: sources the payment, calls `listing::buy`, and sends the pressed
|
|
160
|
+
* `Record` to `recipient`. `buy` RETURNS the record rather than transferring it, so
|
|
161
|
+
* the transfer here is not optional. The `Clock` is auto-supplied.
|
|
162
|
+
*
|
|
163
|
+
* ONE payment path, no coin picking. `tx.balance()` resolves the money at build time,
|
|
164
|
+
* preferring the buyer's ADDRESS BALANCE — where value is assumed to live — and falling
|
|
165
|
+
* back to coin objects inside the SDK if it must. Callers never enumerate coins: that
|
|
166
|
+
* road showed a buyer their $1000 and then refused to spend a cent of it, because the
|
|
167
|
+
* listing only saw `Coin<T>` objects and the money was in the address balance.
|
|
168
|
+
*
|
|
169
|
+
* `listing::buy` takes a bare `Balance<Currency>`, which is what makes that resolution
|
|
170
|
+
* cheap: when the address balance covers the price, `tx.balance()` emits a single
|
|
171
|
+
* `balance::redeem_funds` straight off the accumulator and no coin object is minted,
|
|
172
|
+
* touched, or destroyed — leaving the sale free of any owned-object contention. Only
|
|
173
|
+
* when it must fall back to coins does it merge, split, and `coin::into_balance`.
|
|
174
|
+
*/
|
|
175
|
+
export function buyRecord(p) {
|
|
176
|
+
return (tx) => {
|
|
177
|
+
const pkg = p.misoPressingPackageId;
|
|
178
|
+
const { pressingId, listingId } = deriveSaleIds(p.releaseId, p.currencyType, pkg);
|
|
179
|
+
const payment = tx.balance({
|
|
180
|
+
type: p.currencyType,
|
|
181
|
+
balance: BigInt(p.amount),
|
|
182
|
+
useGasCoin: p.useGasCoin ?? false,
|
|
183
|
+
});
|
|
184
|
+
const record = tx.add(listing.buy({
|
|
185
|
+
package: pkg,
|
|
186
|
+
arguments: [listingId, pressingId, payment, p.settingsId],
|
|
187
|
+
typeArguments: [p.currencyType],
|
|
188
|
+
}));
|
|
189
|
+
tx.transferObjects([record], p.recipient);
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/** Extracts `CURRENCY` from a `…::listing::Listing<CURRENCY>` type tag. */
|
|
193
|
+
function currencyFromType(type) {
|
|
194
|
+
if (!type)
|
|
195
|
+
return null;
|
|
196
|
+
const lt = type.indexOf("<");
|
|
197
|
+
return lt >= 0 && type.endsWith(">") ? type.slice(lt + 1, -1) : null;
|
|
198
|
+
}
|
|
199
|
+
/** Reads one object's BCS content + type, or `null` when it does not exist. */
|
|
200
|
+
async function fetch(client, objectId) {
|
|
201
|
+
try {
|
|
202
|
+
const { object } = await client.core.getObject({ objectId, include: { content: true } });
|
|
203
|
+
return object?.content ? { content: object.content, type: object.type } : null;
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
if (isNotFound(e))
|
|
207
|
+
return null;
|
|
208
|
+
throw e;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// The generated `MoveEnum` parsers emit `{ $kind, <Variant>: … }`; older ones omitted
|
|
212
|
+
// `$kind`. Both shapes are accepted so a codegen bump cannot silently mis-read a price.
|
|
213
|
+
function variant(v, ...names) {
|
|
214
|
+
for (const name of names)
|
|
215
|
+
if (v.$kind === name || v[name] != null)
|
|
216
|
+
return name;
|
|
217
|
+
return names[0];
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Fetches and parses a `Pressing`, or `null` if the release has never opened one.
|
|
221
|
+
*
|
|
222
|
+
* NOTE: like the old drop reader, this deliberately deviates from the core-getter
|
|
223
|
+
* convention in `./queries.ts` (throw on missing object). A pressing's address is
|
|
224
|
+
* computable for ANY release, so probing one that was never opened is a normal state,
|
|
225
|
+
* not a broken reference — absence is `null` and only transport failures throw.
|
|
226
|
+
*/
|
|
227
|
+
export async function getPressing(client, pressingId) {
|
|
228
|
+
const got = await fetch(client, pressingId);
|
|
229
|
+
if (!got)
|
|
230
|
+
return null;
|
|
231
|
+
const parsed = pressing.Pressing.parse(got.content);
|
|
232
|
+
const s = parsed.state;
|
|
233
|
+
const kind = variant(s, "Scheduled", "Active", "Paused");
|
|
234
|
+
return {
|
|
235
|
+
id: pressingId,
|
|
236
|
+
releaseId: parsed.release_id,
|
|
237
|
+
state: kind === "Scheduled"
|
|
238
|
+
? { kind: "scheduled", startTimestampMs: BigInt(s.Scheduled?.start_timestamp_ms ?? "0") }
|
|
239
|
+
: kind === "Paused"
|
|
240
|
+
? { kind: "paused" }
|
|
241
|
+
: { kind: "active" },
|
|
242
|
+
supply: BigInt(parsed.supply),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/** Fetches and parses a `Listing<Currency>`, or `null` if that currency is not listed. */
|
|
246
|
+
export async function getListing(client, listingId) {
|
|
247
|
+
const got = await fetch(client, listingId);
|
|
248
|
+
if (!got)
|
|
249
|
+
return null;
|
|
250
|
+
const parsed = listing.Listing.parse(got.content);
|
|
251
|
+
const p = parsed.price;
|
|
252
|
+
const priceKind = variant(p, "Fixed", "Floor");
|
|
253
|
+
const st = parsed.state;
|
|
254
|
+
return {
|
|
255
|
+
id: listingId,
|
|
256
|
+
releaseId: parsed.release_id,
|
|
257
|
+
pressingId: parsed.pressing_id,
|
|
258
|
+
price: {
|
|
259
|
+
kind: priceKind === "Fixed" ? "fixed" : "floor",
|
|
260
|
+
amount: BigInt((priceKind === "Fixed" ? p.Fixed?.amount : p.Floor?.amount) ?? "0"),
|
|
261
|
+
},
|
|
262
|
+
state: variant(st, "Enabled", "Disabled") === "Enabled" ? "enabled" : "disabled",
|
|
263
|
+
currencyType: currencyFromType(got.type),
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Resolves a release's run AND one currency's offer in a single round trip, by pure
|
|
268
|
+
* address math — no registry, no pointer, no event scan. `pressing: null` means the
|
|
269
|
+
* release has never opened one; `listing: null` means it does not sell in that
|
|
270
|
+
* currency (the other currencies, if any, are unaffected).
|
|
271
|
+
*/
|
|
272
|
+
export async function getSale(client, p) {
|
|
273
|
+
const { pressingId, listingId } = deriveSaleIds(p.releaseId, p.currencyType, p.misoPressingPackageId);
|
|
274
|
+
const [pressingView, listingView] = await Promise.all([
|
|
275
|
+
getPressing(client, pressingId),
|
|
276
|
+
getListing(client, listingId),
|
|
277
|
+
]);
|
|
278
|
+
return { pressing: pressingView, listing: listingView };
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=pressing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressing.js","sourceRoot":"","sources":["../src/pressing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/queries.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Copyright (c) Miso Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
// Shared read plumbing for the platform reads.
|
|
4
|
+
// `isNotFound` is the protocol SDK's — the not-found taxonomy is a property of
|
|
5
|
+
// the Sui transports, not of any one package's objects, so it is defined once in
|
|
6
|
+
// `@misonetwork/sdk` and re-exported here for the platform readers.
|
|
7
|
+
export { isNotFound } from "@misonetwork/sdk";
|
|
8
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sCAAsC;AAEtC,+CAA+C;AAE/C,+EAA+E;AAC/E,iFAAiF;AACjF,oEAAoE;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
2
|
+
import { type ShareRecipient } from "./transactions.ts";
|
|
3
|
+
/** A royalty pool to attach to a work, in the same PTB. */
|
|
4
|
+
export interface RoyaltyPoolNode {
|
|
5
|
+
currency: string;
|
|
6
|
+
/** `composition_royalty_pool` / `recording_royalty_pool` package id. */
|
|
7
|
+
extensionPackageId: string;
|
|
8
|
+
/** Base `royalty_pool` lib package id. */
|
|
9
|
+
royaltyPoolPackageId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CompositionNode {
|
|
12
|
+
shareType: string;
|
|
13
|
+
shareCurrencyId: string;
|
|
14
|
+
shareTreasuryCapId: string;
|
|
15
|
+
title: string;
|
|
16
|
+
royaltyRateBps: number;
|
|
17
|
+
shareRecipients: ShareRecipient[];
|
|
18
|
+
/** Recipient of the CompositionAdminCap (the owner). */
|
|
19
|
+
adminAddress: string;
|
|
20
|
+
royaltyPool?: RoyaltyPoolNode;
|
|
21
|
+
}
|
|
22
|
+
export interface RecordingNode {
|
|
23
|
+
shareType: string;
|
|
24
|
+
shareCurrencyId: string;
|
|
25
|
+
shareTreasuryCapId: string;
|
|
26
|
+
/** The parent composition's share type. */
|
|
27
|
+
compositionShareType: string;
|
|
28
|
+
/** Index into `compositions[]` if the parent is created in THIS PTB… */
|
|
29
|
+
parentCompositionIndex?: number;
|
|
30
|
+
/** …or the on-chain composition object id if the parent already exists. */
|
|
31
|
+
parentCompositionId?: string;
|
|
32
|
+
shareRecipients: ShareRecipient[];
|
|
33
|
+
adminAddress: string;
|
|
34
|
+
/**
|
|
35
|
+
* Slippage guard for `recording::new` against an EXISTING on-chain parent —
|
|
36
|
+
* pass the composition rate you observed (default: protocol max). Ignored for
|
|
37
|
+
* parents created in this PTB, whose exact known rate is pinned automatically.
|
|
38
|
+
*/
|
|
39
|
+
maxRoyaltyRateBps?: number;
|
|
40
|
+
royaltyPool?: RoyaltyPoolNode;
|
|
41
|
+
}
|
|
42
|
+
/** A track whose recording is created in THIS PTB (its deal is created inline). */
|
|
43
|
+
export interface FreshTrackNode {
|
|
44
|
+
/** Index into `recordings[]`. */
|
|
45
|
+
recordingIndex: number;
|
|
46
|
+
splitBps: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A track over an EXISTING recording, authorized by its admin cap (held by the
|
|
50
|
+
* sender) — the deal is created inline against the on-chain-derived release id.
|
|
51
|
+
* This is the only way to mix existing recordings with ones created in this PTB.
|
|
52
|
+
*/
|
|
53
|
+
export interface CapTrackNode {
|
|
54
|
+
recordingId: string;
|
|
55
|
+
recordingAdminCapId: string;
|
|
56
|
+
recordingShareType: string;
|
|
57
|
+
compositionShareType: string;
|
|
58
|
+
splitBps: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A track over an EXISTING recording, authorized by a pre-made `Deal` held by
|
|
62
|
+
* the sender. A deal pins the exact release id — a digest over ALL track
|
|
63
|
+
* recording ids — so deal-backed tracks cannot coexist with `FreshTrackNode`s
|
|
64
|
+
* (a fresh recording's id is unknowable when the deal was created).
|
|
65
|
+
* `splitBps` must be the value stored in the deal (read it from the object).
|
|
66
|
+
*/
|
|
67
|
+
export interface DealTrackNode {
|
|
68
|
+
dealId: string;
|
|
69
|
+
recordingId: string;
|
|
70
|
+
recordingShareType: string;
|
|
71
|
+
compositionShareType: string;
|
|
72
|
+
splitBps: number;
|
|
73
|
+
}
|
|
74
|
+
export type TrackNode = FreshTrackNode | CapTrackNode | DealTrackNode;
|
|
75
|
+
export interface ReleaseNode {
|
|
76
|
+
title: string;
|
|
77
|
+
/** u256 nonce as a decimal string (deterministic release id). */
|
|
78
|
+
nonce: string;
|
|
79
|
+
adminAddress: string;
|
|
80
|
+
releaseRegistryId: string;
|
|
81
|
+
/** The ordered tracklist. Display grouping (discs/sides) is extension data. */
|
|
82
|
+
tracks: TrackNode[];
|
|
83
|
+
}
|
|
84
|
+
export interface PublishReleaseGraphParams {
|
|
85
|
+
compositions: CompositionNode[];
|
|
86
|
+
recordings: RecordingNode[];
|
|
87
|
+
release?: ReleaseNode;
|
|
88
|
+
misoPackageId: string;
|
|
89
|
+
minatoPackageId: string;
|
|
90
|
+
}
|
|
91
|
+
/** Builds the entire graph in a single transaction (see file header for ordering). */
|
|
92
|
+
export declare function publishReleaseGraph(params: PublishReleaseGraphParams): (tx: Transaction) => void;
|
|
93
|
+
//# sourceMappingURL=release-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-graph.d.ts","sourceRoot":"","sources":["../src/release-graph.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,WAAW,EAAkC,MAAM,0BAA0B,CAAC;AAQvF,OAAO,EAAmC,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIzF,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,YAAY,GAAG,aAAa,CAAC;AAKtE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+EAA+E;IAC/E,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAQD,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAmIhG"}
|