@codemarc/blt 1.6.2 → 1.6.3

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,6 +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
21
  - **Cleanup**: Remove generated SQL/instance files, clean infrequently used YAML tags
21
22
 
22
23
  ## Installation
@@ -74,6 +75,7 @@ blt deploy schema
74
75
  | `blt workflow`| list, show, delete, reload, deploy |
75
76
  | `blt bucket` | names, list, upload, download, url, clear |
76
77
  | `blt show` | schema, counts, env, db, repo |
78
+ | `blt env` | get (decrypt trailz env to `.env`) |
77
79
  | `blt cleanup` | generated, tags |
78
80
 
79
81
  Run `blt <command>` with no subcommand for help (e.g. `blt image`, `blt pdf`).
@@ -733,6 +735,20 @@ blt show repo --ssh
733
735
 
734
736
  ---
735
737
 
738
+ ## Env Commands
739
+
740
+ ### `blt env get <name>`
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`).
743
+
744
+ ```bash
745
+ blt env get laf
746
+ ```
747
+
748
+ This is equivalent to `smash -n .trailz/env/.env.<name> >.env` from the project root.
749
+
750
+ ---
751
+
736
752
  ## Cleanup Commands
737
753
 
738
754
  ### `blt cleanup generated`
@@ -768,7 +784,7 @@ blt cleanup tags joanne --min-count 2 --dry-run
768
784
 
769
785
  ## Environment Variables
770
786
 
771
- Bucket and database operations typically use Supabase configuration (e.g. from `.env`). The `blt show env` command displays BLT core environment variables.
787
+ Bucket and database operations typically use Supabase configuration (e.g. from `.env`). The `blt show env` command displays BLT core environment variables. To materialize `.env` from a committed encrypted file under `.trailz/env/`, use `blt env get <name>`.
772
788
 
773
789
  ---
774
790
 
package/dist/blt CHANGED
@@ -12,6 +12,7 @@ import cleanupCommand from "./commands/cleanup";
12
12
  import workflowCommand from "./commands/workflow";
13
13
  import waiCommand from "./commands/wai";
14
14
  import templateCommand from "./commands/template";
15
+ import envCommand from "./commands/env";
15
16
  import { join, dirname } from "node:path";
16
17
  import { readFileSync } from "node:fs";
17
18
  import { fileURLToPath } from "node:url";
@@ -37,6 +38,7 @@ cleanupCommand(program);
37
38
  workflowCommand(program);
38
39
  waiCommand(program);
39
40
  templateCommand(program);
41
+ envCommand(program);
40
42
  // If no command is provided, show help
41
43
  const args = process.argv.slice(2);
42
44
  if (args.length === 0) {
package/dist/blt.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAuBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
1
+ {"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAwBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
package/dist/blt.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AAE3B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtB,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Logger } from "@caporal/core";
2
+ /**
3
+ * Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
4
+ * in the current working directory.
5
+ */
6
+ export declare function envGet(name: string, logger: Logger): Promise<void>;
7
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,33 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /** Single path segment for `.env.<name>` under `.trailz/env/`. */
4
+ const NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
5
+ /**
6
+ * Decrypt `.trailz/env/.env.<name>` with smash (`-n`) and write plaintext to `.env`
7
+ * in the current working directory.
8
+ */
9
+ export async function envGet(name, logger) {
10
+ if (!NAME_RE.test(name)) {
11
+ logger.error("Invalid environment name: use one segment (letters, numbers, . _ -).");
12
+ process.exit(1);
13
+ }
14
+ 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}`);
18
+ process.exit(1);
19
+ }
20
+ const proc = Bun.spawnSync({
21
+ cmd: ["bunx", "smash", "-n", encryptedPath],
22
+ cwd,
23
+ stdout: "pipe",
24
+ stderr: "inherit",
25
+ });
26
+ if (proc.exitCode !== 0) {
27
+ process.exit(proc.exitCode ?? 1);
28
+ }
29
+ const outPath = join(cwd, ".env");
30
+ await Bun.write(outPath, proc.stdout);
31
+ logger.info(`Wrote ${outPath}`);
32
+ }
33
+ //# sourceMappingURL=get.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import type { Program } from "@caporal/core";
2
+ export default function envCommand(program: Program): void;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiC,OAAO,EAAE,MAAM,eAAe,CAAC;AAG5E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QA2ClD"}
@@ -0,0 +1,37 @@
1
+ import { envGet } from "./env/get";
2
+ export default function envCommand(program) {
3
+ const envHelpText = `
4
+ env utilities (trailz / smash)
5
+
6
+ Usage:
7
+ blt env <operation>
8
+
9
+ Available operations:
10
+ get <name> Decrypt .trailz/env/.env.<name> with smash and write .env in the current directory
11
+
12
+ Requires: bunx smash (e.g. @codemarc/smashdata) and a committed encrypted file under .trailz/env/.
13
+
14
+ Run 'blt env get --help' for more information.
15
+ `;
16
+ program
17
+ .command("env", "decrypt trailz env to .env")
18
+ .help(envHelpText)
19
+ .action(() => {
20
+ console.log(envHelpText);
21
+ });
22
+ program
23
+ .command("env get", "Decrypt named trailz env to .env")
24
+ .hide()
25
+ .argument("<name>", "Environment name (file .trailz/env/.env.<name>)")
26
+ .action(async ({ args, logger, }) => {
27
+ try {
28
+ await envGet(args.name, logger);
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : String(error);
32
+ logger.error(message);
33
+ process.exit(1);
34
+ }
35
+ });
36
+ }
37
+ //# sourceMappingURL=env.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codemarc/blt",
3
- "version": "1.6.2",
3
+ "version": "1.6.3",
4
4
  "description": "blt cli",
5
5
  "type": "module",
6
6
  "main": "dist/blt",