@hsuite/smart-engines-cli 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) 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 +15 -0
  6. package/dist/_lib/cluster.d.ts.map +1 -0
  7. package/dist/_lib/cluster.js +18 -0
  8. package/dist/_lib/cluster.js.map +1 -0
  9. package/dist/_lib/subscription-client.d.ts +152 -0
  10. package/dist/_lib/subscription-client.d.ts.map +1 -0
  11. package/dist/_lib/subscription-client.js +84 -0
  12. package/dist/_lib/subscription-client.js.map +1 -0
  13. package/dist/_lib/subscription-env.d.ts +20 -0
  14. package/dist/_lib/subscription-env.d.ts.map +1 -0
  15. package/dist/_lib/subscription-env.js +28 -0
  16. package/dist/_lib/subscription-env.js.map +1 -0
  17. package/dist/commands/billing.d.ts +17 -0
  18. package/dist/commands/billing.d.ts.map +1 -0
  19. package/dist/commands/billing.js +59 -0
  20. package/dist/commands/billing.js.map +1 -0
  21. package/dist/commands/deploy.d.ts.map +1 -1
  22. package/dist/commands/deploy.js +32 -10
  23. package/dist/commands/deploy.js.map +1 -1
  24. package/dist/commands/downgrade.d.ts +22 -0
  25. package/dist/commands/downgrade.d.ts.map +1 -0
  26. package/dist/commands/downgrade.js +55 -0
  27. package/dist/commands/downgrade.js.map +1 -0
  28. package/dist/commands/init.d.ts.map +1 -1
  29. package/dist/commands/init.js +5 -7
  30. package/dist/commands/init.js.map +1 -1
  31. package/dist/commands/renew.d.ts +19 -0
  32. package/dist/commands/renew.d.ts.map +1 -0
  33. package/dist/commands/renew.js +58 -0
  34. package/dist/commands/renew.js.map +1 -0
  35. package/dist/commands/subscribe.d.ts +40 -4
  36. package/dist/commands/subscribe.d.ts.map +1 -1
  37. package/dist/commands/subscribe.js +156 -75
  38. package/dist/commands/subscribe.js.map +1 -1
  39. package/dist/commands/upgrade.d.ts +41 -0
  40. package/dist/commands/upgrade.d.ts.map +1 -0
  41. package/dist/commands/upgrade.js +128 -0
  42. package/dist/commands/upgrade.js.map +1 -0
  43. package/dist/commands/usage.d.ts +22 -0
  44. package/dist/commands/usage.d.ts.map +1 -0
  45. package/dist/commands/usage.js +81 -0
  46. package/dist/commands/usage.js.map +1 -0
  47. package/dist/commands/verify.d.ts +56 -0
  48. package/dist/commands/verify.d.ts.map +1 -0
  49. package/dist/commands/verify.js +291 -0
  50. package/dist/commands/verify.js.map +1 -0
  51. package/dist/index.d.ts +8 -2
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +21 -2
  54. package/dist/index.js.map +1 -1
  55. package/package.json +2 -2
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `hsuite verify` — verify a PQC attestation cert (Sig program) OR a Kyber
3
+ * hybrid envelope (Kyber Arc 11).
4
+ *
5
+ * PR 11.1 — Arc 11 (external-verifier surface). Thin Commander wrapper
6
+ * around `verifyPqcAttestation` from `@hsuite/smart-engines-sdk/pqc-verify`
7
+ * (PR 11.0) AND `verifyPqcEnvelope` from
8
+ * `@hsuite/smart-engines-sdk/pqc-verify-envelope` (Kyber Arc 11).
9
+ *
10
+ * Four invocation modes:
11
+ *
12
+ * - Direct cert verify (Sig):
13
+ * hsuite verify --cert <cert.json> --payload <payload.json>
14
+ *
15
+ * - Fetch-then-verify cert via smart-host proxy (Sig, PR #820):
16
+ * hsuite verify --topic-msg <consumer>/<contentHash> --payload <p.json>
17
+ *
18
+ * The proxy endpoint is `GET /api/pqc-attestation/<consumer>/<contentHash>`
19
+ * (apps/smart-host/src/pqc-proxy/pqc-attestation-proxy.controller.ts:35),
20
+ * keyed by `(consumer, contentHash)` — NOT a Hedera topic-message id.
21
+ * The flag name follows the design spec (§4.2) for customer-facing
22
+ * parity; the value is the consumer/contentHash slug the proxy actually
23
+ * accepts.
24
+ *
25
+ * - Envelope verify (Kyber):
26
+ * hsuite verify --envelope <envelope.json>
27
+ * [--expected-label <label>]
28
+ * [--expected-fingerprint <hex>]
29
+ *
30
+ * Observation-only — schema + base64 + timestamp + optional claim
31
+ * checks. No decryption, no key access.
32
+ *
33
+ * - Help: hsuite verify --help
34
+ *
35
+ * Exit codes:
36
+ * 0 cert/envelope valid
37
+ * 1 cert/envelope invalid (specific reason printed to stderr) OR usage error
38
+ * 2 network / fetch error (only possible in --topic-msg mode)
39
+ *
40
+ * @see docs/superpowers/specs/2026-05-27-pqc-arc11-external-verifier-design.md §4.2
41
+ * @see docs/superpowers/specs/2026-05-29-kyber-mlkem-production-readiness.md §5 Arc 11
42
+ * @see docs/superpowers/plans/2026-05-27-pqc-arc11-external-verifier-plan.md PR 11.1
43
+ */
44
+ import { Command } from 'commander';
45
+ /**
46
+ * Build a fresh `verify` Command. Commander Command instances accumulate
47
+ * parsed-option state across `parseAsync` calls, so tests build their own
48
+ * via this factory to isolate runs; the bin entrypoint calls it once.
49
+ */
50
+ export declare function buildVerifyCommand(): Command;
51
+ /**
52
+ * Default command instance used by the bin entrypoint. Tests build their
53
+ * own via {@link buildVerifyCommand}.
54
+ */
55
+ export declare const verifyCommand: Command;
56
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgGpC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAwM5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAuB,CAAC"}
@@ -0,0 +1,291 @@
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 (Sig program) OR a Kyber
10
+ * hybrid envelope (Kyber Arc 11).
11
+ *
12
+ * PR 11.1 — Arc 11 (external-verifier surface). Thin Commander wrapper
13
+ * around `verifyPqcAttestation` from `@hsuite/smart-engines-sdk/pqc-verify`
14
+ * (PR 11.0) AND `verifyPqcEnvelope` from
15
+ * `@hsuite/smart-engines-sdk/pqc-verify-envelope` (Kyber Arc 11).
16
+ *
17
+ * Four invocation modes:
18
+ *
19
+ * - Direct cert verify (Sig):
20
+ * hsuite verify --cert <cert.json> --payload <payload.json>
21
+ *
22
+ * - Fetch-then-verify cert via smart-host proxy (Sig, PR #820):
23
+ * hsuite verify --topic-msg <consumer>/<contentHash> --payload <p.json>
24
+ *
25
+ * The proxy endpoint is `GET /api/pqc-attestation/<consumer>/<contentHash>`
26
+ * (apps/smart-host/src/pqc-proxy/pqc-attestation-proxy.controller.ts:35),
27
+ * keyed by `(consumer, contentHash)` — NOT a Hedera topic-message id.
28
+ * The flag name follows the design spec (§4.2) for customer-facing
29
+ * parity; the value is the consumer/contentHash slug the proxy actually
30
+ * accepts.
31
+ *
32
+ * - Envelope verify (Kyber):
33
+ * hsuite verify --envelope <envelope.json>
34
+ * [--expected-label <label>]
35
+ * [--expected-fingerprint <hex>]
36
+ *
37
+ * Observation-only — schema + base64 + timestamp + optional claim
38
+ * checks. No decryption, no key access.
39
+ *
40
+ * - Help: hsuite verify --help
41
+ *
42
+ * Exit codes:
43
+ * 0 cert/envelope valid
44
+ * 1 cert/envelope invalid (specific reason printed to stderr) OR usage error
45
+ * 2 network / fetch error (only possible in --topic-msg mode)
46
+ *
47
+ * @see docs/superpowers/specs/2026-05-27-pqc-arc11-external-verifier-design.md §4.2
48
+ * @see docs/superpowers/specs/2026-05-29-kyber-mlkem-production-readiness.md §5 Arc 11
49
+ * @see docs/superpowers/plans/2026-05-27-pqc-arc11-external-verifier-plan.md PR 11.1
50
+ */
51
+ const commander_1 = require("commander");
52
+ const chalk_1 = __importDefault(require("chalk"));
53
+ const fs_1 = require("fs");
54
+ const path_1 = require("path");
55
+ // NOTE: imported from the SDK root barrel (not the `pqc-verify` /
56
+ // `pqc-verify-envelope` subpath exports) because the CLI's tsconfig.build.json
57
+ // uses classic `moduleResolution: "node"`, which doesn't honor package.json
58
+ // `exports` subpaths (TS2307 — added in TS 4.7 via `node16`/`nodenext`).
59
+ // The SDK re-exports both helpers from `libs/smartengine-sdk/src/index.ts`,
60
+ // so root-barrel imports resolve cleanly under classic resolution.
61
+ const smart_engines_sdk_1 = require("@hsuite/smart-engines-sdk");
62
+ const cluster_1 = require("../_lib/cluster");
63
+ /**
64
+ * Slug shape for `--topic-msg`. Matches the proxy controller's two
65
+ * Param() regexes (CONSUMER_RE + HASH_RE in pqc-attestation-proxy.service.ts).
66
+ * Surfacing the parse failure as a usage error (exit 1) rather than a fetch
67
+ * error so the developer fixes the input, not their connectivity.
68
+ */
69
+ const TOPIC_MSG_SLUG_RE = /^([a-z][a-z0-9-]{0,63})\/([a-f0-9]{64})$/;
70
+ function readJsonFile(label, p) {
71
+ const abs = (0, path_1.resolve)(p);
72
+ if (!(0, fs_1.existsSync)(abs)) {
73
+ throw new Error(`${label} file not found: ${abs}`);
74
+ }
75
+ const raw = (0, fs_1.readFileSync)(abs, 'utf8');
76
+ try {
77
+ return JSON.parse(raw);
78
+ }
79
+ catch (err) {
80
+ throw new Error(`${label} file is not valid JSON: ${err.message}`);
81
+ }
82
+ }
83
+ /**
84
+ * Map the verifier's machine-readable `reason` codes (e.g. `content-hash-mismatch`,
85
+ * `threshold-not-met`, `schema-invalid: <detail>`) to the human strings the CLI
86
+ * surfaces. The exit code is the contract; the wording is a developer-facing
87
+ * affordance, so we humanize "content-hash-mismatch" → "content-hash mismatch"
88
+ * and strip the verifier's debug suffix (computed=/cert=/verified=/required=).
89
+ */
90
+ function humanizeReason(reason) {
91
+ if (!reason)
92
+ return 'unknown';
93
+ // Strip trailing debug suffix after first ": " — keeps the kind, drops detail.
94
+ const head = reason.split(': ')[0];
95
+ // content-hash-mismatch → content-hash mismatch
96
+ if (head === 'content-hash-mismatch')
97
+ return 'content-hash mismatch';
98
+ // threshold-not-met → threshold not met
99
+ if (head === 'threshold-not-met')
100
+ return 'threshold not met';
101
+ // schema-invalid → schema invalid (preserve original detail when present)
102
+ if (head === 'schema-invalid') {
103
+ const detail = reason.slice('schema-invalid'.length);
104
+ return `schema invalid${detail}`;
105
+ }
106
+ // payload-canonicalization-failed → payload canonicalization failed
107
+ if (head === 'payload-canonicalization-failed') {
108
+ return 'payload canonicalization failed';
109
+ }
110
+ // registry-* → registry <rest>
111
+ if (head.startsWith('registry-')) {
112
+ return head.replace(/^registry-/, 'registry ').replace(/-/g, ' ');
113
+ }
114
+ // Fallback: hyphens → spaces, keep detail.
115
+ return reason.replace(/-/g, ' ');
116
+ }
117
+ /**
118
+ * Fetch a cert from the smart-host proxy. Throws on transport / 5xx;
119
+ * returns `null` on a missing cert (404 OR `cert: null` payload OR
120
+ * `status: 'pending' | 'missing'` envelope).
121
+ */
122
+ async function fetchCertFromProxy(args) {
123
+ const base = args.server.replace(/\/+$/, '');
124
+ const url = `${base}/api/pqc-attestation/${args.consumer}/${args.contentHash}`;
125
+ const resp = await fetch(url);
126
+ if (resp.status === 404)
127
+ return null;
128
+ if (!resp.ok) {
129
+ throw new Error(`smart-host proxy returned HTTP ${resp.status}`);
130
+ }
131
+ const body = (await resp.json());
132
+ if (body.status && body.status !== 'valid')
133
+ return null;
134
+ return body.cert ?? null;
135
+ }
136
+ /**
137
+ * Build a fresh `verify` Command. Commander Command instances accumulate
138
+ * parsed-option state across `parseAsync` calls, so tests build their own
139
+ * via this factory to isolate runs; the bin entrypoint calls it once.
140
+ */
141
+ function buildVerifyCommand() {
142
+ const cmd = new commander_1.Command('verify')
143
+ .description('Verify a PQC attestation cert (Sig) or a Kyber hybrid envelope (Arc 11)')
144
+ .option('--cert <path>', 'Path to the PQC cert JSON file (direct-verify cert mode)')
145
+ .option('--topic-msg <consumer/contentHash>', 'Fetch the cert via smart-host proxy at /api/pqc-attestation/<consumer>/<contentHash> then verify')
146
+ .option('--envelope <path>', 'Path to a Kyber hybrid envelope JSON file (observation-only verify; no decryption)')
147
+ .option('--payload <path>', 'Path to the JSON payload to verify against (cert modes only)')
148
+ .option('--expected-label <label>', 'Kyber envelope: REQUIRE the envelope.kdfLabel to equal this value (envelope mode only)')
149
+ .option('--expected-fingerprint <hex>', 'Kyber envelope: REQUIRE the envelope.recipientPkFingerprint to equal this hex value (envelope mode only)')
150
+ .option('--server <url>', 'Smart-host base URL for --topic-msg mode (default: $SMART_HOST_URL / $VALIDATOR_URL / public testnet)')
151
+ .addHelpText('after', `
152
+ Examples:
153
+ hsuite verify --cert ./cert.json --payload ./payload.json
154
+ hsuite verify --topic-msg license-envelope/abc...def --payload ./payload.json
155
+ hsuite verify --envelope ./envelope.json
156
+ hsuite verify --envelope ./envelope.json --expected-label smart-app-secret-envelope-v1
157
+
158
+ Exit codes:
159
+ 0 cert/envelope valid
160
+ 1 cert/envelope invalid (with reason on stderr) OR usage error
161
+ 2 network / fetch error (only in --topic-msg mode)
162
+ `)
163
+ .action(async (opts) => {
164
+ // ── Envelope mode (Kyber Arc 11) — short-circuits before cert flow ────
165
+ // Mode is mutually exclusive with --cert/--topic-msg/--payload.
166
+ const haveEnvelope = !!opts.envelope;
167
+ if (haveEnvelope) {
168
+ if (opts.cert || opts.topicMsg || opts.payload) {
169
+ console.error(chalk_1.default.red(' --envelope is mutually exclusive with --cert/--topic-msg/--payload\n'));
170
+ cmd.outputHelp();
171
+ process.exit(1);
172
+ }
173
+ let envelopeJson;
174
+ try {
175
+ envelopeJson = readJsonFile('envelope', opts.envelope);
176
+ }
177
+ catch (err) {
178
+ console.error(chalk_1.default.red(` ${err.message}\n`));
179
+ process.exit(1);
180
+ }
181
+ const result = await (0, smart_engines_sdk_1.verifyPqcEnvelope)(envelopeJson, {
182
+ expectedLabel: opts.expectedLabel,
183
+ expectedRecipientPkFingerprint: opts.expectedFingerprint,
184
+ });
185
+ if (result.valid) {
186
+ console.log(chalk_1.default.green(` Envelope valid — version=${result.version}` +
187
+ (result.details.kemAlgorithm
188
+ ? `, kem=${result.details.kemAlgorithm}`
189
+ : '') +
190
+ (result.details.kdfLabel
191
+ ? `, label='${result.details.kdfLabel}'`
192
+ : '')));
193
+ process.exit(0);
194
+ }
195
+ else {
196
+ console.error(chalk_1.default.red(` Envelope invalid — ${result.reason}`));
197
+ process.exit(1);
198
+ }
199
+ }
200
+ // ── Cert-mode flag validation ─────────────────────────────────────────
201
+ if (!opts.payload) {
202
+ console.error(chalk_1.default.red(' --payload is required\n'));
203
+ cmd.outputHelp();
204
+ process.exit(1);
205
+ }
206
+ const haveCert = !!opts.cert;
207
+ const haveTopicMsg = !!opts.topicMsg;
208
+ if (!haveCert && !haveTopicMsg) {
209
+ console.error(chalk_1.default.red(' one of --cert, --topic-msg, or --envelope is required\n'));
210
+ cmd.outputHelp();
211
+ process.exit(1);
212
+ }
213
+ if (haveCert && haveTopicMsg) {
214
+ console.error(chalk_1.default.red(' --cert and --topic-msg are mutually exclusive\n'));
215
+ cmd.outputHelp();
216
+ process.exit(1);
217
+ }
218
+ // ── Load payload (both modes) ─────────────────────────────────────────
219
+ let payload;
220
+ try {
221
+ payload = readJsonFile('payload', opts.payload);
222
+ }
223
+ catch (err) {
224
+ console.error(chalk_1.default.red(` ${err.message}\n`));
225
+ process.exit(1);
226
+ }
227
+ // ── Resolve cert (direct or proxy-fetched) ────────────────────────────
228
+ let cert;
229
+ if (haveCert) {
230
+ try {
231
+ cert = readJsonFile('cert', opts.cert);
232
+ }
233
+ catch (err) {
234
+ console.error(chalk_1.default.red(` ${err.message}\n`));
235
+ process.exit(1);
236
+ }
237
+ }
238
+ else {
239
+ const slugMatch = TOPIC_MSG_SLUG_RE.exec(opts.topicMsg);
240
+ if (!slugMatch) {
241
+ 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'));
242
+ process.exit(1);
243
+ }
244
+ const [, consumer, contentHash] = slugMatch;
245
+ const server = opts.server ??
246
+ process.env.SMART_HOST_URL ??
247
+ process.env.VALIDATOR_URL ??
248
+ cluster_1.DEFAULT_GATEWAY;
249
+ try {
250
+ const fetched = await fetchCertFromProxy({
251
+ server,
252
+ consumer,
253
+ contentHash,
254
+ });
255
+ if (fetched === null) {
256
+ console.error(chalk_1.default.red(' Cert not found on platform\n'));
257
+ process.exit(2);
258
+ }
259
+ cert = fetched;
260
+ }
261
+ catch (err) {
262
+ console.error(chalk_1.default.red(` Network error: ${err.message}\n`));
263
+ process.exit(2);
264
+ }
265
+ }
266
+ // ── Verify ────────────────────────────────────────────────────────────
267
+ const result = await (0, smart_engines_sdk_1.verifyPqcAttestation)(cert, payload);
268
+ if (result.valid) {
269
+ const n = result.verifiedSignerCount ?? 0;
270
+ // `signers.length` is on the cert (already schema-validated by
271
+ // verifyPqcAttestation). We pull it back out for the "N of M"
272
+ // diagnostic without re-parsing.
273
+ const m = Array.isArray(cert.signers)
274
+ ? (cert.signers.length)
275
+ : n;
276
+ console.log(chalk_1.default.green(` Cert valid — ${n} of ${m} signers verified, threshold met`));
277
+ process.exit(0);
278
+ }
279
+ else {
280
+ console.error(chalk_1.default.red(` Cert invalid — ${humanizeReason(result.reason)}`));
281
+ process.exit(1);
282
+ }
283
+ });
284
+ return cmd;
285
+ }
286
+ /**
287
+ * Default command instance used by the bin entrypoint. Tests build their
288
+ * own via {@link buildVerifyCommand}.
289
+ */
290
+ exports.verifyCommand = buildVerifyCommand();
291
+ //# 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.d.ts CHANGED
@@ -4,8 +4,14 @@
4
4
  *
5
5
  * hsuite init Generate XRPL testnet wallet, fund via
6
6
  * faucet, write .env.local.
7
- * hsuite subscribe --env <file> Register a free_testnet smart-app on the
8
- * cluster (no HSUITE deposit on testnet).
7
+ * hsuite subscribe [--tier T] Mint a subscription NFT via the cluster's
8
+ * /api/v3/subscription/* surface.
9
+ * hsuite renew Extend the subscription lock period.
10
+ * hsuite upgrade --to-tier T Upgrade tier (may require a top-up).
11
+ * hsuite downgrade --to-tier T Schedule a downgrade for next renewal.
12
+ * hsuite tier-change cancel Cancel a pending tier change.
13
+ * hsuite usage Print today's usage + overage info.
14
+ * hsuite billing Print the billing-ledger entries.
9
15
  * hsuite deploy --manifest <f> Deploy a smart-app from a JSON manifest.
10
16
  *
11
17
  * Smart Engines V3 is XRPL-only for smart-app authentication and
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;GAkBG"}
package/dist/index.js CHANGED
@@ -5,8 +5,14 @@
5
5
  *
6
6
  * hsuite init Generate XRPL testnet wallet, fund via
7
7
  * faucet, write .env.local.
8
- * hsuite subscribe --env <file> Register a free_testnet smart-app on the
9
- * cluster (no HSUITE deposit on testnet).
8
+ * hsuite subscribe [--tier T] Mint a subscription NFT via the cluster's
9
+ * /api/v3/subscription/* surface.
10
+ * hsuite renew Extend the subscription lock period.
11
+ * hsuite upgrade --to-tier T Upgrade tier (may require a top-up).
12
+ * hsuite downgrade --to-tier T Schedule a downgrade for next renewal.
13
+ * hsuite tier-change cancel Cancel a pending tier change.
14
+ * hsuite usage Print today's usage + overage info.
15
+ * hsuite billing Print the billing-ledger entries.
10
16
  * hsuite deploy --manifest <f> Deploy a smart-app from a JSON manifest.
11
17
  *
12
18
  * Smart Engines V3 is XRPL-only for smart-app authentication and
@@ -54,9 +60,15 @@ const path = __importStar(require("path"));
54
60
  const init_1 = require("./commands/init");
55
61
  const subscribe_1 = require("./commands/subscribe");
56
62
  const deploy_1 = require("./commands/deploy");
63
+ const renew_1 = require("./commands/renew");
64
+ const upgrade_1 = require("./commands/upgrade");
65
+ const downgrade_1 = require("./commands/downgrade");
66
+ const usage_1 = require("./commands/usage");
67
+ const billing_1 = require("./commands/billing");
57
68
  const governance_1 = require("./commands/governance");
58
69
  const hist_balance_1 = require("./commands/hist-balance");
59
70
  const personhood_1 = require("./commands/personhood");
71
+ const verify_1 = require("./commands/verify");
60
72
  dotenv.config();
61
73
  function getVersion() {
62
74
  try {
@@ -75,10 +87,17 @@ program
75
87
  .version(getVersion());
76
88
  program.addCommand(init_1.initCommand);
77
89
  program.addCommand(subscribe_1.subscribeCommand);
90
+ program.addCommand(renew_1.renewCommand);
91
+ program.addCommand(upgrade_1.upgradeCommand);
92
+ program.addCommand(downgrade_1.downgradeCommand);
93
+ program.addCommand(upgrade_1.tierChangeCommand);
94
+ program.addCommand(usage_1.usageCommand);
95
+ program.addCommand(billing_1.billingCommand);
78
96
  program.addCommand(deploy_1.deployCommand);
79
97
  program.addCommand(governance_1.governanceCommand);
80
98
  program.addCommand(hist_balance_1.histBalanceCommand);
81
99
  program.addCommand(personhood_1.personhoodCommand);
100
+ program.addCommand(verify_1.verifyCommand);
82
101
  program.parse(process.argv);
83
102
  if (!process.argv.slice(2).length) {
84
103
  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;AAE1D,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;AAEtC,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAoC;AACpC,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,0CAA8C;AAC9C,oDAAwD;AACxD,8CAAkD;AAClD,4CAAgD;AAChD,gDAAuE;AACvE,oDAAwD;AACxD,4CAAgD;AAChD,gDAAoD;AACpD,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,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,2BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hsuite/smart-engines-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "HSuite CLI for smart-app deployment and management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "prepublishOnly": "npm run clean && npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "@hsuite/smart-engines-sdk": "^3.0.0",
21
+ "@hsuite/smart-engines-sdk": "^3.4.0",
22
22
  "chalk": "^4.1.2",
23
23
  "commander": "^11.1.0",
24
24
  "dotenv": "^17.2.3",