@hsuite/smart-engines-cli 1.0.3 → 1.1.1

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 (36) hide show
  1. package/dist/__tests__/helpers/fixtures.d.ts +48 -0
  2. package/dist/__tests__/helpers/fixtures.d.ts.map +1 -0
  3. package/dist/__tests__/helpers/fixtures.js +79 -0
  4. package/dist/__tests__/helpers/fixtures.js.map +1 -0
  5. package/dist/_lib/cluster.d.ts +12 -0
  6. package/dist/_lib/cluster.d.ts.map +1 -0
  7. package/dist/_lib/cluster.js +45 -0
  8. package/dist/_lib/cluster.js.map +1 -0
  9. package/dist/commands/deploy.d.ts.map +1 -1
  10. package/dist/commands/deploy.js +19 -7
  11. package/dist/commands/deploy.js.map +1 -1
  12. package/dist/commands/governance.d.ts +42 -0
  13. package/dist/commands/governance.d.ts.map +1 -0
  14. package/dist/commands/governance.js +144 -0
  15. package/dist/commands/governance.js.map +1 -0
  16. package/dist/commands/hist-balance.d.ts +52 -0
  17. package/dist/commands/hist-balance.d.ts.map +1 -0
  18. package/dist/commands/hist-balance.js +134 -0
  19. package/dist/commands/hist-balance.js.map +1 -0
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +2 -1
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/personhood.d.ts +42 -0
  24. package/dist/commands/personhood.d.ts.map +1 -0
  25. package/dist/commands/personhood.js +150 -0
  26. package/dist/commands/personhood.js.map +1 -0
  27. package/dist/commands/subscribe.d.ts.map +1 -1
  28. package/dist/commands/subscribe.js +25 -6
  29. package/dist/commands/subscribe.js.map +1 -1
  30. package/dist/commands/verify.d.ts +43 -0
  31. package/dist/commands/verify.d.ts.map +1 -0
  32. package/dist/commands/verify.js +231 -0
  33. package/dist/commands/verify.js.map +1 -0
  34. package/dist/index.js +8 -0
  35. package/dist/index.js.map +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * `hsuite hist-balance query` — ad-hoc historical-balance query.
4
+ *
5
+ * Wraps the SDK's `HistoricalBalanceClient` so operators / smart-app devs
6
+ * can sanity-check archive reads from a terminal without writing a script:
7
+ *
8
+ * ```
9
+ * hsuite hist-balance query \
10
+ * --chain hedera \
11
+ * --entity 0.0.5555 \
12
+ * --account 0.0.1234 \
13
+ * --at 1700000000 \
14
+ * --server https://validator.example.com
15
+ * ```
16
+ *
17
+ * Exit codes:
18
+ * 0 success
19
+ * 1 input error (missing/invalid flag, unsupported chain, etc.)
20
+ * 2 transport or server error (network, 4xx, 5xx)
21
+ *
22
+ * Zero internal `@hsuite/*` deps beyond `@hsuite/smart-engines-sdk`, which
23
+ * itself is decoupled from server-side libs by design (PR-CLEANUP #576).
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.histBalanceCommand = void 0;
27
+ exports.runHistBalanceQuery = runHistBalanceQuery;
28
+ const commander_1 = require("commander");
29
+ const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
30
+ /**
31
+ * Pure-function core (no `process.exit`, no `console.log`) so tests can
32
+ * exercise the full code path and assert on the returned exit code +
33
+ * captured streams.
34
+ */
35
+ async function runHistBalanceQuery(args, io) {
36
+ // ── Input validation ──────────────────────────────────────────────────
37
+ const chain = args.chain;
38
+ if (chain !== 'hedera' && chain !== 'xrpl' && chain !== 'polkadot') {
39
+ io.err(`error: --chain must be one of hedera | xrpl | polkadot (received: ${chain ?? '<missing>'})`);
40
+ return 1;
41
+ }
42
+ const entity = args.entity;
43
+ if (!entity || typeof entity !== 'string') {
44
+ io.err('error: --entity is required');
45
+ return 1;
46
+ }
47
+ const account = args.account;
48
+ if (!account || typeof account !== 'string') {
49
+ io.err('error: --account is required');
50
+ return 1;
51
+ }
52
+ if (args.at === undefined || args.at === '') {
53
+ io.err('error: --at is required (unix seconds, positive integer)');
54
+ return 1;
55
+ }
56
+ const atNum = Number(args.at);
57
+ if (!Number.isInteger(atNum) || atNum <= 0) {
58
+ io.err(`error: --at must be a positive integer (received: ${args.at})`);
59
+ return 1;
60
+ }
61
+ const server = args.server ?? process.env.VALIDATOR_URL ?? process.env.SMART_HOST_URL;
62
+ if (!server) {
63
+ io.err('error: --server is required (or set VALIDATOR_URL / SMART_HOST_URL env)');
64
+ return 1;
65
+ }
66
+ const format = args.format ?? 'plain';
67
+ if (format !== 'plain' && format !== 'json') {
68
+ io.err(`error: --format must be plain | json (received: ${format})`);
69
+ return 1;
70
+ }
71
+ const authToken = args.authToken ?? process.env.VALIDATOR_AUTH_TOKEN;
72
+ const apiKey = args.apiKey ?? process.env.VALIDATOR_API_KEY;
73
+ // ── Build SDK client ──────────────────────────────────────────────────
74
+ const factory = io.sdk ??
75
+ ((cfg) => new smart_engines_sdk_1.HistoricalBalanceClient({
76
+ baseUrl: cfg.baseUrl,
77
+ authToken: cfg.authToken,
78
+ apiKey: cfg.apiKey,
79
+ }));
80
+ const client = factory({ baseUrl: server, authToken, apiKey });
81
+ // ── Call ──────────────────────────────────────────────────────────────
82
+ try {
83
+ const result = await client.getBalance({
84
+ chain: chain,
85
+ entityId: entity,
86
+ account,
87
+ atTimestamp: atNum,
88
+ });
89
+ if (format === 'json') {
90
+ io.out(JSON.stringify(result, null, 2));
91
+ }
92
+ else {
93
+ io.out(`chain: ${result.chain}`);
94
+ io.out(`entity: ${result.entityId}`);
95
+ io.out(`account: ${result.account}`);
96
+ io.out(`atTimestamp: ${result.atTimestamp}`);
97
+ io.out(`balance: ${result.balance}`);
98
+ io.out(`source: ${result.source}`);
99
+ }
100
+ return 0;
101
+ }
102
+ catch (err) {
103
+ if (err instanceof smart_engines_sdk_1.HistoricalBalanceClientError) {
104
+ // Client-side validation is also surfaced as HistoricalBalanceClientError
105
+ // with statusCode=400; treat 4xx as input errors, 5xx / 0 as transport.
106
+ const isInputError = err.statusCode >= 400 && err.statusCode < 500;
107
+ io.err(`error: ${err.message} (status=${err.statusCode})`);
108
+ return isInputError ? 1 : 2;
109
+ }
110
+ const message = err instanceof Error ? err.message : String(err);
111
+ io.err(`error: ${message}`);
112
+ return 2;
113
+ }
114
+ }
115
+ exports.histBalanceCommand = new commander_1.Command('hist-balance').description('Query historical balances against the validator archive endpoint');
116
+ exports.histBalanceCommand
117
+ .command('query')
118
+ .description('Look up a point-in-time balance for an account / entity / chain')
119
+ .requiredOption('--chain <chain>', 'Chain: hedera | xrpl | polkadot')
120
+ .requiredOption('--entity <id>', 'Chain-native token / IOU / asset id')
121
+ .requiredOption('--account <addr>', 'Chain-native holder address')
122
+ .requiredOption('--at <unixSeconds>', 'Unix timestamp in seconds (positive integer)')
123
+ .option('--server <url>', 'Validator base URL (default: $VALIDATOR_URL or $SMART_HOST_URL)')
124
+ .option('--format <format>', 'Output format: plain | json', 'plain')
125
+ .option('--auth-token <token>', 'Bearer token (default: $VALIDATOR_AUTH_TOKEN)')
126
+ .option('--api-key <key>', 'API key (default: $VALIDATOR_API_KEY)')
127
+ .action(async (opts) => {
128
+ const code = await runHistBalanceQuery(opts, {
129
+ out: (m) => console.log(m),
130
+ err: (m) => console.error(m),
131
+ });
132
+ process.exit(code);
133
+ });
134
+ //# sourceMappingURL=hist-balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hist-balance.js","sourceRoot":"","sources":["../../src/commands/hist-balance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SAwEpB,CAAC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,WAAW,SAwEpB,CAAC"}
@@ -13,6 +13,7 @@ const ora_1 = __importDefault(require("ora"));
13
13
  const fs_1 = require("fs");
14
14
  const path_1 = require("path");
15
15
  const xrpl_1 = require("xrpl");
16
+ const cluster_1 = require("../_lib/cluster");
16
17
  const FAUCETS = {
17
18
  testnet: 'https://faucet.altnet.rippletest.net/accounts',
18
19
  devnet: 'https://faucet.devnet.rippletest.net/accounts',
@@ -21,7 +22,7 @@ exports.initCommand = new commander_1.Command('init')
21
22
  .description('Generate an XRPL testnet wallet, fund it, and write .env')
22
23
  .option('--out <file>', 'Output env file path', '.env.local')
23
24
  .option('--network <network>', 'XRPL network (testnet | devnet)', 'testnet')
24
- .option('--gateway <url>', 'Smart-engines gateway URL', 'https://v3-testnet-gateway.hsuite.network')
25
+ .option('--gateway <url>', 'Smart-engines bootstrap host (written to the env file)', cluster_1.DEFAULT_GATEWAY)
25
26
  .option('--no-fund', 'Skip the testnet faucet step')
26
27
  .option('--force', 'Overwrite existing env file')
27
28
  .action(async (opts) => {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `hsuite personhood verify` — verify a personhood proof against the cluster.
3
+ *
4
+ * Thin wrapper around the SDK's `PersonhoodClient`. Reads a JSON proof from
5
+ * disk, POSTs to the validator, and prints the resulting cert (or `null`)
6
+ * to stdout or `--out`.
7
+ *
8
+ * Exit codes:
9
+ * 0 cert issued (printed to stdout / --out)
10
+ * 0 null cert (info message printed to stderr, body printed to stdout)
11
+ * 1 input error: missing file, malformed JSON, missing --candidate
12
+ * 2 transport error: 5xx, network, timeout
13
+ *
14
+ * The 503 `personhood_verifier_not_configured` envelope is treated as a
15
+ * transport-level error (exit 2) because the hub operator must wire a
16
+ * verifier before this command can succeed.
17
+ */
18
+ import { Command } from 'commander';
19
+ import { PersonhoodClient } from '@hsuite/smart-engines-sdk';
20
+ /**
21
+ * Internal factory hook — overridable in tests to mock the SDK client.
22
+ * Production callers never set this; the CLI builds a real
23
+ * `SmartEngineClient` against `--server`.
24
+ */
25
+ export type PersonhoodClientFactory = (server: string) => PersonhoodClient;
26
+ /** @internal — for tests only. */
27
+ export declare function __setPersonhoodClientFactory(factory: PersonhoodClientFactory): void;
28
+ /** @internal — for tests only. */
29
+ export declare function __resetPersonhoodClientFactory(): void;
30
+ /**
31
+ * Build a fresh `personhood` Command tree. Commander Command instances
32
+ * accumulate state across `parseAsync` calls (parsed option values stick
33
+ * around on the same node), so tests use this factory to get an
34
+ * isolated subtree per test. The bin entrypoint calls it once at startup.
35
+ */
36
+ export declare function buildPersonhoodCommand(): Command;
37
+ /**
38
+ * Default command instance used by the bin entrypoint. Tests build their
39
+ * own via {@link buildPersonhoodCommand}.
40
+ */
41
+ export declare const personhoodCommand: Command;
42
+ //# sourceMappingURL=personhood.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personhood.d.ts","sourceRoot":"","sources":["../../src/commands/personhood.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EACL,gBAAgB,EAMjB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,gBAAgB,CAAC;AAQ3E,kCAAkC;AAClC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAEnF;AAED,kCAAkC;AAClC,wBAAgB,8BAA8B,IAAI,IAAI,CAMrD;AA0BD;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA4EhD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,SAA2B,CAAC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.personhoodCommand = void 0;
7
+ exports.__setPersonhoodClientFactory = __setPersonhoodClientFactory;
8
+ exports.__resetPersonhoodClientFactory = __resetPersonhoodClientFactory;
9
+ exports.buildPersonhoodCommand = buildPersonhoodCommand;
10
+ /**
11
+ * `hsuite personhood verify` — verify a personhood proof against the cluster.
12
+ *
13
+ * Thin wrapper around the SDK's `PersonhoodClient`. Reads a JSON proof from
14
+ * disk, POSTs to the validator, and prints the resulting cert (or `null`)
15
+ * to stdout or `--out`.
16
+ *
17
+ * Exit codes:
18
+ * 0 cert issued (printed to stdout / --out)
19
+ * 0 null cert (info message printed to stderr, body printed to stdout)
20
+ * 1 input error: missing file, malformed JSON, missing --candidate
21
+ * 2 transport error: 5xx, network, timeout
22
+ *
23
+ * The 503 `personhood_verifier_not_configured` envelope is treated as a
24
+ * transport-level error (exit 2) because the hub operator must wire a
25
+ * verifier before this command can succeed.
26
+ */
27
+ const commander_1 = require("commander");
28
+ const chalk_1 = __importDefault(require("chalk"));
29
+ const ora_1 = __importDefault(require("ora"));
30
+ const fs_1 = require("fs");
31
+ const path_1 = require("path");
32
+ const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
33
+ let clientFactory = (server) => {
34
+ const allowInsecure = server.startsWith('http://');
35
+ const sdk = new smart_engines_sdk_1.SmartEngineClient({ baseUrl: server, allowInsecure });
36
+ return sdk.personhood;
37
+ };
38
+ /** @internal — for tests only. */
39
+ function __setPersonhoodClientFactory(factory) {
40
+ clientFactory = factory;
41
+ }
42
+ /** @internal — for tests only. */
43
+ function __resetPersonhoodClientFactory() {
44
+ clientFactory = (server) => {
45
+ const allowInsecure = server.startsWith('http://');
46
+ const sdk = new smart_engines_sdk_1.SmartEngineClient({ baseUrl: server, allowInsecure });
47
+ return sdk.personhood;
48
+ };
49
+ }
50
+ function loadProof(path) {
51
+ const absPath = (0, path_1.resolve)(path);
52
+ if (!(0, fs_1.existsSync)(absPath)) {
53
+ throw new Error(`proof file not found: ${absPath}`);
54
+ }
55
+ const raw = (0, fs_1.readFileSync)(absPath, 'utf8');
56
+ let parsed;
57
+ try {
58
+ parsed = JSON.parse(raw);
59
+ }
60
+ catch (err) {
61
+ throw new Error(`proof file is not valid JSON: ${err.message}`);
62
+ }
63
+ if (!parsed ||
64
+ typeof parsed !== 'object' ||
65
+ typeof parsed.attestationMethod !== 'string') {
66
+ throw new Error('proof file must be a JSON object with an `attestationMethod` string field');
67
+ }
68
+ return parsed;
69
+ }
70
+ /**
71
+ * Build a fresh `personhood` Command tree. Commander Command instances
72
+ * accumulate state across `parseAsync` calls (parsed option values stick
73
+ * around on the same node), so tests use this factory to get an
74
+ * isolated subtree per test. The bin entrypoint calls it once at startup.
75
+ */
76
+ function buildPersonhoodCommand() {
77
+ const cmd = new commander_1.Command('personhood').description('Personhood verification (HPP one-human-one-member)');
78
+ cmd
79
+ .command('verify')
80
+ .description('Verify a personhood proof against the cluster')
81
+ .requiredOption('--candidate <addr>', 'address of the human being verified')
82
+ .requiredOption('--proof <file>', 'JSON file containing the PersonhoodProof envelope')
83
+ .option('--out <file>', 'Write cert JSON to this file (default: stdout)')
84
+ .option('--server <url>', 'Validator base URL (default: $VALIDATOR_URL env)')
85
+ .action(async (opts) => {
86
+ const server = opts.server ?? process.env.VALIDATOR_URL;
87
+ if (!server) {
88
+ console.error(chalk_1.default.red(' --server is required (or set VALIDATOR_URL in the environment)\n'));
89
+ process.exit(1);
90
+ }
91
+ let proof;
92
+ try {
93
+ proof = loadProof(opts.proof);
94
+ }
95
+ catch (err) {
96
+ console.error(chalk_1.default.red(` ${err.message}\n`));
97
+ process.exit(1);
98
+ }
99
+ const spinner = (0, ora_1.default)(`POST ${server}/api/v3/personhood/verify`).start();
100
+ let cert;
101
+ try {
102
+ const client = clientFactory(server);
103
+ cert = await client.verify({ candidate: opts.candidate, proof });
104
+ }
105
+ catch (err) {
106
+ // 503 personhood_verifier_not_configured → operator must wire a
107
+ // verifier; surface as a transport-level failure.
108
+ if ((0, smart_engines_sdk_1.isPersonhoodVerifierNotConfigured)(err)) {
109
+ spinner.fail('personhood verifier is not configured on the cluster');
110
+ process.exit(2);
111
+ }
112
+ if (err instanceof smart_engines_sdk_1.SdkHttpError) {
113
+ spinner.fail(`HTTP ${err.statusCode}: ${err.message}`);
114
+ process.exit(2);
115
+ }
116
+ spinner.fail(`transport error: ${err.message}`);
117
+ process.exit(2);
118
+ }
119
+ if (cert === null) {
120
+ spinner.warn('verification did not produce a cert');
121
+ // The body is still emitted so scripts can pipe / diff a stable JSON
122
+ // shape regardless of the issued/rejected outcome.
123
+ const body = JSON.stringify(null);
124
+ if (opts.out) {
125
+ (0, fs_1.writeFileSync)((0, path_1.resolve)(opts.out), body);
126
+ }
127
+ else {
128
+ process.stdout.write(body + '\n');
129
+ }
130
+ // Exit 0: rejection is a valid outcome the caller can branch on.
131
+ return;
132
+ }
133
+ spinner.succeed(`cert issued by ${cert.issuerId}`);
134
+ const body = JSON.stringify(cert, null, 2);
135
+ if (opts.out) {
136
+ (0, fs_1.writeFileSync)((0, path_1.resolve)(opts.out), body);
137
+ console.log(chalk_1.default.gray(` wrote cert → ${opts.out}`));
138
+ }
139
+ else {
140
+ process.stdout.write(body + '\n');
141
+ }
142
+ });
143
+ return cmd;
144
+ }
145
+ /**
146
+ * Default command instance used by the bin entrypoint. Tests build their
147
+ * own via {@link buildPersonhoodCommand}.
148
+ */
149
+ exports.personhoodCommand = buildPersonhoodCommand();
150
+ //# sourceMappingURL=personhood.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personhood.js","sourceRoot":"","sources":["../../src/commands/personhood.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,gBAAgB,SAqGzB,CAAC"}
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,gBAAgB,SAwHzB,CAAC"}
@@ -16,16 +16,17 @@ const chalk_1 = __importDefault(require("chalk"));
16
16
  const ora_1 = __importDefault(require("ora"));
17
17
  const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
18
18
  const env_1 = require("../_lib/env");
19
+ const cluster_1 = require("../_lib/cluster");
19
20
  exports.subscribeCommand = new commander_1.Command('subscribe')
20
21
  .description('Register a free_testnet smart-app on the cluster')
21
22
  .option('--env <file>', 'Env file with XRPL/Hedera creds', '.env.local')
22
- .option('--gateway <url>', 'Smart-engines gateway URL', 'https://v3-testnet-gateway.hsuite.network')
23
+ .option('--gateway <url>', 'Bootstrap host — seed for decentralized cluster discovery', cluster_1.DEFAULT_GATEWAY)
23
24
  .option('--name <name>', 'Smart-app display name')
24
25
  .option('--services <list>', 'Comma-separated services to enable', 'database,storage,messaging,functions')
25
26
  .action(async (opts) => {
26
27
  console.log(chalk_1.default.bold.cyan('\n hsuite subscribe\n'));
27
- console.log(chalk_1.default.gray(` env: ${opts.env}`));
28
- console.log(chalk_1.default.gray(` gateway: ${opts.gateway}\n`));
28
+ console.log(chalk_1.default.gray(` env: ${opts.env}`));
29
+ console.log(chalk_1.default.gray(` bootstrap: ${opts.gateway}\n`));
29
30
  let env;
30
31
  try {
31
32
  env = (0, env_1.readEnv)(opts.env);
@@ -58,11 +59,29 @@ exports.subscribeCommand = new commander_1.Command('subscribe')
58
59
  process.exit(1);
59
60
  }
60
61
  spinner.succeed(`signer ready (${signer.chain}, ${signer.walletAddress})`);
62
+ // Decentralized cluster discovery: bootstrap → registry → random node.
63
+ // Falls back to the bootstrap host (a working round-robin gateway) when
64
+ // the registry is empty or unreachable.
65
+ spinner = (0, ora_1.default)('discovering cluster...').start();
66
+ const gatewayUrl = await (0, cluster_1.resolveGatewayUrl)(opts.gateway);
67
+ spinner.succeed(`cluster: ${gatewayUrl}`);
61
68
  const client = new smart_engines_sdk_1.BaasClient({
62
- hostUrl: opts.gateway,
69
+ hostUrl: gatewayUrl,
63
70
  appId: 'pending',
64
- allowInsecure: opts.gateway.startsWith('http://'),
65
- pathPrefix: '/host',
71
+ allowInsecure: gatewayUrl.startsWith('http://'),
72
+ // Paths are the apps' real /api/* routes; the ingress routes each
73
+ // prefix straight to its service — no host-proxy prefix.
74
+ pathPrefix: '',
75
+ // `deployment.init` → smart-host → validator runtime-init. As of
76
+ // HANDOFF-arc-v13-do-deploy.md §18.3 4b / §19.4f item 2, the
77
+ // validator runs DKG asynchronously and smart-host's
78
+ // `SmartAppCreatorAdapter` polls until terminal (default 10 min
79
+ // poll-timeout, env-tunable via `RUNTIME_INIT_POLL_TIMEOUT_MS`
80
+ // on the smart-host pod). The HTTP request itself stays open
81
+ // for the full adapter-side poll window — bump the CLI timeout
82
+ // to match the adapter ceiling so a slow DKG doesn't truncate
83
+ // the request before the adapter resolves.
84
+ timeout: 10 * 60 * 1_000,
66
85
  });
67
86
  spinner = (0, ora_1.default)('web3-auth challenge → verify...').start();
68
87
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;GAMG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,iEAAuD;AAGvD,qCAAqE;AACrE,6CAAqE;AAExD,QAAA,gBAAgB,GAAG,IAAI,mBAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,cAAc,EAAE,iCAAiC,EAAE,YAAY,CAAC;KACvE,MAAM,CACL,iBAAiB,EACjB,2DAA2D,EAC3D,yBAAe,CAChB;KACA,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CACL,mBAAmB,EACnB,oCAAoC,EACpC,sCAAsC,CACvC;KACA,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAE3D,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,IAAA,aAAO,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAM,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC;IAC5E,MAAM,OAAO,GAAG,UAAU;SACvB,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,oBAAoB,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;SAC3B,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAkB,CAAC;IAEpC,IAAI,OAAO,GAAG,IAAA,aAAG,EAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,wBAAkB,EAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;IAE3E,uEAAuE;IACvE,wEAAwE;IACxE,wCAAwC;IACxC,OAAO,GAAG,IAAA,aAAG,EAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAiB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,CAAC,OAAO,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,IAAI,8BAAU,CAAC;QAC5B,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAC/C,kEAAkE;QAClE,yDAAyD;QACzD,UAAU,EAAE,EAAE;QACd,iEAAiE;QACjE,6DAA6D;QAC7D,qDAAqD;QACrD,gEAAgE;QAChE,+DAA+D;QAC/D,6DAA6D;QAC7D,+DAA+D;QAC/D,8DAA8D;QAC9D,2CAA2C;QAC3C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK;KACzB,CAAC,CAAC;IAEH,OAAO,GAAG,IAAA,aAAG,EAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,YAAY,CAAC;YACxB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,gBAAiB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEjC,OAAO,GAAG,IAAA,aAAG,EAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5D,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,qEAAqE;QACrE,sEAAsE;QACtE,6DAA6D;QAC7D,sEAAsE;QACtE,oEAAoE;QACpE,mEAAmE;QACnE,kDAAkD;QAClD,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9D,IAAA,eAAS,EAAC,IAAI,CAAC,GAAG,EAAE;QAClB,mBAAmB,EAAE,MAAM,CAAC,KAAK;QACjC,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,uBAAuB,EAAE,OAAO;KACjC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `hsuite verify` — verify a PQC attestation cert against a payload.
3
+ *
4
+ * PR 11.1 — Arc 11 (external-verifier surface). Thin Commander wrapper
5
+ * around `verifyPqcAttestation` from `@hsuite/smart-engines-sdk/pqc-verify`
6
+ * (PR 11.0). Three invocation modes:
7
+ *
8
+ * - Direct verify:
9
+ * hsuite verify --cert <cert.json> --payload <payload.json>
10
+ *
11
+ * - Fetch-then-verify via smart-host proxy (PR #820):
12
+ * hsuite verify --topic-msg <consumer>/<contentHash> --payload <p.json>
13
+ *
14
+ * The proxy endpoint is `GET /api/pqc-attestation/<consumer>/<contentHash>`
15
+ * (apps/smart-host/src/pqc-proxy/pqc-attestation-proxy.controller.ts:35),
16
+ * keyed by `(consumer, contentHash)` — NOT a Hedera topic-message id.
17
+ * The flag name follows the design spec (§4.2) for customer-facing
18
+ * parity; the value is the consumer/contentHash slug the proxy actually
19
+ * accepts.
20
+ *
21
+ * - Help: hsuite verify --help
22
+ *
23
+ * Exit codes:
24
+ * 0 cert valid (threshold met)
25
+ * 1 cert invalid (specific reason printed to stderr) OR usage error
26
+ * 2 network / fetch error (only possible in --topic-msg mode)
27
+ *
28
+ * @see docs/superpowers/specs/2026-05-27-pqc-arc11-external-verifier-design.md §4.2
29
+ * @see docs/superpowers/plans/2026-05-27-pqc-arc11-external-verifier-plan.md PR 11.1
30
+ */
31
+ import { Command } from 'commander';
32
+ /**
33
+ * Build a fresh `verify` Command. Commander Command instances accumulate
34
+ * parsed-option state across `parseAsync` calls, so tests build their own
35
+ * via this factory to isolate runs; the bin entrypoint calls it once.
36
+ */
37
+ export declare function buildVerifyCommand(): Command;
38
+ /**
39
+ * Default command instance used by the bin entrypoint. Tests build their
40
+ * own via {@link buildVerifyCommand}.
41
+ */
42
+ export declare const verifyCommand: Command;
43
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CA0I5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAuB,CAAC"}