@jinn-network/client 0.1.0-canary.adfd078d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +162 -0
- package/deployments/deployment-phase1a-l2-baseSepolia-fast.json +32 -0
- package/deployments/deployment-phase1a-token-baseSepolia-fast.json +27 -0
- package/deployments/deployment-phase1b-mech-baseSepolia-fast.json +26 -0
- package/deployments/deployment-stolas-l2-baseSepolia-fast.json +35 -0
- package/dist/adapters/adapter.d.ts +11 -0
- package/dist/adapters/adapter.js +2 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/local/adapter.d.ts +20 -0
- package/dist/adapters/local/adapter.js +146 -0
- package/dist/adapters/local/adapter.js.map +1 -0
- package/dist/adapters/mech/adapter.d.ts +29 -0
- package/dist/adapters/mech/adapter.js +332 -0
- package/dist/adapters/mech/adapter.js.map +1 -0
- package/dist/adapters/mech/claim-policy.d.ts +40 -0
- package/dist/adapters/mech/claim-policy.js +104 -0
- package/dist/adapters/mech/claim-policy.js.map +1 -0
- package/dist/adapters/mech/contracts.d.ts +44 -0
- package/dist/adapters/mech/contracts.js +323 -0
- package/dist/adapters/mech/contracts.js.map +1 -0
- package/dist/adapters/mech/ipfs.d.ts +43 -0
- package/dist/adapters/mech/ipfs.js +142 -0
- package/dist/adapters/mech/ipfs.js.map +1 -0
- package/dist/adapters/mech/safe.d.ts +15 -0
- package/dist/adapters/mech/safe.js +113 -0
- package/dist/adapters/mech/safe.js.map +1 -0
- package/dist/adapters/mech/types.d.ts +561 -0
- package/dist/adapters/mech/types.js +340 -0
- package/dist/adapters/mech/types.js.map +1 -0
- package/dist/api/balance-build.d.ts +22 -0
- package/dist/api/balance-build.js +37 -0
- package/dist/api/balance-build.js.map +1 -0
- package/dist/api/fleet-build.d.ts +62 -0
- package/dist/api/fleet-build.js +91 -0
- package/dist/api/fleet-build.js.map +1 -0
- package/dist/api/gather-status.d.ts +20 -0
- package/dist/api/gather-status.js +137 -0
- package/dist/api/gather-status.js.map +1 -0
- package/dist/api/history-build.d.ts +32 -0
- package/dist/api/history-build.js +48 -0
- package/dist/api/history-build.js.map +1 -0
- package/dist/api/peers.d.ts +27 -0
- package/dist/api/peers.js +94 -0
- package/dist/api/peers.js.map +1 -0
- package/dist/api/rewards-build.d.ts +20 -0
- package/dist/api/rewards-build.js +42 -0
- package/dist/api/rewards-build.js.map +1 -0
- package/dist/api/server.d.ts +34 -0
- package/dist/api/server.js +130 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/status-build.d.ts +92 -0
- package/dist/api/status-build.js +175 -0
- package/dist/api/status-build.js.map +1 -0
- package/dist/api/status-rollup-build.d.ts +36 -0
- package/dist/api/status-rollup-build.js +69 -0
- package/dist/api/status-rollup-build.js.map +1 -0
- package/dist/auth/erc8128.d.ts +43 -0
- package/dist/auth/erc8128.js +88 -0
- package/dist/auth/erc8128.js.map +1 -0
- package/dist/bin/jinn.d.ts +11 -0
- package/dist/bin/jinn.js +20 -0
- package/dist/bin/jinn.js.map +1 -0
- package/dist/build-meta.json +3 -0
- package/dist/chain-read-errors.d.ts +9 -0
- package/dist/chain-read-errors.js +43 -0
- package/dist/chain-read-errors.js.map +1 -0
- package/dist/cli/action.d.ts +26 -0
- package/dist/cli/action.js +56 -0
- package/dist/cli/action.js.map +1 -0
- package/dist/cli/command.d.ts +62 -0
- package/dist/cli/command.js +29 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.js +46 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +3 -0
- package/dist/cli/commands/bootstrap.js +165 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/claim-rewards.d.ts +3 -0
- package/dist/cli/commands/claim-rewards.js +121 -0
- package/dist/cli/commands/claim-rewards.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.js +151 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/fleet-scale.d.ts +3 -0
- package/dist/cli/commands/fleet-scale.js +449 -0
- package/dist/cli/commands/fleet-scale.js.map +1 -0
- package/dist/cli/commands/fleet.d.ts +3 -0
- package/dist/cli/commands/fleet.js +45 -0
- package/dist/cli/commands/fleet.js.map +1 -0
- package/dist/cli/commands/fund-requirements.d.ts +3 -0
- package/dist/cli/commands/fund-requirements.js +139 -0
- package/dist/cli/commands/fund-requirements.js.map +1 -0
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.js +61 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.js +91 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/keys-backup.d.ts +3 -0
- package/dist/cli/commands/keys-backup.js +107 -0
- package/dist/cli/commands/keys-backup.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.js +69 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/rewards.d.ts +3 -0
- package/dist/cli/commands/rewards.js +54 -0
- package/dist/cli/commands/rewards.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.js +96 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.js +82 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/submit-intent.d.ts +3 -0
- package/dist/cli/commands/submit-intent.js +169 -0
- package/dist/cli/commands/submit-intent.js.map +1 -0
- package/dist/cli/commands/version.d.ts +3 -0
- package/dist/cli/commands/version.js +114 -0
- package/dist/cli/commands/version.js.map +1 -0
- package/dist/cli/commands/withdraw.d.ts +3 -0
- package/dist/cli/commands/withdraw.js +181 -0
- package/dist/cli/commands/withdraw.js.map +1 -0
- package/dist/cli/deployment-digest.d.ts +10 -0
- package/dist/cli/deployment-digest.js +25 -0
- package/dist/cli/deployment-digest.js.map +1 -0
- package/dist/cli/execution-context.d.ts +50 -0
- package/dist/cli/execution-context.js +154 -0
- package/dist/cli/execution-context.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.js +37 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.js +132 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/introspection-context.d.ts +10 -0
- package/dist/cli/introspection-context.js +60 -0
- package/dist/cli/introspection-context.js.map +1 -0
- package/dist/cli/output.d.ts +36 -0
- package/dist/cli/output.js +35 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/password.d.ts +12 -0
- package/dist/cli/password.js +51 -0
- package/dist/cli/password.js.map +1 -0
- package/dist/config.d.ts +174 -0
- package/dist/config.js +252 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/creator.d.ts +24 -0
- package/dist/daemon/creator.js +80 -0
- package/dist/daemon/creator.js.map +1 -0
- package/dist/daemon/daemon.d.ts +60 -0
- package/dist/daemon/daemon.js +158 -0
- package/dist/daemon/daemon.js.map +1 -0
- package/dist/daemon/delivery-watcher.d.ts +10 -0
- package/dist/daemon/delivery-watcher.js +37 -0
- package/dist/daemon/delivery-watcher.js.map +1 -0
- package/dist/daemon/restorer.d.ts +19 -0
- package/dist/daemon/restorer.js +82 -0
- package/dist/daemon/restorer.js.map +1 -0
- package/dist/daemon/reward-claim-loop.d.ts +38 -0
- package/dist/daemon/reward-claim-loop.js +48 -0
- package/dist/daemon/reward-claim-loop.js.map +1 -0
- package/dist/discovery/registry.d.ts +43 -0
- package/dist/discovery/registry.js +104 -0
- package/dist/discovery/registry.js.map +1 -0
- package/dist/discovery/subgraph.d.ts +37 -0
- package/dist/discovery/subgraph.js +87 -0
- package/dist/discovery/subgraph.js.map +1 -0
- package/dist/earning/bootstrap.d.ts +79 -0
- package/dist/earning/bootstrap.js +989 -0
- package/dist/earning/bootstrap.js.map +1 -0
- package/dist/earning/contracts.d.ts +431 -0
- package/dist/earning/contracts.js +518 -0
- package/dist/earning/contracts.js.map +1 -0
- package/dist/earning/evidence-simhash.d.ts +59 -0
- package/dist/earning/evidence-simhash.js +87 -0
- package/dist/earning/evidence-simhash.js.map +1 -0
- package/dist/earning/fleet-display-index.d.ts +8 -0
- package/dist/earning/fleet-display-index.js +12 -0
- package/dist/earning/fleet-display-index.js.map +1 -0
- package/dist/earning/fleet-retire.d.ts +28 -0
- package/dist/earning/fleet-retire.js +75 -0
- package/dist/earning/fleet-retire.js.map +1 -0
- package/dist/earning/jinn-rewards.d.ts +62 -0
- package/dist/earning/jinn-rewards.js +81 -0
- package/dist/earning/jinn-rewards.js.map +1 -0
- package/dist/earning/next-service-index.d.ts +4 -0
- package/dist/earning/next-service-index.js +7 -0
- package/dist/earning/next-service-index.js.map +1 -0
- package/dist/earning/orphan-sweep.d.ts +33 -0
- package/dist/earning/orphan-sweep.js +157 -0
- package/dist/earning/orphan-sweep.js.map +1 -0
- package/dist/earning/reconcile.d.ts +37 -0
- package/dist/earning/reconcile.js +216 -0
- package/dist/earning/reconcile.js.map +1 -0
- package/dist/earning/safe-adapter.d.ts +70 -0
- package/dist/earning/safe-adapter.js +228 -0
- package/dist/earning/safe-adapter.js.map +1 -0
- package/dist/earning/stolas-claim.d.ts +47 -0
- package/dist/earning/stolas-claim.js +115 -0
- package/dist/earning/stolas-claim.js.map +1 -0
- package/dist/earning/store.d.ts +36 -0
- package/dist/earning/store.js +156 -0
- package/dist/earning/store.js.map +1 -0
- package/dist/earning/types.d.ts +123 -0
- package/dist/earning/types.js +64 -0
- package/dist/earning/types.js.map +1 -0
- package/dist/earning/viem-clients.d.ts +9 -0
- package/dist/earning/viem-clients.js +22 -0
- package/dist/earning/viem-clients.js.map +1 -0
- package/dist/earning/wallet.d.ts +20 -0
- package/dist/earning/wallet.js +103 -0
- package/dist/earning/wallet.js.map +1 -0
- package/dist/errors/envelope.d.ts +41 -0
- package/dist/errors/envelope.js +48 -0
- package/dist/errors/envelope.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +32 -0
- package/dist/main.js +281 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp/server.d.ts +14 -0
- package/dist/mcp/server.js +205 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/operator-errors.d.ts +16 -0
- package/dist/operator-errors.js +88 -0
- package/dist/operator-errors.js.map +1 -0
- package/dist/preflight/claude-binary.d.ts +19 -0
- package/dist/preflight/claude-binary.js +44 -0
- package/dist/preflight/claude-binary.js.map +1 -0
- package/dist/preflight/claude-invocation-envelope.d.ts +11 -0
- package/dist/preflight/claude-invocation-envelope.js +67 -0
- package/dist/preflight/claude-invocation-envelope.js.map +1 -0
- package/dist/runner/claude.d.ts +15 -0
- package/dist/runner/claude.js +193 -0
- package/dist/runner/claude.js.map +1 -0
- package/dist/runner/runner.d.ts +11 -0
- package/dist/runner/runner.js +2 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/runner/simple.d.ts +8 -0
- package/dist/runner/simple.js +11 -0
- package/dist/runner/simple.js.map +1 -0
- package/dist/store/store.d.ts +74 -0
- package/dist/store/store.js +173 -0
- package/dist/store/store.js.map +1 -0
- package/dist/tx-retry.d.ts +55 -0
- package/dist/tx-retry.js +214 -0
- package/dist/tx-retry.js.map +1 -0
- package/dist/types/desired-state.d.ts +41 -0
- package/dist/types/desired-state.js +16 -0
- package/dist/types/desired-state.js.map +1 -0
- package/dist/types/errors.d.ts +8 -0
- package/dist/types/errors.js +17 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/withdraw/args.d.ts +29 -0
- package/dist/withdraw/args.js +198 -0
- package/dist/withdraw/args.js.map +1 -0
- package/dist/withdraw/run-withdraw-plan.d.ts +21 -0
- package/dist/withdraw/run-withdraw-plan.js +257 -0
- package/dist/withdraw/run-withdraw-plan.js.map +1 -0
- package/dist/x402/acquire.d.ts +6 -0
- package/dist/x402/acquire.js +32 -0
- package/dist/x402/acquire.js.map +1 -0
- package/dist/x402/facilitator.d.ts +11 -0
- package/dist/x402/facilitator.js +52 -0
- package/dist/x402/facilitator.js.map +1 -0
- package/dist/x402/handler.d.ts +15 -0
- package/dist/x402/handler.js +40 -0
- package/dist/x402/handler.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for action verbs (verbs that emit transactions).
|
|
3
|
+
*
|
|
4
|
+
* Contract: spec/2026-04-14-client-surface.md §7.3 (dry-run / yes).
|
|
5
|
+
*/
|
|
6
|
+
import { buildEnvelope, EXIT_CODES } from '../errors/envelope.js';
|
|
7
|
+
import { emitResult } from './output.js';
|
|
8
|
+
/**
|
|
9
|
+
* Ensure an action is confirmed before proceeding.
|
|
10
|
+
*
|
|
11
|
+
* - Dry run → always permitted, returns true without any check.
|
|
12
|
+
* - `--yes` → permitted regardless of TTY state.
|
|
13
|
+
* - Non-TTY without `--yes` → emits invalid_invocation (exit 11) and returns false.
|
|
14
|
+
* - TTY without `--yes` → v1 never prompts; emits invalid_invocation and returns false.
|
|
15
|
+
*/
|
|
16
|
+
export function ensureConfirmed(ctx, flags) {
|
|
17
|
+
if (flags.dryRun)
|
|
18
|
+
return true;
|
|
19
|
+
if (flags.yes)
|
|
20
|
+
return true;
|
|
21
|
+
const envelope = buildEnvelope({
|
|
22
|
+
code: 'invalid_invocation',
|
|
23
|
+
message: 'This action requires explicit confirmation.',
|
|
24
|
+
hint: 'Re-run with --yes to confirm, or --dry-run to see what would happen without executing.',
|
|
25
|
+
exampleCli: 'jinn <verb> --dry-run',
|
|
26
|
+
details: { field: 'confirmation', expected: '--yes or --dry-run' },
|
|
27
|
+
});
|
|
28
|
+
ctx.writer.write(JSON.stringify(envelope) + '\n');
|
|
29
|
+
ctx.exit(EXIT_CODES.invalid_invocation);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/** Emit a dry-run JSON response (success path; no process exit). */
|
|
33
|
+
export function emitDryRun(ctx, payload) {
|
|
34
|
+
const body = {
|
|
35
|
+
schemaVersion: 1,
|
|
36
|
+
generatedAt: new Date().toISOString(),
|
|
37
|
+
dryRun: true,
|
|
38
|
+
...payload,
|
|
39
|
+
};
|
|
40
|
+
emitResult(body, (v) => {
|
|
41
|
+
const value = v;
|
|
42
|
+
return [
|
|
43
|
+
`Dry run: ${value.verb}`,
|
|
44
|
+
value.description,
|
|
45
|
+
`Planned steps: ${value.plan.length}`,
|
|
46
|
+
JSON.stringify(value.plan, null, 2),
|
|
47
|
+
].join('\n');
|
|
48
|
+
}, {
|
|
49
|
+
json: ctx.argv.includes('--json'),
|
|
50
|
+
human: ctx.argv.includes('--human'),
|
|
51
|
+
writer: ctx.writer,
|
|
52
|
+
stdoutIsTty: ctx.stdoutIsTty,
|
|
53
|
+
noColor: Boolean(ctx.env['NO_COLOR']),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/cli/action.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,GAAmB,EAAE,KAAmB;IACtE,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,aAAa,CAAC;QAC7B,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,6CAA6C;QACtD,IAAI,EAAE,wFAAwF;QAC9F,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,oBAAoB,EAAE;KACnE,CAAC,CAAC;IACH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,OAAsB;IACpE,MAAM,IAAI,GAAG;QACT,aAAa,EAAE,CAAC;QAChB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,IAAI;QACZ,GAAG,OAAO;KACX,CAAC;IACJ,UAAU,CACR,IAAI,EACJ,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,KAAK,GAAG,CAAqC,CAAC;QACpD,OAAO;YACL,YAAY,KAAK,CAAC,IAAI,EAAE;YACxB,KAAK,CAAC,WAAW;YACjB,kBAAkB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,EACD;QACE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACtC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types and helpers for jinn CLI command modules.
|
|
3
|
+
*
|
|
4
|
+
* Every command module exports a default `CommandModule` object. The
|
|
5
|
+
* dispatcher in cli/index.ts looks up the verb name, parses flags with
|
|
6
|
+
* `parseArgs`, and calls `run`.
|
|
7
|
+
*/
|
|
8
|
+
import { parseArgs, type ParseArgsConfig } from 'node:util';
|
|
9
|
+
export interface CommandContext {
|
|
10
|
+
/** Everything after the verb, e.g. for `jinn bootstrap --json`, this is ['--json']. */
|
|
11
|
+
argv: string[];
|
|
12
|
+
/** Effective stdout TTY state; tests inject false. */
|
|
13
|
+
stdoutIsTty: boolean;
|
|
14
|
+
/** Injected writer for tests; production uses process.stdout. */
|
|
15
|
+
writer: {
|
|
16
|
+
write: (s: string) => boolean;
|
|
17
|
+
};
|
|
18
|
+
/** Injected exit for tests; production uses process.exit. */
|
|
19
|
+
exit: (code: number) => void;
|
|
20
|
+
/** Process environment, for JINN_PASSWORD, JINN_CLAUDE_PATH, etc. */
|
|
21
|
+
env: NodeJS.ProcessEnv;
|
|
22
|
+
}
|
|
23
|
+
export interface CommandModule {
|
|
24
|
+
name: string;
|
|
25
|
+
summary: string;
|
|
26
|
+
helpText: string;
|
|
27
|
+
run(ctx: CommandContext): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Strongly-typed wrapper around Node's parseArgs. Callers pass the command
|
|
31
|
+
* name and options schema; this returns the parsed values or throws on
|
|
32
|
+
* invalid flags. Callers are responsible for catching and emitting an
|
|
33
|
+
* envelope with code 'invalid_invocation'.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseCommandArgs<T extends ParseArgsConfig['options']>(argv: string[], options: T): ReturnType<typeof parseArgs<{
|
|
36
|
+
options: T;
|
|
37
|
+
allowPositionals: true;
|
|
38
|
+
}>>;
|
|
39
|
+
/**
|
|
40
|
+
* Common flags every verb accepts. Callers spread this into their options.
|
|
41
|
+
*/
|
|
42
|
+
export declare const COMMON_FLAGS: {
|
|
43
|
+
json: {
|
|
44
|
+
type: "boolean";
|
|
45
|
+
default: boolean;
|
|
46
|
+
};
|
|
47
|
+
human: {
|
|
48
|
+
type: "boolean";
|
|
49
|
+
default: boolean;
|
|
50
|
+
};
|
|
51
|
+
help: {
|
|
52
|
+
type: "boolean";
|
|
53
|
+
default: boolean;
|
|
54
|
+
};
|
|
55
|
+
config: {
|
|
56
|
+
type: "string";
|
|
57
|
+
};
|
|
58
|
+
/** Parsed value is the fd number as string; read via resolveCliPassword / readPasswordFromFd. */
|
|
59
|
+
'password-fd': {
|
|
60
|
+
type: "string";
|
|
61
|
+
};
|
|
62
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types and helpers for jinn CLI command modules.
|
|
3
|
+
*
|
|
4
|
+
* Every command module exports a default `CommandModule` object. The
|
|
5
|
+
* dispatcher in cli/index.ts looks up the verb name, parses flags with
|
|
6
|
+
* `parseArgs`, and calls `run`.
|
|
7
|
+
*/
|
|
8
|
+
import { parseArgs } from 'node:util';
|
|
9
|
+
/**
|
|
10
|
+
* Strongly-typed wrapper around Node's parseArgs. Callers pass the command
|
|
11
|
+
* name and options schema; this returns the parsed values or throws on
|
|
12
|
+
* invalid flags. Callers are responsible for catching and emitting an
|
|
13
|
+
* envelope with code 'invalid_invocation'.
|
|
14
|
+
*/
|
|
15
|
+
export function parseCommandArgs(argv, options) {
|
|
16
|
+
return parseArgs({ args: argv, options, allowPositionals: true });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Common flags every verb accepts. Callers spread this into their options.
|
|
20
|
+
*/
|
|
21
|
+
export const COMMON_FLAGS = {
|
|
22
|
+
json: { type: 'boolean', default: false },
|
|
23
|
+
human: { type: 'boolean', default: false },
|
|
24
|
+
help: { type: 'boolean', default: false },
|
|
25
|
+
config: { type: 'string' },
|
|
26
|
+
/** Parsed value is the fd number as string; read via resolveCliPassword / readPasswordFromFd. */
|
|
27
|
+
'password-fd': { type: 'string' },
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/cli/command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAsB5D;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAc,EACd,OAAU;IAEV,OAAO,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;IACnD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;IAClD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;IACnC,iGAAiG;IACjG,aAAa,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;CAC3C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { COMMON_FLAGS, parseCommandArgs } from '../command.js';
|
|
2
|
+
import { emitResult } from '../output.js';
|
|
3
|
+
import { emitEnvelope } from '../../errors/envelope.js';
|
|
4
|
+
import { gatherIntrospectionRaw } from '../introspection-context.js';
|
|
5
|
+
import { assembleBalanceV1 } from '../../api/balance-build.js';
|
|
6
|
+
async function run(ctx) {
|
|
7
|
+
let parsed;
|
|
8
|
+
try {
|
|
9
|
+
parsed = parseCommandArgs(ctx.argv, { ...COMMON_FLAGS });
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
emitEnvelope({
|
|
13
|
+
code: 'invalid_invocation',
|
|
14
|
+
message: err instanceof Error ? err.message : String(err),
|
|
15
|
+
exampleCli: 'jinn balance',
|
|
16
|
+
details: { field: 'flags' },
|
|
17
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const raw = await gatherIntrospectionRaw({ argv: ctx.argv });
|
|
21
|
+
const payload = assembleBalanceV1(raw);
|
|
22
|
+
emitResult(payload, (v) => JSON.stringify(v, null, 2), {
|
|
23
|
+
json: Boolean(parsed.values.json),
|
|
24
|
+
human: Boolean(parsed.values.human),
|
|
25
|
+
writer: ctx.writer,
|
|
26
|
+
stdoutIsTty: ctx.stdoutIsTty,
|
|
27
|
+
noColor: Boolean(ctx.env['NO_COLOR']),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const command = {
|
|
31
|
+
name: 'balance',
|
|
32
|
+
summary: 'Flat per-wallet balance map across master and service wallets',
|
|
33
|
+
helpText: `Usage: jinn balance [--human]
|
|
34
|
+
|
|
35
|
+
Cheaper than \`jinn fleet\` when the only thing you need is current
|
|
36
|
+
balances. Each wallet is identified by its stable role name
|
|
37
|
+
(master, service.<i>.agent, service.<i>.multisig).
|
|
38
|
+
|
|
39
|
+
Examples:
|
|
40
|
+
jinn balance
|
|
41
|
+
jinn balance --human
|
|
42
|
+
`,
|
|
43
|
+
run,
|
|
44
|
+
};
|
|
45
|
+
export default command;
|
|
46
|
+
//# sourceMappingURL=balance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/cli/commands/balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,KAAK,UAAU,GAAG,CAAC,GAAmB;IACpC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CACV;YACE,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;SAC5B,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACvC,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACrD,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,GAAkB;IAC7B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,+DAA+D;IACxE,QAAQ,EAAE;;;;;;;;;CASX;IACC,GAAG;CACJ,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { COMMON_FLAGS, parseCommandArgs } from '../command.js';
|
|
2
|
+
import { emitResult } from '../output.js';
|
|
3
|
+
import { emitEnvelope } from '../../errors/envelope.js';
|
|
4
|
+
import { loadConfig } from '../../config.js';
|
|
5
|
+
import { FleetBootstrapper } from '../../earning/bootstrap.js';
|
|
6
|
+
import { resolveCliPassword } from '../password.js';
|
|
7
|
+
/** §6.2 — `stack` only when `JINN_DEBUG=1` (exact string). */
|
|
8
|
+
function envelopeDebug(env) {
|
|
9
|
+
return env['JINN_DEBUG'] === '1';
|
|
10
|
+
}
|
|
11
|
+
function humanBootstrapSuccess(payload) {
|
|
12
|
+
const lines = [`Bootstrap complete.`, `Master: ${payload.master}`];
|
|
13
|
+
if (payload.services.length === 0) {
|
|
14
|
+
lines.push('Services: (none)');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
lines.push('Services:');
|
|
18
|
+
for (const s of payload.services) {
|
|
19
|
+
const id = s.serviceId != null ? ` (id ${s.serviceId})` : '';
|
|
20
|
+
lines.push(` #${s.index} ${s.step}${id}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return lines.join('\n');
|
|
24
|
+
}
|
|
25
|
+
async function run(ctx) {
|
|
26
|
+
let json = false;
|
|
27
|
+
let human = false;
|
|
28
|
+
let configPath;
|
|
29
|
+
try {
|
|
30
|
+
const parsed = parseCommandArgs(ctx.argv, { ...COMMON_FLAGS });
|
|
31
|
+
json = Boolean(parsed.values.json);
|
|
32
|
+
human = Boolean(parsed.values.human);
|
|
33
|
+
configPath =
|
|
34
|
+
typeof parsed.values.config === 'string' && parsed.values.config.length > 0
|
|
35
|
+
? parsed.values.config
|
|
36
|
+
: undefined;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
40
|
+
emitEnvelope({
|
|
41
|
+
code: 'invalid_invocation',
|
|
42
|
+
message: 'Invalid command-line arguments.',
|
|
43
|
+
hint: 'Run `jinn bootstrap --help` for supported flags.',
|
|
44
|
+
exampleCli: 'jinn bootstrap --json',
|
|
45
|
+
details: { field: 'argv', expected: message },
|
|
46
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const password = resolveCliPassword(ctx.argv, ctx.env);
|
|
50
|
+
if (!password.ok) {
|
|
51
|
+
emitEnvelope({
|
|
52
|
+
code: 'invalid_invocation',
|
|
53
|
+
message: password.message,
|
|
54
|
+
hint: 'Set JINN_PASSWORD or pass --password-fd N, then re-run.',
|
|
55
|
+
exampleCli: 'jinn bootstrap --json',
|
|
56
|
+
details: { field: 'keystore password', expected: 'non-empty string via environment or fd' },
|
|
57
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const config = loadConfig(configPath);
|
|
61
|
+
const bootstrapper = new FleetBootstrapper({
|
|
62
|
+
earningDir: config.earningDir,
|
|
63
|
+
chain: config.network === 'testnet' ? 'base-sepolia' : 'base',
|
|
64
|
+
rpcUrl: config.rpcUrl,
|
|
65
|
+
stakingMode: config.stakingMode,
|
|
66
|
+
targetServices: config.targetServices,
|
|
67
|
+
testnetL2DeploymentPath: config.testnetL2DeploymentPath,
|
|
68
|
+
testnetL2TokenDeploymentPath: config.testnetL2TokenDeploymentPath,
|
|
69
|
+
testnetMechDeploymentPath: config.testnetMechDeploymentPath,
|
|
70
|
+
testnetStolasDeploymentPath: config.testnetStolasDeploymentPath,
|
|
71
|
+
debug: config.debug,
|
|
72
|
+
pollIntervalMs: config.pollIntervalMs,
|
|
73
|
+
});
|
|
74
|
+
let result;
|
|
75
|
+
try {
|
|
76
|
+
result = await bootstrapper.bootstrap(password.password);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const cause = err instanceof Error ? err.message : String(err);
|
|
80
|
+
const message = err instanceof Error && err.message.trim().length > 0
|
|
81
|
+
? err.message
|
|
82
|
+
: 'Bootstrap failed with an unexpected error.';
|
|
83
|
+
const details = { cause };
|
|
84
|
+
if (envelopeDebug(ctx.env) && err instanceof Error && err.stack) {
|
|
85
|
+
details.stack = err.stack;
|
|
86
|
+
}
|
|
87
|
+
emitEnvelope({
|
|
88
|
+
code: 'fatal',
|
|
89
|
+
message,
|
|
90
|
+
details,
|
|
91
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (result.funding) {
|
|
95
|
+
emitEnvelope({
|
|
96
|
+
code: 'funding_required',
|
|
97
|
+
message: result.message,
|
|
98
|
+
hint: 'Fund the listed address and re-run jinn bootstrap.',
|
|
99
|
+
exampleCli: 'jinn fund-requirements --json',
|
|
100
|
+
details: {
|
|
101
|
+
role: 'master',
|
|
102
|
+
address: result.funding.master_address,
|
|
103
|
+
asset: 'native',
|
|
104
|
+
needWei: result.funding.eth_required,
|
|
105
|
+
haveWei: result.funding.eth_balance,
|
|
106
|
+
},
|
|
107
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!result.ok) {
|
|
111
|
+
emitEnvelope({
|
|
112
|
+
code: 'fatal',
|
|
113
|
+
message: result.message,
|
|
114
|
+
hint: 'Bootstrap failed before the fleet reached a runnable state.',
|
|
115
|
+
details: { cause: result.message },
|
|
116
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const state = result.fleet_state;
|
|
120
|
+
const payload = {
|
|
121
|
+
schemaVersion: 1,
|
|
122
|
+
generatedAt: new Date().toISOString(),
|
|
123
|
+
master: state.master_address ?? '',
|
|
124
|
+
services: state.services.map((s) => ({
|
|
125
|
+
index: s.index,
|
|
126
|
+
step: s.step,
|
|
127
|
+
serviceId: s.service_id ?? null,
|
|
128
|
+
})),
|
|
129
|
+
};
|
|
130
|
+
emitResult(payload, (v) => humanBootstrapSuccess(v), {
|
|
131
|
+
json,
|
|
132
|
+
human,
|
|
133
|
+
writer: ctx.writer,
|
|
134
|
+
stdoutIsTty: ctx.stdoutIsTty,
|
|
135
|
+
noColor: Boolean(ctx.env['NO_COLOR']),
|
|
136
|
+
});
|
|
137
|
+
ctx.exit(0);
|
|
138
|
+
}
|
|
139
|
+
const command = {
|
|
140
|
+
name: 'bootstrap',
|
|
141
|
+
summary: 'Advance the fleet state machine toward a running daemon',
|
|
142
|
+
helpText: `Usage: jinn bootstrap [--human] [--config <path>] [--password-fd <fd>]
|
|
143
|
+
|
|
144
|
+
Idempotent. Walks the fleet state machine from wherever it is toward
|
|
145
|
+
a complete, running state. Re-run as many times as needed; the
|
|
146
|
+
machine picks up where it left off. On funding gates, exits 10 with
|
|
147
|
+
a funding_required envelope.
|
|
148
|
+
|
|
149
|
+
Requires the password environment variable required by the client
|
|
150
|
+
(never as a flag).
|
|
151
|
+
|
|
152
|
+
Examples:
|
|
153
|
+
jinn bootstrap
|
|
154
|
+
jinn bootstrap --human
|
|
155
|
+
|
|
156
|
+
Failure example (funding gate):
|
|
157
|
+
$ jinn bootstrap
|
|
158
|
+
{"schemaVersion":1,"code":"funding_required","exitCode":10,...}
|
|
159
|
+
$ echo $?
|
|
160
|
+
10
|
|
161
|
+
`,
|
|
162
|
+
run,
|
|
163
|
+
};
|
|
164
|
+
export default command;
|
|
165
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/cli/commands/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { parseArgs } from 'node:util';
|
|
2
|
+
import { COMMON_FLAGS } from '../command.js';
|
|
3
|
+
import { emitResult } from '../output.js';
|
|
4
|
+
import { emitEnvelope } from '../../errors/envelope.js';
|
|
5
|
+
import { ensureConfirmed, emitDryRun } from '../action.js';
|
|
6
|
+
import { createCliSignerContext } from '../execution-context.js';
|
|
7
|
+
import { runRewardClaimOnce } from '../../daemon/reward-claim-loop.js';
|
|
8
|
+
import { isRecoverableTransactionError } from '../../tx-retry.js';
|
|
9
|
+
import { TransientError } from '../../types/errors.js';
|
|
10
|
+
async function run(ctx) {
|
|
11
|
+
let parsed;
|
|
12
|
+
try {
|
|
13
|
+
parsed = parseArgs({
|
|
14
|
+
args: ctx.argv,
|
|
15
|
+
options: {
|
|
16
|
+
...COMMON_FLAGS,
|
|
17
|
+
'dry-run': { type: 'boolean', default: false },
|
|
18
|
+
yes: { type: 'boolean', default: false },
|
|
19
|
+
},
|
|
20
|
+
allowPositionals: false,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
emitEnvelope({
|
|
25
|
+
code: 'invalid_invocation',
|
|
26
|
+
message: err instanceof Error ? err.message : String(err),
|
|
27
|
+
exampleCli: 'jinn claim-rewards --dry-run',
|
|
28
|
+
details: { field: 'flags' },
|
|
29
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const dryRun = parsed.values['dry-run'];
|
|
33
|
+
const yes = parsed.values.yes;
|
|
34
|
+
if (dryRun) {
|
|
35
|
+
emitDryRun(ctx, {
|
|
36
|
+
verb: 'claim-rewards',
|
|
37
|
+
description: 'Would call the reward distributor for every staked service',
|
|
38
|
+
plan: [{ action: 'distributor.claim', perServiceTx: true }],
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (!ensureConfirmed(ctx, { yes, dryRun: false }))
|
|
43
|
+
return;
|
|
44
|
+
const built = await createCliSignerContext({ argv: ctx.argv, env: ctx.env });
|
|
45
|
+
if (!built.ok) {
|
|
46
|
+
emitEnvelope(built.envelope, { writer: ctx.writer, exit: ctx.exit });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const { networkChain, chainConfig, fleetStore, masterWallet, publicClient } = built.ctx;
|
|
50
|
+
try {
|
|
51
|
+
const tick = await runRewardClaimOnce({
|
|
52
|
+
publicClient,
|
|
53
|
+
masterWallet,
|
|
54
|
+
store: fleetStore,
|
|
55
|
+
chain: networkChain,
|
|
56
|
+
distributorAddress: chainConfig.distributorAddress,
|
|
57
|
+
strict: true,
|
|
58
|
+
});
|
|
59
|
+
emitResult({
|
|
60
|
+
schemaVersion: 1,
|
|
61
|
+
generatedAt: new Date().toISOString(),
|
|
62
|
+
verb: 'claim-rewards',
|
|
63
|
+
attempted: tick.attempted,
|
|
64
|
+
submitted: tick.submitted,
|
|
65
|
+
skippedNoPending: tick.skippedNoPending,
|
|
66
|
+
skippedNoDistributor: tick.skippedNoDistributor,
|
|
67
|
+
skippedWrongMode: tick.skippedWrongMode,
|
|
68
|
+
claimAttempted: tick.claimAttempted,
|
|
69
|
+
failedRecoverable: tick.failedRecoverable,
|
|
70
|
+
failedPermanent: tick.failedPermanent,
|
|
71
|
+
}, (v) => {
|
|
72
|
+
const value = v;
|
|
73
|
+
return [
|
|
74
|
+
'Reward claim tick complete.',
|
|
75
|
+
`Attempted services: ${value.attempted}`,
|
|
76
|
+
`Submitted claims: ${value.submitted}`,
|
|
77
|
+
`Recoverable failures: ${value.failedRecoverable}`,
|
|
78
|
+
`Permanent failures: ${value.failedPermanent}`,
|
|
79
|
+
].join('\n');
|
|
80
|
+
}, {
|
|
81
|
+
json: Boolean(parsed.values.json),
|
|
82
|
+
human: Boolean(parsed.values.human),
|
|
83
|
+
writer: ctx.writer,
|
|
84
|
+
stdoutIsTty: ctx.stdoutIsTty,
|
|
85
|
+
noColor: Boolean(ctx.env['NO_COLOR']),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
if (e instanceof TransientError || isRecoverableTransactionError(e)) {
|
|
90
|
+
emitEnvelope({
|
|
91
|
+
code: 'transient_error',
|
|
92
|
+
message: e instanceof Error ? e.message : String(e),
|
|
93
|
+
hint: 'Retry when the RPC endpoint is healthy.',
|
|
94
|
+
exampleCli: 'jinn claim-rewards --yes',
|
|
95
|
+
details: { cause: e instanceof Error ? e.message : String(e) },
|
|
96
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
emitEnvelope({
|
|
100
|
+
code: 'fatal',
|
|
101
|
+
message: e instanceof Error ? e.message : String(e),
|
|
102
|
+
details: { cause: e instanceof Error ? e.message : String(e) },
|
|
103
|
+
}, { writer: ctx.writer, exit: ctx.exit });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const command = {
|
|
107
|
+
name: 'claim-rewards',
|
|
108
|
+
summary: 'Pull pending protocol rewards to the fleet multisigs',
|
|
109
|
+
helpText: `Usage: jinn claim-rewards [--dry-run] [--yes] [--human]
|
|
110
|
+
|
|
111
|
+
Idempotent: zero-delta is success, not error. Second consecutive call
|
|
112
|
+
may show submitted:0 and exits 0.
|
|
113
|
+
|
|
114
|
+
Examples:
|
|
115
|
+
jinn claim-rewards --dry-run
|
|
116
|
+
jinn claim-rewards --yes
|
|
117
|
+
`,
|
|
118
|
+
run,
|
|
119
|
+
};
|
|
120
|
+
export default command;
|
|
121
|
+
//# sourceMappingURL=claim-rewards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-rewards.js","sourceRoot":"","sources":["../../../src/cli/commands/claim-rewards.ts"],"names":[],"mappings":"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"}
|