@codemarc/blt 1.6.3 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  - **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
18
18
  - **Workflow**: List, show, delete, reload, and deploy GitHub Actions workflows (requires `gh`)
19
19
  - **Show**: Schema info, row counts, env vars, DB version, repo list
20
- - **Env**: Decrypt trailz `.trailz/env/.env.<name>` to `.env` via smash (`blt env get`)
20
+ - **Env**: Decrypt trailz `.trailz/env/.env.<name>.bin` to `.env` via smash (`blt env get`; requires `SMASH_KEY`)
21
21
  - **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
22
22
 
23
23
  ## Installation
@@ -739,13 +739,13 @@ blt show repo --ssh
739
739
 
740
740
  ### `blt env get <name>`
741
741
 
742
- Decrypt the encrypted file `.trailz/env/.env.<name>` using `smash -n` and write the result to `.env` in the current directory. Requires `bunx smash` on your PATH (e.g. from `@codemarc/smashdata`).
742
+ Decrypt using `smash -n`. Ciphertext must be at `.trailz/env/.env.<name>.bin`; the CLI invokes smash with **`.env.<name>` (no `.bin`)** that matches `@codemarc/smashdata`, which reads `${path}.bin` for decrypt. Set **`SMASH_KEY`** in your environment (same as when you encrypted). Writes plaintext to `.env` in the current directory.
743
743
 
744
744
  ```bash
745
745
  blt env get laf
746
746
  ```
747
747
 
748
- This is equivalent to `smash -n .trailz/env/.env.<name> >.env` from the project root.
748
+ Equivalent to `smash -n .trailz/env/.env.laf >.env` from the project root when `.trailz/env/.env.laf.bin` exists.
749
749
 
750
750
  ---
751
751
 
@@ -1,7 +1,7 @@
1
1
  import type { Logger } from "@caporal/core";
2
2
  /**
3
- * Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
4
- * in the current working directory.
3
+ * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
4
+ * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
5
5
  */
6
6
  export declare function envGet(name: string, logger: Logger): Promise<void>;
7
7
  //# sourceMappingURL=get.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAO5C;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BxE"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAwB5C;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCxE"}
@@ -3,8 +3,24 @@ import { join } from "node:path";
3
3
  /** Single path segment for `.env.<name>` under `.trailz/env/`. */
4
4
  const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
5
5
  /**
6
- * Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
7
- * in the current working directory.
6
+ * `@codemarc/smashdata` `smash` expects the **plaintext path** `tf` (e.g. `.env.laf`).
7
+ * Ciphertext must live at `${tf}.bin`. If you pass `tf` = `.env.laf.bin`, that file
8
+ * exists as `tf`, so smash treats it as plaintext and **re-encrypts** — output is garbage.
9
+ */
10
+ function resolveSmashCommand(cwd) {
11
+ const binSmash = join(cwd, "node_modules", ".bin", "smash");
12
+ const script = join(cwd, "node_modules", "@codemarc", "smashdata", "smash");
13
+ if (existsSync(binSmash)) {
14
+ return [binSmash];
15
+ }
16
+ if (existsSync(script)) {
17
+ return ["node", script];
18
+ }
19
+ return ["bunx", "@codemarc/smashdata"];
20
+ }
21
+ /**
22
+ * Decrypt `.trailz/env/.env.<name>.bin` with smash (`-n`) and write plaintext to `.env`.
23
+ * Invokes smash with path `.trailz/env/.env.<name>` (no `.bin`) so smash reads `${path}.bin`.
8
24
  */
9
25
  export async function envGet(name, logger) {
10
26
  if (!NAME_RE.test(name)) {
@@ -12,14 +28,20 @@ export async function envGet(name, logger) {
12
28
  process.exit(1);
13
29
  }
14
30
  const cwd = process.cwd();
15
- const encryptedPath = join(cwd, ".trailz", "env", `.env.${name}`);
16
- if (!existsSync(encryptedPath)) {
17
- logger.error(`Encrypted env file not found: ${encryptedPath}`);
31
+ const dir = join(cwd, ".trailz", "env");
32
+ /** Plaintext path smash expects; ciphertext is `${basePath}.bin`. */
33
+ const basePath = join(dir, `.env.${name}`);
34
+ const binPath = `${basePath}.bin`;
35
+ if (!existsSync(binPath)) {
36
+ logger.error(`Encrypted env not found (need ciphertext at):\n ${binPath}\n` +
37
+ `Smash stores secrets in .env.<name>.bin; the argument to smash is .env.<name> without .bin.`);
18
38
  process.exit(1);
19
39
  }
40
+ const smashCmd = resolveSmashCommand(cwd);
20
41
  const proc = Bun.spawnSync({
21
- cmd: ["bunx", "smash", "-n", encryptedPath],
42
+ cmd: [...smashCmd, "-n", basePath],
22
43
  cwd,
44
+ env: process.env,
23
45
  stdout: "pipe",
24
46
  stderr: "inherit",
25
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kEAAkE;AAClE,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CACX,sEAAsE,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,iCAAiC,aAAa,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC;QAC3C,GAAG;QACH,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/env/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,kEAAkE;AAClE,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAE/C;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,CACX,sEAAsE,CACtE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,qEAAqE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,QAAQ,MAAM,CAAC;IAElC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CACX,oDAAoD,OAAO,IAAI;YAC9D,6FAA6F,CAC9F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC1B,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;QAClC,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;AACjC,CAAC"}
@@ -7,9 +7,9 @@ Usage:
7
7
  blt env <operation>
8
8
 
9
9
  Available operations:
10
- get <name> Decrypt .trailz/env/.env.<name> with smash and write .env in the current directory
10
+ get <name> Decrypt .trailz/env/.env.<name>.bin with smash and write .env (invokes smash with .env.<name> path; see @codemarc/smashdata)
11
11
 
12
- Requires: bunx smash (e.g. @codemarc/smashdata) and a committed encrypted file under .trailz/env/.
12
+ Requires: SMASH_KEY, ciphertext at .trailz/env/.env.<name>.bin, and smash (@codemarc/smashdata) via node_modules or bunx.
13
13
 
14
14
  Run 'blt env get --help' for more information.
15
15
  `;
@@ -22,7 +22,7 @@ Run 'blt env get --help' for more information.
22
22
  program
23
23
  .command("env get", "Decrypt named trailz env to .env")
24
24
  .hide()
25
- .argument("<name>", "Environment name (file .trailz/env/.env.<name>)")
25
+ .argument("<name>", "Environment name (ciphertext: .trailz/env/.env.<name>.bin)")
26
26
  .action(async ({ args, logger, }) => {
27
27
  try {
28
28
  await envGet(args.name, logger);
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;SAC5C,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACtD,IAAI,EAAE;SACN,QAAQ,CAAC,QAAQ,EAAE,iDAAiD,CAAC;SACrE,MAAM,CACN,KAAK,EAAE,EACN,IAAI,EACJ,MAAM,GAIN,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,MAAM,WAAW,GAAG;;;;;;;;;;;;CAYpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;SAC5C,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,OAAO;SACL,OAAO,CAAC,SAAS,EAAE,kCAAkC,CAAC;SACtD,IAAI,EAAE;SACN,QAAQ,CAAC,QAAQ,EAAE,4DAA4D,CAAC;SAChF,MAAM,CACN,KAAK,EAAE,EACN,IAAI,EACJ,MAAM,GAIN,EAAE,EAAE;QACJ,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CACD,CAAC;AACJ,CAAC"}
@@ -39,10 +39,10 @@ export const REPOSITORIES = [
39
39
  description: "customer repository",
40
40
  },
41
41
  {
42
- name: "logz",
43
- url: "https://github.com/bltcore-com/blt-core-logz.git",
44
- sshUrl: "git@github.com:bltcore-com/blt-core-logz.git",
45
- description: "BLT core logz repository",
42
+ name: "website",
43
+ url: "https://github.com/bltcore-com/website.git",
44
+ sshUrl: "git@github.com:bltcore-com/website.git",
45
+ description: "BLTWAI homepage",
46
46
  },
47
47
  ];
48
48
  //# sourceMappingURL=repositories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,0CAA0C;QAC/C,MAAM,EAAE,sCAAsC;QAC9C,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;QACtD,MAAM,EAAE,6CAA6C;QACrD,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;QAC5D,MAAM,EAAE,mDAAmD;QAC3D,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,8CAA8C;QACnD,MAAM,EAAE,0CAA0C;QAClD,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,0BAA0B;KACxC;CACF,CAAC"}
1
+ {"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../src/lib/repositories.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,0CAA0C;QAC/C,MAAM,EAAE,sCAAsC;QAC9C,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;QACtD,MAAM,EAAE,6CAA6C;QACrD,WAAW,EAAE,sBAAsB;KACpC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,2BAA2B;KACzC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;QAC5D,MAAM,EAAE,mDAAmD;QAC3D,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,2CAA2C;QAChD,MAAM,EAAE,uCAAuC;QAC/C,WAAW,EAAE,oBAAoB;KAClC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,8CAA8C;QACnD,MAAM,EAAE,0CAA0C;QAClD,WAAW,EAAE,qBAAqB;KACnC;IACD;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,4CAA4C;QACjD,MAAM,EAAE,wCAAwC;QAChD,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemarc/blt",
3
- "version": "1.6.3",
3
+ "version": "1.6.5",
4
4
  "description": "blt cli",
5
5
  "type": "module",
6
6
  "main": "dist/blt",