@devdogsuga/backstage 0.1.7 → 0.1.9

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 (27) hide show
  1. package/README.md +42 -25
  2. package/dist/{catalog-BiXI0wyi.js → catalog-COleRgQD.js} +22 -13
  3. package/dist/{cli-Cz8faASC.js → cli-CMThHZgV.js} +23 -29
  4. package/dist/{cli-Do2nWD7W.js → cli-DjIwbjnx.js} +4 -4
  5. package/dist/client-A6pJcxSE.js +2 -0
  6. package/dist/{client-B_MY9kVI.js → client-NuoKMQmV.js} +4 -4
  7. package/dist/{commands-D345F-Od.js → commands-35rBJ1R0.js} +2 -2
  8. package/dist/{commands-zPSnOGzH.js → commands-BF5eptEi.js} +4 -4
  9. package/dist/commands-CaSixDwT.js +699 -0
  10. package/dist/{commands-DzALVX5g.js → commands-CuYIkHeU.js} +3 -3
  11. package/dist/{commands-BQ2NIqub.js → commands-DL5fpABN.js} +5 -5
  12. package/dist/{commands-Sx1fDNNn.js → commands-DQYH_m6i.js} +3 -3
  13. package/dist/{commands-CLSxKz-l.js → commands-KY-9X1Rh.js} +4 -4
  14. package/dist/{commands-Dv5TXjvb.js → commands-jJcS7D2a.js} +6 -6
  15. package/dist/{dry-run-3IxPmCtW.js → dry-run-CFCZUpjb.js} +1 -1
  16. package/dist/launch.js +6 -6
  17. package/dist/{meetings-DfU867eV.js → meetings-CLZ6xQQB.js} +2 -2
  18. package/dist/{peers-B0KDkI6a.js → peers-u1zxe-Ub.js} +1 -1
  19. package/dist/{queries-DeEwfe2c.js → queries-CaAe3cve.js} +100 -8
  20. package/dist/{read-B-aJJewb.js → read-B8DSwYfB.js} +2 -2
  21. package/dist/{telemetry-Bjoz29Hl.js → telemetry-Be_lbB5c.js} +2 -2
  22. package/dist/telemetry.js +1 -1
  23. package/dist/{ui-CdKo8mLw.js → ui-Bb69ZfVv.js} +1 -1
  24. package/dist/{vault-CsBC-1Mq.js → vault-DFV0zjbT.js} +1 -1
  25. package/package.json +5 -5
  26. package/dist/client-DwDGjalU.js +0 -2
  27. package/dist/commands-5Ou8xJw5.js +0 -225
package/README.md CHANGED
@@ -37,29 +37,30 @@ pnpm backstage creds renew # extend every Send 30 days
37
37
  pnpm backstage import involvement --file OrganizationRoster.csv # verify members; previews, then asks
38
38
  pnpm backstage import attendance --meeting 2026-09-09 --file sign-in.csv
39
39
  pnpm backstage export stars --from 2026-08-17 # audited under your gh login
40
+ pnpm backstage export attendance --meeting 2026-09-09 --format bevy,involvement
40
41
  ```
41
42
 
42
43
  ## Commands
43
44
 
44
- | Command | What it does |
45
- | ------------------------------------------------ | -------------------------------------------------------------------------------------- |
46
- | `deploy <app> --tier <t>` | Checks `CLOUDFLARE_API_TOKEN`, writes the Worker's secrets file, deploys, removes it. |
47
- | `deploy write-env` | Composes `.env.<DEPLOY_ENV>` from the GitHub environment. |
48
- | `deploy preflight` | Classifies the project: paused (skip) or broken (fail). |
49
- | `deploy plan`, `deploy migrate` | Dry-run the migrations into the job summary; apply them to `DB_URL`. |
50
- | `deploy smoke --tier <t> [--app]` | Public routes answer 200, the auth redirect works, this deploy's Sentry release shows. |
51
- | `deploy reconcile --tier <t>` | The platform's config reconcile, after the deploy (`CRON_SECRET`). |
52
- | `deploy prune-monitors --tier <t> [--app]` | Deletes the app's Sentry Crons monitors it no longer declares (production only). |
53
- | `env pull\|push\|audit --target <t>` | One env file per target, synced to Bitwarden and GitHub. `audit` lists orphans. |
54
- | `planner status\|create\|reset-password\|drop` | The `migration_planner` role the preflight tier holds. |
55
- | `graphics [graphic…]` | Club images from `@devdogsuga/brand`: `brand/*`, `app/*`, `event/*`. |
56
- | `qr <text>` | QR codes with every option of `/console/qr`. |
57
- | `github rulesets\|settings` | Diff (and with `--apply` write) GitHub config, through `gh`. |
58
- | `newsletter render\|draft\|send <issue…>` | Changelog issues as files, mailbox drafts, or a send. |
59
- | `creds send\|add\|renew\|list\|report` | Club logins from Bitwarden as email-verified Sends, and the Linear report. |
60
- | `import involvement --file <csv>` | Verifies the members on the Involvement Network roster, unverifies everyone else. |
61
- | `import attendance --meeting <day> --file <csv>` | Records a meeting's attendance from a sign-in sheet (method `import`). |
62
- | `export stars\|attendance\|reflections` | Member data as CSV, each export audited under the officer's gh login. |
45
+ | Command | What it does |
46
+ | -------------------------------------------------- | -------------------------------------------------------------------------------------- |
47
+ | `deploy <app> --tier <t>` | Checks `CLOUDFLARE_API_TOKEN`, writes the Worker's secrets file, deploys, removes it. |
48
+ | `deploy write-env` | Composes `.env.<DEPLOY_ENV>` from the GitHub environment. |
49
+ | `deploy preflight` | Classifies the project: paused (skip) or broken (fail). |
50
+ | `deploy plan`, `deploy migrate` | Dry-run the migrations into the job summary; apply them to `DB_URL`. |
51
+ | `deploy smoke --tier <t> [--app]` | Public routes answer 200, the auth redirect works, this deploy's Sentry release shows. |
52
+ | `deploy reconcile --tier <t>` | The platform's config reconcile, after the deploy (`CRON_SECRET`). |
53
+ | `deploy prune-monitors --tier <t> [--app]` | Deletes the app's Sentry Crons monitors it no longer declares (production only). |
54
+ | `env pull\|push\|audit --target <t>` | One env file per target, synced to Bitwarden and GitHub. `audit` lists orphans. |
55
+ | `planner status\|create\|reset-password\|drop` | The `migration_planner` role the preflight tier holds. |
56
+ | `graphics [graphic…]` | Club images from `@devdogsuga/brand`: `brand/*`, `app/*`, `event/*`. |
57
+ | `qr <text>` | QR codes with every option of `/console/qr`. |
58
+ | `github rulesets\|settings` | Diff (and with `--apply` write) GitHub config, through `gh`. |
59
+ | `newsletter render\|draft\|send <issue…>` | Changelog issues as files, mailbox drafts, or a send. |
60
+ | `creds send\|add\|renew\|list\|report` | Club logins from Bitwarden as email-verified Sends, and the Linear report. |
61
+ | `import involvement --file <csv>` | Verifies the members on the Involvement Network roster, unverifies everyone else. |
62
+ | `import attendance --meeting <day> --file <csv>` | Records a meeting's attendance from a sign-in sheet (method `import`). |
63
+ | `export stars\|attendance\|reflections\|responses` | Member data as CSV, each export audited under the officer's gh login. |
63
64
 
64
65
  `smoke` and `reconcile` replace DevDogsUGA's `packages/deploy-checks`. The
65
66
  per-app data (hosts, public paths, the protected path and its redirect) stays in
@@ -78,8 +79,7 @@ DevDogsUGA, as a `smoke` field on each app's entry in `workers.json`:
78
79
  "protectedPath": "/console/permissions",
79
80
  "protectedRedirectPrefix": "/auth"
80
81
  }
81
- },
82
- "apps/sandbox"
82
+ }
83
83
  ]
84
84
  ```
85
85
 
@@ -202,15 +202,32 @@ meetings are refused. Rerunning a sheet records nothing new; `--replace`
202
202
  makes the sheet the meeting's whole imported set, removing earlier imported
203
203
  rows it no longer lists. Every run previews, then asks (`--dry-run`, `--yes`).
204
204
 
205
- ### `export stars|attendance|reflections`
205
+ ### `export stars|attendance|reflections|responses`
206
206
 
207
207
  The platform's three CSVs, columns unchanged: `stars` (one row per earned
208
208
  star), `attendance` (one row per check-in; `--meeting` for one night) and
209
- `reflections` (each member's current text). Each export writes a
209
+ `reflections` (each member's current text). `responses` is the check-in
210
+ survey: one row per answer, worded with each question's current labels
211
+ beside the stored value. With `--meeting` it is that meeting's answers plus
212
+ its attendees' member answers as they stood when it ended (from the answer
213
+ history); `--format wide` writes one meeting as one row per person and one
214
+ column per question. Each export writes a
210
215
  `platform.exportAudit` row before reading anything, attributed to the
211
216
  platform account linked to the GitHub login `gh` is signed in as, and refuses
212
- to run when there is none. The file goes to `./<kind>….csv` (owner-readable
213
- only, never over an existing file without `--yes`) or stdout with `--out -`.
217
+ to run when there is none.
218
+
219
+ `attendance` can also be written as a Bevy attendee import (GDG's
220
+ gdg.community.dev; one row per person, checked in, with a `survey:` column
221
+ for each question mapped to one in `questions.json` that anyone answered) and
222
+ an Involvement Network
223
+ list (one MyID email per line), both for one `--meeting`. `--format
224
+ platform,bevy,involvement` picks any of them, written from one read with an
225
+ audit row each; at a terminal it is asked. At a terminal each file's
226
+ destination is asked for too, with path completion (Tab completes the
227
+ highlighted suggestion; a folder means the suggested name inside it).
228
+ Otherwise files go to `./<kind>…[-<format>].<ext>`, or `--out` (a file, a
229
+ folder for several, or `-` for stdout). Files are owner-readable only and
230
+ never replace an existing file without `--yes` or a yes at the prompt.
214
231
 
215
232
  No secret value reaches stdout, stderr, the failure log, Sentry, an error
216
233
  message or argv: values go to `bw` as base64 JSON on stdin, every error is
@@ -1,8 +1,8 @@
1
- import { A as YES, D as DRY_RUN, O as JSON_FLAG, j as createCatalog, k as SCOPES, v as noteRan, w as findRepoRoot } from "./telemetry-Bjoz29Hl.js";
2
- import { n as isDryRun } from "./dry-run-3IxPmCtW.js";
3
- import { o as unwrap } from "./ui-CdKo8mLw.js";
1
+ import { A as YES, D as DRY_RUN, O as JSON_FLAG, j as createCatalog, k as SCOPES, v as noteRan, w as findRepoRoot } from "./telemetry-Be_lbB5c.js";
2
+ import { n as isDryRun } from "./dry-run-CFCZUpjb.js";
3
+ import { o as unwrap } from "./ui-Bb69ZfVv.js";
4
4
  import { n as positionals } from "./args-Cjr_Iqts.js";
5
- import { t as EXPORTS } from "./queries-DeEwfe2c.js";
5
+ import { t as EXPORTS } from "./queries-CaAe3cve.js";
6
6
  import { r as qrCatalogOptions } from "./options-DCaqm8BI.js";
7
7
  import { existsSync, readFileSync } from "node:fs";
8
8
  import { join } from "node:path";
@@ -1099,7 +1099,6 @@ const deployCommand = {
1099
1099
  subcommands: [
1100
1100
  app("platform"),
1101
1101
  app("schedule-builder"),
1102
- app("sandbox"),
1103
1102
  {
1104
1103
  name: "write-env",
1105
1104
  summary: "Compose .env.<DEPLOY_ENV> from the GitHub environment.",
@@ -1243,8 +1242,8 @@ const TO = {
1243
1242
  };
1244
1243
  const OUT = {
1245
1244
  flag: "--out",
1246
- value: "<path|->",
1247
- summary: "Where to write. Defaults to ./<kind>….csv; - for stdout."
1245
+ value: "<path|dir|->",
1246
+ summary: "Where to write (a folder for several files; - for stdout). Asked at a terminal."
1248
1247
  };
1249
1248
  function exportOf(kind, extra = []) {
1250
1249
  return {
@@ -1262,18 +1261,28 @@ function exportOf(kind, extra = []) {
1262
1261
  ]
1263
1262
  };
1264
1263
  }
1264
+ const MEETING = {
1265
+ flag: "--meeting",
1266
+ value: "<meeting>",
1267
+ summary: "One meeting: its day (2026-09-09), slug, config id or id."
1268
+ };
1265
1269
  const exportCommand = {
1266
1270
  name: "export",
1267
- summary: "Member data as CSV: stars, attendance, reflections. Audited.",
1271
+ summary: "Member data as CSV: stars, attendance, reflections, survey responses. Audited.",
1268
1272
  hint: "production database; your gh login is recorded",
1269
1273
  subcommands: [
1270
1274
  exportOf("stars"),
1271
- exportOf("attendance", [{
1272
- flag: "--meeting",
1273
- value: "<meeting>",
1274
- summary: "One meeting: its day (2026-09-09), slug, config id or id."
1275
+ exportOf("attendance", [MEETING, {
1276
+ flag: "--format",
1277
+ value: "<formats>",
1278
+ summary: "platform, bevy (GDG attendee import), involvement (MyID emails); comma-separated. Asked at a terminal."
1275
1279
  }]),
1276
- exportOf("reflections")
1280
+ exportOf("reflections"),
1281
+ exportOf("responses", [MEETING, {
1282
+ flag: "--format",
1283
+ value: "<formats>",
1284
+ summary: "platform (one row per answer), wide (one row per person; needs --meeting). Asked at a terminal."
1285
+ }])
1277
1286
  ]
1278
1287
  };
1279
1288
  //#endregion
@@ -1,13 +1,13 @@
1
- import { C as discoverRepoRoot, T as cliName, b as ownPackageDir, c as reportDevtoolsError, f as isNoEnv, l as reportDevtoolsFailure, n as captureDevtoolsError, o as initDevtoolsTelemetry, p as isNonInteractive, w as findRepoRoot, x as ownVersion } from "./telemetry-Bjoz29Hl.js";
2
- import { a as recordEnteredTier, f as helpPath, i as beginInvocation, l as dbPush, m as renderHelp, n as bareGroupStartPath, o as recordResolved, p as renderCommandList, r as runMenu, s as reproducibleCommand, t as catalog, u as dbPushDryRun } from "./catalog-BiXI0wyi.js";
3
- import { a as repoPeerUrl, n as loadEnv, r as loadEnvLoad, t as getEnvSync } from "./peers-B0KDkI6a.js";
1
+ import { C as discoverRepoRoot, T as cliName, b as ownPackageDir, c as reportDevtoolsError, f as isNoEnv, l as reportDevtoolsFailure, n as captureDevtoolsError, o as initDevtoolsTelemetry, p as isNonInteractive, w as findRepoRoot, x as ownVersion } from "./telemetry-Be_lbB5c.js";
2
+ import { a as recordEnteredTier, f as helpPath, i as beginInvocation, l as dbPush, m as renderHelp, n as bareGroupStartPath, o as recordResolved, p as renderCommandList, r as runMenu, s as reproducibleCommand, t as catalog, u as dbPushDryRun } from "./catalog-COleRgQD.js";
3
+ import { a as repoPeerUrl, n as loadEnv, r as loadEnvLoad, t as getEnvSync } from "./peers-u1zxe-Ub.js";
4
4
  import { t as nonEmpty } from "./connection-D3XsOE3S.js";
5
- import { a as wouldRunLine, n as isDryRun, t as dryRunKind } from "./dry-run-3IxPmCtW.js";
6
- import { a as explainError, i as explain, n as bail, o as unwrap, r as errorMessage } from "./ui-CdKo8mLw.js";
5
+ import { a as wouldRunLine, n as isDryRun, t as dryRunKind } from "./dry-run-CFCZUpjb.js";
6
+ import { a as explainError, i as explain, n as bail, o as unwrap, r as errorMessage } from "./ui-Bb69ZfVv.js";
7
7
  import { n as positionals, t as flagValue } from "./args-Cjr_Iqts.js";
8
8
  import { t as DONE } from "./dispatch-D048O65I.js";
9
9
  import { t as EnvDocument } from "./document-DumoZXoO.js";
10
- import { a as listSecrets$1, c as updateSecret, i as createSecret, o as projectIdFor, r as byKey, s as setExplicitAccessToken } from "./client-B_MY9kVI.js";
10
+ import { a as listSecrets$1, c as updateSecret, i as createSecret, o as projectIdFor, r as byKey, s as setExplicitAccessToken } from "./client-NuoKMQmV.js";
11
11
  import { register } from "node:module";
12
12
  import { pathToFileURL } from "node:url";
13
13
  import { appendFileSync, existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
@@ -249,16 +249,12 @@ async function importRepoTs(absolutePath) {
249
249
  * Most workspace packages declare nothing, so "no env.ts found" means
250
250
  * not-a-manifest rather than an error.
251
251
  *
252
- * ⚠️ `apps/sandbox` was once listed here as having no manifest ON PURPOSE, on
253
- * the grounds that a Worker reads bindings that arrive as a function argument
254
- * rather than `process.env`. That premise is still true and the conclusion
255
- * drawn from it was still wrong: a manifest is also the only thing that routes
256
- * a credential to a deployed environment and the only thing that tells
257
- * `env audit` a Worker secret is supposed to be there. Without one,
258
- * `SANDBOX_PROXY_TOKEN`, minted at deploy time and therefore in no Bitwarden
259
- * project by design, was reported as an orphan, i.e. as safe for the §3.6 prune
260
- * path to delete. `apps/sandbox/env.ts` exists now, and states that reasoning
261
- * at length.
252
+ * ⚠️ A Worker still needs a manifest, even though its bindings arrive as a
253
+ * function argument rather than `process.env`: a manifest is the only thing
254
+ * that routes a credential to a deployed environment and the only thing that
255
+ * tells `env audit` a Worker secret is supposed to be there. Without one, a
256
+ * minted secret (in no Bitwarden project by design) is reported as an orphan,
257
+ * i.e. as safe for the §3.6 prune path to delete.
262
258
  */
263
259
  /**
264
260
  * The single in-flight (or settled) load.
@@ -847,8 +843,7 @@ async function runPreflight(deps = {}) {
847
843
  * ## Minted keys are refused, not filled
848
844
  *
849
845
  * A `secrecy: "secret"` key `storableKeys()` excludes is "minted": signed at
850
- * deploy time rather than stored anywhere, which is what `SANDBOX_PROXY_TOKEN`
851
- * is declared as. This has no minter of its own — there is nothing in
846
+ * deploy time rather than stored anywhere. This has no minter of its own — there is nothing in
852
847
  * this repository that produces one — so a declared minted key is always a
853
848
  * hard failure here rather than a silent omission: a Worker that expects a
854
849
  * value substituted fails loudly at the file it never got, not at whatever
@@ -1661,8 +1656,7 @@ function renderWriteEnvReport(result) {
1661
1656
  * which leaves a Wrangler "config redirect" at `.wrangler/deploy/config.json`
1662
1657
  * pointing at the generated `dist/server/wrangler.json`; a bare `wrangler
1663
1658
  * deploy` from the app dir resolves through it with no `--config` needed.
1664
- * Sandbox (plain Worker) always used this shape, so all three apps share one
1665
- * deploy step.
1659
+ * Both apps share one deploy step.
1666
1660
  *
1667
1661
  * Steps (`write-env`, `preflight`, `plan`, `migrate`, `smoke`, `reconcile`,
1668
1662
  * `prune-monitors`) are individually addressable for jobs that run only one.
@@ -2738,9 +2732,9 @@ async function listWorkerSecrets(target) {
2738
2732
  *
2739
2733
  * The expected set is derived from the app's own manifest: every key it
2740
2734
  * declares with `secrecy: "secret"`. That deliberately includes the MINTED
2741
- * ones. `SANDBOX_PROXY_TOKEN` has no copy in Bitwarden or GitHub by design, and
2742
- * an audit that reasoned from stored copies alone would report the live proxy
2743
- * credential as safe to delete. (`env audit` had exactly that bug; see
2735
+ * ones. A minted key has no copy in Bitwarden or GitHub by design, and an
2736
+ * audit that reasoned from stored copies alone would report a live credential
2737
+ * as safe to delete. (`env audit` had exactly that bug; see
2744
2738
  * `EnvMeta.minted`.)
2745
2739
  *
2746
2740
  * ## Report always, prune almost never (security plan §3.6)
@@ -5386,12 +5380,12 @@ const HANDLERS = {
5386
5380
  },
5387
5381
  completions: handleCompletions,
5388
5382
  github: handleGithub,
5389
- graphics: async (rest) => (await import("./commands-Dv5TXjvb.js")).handleGraphics(rest),
5390
- qr: async (rest) => (await import("./commands-Sx1fDNNn.js")).handleQr(rest),
5391
- newsletter: async (rest) => (await import("./commands-D345F-Od.js")).handleNewsletter(rest),
5392
- creds: async (rest) => (await import("./commands-zPSnOGzH.js")).handleCreds(rest),
5393
- import: async (rest) => (await import("./commands-DzALVX5g.js")).handleImport(rest),
5394
- export: async (rest) => (await import("./commands-5Ou8xJw5.js")).handleExport(rest)
5383
+ graphics: async (rest) => (await import("./commands-jJcS7D2a.js")).handleGraphics(rest),
5384
+ qr: async (rest) => (await import("./commands-DQYH_m6i.js")).handleQr(rest),
5385
+ newsletter: async (rest) => (await import("./commands-35rBJ1R0.js")).handleNewsletter(rest),
5386
+ creds: async (rest) => (await import("./commands-BF5eptEi.js")).handleCreds(rest),
5387
+ import: async (rest) => (await import("./commands-CuYIkHeU.js")).handleImport(rest),
5388
+ export: async (rest) => (await import("./commands-CaSixDwT.js")).handleExport(rest)
5395
5389
  };
5396
5390
  /**
5397
5391
  * Names that were commands of the contributor CLI, refused with where they
@@ -1,6 +1,6 @@
1
- import { C as discoverRepoRoot, p as isNonInteractive } from "./telemetry-Bjoz29Hl.js";
1
+ import { C as discoverRepoRoot, p as isNonInteractive } from "./telemetry-Be_lbB5c.js";
2
2
  import { t as nonEmpty } from "./connection-D3XsOE3S.js";
3
- import { a as explainError, i as explain, o as unwrap, t as UsageError } from "./ui-CdKo8mLw.js";
3
+ import { a as explainError, i as explain, o as unwrap, t as UsageError } from "./ui-Bb69ZfVv.js";
4
4
  import { t as EnvDocument } from "./document-DumoZXoO.js";
5
5
  import { resolve } from "node:path";
6
6
  import { confirm, log, text } from "@clack/prompts";
@@ -31,7 +31,7 @@ async function readProductionKey(key) {
31
31
  const value = nonEmpty(EnvDocument.parse(text).get(key));
32
32
  if (value) return value;
33
33
  } catch {}
34
- const { listSecrets, projectIdFor } = await import("./client-DwDGjalU.js");
34
+ const { listSecrets, projectIdFor } = await import("./client-A6pJcxSE.js");
35
35
  const secrets = await listSecrets(await projectIdFor(PRODUCTION_PROJECT));
36
36
  return nonEmpty(secrets.find((s) => s.key === key)?.value);
37
37
  }
@@ -133,4 +133,4 @@ function reportFailure(command, err, worded = []) {
133
133
  explainError(`${command} failed.`, err);
134
134
  }
135
135
  //#endregion
136
- export { reportFailure as a, connect as c, withConnection as d, readInputFile as i, dbError as l, confirmWrite as n, say as o, plural as r, ProductionError as s, canPrompt as t, requireProductionKey as u };
136
+ export { readInputFile as a, ProductionError as c, requireProductionKey as d, withConnection as f, plural as i, connect as l, confirmWrite as n, reportFailure as o, expandHome as r, say as s, canPrompt as t, dbError as u };
@@ -0,0 +1,2 @@
1
+ import { a as listSecrets, o as projectIdFor } from "./client-NuoKMQmV.js";
2
+ export { listSecrets, projectIdFor };
@@ -1,8 +1,8 @@
1
- import { w as findRepoRoot } from "./telemetry-Bjoz29Hl.js";
2
- import { n as loadEnv } from "./peers-B0KDkI6a.js";
3
- import { o as unwrap } from "./ui-CdKo8mLw.js";
1
+ import { w as findRepoRoot } from "./telemetry-Be_lbB5c.js";
2
+ import { n as loadEnv } from "./peers-u1zxe-Ub.js";
3
+ import { o as unwrap } from "./ui-Bb69ZfVv.js";
4
4
  import { t as EnvDocument } from "./document-DumoZXoO.js";
5
- import { a as readTokenFromVault, o as saveTokenToVault, t as VAULT_ITEM_NAME } from "./vault-CsBC-1Mq.js";
5
+ import { a as readTokenFromVault, o as saveTokenToVault, t as VAULT_ITEM_NAME } from "./vault-DFV0zjbT.js";
6
6
  import { dirname, join, resolve } from "node:path";
7
7
  import { log, password, select, text } from "@clack/prompts";
8
8
  import { mkdir, readFile, writeFile } from "node:fs/promises";
@@ -1,5 +1,5 @@
1
- import { p as isNonInteractive } from "./telemetry-Bjoz29Hl.js";
2
- import { a as explainError, o as unwrap, r as errorMessage, t as UsageError } from "./ui-CdKo8mLw.js";
1
+ import { p as isNonInteractive } from "./telemetry-Be_lbB5c.js";
2
+ import { a as explainError, o as unwrap, r as errorMessage, t as UsageError } from "./ui-Bb69ZfVv.js";
3
3
  import { t as DONE } from "./dispatch-D048O65I.js";
4
4
  import { dirname, join, resolve } from "node:path";
5
5
  import { confirm, log, multiselect, spinner, text } from "@clack/prompts";
@@ -1,9 +1,9 @@
1
- import { C as discoverRepoRoot, p as isNonInteractive } from "./telemetry-Bjoz29Hl.js";
1
+ import { C as discoverRepoRoot, p as isNonInteractive } from "./telemetry-Be_lbB5c.js";
2
2
  import { t as nonEmpty } from "./connection-D3XsOE3S.js";
3
- import { a as explainError, i as explain, o as unwrap, r as errorMessage, t as UsageError } from "./ui-CdKo8mLw.js";
3
+ import { a as explainError, i as explain, o as unwrap, r as errorMessage, t as UsageError } from "./ui-Bb69ZfVv.js";
4
4
  import { t as DONE } from "./dispatch-D048O65I.js";
5
5
  import { t as EnvDocument } from "./document-DumoZXoO.js";
6
- import { i as readPasswordFromVault, n as bwArgs, r as openVault, s as bwCommand } from "./vault-CsBC-1Mq.js";
6
+ import { i as readPasswordFromVault, n as bwArgs, r as openVault, s as bwCommand } from "./vault-DFV0zjbT.js";
7
7
  import { resolve } from "node:path";
8
8
  import { confirm, log, multiselect, note, password, select, text } from "@clack/prompts";
9
9
  import { readFile } from "node:fs/promises";
@@ -632,7 +632,7 @@ async function readCheckoutDbUrl() {
632
632
  }
633
633
  }
634
634
  async function readSecretsManagerDbUrl() {
635
- const { listSecrets, projectIdFor } = await import("./client-DwDGjalU.js");
635
+ const { listSecrets, projectIdFor } = await import("./client-A6pJcxSE.js");
636
636
  const secrets = await listSecrets(await projectIdFor(PRODUCTION_PROJECT));
637
637
  return nonEmpty(secrets.find((s) => s.key === "DB_URL")?.value);
638
638
  }