@reppo/cli 0.5.0 → 0.7.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.
Files changed (56) hide show
  1. package/README.md +5 -2
  2. package/dist/api/agents.d.ts +45 -0
  3. package/dist/api/agents.d.ts.map +1 -0
  4. package/dist/api/agents.js +115 -0
  5. package/dist/api/agents.js.map +1 -0
  6. package/dist/api/subnets.d.ts +45 -0
  7. package/dist/api/subnets.d.ts.map +1 -0
  8. package/dist/api/subnets.js +49 -0
  9. package/dist/api/subnets.js.map +1 -0
  10. package/dist/bin.js +1 -1
  11. package/dist/chain/receipt.d.ts +14 -0
  12. package/dist/chain/receipt.d.ts.map +1 -0
  13. package/dist/chain/receipt.js +14 -0
  14. package/dist/chain/receipt.js.map +1 -0
  15. package/dist/commands/claim-emissions.d.ts.map +1 -1
  16. package/dist/commands/claim-emissions.js +27 -6
  17. package/dist/commands/claim-emissions.js.map +1 -1
  18. package/dist/commands/extend-lock.d.ts.map +1 -1
  19. package/dist/commands/extend-lock.js +46 -6
  20. package/dist/commands/extend-lock.js.map +1 -1
  21. package/dist/commands/grant-access.d.ts.map +1 -1
  22. package/dist/commands/grant-access.js +38 -6
  23. package/dist/commands/grant-access.js.map +1 -1
  24. package/dist/commands/list/datanets.d.ts.map +1 -1
  25. package/dist/commands/list/datanets.js +3 -20
  26. package/dist/commands/list/datanets.js.map +1 -1
  27. package/dist/commands/lock.d.ts.map +1 -1
  28. package/dist/commands/lock.js +43 -6
  29. package/dist/commands/lock.js.map +1 -1
  30. package/dist/commands/mint-pod.d.ts +25 -0
  31. package/dist/commands/mint-pod.d.ts.map +1 -1
  32. package/dist/commands/mint-pod.js +234 -11
  33. package/dist/commands/mint-pod.js.map +1 -1
  34. package/dist/commands/query/datanet.d.ts +10 -0
  35. package/dist/commands/query/datanet.d.ts.map +1 -1
  36. package/dist/commands/query/datanet.js +76 -1
  37. package/dist/commands/query/datanet.js.map +1 -1
  38. package/dist/commands/unlock.d.ts.map +1 -1
  39. package/dist/commands/unlock.js +39 -6
  40. package/dist/commands/unlock.js.map +1 -1
  41. package/dist/commands/vote.d.ts.map +1 -1
  42. package/dist/commands/vote.js +35 -6
  43. package/dist/commands/vote.js.map +1 -1
  44. package/dist/commands/write-cache.d.ts +20 -0
  45. package/dist/commands/write-cache.d.ts.map +1 -0
  46. package/dist/commands/write-cache.js +52 -0
  47. package/dist/commands/write-cache.js.map +1 -0
  48. package/dist/config/load.d.ts +11 -0
  49. package/dist/config/load.d.ts.map +1 -1
  50. package/dist/config/load.js +3 -0
  51. package/dist/config/load.js.map +1 -1
  52. package/dist/state/idempotency.d.ts +2 -1
  53. package/dist/state/idempotency.d.ts.map +1 -1
  54. package/dist/state/idempotency.js +29 -8
  55. package/dist/state/idempotency.js.map +1 -1
  56. package/package.json +1 -1
@@ -20,6 +20,7 @@
20
20
  *
21
21
  * Two-phase write protocol via peekIdempotent.
22
22
  */
23
+ import { existsSync } from 'node:fs';
23
24
  import { Option } from 'clipanion';
24
25
  import { isAddress } from 'viem';
25
26
  import { BaseCommand } from './_base.js';
@@ -27,7 +28,10 @@ import { cliError, emit } from '../output/format.js';
27
28
  import { createClients, nextNonce } from '../chain/clients.js';
28
29
  import { podManager, subnetManager } from '../chain/contracts.js';
29
30
  import { decodeRevert } from '../chain/errors.js';
31
+ import { handleSubmittedCacheDecision } from './write-cache.js';
32
+ import { waitForWriteReceipt } from '../chain/receipt.js';
30
33
  import { begin, markSubmitted, markConfirmed, markFailed, peekIdempotent } from '../state/idempotency.js';
34
+ import { pinDatasetToIpfs, registerPodMetadata, POD_NAME_MAX, POD_DESCRIPTION_MAX, } from '../api/agents.js';
31
35
  const COMMAND = 'mint-pod';
32
36
  export class MintPodCommand extends BaseCommand {
33
37
  static paths = [['mint-pod']];
@@ -49,6 +53,18 @@ export class MintPodCommand extends BaseCommand {
49
53
  to = Option.String('--to', { description: 'Address to mint the pod to (defaults to caller)' });
50
54
  idempotencyKey = Option.String('--idempotency-key');
51
55
  dryRun = Option.Boolean('--dry-run', false);
56
+ // ── Phase-2 metadata publishing (optional) ───────────────────────────
57
+ // Providing --pod-name turns on Phase 2: after the on-chain mint, register
58
+ // the pod's metadata with the Reppo platform so the UI surfaces it.
59
+ podName = Option.String('--pod-name', { description: `Pod display name (≤${POD_NAME_MAX} chars). Providing it enables Phase-2 metadata publishing.` });
60
+ podDescription = Option.String('--pod-description', { description: `Pod description (≤${POD_DESCRIPTION_MAX} chars)` });
61
+ subnetUuid = Option.String('--subnet-uuid', { description: 'Platform subnet UUID (cuid, e.g. cmnhuowns…) — NOT the on-chain --datanet id. Required for publishing.' });
62
+ podUrl = Option.String('--url', { description: 'Primary content URL for the pod (overridden by the dataset URI when a dataset is pinned/provided)' });
63
+ category = Option.String('--category', 'Dataset', { description: 'Pod category label (default "Dataset")' });
64
+ platform = Option.String('--platform', 'reppo-cli', { description: 'Publishing platform label (default "reppo-cli")' });
65
+ dataset = Option.String('--dataset', { description: 'Local dataset file to pin to IPFS (needs PINATA_JWT). Mutually exclusive with --dataset-uri.' });
66
+ datasetUri = Option.String('--dataset-uri', { description: 'Pre-built dataset URL to register as-is (no pinning). Mutually exclusive with --dataset.' });
67
+ agreeToTerms = Option.Boolean('--agree-to-terms', false, { description: 'Required to publish metadata — confirms you accept the Reppo platform terms.' });
52
68
  async execute() {
53
69
  try {
54
70
  const cfg = this.loadConfig();
@@ -70,6 +86,11 @@ export class MintPodCommand extends BaseCommand {
70
86
  throw cliError('INVALID_TOKEN', `--token must be "reppo" or "primary"; got "${this.token}".`);
71
87
  }
72
88
  const functionName = this.token === 'reppo' ? 'mintPodWithREPPO' : 'mintPodWithPrimaryToken';
89
+ // Validate Phase-2 metadata config NOW, before any on-chain write, so
90
+ // bad config (missing UUID, over-length name, numeric subnet id) fails
91
+ // fast instead of after an irreversible mint. Returns null when
92
+ // --pod-name is absent (publishing is opt-in).
93
+ const publish = this.resolvePublishIntent(cfg);
73
94
  const clients = createClients({
74
95
  network: cfg.network,
75
96
  privateKey: pk,
@@ -83,13 +104,35 @@ export class MintPodCommand extends BaseCommand {
83
104
  const args = { datanetId: datanetId.toString(), token: this.token, to: target.toLowerCase() };
84
105
  const decision = await peekIdempotent(this.idempotencyKey, COMMAND, args, this.dryRun);
85
106
  if (decision.kind === 'return-confirmed') {
86
- emit({ ...decision.result, idempotent: true, status: 'confirmed' }, [`(cached, confirmed) tx: ${decision.txHash ?? 'n/a'}`]);
107
+ // The mint is already durable on-chain. If Phase-2 publishing was
108
+ // requested, (re-)run it now against the cached txHash — this is the
109
+ // path the "retry with the same --idempotency-key" hint relies on,
110
+ // since a failed metadata POST never reopens the confirmed mint.
111
+ const cachedTx = decision.txHash;
112
+ const lines = [`(cached, confirmed) tx: ${cachedTx ?? 'n/a'}`];
113
+ const payload = { ...decision.result, idempotent: true, status: 'confirmed' };
114
+ if (publish && cachedTx) {
115
+ const metadata = await this.runPhase2(publish, cachedTx);
116
+ payload.metadata = metadata;
117
+ lines.push(...this.phase2HumanLines(publish, metadata));
118
+ }
119
+ emit(payload, lines);
87
120
  return 0;
88
121
  }
89
122
  if (decision.kind === 'return-submitted') {
90
- emit({ ...decision.result, idempotent: true, status: 'submitted' }, [`(cached, submitted but not confirmed yet) tx: ${decision.txHash ?? 'n/a'}`,
91
- `Re-run after the tx confirms, or check the explorer.`]);
92
- return 0;
123
+ const clients = createClients({
124
+ network: cfg.network,
125
+ privateKey: pk,
126
+ ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
127
+ });
128
+ return handleSubmittedCacheDecision(decision, {
129
+ idempotencyKey: this.idempotencyKey,
130
+ command: COMMAND,
131
+ args,
132
+ network: cfg.network,
133
+ publicClient: clients.publicClient,
134
+ buildResult: () => ({ datanetId: datanetId.toString(), token: this.token, to: target }),
135
+ });
93
136
  }
94
137
  const pm = podManager(cfg.network);
95
138
  const sm = subnetManager(cfg.network);
@@ -120,6 +163,16 @@ export class MintPodCommand extends BaseCommand {
120
163
  to: target,
121
164
  predictedPodId: sim.result.toString(),
122
165
  gas: sim.request.gas?.toString() ?? null,
166
+ // Preview Phase 2 without pinning or POSTing — config already
167
+ // validated above; this just shows what would be published.
168
+ metadata: publish
169
+ ? {
170
+ wouldPublish: true,
171
+ subnetId: publish.subnetUuid,
172
+ podName: publish.podName,
173
+ dataset: publish.dataset.kind,
174
+ }
175
+ : { wouldPublish: false },
123
176
  });
124
177
  return 0;
125
178
  }
@@ -140,36 +193,206 @@ export class MintPodCommand extends BaseCommand {
140
193
  await markFailed(this.idempotencyKey, COMMAND, args, decoded.code);
141
194
  throw cliError(decoded.code, 'mint-pod tx failed to submit', decoded.hint);
142
195
  }
143
- if (this.idempotencyKey)
144
- await markSubmitted(this.idempotencyKey, COMMAND, args, tx);
145
- const receipt = await clients.publicClient.waitForTransactionReceipt({ hash: tx, timeout: 120_000 });
196
+ if (this.idempotencyKey) {
197
+ await markSubmitted(this.idempotencyKey, COMMAND, args, tx, {
198
+ datanetId: datanetId.toString(),
199
+ token: this.token,
200
+ to: target,
201
+ });
202
+ }
203
+ const receipt = await waitForWriteReceipt(clients.publicClient, tx);
146
204
  if (receipt.status === 'reverted') {
147
205
  if (this.idempotencyKey)
148
206
  await markFailed(this.idempotencyKey, COMMAND, args, 'TX_REVERTED', tx);
149
207
  throw cliError('TX_REVERTED', `mint-pod tx reverted: ${tx}`);
150
208
  }
209
+ const basescanUrl = basescanUrlFor(tx);
151
210
  const result = {
152
211
  txHash: tx,
153
212
  datanetId: datanetId.toString(),
154
213
  token: this.token,
155
214
  to: target,
156
215
  block: receipt.blockNumber.toString(),
157
- basescanUrl: basescanUrlFor(tx),
216
+ basescanUrl,
158
217
  };
218
+ // Mark the on-chain mint confirmed BEFORE Phase 2. The tx is durable;
219
+ // a later Phase-2 failure must never reopen the mint for re-broadcast.
159
220
  if (this.idempotencyKey)
160
221
  await markConfirmed(this.idempotencyKey, COMMAND, args, result, tx);
161
- emit(result, [
222
+ const humanLines = [
162
223
  `✓ Minted pod into datanet ${datanetId} (paid in ${this.token})`,
163
224
  ` to: ${target}`,
164
- ` tx: ${result.basescanUrl}`,
225
+ ` tx: ${basescanUrl}`,
165
226
  ` block: ${receipt.blockNumber}`,
166
227
  ` (new podId: check the explorer or run \`reppo query pod <id>\` to verify)`,
167
- ]);
228
+ ];
229
+ // ── Phase 2: pin dataset (optional) + register metadata ──────────
230
+ // Decoupled from the mint: runPhase2 never throws, so a pin/POST
231
+ // failure leaves the mint reported as success with metadata.published
232
+ // = false. The agent re-runs with the same --idempotency-key to retry
233
+ // (the return-confirmed branch above re-runs Phase 2 against the
234
+ // cached txHash).
235
+ if (publish) {
236
+ const metadata = await this.runPhase2(publish, tx);
237
+ result.metadata = metadata;
238
+ humanLines.push(...this.phase2HumanLines(publish, metadata));
239
+ }
240
+ emit(result, humanLines);
168
241
  return 0;
169
242
  }
170
243
  catch (err) {
171
244
  this.handleError(err);
172
245
  }
173
246
  }
247
+ /**
248
+ * Validate Phase-2 metadata flags and produce a resolved `PublishIntent`,
249
+ * or `null` when --pod-name is absent (publishing is opt-in). Throws
250
+ * `cliError` on any invalid/incomplete config so the caller fails BEFORE
251
+ * the on-chain mint. Does no network I/O.
252
+ */
253
+ resolvePublishIntent(cfg) {
254
+ const name = this.podName?.trim();
255
+ if (!name)
256
+ return null;
257
+ if (name.length > POD_NAME_MAX) {
258
+ throw cliError('INVALID_POD_NAME', `--pod-name must be ≤${POD_NAME_MAX} chars; got ${name.length}.`);
259
+ }
260
+ const description = (this.podDescription ?? '').trim();
261
+ if (description.length > POD_DESCRIPTION_MAX) {
262
+ throw cliError('INVALID_POD_DESCRIPTION', `--pod-description must be ≤${POD_DESCRIPTION_MAX} chars; got ${description.length}.`);
263
+ }
264
+ const subnetUuid = this.subnetUuid?.trim();
265
+ if (!subnetUuid) {
266
+ throw cliError('MISSING_SUBNET_UUID', '--subnet-uuid is required to publish pod metadata.', 'Pass the platform subnet UUID (cuid like cmnhuowns…), visible in the datanet URL — NOT the on-chain --datanet id.');
267
+ }
268
+ // The platform metadata API needs the subnet UUID (cuid), not the numeric
269
+ // on-chain id. A numeric value passes the platform's Zod schema but 500s
270
+ // in the downstream UUID lookup — reject it loudly up front.
271
+ if (/^[0-9]+$/.test(subnetUuid)) {
272
+ throw cliError('INVALID_SUBNET_UUID', `--subnet-uuid "${subnetUuid}" looks like an on-chain datanet id, not a platform UUID.`, 'The platform metadata API needs the subnet UUID (cuid like cmnhuowns…). The numeric id passes validation but fails downstream with HTTP 500.');
273
+ }
274
+ if (!this.agreeToTerms) {
275
+ throw cliError('MISSING_AGREEMENT', 'Publishing pod metadata requires --agree-to-terms.', 'Pass --agree-to-terms to confirm you accept the Reppo platform terms.');
276
+ }
277
+ const agentId = cfg.agentId?.trim();
278
+ if (!agentId) {
279
+ throw cliError('MISSING_AGENT_ID', 'REPPO_AGENT_ID is required to publish pod metadata.', 'Run `reppo register-agent` to obtain an agent id + apiKey, then set REPPO_AGENT_ID.');
280
+ }
281
+ const agentApiKey = cfg.agentApiKey?.trim();
282
+ if (!agentApiKey) {
283
+ throw cliError('MISSING_AGENT_API_KEY', 'REPPO_AGENT_API_KEY (or REPPO_API_KEY) is required to publish pod metadata.', 'Use the apiKey returned by `reppo register-agent`.');
284
+ }
285
+ const hasDataset = this.dataset !== undefined && this.dataset.trim() !== '';
286
+ const hasDatasetUri = this.datasetUri !== undefined && this.datasetUri.trim() !== '';
287
+ if (hasDataset && hasDatasetUri) {
288
+ throw cliError('INVALID_DATASET_ARGS', '--dataset and --dataset-uri are mutually exclusive.', 'Pass --dataset <file> to pin a local dataset, or --dataset-uri <url> to register an existing URL.');
289
+ }
290
+ let dataset;
291
+ if (hasDataset) {
292
+ const path = this.dataset.trim();
293
+ if (!existsSync(path)) {
294
+ throw cliError('DATASET_FILE_NOT_FOUND', `Dataset file not found: ${path}`);
295
+ }
296
+ const pinataJwt = cfg.pinataJwt?.trim();
297
+ if (!pinataJwt) {
298
+ throw cliError('MISSING_PINATA_JWT', 'PINATA_JWT is required to pin a --dataset file.', 'Set PINATA_JWT, or pass --dataset-uri <url> to register an existing URL without pinning.');
299
+ }
300
+ dataset = { kind: 'pin', path, pinataJwt };
301
+ }
302
+ else if (hasDatasetUri) {
303
+ dataset = { kind: 'uri', uri: this.datasetUri.trim() };
304
+ }
305
+ else {
306
+ dataset = { kind: 'none' };
307
+ }
308
+ return {
309
+ subnetUuid,
310
+ podName: name,
311
+ podDescription: description,
312
+ url: (this.podUrl ?? '').trim(),
313
+ category: this.category,
314
+ platform: this.platform,
315
+ agentId,
316
+ agentApiKey,
317
+ dataset,
318
+ };
319
+ }
320
+ /** Human-readable summary lines for a Phase-2 outcome (success or failure). */
321
+ phase2HumanLines(intent, metadata) {
322
+ if (metadata.published) {
323
+ const lines = [`✓ Registered pod metadata "${intent.podName}" (subnet ${intent.subnetUuid})`];
324
+ if (metadata.datasetUri)
325
+ lines.push(` dataset: ${metadata.datasetUri}`);
326
+ return lines;
327
+ }
328
+ return [
329
+ `⚠ Metadata NOT published (${metadata.stage}): ${metadata.error?.code ?? 'UNKNOWN'} — mint is durable on-chain.`,
330
+ ` Re-run with the same --idempotency-key to retry Phase 2.`,
331
+ ];
332
+ }
333
+ /**
334
+ * Execute Phase 2: pin the dataset (if any), then POST metadata. NEVER
335
+ * throws — returns a structured result so a Phase-2 failure can't crash
336
+ * the command after a durable on-chain mint. `published` is true only on a
337
+ * 2xx registration response.
338
+ */
339
+ async runPhase2(intent, txHash) {
340
+ let datasetUri = '';
341
+ try {
342
+ if (intent.dataset.kind === 'pin') {
343
+ datasetUri = await pinDatasetToIpfs(intent.dataset.path, intent.dataset.pinataJwt);
344
+ }
345
+ else if (intent.dataset.kind === 'uri') {
346
+ datasetUri = intent.dataset.uri;
347
+ }
348
+ }
349
+ catch (e) {
350
+ const err = e;
351
+ return {
352
+ published: false,
353
+ stage: 'ipfs-pin',
354
+ error: { code: err.code ?? 'IPFS_PIN_FAILED', message: err.message ?? String(e) },
355
+ };
356
+ }
357
+ // The dataset URI, when present, is the pod's primary content link and
358
+ // its downloadable-file slot (mirrors the aeon postprocess body).
359
+ const body = {
360
+ txHash,
361
+ subnetId: intent.subnetUuid,
362
+ podName: intent.podName,
363
+ podDescription: intent.podDescription,
364
+ url: datasetUri || intent.url,
365
+ platform: intent.platform,
366
+ category: intent.category,
367
+ agreeToTerms: true,
368
+ imageURL: '',
369
+ thumbnailURL: '',
370
+ pdfURL: datasetUri || '',
371
+ videoURL: '',
372
+ };
373
+ const datasetField = datasetUri ? { datasetUri } : {};
374
+ try {
375
+ const res = await registerPodMetadata(intent.agentId, intent.agentApiKey, body);
376
+ if (res.ok) {
377
+ return { published: true, stage: 'register', httpStatus: res.status, ...datasetField };
378
+ }
379
+ return {
380
+ published: false,
381
+ stage: 'register',
382
+ httpStatus: res.status,
383
+ error: { code: 'PLATFORM_API_ERROR', message: res.detail || `HTTP ${res.status}` },
384
+ ...datasetField,
385
+ };
386
+ }
387
+ catch (e) {
388
+ const err = e;
389
+ return {
390
+ published: false,
391
+ stage: 'register',
392
+ error: { code: err.code ?? 'PLATFORM_API_UNREACHABLE', message: err.message ?? String(e) },
393
+ ...datasetField,
394
+ };
395
+ }
396
+ }
174
397
  }
175
398
  //# sourceMappingURL=mint-pod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mint-pod.js","sourceRoot":"","sources":["../../src/commands/mint-pod.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mint-pod.js","sourceRoot":"","sources":["../../src/commands/mint-pod.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,15 @@ export declare class QueryDatanetCommand extends BaseCommand {
6
6
  for_: string | undefined;
7
7
  execute(): Promise<number>;
8
8
  private resolveCallerAddress;
9
+ /**
10
+ * Resolve the off-chain catalog row for this datanet by its on-chain id
11
+ * (`tokenId`). Best-effort: returns `{ unavailable }` on a catalog outage
12
+ * or a no-match, never throwing — the on-chain answer is authoritative and
13
+ * must survive a flaky platform API.
14
+ */
15
+ private fetchMetadata;
16
+ private toMetadata;
17
+ /** Human-mode lines for the catalog metadata block. */
18
+ private metadataLines;
9
19
  }
10
20
  //# sourceMappingURL=datanet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datanet.d.ts","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW1C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAgB,KAAK,aAA0B;IAE/C,OAAgB,KAAK,4BAUlB;IAEH,OAAO,SAAqC;IAC5C,IAAI,qBAA+H;IAE7H,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAoFhC,OAAO,CAAC,oBAAoB;CAU7B"}
1
+ {"version":3,"file":"datanet.d.ts","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgC1C,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,OAAgB,KAAK,aAA0B;IAE/C,OAAgB,KAAK,4BAUlB;IAEH,OAAO,SAAqC;IAC5C,IAAI,qBAA+H;IAE7H,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA6FhC,OAAO,CAAC,oBAAoB;IAW5B;;;;;OAKG;YACW,aAAa;IAW3B,OAAO,CAAC,UAAU;IAsBlB,uDAAuD;IACvD,OAAO,CAAC,aAAa;CAyBtB"}
@@ -23,6 +23,8 @@ import { BaseCommand } from '../_base.js';
23
23
  import { cliError, emit } from '../../output/format.js';
24
24
  import { createReadClient } from '../../chain/clients.js';
25
25
  import { trySubnetManager } from '../../chain/contracts.js';
26
+ import { DEFAULT_PUBLIC_API_URL } from '../../api/public.js';
27
+ import { fetchSubnetByTokenId, numericToString } from '../../api/subnets.js';
26
28
  function unavailable(reason) {
27
29
  return { unavailable: reason };
28
30
  }
@@ -51,6 +53,10 @@ export class QueryDatanetCommand extends BaseCommand {
51
53
  catch {
52
54
  throw cliError('INVALID_DATANET_ID', `Datanet id must be a non-negative integer; got "${this.datanet}".`);
53
55
  }
56
+ // Off-chain catalog metadata (name, description, token, emissions,
57
+ // onboarding). Best-effort: a catalog outage or a datanet absent from
58
+ // the public catalog must NOT break the authoritative on-chain answer.
59
+ const metadata = await this.fetchMetadata(datanetId.toString());
54
60
  const client = createReadClient({ network: cfg.network, ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}) });
55
61
  const sm = trySubnetManager(cfg.network);
56
62
  if (!sm) {
@@ -60,10 +66,12 @@ export class QueryDatanetCommand extends BaseCommand {
60
66
  network: cfg.network,
61
67
  valid: unavailable(reason),
62
68
  accessFeeREPPO: unavailable(reason),
69
+ metadata,
63
70
  }, [
64
71
  `Datanet: ${datanetId}`,
65
72
  `Network: ${cfg.network}`,
66
- `(unavailable: ${reason})`,
73
+ `(on-chain unavailable: ${reason})`,
74
+ ...this.metadataLines(metadata),
67
75
  ]);
68
76
  return 0;
69
77
  }
@@ -92,6 +100,7 @@ export class QueryDatanetCommand extends BaseCommand {
92
100
  valid,
93
101
  accessFeeREPPO,
94
102
  ...(callerAccess ? { callerAccess } : {}),
103
+ metadata,
95
104
  };
96
105
  const feeFmt = 'unavailable' in accessFeeREPPO
97
106
  ? `(unavailable: ${accessFeeREPPO.unavailable})`
@@ -106,6 +115,7 @@ export class QueryDatanetCommand extends BaseCommand {
106
115
  lines.push(`Caller: ${callerAccess.address}`);
107
116
  lines.push(`Caller access: ${callerAccess.hasAccess}`);
108
117
  }
118
+ lines.push(...this.metadataLines(metadata));
109
119
  emit(result, lines);
110
120
  return 0;
111
121
  }
@@ -124,5 +134,70 @@ export class QueryDatanetCommand extends BaseCommand {
124
134
  return privateKeyToAddress(pk);
125
135
  return undefined;
126
136
  }
137
+ /**
138
+ * Resolve the off-chain catalog row for this datanet by its on-chain id
139
+ * (`tokenId`). Best-effort: returns `{ unavailable }` on a catalog outage
140
+ * or a no-match, never throwing — the on-chain answer is authoritative and
141
+ * must survive a flaky platform API.
142
+ */
143
+ async fetchMetadata(tokenId) {
144
+ const baseUrl = process.env.REPPO_PUBLIC_API_URL ?? DEFAULT_PUBLIC_API_URL;
145
+ try {
146
+ const row = await fetchSubnetByTokenId(baseUrl, tokenId);
147
+ if (!row)
148
+ return unavailable('datanet not found in the public catalog');
149
+ return this.toMetadata(row);
150
+ }
151
+ catch (e) {
152
+ return unavailable(`catalog fetch failed: ${e.message}`);
153
+ }
154
+ }
155
+ toMetadata(s) {
156
+ return {
157
+ subnetUuid: s.id ?? '',
158
+ name: s.subnetName ?? '',
159
+ description: s.subnetDescription ?? '',
160
+ status: s.status ?? 'UNKNOWN',
161
+ nativeToken: {
162
+ address: s.nativeTokenAddress ?? '',
163
+ symbol: s.nativeTokenSymbol ?? '',
164
+ decimals: typeof s.nativeTokenDecimals === 'number' ? s.nativeTokenDecimals : 0,
165
+ },
166
+ emissionsPerEpochREPPO: numericToString(s.emissionsPerEpochREPPO),
167
+ emissionsPerEpochPrimaryToken: numericToString(s.emissionsPerEpochPrimaryToken),
168
+ upVoteVolume: numericToString(s.upVoteVolume),
169
+ downVoteVolume: numericToString(s.downVoteVolume),
170
+ onboardingPublishers: s.onboardingPublishers ?? '',
171
+ onboardingVoters: s.onboardingVoters ?? '',
172
+ thumbnailUrl: s.thumbnailUrl ?? '',
173
+ isABTestingSubnet: s.isABTestingSubnet ?? false,
174
+ };
175
+ }
176
+ /** Human-mode lines for the catalog metadata block. */
177
+ metadataLines(m) {
178
+ if ('unavailable' in m) {
179
+ return [`Metadata: (unavailable: ${m.unavailable})`];
180
+ }
181
+ const lines = [
182
+ ``,
183
+ `Name: ${m.name}`,
184
+ `Status: ${m.status}`,
185
+ `Token: ${m.nativeToken.symbol} (${m.nativeToken.decimals} decimals) ${m.nativeToken.address}`,
186
+ `Emissions: ${m.emissionsPerEpochREPPO} REPPO/epoch` +
187
+ (m.emissionsPerEpochPrimaryToken !== '0' ? ` + ${m.emissionsPerEpochPrimaryToken} primary/epoch` : ''),
188
+ `Votes: ↑${m.upVoteVolume} / ↓${m.downVoteVolume}`,
189
+ `Subnet UUID: ${m.subnetUuid} (use as --subnet-uuid for mint-pod publishing)`,
190
+ ];
191
+ if (m.description.trim()) {
192
+ lines.push(``, `Description:`, m.description.trim());
193
+ }
194
+ if (m.onboardingPublishers.trim()) {
195
+ lines.push(``, `Onboarding — publishers:`, m.onboardingPublishers.trim());
196
+ }
197
+ if (m.onboardingVoters.trim()) {
198
+ lines.push(``, `Onboarding — voters:`, m.onboardingVoters.trim());
199
+ }
200
+ return lines;
201
+ }
127
202
  }
128
203
  //# sourceMappingURL=datanet.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datanet.js","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datanet.js","sourceRoot":"","sources":["../../../src/commands/query/datanet.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AASzC,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAgB,KAAK,aAAgB;IAErC,OAAgB,KAAK,4BAYlB;IAEH,QAAQ,SAAqC;IAC7C,EAAE,qBAAwG;IAC1G,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA6JjC"}
1
+ {"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAWzC,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAgB,KAAK,aAAgB;IAErC,OAAgB,KAAK,4BAYlB;IAEH,QAAQ,SAAqC;IAC7C,EAAE,qBAAwG;IAC1G,cAAc,qBAAsC;IACpD,MAAM,UAAsC;IAEtC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA2LjC"}
@@ -26,6 +26,8 @@ import { cliError, emit } from '../output/format.js';
26
26
  import { createClients, nextNonce } from '../chain/clients.js';
27
27
  import { veReppo } from '../chain/contracts.js';
28
28
  import { decodeRevert } from '../chain/errors.js';
29
+ import { handleSubmittedCacheDecision } from './write-cache.js';
30
+ import { waitForWriteReceipt } from '../chain/receipt.js';
29
31
  import { begin, markSubmitted, markConfirmed, markFailed, peekIdempotent } from '../state/idempotency.js';
30
32
  const COMMAND = 'unlock';
31
33
  export class UnlockCommand extends BaseCommand {
@@ -78,9 +80,35 @@ export class UnlockCommand extends BaseCommand {
78
80
  return 0;
79
81
  }
80
82
  if (decision.kind === 'return-submitted') {
81
- emit({ ...decision.result, idempotent: true, status: 'submitted' }, [`(cached, submitted but not confirmed yet) tx: ${decision.txHash ?? 'n/a'}`,
82
- `Re-run after the tx confirms, or check the explorer.`]);
83
- return 0;
83
+ const clients = createClients({
84
+ network: cfg.network,
85
+ privateKey: pk,
86
+ ...(cfg.rpcUrl ? { rpcUrl: cfg.rpcUrl } : {}),
87
+ });
88
+ return handleSubmittedCacheDecision(decision, {
89
+ idempotencyKey: this.idempotencyKey,
90
+ command: COMMAND,
91
+ args,
92
+ network: cfg.network,
93
+ publicClient: clients.publicClient,
94
+ buildResult: async () => {
95
+ try {
96
+ const vrLocal = veReppo(cfg.network);
97
+ const lockup = await clients.publicClient.readContract({
98
+ address: vrLocal.address, abi: vrLocal.abi, functionName: 'lockupData', args: [lockupId],
99
+ });
100
+ const [amount] = lockup;
101
+ return {
102
+ lockupId: args.lockupId,
103
+ to: args.to,
104
+ amount: { raw: amount.toString(), formatted: formatUnits(amount, 18) },
105
+ };
106
+ }
107
+ catch {
108
+ return { lockupId: args.lockupId, to: args.to };
109
+ }
110
+ },
111
+ });
84
112
  }
85
113
  // Throwing variant — write commands must fail loud on TBD.
86
114
  const vr = veReppo(cfg.network);
@@ -145,9 +173,14 @@ export class UnlockCommand extends BaseCommand {
145
173
  throw cliError(decoded.code, 'unlock tx failed to submit', decoded.hint);
146
174
  }
147
175
  // markSubmitted BEFORE waitForReceipt — closes the retry-resend window.
148
- if (this.idempotencyKey)
149
- await markSubmitted(this.idempotencyKey, COMMAND, args, tx);
150
- const receipt = await clients.publicClient.waitForTransactionReceipt({ hash: tx, timeout: 120_000 });
176
+ if (this.idempotencyKey) {
177
+ await markSubmitted(this.idempotencyKey, COMMAND, args, tx, {
178
+ lockupId: lockupId.toString(),
179
+ to: target,
180
+ amount: { raw: amount.toString(), formatted: formatUnits(amount, 18) },
181
+ });
182
+ }
183
+ const receipt = await waitForWriteReceipt(clients.publicClient, tx);
151
184
  if (receipt.status === 'reverted') {
152
185
  if (this.idempotencyKey)
153
186
  await markFailed(this.idempotencyKey, COMMAND, args, 'TX_REVERTED', tx);