@hsuite/smart-engines-cli 1.1.0 → 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.
- package/dist/__tests__/helpers/fixtures.d.ts +48 -0
- package/dist/__tests__/helpers/fixtures.d.ts.map +1 -0
- package/dist/__tests__/helpers/fixtures.js +79 -0
- package/dist/__tests__/helpers/fixtures.js.map +1 -0
- package/dist/_lib/cluster.d.ts +12 -0
- package/dist/_lib/cluster.d.ts.map +1 -0
- package/dist/_lib/cluster.js +45 -0
- package/dist/_lib/cluster.js.map +1 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +19 -7
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/subscribe.d.ts.map +1 -1
- package/dist/commands/subscribe.js +25 -6
- package/dist/commands/subscribe.js.map +1 -1
- package/dist/commands/verify.d.ts +43 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +231 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic XRPL ed25519 fixture.
|
|
3
|
+
*
|
|
4
|
+
* Provenance — derived once with:
|
|
5
|
+
* node -e "const {Wallet}=require('xrpl'); const w=Wallet.fromSeed('sEdTyaBYHfQhWt9ycB9QJsRKH8UUEuD'); console.log(w.address, w.publicKey)"
|
|
6
|
+
*
|
|
7
|
+
* Expected signature derived by running the validator's exact verifier
|
|
8
|
+
* path (libs/security-core/src/auth/web3-auth.service.ts:334-340):
|
|
9
|
+
* const hex = Buffer.from(message, 'utf-8').toString('hex').toUpperCase();
|
|
10
|
+
* sign(hex, wallet.privateKey) // ripple-keypairs
|
|
11
|
+
*
|
|
12
|
+
* If `EXPECTED_SIGNATURE` drifts, the CLI's signFn no longer produces what
|
|
13
|
+
* the validator's web3-auth verifier accepts. That's an auth-contract
|
|
14
|
+
* regression — every developer's `subscribe`/`deploy` breaks silently.
|
|
15
|
+
*/
|
|
16
|
+
export declare const XRPL_FIXTURE: {
|
|
17
|
+
readonly seed: "sEdTyaBYHfQhWt9ycB9QJsRKH8UUEuD";
|
|
18
|
+
readonly address: "rNHjsSoFgEMPZi4kE5rfw6c8k6tTUX8eng";
|
|
19
|
+
readonly publicKey: "ED652CD3EAB154510CBFCF4AEDEE4EAEB295D32EA7CE358F0B25D26203003F5DED";
|
|
20
|
+
/** Plain-text payload signed in the deterministic-signature assertion. */
|
|
21
|
+
readonly payload: "hello-smart-engines";
|
|
22
|
+
/** Output of `sign(hex(payload).upper, fixture.privateKey)`. */
|
|
23
|
+
readonly expectedSignature: "CFF9ABD65D3BBC985FE8A8C899DAC26B16DAB95B13AE2B2CB3DEAC2CA0E54F7791307B22971180D6016422EEE2E36ACFECCC7B7C3A1CB7701CE28D243E16BF03";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Reproduce the validator's verifier check verbatim.
|
|
27
|
+
*
|
|
28
|
+
* Mirrors `verifyXRPLSignature` at
|
|
29
|
+
* libs/security-core/src/auth/web3-auth.service.ts:328-350 — same hex
|
|
30
|
+
* canonicalization, same ripple-keypairs.verify entry point. Used by the
|
|
31
|
+
* signFn spec to cross-check the CLI's output WITHOUT importing the heavy
|
|
32
|
+
* NestJS-bound web3-auth.service.ts class graph.
|
|
33
|
+
*/
|
|
34
|
+
export declare function validatorVerifyXrplSignature(publicKey: string, message: string, signature: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Build a throwaway tmp directory and return its path + a cleanup fn.
|
|
37
|
+
*
|
|
38
|
+
* Usage:
|
|
39
|
+
* const { dir, cleanup } = makeTempDir('hsuite-init-');
|
|
40
|
+
* afterEach(cleanup);
|
|
41
|
+
*/
|
|
42
|
+
export declare function makeTempDir(prefix?: string): {
|
|
43
|
+
dir: string;
|
|
44
|
+
cleanup: () => void;
|
|
45
|
+
};
|
|
46
|
+
/** Build the path for an env file inside a tmp dir. */
|
|
47
|
+
export declare function envPathIn(dir: string, name?: string): string;
|
|
48
|
+
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/fixtures.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY;;;;IAIvB,0EAA0E;;IAE1E,gEAAgE;;CAGxD,CAAC;AAEX;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,SAAqB,GAAG;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAMA;AAED,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,MAAM,CAElE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XRPL_FIXTURE = void 0;
|
|
4
|
+
exports.validatorVerifyXrplSignature = validatorVerifyXrplSignature;
|
|
5
|
+
exports.makeTempDir = makeTempDir;
|
|
6
|
+
exports.envPathIn = envPathIn;
|
|
7
|
+
/**
|
|
8
|
+
* Shared test fixtures for the @hsuite/smart-engines-cli specs.
|
|
9
|
+
*
|
|
10
|
+
* Centralises the XRPL seed/address/pubkey we sign with, the expected
|
|
11
|
+
* deterministic signature for a canonical payload, and a tmp-dir helper
|
|
12
|
+
* so individual specs don't repeat boilerplate.
|
|
13
|
+
*
|
|
14
|
+
* The fixture seed is fresh (generated 2026-05-22 with xrpl.Wallet.generate)
|
|
15
|
+
* and is NOT funded on any network. Re-deriving from this seed yields the
|
|
16
|
+
* same address / pubkey / signature on every machine — that's the whole
|
|
17
|
+
* point of an ed25519-with-deterministic-K (RFC 8032) signer.
|
|
18
|
+
*/
|
|
19
|
+
const fs_1 = require("fs");
|
|
20
|
+
const os_1 = require("os");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
/**
|
|
23
|
+
* Deterministic XRPL ed25519 fixture.
|
|
24
|
+
*
|
|
25
|
+
* Provenance — derived once with:
|
|
26
|
+
* node -e "const {Wallet}=require('xrpl'); const w=Wallet.fromSeed('sEdTyaBYHfQhWt9ycB9QJsRKH8UUEuD'); console.log(w.address, w.publicKey)"
|
|
27
|
+
*
|
|
28
|
+
* Expected signature derived by running the validator's exact verifier
|
|
29
|
+
* path (libs/security-core/src/auth/web3-auth.service.ts:334-340):
|
|
30
|
+
* const hex = Buffer.from(message, 'utf-8').toString('hex').toUpperCase();
|
|
31
|
+
* sign(hex, wallet.privateKey) // ripple-keypairs
|
|
32
|
+
*
|
|
33
|
+
* If `EXPECTED_SIGNATURE` drifts, the CLI's signFn no longer produces what
|
|
34
|
+
* the validator's web3-auth verifier accepts. That's an auth-contract
|
|
35
|
+
* regression — every developer's `subscribe`/`deploy` breaks silently.
|
|
36
|
+
*/
|
|
37
|
+
exports.XRPL_FIXTURE = {
|
|
38
|
+
seed: 'sEdTyaBYHfQhWt9ycB9QJsRKH8UUEuD',
|
|
39
|
+
address: 'rNHjsSoFgEMPZi4kE5rfw6c8k6tTUX8eng',
|
|
40
|
+
publicKey: 'ED652CD3EAB154510CBFCF4AEDEE4EAEB295D32EA7CE358F0B25D26203003F5DED',
|
|
41
|
+
/** Plain-text payload signed in the deterministic-signature assertion. */
|
|
42
|
+
payload: 'hello-smart-engines',
|
|
43
|
+
/** Output of `sign(hex(payload).upper, fixture.privateKey)`. */
|
|
44
|
+
expectedSignature: 'CFF9ABD65D3BBC985FE8A8C899DAC26B16DAB95B13AE2B2CB3DEAC2CA0E54F7791307B22971180D6016422EEE2E36ACFECCC7B7C3A1CB7701CE28D243E16BF03',
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Reproduce the validator's verifier check verbatim.
|
|
48
|
+
*
|
|
49
|
+
* Mirrors `verifyXRPLSignature` at
|
|
50
|
+
* libs/security-core/src/auth/web3-auth.service.ts:328-350 — same hex
|
|
51
|
+
* canonicalization, same ripple-keypairs.verify entry point. Used by the
|
|
52
|
+
* signFn spec to cross-check the CLI's output WITHOUT importing the heavy
|
|
53
|
+
* NestJS-bound web3-auth.service.ts class graph.
|
|
54
|
+
*/
|
|
55
|
+
function validatorVerifyXrplSignature(publicKey, message, signature) {
|
|
56
|
+
const messageHex = Buffer.from(message, 'utf-8').toString('hex').toUpperCase();
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
58
|
+
const { verify } = require('ripple-keypairs');
|
|
59
|
+
return verify(messageHex, signature, publicKey);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a throwaway tmp directory and return its path + a cleanup fn.
|
|
63
|
+
*
|
|
64
|
+
* Usage:
|
|
65
|
+
* const { dir, cleanup } = makeTempDir('hsuite-init-');
|
|
66
|
+
* afterEach(cleanup);
|
|
67
|
+
*/
|
|
68
|
+
function makeTempDir(prefix = 'hsuite-cli-spec-') {
|
|
69
|
+
const dir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), prefix));
|
|
70
|
+
return {
|
|
71
|
+
dir,
|
|
72
|
+
cleanup: () => (0, fs_1.rmSync)(dir, { recursive: true, force: true }),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** Build the path for an env file inside a tmp dir. */
|
|
76
|
+
function envPathIn(dir, name = '.env.local') {
|
|
77
|
+
return (0, path_1.join)(dir, name);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/fixtures.ts"],"names":[],"mappings":";;;AAmDA,oEASC;AASD,kCASC;AAGD,8BAEC;AAnFD;;;;;;;;;;;GAWG;AACH,2BAAyC;AACzC,2BAA4B;AAC5B,+BAA4B;AAE5B;;;;;;;;;;;;;;GAcG;AACU,QAAA,YAAY,GAAG;IAC1B,IAAI,EAAE,iCAAiC;IACvC,OAAO,EAAE,oCAAoC;IAC7C,SAAS,EAAE,oEAAoE;IAC/E,0EAA0E;IAC1E,OAAO,EAAE,qBAAqB;IAC9B,gEAAgE;IAChE,iBAAiB,EACf,kIAAkI;CAC5H,CAAC;AAEX;;;;;;;;GAQG;AACH,SAAgB,4BAA4B,CAC1C,SAAiB,EACjB,OAAe,EACf,SAAiB;IAEjB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,MAAM,GAAG,kBAAkB;IAIrD,MAAM,GAAG,GAAG,IAAA,gBAAW,EAAC,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,OAAO;QACL,GAAG;QACH,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,WAAM,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,uDAAuD;AACvD,SAAgB,SAAS,CAAC,GAAW,EAAE,IAAI,GAAG,YAAY;IACxD,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Public SDK-bootstrap host for the Smart Engines testnet. */
|
|
2
|
+
export declare const DEFAULT_GATEWAY = "https://gateway.testnet.hsuite.network";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the gateway URL to connect to. Bootstraps decentralized cluster
|
|
5
|
+
* discovery against `bootstrap`; on an empty registry or any failure,
|
|
6
|
+
* falls back to `bootstrap` itself (a working round-robin gateway).
|
|
7
|
+
*
|
|
8
|
+
* @param bootstrap fully-qualified bootstrap URL (the `--gateway` value)
|
|
9
|
+
* @returns the gateway URL the CLI should talk to
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveGatewayUrl(bootstrap: string): Promise<string>;
|
|
12
|
+
//# sourceMappingURL=cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":"AAiBA,+DAA+D;AAC/D,eAAO,MAAM,eAAe,2CAA2C,CAAC;AAExE;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_GATEWAY = void 0;
|
|
4
|
+
exports.resolveGatewayUrl = resolveGatewayUrl;
|
|
5
|
+
/**
|
|
6
|
+
* Cluster bootstrap — resolve a working gateway URL via decentralized
|
|
7
|
+
* cluster discovery.
|
|
8
|
+
*
|
|
9
|
+
* The CLI bootstraps against the public round-robin host
|
|
10
|
+
* `gateway.testnet.hsuite.network` — 3 DNS A-records over the 3 genesis
|
|
11
|
+
* cluster ingress LBs (HANDOFF arc-v13-do-deploy §11). It fetches the
|
|
12
|
+
* cluster registry through the SDK's `ClusterDiscoveryClient` and picks a
|
|
13
|
+
* random active cluster, so the CLI follows permissionless cluster
|
|
14
|
+
* join/leave with no code edits.
|
|
15
|
+
*
|
|
16
|
+
* If the registry is empty or unreachable it falls back to the bootstrap
|
|
17
|
+
* host itself — which is already a working gateway, round-robined across
|
|
18
|
+
* the clusters — so the CLI degrades gracefully instead of failing.
|
|
19
|
+
*/
|
|
20
|
+
const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
|
|
21
|
+
/** Public SDK-bootstrap host for the Smart Engines testnet. */
|
|
22
|
+
exports.DEFAULT_GATEWAY = 'https://gateway.testnet.hsuite.network';
|
|
23
|
+
/**
|
|
24
|
+
* Resolve the gateway URL to connect to. Bootstraps decentralized cluster
|
|
25
|
+
* discovery against `bootstrap`; on an empty registry or any failure,
|
|
26
|
+
* falls back to `bootstrap` itself (a working round-robin gateway).
|
|
27
|
+
*
|
|
28
|
+
* @param bootstrap fully-qualified bootstrap URL (the `--gateway` value)
|
|
29
|
+
* @returns the gateway URL the CLI should talk to
|
|
30
|
+
*/
|
|
31
|
+
async function resolveGatewayUrl(bootstrap) {
|
|
32
|
+
const allowInsecure = bootstrap.startsWith('http://');
|
|
33
|
+
try {
|
|
34
|
+
const discovery = new smart_engines_sdk_1.ClusterDiscoveryClient({
|
|
35
|
+
bootstrap: [bootstrap],
|
|
36
|
+
allowInsecure,
|
|
37
|
+
});
|
|
38
|
+
const url = await discovery.getRandomGatewayUrl();
|
|
39
|
+
return url ?? bootstrap;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return bootstrap;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=cluster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../src/_lib/cluster.ts"],"names":[],"mappings":";;;AA4BA,8CAYC;AAxCD;;;;;;;;;;;;;;GAcG;AACH,iEAAmE;AAEnE,+DAA+D;AAClD,QAAA,eAAe,GAAG,wCAAwC,CAAC;AAExE;;;;;;;GAOG;AACI,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,0CAAsB,CAAC;YAC3C,SAAS,EAAE,CAAC,SAAS,CAAC;YACtB,aAAa;SACd,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,mBAAmB,EAAE,CAAC;QAClD,OAAO,GAAG,IAAI,SAAS,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEpC,eAAO,MAAM,aAAa,SAyItB,CAAC"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -61,6 +61,7 @@ const path_1 = require("path");
|
|
|
61
61
|
const readline = __importStar(require("readline"));
|
|
62
62
|
const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
|
|
63
63
|
const env_1 = require("../_lib/env");
|
|
64
|
+
const cluster_1 = require("../_lib/cluster");
|
|
64
65
|
/**
|
|
65
66
|
* Block until the user presses Enter on stdin. Skipped in non-interactive
|
|
66
67
|
* mode (env `CI=true`, no TTY, or `--non-interactive` flag) — caller is
|
|
@@ -88,7 +89,7 @@ exports.deployCommand = new commander_1.Command('deploy')
|
|
|
88
89
|
.description('Deploy a smart-app from a JSON manifest (init → push → deploy)')
|
|
89
90
|
.requiredOption('--manifest <file>', 'JSON manifest path')
|
|
90
91
|
.option('--env <file>', 'Env file with auth creds', '.env.local')
|
|
91
|
-
.option('--gateway <url>', '
|
|
92
|
+
.option('--gateway <url>', 'Bootstrap host — seed for decentralized cluster discovery', cluster_1.DEFAULT_GATEWAY)
|
|
92
93
|
.option('--non-interactive', 'Skip the wait-for-Enter between init and deploy', false)
|
|
93
94
|
.action(async (opts) => {
|
|
94
95
|
console.log(chalk_1.default.bold.cyan('\n hsuite deploy\n'));
|
|
@@ -109,17 +110,27 @@ exports.deployCommand = new commander_1.Command('deploy')
|
|
|
109
110
|
console.log(chalk_1.default.gray(` name: ${manifest.name}`));
|
|
110
111
|
console.log(chalk_1.default.gray(` port: ${manifest.port}`));
|
|
111
112
|
console.log(chalk_1.default.gray(` services: ${manifest.services.join(', ') || '(none)'}`));
|
|
112
|
-
console.log(chalk_1.default.gray(` tag:
|
|
113
|
-
console.log(chalk_1.default.gray(`
|
|
113
|
+
console.log(chalk_1.default.gray(` tag: ${manifest.tag}`));
|
|
114
|
+
console.log(chalk_1.default.gray(` bootstrap: ${opts.gateway}\n`));
|
|
114
115
|
const env = (0, env_1.readEnv)(opts.env);
|
|
115
116
|
const signer = (0, env_1.buildSignerFromEnv)(env);
|
|
117
|
+
// Decentralized cluster discovery: bootstrap → registry → random node.
|
|
118
|
+
// Falls back to the bootstrap host (a working round-robin gateway).
|
|
119
|
+
let spinner = (0, ora_1.default)('discovering cluster...').start();
|
|
120
|
+
const gatewayUrl = await (0, cluster_1.resolveGatewayUrl)(opts.gateway);
|
|
121
|
+
spinner.succeed(`cluster: ${gatewayUrl}`);
|
|
116
122
|
const client = new smart_engines_sdk_1.BaasClient({
|
|
117
|
-
hostUrl:
|
|
123
|
+
hostUrl: gatewayUrl,
|
|
118
124
|
appId: env.get('SUBSCRIPTION_APP_ID') ?? 'pending',
|
|
119
|
-
allowInsecure:
|
|
120
|
-
|
|
125
|
+
allowInsecure: gatewayUrl.startsWith('http://'),
|
|
126
|
+
// Paths are the apps' real /api/* routes; the ingress routes each
|
|
127
|
+
// prefix straight to its service — no host-proxy prefix.
|
|
128
|
+
pathPrefix: '',
|
|
129
|
+
// deployment.init runs the smart-app entity DKG ceremony synchronously
|
|
130
|
+
// across the validator cluster — well past the 30s default. 3 min.
|
|
131
|
+
timeout: 180_000,
|
|
121
132
|
});
|
|
122
|
-
|
|
133
|
+
spinner = (0, ora_1.default)('authenticate...').start();
|
|
123
134
|
try {
|
|
124
135
|
await client.authenticate({
|
|
125
136
|
chain: signer.chain,
|
|
@@ -184,6 +195,7 @@ exports.deployCommand = new commander_1.Command('deploy')
|
|
|
184
195
|
try {
|
|
185
196
|
deployRes = await client.deployment.deploy(init.appId, {
|
|
186
197
|
tag: manifest.tag,
|
|
198
|
+
port: manifest.port,
|
|
187
199
|
replicas: manifest.replicas ?? 1,
|
|
188
200
|
env: manifest.env,
|
|
189
201
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;GAeG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,2BAA8D;AAC9D,+BAA+B;AAC/B,mDAAqC;AACrC,iEAAuD;AAIvD,qCAAqE;AA+BrE;;;;GAIG;AACH,KAAK,UAAU,YAAY;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;YACnB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAyB;IACjD,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC;AACf,CAAC;AAEY,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,gEAAgE,CAAC;KAC7E,cAAc,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,cAAc,EAAE,0BAA0B,EAAE,YAAY,CAAC;KAChE,MAAM,CACL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.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;
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -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
|
|
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":";;;;;;AAAA;;GAEG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,2BAA6D;AAC7D,+BAA+B;AAC/B,+BAA8B;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.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;
|
|
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>', '
|
|
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:
|
|
28
|
-
console.log(chalk_1.default.gray(`
|
|
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:
|
|
69
|
+
hostUrl: gatewayUrl,
|
|
63
70
|
appId: 'pending',
|
|
64
|
-
allowInsecure:
|
|
65
|
-
|
|
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":";;;;;;AAAA;;;;;;GAMG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,iEAAuD;AAGvD,qCAAqE;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,
|
|
1
|
+
{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../src/commands/subscribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,231 @@
|
|
|
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.verifyCommand = void 0;
|
|
7
|
+
exports.buildVerifyCommand = buildVerifyCommand;
|
|
8
|
+
/**
|
|
9
|
+
* `hsuite verify` — verify a PQC attestation cert against a payload.
|
|
10
|
+
*
|
|
11
|
+
* PR 11.1 — Arc 11 (external-verifier surface). Thin Commander wrapper
|
|
12
|
+
* around `verifyPqcAttestation` from `@hsuite/smart-engines-sdk/pqc-verify`
|
|
13
|
+
* (PR 11.0). Three invocation modes:
|
|
14
|
+
*
|
|
15
|
+
* - Direct verify:
|
|
16
|
+
* hsuite verify --cert <cert.json> --payload <payload.json>
|
|
17
|
+
*
|
|
18
|
+
* - Fetch-then-verify via smart-host proxy (PR #820):
|
|
19
|
+
* hsuite verify --topic-msg <consumer>/<contentHash> --payload <p.json>
|
|
20
|
+
*
|
|
21
|
+
* The proxy endpoint is `GET /api/pqc-attestation/<consumer>/<contentHash>`
|
|
22
|
+
* (apps/smart-host/src/pqc-proxy/pqc-attestation-proxy.controller.ts:35),
|
|
23
|
+
* keyed by `(consumer, contentHash)` — NOT a Hedera topic-message id.
|
|
24
|
+
* The flag name follows the design spec (§4.2) for customer-facing
|
|
25
|
+
* parity; the value is the consumer/contentHash slug the proxy actually
|
|
26
|
+
* accepts.
|
|
27
|
+
*
|
|
28
|
+
* - Help: hsuite verify --help
|
|
29
|
+
*
|
|
30
|
+
* Exit codes:
|
|
31
|
+
* 0 cert valid (threshold met)
|
|
32
|
+
* 1 cert invalid (specific reason printed to stderr) OR usage error
|
|
33
|
+
* 2 network / fetch error (only possible in --topic-msg mode)
|
|
34
|
+
*
|
|
35
|
+
* @see docs/superpowers/specs/2026-05-27-pqc-arc11-external-verifier-design.md §4.2
|
|
36
|
+
* @see docs/superpowers/plans/2026-05-27-pqc-arc11-external-verifier-plan.md PR 11.1
|
|
37
|
+
*/
|
|
38
|
+
const commander_1 = require("commander");
|
|
39
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
40
|
+
const fs_1 = require("fs");
|
|
41
|
+
const path_1 = require("path");
|
|
42
|
+
const pqc_verify_1 = require("@hsuite/smart-engines-sdk/pqc-verify");
|
|
43
|
+
const cluster_1 = require("../_lib/cluster");
|
|
44
|
+
/**
|
|
45
|
+
* Slug shape for `--topic-msg`. Matches the proxy controller's two
|
|
46
|
+
* Param() regexes (CONSUMER_RE + HASH_RE in pqc-attestation-proxy.service.ts).
|
|
47
|
+
* Surfacing the parse failure as a usage error (exit 1) rather than a fetch
|
|
48
|
+
* error so the developer fixes the input, not their connectivity.
|
|
49
|
+
*/
|
|
50
|
+
const TOPIC_MSG_SLUG_RE = /^([a-z][a-z0-9-]{0,63})\/([a-f0-9]{64})$/;
|
|
51
|
+
function readJsonFile(label, p) {
|
|
52
|
+
const abs = (0, path_1.resolve)(p);
|
|
53
|
+
if (!(0, fs_1.existsSync)(abs)) {
|
|
54
|
+
throw new Error(`${label} file not found: ${abs}`);
|
|
55
|
+
}
|
|
56
|
+
const raw = (0, fs_1.readFileSync)(abs, 'utf8');
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(raw);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw new Error(`${label} file is not valid JSON: ${err.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Map the verifier's machine-readable `reason` codes (e.g. `content-hash-mismatch`,
|
|
66
|
+
* `threshold-not-met`, `schema-invalid: <detail>`) to the human strings the CLI
|
|
67
|
+
* surfaces. The exit code is the contract; the wording is a developer-facing
|
|
68
|
+
* affordance, so we humanize "content-hash-mismatch" → "content-hash mismatch"
|
|
69
|
+
* and strip the verifier's debug suffix (computed=/cert=/verified=/required=).
|
|
70
|
+
*/
|
|
71
|
+
function humanizeReason(reason) {
|
|
72
|
+
if (!reason)
|
|
73
|
+
return 'unknown';
|
|
74
|
+
// Strip trailing debug suffix after first ": " — keeps the kind, drops detail.
|
|
75
|
+
const head = reason.split(': ')[0];
|
|
76
|
+
// content-hash-mismatch → content-hash mismatch
|
|
77
|
+
if (head === 'content-hash-mismatch')
|
|
78
|
+
return 'content-hash mismatch';
|
|
79
|
+
// threshold-not-met → threshold not met
|
|
80
|
+
if (head === 'threshold-not-met')
|
|
81
|
+
return 'threshold not met';
|
|
82
|
+
// schema-invalid → schema invalid (preserve original detail when present)
|
|
83
|
+
if (head === 'schema-invalid') {
|
|
84
|
+
const detail = reason.slice('schema-invalid'.length);
|
|
85
|
+
return `schema invalid${detail}`;
|
|
86
|
+
}
|
|
87
|
+
// payload-canonicalization-failed → payload canonicalization failed
|
|
88
|
+
if (head === 'payload-canonicalization-failed') {
|
|
89
|
+
return 'payload canonicalization failed';
|
|
90
|
+
}
|
|
91
|
+
// registry-* → registry <rest>
|
|
92
|
+
if (head.startsWith('registry-')) {
|
|
93
|
+
return head.replace(/^registry-/, 'registry ').replace(/-/g, ' ');
|
|
94
|
+
}
|
|
95
|
+
// Fallback: hyphens → spaces, keep detail.
|
|
96
|
+
return reason.replace(/-/g, ' ');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Fetch a cert from the smart-host proxy. Throws on transport / 5xx;
|
|
100
|
+
* returns `null` on a missing cert (404 OR `cert: null` payload OR
|
|
101
|
+
* `status: 'pending' | 'missing'` envelope).
|
|
102
|
+
*/
|
|
103
|
+
async function fetchCertFromProxy(args) {
|
|
104
|
+
const base = args.server.replace(/\/+$/, '');
|
|
105
|
+
const url = `${base}/api/pqc-attestation/${args.consumer}/${args.contentHash}`;
|
|
106
|
+
const resp = await fetch(url);
|
|
107
|
+
if (resp.status === 404)
|
|
108
|
+
return null;
|
|
109
|
+
if (!resp.ok) {
|
|
110
|
+
throw new Error(`smart-host proxy returned HTTP ${resp.status}`);
|
|
111
|
+
}
|
|
112
|
+
const body = (await resp.json());
|
|
113
|
+
if (body.status && body.status !== 'valid')
|
|
114
|
+
return null;
|
|
115
|
+
return body.cert ?? null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Build a fresh `verify` Command. Commander Command instances accumulate
|
|
119
|
+
* parsed-option state across `parseAsync` calls, so tests build their own
|
|
120
|
+
* via this factory to isolate runs; the bin entrypoint calls it once.
|
|
121
|
+
*/
|
|
122
|
+
function buildVerifyCommand() {
|
|
123
|
+
const cmd = new commander_1.Command('verify')
|
|
124
|
+
.description('Verify a PQC attestation cert against a payload (direct or via smart-host proxy)')
|
|
125
|
+
.option('--cert <path>', 'Path to the PQC cert JSON file (direct-verify mode)')
|
|
126
|
+
.option('--topic-msg <consumer/contentHash>', 'Fetch the cert via smart-host proxy at /api/pqc-attestation/<consumer>/<contentHash> then verify')
|
|
127
|
+
.option('--payload <path>', 'Path to the JSON payload to verify against')
|
|
128
|
+
.option('--server <url>', 'Smart-host base URL for --topic-msg mode (default: $SMART_HOST_URL / $VALIDATOR_URL / public testnet)')
|
|
129
|
+
.addHelpText('after', `
|
|
130
|
+
Examples:
|
|
131
|
+
hsuite verify --cert ./cert.json --payload ./payload.json
|
|
132
|
+
hsuite verify --topic-msg license-envelope/abc...def --payload ./payload.json
|
|
133
|
+
|
|
134
|
+
Exit codes:
|
|
135
|
+
0 cert valid (threshold met)
|
|
136
|
+
1 cert invalid (with reason on stderr) OR usage error
|
|
137
|
+
2 network / fetch error (only in --topic-msg mode)
|
|
138
|
+
`)
|
|
139
|
+
.action(async (opts) => {
|
|
140
|
+
// ── Flag validation ───────────────────────────────────────────────────
|
|
141
|
+
if (!opts.payload) {
|
|
142
|
+
console.error(chalk_1.default.red(' --payload is required\n'));
|
|
143
|
+
cmd.outputHelp();
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
const haveCert = !!opts.cert;
|
|
147
|
+
const haveTopicMsg = !!opts.topicMsg;
|
|
148
|
+
if (!haveCert && !haveTopicMsg) {
|
|
149
|
+
console.error(chalk_1.default.red(' one of --cert or --topic-msg is required\n'));
|
|
150
|
+
cmd.outputHelp();
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
if (haveCert && haveTopicMsg) {
|
|
154
|
+
console.error(chalk_1.default.red(' --cert and --topic-msg are mutually exclusive\n'));
|
|
155
|
+
cmd.outputHelp();
|
|
156
|
+
process.exit(1);
|
|
157
|
+
}
|
|
158
|
+
// ── Load payload (both modes) ─────────────────────────────────────────
|
|
159
|
+
let payload;
|
|
160
|
+
try {
|
|
161
|
+
payload = readJsonFile('payload', opts.payload);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
console.error(chalk_1.default.red(` ${err.message}\n`));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
// ── Resolve cert (direct or proxy-fetched) ────────────────────────────
|
|
168
|
+
let cert;
|
|
169
|
+
if (haveCert) {
|
|
170
|
+
try {
|
|
171
|
+
cert = readJsonFile('cert', opts.cert);
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
console.error(chalk_1.default.red(` ${err.message}\n`));
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const slugMatch = TOPIC_MSG_SLUG_RE.exec(opts.topicMsg);
|
|
180
|
+
if (!slugMatch) {
|
|
181
|
+
console.error(chalk_1.default.red(' --topic-msg must be "<consumer>/<contentHash>" where consumer matches /^[a-z][a-z0-9-]{0,63}$/ and contentHash is 64 hex chars\n'));
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const [, consumer, contentHash] = slugMatch;
|
|
185
|
+
const server = opts.server ??
|
|
186
|
+
process.env.SMART_HOST_URL ??
|
|
187
|
+
process.env.VALIDATOR_URL ??
|
|
188
|
+
cluster_1.DEFAULT_GATEWAY;
|
|
189
|
+
try {
|
|
190
|
+
const fetched = await fetchCertFromProxy({
|
|
191
|
+
server,
|
|
192
|
+
consumer,
|
|
193
|
+
contentHash,
|
|
194
|
+
});
|
|
195
|
+
if (fetched === null) {
|
|
196
|
+
console.error(chalk_1.default.red(' Cert not found on platform\n'));
|
|
197
|
+
process.exit(2);
|
|
198
|
+
}
|
|
199
|
+
cert = fetched;
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
console.error(chalk_1.default.red(` Network error: ${err.message}\n`));
|
|
203
|
+
process.exit(2);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// ── Verify ────────────────────────────────────────────────────────────
|
|
207
|
+
const result = await (0, pqc_verify_1.verifyPqcAttestation)(cert, payload);
|
|
208
|
+
if (result.valid) {
|
|
209
|
+
const n = result.verifiedSignerCount ?? 0;
|
|
210
|
+
// `signers.length` is on the cert (already schema-validated by
|
|
211
|
+
// verifyPqcAttestation). We pull it back out for the "N of M"
|
|
212
|
+
// diagnostic without re-parsing.
|
|
213
|
+
const m = Array.isArray(cert.signers)
|
|
214
|
+
? (cert.signers.length)
|
|
215
|
+
: n;
|
|
216
|
+
console.log(chalk_1.default.green(` Cert valid — ${n} of ${m} signers verified, threshold met`));
|
|
217
|
+
process.exit(0);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
console.error(chalk_1.default.red(` Cert invalid — ${humanizeReason(result.reason)}`));
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return cmd;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Default command instance used by the bin entrypoint. Tests build their
|
|
228
|
+
* own via {@link buildVerifyCommand}.
|
|
229
|
+
*/
|
|
230
|
+
exports.verifyCommand = buildVerifyCommand();
|
|
231
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,7 @@ const deploy_1 = require("./commands/deploy");
|
|
|
57
57
|
const governance_1 = require("./commands/governance");
|
|
58
58
|
const hist_balance_1 = require("./commands/hist-balance");
|
|
59
59
|
const personhood_1 = require("./commands/personhood");
|
|
60
|
+
const verify_1 = require("./commands/verify");
|
|
60
61
|
dotenv.config();
|
|
61
62
|
function getVersion() {
|
|
62
63
|
try {
|
|
@@ -79,6 +80,7 @@ program.addCommand(deploy_1.deployCommand);
|
|
|
79
80
|
program.addCommand(governance_1.governanceCommand);
|
|
80
81
|
program.addCommand(hist_balance_1.histBalanceCommand);
|
|
81
82
|
program.addCommand(personhood_1.personhoodCommand);
|
|
83
|
+
program.addCommand(verify_1.verifyCommand);
|
|
82
84
|
program.parse(process.argv);
|
|
83
85
|
if (!process.argv.slice(2).length) {
|
|
84
86
|
program.outputHelp();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAoC;AACpC,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,0CAA8C;AAC9C,oDAAwD;AACxD,8CAAkD;AAClD,sDAA0D;AAC1D,0DAA6D;AAC7D,sDAA0D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAoC;AACpC,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,0CAA8C;AAC9C,oDAAwD;AACxD,8CAAkD;AAClD,sDAA0D;AAC1D,0DAA6D;AAC7D,sDAA0D;AAC1D,8CAAkD;AAElD,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1E,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAEzB,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,8BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,iCAAkB,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,8BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|