@medialane/ui 0.183.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/drop/create/artwork-section.cjs +115 -0
- package/dist/components/drop/create/artwork-section.cjs.map +1 -0
- package/dist/components/drop/create/artwork-section.d.cts +23 -0
- package/dist/components/drop/create/artwork-section.d.ts +23 -0
- package/dist/components/drop/create/artwork-section.js +79 -0
- package/dist/components/drop/create/artwork-section.js.map +1 -0
- package/dist/components/drop/create/details-section.cjs +110 -0
- package/dist/components/drop/create/details-section.cjs.map +1 -0
- package/dist/components/drop/create/details-section.d.cts +11 -0
- package/dist/components/drop/create/details-section.d.ts +11 -0
- package/dist/components/drop/create/details-section.js +86 -0
- package/dist/components/drop/create/details-section.js.map +1 -0
- package/dist/components/drop/create/drop-create.cjs +112 -0
- package/dist/components/drop/create/drop-create.cjs.map +1 -0
- package/dist/components/drop/create/drop-create.d.cts +22 -0
- package/dist/components/drop/create/drop-create.d.ts +22 -0
- package/dist/components/drop/create/drop-create.js +77 -0
- package/dist/components/drop/create/drop-create.js.map +1 -0
- package/dist/components/drop/create/exclusive-fields.cjs +45 -0
- package/dist/components/drop/create/exclusive-fields.cjs.map +1 -0
- package/dist/components/drop/create/exclusive-fields.d.cts +14 -0
- package/dist/components/drop/create/exclusive-fields.d.ts +14 -0
- package/dist/components/drop/create/exclusive-fields.js +21 -0
- package/dist/components/drop/create/exclusive-fields.js.map +1 -0
- package/dist/components/drop/create/launch-dialog.cjs +193 -0
- package/dist/components/drop/create/launch-dialog.cjs.map +1 -0
- package/dist/components/drop/create/launch-dialog.d.cts +21 -0
- package/dist/components/drop/create/launch-dialog.d.ts +21 -0
- package/dist/components/drop/create/launch-dialog.js +168 -0
- package/dist/components/drop/create/launch-dialog.js.map +1 -0
- package/dist/components/drop/create/list-section.cjs +67 -0
- package/dist/components/drop/create/list-section.cjs.map +1 -0
- package/dist/components/drop/create/list-section.d.cts +11 -0
- package/dist/components/drop/create/list-section.d.ts +11 -0
- package/dist/components/drop/create/list-section.js +43 -0
- package/dist/components/drop/create/list-section.js.map +1 -0
- package/dist/components/drop/create/sale-section.cjs +78 -0
- package/dist/components/drop/create/sale-section.cjs.map +1 -0
- package/dist/components/drop/create/sale-section.d.cts +13 -0
- package/dist/components/drop/create/sale-section.d.ts +13 -0
- package/dist/components/drop/create/sale-section.js +54 -0
- package/dist/components/drop/create/sale-section.js.map +1 -0
- package/dist/components/drop/drop-card.cjs +81 -0
- package/dist/components/drop/drop-card.cjs.map +1 -0
- package/dist/components/drop/drop-card.d.cts +18 -0
- package/dist/components/drop/drop-card.d.ts +18 -0
- package/dist/components/drop/drop-card.js +45 -0
- package/dist/components/drop/drop-card.js.map +1 -0
- package/dist/components/drop/drop-listing.cjs +79 -0
- package/dist/components/drop/drop-listing.cjs.map +1 -0
- package/dist/components/drop/drop-listing.d.cts +10 -0
- package/dist/components/drop/drop-listing.d.ts +10 -0
- package/dist/components/drop/drop-listing.js +45 -0
- package/dist/components/drop/drop-listing.js.map +1 -0
- package/dist/components/drop/drop-token-link.cjs +63 -0
- package/dist/components/drop/drop-token-link.cjs.map +1 -0
- package/dist/components/drop/drop-token-link.d.cts +9 -0
- package/dist/components/drop/drop-token-link.d.ts +9 -0
- package/dist/components/drop/drop-token-link.js +29 -0
- package/dist/components/drop/drop-token-link.js.map +1 -0
- package/dist/components/drop/my-drops.cjs +71 -0
- package/dist/components/drop/my-drops.cjs.map +1 -0
- package/dist/components/drop/my-drops.d.cts +12 -0
- package/dist/components/drop/my-drops.d.ts +12 -0
- package/dist/components/drop/my-drops.js +37 -0
- package/dist/components/drop/my-drops.js.map +1 -0
- package/dist/components/drop/page/drop-action-box.cjs +63 -0
- package/dist/components/drop/page/drop-action-box.cjs.map +1 -0
- package/dist/components/drop/page/drop-action-box.d.cts +16 -0
- package/dist/components/drop/page/drop-action-box.d.ts +16 -0
- package/dist/components/drop/page/drop-action-box.js +39 -0
- package/dist/components/drop/page/drop-action-box.js.map +1 -0
- package/dist/components/drop/page/drop-activity.cjs +42 -0
- package/dist/components/drop/page/drop-activity.cjs.map +1 -0
- package/dist/components/drop/page/drop-activity.d.cts +8 -0
- package/dist/components/drop/page/drop-activity.d.ts +8 -0
- package/dist/components/drop/page/drop-activity.js +18 -0
- package/dist/components/drop/page/drop-activity.js.map +1 -0
- package/dist/components/drop/page/drop-manage.cjs +161 -0
- package/dist/components/drop/page/drop-manage.cjs.map +1 -0
- package/dist/components/drop/page/drop-manage.d.cts +24 -0
- package/dist/components/drop/page/drop-manage.d.ts +24 -0
- package/dist/components/drop/page/drop-manage.js +137 -0
- package/dist/components/drop/page/drop-manage.js.map +1 -0
- package/dist/components/drop/page/drop-mint-dialog.cjs +97 -0
- package/dist/components/drop/page/drop-mint-dialog.cjs.map +1 -0
- package/dist/components/drop/page/drop-mint-dialog.d.cts +15 -0
- package/dist/components/drop/page/drop-mint-dialog.d.ts +15 -0
- package/dist/components/drop/page/drop-mint-dialog.js +73 -0
- package/dist/components/drop/page/drop-mint-dialog.js.map +1 -0
- package/dist/components/drop/page/drop-page.cjs +165 -0
- package/dist/components/drop/page/drop-page.cjs.map +1 -0
- package/dist/components/drop/page/drop-page.d.cts +16 -0
- package/dist/components/drop/page/drop-page.d.ts +16 -0
- package/dist/components/drop/page/drop-page.js +131 -0
- package/dist/components/drop/page/drop-page.js.map +1 -0
- package/dist/components/drop-status-display.cjs +7 -38
- package/dist/components/drop-status-display.cjs.map +1 -1
- package/dist/components/drop-status-display.d.cts +6 -7
- package/dist/components/drop-status-display.d.ts +6 -7
- package/dist/components/drop-status-display.js +7 -37
- package/dist/components/drop-status-display.js.map +1 -1
- package/dist/components/image.d.cts +2 -0
- package/dist/components/image.d.ts +2 -0
- package/dist/index.cjs +46 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -11
- package/dist/index.d.ts +20 -11
- package/dist/index.js +31 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/drop/actions.cjs +76 -0
- package/dist/utils/drop/actions.cjs.map +1 -0
- package/dist/utils/drop/actions.d.cts +46 -0
- package/dist/utils/drop/actions.d.ts +46 -0
- package/dist/utils/drop/actions.js +49 -0
- package/dist/utils/drop/actions.js.map +1 -0
- package/dist/utils/drop/allowlist.cjs +50 -0
- package/dist/utils/drop/allowlist.cjs.map +1 -0
- package/dist/utils/drop/allowlist.d.cts +10 -0
- package/dist/utils/drop/allowlist.d.ts +10 -0
- package/dist/utils/drop/allowlist.js +26 -0
- package/dist/utils/drop/allowlist.js.map +1 -0
- package/dist/utils/drop/chain.cjs +37 -0
- package/dist/utils/drop/chain.cjs.map +1 -0
- package/dist/utils/drop/chain.d.cts +5 -0
- package/dist/utils/drop/chain.d.ts +5 -0
- package/dist/utils/drop/chain.js +13 -0
- package/dist/utils/drop/chain.js.map +1 -0
- package/dist/utils/drop/claim-proof.cjs +48 -0
- package/dist/utils/drop/claim-proof.cjs.map +1 -0
- package/dist/utils/drop/claim-proof.d.cts +9 -0
- package/dist/utils/drop/claim-proof.d.ts +9 -0
- package/dist/utils/drop/claim-proof.js +24 -0
- package/dist/utils/drop/claim-proof.js.map +1 -0
- package/dist/utils/drop/draft.cjs +87 -0
- package/dist/utils/drop/draft.cjs.map +1 -0
- package/dist/utils/drop/draft.d.cts +32 -0
- package/dist/utils/drop/draft.d.ts +32 -0
- package/dist/utils/drop/draft.js +61 -0
- package/dist/utils/drop/draft.js.map +1 -0
- package/dist/utils/drop/metadata.cjs +70 -0
- package/dist/utils/drop/metadata.cjs.map +1 -0
- package/dist/utils/drop/metadata.d.cts +34 -0
- package/dist/utils/drop/metadata.d.ts +34 -0
- package/dist/utils/drop/metadata.js +43 -0
- package/dist/utils/drop/metadata.js.map +1 -0
- package/dist/utils/{drop-status.cjs → drop/preview.cjs} +14 -14
- package/dist/utils/drop/preview.cjs.map +1 -0
- package/dist/utils/drop/preview.d.cts +4 -0
- package/dist/utils/drop/preview.d.ts +4 -0
- package/dist/utils/drop/preview.js +13 -0
- package/dist/utils/drop/preview.js.map +1 -0
- package/dist/utils/drop/receipt.cjs +39 -0
- package/dist/utils/drop/receipt.cjs.map +1 -0
- package/dist/utils/drop/receipt.d.cts +6 -0
- package/dist/utils/drop/receipt.d.ts +6 -0
- package/dist/utils/drop/receipt.js +15 -0
- package/dist/utils/drop/receipt.js.map +1 -0
- package/dist/utils/drop/sale.cjs +108 -0
- package/dist/utils/drop/sale.cjs.map +1 -0
- package/dist/utils/drop/sale.d.cts +52 -0
- package/dist/utils/drop/sale.d.ts +52 -0
- package/dist/utils/drop/sale.js +78 -0
- package/dist/utils/drop/sale.js.map +1 -0
- package/dist/utils/drop/types.cjs +17 -0
- package/dist/utils/drop/types.cjs.map +1 -0
- package/dist/utils/drop/types.d.cts +20 -0
- package/dist/utils/drop/types.d.ts +20 -0
- package/dist/utils/drop/types.js +1 -0
- package/dist/utils/drop/types.js.map +1 -0
- package/dist/utils/drop/upload.cjs +48 -0
- package/dist/utils/drop/upload.cjs.map +1 -0
- package/dist/utils/drop/upload.d.cts +11 -0
- package/dist/utils/drop/upload.d.ts +11 -0
- package/dist/utils/drop/upload.js +24 -0
- package/dist/utils/drop/upload.js.map +1 -0
- package/dist/utils/drop/use-now.cjs +38 -0
- package/dist/utils/drop/use-now.cjs.map +1 -0
- package/dist/utils/drop/use-now.d.cts +4 -0
- package/dist/utils/drop/use-now.d.ts +4 -0
- package/dist/utils/drop/use-now.js +14 -0
- package/dist/utils/drop/use-now.js.map +1 -0
- package/dist/utils/drop/view.cjs +89 -0
- package/dist/utils/drop/view.cjs.map +1 -0
- package/dist/utils/drop/view.d.cts +34 -0
- package/dist/utils/drop/view.d.ts +34 -0
- package/dist/utils/drop/view.js +64 -0
- package/dist/utils/drop/view.js.map +1 -0
- package/dist/utils/launchpad-defaults.cjs +0 -22
- package/dist/utils/launchpad-defaults.cjs.map +1 -1
- package/dist/utils/launchpad-defaults.d.cts +1 -7
- package/dist/utils/launchpad-defaults.d.ts +1 -7
- package/dist/utils/launchpad-defaults.js +0 -21
- package/dist/utils/launchpad-defaults.js.map +1 -1
- package/dist/utils/use-drops.cjs +41 -45
- package/dist/utils/use-drops.cjs.map +1 -1
- package/dist/utils/use-drops.d.cts +31 -23
- package/dist/utils/use-drops.d.ts +31 -23
- package/dist/utils/use-drops.js +35 -40
- package/dist/utils/use-drops.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/account/account.test.cjs +0 -86
- package/dist/components/account/account.test.cjs.map +0 -1
- package/dist/components/account/account.test.d.cts +0 -2
- package/dist/components/account/account.test.d.ts +0 -2
- package/dist/components/account/account.test.js +0 -85
- package/dist/components/account/account.test.js.map +0 -1
- package/dist/components/drop-create-form.cjs +0 -341
- package/dist/components/drop-create-form.cjs.map +0 -1
- package/dist/components/drop-create-form.d.cts +0 -39
- package/dist/components/drop-create-form.d.ts +0 -39
- package/dist/components/drop-create-form.js +0 -322
- package/dist/components/drop-create-form.js.map +0 -1
- package/dist/components/drop-preview-card.cjs +0 -106
- package/dist/components/drop-preview-card.cjs.map +0 -1
- package/dist/components/drop-preview-card.d.cts +0 -17
- package/dist/components/drop-preview-card.d.ts +0 -17
- package/dist/components/drop-preview-card.js +0 -82
- package/dist/components/drop-preview-card.js.map +0 -1
- package/dist/components/drop-preview-card.test.cjs +0 -84
- package/dist/components/drop-preview-card.test.cjs.map +0 -1
- package/dist/components/drop-preview-card.test.d.cts +0 -3
- package/dist/components/drop-preview-card.test.d.ts +0 -3
- package/dist/components/drop-preview-card.test.js +0 -83
- package/dist/components/drop-preview-card.test.js.map +0 -1
- package/dist/components/drop-status-display.test.cjs +0 -29
- package/dist/components/drop-status-display.test.cjs.map +0 -1
- package/dist/components/drop-status-display.test.d.cts +0 -2
- package/dist/components/drop-status-display.test.d.ts +0 -2
- package/dist/components/drop-status-display.test.js +0 -28
- package/dist/components/drop-status-display.test.js.map +0 -1
- package/dist/components/exclusive-content-section.cjs +0 -88
- package/dist/components/exclusive-content-section.cjs.map +0 -1
- package/dist/components/exclusive-content-section.d.cts +0 -10
- package/dist/components/exclusive-content-section.d.ts +0 -10
- package/dist/components/exclusive-content-section.js +0 -64
- package/dist/components/exclusive-content-section.js.map +0 -1
- package/dist/data/drop-create-schema.cjs +0 -92
- package/dist/data/drop-create-schema.cjs.map +0 -1
- package/dist/data/drop-create-schema.d.cts +0 -131
- package/dist/data/drop-create-schema.d.ts +0 -131
- package/dist/data/drop-create-schema.js +0 -58
- package/dist/data/drop-create-schema.js.map +0 -1
- package/dist/utils/drop-status.cjs.map +0 -1
- package/dist/utils/drop-status.d.cts +0 -12
- package/dist/utils/drop-status.d.ts +0 -12
- package/dist/utils/drop-status.js +0 -13
- package/dist/utils/drop-status.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { buildAssetMetadata } from "@medialane/sdk";
|
|
2
|
+
const MAX_DROP_SUPPLY = 2e3;
|
|
3
|
+
const MAX_DROP_METADATA_BYTES = 5 * 1024 * 1024;
|
|
4
|
+
function buildDropMetadataFiles(input) {
|
|
5
|
+
const edition = input.kind === "edition";
|
|
6
|
+
const count = edition ? input.supply : input.items.length;
|
|
7
|
+
const files = [];
|
|
8
|
+
for (let id = 1; id <= count; id++) {
|
|
9
|
+
const item = edition ? input.items[0] : input.items[id - 1];
|
|
10
|
+
files.push({
|
|
11
|
+
name: String(id),
|
|
12
|
+
content: buildAssetMetadata({
|
|
13
|
+
...input.license,
|
|
14
|
+
name: edition || !item.name ? `${input.name} #${id}` : item.name,
|
|
15
|
+
description: item.description || input.description,
|
|
16
|
+
imageUri: item.imageUri,
|
|
17
|
+
creator: input.creator,
|
|
18
|
+
edition: edition ? `${id}/${count}` : null,
|
|
19
|
+
registrationDate: input.registrationDate
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
files.push({
|
|
24
|
+
name: "collection.json",
|
|
25
|
+
content: {
|
|
26
|
+
name: input.name,
|
|
27
|
+
description: input.description,
|
|
28
|
+
image: input.coverUri ?? input.items[0]?.imageUri ?? null,
|
|
29
|
+
drop_kind: input.kind
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return files;
|
|
33
|
+
}
|
|
34
|
+
function metadataBytes(files) {
|
|
35
|
+
return files.reduce((n, f) => n + JSON.stringify(f.content).length, 0);
|
|
36
|
+
}
|
|
37
|
+
export {
|
|
38
|
+
MAX_DROP_METADATA_BYTES,
|
|
39
|
+
MAX_DROP_SUPPLY,
|
|
40
|
+
buildDropMetadataFiles,
|
|
41
|
+
metadataBytes
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/metadata.ts"],"sourcesContent":["import { buildAssetMetadata, type BuildAssetMetadataInput } from \"@medialane/sdk\";\n\n/** The metadata folder upload holds 2,001 files (tokens + collection.json). */\nexport const MAX_DROP_SUPPLY = 2000;\nexport const MAX_DROP_METADATA_BYTES = 5 * 1024 * 1024;\n\nexport type DropKind = \"edition\" | \"collection\";\n\nexport type DropLicense = Record<\n keyof Pick<BuildAssetMetadataInput, \"ipType\" | \"licenseType\" | \"commercialUse\" | \"derivatives\" | \"attribution\" | \"geographicScope\" | \"aiPolicy\" | \"royalty\">,\n string\n>;\n\nexport interface DropMetadataInput {\n kind: DropKind;\n name: string;\n description: string;\n creator: string;\n coverUri: string | null;\n license: DropLicense;\n registrationDate: string;\n /** Edition: the one artwork. Collection: one per token. */\n items: { name: string; description: string; imageUri: string }[];\n /** Edition copies; ignored for a collection. */\n supply: number;\n}\n\nexport interface DropMetadataFile {\n name: string;\n content: unknown;\n}\n\n/** Token files 1…N (token URI = base URI + id) and collection.json. */\nexport function buildDropMetadataFiles(input: DropMetadataInput): DropMetadataFile[] {\n const edition = input.kind === \"edition\";\n const count = edition ? input.supply : input.items.length;\n const files: DropMetadataFile[] = [];\n for (let id = 1; id <= count; id++) {\n const item = edition ? input.items[0]! : input.items[id - 1]!;\n files.push({\n name: String(id),\n content: buildAssetMetadata({\n ...input.license,\n name: edition || !item.name ? `${input.name} #${id}` : item.name,\n description: item.description || input.description,\n imageUri: item.imageUri,\n creator: input.creator,\n edition: edition ? `${id}/${count}` : null,\n registrationDate: input.registrationDate,\n }),\n });\n }\n files.push({\n name: \"collection.json\",\n content: {\n name: input.name,\n description: input.description,\n image: input.coverUri ?? input.items[0]?.imageUri ?? null,\n drop_kind: input.kind,\n },\n });\n return files;\n}\n\n/** Size as the upload route counts it. */\nexport function metadataBytes(files: DropMetadataFile[]): number {\n return files.reduce((n, f) => n + JSON.stringify(f.content).length, 0);\n}\n"],"mappings":"AAAA,SAAS,0BAAwD;AAG1D,MAAM,kBAAkB;AACxB,MAAM,0BAA0B,IAAI,OAAO;AA6B3C,SAAS,uBAAuB,OAA8C;AACnF,QAAM,UAAU,MAAM,SAAS;AAC/B,QAAM,QAAQ,UAAU,MAAM,SAAS,MAAM,MAAM;AACnD,QAAM,QAA4B,CAAC;AACnC,WAAS,KAAK,GAAG,MAAM,OAAO,MAAM;AAClC,UAAM,OAAO,UAAU,MAAM,MAAM,CAAC,IAAK,MAAM,MAAM,KAAK,CAAC;AAC3D,UAAM,KAAK;AAAA,MACT,MAAM,OAAO,EAAE;AAAA,MACf,SAAS,mBAAmB;AAAA,QAC1B,GAAG,MAAM;AAAA,QACT,MAAM,WAAW,CAAC,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK,EAAE,KAAK,KAAK;AAAA,QAC5D,aAAa,KAAK,eAAe,MAAM;AAAA,QACvC,UAAU,KAAK;AAAA,QACf,SAAS,MAAM;AAAA,QACf,SAAS,UAAU,GAAG,EAAE,IAAI,KAAK,KAAK;AAAA,QACtC,kBAAkB,MAAM;AAAA,MAC1B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,QAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM,YAAY,MAAM,MAAM,CAAC,GAAG,YAAY;AAAA,MACrD,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAGO,SAAS,cAAc,OAAmC;AAC/D,SAAO,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;AACvE;","names":[]}
|
|
@@ -16,22 +16,22 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
21
|
-
|
|
19
|
+
var preview_exports = {};
|
|
20
|
+
__export(preview_exports, {
|
|
21
|
+
previewUrl: () => previewUrl
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return
|
|
23
|
+
module.exports = __toCommonJS(preview_exports);
|
|
24
|
+
const urls = /* @__PURE__ */ new WeakMap();
|
|
25
|
+
function previewUrl(file) {
|
|
26
|
+
let url = urls.get(file);
|
|
27
|
+
if (!url) {
|
|
28
|
+
url = URL.createObjectURL(file);
|
|
29
|
+
urls.set(file, url);
|
|
30
|
+
}
|
|
31
|
+
return url;
|
|
32
32
|
}
|
|
33
33
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
34
|
0 && (module.exports = {
|
|
35
|
-
|
|
35
|
+
previewUrl
|
|
36
36
|
});
|
|
37
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=preview.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/preview.ts"],"sourcesContent":["const urls = new WeakMap<File, string>();\n\n/** One object URL per picked file, reused across renders. */\nexport function previewUrl(file: File): string {\n let url = urls.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n urls.set(file, url);\n }\n return url;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,OAAO,oBAAI,QAAsB;AAGhC,SAAS,WAAW,MAAoB;AAC7C,MAAI,MAAM,KAAK,IAAI,IAAI;AACvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,gBAAgB,IAAI;AAC9B,SAAK,IAAI,MAAM,GAAG;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const urls = /* @__PURE__ */ new WeakMap();
|
|
2
|
+
function previewUrl(file) {
|
|
3
|
+
let url = urls.get(file);
|
|
4
|
+
if (!url) {
|
|
5
|
+
url = URL.createObjectURL(file);
|
|
6
|
+
urls.set(file, url);
|
|
7
|
+
}
|
|
8
|
+
return url;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
previewUrl
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/preview.ts"],"sourcesContent":["const urls = new WeakMap<File, string>();\n\n/** One object URL per picked file, reused across renders. */\nexport function previewUrl(file: File): string {\n let url = urls.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n urls.set(file, url);\n }\n return url;\n}\n"],"mappings":"AAAA,MAAM,OAAO,oBAAI,QAAsB;AAGhC,SAAS,WAAW,MAAoB;AAC7C,MAAI,MAAM,KAAK,IAAI,IAAI;AACvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,gBAAgB,IAAI;AAC9B,SAAK,IAAI,MAAM,GAAG;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var receipt_exports = {};
|
|
20
|
+
__export(receipt_exports, {
|
|
21
|
+
claimedTokenIds: () => claimedTokenIds
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(receipt_exports);
|
|
24
|
+
var import_starknet = require("starknet");
|
|
25
|
+
const CLAIMED = BigInt(import_starknet.hash.getSelectorFromName("Claimed"));
|
|
26
|
+
const u256 = (low, high) => BigInt(low ?? "0x0") + (BigInt(high ?? "0x0") << 128n);
|
|
27
|
+
function claimedTokenIds(receipt, collection) {
|
|
28
|
+
const target = BigInt(collection);
|
|
29
|
+
const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);
|
|
30
|
+
if (!event?.data) return [];
|
|
31
|
+
const quantity = u256(event.data[0], event.data[1]);
|
|
32
|
+
const first = u256(event.data[2], event.data[3]);
|
|
33
|
+
return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());
|
|
34
|
+
}
|
|
35
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
36
|
+
0 && (module.exports = {
|
|
37
|
+
claimedTokenIds
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=receipt.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/receipt.ts"],"sourcesContent":["import { hash } from \"starknet\";\nimport type { ReceiptLike } from \"@medialane/sdk/starknet\";\n\nconst CLAIMED = BigInt(hash.getSelectorFromName(\"Claimed\"));\nconst u256 = (low?: string, high?: string) => BigInt(low ?? \"0x0\") + (BigInt(high ?? \"0x0\") << 128n);\n\n/** Token ids minted by a claim, read from the drop's Claimed event. */\nexport function claimedTokenIds(receipt: ReceiptLike, collection: string): string[] {\n const target = BigInt(collection);\n const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);\n if (!event?.data) return [];\n const quantity = u256(event.data[0], event.data[1]);\n const first = u256(event.data[2], event.data[3]);\n return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAGrB,MAAM,UAAU,OAAO,qBAAK,oBAAoB,SAAS,CAAC;AAC1D,MAAM,OAAO,CAAC,KAAc,SAAkB,OAAO,OAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK;AAGxF,SAAS,gBAAgB,SAAsB,YAA8B;AAClF,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,QAAQ,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,OAAO,EAAE,YAAY,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,OAAO;AAC7I,MAAI,CAAC,OAAO,KAAM,QAAO,CAAC;AAC1B,QAAM,WAAW,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAClD,QAAM,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAC/C,SAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,EAAE,GAAG,CAAC,GAAG,OAAO,QAAQ,OAAO,CAAC,GAAG,SAAS,CAAC;AAC1F;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { hash } from "starknet";
|
|
2
|
+
const CLAIMED = BigInt(hash.getSelectorFromName("Claimed"));
|
|
3
|
+
const u256 = (low, high) => BigInt(low ?? "0x0") + (BigInt(high ?? "0x0") << 128n);
|
|
4
|
+
function claimedTokenIds(receipt, collection) {
|
|
5
|
+
const target = BigInt(collection);
|
|
6
|
+
const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);
|
|
7
|
+
if (!event?.data) return [];
|
|
8
|
+
const quantity = u256(event.data[0], event.data[1]);
|
|
9
|
+
const first = u256(event.data[2], event.data[3]);
|
|
10
|
+
return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
claimedTokenIds
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/receipt.ts"],"sourcesContent":["import { hash } from \"starknet\";\nimport type { ReceiptLike } from \"@medialane/sdk/starknet\";\n\nconst CLAIMED = BigInt(hash.getSelectorFromName(\"Claimed\"));\nconst u256 = (low?: string, high?: string) => BigInt(low ?? \"0x0\") + (BigInt(high ?? \"0x0\") << 128n);\n\n/** Token ids minted by a claim, read from the drop's Claimed event. */\nexport function claimedTokenIds(receipt: ReceiptLike, collection: string): string[] {\n const target = BigInt(collection);\n const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);\n if (!event?.data) return [];\n const quantity = u256(event.data[0], event.data[1]);\n const first = u256(event.data[2], event.data[3]);\n return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());\n}\n"],"mappings":"AAAA,SAAS,YAAY;AAGrB,MAAM,UAAU,OAAO,KAAK,oBAAoB,SAAS,CAAC;AAC1D,MAAM,OAAO,CAAC,KAAc,SAAkB,OAAO,OAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK;AAGxF,SAAS,gBAAgB,SAAsB,YAA8B;AAClF,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,QAAQ,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,OAAO,EAAE,YAAY,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,OAAO;AAC7I,MAAI,CAAC,OAAO,KAAM,QAAO,CAAC;AAC1B,QAAM,WAAW,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAClD,QAAM,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAC/C,SAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,EAAE,GAAG,CAAC,GAAG,OAAO,QAAQ,OAAO,CAAC,GAAG,SAAS,CAAC;AAC1F;","names":[]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var sale_exports = {};
|
|
20
|
+
__export(sale_exports, {
|
|
21
|
+
EMPTY_SALE: () => EMPTY_SALE,
|
|
22
|
+
collectorPriceLine: () => collectorPriceLine,
|
|
23
|
+
priceLabel: () => priceLabel,
|
|
24
|
+
saleToken: () => saleToken,
|
|
25
|
+
supplyLabel: () => supplyLabel,
|
|
26
|
+
toDropTerms: () => toDropTerms,
|
|
27
|
+
validateSale: () => validateSale
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(sale_exports);
|
|
30
|
+
var import_sdk = require("@medialane/sdk");
|
|
31
|
+
var import_starknet = require("@medialane/sdk/starknet");
|
|
32
|
+
const EMPTY_SALE = {
|
|
33
|
+
paid: false,
|
|
34
|
+
price: "",
|
|
35
|
+
tokenSymbol: "USDC",
|
|
36
|
+
startNow: true,
|
|
37
|
+
start: "",
|
|
38
|
+
hasEnd: false,
|
|
39
|
+
end: "",
|
|
40
|
+
limitPerWallet: false,
|
|
41
|
+
perWallet: ""
|
|
42
|
+
};
|
|
43
|
+
function saleToken(symbol) {
|
|
44
|
+
return (0, import_sdk.getListableTokens)().find((t) => t.symbol === symbol) ?? null;
|
|
45
|
+
}
|
|
46
|
+
const toSeconds = (local) => {
|
|
47
|
+
if (!local) return null;
|
|
48
|
+
const ms = new Date(local).getTime();
|
|
49
|
+
return Number.isNaN(ms) ? null : Math.floor(ms / 1e3);
|
|
50
|
+
};
|
|
51
|
+
function validateSale(d, now) {
|
|
52
|
+
const errors = {};
|
|
53
|
+
if (d.paid) {
|
|
54
|
+
const token = saleToken(d.tokenSymbol);
|
|
55
|
+
const decimals = d.price.split(".")[1]?.length ?? 0;
|
|
56
|
+
if (!token) errors.price = "Choose a currency";
|
|
57
|
+
else if (!/^\d+(\.\d+)?$/.test(d.price)) errors.price = "Enter a price above 0";
|
|
58
|
+
else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;
|
|
59
|
+
else if (BigInt((0, import_sdk.parseAmount)(d.price, token.decimals)) === 0n) errors.price = "Enter a price above 0";
|
|
60
|
+
}
|
|
61
|
+
const start = d.startNow ? now : toSeconds(d.start);
|
|
62
|
+
if (!d.startNow && (start === null || start <= now)) errors.start = "Pick a start time in the future";
|
|
63
|
+
if (d.hasEnd) {
|
|
64
|
+
const end = toSeconds(d.end);
|
|
65
|
+
if (end === null || start !== null && end <= start) errors.end = "The sale must end after it starts";
|
|
66
|
+
}
|
|
67
|
+
if (d.limitPerWallet && !/^[1-9]\d*$/.test(d.perWallet)) errors.perWallet = "Enter 1 or more";
|
|
68
|
+
return errors;
|
|
69
|
+
}
|
|
70
|
+
function toDropTerms(d) {
|
|
71
|
+
const token = d.paid ? saleToken(d.tokenSymbol) : null;
|
|
72
|
+
return {
|
|
73
|
+
startTime: d.startNow ? 0 : toSeconds(d.start),
|
|
74
|
+
endTime: d.hasEnd ? toSeconds(d.end) : 0,
|
|
75
|
+
price: token ? (0, import_sdk.parseAmount)(d.price, token.decimals) : "0",
|
|
76
|
+
paymentToken: token ? token.address : "0x0",
|
|
77
|
+
maxPerWallet: d.limitPerWallet ? d.perWallet : "0"
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function collectorPriceLine(d, cfg) {
|
|
81
|
+
const token = d.paid ? saleToken(d.tokenSymbol) : null;
|
|
82
|
+
if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;
|
|
83
|
+
const price = BigInt((0, import_sdk.parseAmount)(d.price, token.decimals));
|
|
84
|
+
const { fee, total } = (0, import_starknet.dropMintCost)(price, 1, cfg);
|
|
85
|
+
const amount = (v) => `${(0, import_sdk.formatAmount)(v.toString(), token.decimals)} ${token.symbol}`;
|
|
86
|
+
if (fee === 0n) return `Collectors pay ${amount(price)}.`;
|
|
87
|
+
return `Collectors pay ${amount(total)} (incl. ${(0, import_starknet.feeBps)("launchpad", cfg) / 100}% platform fee). You receive ${amount(price)}.`;
|
|
88
|
+
}
|
|
89
|
+
function priceLabel(price, paymentToken) {
|
|
90
|
+
if (BigInt(price) === 0n) return "Free";
|
|
91
|
+
const token = (0, import_sdk.getTokenByAddress)(paymentToken);
|
|
92
|
+
return token ? `${(0, import_sdk.formatAmount)(price, token.decimals)} ${token.symbol}` : "Paid";
|
|
93
|
+
}
|
|
94
|
+
const count = (v) => Number(v).toLocaleString("en-US");
|
|
95
|
+
function supplyLabel(minted, maxSupply) {
|
|
96
|
+
return maxSupply === "0" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;
|
|
97
|
+
}
|
|
98
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
99
|
+
0 && (module.exports = {
|
|
100
|
+
EMPTY_SALE,
|
|
101
|
+
collectorPriceLine,
|
|
102
|
+
priceLabel,
|
|
103
|
+
saleToken,
|
|
104
|
+
supplyLabel,
|
|
105
|
+
toDropTerms,
|
|
106
|
+
validateSale
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=sale.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/sale.ts"],"sourcesContent":["import { formatAmount, getListableTokens, getTokenByAddress, parseAmount, type DropTermsBody, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, feeBps } from \"@medialane/sdk/starknet\";\n\nexport interface SaleDraft {\n paid: boolean;\n /** In the token's normal units, e.g. \"5.5\". */\n price: string;\n tokenSymbol: string;\n startNow: boolean;\n /** `datetime-local` value in the creator's time zone. */\n start: string;\n hasEnd: boolean;\n end: string;\n limitPerWallet: boolean;\n perWallet: string;\n}\n\nexport const EMPTY_SALE: SaleDraft = {\n paid: false, price: \"\", tokenSymbol: \"USDC\",\n startNow: true, start: \"\", hasEnd: false, end: \"\",\n limitPerWallet: false, perWallet: \"\",\n};\n\nexport type SaleErrors = Partial<Record<\"price\" | \"start\" | \"end\" | \"perWallet\", string>>;\n\nexport function saleToken(symbol: string) {\n return getListableTokens().find((t) => t.symbol === symbol) ?? null;\n}\n\nconst toSeconds = (local: string): number | null => {\n if (!local) return null;\n const ms = new Date(local).getTime();\n return Number.isNaN(ms) ? null : Math.floor(ms / 1000);\n};\n\nexport function validateSale(d: SaleDraft, now: number): SaleErrors {\n const errors: SaleErrors = {};\n if (d.paid) {\n const token = saleToken(d.tokenSymbol);\n const decimals = d.price.split(\".\")[1]?.length ?? 0;\n if (!token) errors.price = \"Choose a currency\";\n else if (!/^\\d+(\\.\\d+)?$/.test(d.price)) errors.price = \"Enter a price above 0\";\n else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;\n else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = \"Enter a price above 0\";\n }\n const start = d.startNow ? now : toSeconds(d.start);\n if (!d.startNow && (start === null || start <= now)) errors.start = \"Pick a start time in the future\";\n if (d.hasEnd) {\n const end = toSeconds(d.end);\n if (end === null || (start !== null && end <= start)) errors.end = \"The sale must end after it starts\";\n }\n if (d.limitPerWallet && !/^[1-9]\\d*$/.test(d.perWallet)) errors.perWallet = \"Enter 1 or more\";\n return errors;\n}\n\n/** Terms for the create intent; call only after `validateSale` returns no errors. */\nexport function toDropTerms(d: SaleDraft): DropTermsBody {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n return {\n startTime: d.startNow ? 0 : toSeconds(d.start)!,\n endTime: d.hasEnd ? toSeconds(d.end)! : 0,\n price: token ? parseAmount(d.price, token.decimals) : \"0\",\n paymentToken: token ? token.address : \"0x0\",\n maxPerWallet: d.limitPerWallet ? d.perWallet : \"0\",\n };\n}\n\n/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */\nexport function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;\n const price = BigInt(parseAmount(d.price, token.decimals));\n const { fee, total } = dropMintCost(price, 1, cfg);\n const amount = (v: bigint) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;\n if (fee === 0n) return `Collectors pay ${amount(price)}.`;\n return `Collectors pay ${amount(total)} (incl. ${feeBps(\"launchpad\", cfg) / 100}% platform fee). You receive ${amount(price)}.`;\n}\n\nexport function priceLabel(price: string, paymentToken: string): string {\n if (BigInt(price) === 0n) return \"Free\";\n const token = getTokenByAddress(paymentToken);\n return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : \"Paid\";\n}\n\nconst count = (v: string) => Number(v).toLocaleString(\"en-US\");\n\nexport function supplyLabel(minted: string, maxSupply: string): string {\n return maxSupply === \"0\" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ResolvedFeeConfig, DropTermsBody } from '@medialane/sdk';
|
|
2
|
+
|
|
3
|
+
interface SaleDraft {
|
|
4
|
+
paid: boolean;
|
|
5
|
+
/** In the token's normal units, e.g. "5.5". */
|
|
6
|
+
price: string;
|
|
7
|
+
tokenSymbol: string;
|
|
8
|
+
startNow: boolean;
|
|
9
|
+
/** `datetime-local` value in the creator's time zone. */
|
|
10
|
+
start: string;
|
|
11
|
+
hasEnd: boolean;
|
|
12
|
+
end: string;
|
|
13
|
+
limitPerWallet: boolean;
|
|
14
|
+
perWallet: string;
|
|
15
|
+
}
|
|
16
|
+
declare const EMPTY_SALE: SaleDraft;
|
|
17
|
+
type SaleErrors = Partial<Record<"price" | "start" | "end" | "perWallet", string>>;
|
|
18
|
+
declare function saleToken(symbol: string): {
|
|
19
|
+
readonly symbol: "USDC";
|
|
20
|
+
readonly address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb";
|
|
21
|
+
readonly decimals: 6;
|
|
22
|
+
readonly listable: true;
|
|
23
|
+
} | {
|
|
24
|
+
readonly symbol: "USDT";
|
|
25
|
+
readonly address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8";
|
|
26
|
+
readonly decimals: 6;
|
|
27
|
+
readonly listable: true;
|
|
28
|
+
} | {
|
|
29
|
+
readonly symbol: "ETH";
|
|
30
|
+
readonly address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
|
|
31
|
+
readonly decimals: 18;
|
|
32
|
+
readonly listable: true;
|
|
33
|
+
} | {
|
|
34
|
+
readonly symbol: "STRK";
|
|
35
|
+
readonly address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
|
|
36
|
+
readonly decimals: 18;
|
|
37
|
+
readonly listable: true;
|
|
38
|
+
} | {
|
|
39
|
+
readonly symbol: "WBTC";
|
|
40
|
+
readonly address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
|
|
41
|
+
readonly decimals: 8;
|
|
42
|
+
readonly listable: true;
|
|
43
|
+
} | null;
|
|
44
|
+
declare function validateSale(d: SaleDraft, now: number): SaleErrors;
|
|
45
|
+
/** Terms for the create intent; call only after `validateSale` returns no errors. */
|
|
46
|
+
declare function toDropTerms(d: SaleDraft): DropTermsBody;
|
|
47
|
+
/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */
|
|
48
|
+
declare function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null;
|
|
49
|
+
declare function priceLabel(price: string, paymentToken: string): string;
|
|
50
|
+
declare function supplyLabel(minted: string, maxSupply: string): string;
|
|
51
|
+
|
|
52
|
+
export { EMPTY_SALE, type SaleDraft, type SaleErrors, collectorPriceLine, priceLabel, saleToken, supplyLabel, toDropTerms, validateSale };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ResolvedFeeConfig, DropTermsBody } from '@medialane/sdk';
|
|
2
|
+
|
|
3
|
+
interface SaleDraft {
|
|
4
|
+
paid: boolean;
|
|
5
|
+
/** In the token's normal units, e.g. "5.5". */
|
|
6
|
+
price: string;
|
|
7
|
+
tokenSymbol: string;
|
|
8
|
+
startNow: boolean;
|
|
9
|
+
/** `datetime-local` value in the creator's time zone. */
|
|
10
|
+
start: string;
|
|
11
|
+
hasEnd: boolean;
|
|
12
|
+
end: string;
|
|
13
|
+
limitPerWallet: boolean;
|
|
14
|
+
perWallet: string;
|
|
15
|
+
}
|
|
16
|
+
declare const EMPTY_SALE: SaleDraft;
|
|
17
|
+
type SaleErrors = Partial<Record<"price" | "start" | "end" | "perWallet", string>>;
|
|
18
|
+
declare function saleToken(symbol: string): {
|
|
19
|
+
readonly symbol: "USDC";
|
|
20
|
+
readonly address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb";
|
|
21
|
+
readonly decimals: 6;
|
|
22
|
+
readonly listable: true;
|
|
23
|
+
} | {
|
|
24
|
+
readonly symbol: "USDT";
|
|
25
|
+
readonly address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8";
|
|
26
|
+
readonly decimals: 6;
|
|
27
|
+
readonly listable: true;
|
|
28
|
+
} | {
|
|
29
|
+
readonly symbol: "ETH";
|
|
30
|
+
readonly address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
|
|
31
|
+
readonly decimals: 18;
|
|
32
|
+
readonly listable: true;
|
|
33
|
+
} | {
|
|
34
|
+
readonly symbol: "STRK";
|
|
35
|
+
readonly address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
|
|
36
|
+
readonly decimals: 18;
|
|
37
|
+
readonly listable: true;
|
|
38
|
+
} | {
|
|
39
|
+
readonly symbol: "WBTC";
|
|
40
|
+
readonly address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
|
|
41
|
+
readonly decimals: 8;
|
|
42
|
+
readonly listable: true;
|
|
43
|
+
} | null;
|
|
44
|
+
declare function validateSale(d: SaleDraft, now: number): SaleErrors;
|
|
45
|
+
/** Terms for the create intent; call only after `validateSale` returns no errors. */
|
|
46
|
+
declare function toDropTerms(d: SaleDraft): DropTermsBody;
|
|
47
|
+
/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */
|
|
48
|
+
declare function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null;
|
|
49
|
+
declare function priceLabel(price: string, paymentToken: string): string;
|
|
50
|
+
declare function supplyLabel(minted: string, maxSupply: string): string;
|
|
51
|
+
|
|
52
|
+
export { EMPTY_SALE, type SaleDraft, type SaleErrors, collectorPriceLine, priceLabel, saleToken, supplyLabel, toDropTerms, validateSale };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { formatAmount, getListableTokens, getTokenByAddress, parseAmount } from "@medialane/sdk";
|
|
2
|
+
import { dropMintCost, feeBps } from "@medialane/sdk/starknet";
|
|
3
|
+
const EMPTY_SALE = {
|
|
4
|
+
paid: false,
|
|
5
|
+
price: "",
|
|
6
|
+
tokenSymbol: "USDC",
|
|
7
|
+
startNow: true,
|
|
8
|
+
start: "",
|
|
9
|
+
hasEnd: false,
|
|
10
|
+
end: "",
|
|
11
|
+
limitPerWallet: false,
|
|
12
|
+
perWallet: ""
|
|
13
|
+
};
|
|
14
|
+
function saleToken(symbol) {
|
|
15
|
+
return getListableTokens().find((t) => t.symbol === symbol) ?? null;
|
|
16
|
+
}
|
|
17
|
+
const toSeconds = (local) => {
|
|
18
|
+
if (!local) return null;
|
|
19
|
+
const ms = new Date(local).getTime();
|
|
20
|
+
return Number.isNaN(ms) ? null : Math.floor(ms / 1e3);
|
|
21
|
+
};
|
|
22
|
+
function validateSale(d, now) {
|
|
23
|
+
const errors = {};
|
|
24
|
+
if (d.paid) {
|
|
25
|
+
const token = saleToken(d.tokenSymbol);
|
|
26
|
+
const decimals = d.price.split(".")[1]?.length ?? 0;
|
|
27
|
+
if (!token) errors.price = "Choose a currency";
|
|
28
|
+
else if (!/^\d+(\.\d+)?$/.test(d.price)) errors.price = "Enter a price above 0";
|
|
29
|
+
else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;
|
|
30
|
+
else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = "Enter a price above 0";
|
|
31
|
+
}
|
|
32
|
+
const start = d.startNow ? now : toSeconds(d.start);
|
|
33
|
+
if (!d.startNow && (start === null || start <= now)) errors.start = "Pick a start time in the future";
|
|
34
|
+
if (d.hasEnd) {
|
|
35
|
+
const end = toSeconds(d.end);
|
|
36
|
+
if (end === null || start !== null && end <= start) errors.end = "The sale must end after it starts";
|
|
37
|
+
}
|
|
38
|
+
if (d.limitPerWallet && !/^[1-9]\d*$/.test(d.perWallet)) errors.perWallet = "Enter 1 or more";
|
|
39
|
+
return errors;
|
|
40
|
+
}
|
|
41
|
+
function toDropTerms(d) {
|
|
42
|
+
const token = d.paid ? saleToken(d.tokenSymbol) : null;
|
|
43
|
+
return {
|
|
44
|
+
startTime: d.startNow ? 0 : toSeconds(d.start),
|
|
45
|
+
endTime: d.hasEnd ? toSeconds(d.end) : 0,
|
|
46
|
+
price: token ? parseAmount(d.price, token.decimals) : "0",
|
|
47
|
+
paymentToken: token ? token.address : "0x0",
|
|
48
|
+
maxPerWallet: d.limitPerWallet ? d.perWallet : "0"
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function collectorPriceLine(d, cfg) {
|
|
52
|
+
const token = d.paid ? saleToken(d.tokenSymbol) : null;
|
|
53
|
+
if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;
|
|
54
|
+
const price = BigInt(parseAmount(d.price, token.decimals));
|
|
55
|
+
const { fee, total } = dropMintCost(price, 1, cfg);
|
|
56
|
+
const amount = (v) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;
|
|
57
|
+
if (fee === 0n) return `Collectors pay ${amount(price)}.`;
|
|
58
|
+
return `Collectors pay ${amount(total)} (incl. ${feeBps("launchpad", cfg) / 100}% platform fee). You receive ${amount(price)}.`;
|
|
59
|
+
}
|
|
60
|
+
function priceLabel(price, paymentToken) {
|
|
61
|
+
if (BigInt(price) === 0n) return "Free";
|
|
62
|
+
const token = getTokenByAddress(paymentToken);
|
|
63
|
+
return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : "Paid";
|
|
64
|
+
}
|
|
65
|
+
const count = (v) => Number(v).toLocaleString("en-US");
|
|
66
|
+
function supplyLabel(minted, maxSupply) {
|
|
67
|
+
return maxSupply === "0" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
EMPTY_SALE,
|
|
71
|
+
collectorPriceLine,
|
|
72
|
+
priceLabel,
|
|
73
|
+
saleToken,
|
|
74
|
+
supplyLabel,
|
|
75
|
+
toDropTerms,
|
|
76
|
+
validateSale
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=sale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/sale.ts"],"sourcesContent":["import { formatAmount, getListableTokens, getTokenByAddress, parseAmount, type DropTermsBody, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, feeBps } from \"@medialane/sdk/starknet\";\n\nexport interface SaleDraft {\n paid: boolean;\n /** In the token's normal units, e.g. \"5.5\". */\n price: string;\n tokenSymbol: string;\n startNow: boolean;\n /** `datetime-local` value in the creator's time zone. */\n start: string;\n hasEnd: boolean;\n end: string;\n limitPerWallet: boolean;\n perWallet: string;\n}\n\nexport const EMPTY_SALE: SaleDraft = {\n paid: false, price: \"\", tokenSymbol: \"USDC\",\n startNow: true, start: \"\", hasEnd: false, end: \"\",\n limitPerWallet: false, perWallet: \"\",\n};\n\nexport type SaleErrors = Partial<Record<\"price\" | \"start\" | \"end\" | \"perWallet\", string>>;\n\nexport function saleToken(symbol: string) {\n return getListableTokens().find((t) => t.symbol === symbol) ?? null;\n}\n\nconst toSeconds = (local: string): number | null => {\n if (!local) return null;\n const ms = new Date(local).getTime();\n return Number.isNaN(ms) ? null : Math.floor(ms / 1000);\n};\n\nexport function validateSale(d: SaleDraft, now: number): SaleErrors {\n const errors: SaleErrors = {};\n if (d.paid) {\n const token = saleToken(d.tokenSymbol);\n const decimals = d.price.split(\".\")[1]?.length ?? 0;\n if (!token) errors.price = \"Choose a currency\";\n else if (!/^\\d+(\\.\\d+)?$/.test(d.price)) errors.price = \"Enter a price above 0\";\n else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;\n else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = \"Enter a price above 0\";\n }\n const start = d.startNow ? now : toSeconds(d.start);\n if (!d.startNow && (start === null || start <= now)) errors.start = \"Pick a start time in the future\";\n if (d.hasEnd) {\n const end = toSeconds(d.end);\n if (end === null || (start !== null && end <= start)) errors.end = \"The sale must end after it starts\";\n }\n if (d.limitPerWallet && !/^[1-9]\\d*$/.test(d.perWallet)) errors.perWallet = \"Enter 1 or more\";\n return errors;\n}\n\n/** Terms for the create intent; call only after `validateSale` returns no errors. */\nexport function toDropTerms(d: SaleDraft): DropTermsBody {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n return {\n startTime: d.startNow ? 0 : toSeconds(d.start)!,\n endTime: d.hasEnd ? toSeconds(d.end)! : 0,\n price: token ? parseAmount(d.price, token.decimals) : \"0\",\n paymentToken: token ? token.address : \"0x0\",\n maxPerWallet: d.limitPerWallet ? d.perWallet : \"0\",\n };\n}\n\n/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */\nexport function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;\n const price = BigInt(parseAmount(d.price, token.decimals));\n const { fee, total } = dropMintCost(price, 1, cfg);\n const amount = (v: bigint) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;\n if (fee === 0n) return `Collectors pay ${amount(price)}.`;\n return `Collectors pay ${amount(total)} (incl. ${feeBps(\"launchpad\", cfg) / 100}% platform fee). You receive ${amount(price)}.`;\n}\n\nexport function priceLabel(price: string, paymentToken: string): string {\n if (BigInt(price) === 0n) return \"Free\";\n const token = getTokenByAddress(paymentToken);\n return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : \"Paid\";\n}\n\nconst count = (v: string) => Number(v).toLocaleString(\"en-US\");\n\nexport function supplyLabel(minted: string, maxSupply: string): string {\n return maxSupply === \"0\" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;\n}\n"],"mappings":"AAAA,SAAS,cAAc,mBAAmB,mBAAmB,mBAA+D;AAC5H,SAAS,cAAc,cAAc;AAgB9B,MAAM,aAAwB;AAAA,EACnC,MAAM;AAAA,EAAO,OAAO;AAAA,EAAI,aAAa;AAAA,EACrC,UAAU;AAAA,EAAM,OAAO;AAAA,EAAI,QAAQ;AAAA,EAAO,KAAK;AAAA,EAC/C,gBAAgB;AAAA,EAAO,WAAW;AACpC;AAIO,SAAS,UAAU,QAAgB;AACxC,SAAO,kBAAkB,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,MAAM,KAAK;AACjE;AAEA,MAAM,YAAY,CAAC,UAAiC;AAClD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,KAAK,IAAI,KAAK,KAAK,EAAE,QAAQ;AACnC,SAAO,OAAO,MAAM,EAAE,IAAI,OAAO,KAAK,MAAM,KAAK,GAAI;AACvD;AAEO,SAAS,aAAa,GAAc,KAAyB;AAClE,QAAM,SAAqB,CAAC;AAC5B,MAAI,EAAE,MAAM;AACV,UAAM,QAAQ,UAAU,EAAE,WAAW;AACrC,UAAM,WAAW,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,UAAU;AAClD,QAAI,CAAC,MAAO,QAAO,QAAQ;AAAA,aAClB,CAAC,gBAAgB,KAAK,EAAE,KAAK,EAAG,QAAO,QAAQ;AAAA,aAC/C,WAAW,MAAM,SAAU,QAAO,QAAQ,eAAe,MAAM,QAAQ,iBAAiB,MAAM,MAAM;AAAA,aACpG,OAAO,YAAY,EAAE,OAAO,MAAM,QAAQ,CAAC,MAAM,GAAI,QAAO,QAAQ;AAAA,EAC/E;AACA,QAAM,QAAQ,EAAE,WAAW,MAAM,UAAU,EAAE,KAAK;AAClD,MAAI,CAAC,EAAE,aAAa,UAAU,QAAQ,SAAS,KAAM,QAAO,QAAQ;AACpE,MAAI,EAAE,QAAQ;AACZ,UAAM,MAAM,UAAU,EAAE,GAAG;AAC3B,QAAI,QAAQ,QAAS,UAAU,QAAQ,OAAO,MAAQ,QAAO,MAAM;AAAA,EACrE;AACA,MAAI,EAAE,kBAAkB,CAAC,aAAa,KAAK,EAAE,SAAS,EAAG,QAAO,YAAY;AAC5E,SAAO;AACT;AAGO,SAAS,YAAY,GAA6B;AACvD,QAAM,QAAQ,EAAE,OAAO,UAAU,EAAE,WAAW,IAAI;AAClD,SAAO;AAAA,IACL,WAAW,EAAE,WAAW,IAAI,UAAU,EAAE,KAAK;AAAA,IAC7C,SAAS,EAAE,SAAS,UAAU,EAAE,GAAG,IAAK;AAAA,IACxC,OAAO,QAAQ,YAAY,EAAE,OAAO,MAAM,QAAQ,IAAI;AAAA,IACtD,cAAc,QAAQ,MAAM,UAAU;AAAA,IACtC,cAAc,EAAE,iBAAiB,EAAE,YAAY;AAAA,EACjD;AACF;AAGO,SAAS,mBAAmB,GAAc,KAAuC;AACtF,QAAM,QAAQ,EAAE,OAAO,UAAU,EAAE,WAAW,IAAI;AAClD,MAAI,CAAC,SAAS,aAAa,EAAE,GAAG,YAAY,MAAM,MAAM,OAAO,EAAE,OAAO,aAAa,EAAE,YAAY,GAAG,CAAC,EAAE,MAAO,QAAO;AACvH,QAAM,QAAQ,OAAO,YAAY,EAAE,OAAO,MAAM,QAAQ,CAAC;AACzD,QAAM,EAAE,KAAK,MAAM,IAAI,aAAa,OAAO,GAAG,GAAG;AACjD,QAAM,SAAS,CAAC,MAAc,GAAG,aAAa,EAAE,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,MAAM,MAAM;AAC3F,MAAI,QAAQ,GAAI,QAAO,kBAAkB,OAAO,KAAK,CAAC;AACtD,SAAO,kBAAkB,OAAO,KAAK,CAAC,WAAW,OAAO,aAAa,GAAG,IAAI,GAAG,gCAAgC,OAAO,KAAK,CAAC;AAC9H;AAEO,SAAS,WAAW,OAAe,cAA8B;AACtE,MAAI,OAAO,KAAK,MAAM,GAAI,QAAO;AACjC,QAAM,QAAQ,kBAAkB,YAAY;AAC5C,SAAO,QAAQ,GAAG,aAAa,OAAO,MAAM,QAAQ,CAAC,IAAI,MAAM,MAAM,KAAK;AAC5E;AAEA,MAAM,QAAQ,CAAC,MAAc,OAAO,CAAC,EAAE,eAAe,OAAO;AAEtD,SAAS,YAAY,QAAgB,WAA2B;AACrE,SAAO,cAAc,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,MAAM,SAAS,CAAC;AAC/F;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var types_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(types_exports);
|
|
17
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/drop/types.ts"],"sourcesContent":["import type { ProviderInterface } from \"starknet\";\nimport type { MedialaneClient, ReceiptProvider } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"../../components/fast-mint/types.js\";\n\nexport type DropSigner = FastMintSigner;\n\n/** Receipts for confirmations, contract reads for live drop state. */\nexport type DropProvider = ReceiptProvider & Pick<ProviderInterface, \"callContract\">;\n\n/** What every drop screen takes from the app. */\nexport interface DropAppProps {\n getClient: () => MedialaneClient;\n provider: DropProvider;\n getSigner: () => Promise<DropSigner> | DropSigner;\n walletAddress: string | null;\n onRequireWallet: () => void;\n connectLabel?: string;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProviderInterface } from 'starknet';
|
|
2
|
+
import { MedialaneClient, ReceiptProvider } from '@medialane/sdk/starknet';
|
|
3
|
+
import { FastMintSigner } from '../../components/fast-mint/types.cjs';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '@medialane/sdk';
|
|
6
|
+
|
|
7
|
+
type DropSigner = FastMintSigner;
|
|
8
|
+
/** Receipts for confirmations, contract reads for live drop state. */
|
|
9
|
+
type DropProvider = ReceiptProvider & Pick<ProviderInterface, "callContract">;
|
|
10
|
+
/** What every drop screen takes from the app. */
|
|
11
|
+
interface DropAppProps {
|
|
12
|
+
getClient: () => MedialaneClient;
|
|
13
|
+
provider: DropProvider;
|
|
14
|
+
getSigner: () => Promise<DropSigner> | DropSigner;
|
|
15
|
+
walletAddress: string | null;
|
|
16
|
+
onRequireWallet: () => void;
|
|
17
|
+
connectLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type { DropAppProps, DropProvider, DropSigner };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProviderInterface } from 'starknet';
|
|
2
|
+
import { MedialaneClient, ReceiptProvider } from '@medialane/sdk/starknet';
|
|
3
|
+
import { FastMintSigner } from '../../components/fast-mint/types.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
import '@medialane/sdk';
|
|
6
|
+
|
|
7
|
+
type DropSigner = FastMintSigner;
|
|
8
|
+
/** Receipts for confirmations, contract reads for live drop state. */
|
|
9
|
+
type DropProvider = ReceiptProvider & Pick<ProviderInterface, "callContract">;
|
|
10
|
+
/** What every drop screen takes from the app. */
|
|
11
|
+
interface DropAppProps {
|
|
12
|
+
getClient: () => MedialaneClient;
|
|
13
|
+
provider: DropProvider;
|
|
14
|
+
getSigner: () => Promise<DropSigner> | DropSigner;
|
|
15
|
+
walletAddress: string | null;
|
|
16
|
+
onRequireWallet: () => void;
|
|
17
|
+
connectLabel?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type { DropAppProps, DropProvider, DropSigner };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|