@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
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
* redeploy always rebuilds + pushes the backend image and re-uploads the SPA
|
|
17
17
|
* bundle when a `frontend` block is present, then `deploy()`s.
|
|
18
18
|
*
|
|
19
|
+
* #2788: the frontend (build hook + tar + upload) resolves BEFORE the backend
|
|
20
|
+
* `docker build` — the backend `Dockerfile` COPYs `public/` into the image,
|
|
21
|
+
* and `public/` is gitignored build output that only the frontend build hook
|
|
22
|
+
* produces. On a clean checkout it doesn't exist until that hook runs.
|
|
23
|
+
*
|
|
19
24
|
* Same trusted-deploy attestation as `deploy` (the host's deploy policy is
|
|
20
25
|
* hardened-by-default).
|
|
21
26
|
*/
|
|
@@ -37,6 +42,11 @@ export type RedeployOpts = {
|
|
|
37
42
|
skipPush?: boolean;
|
|
38
43
|
/** Skip the multi-cluster image fan-out (single-cluster / dev registry). */
|
|
39
44
|
skipDistribute?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Skip the post-deploy per-cluster convergence check (#2787). Default OFF —
|
|
47
|
+
* the check is what turns a silent one-of-three divergence into a failure.
|
|
48
|
+
*/
|
|
49
|
+
skipClusterCheck?: boolean;
|
|
40
50
|
/**
|
|
41
51
|
* Opt-in escape hatch for a zero-cred / open-mode redeploy (#1564). Default
|
|
42
52
|
* false → a credential-less resolved env FAILS LOUD instead of silently
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redeploy.d.ts","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"redeploy.d.ts","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,OAAO,EAAE,cAAc,EAA0C,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAkBlG,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,yDAAyD;AACzD,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA0P7E;AA6GD,eAAO,MAAM,eAAe,SAoDxB,CAAC"}
|
|
@@ -56,6 +56,11 @@ exports.runRedeploy = runRedeploy;
|
|
|
56
56
|
* redeploy always rebuilds + pushes the backend image and re-uploads the SPA
|
|
57
57
|
* bundle when a `frontend` block is present, then `deploy()`s.
|
|
58
58
|
*
|
|
59
|
+
* #2788: the frontend (build hook + tar + upload) resolves BEFORE the backend
|
|
60
|
+
* `docker build` — the backend `Dockerfile` COPYs `public/` into the image,
|
|
61
|
+
* and `public/` is gitignored build output that only the frontend build hook
|
|
62
|
+
* produces. On a clean checkout it doesn't exist until that hook runs.
|
|
63
|
+
*
|
|
59
64
|
* Same trusted-deploy attestation as `deploy` (the host's deploy policy is
|
|
60
65
|
* hardened-by-default).
|
|
61
66
|
*/
|
|
@@ -70,6 +75,7 @@ const runtime_env_1 = require("../_lib/runtime-env");
|
|
|
70
75
|
const cluster_1 = require("../_lib/cluster");
|
|
71
76
|
const framework_1 = require("../_lib/framework");
|
|
72
77
|
const baas_1 = require("../_lib/baas");
|
|
78
|
+
const cluster_convergence_1 = require("../_lib/cluster-convergence");
|
|
73
79
|
const registry_fanout_1 = require("../_lib/registry-fanout");
|
|
74
80
|
const attestation_1 = require("../_lib/attestation");
|
|
75
81
|
const deploy_manifest_1 = require("../_lib/deploy-manifest");
|
|
@@ -116,9 +122,76 @@ async function runRedeploy(opts) {
|
|
|
116
122
|
console.log(chalk_1.default.gray(` push creds reissued: appId=${creds.appId} registry=${creds.registry.repository}`));
|
|
117
123
|
if (!tag)
|
|
118
124
|
throw new Error('a backend redeploy needs a tag (manifest.backend.tag or --tag)');
|
|
125
|
+
// ── #2788: frontend BEFORE the backend image build. ──────────────────────
|
|
126
|
+
// The backend `Dockerfile` COPYs `public/` into the image, but `public/` is
|
|
127
|
+
// gitignored build output the manifest's own `frontend.build` hook produces
|
|
128
|
+
// — e.g. the showcase's REAL hook (`apps/showcase/smart-app/smart-app.
|
|
129
|
+
// manifest.json` in hsuite-ecosystem): `cd ../../ionic-dapp && npm run
|
|
130
|
+
// build -- --output-path ../smart-app/public`. The `cd` is LOAD-BEARING:
|
|
131
|
+
// `f.build` runs with `cwd` already set to `dir` (the hook's OWN output
|
|
132
|
+
// dir, e.g. `public/`), so a copy of just the `--output-path` tail — run
|
|
133
|
+
// from inside `dir` — builds nothing there (#2793: caught below by
|
|
134
|
+
// `assertPlausibleSpaBundle`, not by this comment; do not paraphrase this
|
|
135
|
+
// example further — copy the manifest's real command or cross-reference it).
|
|
136
|
+
// On a clean checkout `public/` does not exist until that hook runs — build it
|
|
137
|
+
// (and upload the resulting bundle) BEFORE `buildAndPush` below invokes
|
|
138
|
+
// `docker build`, or a clean-checkout image build fails with `failed to
|
|
139
|
+
// compute cache key: "/public": not found`. Every successful deploy to date
|
|
140
|
+
// silently depended on a `public/` left over from an earlier local build.
|
|
141
|
+
// Relative `frontend.dir`/`bundlePath` resolve against the smart-app root —
|
|
142
|
+
// `backend.context` when present, else `--project` — NOT the CLI's
|
|
143
|
+
// process.cwd() (same cwd class as the backend build below).
|
|
144
|
+
const baseDir = (0, path_1.resolve)(b.context ?? opts.projectDir);
|
|
145
|
+
let bundleSha256 = '';
|
|
146
|
+
if (manifest.frontend) {
|
|
147
|
+
const bundlePath = await resolveFrontendBundle(manifest, baseDir, opts.runFn);
|
|
148
|
+
const bundle = await fs_1.promises.readFile(bundlePath);
|
|
149
|
+
const upload = await client.deployment.uploadFrontend(appId, bundle);
|
|
150
|
+
bundleSha256 = upload.bundleSha256;
|
|
151
|
+
console.log(chalk_1.default.gray(` frontend: sha256=${bundleSha256.slice(0, 12)}…`));
|
|
152
|
+
}
|
|
153
|
+
// ── #1679/#2887: pin the push to ONE Harbor origin, or refuse. ───────────
|
|
154
|
+
// `registry.server` is DNS round-robin over three INDEPENDENT Harbors, and a
|
|
155
|
+
// blob upload that hops clusters mid-session dies (`blob upload invalid` —
|
|
156
|
+
// the bytes are on the originating cluster's own RWO PVC). `requirePushOrigin`
|
|
157
|
+
// asks the mesh for the single-origin name it publishes for itself, validates
|
|
158
|
+
// that the name resolves back to the cluster that advertised it, and THROWS
|
|
159
|
+
// when a federated registry yields no pin — the unpinned push it used to fall
|
|
160
|
+
// back to cannot succeed there (#2887, measured on testnet 2026-08-27), so
|
|
161
|
+
// taking it silently just burns an image build and six retries before failing
|
|
162
|
+
// with an error that blames permissions. `null` (no throw) only for a
|
|
163
|
+
// genuinely single-origin registry.
|
|
164
|
+
//
|
|
165
|
+
// The pin feeds `buildAndPush` ONLY. `creds.registry` stays the
|
|
166
|
+
// round-robin name for the attestation probe and the fan-out below, which
|
|
167
|
+
// resolve it into the PER-CLUSTER ingress set — collapse it and the fan-out
|
|
168
|
+
// silently skips (`endpoints.length <= 1`), leaving one cluster with the image
|
|
169
|
+
// and the other two unable to pull it.
|
|
170
|
+
const pushHost = opts.skipPush
|
|
171
|
+
? null
|
|
172
|
+
: await (0, registry_fanout_1.requirePushOrigin)({
|
|
173
|
+
host: (0, registry_fanout_1.registryHostOf)(creds.registry.server),
|
|
174
|
+
repository: creds.registry.repository,
|
|
175
|
+
username: creds.registry.username,
|
|
176
|
+
password: creds.registry.password,
|
|
177
|
+
log: (m) => console.log(chalk_1.default.gray(m)),
|
|
178
|
+
});
|
|
119
179
|
// The `docker push` summary digest — the digest the LOCAL client holds. With a
|
|
120
180
|
// containerd image store (Colima / buildkit) this can differ from the digest
|
|
121
181
|
// Harbor serves for the tag; see resolveAttestationDigest below (#1589).
|
|
182
|
+
// #2766 — prove the candidate tag is FREE on every cluster Harbor BEFORE
|
|
183
|
+
// building/pushing. Tag immutability is per-cluster; a tag already occupied
|
|
184
|
+
// anywhere on the mesh 412s mid-fan-out and can leave the tag diverged across
|
|
185
|
+
// clusters permanently. Skipped when --skip-push: nothing is uploaded, the
|
|
186
|
+
// bytes are wherever a prior push left them and the fan-out below verifies
|
|
187
|
+
// them. A non-federated registry resolves to <=1 endpoint and is a no-op.
|
|
188
|
+
if (!opts.skipPush) {
|
|
189
|
+
await (0, registry_fanout_1.assertTagFreeOnMesh)({
|
|
190
|
+
registry: creds.registry,
|
|
191
|
+
tag,
|
|
192
|
+
log: (m) => console.log(chalk_1.default.gray(m)),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
122
195
|
const pushDigest = (0, baas_1.buildAndPush)({
|
|
123
196
|
registry: creds.registry,
|
|
124
197
|
tag,
|
|
@@ -131,16 +204,24 @@ async function runRedeploy(opts) {
|
|
|
131
204
|
dockerHost: opts.dockerHost,
|
|
132
205
|
name: manifest.name,
|
|
133
206
|
runFn: opts.runFn,
|
|
207
|
+
...(pushHost ? { pushHost } : {}),
|
|
134
208
|
});
|
|
135
209
|
// #1589: attest the digest the registry SERVES for the tag (the same
|
|
136
210
|
// `Docker-Content-Digest` the deployer resolves + pins and the fan-out
|
|
137
211
|
// re-verifies), NOT the local `docker push` summary. Otherwise a containerd
|
|
138
212
|
// image-store push attests a manifest digest Harbor re-serialized under a
|
|
139
213
|
// different sha256 → the #1445 gate rejects a legitimate developer deploy.
|
|
214
|
+
//
|
|
215
|
+
// #2787: WHICH registry answers matters. The push landed on the single origin
|
|
216
|
+
// `pushHost`; on a RE-USED tag the peers keep serving the PREVIOUS artifact
|
|
217
|
+
// until the fan-out below runs, so an endpoint-agnostic probe can (and on
|
|
218
|
+
// testnet did) hand back the old digest and sign it. Pass the origin so its
|
|
219
|
+
// answer is authoritative and a peer's is only a divergence to converge.
|
|
140
220
|
const imageDigest = await (0, registry_fanout_1.resolveAttestationDigest)({
|
|
141
221
|
registry: creds.registry,
|
|
142
222
|
tag,
|
|
143
223
|
pushDigest,
|
|
224
|
+
...(pushHost ? { originHost: pushHost } : {}),
|
|
144
225
|
log: (m) => console.log(chalk_1.default.gray(m)),
|
|
145
226
|
});
|
|
146
227
|
console.log(chalk_1.default.gray(` pushed: ${creds.registry.repository}:${tag} (${imageDigest})`));
|
|
@@ -156,19 +237,6 @@ async function runRedeploy(opts) {
|
|
|
156
237
|
log: (m) => console.log(chalk_1.default.gray(m)),
|
|
157
238
|
});
|
|
158
239
|
}
|
|
159
|
-
// Relative `frontend.dir`/`bundlePath` (and the frontend build hook) resolve
|
|
160
|
-
// against the smart-app root — `backend.context` when present, else
|
|
161
|
-
// `--project` — NOT the CLI's process.cwd(). (Same cwd class as the backend
|
|
162
|
-
// build: a bare `public` must mean `<smart-app>/public`.)
|
|
163
|
-
const baseDir = (0, path_1.resolve)(b.context ?? opts.projectDir);
|
|
164
|
-
let bundleSha256 = '';
|
|
165
|
-
if (manifest.frontend) {
|
|
166
|
-
const bundlePath = await resolveFrontendBundle(manifest, baseDir, opts.runFn);
|
|
167
|
-
const bundle = await fs_1.promises.readFile(bundlePath);
|
|
168
|
-
const upload = await client.deployment.uploadFrontend(appId, bundle);
|
|
169
|
-
bundleSha256 = upload.bundleSha256;
|
|
170
|
-
console.log(chalk_1.default.gray(` frontend: sha256=${bundleSha256.slice(0, 12)}…`));
|
|
171
|
-
}
|
|
172
240
|
// Forward the developer's `.env.local` runtime creds into the deployed
|
|
173
241
|
// customer-env (issue #1564) — same as `deploy`. `manifest.backend.env` wins
|
|
174
242
|
// for explicit non-secret overrides; secrets ride from `.env.local`. Resolved
|
|
@@ -214,6 +282,25 @@ async function runRedeploy(opts) {
|
|
|
214
282
|
throw new Error(`redeploy reached FAILED runtime for ${appId}` +
|
|
215
283
|
(status.runtime?.lastError ? `: ${status.runtime.lastError}` : ''));
|
|
216
284
|
}
|
|
285
|
+
// #2787: `waitForRunning` polls the ROUND-ROBIN gateway, so a RUNNING here
|
|
286
|
+
// is one cluster's answer, not the fleet's. The deploy call itself only ever
|
|
287
|
+
// reached one cluster and the peer replication is asynchronous, so a cluster
|
|
288
|
+
// can keep an older runtime record — serving the OLD release, or nothing —
|
|
289
|
+
// while this command prints `✓ redeployed`. Ask every cluster directly and
|
|
290
|
+
// fail loudly (naming the cluster and both digests) if one has not
|
|
291
|
+
// converged. Skipped with --no-wait: nothing has been given time to settle.
|
|
292
|
+
if (!opts.skipClusterCheck) {
|
|
293
|
+
await (0, cluster_convergence_1.waitForClusterConvergence)({
|
|
294
|
+
gateway: opts.gateway,
|
|
295
|
+
appId,
|
|
296
|
+
authAppId: subscriptionAppId,
|
|
297
|
+
signer: (0, env_1.buildSignerFromEnv)(env),
|
|
298
|
+
expectedImage: (0, baas_1.imageTarget)(creds.registry, tag),
|
|
299
|
+
attestedDigest: imageDigest,
|
|
300
|
+
log: (m) => console.log(chalk_1.default.gray(m)),
|
|
301
|
+
...(opts.sleep ? { sleep: opts.sleep } : {}),
|
|
302
|
+
});
|
|
303
|
+
}
|
|
217
304
|
}
|
|
218
305
|
return { appId, url };
|
|
219
306
|
}
|
|
@@ -231,14 +318,23 @@ async function resolveFrontendBundle(manifest, baseDir, runFn) {
|
|
|
231
318
|
const p = (0, path_1.resolve)(baseDir, f.bundlePath);
|
|
232
319
|
if (!(0, fs_1.existsSync)(p))
|
|
233
320
|
throw new Error(`frontend bundle not found: ${p}`);
|
|
321
|
+
// #2798/#2791: bundlePath used to return BEFORE both SPA guards. Same
|
|
322
|
+
// tar-aware validation as deploy.ts — index.html at root, non-zero, no
|
|
323
|
+
// unfilled REPLACE_BEFORE_DEPLOY sentinels after unpacking.
|
|
324
|
+
await (0, frontend_guard_1.assertPlausibleSpaTarball)(p, runFn);
|
|
234
325
|
return p;
|
|
235
326
|
}
|
|
236
327
|
const dir = (0, path_1.resolve)(baseDir, f.dir);
|
|
237
|
-
if (!(0, fs_1.existsSync)(dir))
|
|
238
|
-
throw new Error(`frontend dir not found: ${dir}`);
|
|
239
328
|
// Optional pre-build (e.g. `ng build`) — run via the injected seam IN `dir`
|
|
240
329
|
// (a real chdir; `PWD` alone does not move the child's working directory).
|
|
241
330
|
if (f.build) {
|
|
331
|
+
// #2788: `dir` is the hook's OUTPUT (e.g. `public/`), which a clean
|
|
332
|
+
// checkout does not have yet — it's gitignored build output, not
|
|
333
|
+
// checked-in source. `execFileSync`/`spawnSync` throw ENOENT when `cwd`
|
|
334
|
+
// doesn't exist on disk (verified), so the hook could never even start on
|
|
335
|
+
// a fresh clone. Ensure `dir` exists (idempotent no-op if it already does
|
|
336
|
+
// from a prior local build) BEFORE spawning the hook that populates it.
|
|
337
|
+
await fs_1.promises.mkdir(dir, { recursive: true });
|
|
242
338
|
const run = runFn ?? (await Promise.resolve().then(() => __importStar(require('child_process')))).execFileSync;
|
|
243
339
|
run('sh', ['-c', f.build], {
|
|
244
340
|
stdio: 'inherit',
|
|
@@ -246,6 +342,33 @@ async function resolveFrontendBundle(manifest, baseDir, runFn) {
|
|
|
246
342
|
env: { ...process.env, PWD: dir },
|
|
247
343
|
});
|
|
248
344
|
}
|
|
345
|
+
// No build hook to have produced `dir` — it must already exist (a
|
|
346
|
+
// pre-built/checked-in SPA dir). With a hook, this is checked AFTER it runs
|
|
347
|
+
// (moved from before #2788) so the hook is what's allowed to create `dir`.
|
|
348
|
+
if (!(0, fs_1.existsSync)(dir))
|
|
349
|
+
throw new Error(`frontend dir not found: ${dir}`);
|
|
350
|
+
// #2793 + #2795: assert `dir` is plausibly a built SPA (non-empty,
|
|
351
|
+
// `index.html` at its root) on BOTH branches, because BOTH ship an empty
|
|
352
|
+
// bundle silently otherwise:
|
|
353
|
+
// - WITH a hook (#2793): #2790's `mkdir` above means the `existsSync`
|
|
354
|
+
// guard can no longer catch a hook that exits 0 without populating
|
|
355
|
+
// `dir` — `dir` always exists post-mkdir.
|
|
356
|
+
// - WITHOUT a hook (#2795): `existsSync` never checked
|
|
357
|
+
// empty-vs-populated, so an EXISTING but EMPTY `dir` (wiped,
|
|
358
|
+
// mis-`.gitignore`'d, stale checkout, a typo'd `dir` that resolves to
|
|
359
|
+
// an existing folder) passed straight through.
|
|
360
|
+
// Nothing downstream catches either: `assertNoDeploySentinels` no-ops on
|
|
361
|
+
// zero files, `tarFrontend` tars nothing into a syntactically valid tar,
|
|
362
|
+
// and the host only logs `size=<n>B`. Deliberately AFTER `existsSync`: on
|
|
363
|
+
// the no-hook branch `dir` is not guaranteed to exist and `fs.readdir`
|
|
364
|
+
// would throw a bare ENOENT instead of that descriptive message. On the
|
|
365
|
+
// hook branch `existsSync` is normally a no-op (`mkdir` guaranteed `dir`),
|
|
366
|
+
// so the reorder is normally unobservable — the one case where it IS
|
|
367
|
+
// observable is a hook that DELETES its own output dir, which now reports
|
|
368
|
+
// `frontend dir not found` instead of a raw `ENOENT ... scandir`. Strictly
|
|
369
|
+
// better, and the reason this order is not incidental. `f.build` is passed
|
|
370
|
+
// through as-is so the remedy blames the hook only when there was one.
|
|
371
|
+
await (0, frontend_guard_1.assertPlausibleSpaBundle)(dir, f.build);
|
|
249
372
|
// Fail-closed: never re-ship a bundle that still carries unfilled
|
|
250
373
|
// REPLACE_BEFORE_DEPLOY placeholders (shared with `deploy`). See frontend-guard.
|
|
251
374
|
await (0, frontend_guard_1.assertNoDeploySentinels)(dir);
|
|
@@ -254,6 +377,7 @@ async function resolveFrontendBundle(manifest, baseDir, runFn) {
|
|
|
254
377
|
}
|
|
255
378
|
async function deployBackend(client, appId, manifest, tag, attestation, runtimeEnv, strategy) {
|
|
256
379
|
const b = manifest.backend;
|
|
380
|
+
const egress = (0, deploy_manifest_1.resolveEgress)(manifest);
|
|
257
381
|
const body = {
|
|
258
382
|
tag,
|
|
259
383
|
port: b.port,
|
|
@@ -264,6 +388,11 @@ async function deployBackend(client, appId, manifest, tag, attestation, runtimeE
|
|
|
264
388
|
// (issue #1564). Mirrored into the PQC-encrypted customer-env Secret.
|
|
265
389
|
env: runtimeEnv,
|
|
266
390
|
resources: b.limits,
|
|
391
|
+
// #2912 — the declared external destinations. `undefined` (manifest has no
|
|
392
|
+
// `backend.egress`) is deliberately NOT sent: the server reads an absent
|
|
393
|
+
// field as "leave the stored declaration alone", so redeploying from an
|
|
394
|
+
// older manifest never silently revokes an app's working egress.
|
|
395
|
+
...(egress ? { egress } : {}),
|
|
267
396
|
...(strategy ? { strategy } : {}),
|
|
268
397
|
attestation,
|
|
269
398
|
};
|
|
@@ -284,6 +413,7 @@ exports.redeployCommand = new commander_1.Command('redeploy')
|
|
|
284
413
|
.option('--skip-build', 'Skip `docker build`', false)
|
|
285
414
|
.option('--skip-push', 'Skip `docker push`', false)
|
|
286
415
|
.option('--skip-distribute', 'Skip the multi-cluster image fan-out (single-cluster / dev registry)', false)
|
|
416
|
+
.option('--skip-cluster-check', 'Skip the post-deploy per-cluster convergence check (#2787). Only for a known-degraded mesh — a skipped check is how a third of the fleet stays silently stuck.', false)
|
|
287
417
|
.option('--allow-open-mode', 'Allow an intentional zero-cred / open-mode redeploy (no XRPL_SEED forwarded). Default: a credential-less redeploy FAILS LOUD (#1564).', false)
|
|
288
418
|
.option('--no-wait', 'Do not block until the runtime settles — exit as soon as deploy() is accepted (default: wait for RUNNING/FAILED)')
|
|
289
419
|
.action(async (opts) => {
|
|
@@ -303,6 +433,7 @@ exports.redeployCommand = new commander_1.Command('redeploy')
|
|
|
303
433
|
skipBuild: opts.skipBuild,
|
|
304
434
|
skipPush: opts.skipPush,
|
|
305
435
|
skipDistribute: opts.skipDistribute,
|
|
436
|
+
skipClusterCheck: opts.skipClusterCheck,
|
|
306
437
|
allowOpenMode: opts.allowOpenMode,
|
|
307
438
|
wait: opts.wait,
|
|
308
439
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redeploy.js","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redeploy.js","sourceRoot":"","sources":["../../src/commands/redeploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* `hsuite status` — live lifecycle + runtime status of a deployed app.
|
|
3
3
|
*
|
|
4
4
|
* Renders `state` (PENDING_SUBSCRIPTION | ACTIVE | SUSPENDED | RETIRED) plus the
|
|
5
|
-
* runtime sub-view (runtimeState / replicas / lastError) when
|
|
6
|
-
* prints the raw `BaasRuntimeStatus`; `--watch` polls until
|
|
7
|
-
* a terminal state (RUNNING / FAILED) or the app is no
|
|
5
|
+
* runtime sub-view (runtimeState / replicas / lastError / declared egress) when
|
|
6
|
+
* present. `--json` prints the raw `BaasRuntimeStatus`; `--watch` polls until
|
|
7
|
+
* the runtime reaches a terminal state (RUNNING / FAILED) or the app is no
|
|
8
|
+
* longer ACTIVE.
|
|
8
9
|
*/
|
|
9
10
|
import { Command } from 'commander';
|
|
10
11
|
import type { BaasClient, BaasRuntimeStatus } from '@hsuite/smart-engines-sdk';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAK/E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtE,0DAA0D;IAC1D,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAC3F,OAAO,CAAC,iBAAiB,CAAC,CAY5B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+B5E;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CA6B9D;AAED,eAAO,MAAM,aAAa,SAgCtB,CAAC"}
|
package/dist/commands/status.js
CHANGED
|
@@ -12,9 +12,10 @@ exports.renderStatus = renderStatus;
|
|
|
12
12
|
* `hsuite status` — live lifecycle + runtime status of a deployed app.
|
|
13
13
|
*
|
|
14
14
|
* Renders `state` (PENDING_SUBSCRIPTION | ACTIVE | SUSPENDED | RETIRED) plus the
|
|
15
|
-
* runtime sub-view (runtimeState / replicas / lastError) when
|
|
16
|
-
* prints the raw `BaasRuntimeStatus`; `--watch` polls until
|
|
17
|
-
* a terminal state (RUNNING / FAILED) or the app is no
|
|
15
|
+
* runtime sub-view (runtimeState / replicas / lastError / declared egress) when
|
|
16
|
+
* present. `--json` prints the raw `BaasRuntimeStatus`; `--watch` polls until
|
|
17
|
+
* the runtime reaches a terminal state (RUNNING / FAILED) or the app is no
|
|
18
|
+
* longer ACTIVE.
|
|
18
19
|
*/
|
|
19
20
|
const commander_1 = require("commander");
|
|
20
21
|
const chalk_1 = __importDefault(require("chalk"));
|
|
@@ -97,6 +98,17 @@ function renderStatus(status) {
|
|
|
97
98
|
lines.push(` reconciled: ${status.runtime.lastReconciledAt}`);
|
|
98
99
|
if (status.runtime.lastError)
|
|
99
100
|
lines.push(` lastError: ${status.runtime.lastError}`);
|
|
101
|
+
// #2912 — the app's DECLARED egress. Shown because tenant egress is
|
|
102
|
+
// default-deny: "my app can't reach api.example.com" is otherwise
|
|
103
|
+
// indistinguishable from "I never declared it". This is what was asked
|
|
104
|
+
// for, not proof of what a cluster granted — an operator allow-list can
|
|
105
|
+
// still refuse a destination (`kubectl get netpol tenant-default -o yaml`
|
|
106
|
+
// carries that verdict).
|
|
107
|
+
if (status.runtime.egress?.length) {
|
|
108
|
+
lines.push(` egress: ${status.runtime.egress
|
|
109
|
+
.map((e) => `${e.host}:${e.port}`)
|
|
110
|
+
.join(', ')} (declared)`);
|
|
111
|
+
}
|
|
100
112
|
}
|
|
101
113
|
else {
|
|
102
114
|
lines.push(' runtime: (not deployed)');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `hsuite topup` — re-fund a drained prepaid float WITHOUT changing tier (#2857).
|
|
3
|
+
*
|
|
4
|
+
* ## Why this exists
|
|
5
|
+
*
|
|
6
|
+
* The subscription deposit is a PREPAID FLOAT: it is seeded once at activation
|
|
7
|
+
* and only ever decreases (`remainingBalance = fundedAmount − settledAmount`,
|
|
8
|
+
* and `settledAmount` is monotonic). Nothing re-funded it:
|
|
9
|
+
*
|
|
10
|
+
* - `hsuite renew` extends the deposit LOCK but takes no fresh deposit;
|
|
11
|
+
* - the validator's deposit monitor credits only `PENDING_DEPOSIT` rows, so
|
|
12
|
+
* paying the deposit wallet of an ACTIVE subscription was never credited;
|
|
13
|
+
* - the only top-up in the codebase rode the tier-UPGRADE confirm.
|
|
14
|
+
*
|
|
15
|
+
* So a pay-per-use app that simply consumed its credit had no way back except
|
|
16
|
+
* changing product tier. Observed live 2026-08-26: the showcase hit
|
|
17
|
+
* `remainingBalance = 0` and the deployer's subscription gate pinned it at 0
|
|
18
|
+
* replicas ("scaling Deployment → 0 (subscription not active)").
|
|
19
|
+
*
|
|
20
|
+
* ## Flow
|
|
21
|
+
*
|
|
22
|
+
* 1. Read XRPL_ADDRESS + XRPL_SEED + the appId from env (`hsuite init`).
|
|
23
|
+
* 2. Web3-auth against the validator (the route is ownership-guarded).
|
|
24
|
+
* 3. POST /api/v3/subscription/topup → records the pending credit and returns
|
|
25
|
+
* the EXISTING deposit wallet + the amount to send.
|
|
26
|
+
* 4. Auto-pay that credit in HST (SendMax covers the 0.25% transfer fee),
|
|
27
|
+
* unless `--no-autopay`.
|
|
28
|
+
* 5. Poll status until the float is back above zero — the validator's deposit
|
|
29
|
+
* monitor applies it via `checkPendingTopUp`, capped by the 3× rollover cap.
|
|
30
|
+
*
|
|
31
|
+
* On testnet the credit costs nothing real: `hsuite faucet` dispenses HSUITE-testnet.
|
|
32
|
+
*/
|
|
33
|
+
import { Command } from 'commander';
|
|
34
|
+
import { SubscriptionClient } from '../_lib/subscription-client';
|
|
35
|
+
export type TopUpOpts = {
|
|
36
|
+
env: string;
|
|
37
|
+
gateway?: string;
|
|
38
|
+
appId?: string;
|
|
39
|
+
amount?: string;
|
|
40
|
+
autopay?: boolean;
|
|
41
|
+
clientFactory?: (baseUrl: string) => SubscriptionClient;
|
|
42
|
+
xrplClientFactory?: (wss: string) => any;
|
|
43
|
+
walletSignFactory?: (seed: string) => (prepared: unknown) => string;
|
|
44
|
+
sleepFn?: (ms: number) => Promise<void>;
|
|
45
|
+
};
|
|
46
|
+
export declare function runTopUp(opts: TopUpOpts): Promise<{
|
|
47
|
+
appId: string;
|
|
48
|
+
amount?: string;
|
|
49
|
+
depositAddress?: string;
|
|
50
|
+
paid: boolean;
|
|
51
|
+
applied: boolean;
|
|
52
|
+
remainingBalance?: string;
|
|
53
|
+
}>;
|
|
54
|
+
export declare const topupCommand: Command;
|
|
55
|
+
//# sourceMappingURL=topup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topup.d.ts","sourceRoot":"","sources":["../../src/commands/topup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AASjE,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,kBAAkB,CAAC;IACxD,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;IACzC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC;AA8BF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC,CA2ED;AAED,eAAO,MAAM,YAAY,SAgCrB,CAAC"}
|