@artblocks/abx-cli 0.1.0-alpha.3 → 0.1.0-alpha.31

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.
Files changed (152) hide show
  1. package/CHANGELOG.md +3694 -0
  2. package/assets/renderer-scaffold/README.md +2 -2
  3. package/assets/renderer-scaffold/src/MyRenderer.sol +2 -2
  4. package/assets/renderer-scaffold/src/interfaces/IAbxFieldRenderer.sol +1 -1
  5. package/assets/renderer-scaffold/src/interfaces/IAbxParams.sol +17 -0
  6. package/assets/renderer-scaffold/test/MyRenderer.t.sol +51 -2
  7. package/dist/bin.d.ts +27 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +64 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/commands/deploy.d.ts +242 -0
  12. package/dist/commands/deploy.d.ts.map +1 -0
  13. package/dist/commands/deploy.js +4764 -0
  14. package/dist/commands/deploy.js.map +1 -0
  15. package/dist/commands/project.d.ts +257 -0
  16. package/dist/commands/project.d.ts.map +1 -0
  17. package/dist/commands/project.js +1299 -0
  18. package/dist/commands/project.js.map +1 -0
  19. package/dist/commands/reads.d.ts +64 -0
  20. package/dist/commands/reads.d.ts.map +1 -0
  21. package/dist/commands/reads.js +701 -0
  22. package/dist/commands/reads.js.map +1 -0
  23. package/dist/commands/scaffold.d.ts +73 -0
  24. package/dist/commands/scaffold.d.ts.map +1 -0
  25. package/dist/commands/scaffold.js +679 -0
  26. package/dist/commands/scaffold.js.map +1 -0
  27. package/dist/commands/service.d.ts +41 -0
  28. package/dist/commands/service.d.ts.map +1 -0
  29. package/dist/commands/service.js +618 -0
  30. package/dist/commands/service.js.map +1 -0
  31. package/dist/commands/storage.d.ts +51 -0
  32. package/dist/commands/storage.d.ts.map +1 -0
  33. package/dist/commands/storage.js +370 -0
  34. package/dist/commands/storage.js.map +1 -0
  35. package/dist/commands/submit-app.d.ts +58 -0
  36. package/dist/commands/submit-app.d.ts.map +1 -0
  37. package/dist/commands/submit-app.js +512 -0
  38. package/dist/commands/submit-app.js.map +1 -0
  39. package/dist/config.d.ts +90 -2
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +285 -11
  42. package/dist/config.js.map +1 -1
  43. package/dist/conformance.d.ts +31 -0
  44. package/dist/conformance.d.ts.map +1 -0
  45. package/dist/conformance.js +393 -0
  46. package/dist/conformance.js.map +1 -0
  47. package/dist/deps.d.ts +6 -39
  48. package/dist/deps.d.ts.map +1 -1
  49. package/dist/deps.js +4 -68
  50. package/dist/deps.js.map +1 -1
  51. package/dist/errors.d.ts +20 -0
  52. package/dist/errors.d.ts.map +1 -0
  53. package/dist/errors.js +25 -0
  54. package/dist/errors.js.map +1 -0
  55. package/dist/flag-allowlists.d.ts +53 -0
  56. package/dist/flag-allowlists.d.ts.map +1 -0
  57. package/dist/flag-allowlists.js +157 -0
  58. package/dist/flag-allowlists.js.map +1 -0
  59. package/dist/flags.d.ts +45 -0
  60. package/dist/flags.d.ts.map +1 -1
  61. package/dist/flags.js +117 -1
  62. package/dist/flags.js.map +1 -1
  63. package/dist/jsonout.d.ts +37 -0
  64. package/dist/jsonout.d.ts.map +1 -0
  65. package/dist/jsonout.js +68 -0
  66. package/dist/jsonout.js.map +1 -0
  67. package/dist/kind.d.ts +61 -0
  68. package/dist/kind.d.ts.map +1 -0
  69. package/dist/kind.js +111 -0
  70. package/dist/kind.js.map +1 -0
  71. package/dist/main.js +699 -4736
  72. package/dist/main.js.map +1 -1
  73. package/dist/mintpage.d.ts +17 -2
  74. package/dist/mintpage.d.ts.map +1 -1
  75. package/dist/mintpage.js +241 -54
  76. package/dist/mintpage.js.map +1 -1
  77. package/dist/output.d.ts +179 -0
  78. package/dist/output.d.ts.map +1 -0
  79. package/dist/output.js +756 -0
  80. package/dist/output.js.map +1 -0
  81. package/dist/ownerops.d.ts +302 -51
  82. package/dist/ownerops.d.ts.map +1 -1
  83. package/dist/ownerops.js +1780 -357
  84. package/dist/ownerops.js.map +1 -1
  85. package/dist/preview.d.ts +81 -0
  86. package/dist/preview.d.ts.map +1 -0
  87. package/dist/preview.js +535 -0
  88. package/dist/preview.js.map +1 -0
  89. package/dist/prompt.d.ts +17 -0
  90. package/dist/prompt.d.ts.map +1 -0
  91. package/dist/prompt.js +19 -0
  92. package/dist/prompt.js.map +1 -0
  93. package/dist/provision.d.ts.map +1 -1
  94. package/dist/provision.js +16 -8
  95. package/dist/provision.js.map +1 -1
  96. package/dist/remote.d.ts +153 -52
  97. package/dist/remote.d.ts.map +1 -1
  98. package/dist/remote.js +406 -46
  99. package/dist/remote.js.map +1 -1
  100. package/dist/riskgate.d.ts +58 -0
  101. package/dist/riskgate.d.ts.map +1 -0
  102. package/dist/riskgate.js +212 -0
  103. package/dist/riskgate.js.map +1 -0
  104. package/dist/scaffold.d.ts +10 -0
  105. package/dist/scaffold.d.ts.map +1 -0
  106. package/dist/scaffold.js +52 -0
  107. package/dist/scaffold.js.map +1 -0
  108. package/dist/schema.d.ts +36 -1
  109. package/dist/schema.d.ts.map +1 -1
  110. package/dist/schema.js +121 -26
  111. package/dist/schema.js.map +1 -1
  112. package/dist/script-chunks.d.ts +8 -0
  113. package/dist/script-chunks.d.ts.map +1 -0
  114. package/dist/script-chunks.js +35 -0
  115. package/dist/script-chunks.js.map +1 -0
  116. package/dist/served.d.ts +30 -0
  117. package/dist/served.d.ts.map +1 -0
  118. package/dist/served.js +112 -0
  119. package/dist/served.js.map +1 -0
  120. package/dist/signer.d.ts +13 -0
  121. package/dist/signer.d.ts.map +1 -1
  122. package/dist/signer.js +84 -15
  123. package/dist/signer.js.map +1 -1
  124. package/dist/update-check.d.ts +83 -4
  125. package/dist/update-check.d.ts.map +1 -1
  126. package/dist/update-check.js +140 -19
  127. package/dist/update-check.js.map +1 -1
  128. package/package.json +12 -8
  129. package/skill/SKILL.md +351 -151
  130. package/skill/reference/code-projects.md +183 -26
  131. package/skill/reference/creator-token.md +99 -0
  132. package/skill/reference/decisions.md +174 -0
  133. package/skill/reference/hosting.md +63 -19
  134. package/skill/reference/operating.md +116 -12
  135. package/skill/reference/setup.md +57 -6
  136. package/skill/reference/troubleshooting.md +42 -5
  137. package/dist/inspect.d.ts +0 -48
  138. package/dist/inspect.d.ts.map +0 -1
  139. package/dist/inspect.js +0 -184
  140. package/dist/inspect.js.map +0 -1
  141. package/dist/migrate.d.ts +0 -65
  142. package/dist/migrate.d.ts.map +0 -1
  143. package/dist/migrate.js +0 -180
  144. package/dist/migrate.js.map +0 -1
  145. package/dist/onchain-uri.d.ts +0 -97
  146. package/dist/onchain-uri.d.ts.map +0 -1
  147. package/dist/onchain-uri.js +0 -243
  148. package/dist/onchain-uri.js.map +0 -1
  149. package/dist/upload.d.ts +0 -28
  150. package/dist/upload.d.ts.map +0 -1
  151. package/dist/upload.js +0 -41
  152. package/dist/upload.js.map +0 -1
@@ -0,0 +1,512 @@
1
+ /**
2
+ * `abx submit-app` — optional post-deploy listing in the ABX App Store.
3
+ *
4
+ * Not part of deploy. A creator (or the agent driving them) opts in after the
5
+ * collection exists: mint one entry token through the store's gated minter, then
6
+ * write catalog copy as the registry's TokenOwner params. Same transactions as
7
+ * the store's `/submit` page; the CLI is the agent path.
8
+ *
9
+ * Catalog copy is NOT the collection's `--name` / `--description`. Those are NFT
10
+ * metadata. The store wants outcome copy — what someone can do — and this command
11
+ * requires those fields on purpose so an agent cannot silently reuse deploy flags.
12
+ */
13
+ import { assertChainId, encodeScalarParam, makePublicClient, prepareConfigureTokenParam, prepareConfigureTokenParamData, prepareMulticall, } from '@artblocks/abx-sdk';
14
+ import { encodeFunctionData, getAddress, isAddress, parseEventLogs, toHex } from 'viem';
15
+ import { CHAIN, chainId, explorerBase } from '../config.js';
16
+ import { CliError } from '../errors.js';
17
+ import { isDryRun } from '../flags.js';
18
+ import { withJson } from '../jsonout.js';
19
+ import { bold, dim, g, ok } from '../output.js';
20
+ import { confirmSend, laneFromFlags } from '../riskgate.js';
21
+ import { openWalletSession, signHotSequence, signTx, } from '../signer.js';
22
+ /** Matches the App Store registry schema (`lib/submissions.ts` in abx-app-store). */
23
+ export const APP_CATEGORIES = [
24
+ 'Create',
25
+ 'Games',
26
+ 'Physical world',
27
+ 'Records',
28
+ 'Coordination',
29
+ 'Utilities',
30
+ 'Developer tools',
31
+ ];
32
+ export const APP_STAGES = ['Live', 'Prototype', 'Concept'];
33
+ export const APP_TONES = ['acid', 'coral', 'blue', 'violet', 'amber', 'mint'];
34
+ export const APP_RELATIONSHIP = 'built-on-abx';
35
+ const PARAM_KEYS = [
36
+ 'name',
37
+ 'summary',
38
+ 'description',
39
+ 'url',
40
+ 'urlLabel',
41
+ 'image',
42
+ 'mark',
43
+ 'tone',
44
+ 'category',
45
+ 'relationships',
46
+ 'stage',
47
+ 'tags',
48
+ ];
49
+ /** Sequencer/RPC per-tx gas cap. A full param dump in one multicall exceeds it. */
50
+ export const MAX_CALLS_PER_TX = 3;
51
+ const MINTER_ABI = [
52
+ {
53
+ type: 'function',
54
+ name: 'submit',
55
+ stateMutability: 'nonpayable',
56
+ inputs: [{ name: 'collection', type: 'address' }],
57
+ outputs: [{ name: 'tokenId', type: 'uint256' }],
58
+ },
59
+ {
60
+ type: 'function',
61
+ name: 'claimed',
62
+ stateMutability: 'view',
63
+ inputs: [{ name: 'collection', type: 'address' }],
64
+ outputs: [{ name: '', type: 'bool' }],
65
+ },
66
+ {
67
+ type: 'function',
68
+ name: 'entryOf',
69
+ stateMutability: 'view',
70
+ inputs: [{ name: 'collection', type: 'address' }],
71
+ outputs: [{ name: '', type: 'uint256' }],
72
+ },
73
+ {
74
+ type: 'event',
75
+ name: 'EntrySubmitted',
76
+ inputs: [
77
+ { name: 'collection', type: 'address', indexed: true },
78
+ { name: 'tokenId', type: 'uint256', indexed: true },
79
+ { name: 'owner', type: 'address', indexed: true },
80
+ ],
81
+ },
82
+ ];
83
+ const OWNER_ABI = [
84
+ {
85
+ type: 'function',
86
+ name: 'owner',
87
+ stateMutability: 'view',
88
+ inputs: [],
89
+ outputs: [{ name: '', type: 'address' }],
90
+ },
91
+ {
92
+ type: 'function',
93
+ name: 'ownerOf',
94
+ stateMutability: 'view',
95
+ inputs: [{ name: 'tokenId', type: 'uint256' }],
96
+ outputs: [{ name: '', type: 'address' }],
97
+ },
98
+ ];
99
+ /**
100
+ * Shipped App Store registry + gated minter, per chain. Override with
101
+ * `--registry` / `--minter` or `ABX_APP_STORE_REGISTRY` / `ABX_APP_STORE_MINTER`.
102
+ * A chain with no row is not an error until someone runs this command there.
103
+ */
104
+ const APP_STORE = {
105
+ 'base-sepolia': {
106
+ registry: '0xBD0D5eE35075E62d970467771775c630B9FB87fa',
107
+ minter: '0xBC0aD16F6501424f7028260a5A396b41aa6d9046',
108
+ },
109
+ };
110
+ const USAGE = 'abx submit-app <collection> --name <s> --summary "<s>" --description "<s>" [--mark A/] [--tone acid] [--category Create] [--stage Prototype] [--url https://…] [--url-label "Open app"] [--image https://…] [--tags a,b] [--registry 0x…] [--minter 0x…] [--sign|--unsigned|--dry-run]';
111
+ function requireFlag(flags, name) {
112
+ const v = flags[name];
113
+ if (!v || v === 'true') {
114
+ throw new Error(`missing --${name}\nusage: ${USAGE}`);
115
+ }
116
+ return v;
117
+ }
118
+ function optionalFlag(flags, name) {
119
+ const v = flags[name];
120
+ if (!v || v === 'true')
121
+ return '';
122
+ return v;
123
+ }
124
+ function oneOf(value, options, flag) {
125
+ if (options.includes(value))
126
+ return value;
127
+ throw new Error(`--${flag} must be one of ${options.join(' | ')} (got "${value}").`);
128
+ }
129
+ function requireHttps(value, flag) {
130
+ if (!value)
131
+ return '';
132
+ let url;
133
+ try {
134
+ url = new URL(value);
135
+ }
136
+ catch {
137
+ throw new Error(`--${flag} must be an HTTPS URL.`);
138
+ }
139
+ if (url.protocol !== 'https:')
140
+ throw new Error(`--${flag} must be an HTTPS URL.`);
141
+ return value.trim();
142
+ }
143
+ function parseTags(raw) {
144
+ if (!raw)
145
+ return [];
146
+ const tags = raw
147
+ .split(/[,\n]/)
148
+ .map((t) => t.trim())
149
+ .filter(Boolean);
150
+ if (tags.length > 12)
151
+ throw new Error('--tags accepts at most 12 tags.');
152
+ const seen = new Set();
153
+ for (const tag of tags) {
154
+ if (tag.length > 60)
155
+ throw new Error(`tag "${tag}" is longer than 60 characters.`);
156
+ const key = tag.toLowerCase();
157
+ if (seen.has(key))
158
+ throw new Error(`duplicate tag "${tag}".`);
159
+ seen.add(key);
160
+ }
161
+ return tags;
162
+ }
163
+ function bound(value, flag, max, min = 1) {
164
+ const t = value.trim();
165
+ if (t.length < min)
166
+ throw new Error(`--${flag} is required.`);
167
+ if (t.length > max)
168
+ throw new Error(`--${flag} is longer than ${max} characters.`);
169
+ return t;
170
+ }
171
+ /**
172
+ * Catalog copy from flags. Requires name / summary / description so deploy identity
173
+ * cannot silently become the listing.
174
+ */
175
+ export function parseSubmitAppEntry(flags) {
176
+ return {
177
+ name: bound(requireFlag(flags, 'name'), 'name', 100),
178
+ summary: bound(requireFlag(flags, 'summary'), 'summary', 240),
179
+ description: bound(requireFlag(flags, 'description'), 'description', 2_000),
180
+ url: requireHttps(optionalFlag(flags, 'url'), 'url'),
181
+ urlLabel: optionalFlag(flags, 'url-label').trim().slice(0, 60),
182
+ image: requireHttps(optionalFlag(flags, 'image'), 'image'),
183
+ mark: bound(optionalFlag(flags, 'mark') || 'A/', 'mark', 3),
184
+ tone: oneOf(optionalFlag(flags, 'tone') || 'acid', APP_TONES, 'tone'),
185
+ category: oneOf(optionalFlag(flags, 'category') || 'Create', APP_CATEGORIES, 'category'),
186
+ stage: oneOf(optionalFlag(flags, 'stage') || 'Prototype', APP_STAGES, 'stage'),
187
+ tags: parseTags(optionalFlag(flags, 'tags')),
188
+ };
189
+ }
190
+ export function paramValues(entry) {
191
+ return {
192
+ name: entry.name,
193
+ summary: entry.summary,
194
+ description: entry.description,
195
+ url: entry.url,
196
+ urlLabel: entry.urlLabel,
197
+ image: entry.image,
198
+ mark: entry.mark,
199
+ tone: entry.tone,
200
+ category: entry.category,
201
+ relationships: APP_RELATIONSHIP,
202
+ stage: entry.stage,
203
+ tags: entry.tags.join(','),
204
+ };
205
+ }
206
+ export function resolveAppStoreAddresses(chainKey, flags = {}, env = process.env) {
207
+ const shipped = APP_STORE[chainKey];
208
+ const registryRaw = optionalFlag(flags, 'registry') || env.ABX_APP_STORE_REGISTRY || shipped?.registry;
209
+ const minterRaw = optionalFlag(flags, 'minter') || env.ABX_APP_STORE_MINTER || shipped?.minter;
210
+ if (!registryRaw || !minterRaw) {
211
+ throw new Error(`No ABX App Store registry is shipped for '${chainKey}'. Pass --registry 0x… and --minter 0x… ` +
212
+ `(or set ABX_APP_STORE_REGISTRY / ABX_APP_STORE_MINTER).`);
213
+ }
214
+ if (!isAddress(registryRaw) || !isAddress(minterRaw)) {
215
+ throw new Error('--registry and --minter must be 0x… addresses.');
216
+ }
217
+ return { registry: getAddress(registryRaw), minter: getAddress(minterRaw) };
218
+ }
219
+ export function chunkItems(items, size = MAX_CALLS_PER_TX) {
220
+ if (size < 1)
221
+ throw new Error('chunk size must be ≥ 1');
222
+ const out = [];
223
+ for (let i = 0; i < items.length; i += size)
224
+ out.push(items.slice(i, i + size));
225
+ return out;
226
+ }
227
+ export function buildParamOps(args) {
228
+ const values = paramValues(args.entry);
229
+ const ops = [];
230
+ for (const key of PARAM_KEYS) {
231
+ const value = values[key];
232
+ if (value === '')
233
+ continue;
234
+ if (key === 'tone') {
235
+ const encoded = encodeScalarParam('Select', value, [...APP_TONES]);
236
+ ops.push(prepareConfigureTokenParam({
237
+ contract: args.registry,
238
+ tokenId: args.tokenId,
239
+ key,
240
+ value: encoded.value,
241
+ display: encoded.display,
242
+ chainId: args.chainId,
243
+ }));
244
+ continue;
245
+ }
246
+ ops.push(prepareConfigureTokenParamData({
247
+ contract: args.registry,
248
+ tokenId: args.tokenId,
249
+ key,
250
+ data: toHex(new TextEncoder().encode(value)),
251
+ chainId: args.chainId,
252
+ }));
253
+ }
254
+ return ops;
255
+ }
256
+ export function batchParamOps(ops) {
257
+ return chunkItems(ops, MAX_CALLS_PER_TX).map((group, i, all) => {
258
+ if (group.length === 1)
259
+ return group[0];
260
+ return prepareMulticall({
261
+ ops: group,
262
+ summary: `Write App Store metadata ${i + 1}/${all.length} (${group.length} fields)`,
263
+ });
264
+ });
265
+ }
266
+ function prepareSubmitCollection(args) {
267
+ return {
268
+ op: 'submit-app',
269
+ to: args.minter,
270
+ data: encodeFunctionData({
271
+ abi: MINTER_ABI,
272
+ functionName: 'submit',
273
+ args: [args.collection],
274
+ }),
275
+ value: '0x0',
276
+ chainId: args.chainId,
277
+ summary: `List ${args.collection} in the ABX App Store`,
278
+ fields: { minter: args.minter, collection: args.collection },
279
+ };
280
+ }
281
+ function tokenIdFromMintLogs(logs) {
282
+ try {
283
+ const parsed = parseEventLogs({
284
+ abi: MINTER_ABI,
285
+ logs: logs,
286
+ eventName: 'EntrySubmitted',
287
+ });
288
+ const first = parsed[0];
289
+ return first ? first.args.tokenId : null;
290
+ }
291
+ catch {
292
+ return null;
293
+ }
294
+ }
295
+ function previewTx(tx, expectedSigner) {
296
+ console.log(`\n ${bold('◆ ' + tx.summary)} ${dim('(dry run — nothing sent)')}`);
297
+ for (const [k, v] of Object.entries(tx.fields))
298
+ console.log(` ${dim(k.padEnd(12))} ${v}`);
299
+ console.log(` ${dim('to'.padEnd(12))} ${tx.to ?? dim('(none)')}`);
300
+ if (expectedSigner)
301
+ console.log(` ${dim('signer'.padEnd(12))} ${expectedSigner}`);
302
+ }
303
+ export async function cmdSubmitApp(address, flags) {
304
+ if (!address || address.startsWith('--')) {
305
+ console.error(`usage: ${USAGE}\n`);
306
+ throw new CliError('', 1, true);
307
+ }
308
+ if (!isAddress(address)) {
309
+ throw new Error(`<collection> must be a 0x… address (got "${address}").`);
310
+ }
311
+ const collection = getAddress(address);
312
+ const entry = parseSubmitAppEntry(flags);
313
+ const store = resolveAppStoreAddresses(CHAIN, flags);
314
+ const cid = chainId();
315
+ const publicClient = makePublicClient({ chainKey: CHAIN });
316
+ const claimed = (await publicClient.readContract({
317
+ address: store.minter,
318
+ abi: MINTER_ABI,
319
+ functionName: 'claimed',
320
+ args: [collection],
321
+ }));
322
+ let tokenId = null;
323
+ let expectedSigner;
324
+ if (claimed) {
325
+ tokenId = (await publicClient.readContract({
326
+ address: store.minter,
327
+ abi: MINTER_ABI,
328
+ functionName: 'entryOf',
329
+ args: [collection],
330
+ }));
331
+ expectedSigner = (await publicClient.readContract({
332
+ address: store.registry,
333
+ abi: OWNER_ABI,
334
+ functionName: 'ownerOf',
335
+ args: [tokenId],
336
+ }));
337
+ console.log(dim(` already listed as token #${tokenId.toString()} — skipping mint, writing metadata (same as /update).`));
338
+ }
339
+ else {
340
+ expectedSigner = (await publicClient.readContract({
341
+ address: collection,
342
+ abi: OWNER_ABI,
343
+ functionName: 'owner',
344
+ args: [],
345
+ }));
346
+ }
347
+ const paramOps = tokenId !== null
348
+ ? buildParamOps({ registry: store.registry, tokenId, entry, chainId: cid })
349
+ : buildParamOps({ registry: store.registry, tokenId: 0n, entry, chainId: cid });
350
+ // When the token id isn't known yet, ops are only used to count batches for the sign-page total
351
+ // and the dry-run preview. Calldata is rebuilt after mint with the real id.
352
+ const paramBatches = batchParamOps(paramOps);
353
+ const mintTx = claimed
354
+ ? null
355
+ : prepareSubmitCollection({ minter: store.minter, collection, chainId: cid });
356
+ const approvalCount = (mintTx ? 1 : 0) + paramBatches.length;
357
+ return withJson(flags, async () => {
358
+ if (isDryRun(flags)) {
359
+ if (mintTx)
360
+ previewTx(mintTx, expectedSigner);
361
+ console.log(dim(`\n then ${paramBatches.length} metadata transaction(s) (${paramOps.length} fields, max ${MAX_CALLS_PER_TX} per tx).`));
362
+ for (const key of PARAM_KEYS) {
363
+ const value = paramValues(entry)[key];
364
+ if (value === '')
365
+ continue;
366
+ console.log(` ${dim(key.padEnd(16))} ${value.length > 80 ? value.slice(0, 77) + '…' : value}`);
367
+ }
368
+ console.log(dim(`\n Re-run without --dry-run to send (lane: ${laneFromFlags(flags)}).\n`));
369
+ return {
370
+ collection,
371
+ chainId: cid,
372
+ registry: store.registry,
373
+ minter: store.minter,
374
+ claimed,
375
+ tokenId: tokenId !== null ? tokenId.toString() : null,
376
+ sent: false,
377
+ approvals: approvalCount,
378
+ };
379
+ }
380
+ await confirmSend(claimed
381
+ ? `Update App Store listing #${tokenId.toString()} (${paramBatches.length} metadata tx)`
382
+ : `List ${collection} in the App Store (mint + ${paramBatches.length} metadata tx)`, flags);
383
+ await assertChainId(CHAIN);
384
+ const lane = laneFromFlags(flags);
385
+ let mintHash = null;
386
+ let paramsHashes = [];
387
+ let listedId = tokenId;
388
+ const sendMintThenParams = async (send) => {
389
+ if (mintTx) {
390
+ const minted = await send(mintTx);
391
+ mintHash = minted.txHash;
392
+ listedId = tokenIdFromMintLogs(minted.logs);
393
+ if (listedId === null) {
394
+ throw new Error('Mint succeeded but the entry token id was not in the receipt. The collection is claimed — retry to write metadata onto the existing token.');
395
+ }
396
+ ok(`listed as token #${listedId.toString()}`);
397
+ }
398
+ const ops = buildParamOps({
399
+ registry: store.registry,
400
+ tokenId: listedId,
401
+ entry,
402
+ chainId: cid,
403
+ });
404
+ const batches = batchParamOps(ops);
405
+ for (const [i, tx] of batches.entries()) {
406
+ const sent = await send(tx);
407
+ paramsHashes.push(sent.txHash);
408
+ console.log(dim(` metadata ${i + 1}/${batches.length}`));
409
+ }
410
+ };
411
+ if (lane === 'unsigned') {
412
+ // Cold lane can't do mint-then-params in one shot (the token id is assigned at mint).
413
+ // Print the mint (or the param batches if already claimed) and stop.
414
+ if (mintTx) {
415
+ await signTx(mintTx, {
416
+ lane: 'unsigned',
417
+ chainKey: CHAIN,
418
+ expectedSigner,
419
+ yes: !!flags.yes,
420
+ });
421
+ console.log(dim(' After the mint confirms, re-run this command to write catalog copy onto the new token (configure is an upsert).'));
422
+ }
423
+ else {
424
+ for (const tx of paramBatches) {
425
+ await signTx(tx, {
426
+ lane: 'unsigned',
427
+ chainKey: CHAIN,
428
+ expectedSigner,
429
+ yes: !!flags.yes,
430
+ });
431
+ }
432
+ }
433
+ return {
434
+ collection,
435
+ chainId: cid,
436
+ registry: store.registry,
437
+ minter: store.minter,
438
+ claimed,
439
+ tokenId: listedId !== null ? listedId.toString() : null,
440
+ sent: false,
441
+ mintTx: null,
442
+ paramsTxs: [],
443
+ };
444
+ }
445
+ if (lane === 'send') {
446
+ const results = [];
447
+ if (mintTx) {
448
+ const minted = await signTx(mintTx, {
449
+ lane: 'send',
450
+ chainKey: CHAIN,
451
+ expectedSigner,
452
+ yes: !!flags.yes,
453
+ });
454
+ if (!minted)
455
+ throw new Error('Mint was not sent.');
456
+ results.push(minted);
457
+ mintHash = minted.txHash;
458
+ const receipt = await publicClient.getTransactionReceipt({ hash: minted.txHash });
459
+ listedId = tokenIdFromMintLogs(receipt.logs);
460
+ if (listedId === null) {
461
+ throw new Error('Mint succeeded but the entry token id was not in the receipt. Retry to write metadata onto the existing token.');
462
+ }
463
+ ok(`listed as token #${listedId.toString()}`);
464
+ }
465
+ const ops = buildParamOps({
466
+ registry: store.registry,
467
+ tokenId: listedId,
468
+ entry,
469
+ chainId: cid,
470
+ });
471
+ const batches = batchParamOps(ops);
472
+ if (batches.length > 0) {
473
+ const rest = await signHotSequence(batches, { chainKey: CHAIN, yes: !!flags.yes });
474
+ results.push(...rest);
475
+ paramsHashes = rest.map((r) => r.txHash);
476
+ }
477
+ }
478
+ else {
479
+ const session = await openWalletSession({
480
+ chainKey: CHAIN,
481
+ expectedSigner,
482
+ total: approvalCount,
483
+ port: flags.port ? Number(flags.port) : undefined,
484
+ signUrlFile: flags['sign-url-file'],
485
+ });
486
+ try {
487
+ await session.connect();
488
+ await sendMintThenParams(async (tx) => {
489
+ const { txHash, receipt } = await session.send(tx);
490
+ return { txHash, logs: receipt.logs };
491
+ });
492
+ }
493
+ finally {
494
+ session.close();
495
+ }
496
+ }
497
+ console.log(`\n ${g('Listed.')} token #${listedId.toString()} on ${CHAIN} ${dim(explorerBase() + '/token/' + store.registry + '?a=' + listedId.toString())}`);
498
+ console.log(dim(' The catalog picks it up on the next read. Re-run this command to change the copy (no second mint).'));
499
+ return {
500
+ collection,
501
+ chainId: cid,
502
+ registry: store.registry,
503
+ minter: store.minter,
504
+ claimed,
505
+ tokenId: listedId.toString(),
506
+ sent: true,
507
+ mintTx: mintHash,
508
+ paramsTxs: paramsHashes,
509
+ };
510
+ });
511
+ }
512
+ //# sourceMappingURL=submit-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-app.js","sourceRoot":"","sources":["../../src/commands/submit-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,0BAA0B,EAC1B,8BAA8B,EAC9B,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAC,MAAM,MAAM,CAAC;AACtF,OAAO,EAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AACtC,OAAO,EAAa,QAAQ,EAAC,MAAM,aAAa,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,MAAM,GAEP,MAAM,cAAc,CAAC;AAEtB,qFAAqF;AACrF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,OAAO;IACP,gBAAgB;IAChB,SAAS;IACT,cAAc;IACd,WAAW;IACX,iBAAiB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AACpE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAE/C,MAAM,UAAU,GAAG;IACjB,MAAM;IACN,SAAS;IACT,aAAa;IACb,KAAK;IACL,UAAU;IACV,OAAO;IACP,MAAM;IACN,MAAM;IACN,UAAU;IACV,eAAe;IACf,OAAO;IACP,MAAM;CACE,CAAC;AAIX,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,MAAM,UAAU,GAAG;IACjB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,YAAY;QAC7B,MAAM,EAAE,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;QAC/C,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;KAC9C;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;QAC/C,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC;KACpC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;QAC/C,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;KACvC;IACD;QACE,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE;YACN,EAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC;YACpD,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC;YACjD,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC;SAChD;KACF;CACO,CAAC;AAEX,MAAM,SAAS,GAAG;IAChB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;KACvC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;KACvC;CACO,CAAC;AAEX;;;;GAIG;AACH,MAAM,SAAS,GAAyD;IACtE,cAAc,EAAE;QACd,QAAQ,EAAE,4CAA4C;QACtD,MAAM,EAAE,4CAA4C;KACrD;CACF,CAAC;AAkBF,MAAM,KAAK,GACT,wRAAwR,CAAC;AAE3R,SAAS,WAAW,CAAC,KAAY,EAAE,IAAY;IAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,YAAY,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,IAAY;IAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,KAAK,CAAmB,KAAa,EAAE,OAAqB,EAAE,IAAY;IACjF,IAAK,OAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAU,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,mBAAmB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,IAAY;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,GAAG;SACb,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,iCAAiC,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,GAAG,GAAG,CAAC;IAC9D,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,mBAAmB,GAAG,cAAc,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC;QACpD,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC;QAC7D,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC;QAC3E,GAAG,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QACpD,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAC9D,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAC1D,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;QACrE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC;QACxF,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;QAC9E,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAqB;IAC/C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,aAAa,EAAE,gBAAgB;QAC/B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,QAAe,EAAE,EACjB,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,WAAW,GACf,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,sBAAsB,IAAI,OAAO,EAAE,QAAQ,CAAC;IACrF,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,oBAAoB,IAAI,OAAO,EAAE,MAAM,CAAC;IAC/F,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,6CAA6C,QAAQ,0CAA0C;YAC7F,yDAAyD,CAC5D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAC,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,EAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,KAAU,EAAE,IAAI,GAAG,gBAAgB;IAC/D,IAAI,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxD,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAK7B;IACC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,EAAE;YAAE,SAAS;QAC3B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACnE,GAAG,CAAC,IAAI,CACN,0BAA0B,CAAC;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG;gBACH,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CACH,CAAC;YACF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CACN,8BAA8B,CAAC;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG;YACH,IAAI,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAiB;IAC7C,OAAO,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO,gBAAgB,CAAC;YACtB,GAAG,EAAE,KAAK;YACV,OAAO,EAAE,4BAA4B,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,UAAU;SACpF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,IAIhC;IACC,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,IAAI,CAAC,MAAM;QACf,IAAI,EAAE,kBAAkB,CAAC;YACvB,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;SACxB,CAAC;QACF,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,QAAQ,IAAI,CAAC,UAAU,uBAAuB;QACvD,MAAM,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA2C;IACtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,GAAG,EAAE,UAAU;YACf,IAAI,EAAE,IAAa;YACnB,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC,CAAE,KAAK,CAAC,IAAI,CAAC,OAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAc,EAAE,cAAwB;IACzD,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAClF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,cAAc;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA2B,EAAE,KAAY;IAC1E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,KAAK,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QAC/C,OAAO,EAAE,KAAK,CAAC,MAAM;QACrB,GAAG,EAAE,UAAU;QACf,YAAY,EAAE,SAAS;QACvB,IAAI,EAAE,CAAC,UAAU,CAAC;KACnB,CAAC,CAAY,CAAC;IAEf,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,cAAuB,CAAC;IAC5B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YACzC,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,GAAG,EAAE,UAAU;YACf,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,UAAU,CAAC;SACnB,CAAC,CAAW,CAAC;QACd,cAAc,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAChD,OAAO,EAAE,KAAK,CAAC,QAAQ;YACvB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,OAAO,CAAC;SAChB,CAAC,CAAY,CAAC;QACf,OAAO,CAAC,GAAG,CACT,GAAG,CACD,8BAA8B,OAAO,CAAC,QAAQ,EAAE,uDAAuD,CACxG,CACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAChD,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,OAAO;YACrB,IAAI,EAAE,EAAE;SACT,CAAC,CAAY,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,KAAK,IAAI;QAC/B,CAAC,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC;QACzE,CAAC,CAAC,aAAa,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;IAChF,gGAAgG;IAChG,4EAA4E;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO;QACpB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,uBAAuB,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;IAE7D,OAAO,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,MAAM;gBAAE,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,GAAG,CACD,YAAY,YAAY,CAAC,MAAM,6BAA6B,QAAQ,CAAC,MAAM,gBAAgB,gBAAgB,WAAW,CACvH,CACF,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,KAAK,KAAK,EAAE;oBAAE,SAAS;gBAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+CAA+C,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5F,OAAO;gBACL,UAAU;gBACV,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO;gBACP,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;gBACrD,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,aAAa;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,CACf,OAAO;YACL,CAAC,CAAC,6BAA6B,OAAQ,CAAC,QAAQ,EAAE,KAAK,YAAY,CAAC,MAAM,eAAe;YACzF,CAAC,CAAC,QAAQ,UAAU,6BAA6B,YAAY,CAAC,MAAM,eAAe,EACrF,KAAK,CACN,CAAC;QACF,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;QAE3B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,QAAQ,GAAe,IAAI,CAAC;QAChC,IAAI,YAAY,GAAU,EAAE,CAAC;QAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC;QAEvB,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAA6F,EAAiB,EAAE;YAChJ,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;gBACzB,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;gBACJ,CAAC;gBACD,EAAE,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,QAAS;gBAClB,KAAK;gBACL,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,sFAAsF;YACtF,qEAAqE;YACrE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,CAAC,MAAM,EAAE;oBACnB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,KAAK;oBACf,cAAc;oBACd,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG;iBACjB,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CACT,GAAG,CACD,mHAAmH,CACpH,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;oBAC9B,MAAM,MAAM,CAAC,EAAE,EAAE;wBACf,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,KAAK;wBACf,cAAc;wBACd,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO;gBACL,UAAU;gBACV,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO;gBACP,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;gBACvD,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,EAAE;aACd,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE;oBAClC,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;oBACf,cAAc;oBACd,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC;gBAChF,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CACb,gHAAgH,CACjH,CAAC;gBACJ,CAAC;gBACD,EAAE,CAAC,oBAAoB,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,GAAG,GAAG,aAAa,CAAC;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,QAAS;gBAClB,KAAK;gBACL,OAAO,EAAE,GAAG;aACb,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC;gBACtC,QAAQ,EAAE,KAAK;gBACf,cAAc;gBACd,KAAK,EAAE,aAAa;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjD,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;gBACxB,MAAM,kBAAkB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBACpC,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjD,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,QAAS,CAAC,QAAQ,EAAE,OAAO,KAAK,KAAK,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CACrJ,CAAC;QACF,OAAO,CAAC,GAAG,CACT,GAAG,CACD,sGAAsG,CACvG,CACF,CAAC;QAEF,OAAO;YACL,UAAU;YACV,OAAO,EAAE,GAAG;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO;YACP,OAAO,EAAE,QAAS,CAAC,QAAQ,EAAE;YAC7B,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,YAAY;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,34 @@
1
- import { type ArweaveJwk, type ResolveStorageOptions } from '@artblocks/abx-storage';
2
- import { type Address } from '@artblocks/abx-sdk';
1
+ import { type ArweaveJwk, type ResolveStorageOptions, type StorageBackend } from '@artblocks/abx-storage';
2
+ import { type Address, type ProjectState } from '@artblocks/abx-sdk';
3
+ import { SelfHostIndexer } from '@artblocks/abx-indexer';
4
+ import { type Flags } from './flags.js';
5
+ /**
6
+ * The active chain key — the ONE place it's derived (`ABX_CHAIN` → the shipped default). main.ts
7
+ * and ownerops.ts each used to carry their own identical `process.env.ABX_CHAIN ?? DEFAULT_CHAIN_KEY`
8
+ * (one flagged "MUST match main.ts/config.ts" in its own comment) — two copies whose only job was
9
+ * to agree with each other, which is exactly the setup a future edit drifts out of. Both import it
10
+ * from here now.
11
+ */
12
+ export declare const CHAIN: string;
13
+ export declare const chainId: () => number;
14
+ export declare const explorerBase: () => string;
3
15
  export declare function dataDir(): string;
16
+ /**
17
+ * Make the data dir ignore itself, before anything sensitive lands in it.
18
+ *
19
+ * `.abx-self-host/` holds this node's projection AND the managed Arweave key — a real, signing-capable
20
+ * credential that also holds prepaid upload credits. The toolkit's own repo gitignores the directory,
21
+ * and the skill said so; a *creator's* repo does not, so a first `--backend arweave` run could leave a
22
+ * key staged for commit with nothing having said a word. A `.gitignore` containing `*` INSIDE the
23
+ * directory ignores the whole tree regardless of the enclosing repo's config, needs no edit to a file
24
+ * we don't own, and is inert outside git.
25
+ *
26
+ * Never overwrites an existing one — a creator who tightened or loosened it made a decision.
27
+ */
28
+ export declare function guardDataDirFromGit(): void;
29
+ /** The process-lifetime local indexer (this node's own SQLite-backed projection). Never pass a
30
+ * chain-varying argument through here — it's a bare singleton, constructed once on first use. */
31
+ export declare function localIndexer(): SelfHostIndexer;
4
32
  /**
5
33
  * Whether `baseUrl` is a localhost/loopback address — a URL that, once baked into an on-chain
6
34
  * `tokenURI`/`contractURI`, resolves for NO ONE off this machine. The single source of truth for
@@ -8,6 +36,17 @@ export declare function dataDir(): string;
8
36
  * duplicated inline — that drift is exactly how `deploy-code` shipped without the guard).
9
37
  */
10
38
  export declare function loopbackBaseUrl(baseUrl: string): boolean;
39
+ /**
40
+ * A short faucet pointer for a testnet — a 0-balance signer's #1 next step. A known URL plus a
41
+ * search hint (URLs rot; the search always works), so "fund it" is never a dead end.
42
+ *
43
+ * Lives here rather than in main.ts because the browser-wallet signing prompt needs it too, and
44
+ * importing main.ts would execute the CLI. That prompt is the one funding surface `warnUnfunded`
45
+ * can't cover: on the `--sign` lane without `--for` we don't learn the address until the wallet
46
+ * connects, so the up-front balance check never runs and the only warning a creator would get is
47
+ * a failed transaction.
48
+ */
49
+ export declare function faucetHint(chainKey: string): string;
11
50
  /** Canonical clone factory for the active chain — flag override → `ABX_FACTORY` → manifest. */
12
51
  export declare function factoryAddress(override?: string): Address | null;
13
52
  /** Canonical Series clone factory — flag override → `ABX_SERIES_FACTORY` → manifest. */
@@ -18,6 +57,14 @@ export declare function rendererAddress(override?: string): Address | null;
18
57
  export declare function chunkStoreAddress(override?: string): Address | null;
19
58
  /** Canonical shared fixed-price minter — flag override → `ABX_FIXED_PRICE_MINTER` → manifest. */
20
59
  export declare function fixedPriceMinterAddress(override?: string): Address | null;
60
+ /** Canonical 1/1-edition clone factory — flag override → `ABX_ONE_OF_ONE_EDITION_FACTORY` → manifest. */
61
+ export declare function oneOfOneEditionFactoryAddress(override?: string): Address | null;
62
+ /** Canonical multi-work edition clone factory — flag override → `ABX_EDITION_FACTORY` → manifest. */
63
+ export declare function editionFactoryAddress(override?: string): Address | null;
64
+ /** Canonical code-project edition clone factory — flag override → `ABX_EDITION_CODE_FACTORY` → manifest. */
65
+ export declare function editionCodeFactoryAddress(override?: string): Address | null;
66
+ /** Canonical shared fixed-price EDITION minter — flag override → `ABX_FIXED_PRICE_MINTER_1155` → manifest. */
67
+ export declare function fixedPriceMinter1155Address(override?: string): Address | null;
21
68
  /** Per-invocation storage overrides parsed from flags (e.g. `abx deploy --backend cloud --bucket …`). */
22
69
  export interface StorageOverrides {
23
70
  backend?: string;
@@ -66,4 +113,45 @@ export declare function ensureArweaveJwk(): {
66
113
  created: boolean;
67
114
  path: string;
68
115
  };
116
+ /** Per-invocation storage overrides parsed from deploy flags (the hybrid: config, overridable). */
117
+ export declare function storageOverrides(flags: Flags): StorageOverrides;
118
+ /** Surface the free-vs-credit decision for a Turbo upload from the LOCAL byte size — no network,
119
+ * so it works in `--dry-run` too. Under 100 KiB is free; above, it draws on prepaid credits. The
120
+ * decision itself (`isTurboArweave` + the size threshold) is the storage package's
121
+ * {@link planTurboUpload}; this is just its narration. */
122
+ export declare function noteArweavePlan(opts: ResolveStorageOptions, size: number): void;
123
+ /**
124
+ * Dry-run storage-readiness: surface what a REAL off-chain deploy needs, from local info only, so
125
+ * "dry-run passes → deploy fails at upload" can't happen. Covers Arweave credit needs, a missing
126
+ * Pinata JWT, and a missing cloud public base. `sizes` are the per-file byte sizes. The readiness
127
+ * FACTS (chargeable-bytes accounting, the USD estimate, the missing-JWT/public-base checks) are the
128
+ * storage package's {@link assessStorageReadiness}; this is just its narration.
129
+ */
130
+ export declare function noteStorageReadiness(opts: ResolveStorageOptions, sizes: number[]): Promise<void>;
131
+ /** Create + announce the managed Turbo identity right before the first upload that needs it.
132
+ * Mutates `opts.arweave.jwk` so the resolved backend can sign. No-op for non-Turbo custody, or
133
+ * when an ETH identity (`.env` key or a wallet-session remote signer) is already selected — that
134
+ * identity pays, so we don't mint an unused managed key. */
135
+ export declare function ensureArweaveIdentityForUpload(opts: ResolveStorageOptions): void;
136
+ /**
137
+ * Pre-upload FUNDS guard for Turbo (arweave). Runs before a real off-chain deploy so a credit
138
+ * shortfall stops *here* — with the exact address + fund options — instead of failing mid-deploy
139
+ * after some txs already landed. Only fires for chargeable files (≥100 KB); free-tier uploads skip
140
+ * it. Best-effort: if the price/balance APIs are unreachable it degrades to a warning, never a false
141
+ * block. `sizes` are per-file byte sizes. The funds decision itself is the storage package's
142
+ * {@link assessTurboFunds}; this is the narration + the throw messages built from its report.
143
+ */
144
+ export declare function assertTurboFundsForUpload(opts: ResolveStorageOptions, sizes: number[], walletAddr?: string): Promise<void>;
145
+ /**
146
+ * Resolve durable locators (`ipfs://<cid>` / `ar://<txid>`) for a project's off-chain-by-hash
147
+ * fields, from THIS machine's content index via the backend. This is the bridge a remote resolver
148
+ * needs: the on-chain commitment is a keccak256, but the CID/txid that addresses the bytes lives in
149
+ * the deployer's local index — ship it so the resolver can point `image` at IPFS without the bytes.
150
+ * Returns `{ "0x<hash>": "ipfs://<cid>" }` (lowercased), empty when nothing is locatable here.
151
+ */
152
+ export declare function collectContentLocators(state: ProjectState, backend: StorageBackend): Promise<Record<string, string>>;
153
+ /** Locators to bridge to a remote resolver: the ones the local deploy already stored, else freshly
154
+ * resolved from this machine's local projection + content index (e.g. `abx add <addr> --remote`
155
+ * for a contract deployed elsewhere on this same machine). */
156
+ export declare function remoteLocators(address: Address, stored: string | undefined, flags: Flags): Promise<Record<string, string>>;
69
157
  //# sourceMappingURL=config.d.ts.map