@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.
Files changed (55) hide show
  1. package/README.md +5 -3
  2. package/dist/_lib/baas.d.ts +27 -4
  3. package/dist/_lib/baas.d.ts.map +1 -1
  4. package/dist/_lib/baas.js +76 -42
  5. package/dist/_lib/baas.js.map +1 -1
  6. package/dist/_lib/cluster-convergence.d.ts +214 -0
  7. package/dist/_lib/cluster-convergence.d.ts.map +1 -0
  8. package/dist/_lib/cluster-convergence.js +381 -0
  9. package/dist/_lib/cluster-convergence.js.map +1 -0
  10. package/dist/_lib/deploy-manifest.d.ts +32 -0
  11. package/dist/_lib/deploy-manifest.d.ts.map +1 -1
  12. package/dist/_lib/deploy-manifest.js +71 -0
  13. package/dist/_lib/deploy-manifest.js.map +1 -1
  14. package/dist/_lib/docker.d.ts +35 -23
  15. package/dist/_lib/docker.d.ts.map +1 -1
  16. package/dist/_lib/docker.js +58 -54
  17. package/dist/_lib/docker.js.map +1 -1
  18. package/dist/_lib/frontend-guard.d.ts +59 -0
  19. package/dist/_lib/frontend-guard.d.ts.map +1 -1
  20. package/dist/_lib/frontend-guard.js +148 -0
  21. package/dist/_lib/frontend-guard.js.map +1 -1
  22. package/dist/_lib/registry-fanout.d.ts +299 -9
  23. package/dist/_lib/registry-fanout.d.ts.map +1 -1
  24. package/dist/_lib/registry-fanout.js +557 -27
  25. package/dist/_lib/registry-fanout.js.map +1 -1
  26. package/dist/_lib/subscription-client.d.ts +14 -0
  27. package/dist/_lib/subscription-client.d.ts.map +1 -1
  28. package/dist/_lib/subscription-client.js +13 -0
  29. package/dist/_lib/subscription-client.js.map +1 -1
  30. package/dist/commands/deploy.d.ts +28 -4
  31. package/dist/commands/deploy.d.ts.map +1 -1
  32. package/dist/commands/deploy.js +163 -20
  33. package/dist/commands/deploy.js.map +1 -1
  34. package/dist/commands/redeploy.d.ts +10 -0
  35. package/dist/commands/redeploy.d.ts.map +1 -1
  36. package/dist/commands/redeploy.js +146 -15
  37. package/dist/commands/redeploy.js.map +1 -1
  38. package/dist/commands/status.d.ts +4 -3
  39. package/dist/commands/status.d.ts.map +1 -1
  40. package/dist/commands/status.js +15 -3
  41. package/dist/commands/status.js.map +1 -1
  42. package/dist/commands/topup.d.ts +55 -0
  43. package/dist/commands/topup.d.ts.map +1 -0
  44. package/dist/commands/topup.js +180 -0
  45. package/dist/commands/topup.js.map +1 -0
  46. package/dist/commands/update.d.ts +33 -0
  47. package/dist/commands/update.d.ts.map +1 -1
  48. package/dist/commands/update.js +38 -2
  49. package/dist/commands/update.js.map +1 -1
  50. package/dist/commands/verify.d.ts.map +1 -1
  51. package/dist/commands/verify.js +24 -1
  52. package/dist/commands/verify.js.map +1 -1
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. 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;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,OAAO,EAAE,cAAc,EAA6B,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAOrF,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;;;;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,CAqK7E;AAmED,eAAO,MAAM,eAAe,SAkDxB,CAAC"}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqGA,kCA0PC;AA/VD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,yCAAoC;AACpC,kDAA0B;AAC1B,2BAAgD;AAChD,+BAAqC;AACrC,2BAA4B;AAI5B,qCAAqE;AACrE,+DAAoE;AACpE,qDAAwD;AACxD,6CAAkD;AAClD,iDAAmF;AACnF,uCAAkG;AAClG,qEAAwE;AACxE,6DAMiC;AACjC,qDAA8F;AAC9F,6DAAsF;AACtF,2DAIgC;AAChC,qCAA0C;AA6C1C,yDAAyD;AAClD,KAAK,UAAU,WAAW,CAAC,IAAkB;IAClD,MAAM,QAAQ,GAAG,IAAA,+BAAa,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAA,aAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAElC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAA,6BAAiB,EAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEjE,uEAAuE;IACvE,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,6EAA6E;IAC7E,wEAAwE;IACxE,oDAAoD;IACpD,MAAM,iBAAiB,GAAG,IAAA,2CAAwB,EAAC,GAAG,EAAE;QACtD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC,CAAC;IAEH,yEAAyE;IACzE,8EAA8E;IAC9E,iFAAiF;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAc,EAAC;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG;QACH,KAAK,EAAE,iBAAiB;QACxB,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,yEAAyE;IACzE,4EAA4E;IAC5E,+EAA+E;IAC/E,wDAAwD;IACxD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,KAAK,aAAa,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAChG,CAAC;IAEF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAE5F,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,mEAAmE;IACnE,0EAA0E;IAC1E,6EAA6E;IAC7E,+EAA+E;IAC/E,wEAAwE;IACxE,wEAAwE;IACxE,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrE,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,sEAAsE;IACtE,oCAAoC;IACpC,EAAE;IACF,gEAAgE;IAChE,0EAA0E;IAC1E,4EAA4E;IAC5E,+EAA+E;IAC/E,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC5B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,IAAA,mCAAiB,EAAC;YACtB,IAAI,EAAE,IAAA,gCAAc,EAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3C,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;YACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;YACjC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;IAEP,+EAA+E;IAC/E,6EAA6E;IAC7E,yEAAyE;IACzE,yEAAyE;IACzE,4EAA4E;IAC5E,8EAA8E;IAC9E,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAA,qCAAmB,EAAC;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG;YACH,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,mBAAY,EAAC;QAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG;QACH,OAAO,EAAE,IAAA,cAAO,EAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;QAClC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,YAAY;QACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC,CAAC;IAEH,qEAAqE;IACrE,uEAAuE;IACvE,4EAA4E;IAC5E,0EAA0E;IAC1E,2EAA2E;IAC3E,EAAE;IACF,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,WAAW,GAAG,MAAM,IAAA,0CAAwB,EAAC;QACjD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG;QACH,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,KAAK,WAAW,GAAG,CAAC,CAAC,CAAC;IAE1F,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,IAAA,mCAAiB,EAAC;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG;YACH,MAAM,EAAE,WAAW;YACnB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,sEAAsE;IACtE,MAAM,UAAU,GAAG,IAAA,+BAAiB,EAAC;QACnC,GAAG;QACH,WAAW,EAAE,CAAC,CAAC,GAAG;QAClB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;KACpD,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,kBAAkB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,wBAAwB,IAAI,CAAC,OAAO,aAAa;QAC/F,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,CAC9D,CACF,CAAC;IAEF,+EAA+E;IAC/E,qDAAqD;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAA,6BAAe,EAC5B;QACE,KAAK;QACL,eAAe,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;QAC9C,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,UAAU;QACV,yEAAyE;QACzE,wEAAwE;QACxE,6DAA6D;QAC7D,WAAW;QACX,YAAY;QACZ,UAAU,EAAE,IAAA,4BAAc,GAAE;KAC7B,EACD,IAAI,CACL,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjG,8EAA8E;IAC9E,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAc,EAAC,MAAM,EAAE,KAAK,EAAE;YACjD,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,MAAM,CAAC,OAAO,EAAE,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,uCAAuC,KAAK,EAAE;gBAC5C,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACrE,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,6EAA6E;QAC7E,6EAA6E;QAC7E,2EAA2E;QAC3E,2EAA2E;QAC3E,mEAAmE;QACnE,4EAA4E;QAC5E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAA,+CAAyB,EAAC;gBAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK;gBACL,SAAS,EAAE,iBAAiB;gBAC5B,MAAM,EAAE,IAAA,wBAAkB,EAAC,GAAG,CAAC;gBAC/B,aAAa,EAAE,IAAA,kBAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;gBAC/C,cAAc,EAAE,WAAW;gBAC3B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,qBAAqB,CAClC,QAAkB,EAClB,OAAe,EACf,KAAa;IAEb,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAS,CAAC;IAC7B,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,IAAA,cAAO,EAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,IAAA,eAAU,EAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,4DAA4D;QAC5D,MAAM,IAAA,0CAAyB,EAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,cAAO,EAAC,OAAO,EAAE,CAAC,CAAC,GAAI,CAAC,CAAC;IACrC,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,oEAAoE;QACpE,iEAAiE;QACjE,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,MAAM,aAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,KAAK,IAAK,CAAC,wDAAa,eAAe,GAAC,CAAC,CAAC,YAAiC,CAAC;QACxF,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACzB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAuB;SACvD,CAAC,CAAC;IACL,CAAC;IACD,kEAAkE;IAClE,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IACxE,mEAAmE;IACnE,yEAAyE;IACzE,6BAA6B;IAC7B,wEAAwE;IACxE,uEAAuE;IACvE,8CAA8C;IAC9C,yDAAyD;IACzD,iEAAiE;IACjE,0EAA0E;IAC1E,mDAAmD;IACnD,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,uEAAuE;IACvE,wEAAwE;IACxE,2EAA2E;IAC3E,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,uEAAuE;IACvE,MAAM,IAAA,yCAAwB,EAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7C,kEAAkE;IAClE,iFAAiF;IACjF,MAAM,IAAA,wCAAuB,EAAC,GAAG,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,mBAAmB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,IAAA,kBAAW,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,MAAkB,EAClB,KAAa,EACb,QAAkB,EAClB,GAAW,EACX,WAA8B,EAC9B,UAAkC,EAClC,QAAiC;IAEjC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,+BAAa,EAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAA2D;QACnE,GAAG;QACH,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,gEAAgE;QAChE,4EAA4E;QAC5E,sEAAsE;QACtE,GAAG,EAAE,UAAU;QACf,SAAS,EAAE,CAAC,CAAC,MAAM;QACnB,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,iEAAiE;QACjE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,WAAW;KACZ,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB,CAAC;AAEY,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,6EAA6E,CAAC;KAC1F,cAAc,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,cAAc,EAAE,0BAA0B,EAAE,YAAY,CAAC;KAChE,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,EAAE,GAAG,CAAC;KACtF,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,EAAE,yBAAe,CAAC;KACvE,MAAM,CAAC,eAAe,EAAE,4DAA4D,CAAC;KACrF,MAAM,CACL,4BAA4B,EAC5B,kEAAkE,CACnE;KACA,MAAM,CAAC,aAAa,EAAE,4DAA4D,CAAC;KACnF,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,CAAC;KACtE,MAAM,CAAC,sBAAsB,EAAE,2DAA2D,CAAC;KAC3F,MAAM,CAAC,cAAc,EAAE,qBAAqB,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,sEAAsE,EAAE,KAAK,CAAC;KAC1G,MAAM,CAAC,sBAAsB,EAAE,gKAAgK,EAAE,KAAK,CAAC;KACvM,MAAM,CAAC,mBAAmB,EAAE,uIAAuI,EAAE,KAAK,CAAC;KAC3K,MAAM,CAAC,WAAW,EAAE,kHAAkH,CAAC;KACvI,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACtD,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,WAAW,CAAC;YACzB,YAAY,EAAE,IAAI,CAAC,QAAQ;YAC3B,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;YACtD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,sBAAU,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAU,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAA,eAAS,EAAC,IAAI,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC"}
@@ -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 present. `--json`
6
- * prints the raw `BaasRuntimeStatus`; `--watch` polls until the runtime reaches
7
- * a terminal state (RUNNING / FAILED) or the app is no longer ACTIVE.
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;;;;;;;GAOG;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,CAgB9D;AAED,eAAO,MAAM,aAAa,SAgCtB,CAAC"}
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"}
@@ -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 present. `--json`
16
- * prints the raw `BaasRuntimeStatus`; `--watch` polls until the runtime reaches
17
- * a terminal state (RUNNING / FAILED) or the app is no longer ACTIVE.
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":";;;;;;AAmCA,gCAGC;AAUD,wCAgBC;AAMD,8BA+BC;AAGD,oCAgBC;AAxHD;;;;;;;GAOG;AACH,yCAAoC;AACpC,kDAA0B;AAG1B,qCAAsC;AACtC,+DAAkF;AAClF,6CAAkD;AAClD,uCAA8C;AAmB9C,0EAA0E;AAC1E,SAAgB,UAAU,CAAC,CAAoB;IAC7C,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC;IACnC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,cAAc,CAAC;AAC9F,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAClC,MAAkB,EAClB,KAAa,EACb,OAA0F,EAAE;IAE5F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC/C,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,KAAK,EAAE,CAAC;IACV,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,GAAG,GAAG,IAAA,aAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,4EAA4E;IAC5E,oFAAoF;IACpF,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,KAAK,GAAG,IAAA,+BAAY,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,IAAA,2CAAwB,EAAC,GAAG,EAAE;QACtD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;KAC1C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAc,EAAC;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG;QACH,KAAK,EAAE,iBAAiB;QACxB,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YAC/C,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/C,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mDAAmD;AACnD,SAAgB,YAAY,CAAC,MAAyB;IACpD,MAAM,KAAK,GAAG;QACZ,mBAAmB,MAAM,CAAC,KAAK,EAAE;QACjC,mBAAmB,MAAM,CAAC,KAAK,EAAE;KAClC,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB;YACjC,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAEY,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,cAAc,EAAE,0BAA0B,EAAE,YAAY,CAAC;KAChE,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,EAAE,yBAAe,CAAC;KACvE,MAAM,CAAC,eAAe,EAAE,6DAA6D,CAAC;KACtF,MAAM,CACL,4BAA4B,EAC5B,kEAAkE,CACnE;KACA,MAAM,CAAC,SAAS,EAAE,mDAAmD,EAAE,KAAK,CAAC;KAC7E,MAAM,CAAC,QAAQ,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACpE,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAC;YACvB,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAU,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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"}