@hsuite/smart-engines-cli 1.5.1 → 1.6.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.
- package/README.md +5 -3
- package/dist/_lib/baas.d.ts +27 -4
- package/dist/_lib/baas.d.ts.map +1 -1
- package/dist/_lib/baas.js +76 -42
- package/dist/_lib/baas.js.map +1 -1
- package/dist/_lib/cluster-convergence.d.ts +214 -0
- package/dist/_lib/cluster-convergence.d.ts.map +1 -0
- package/dist/_lib/cluster-convergence.js +381 -0
- package/dist/_lib/cluster-convergence.js.map +1 -0
- package/dist/_lib/deploy-manifest.d.ts +32 -0
- package/dist/_lib/deploy-manifest.d.ts.map +1 -1
- package/dist/_lib/deploy-manifest.js +71 -0
- package/dist/_lib/deploy-manifest.js.map +1 -1
- package/dist/_lib/docker.d.ts +35 -23
- package/dist/_lib/docker.d.ts.map +1 -1
- package/dist/_lib/docker.js +58 -54
- package/dist/_lib/docker.js.map +1 -1
- package/dist/_lib/frontend-guard.d.ts +59 -0
- package/dist/_lib/frontend-guard.d.ts.map +1 -1
- package/dist/_lib/frontend-guard.js +148 -0
- package/dist/_lib/frontend-guard.js.map +1 -1
- package/dist/_lib/registry-fanout.d.ts +299 -9
- package/dist/_lib/registry-fanout.d.ts.map +1 -1
- package/dist/_lib/registry-fanout.js +557 -27
- package/dist/_lib/registry-fanout.js.map +1 -1
- package/dist/_lib/subscription-client.d.ts +14 -0
- package/dist/_lib/subscription-client.d.ts.map +1 -1
- package/dist/_lib/subscription-client.js +13 -0
- package/dist/_lib/subscription-client.js.map +1 -1
- package/dist/commands/deploy.d.ts +28 -4
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +163 -20
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/redeploy.d.ts +10 -0
- package/dist/commands/redeploy.d.ts.map +1 -1
- package/dist/commands/redeploy.js +146 -15
- package/dist/commands/redeploy.js.map +1 -1
- package/dist/commands/status.d.ts +4 -3
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +15 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/topup.d.ts +55 -0
- package/dist/commands/topup.d.ts.map +1 -0
- package/dist/commands/topup.js +180 -0
- package/dist/commands/topup.js.map +1 -0
- package/dist/commands/update.d.ts +33 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +38 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +24 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,180 @@
|
|
|
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.topupCommand = void 0;
|
|
7
|
+
exports.runTopUp = runTopUp;
|
|
8
|
+
/**
|
|
9
|
+
* `hsuite topup` — re-fund a drained prepaid float WITHOUT changing tier (#2857).
|
|
10
|
+
*
|
|
11
|
+
* ## Why this exists
|
|
12
|
+
*
|
|
13
|
+
* The subscription deposit is a PREPAID FLOAT: it is seeded once at activation
|
|
14
|
+
* and only ever decreases (`remainingBalance = fundedAmount − settledAmount`,
|
|
15
|
+
* and `settledAmount` is monotonic). Nothing re-funded it:
|
|
16
|
+
*
|
|
17
|
+
* - `hsuite renew` extends the deposit LOCK but takes no fresh deposit;
|
|
18
|
+
* - the validator's deposit monitor credits only `PENDING_DEPOSIT` rows, so
|
|
19
|
+
* paying the deposit wallet of an ACTIVE subscription was never credited;
|
|
20
|
+
* - the only top-up in the codebase rode the tier-UPGRADE confirm.
|
|
21
|
+
*
|
|
22
|
+
* So a pay-per-use app that simply consumed its credit had no way back except
|
|
23
|
+
* changing product tier. Observed live 2026-08-26: the showcase hit
|
|
24
|
+
* `remainingBalance = 0` and the deployer's subscription gate pinned it at 0
|
|
25
|
+
* replicas ("scaling Deployment → 0 (subscription not active)").
|
|
26
|
+
*
|
|
27
|
+
* ## Flow
|
|
28
|
+
*
|
|
29
|
+
* 1. Read XRPL_ADDRESS + XRPL_SEED + the appId from env (`hsuite init`).
|
|
30
|
+
* 2. Web3-auth against the validator (the route is ownership-guarded).
|
|
31
|
+
* 3. POST /api/v3/subscription/topup → records the pending credit and returns
|
|
32
|
+
* the EXISTING deposit wallet + the amount to send.
|
|
33
|
+
* 4. Auto-pay that credit in HST (SendMax covers the 0.25% transfer fee),
|
|
34
|
+
* unless `--no-autopay`.
|
|
35
|
+
* 5. Poll status until the float is back above zero — the validator's deposit
|
|
36
|
+
* monitor applies it via `checkPendingTopUp`, capped by the 3× rollover cap.
|
|
37
|
+
*
|
|
38
|
+
* On testnet the credit costs nothing real: `hsuite faucet` dispenses HSUITE-testnet.
|
|
39
|
+
*/
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
42
|
+
const ora_1 = __importDefault(require("ora"));
|
|
43
|
+
const env_1 = require("../_lib/env");
|
|
44
|
+
const subscription_client_1 = require("../_lib/subscription-client");
|
|
45
|
+
const subscription_env_1 = require("../_lib/subscription-env");
|
|
46
|
+
const XRPL_TESTNET_WSS = 'wss://s.altnet.rippletest.net:51233';
|
|
47
|
+
/** Covers the 0.25% HST transfer fee, matching `hsuite subscribe`. */
|
|
48
|
+
const HST_TRANSFER_FEE_MULTIPLIER = 1.004;
|
|
49
|
+
const POLL_ATTEMPTS = 30;
|
|
50
|
+
const POLL_INTERVAL_MS = 5_000;
|
|
51
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
52
|
+
function defaultXrplClientFactory(wss) {
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
54
|
+
const { Client } = require('xrpl');
|
|
55
|
+
return new Client(wss);
|
|
56
|
+
}
|
|
57
|
+
function defaultWalletSignFactory(seed) {
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
59
|
+
const { Wallet } = require('xrpl');
|
|
60
|
+
const wallet = Wallet.fromSeed(seed);
|
|
61
|
+
return (prepared) => wallet.sign(prepared).tx_blob;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the HST issuer from the destination's trust lines — the same
|
|
65
|
+
* derivation `hsuite subscribe` uses, so the credit rides the identical asset.
|
|
66
|
+
*/
|
|
67
|
+
async function resolveHstIssuer(client, destination) {
|
|
68
|
+
const res = await client.request({ command: 'account_lines', account: destination });
|
|
69
|
+
const line = (res?.result?.lines ?? []).find((l) => l.currency === 'HST');
|
|
70
|
+
if (!line?.account) {
|
|
71
|
+
throw new Error(`could not resolve the HST issuer from ${destination}'s trust lines`);
|
|
72
|
+
}
|
|
73
|
+
return line.account;
|
|
74
|
+
}
|
|
75
|
+
async function runTopUp(opts) {
|
|
76
|
+
const env = (0, env_1.readEnv)(opts.env);
|
|
77
|
+
const baseUrl = (0, subscription_env_1.requireValidatorUrl)(env, { gateway: opts.gateway });
|
|
78
|
+
const appId = (0, subscription_env_1.requireAppId)(env, { appId: opts.appId });
|
|
79
|
+
const address = env.get('XRPL_ADDRESS');
|
|
80
|
+
const seed = env.get('XRPL_SEED');
|
|
81
|
+
if (!address || !seed) {
|
|
82
|
+
throw new Error('XRPL_ADDRESS and XRPL_SEED are required in the env file (run `hsuite init`)');
|
|
83
|
+
}
|
|
84
|
+
if (opts.amount !== undefined && !/^\d+$/.test(opts.amount)) {
|
|
85
|
+
throw new Error(`--amount must be a non-negative integer (got "${opts.amount}")`);
|
|
86
|
+
}
|
|
87
|
+
const client = (opts.clientFactory ??
|
|
88
|
+
((b) => new subscription_client_1.SubscriptionClient({ baseUrl: b, auth: { chain: 'xrpl', address, seed } })))(baseUrl);
|
|
89
|
+
await client.authenticate();
|
|
90
|
+
const req = await client.topUp(appId, opts.amount);
|
|
91
|
+
if (!req.success || !req.amount || !req.depositAddress) {
|
|
92
|
+
throw new Error(`top-up request failed: ${req.message ?? 'unknown error'}`);
|
|
93
|
+
}
|
|
94
|
+
if (opts.autopay === false) {
|
|
95
|
+
return { appId, amount: req.amount, depositAddress: req.depositAddress, paid: false, applied: false };
|
|
96
|
+
}
|
|
97
|
+
// ── Pay the credit ───────────────────────────────────────────────────────
|
|
98
|
+
const walletSign = (opts.walletSignFactory ?? defaultWalletSignFactory)(seed);
|
|
99
|
+
const xrpl = (opts.xrplClientFactory ?? defaultXrplClientFactory)(XRPL_TESTNET_WSS);
|
|
100
|
+
await xrpl.connect();
|
|
101
|
+
try {
|
|
102
|
+
const issuer = await resolveHstIssuer(xrpl, req.depositAddress);
|
|
103
|
+
const sendMax = (Number(req.amount) * HST_TRANSFER_FEE_MULTIPLIER).toFixed(6);
|
|
104
|
+
const prepared = await xrpl.autofill({
|
|
105
|
+
TransactionType: 'Payment',
|
|
106
|
+
Account: address,
|
|
107
|
+
Destination: req.depositAddress,
|
|
108
|
+
Amount: { currency: 'HST', issuer, value: req.amount },
|
|
109
|
+
SendMax: { currency: 'HST', issuer, value: sendMax },
|
|
110
|
+
});
|
|
111
|
+
const result = await xrpl.submitAndWait(walletSign(prepared));
|
|
112
|
+
const code = result?.result?.meta?.TransactionResult;
|
|
113
|
+
if (code !== 'tesSUCCESS') {
|
|
114
|
+
throw new Error(`top-up Payment failed: ${code ?? 'unknown result'}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
await xrpl.disconnect();
|
|
119
|
+
}
|
|
120
|
+
// ── Wait for the validator's deposit monitor to apply it ─────────────────
|
|
121
|
+
const nap = opts.sleepFn ?? sleep;
|
|
122
|
+
for (let i = 0; i < POLL_ATTEMPTS; i++) {
|
|
123
|
+
await nap(POLL_INTERVAL_MS);
|
|
124
|
+
try {
|
|
125
|
+
const st = await client.status(appId);
|
|
126
|
+
const remaining = st?.remainingBalance ?? st?.subscription?.remainingBalance;
|
|
127
|
+
if (remaining !== undefined && BigInt(remaining) > 0n) {
|
|
128
|
+
return {
|
|
129
|
+
appId,
|
|
130
|
+
amount: req.amount,
|
|
131
|
+
depositAddress: req.depositAddress,
|
|
132
|
+
paid: true,
|
|
133
|
+
applied: true,
|
|
134
|
+
remainingBalance: String(remaining),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// transient read failure — keep polling
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Paid but not yet observed: the monitor tick is periodic, so this is not a
|
|
143
|
+
// failure of the payment. Report honestly rather than claiming success.
|
|
144
|
+
return { appId, amount: req.amount, depositAddress: req.depositAddress, paid: true, applied: false };
|
|
145
|
+
}
|
|
146
|
+
exports.topupCommand = new commander_1.Command('topup')
|
|
147
|
+
.description('Re-fund the prepaid float without changing tier (same-tier credit top-up)')
|
|
148
|
+
.option('--env <file>', 'Env file with XRPL creds + subscription appId', '.env.local')
|
|
149
|
+
.option('--gateway <url>', 'Validator/gateway URL (defaults to VALIDATOR_URL in env)')
|
|
150
|
+
.option('--app-id <id>', 'Override SUBSCRIPTION_APP_ID from env')
|
|
151
|
+
.option('--amount <hst>', 'Credit in HSUITE smallest-units (default: one month of the current tier)')
|
|
152
|
+
.option('--no-autopay', 'Only request the credit and print instructions; do not pay')
|
|
153
|
+
.action(async (opts) => {
|
|
154
|
+
console.log(chalk_1.default.bold.cyan('\n hsuite topup\n'));
|
|
155
|
+
const spinner = (0, ora_1.default)('requesting float top-up...').start();
|
|
156
|
+
try {
|
|
157
|
+
const r = await runTopUp(opts);
|
|
158
|
+
if (!r.paid) {
|
|
159
|
+
spinner.info(`top-up requested (appId=${r.appId}) — not paid (--no-autopay)`);
|
|
160
|
+
console.log(chalk_1.default.gray(` send ${r.amount} HST to ${r.depositAddress}`));
|
|
161
|
+
console.log(chalk_1.default.cyan('\n then re-run `hsuite topup` (or wait for the deposit monitor).\n'));
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (r.applied) {
|
|
165
|
+
spinner.succeed(`float topped up (appId=${r.appId})`);
|
|
166
|
+
console.log(chalk_1.default.gray(` credit: ${r.amount} HST`));
|
|
167
|
+
console.log(chalk_1.default.gray(` remainingBalance: ${r.remainingBalance}`));
|
|
168
|
+
console.log(chalk_1.default.bold.green('\n ✓ subscription funded\n'));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
spinner.warn(`credit paid but not yet applied (appId=${r.appId})`);
|
|
172
|
+
console.log(chalk_1.default.gray(' the validator applies it on its next deposit-monitor tick.'));
|
|
173
|
+
console.log(chalk_1.default.gray(' re-check with `hsuite status`.'));
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
spinner.fail(err.message);
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=topup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topup.js","sourceRoot":"","sources":["../../src/commands/topup.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,37 @@
|
|
|
5
5
|
* resources (cpu/memory), degree, replicas, env (via repeatable `--env-set
|
|
6
6
|
* KEY=VAL`), and strategy. At least one field must be supplied — an empty
|
|
7
7
|
* update is rejected before any HTTP call.
|
|
8
|
+
*
|
|
9
|
+
* Wire target: `PUT /api/v3/baas/deployment/apps/:appId` on smart-host
|
|
10
|
+
* (`@Controller('baas/deployment')` + `@Put('apps/:appId')`), parsed there by
|
|
11
|
+
* `UpdateAppDto = DeployAppDto.partial()`. The SDK used to address the
|
|
12
|
+
* VALIDATOR's `/api/v3/smart-apps/:appId` namespace instead, which smart-host
|
|
13
|
+
* does not mount — every `hsuite update` died on
|
|
14
|
+
* `Cannot PUT /api/v3/smart-apps/<appId>`.
|
|
15
|
+
*
|
|
16
|
+
* ## `--env-set` REPLACES the env map — it does not patch keys
|
|
17
|
+
*
|
|
18
|
+
* There is no server-side merge anywhere on this path. smart-host's
|
|
19
|
+
* `DeploymentService.update` builds `encryptedEnv` from `dto.env` ALONE (it
|
|
20
|
+
* never reads `current.env`) and passes it to `attachRuntime`, which the
|
|
21
|
+
* validator persists as `$set: { 'runtime.env': <that object> }` — a `$set` on
|
|
22
|
+
* the whole `runtime.env` path REPLACES the sub-document. The smart-deployer
|
|
23
|
+
* then renders `<ns>-customer-env` from whatever survived. So a single
|
|
24
|
+
* `--env-set FOO=bar` drops EVERY other var (including `XRPL_SEED`) from the
|
|
25
|
+
* running pod. {@link ENV_REPLACE_WARNING} is emitted whenever `env` rides on
|
|
26
|
+
* the request so this can never happen silently. The CLI cannot merge on the
|
|
27
|
+
* client side: `deployment.get()` returns `runtime.env` as PQC envelopes, not
|
|
28
|
+
* plaintext, so it has nothing to merge against.
|
|
8
29
|
*/
|
|
9
30
|
import { Command } from 'commander';
|
|
10
31
|
import type { BaasDeployRequest } from '@hsuite/smart-engines-sdk';
|
|
11
32
|
import { connectAndAuth } from '../_lib/baas';
|
|
33
|
+
/**
|
|
34
|
+
* Emitted whenever an update carries `env`. See the file header for the
|
|
35
|
+
* evidence chain — the server `$set`s the whole `runtime.env` sub-document,
|
|
36
|
+
* so this is a REPLACE and any key omitted here is dropped from the pod.
|
|
37
|
+
*/
|
|
38
|
+
export declare const ENV_REPLACE_WARNING: string;
|
|
12
39
|
export type UpdateOpts = {
|
|
13
40
|
envPath: string;
|
|
14
41
|
gateway: string;
|
|
@@ -23,6 +50,12 @@ export type UpdateOpts = {
|
|
|
23
50
|
strategy?: 'rolling' | 'recreate';
|
|
24
51
|
/** Raw `KEY=VAL` strings (repeatable `--env-set`). */
|
|
25
52
|
envSet?: string[];
|
|
53
|
+
/**
|
|
54
|
+
* Advisory sink for {@link ENV_REPLACE_WARNING}. Defaults to a chalk'd
|
|
55
|
+
* `console.warn`, which is what the operator sees; specs override it so the
|
|
56
|
+
* warning is assertable without capturing console output.
|
|
57
|
+
*/
|
|
58
|
+
warn?: (message: string) => void;
|
|
26
59
|
clientFactory?: Parameters<typeof connectAndAuth>[0]['clientFactory'];
|
|
27
60
|
};
|
|
28
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAKnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAIuC,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;CACvE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B5E;AAED,yDAAyD;AACzD,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuB5E;AAED,eAAO,MAAM,aAAa,SA2CtB,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.updateCommand = void 0;
|
|
6
|
+
exports.updateCommand = exports.ENV_REPLACE_WARNING = void 0;
|
|
7
7
|
exports.buildUpdateBody = buildUpdateBody;
|
|
8
8
|
exports.runUpdate = runUpdate;
|
|
9
9
|
/**
|
|
@@ -13,6 +13,27 @@ exports.runUpdate = runUpdate;
|
|
|
13
13
|
* resources (cpu/memory), degree, replicas, env (via repeatable `--env-set
|
|
14
14
|
* KEY=VAL`), and strategy. At least one field must be supplied — an empty
|
|
15
15
|
* update is rejected before any HTTP call.
|
|
16
|
+
*
|
|
17
|
+
* Wire target: `PUT /api/v3/baas/deployment/apps/:appId` on smart-host
|
|
18
|
+
* (`@Controller('baas/deployment')` + `@Put('apps/:appId')`), parsed there by
|
|
19
|
+
* `UpdateAppDto = DeployAppDto.partial()`. The SDK used to address the
|
|
20
|
+
* VALIDATOR's `/api/v3/smart-apps/:appId` namespace instead, which smart-host
|
|
21
|
+
* does not mount — every `hsuite update` died on
|
|
22
|
+
* `Cannot PUT /api/v3/smart-apps/<appId>`.
|
|
23
|
+
*
|
|
24
|
+
* ## `--env-set` REPLACES the env map — it does not patch keys
|
|
25
|
+
*
|
|
26
|
+
* There is no server-side merge anywhere on this path. smart-host's
|
|
27
|
+
* `DeploymentService.update` builds `encryptedEnv` from `dto.env` ALONE (it
|
|
28
|
+
* never reads `current.env`) and passes it to `attachRuntime`, which the
|
|
29
|
+
* validator persists as `$set: { 'runtime.env': <that object> }` — a `$set` on
|
|
30
|
+
* the whole `runtime.env` path REPLACES the sub-document. The smart-deployer
|
|
31
|
+
* then renders `<ns>-customer-env` from whatever survived. So a single
|
|
32
|
+
* `--env-set FOO=bar` drops EVERY other var (including `XRPL_SEED`) from the
|
|
33
|
+
* running pod. {@link ENV_REPLACE_WARNING} is emitted whenever `env` rides on
|
|
34
|
+
* the request so this can never happen silently. The CLI cannot merge on the
|
|
35
|
+
* client side: `deployment.get()` returns `runtime.env` as PQC envelopes, not
|
|
36
|
+
* plaintext, so it has nothing to merge against.
|
|
16
37
|
*/
|
|
17
38
|
const commander_1 = require("commander");
|
|
18
39
|
const chalk_1 = __importDefault(require("chalk"));
|
|
@@ -20,6 +41,15 @@ const env_1 = require("../_lib/env");
|
|
|
20
41
|
const subscription_env_1 = require("../_lib/subscription-env");
|
|
21
42
|
const cluster_1 = require("../_lib/cluster");
|
|
22
43
|
const baas_1 = require("../_lib/baas");
|
|
44
|
+
/**
|
|
45
|
+
* Emitted whenever an update carries `env`. See the file header for the
|
|
46
|
+
* evidence chain — the server `$set`s the whole `runtime.env` sub-document,
|
|
47
|
+
* so this is a REPLACE and any key omitted here is dropped from the pod.
|
|
48
|
+
*/
|
|
49
|
+
exports.ENV_REPLACE_WARNING = '--env-set REPLACES the app\'s ENTIRE env map — it does not patch individual ' +
|
|
50
|
+
'keys. Every var you do not pass on this command (XRPL_SEED included) will be ' +
|
|
51
|
+
'dropped from the running pod. To change one value safely, re-send the FULL ' +
|
|
52
|
+
'set, or run `hsuite redeploy` which forwards your whole .env.local.';
|
|
23
53
|
/**
|
|
24
54
|
* Build the partial deploy-request from the update options. Exported so the spec
|
|
25
55
|
* can assert the exact body shape (and the ≥1-field rule) without HTTP.
|
|
@@ -71,6 +101,12 @@ async function runUpdate(opts) {
|
|
|
71
101
|
appId: subscriptionAppId,
|
|
72
102
|
clientFactory: opts.clientFactory,
|
|
73
103
|
});
|
|
104
|
+
// Warn AFTER auth but BEFORE the mutating call, so an operator who is about
|
|
105
|
+
// to blow away their env sees it on the same screen as the result.
|
|
106
|
+
if (body.env !== undefined) {
|
|
107
|
+
const emitWarning = opts.warn ?? ((m) => console.warn(chalk_1.default.yellow(` ! ${m}`)));
|
|
108
|
+
emitWarning(exports.ENV_REPLACE_WARNING);
|
|
109
|
+
}
|
|
74
110
|
await client.deployment.update(appId, body);
|
|
75
111
|
return { appId };
|
|
76
112
|
}
|
|
@@ -85,7 +121,7 @@ exports.updateCommand = new commander_1.Command('update')
|
|
|
85
121
|
.option('--degree <n>', 'Decentralization degree (clusters)', (v) => parseInt(v, 10))
|
|
86
122
|
.option('--replicas <n>', 'Pod replicas per cluster', (v) => parseInt(v, 10))
|
|
87
123
|
.option('--strategy <strategy>', 'Update strategy: rolling | recreate')
|
|
88
|
-
.option('--env-set <KEY=VAL>', 'Set an env var (repeatable)', (val, acc) => {
|
|
124
|
+
.option('--env-set <KEY=VAL>', 'Set an env var (repeatable). REPLACES the whole env map — pass every var you want to keep', (val, acc) => {
|
|
89
125
|
acc.push(val);
|
|
90
126
|
return acc;
|
|
91
127
|
}, [])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoGpC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAqO5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAuB,CAAC"}
|
package/dist/commands/verify.js
CHANGED
|
@@ -255,7 +255,19 @@ Exit codes:
|
|
|
255
255
|
}
|
|
256
256
|
}
|
|
257
257
|
// ── Verify ────────────────────────────────────────────────────────────
|
|
258
|
-
|
|
258
|
+
// #1578 / SDK 6.0.0: security-bearing consumers (currently `app-registry`)
|
|
259
|
+
// REFUSE to verify without a validator-registry snapshot — signature-only
|
|
260
|
+
// verification is meaningless when an attacker can mint ML-DSA keypairs at
|
|
261
|
+
// will. Fetch a snapshot from the same smart-host proxy the cert came from.
|
|
262
|
+
// `fetchRegistrySnapshot` never throws; `null` (offline / unavailable) is
|
|
263
|
+
// passed as `undefined`, and the verifier then reports
|
|
264
|
+
// `registry-snapshot-required` rather than silently reporting `valid`.
|
|
265
|
+
const registryServer = opts.server ??
|
|
266
|
+
process.env.SMART_HOST_URL ??
|
|
267
|
+
process.env.VALIDATOR_URL ??
|
|
268
|
+
cluster_1.DEFAULT_GATEWAY;
|
|
269
|
+
const registrySnapshot = (await (0, smart_engines_sdk_1.fetchRegistrySnapshot)(registryServer)) ?? undefined;
|
|
270
|
+
const result = await (0, smart_engines_sdk_1.verifyPqcAttestation)(cert, payload, registrySnapshot);
|
|
259
271
|
if (result.valid) {
|
|
260
272
|
const n = result.verifiedSignerCount ?? 0;
|
|
261
273
|
// `signers.length` is on the cert (already schema-validated by
|
|
@@ -267,6 +279,17 @@ Exit codes:
|
|
|
267
279
|
console.log(chalk_1.default.green(` Cert valid — ${n} of ${m} signers verified, threshold met`));
|
|
268
280
|
process.exit(0);
|
|
269
281
|
}
|
|
282
|
+
else if (result.reason?.startsWith('registry-snapshot-required')) {
|
|
283
|
+
// Not a bad cert — we could not reach a registry to bind signers to.
|
|
284
|
+
// Say so plainly instead of reporting the cert as invalid.
|
|
285
|
+
console.error(chalk_1.default.red(' Cannot verify — a validator-registry snapshot is required for this\n' +
|
|
286
|
+
' consumer, and none could be fetched from\n' +
|
|
287
|
+
` ${registryServer}/api/registry/snapshot\n` +
|
|
288
|
+
' Signature-only verification is not sufficient for a security-bearing\n' +
|
|
289
|
+
' cert (an attacker can mint keypairs). Point --server at a reachable\n' +
|
|
290
|
+
' smart-host, or set SMART_HOST_URL.\n'));
|
|
291
|
+
process.exit(2);
|
|
292
|
+
}
|
|
270
293
|
else {
|
|
271
294
|
console.error(chalk_1.default.red(` Cert invalid — ${humanizeReason(result.reason)}`));
|
|
272
295
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -77,6 +77,7 @@ const status_1 = require("./commands/status");
|
|
|
77
77
|
const list_1 = require("./commands/list");
|
|
78
78
|
const ci_1 = require("./commands/ci");
|
|
79
79
|
const renew_1 = require("./commands/renew");
|
|
80
|
+
const topup_1 = require("./commands/topup");
|
|
80
81
|
const upgrade_1 = require("./commands/upgrade");
|
|
81
82
|
const downgrade_1 = require("./commands/downgrade");
|
|
82
83
|
const usage_1 = require("./commands/usage");
|
|
@@ -106,6 +107,7 @@ program.addCommand(init_1.initCommand);
|
|
|
106
107
|
program.addCommand(subscribe_1.subscribeCommand);
|
|
107
108
|
program.addCommand(faucet_1.faucetCommand);
|
|
108
109
|
program.addCommand(renew_1.renewCommand);
|
|
110
|
+
program.addCommand(topup_1.topupCommand);
|
|
109
111
|
program.addCommand(upgrade_1.upgradeCommand);
|
|
110
112
|
program.addCommand(downgrade_1.downgradeCommand);
|
|
111
113
|
program.addCommand(upgrade_1.tierChangeCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|