@hsuite/smart-engines-cli 1.5.0 → 1.5.2

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 (43) 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/docker.d.ts +35 -23
  11. package/dist/_lib/docker.d.ts.map +1 -1
  12. package/dist/_lib/docker.js +58 -54
  13. package/dist/_lib/docker.js.map +1 -1
  14. package/dist/_lib/frontend-guard.d.ts +59 -0
  15. package/dist/_lib/frontend-guard.d.ts.map +1 -1
  16. package/dist/_lib/frontend-guard.js +148 -0
  17. package/dist/_lib/frontend-guard.js.map +1 -1
  18. package/dist/_lib/registry-fanout.d.ts +299 -9
  19. package/dist/_lib/registry-fanout.d.ts.map +1 -1
  20. package/dist/_lib/registry-fanout.js +557 -27
  21. package/dist/_lib/registry-fanout.js.map +1 -1
  22. package/dist/_lib/subscription-client.d.ts +14 -0
  23. package/dist/_lib/subscription-client.d.ts.map +1 -1
  24. package/dist/_lib/subscription-client.js +13 -0
  25. package/dist/_lib/subscription-client.js.map +1 -1
  26. package/dist/commands/deploy.d.ts +28 -4
  27. package/dist/commands/deploy.d.ts.map +1 -1
  28. package/dist/commands/deploy.js +157 -20
  29. package/dist/commands/deploy.js.map +1 -1
  30. package/dist/commands/redeploy.d.ts +10 -0
  31. package/dist/commands/redeploy.d.ts.map +1 -1
  32. package/dist/commands/redeploy.js +140 -15
  33. package/dist/commands/redeploy.js.map +1 -1
  34. package/dist/commands/topup.d.ts +55 -0
  35. package/dist/commands/topup.d.ts.map +1 -0
  36. package/dist/commands/topup.js +180 -0
  37. package/dist/commands/topup.js.map +1 -0
  38. package/dist/commands/verify.d.ts.map +1 -1
  39. package/dist/commands/verify.js +24 -1
  40. package/dist/commands/verify.js.map +1 -1
  41. package/dist/index.js +2 -0
  42. package/dist/index.js.map +1 -1
  43. package/package.json +2 -2
@@ -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;AAuGD,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);
@@ -284,6 +407,7 @@ exports.redeployCommand = new commander_1.Command('redeploy')
284
407
  .option('--skip-build', 'Skip `docker build`', false)
285
408
  .option('--skip-push', 'Skip `docker push`', false)
286
409
  .option('--skip-distribute', 'Skip the multi-cluster image fan-out (single-cluster / dev registry)', false)
410
+ .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
411
  .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
412
  .option('--no-wait', 'Do not block until the runtime settles — exit as soon as deploy() is accepted (default: wait for RUNNING/FAILED)')
289
413
  .action(async (opts) => {
@@ -303,6 +427,7 @@ exports.redeployCommand = new commander_1.Command('redeploy')
303
427
  skipBuild: opts.skipBuild,
304
428
  skipPush: opts.skipPush,
305
429
  skipDistribute: opts.skipDistribute,
430
+ skipClusterCheck: opts.skipClusterCheck,
306
431
  allowOpenMode: opts.allowOpenMode,
307
432
  wait: opts.wait,
308
433
  });
@@ -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,6DAAuE;AACvE,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,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,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"}
@@ -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"}
@@ -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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"}
@@ -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;AAgGpC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAwM5C;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,SAAuB,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"}
@@ -255,7 +255,19 @@ Exit codes:
255
255
  }
256
256
  }
257
257
  // ── Verify ────────────────────────────────────────────────────────────
258
- const result = await (0, smart_engines_sdk_1.verifyPqcAttestation)(cert, payload);
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":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}