@codemarc/blt 1.6.5 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +192 -0
  2. package/dist/blt +4 -0
  3. package/dist/blt.d.ts.map +1 -1
  4. package/dist/blt.js.map +1 -1
  5. package/dist/commands/data/apply.d.ts +6 -0
  6. package/dist/commands/data/apply.d.ts.map +1 -0
  7. package/dist/commands/data/apply.js +363 -0
  8. package/dist/commands/data/apply.js.map +1 -0
  9. package/dist/commands/data/helpers.d.ts +15 -0
  10. package/dist/commands/data/helpers.d.ts.map +1 -0
  11. package/dist/commands/data/helpers.js +53 -0
  12. package/dist/commands/data/helpers.js.map +1 -0
  13. package/dist/commands/data/pull.d.ts +11 -0
  14. package/dist/commands/data/pull.d.ts.map +1 -0
  15. package/dist/commands/data/pull.js +101 -0
  16. package/dist/commands/data/pull.js.map +1 -0
  17. package/dist/commands/data/remove.d.ts +7 -0
  18. package/dist/commands/data/remove.d.ts.map +1 -0
  19. package/dist/commands/data/remove.js +29 -0
  20. package/dist/commands/data/remove.js.map +1 -0
  21. package/dist/commands/data.d.ts +3 -0
  22. package/dist/commands/data.d.ts.map +1 -0
  23. package/dist/commands/data.js +115 -0
  24. package/dist/commands/data.js.map +1 -0
  25. package/dist/commands/spin/dns.d.ts +7 -0
  26. package/dist/commands/spin/dns.d.ts.map +1 -0
  27. package/dist/commands/spin/dns.js +42 -0
  28. package/dist/commands/spin/dns.js.map +1 -0
  29. package/dist/commands/spin/down.d.ts +3 -0
  30. package/dist/commands/spin/down.d.ts.map +1 -0
  31. package/dist/commands/spin/down.js +17 -0
  32. package/dist/commands/spin/down.js.map +1 -0
  33. package/dist/commands/spin/helpers.d.ts +7 -0
  34. package/dist/commands/spin/helpers.d.ts.map +1 -0
  35. package/dist/commands/spin/helpers.js +38 -0
  36. package/dist/commands/spin/helpers.js.map +1 -0
  37. package/dist/commands/spin/list.d.ts +3 -0
  38. package/dist/commands/spin/list.d.ts.map +1 -0
  39. package/dist/commands/spin/list.js +20 -0
  40. package/dist/commands/spin/list.js.map +1 -0
  41. package/dist/commands/spin/setup.d.ts +3 -0
  42. package/dist/commands/spin/setup.d.ts.map +1 -0
  43. package/dist/commands/spin/setup.js +32 -0
  44. package/dist/commands/spin/setup.js.map +1 -0
  45. package/dist/commands/spin/ssh.d.ts +3 -0
  46. package/dist/commands/spin/ssh.d.ts.map +1 -0
  47. package/dist/commands/spin/ssh.js +14 -0
  48. package/dist/commands/spin/ssh.js.map +1 -0
  49. package/dist/commands/spin/status.d.ts +3 -0
  50. package/dist/commands/spin/status.d.ts.map +1 -0
  51. package/dist/commands/spin/status.js +21 -0
  52. package/dist/commands/spin/status.js.map +1 -0
  53. package/dist/commands/spin/up.d.ts +11 -0
  54. package/dist/commands/spin/up.d.ts.map +1 -0
  55. package/dist/commands/spin/up.js +34 -0
  56. package/dist/commands/spin/up.js.map +1 -0
  57. package/dist/commands/spin.d.ts +3 -0
  58. package/dist/commands/spin.d.ts.map +1 -0
  59. package/dist/commands/spin.js +166 -0
  60. package/dist/commands/spin.js.map +1 -0
  61. package/dist/lib/data-pull-extra-tables.d.ts +26 -0
  62. package/dist/lib/data-pull-extra-tables.d.ts.map +1 -0
  63. package/dist/lib/data-pull-extra-tables.js +212 -0
  64. package/dist/lib/data-pull-extra-tables.js.map +1 -0
  65. package/dist/lib/data-pull-manifest.d.ts +97 -0
  66. package/dist/lib/data-pull-manifest.d.ts.map +1 -0
  67. package/dist/lib/data-pull-manifest.js +603 -0
  68. package/dist/lib/data-pull-manifest.js.map +1 -0
  69. package/dist/lib/database-runner.d.ts +28 -2
  70. package/dist/lib/database-runner.d.ts.map +1 -1
  71. package/dist/lib/database-runner.js +112 -49
  72. package/dist/lib/database-runner.js.map +1 -1
  73. package/dist/lib/digitalocean.d.ts +60 -0
  74. package/dist/lib/digitalocean.d.ts.map +1 -0
  75. package/dist/lib/digitalocean.js +108 -0
  76. package/dist/lib/digitalocean.js.map +1 -0
  77. package/dist/lib/yaml-converter.d.ts +25 -1
  78. package/dist/lib/yaml-converter.d.ts.map +1 -1
  79. package/dist/lib/yaml-converter.js +98 -15
  80. package/dist/lib/yaml-converter.js.map +1 -1
  81. package/package.json +2 -1
@@ -42,66 +42,46 @@ export function getLatestSqlFile() {
42
42
  }
43
43
  return sqlFiles[0];
44
44
  }
45
- /**
46
- * Execute a SQL file against the database
47
- */
48
- export async function runSqlFile(filePath) {
49
- let targetFile;
50
- let sqlContent;
51
- if (filePath) {
52
- // Use specified file
53
- const fileName = filePath.split("/").pop() || filePath;
54
- sqlContent = readFileSync(filePath, "utf8");
55
- targetFile = {
56
- name: fileName,
57
- version: "unknown",
58
- path: filePath,
59
- };
60
- console.log(`\n🚀 Running SQL file: ${fileName}`);
61
- }
62
- else {
63
- // Use latest file (backward compatibility)
64
- targetFile = getLatestSqlFile();
65
- sqlContent = readFileSync(targetFile.path, "utf8");
66
- console.log(`\n🚀 Running latest SQL file: ${targetFile.name} (v${targetFile.version})`);
67
- }
68
- // Read database connection from environment variables
69
- const connectionString = process.env.SUPABASE_CONNECTION_STRING;
45
+ function resolveExecConnection(connectionOverride) {
46
+ const connectionString = connectionOverride ||
47
+ process.env.BLT_DATA_LOAD_URL ||
48
+ process.env.SUPABASE_CONNECTION_STRING;
70
49
  if (!connectionString) {
71
- console.error(`\n❌ Error: No database connection string found.`);
72
- console.error("Please set SUPABASE_CONNECTION_STRING environment variable.");
73
- console.error("\nExample:");
74
- console.error(' export SUPABASE_CONNECTION_STRING="postgresql://user:password@localhost:5432/dbname"');
50
+ console.error("\n❌ Error: No database connection string found.");
51
+ console.error("Set BLT_DATA_LOAD_URL (dev target) or SUPABASE_CONNECTION_STRING.");
75
52
  process.exit(1);
76
53
  }
77
- // Create PostgreSQL client
54
+ return connectionString;
55
+ }
56
+ /**
57
+ * Execute ad-hoc SQL (e.g. snapshot apply bundle).
58
+ */
59
+ export async function runSqlContent(sqlContent, meta, connectionOverride) {
60
+ const connectionString = resolveExecConnection(connectionOverride);
78
61
  const client = new pg.Client({ connectionString });
79
62
  try {
63
+ console.log(`\n🚀 Running SQL: ${meta.name}`);
80
64
  console.log("📡 Connecting to database...");
81
65
  await client.connect();
82
66
  console.log("✅ Connected successfully");
83
67
  console.log("\n⏳ Executing SQL script...");
84
68
  console.log(" This may take a few moments...\n");
85
- // Execute the SQL
86
69
  await client.query(sqlContent);
87
70
  console.log("✅ SQL script executed successfully!");
88
- if (targetFile.version !== "unknown") {
89
- console.log(`\n📊 Database updated with schema v${targetFile.version}`);
71
+ if (meta.version !== "unknown") {
72
+ console.log(`\n📊 Database updated with schema v${meta.version}`);
90
73
  }
91
74
  }
92
75
  catch (error) {
93
76
  console.error("\n❌ Error executing SQL:");
94
77
  console.error("━".repeat(60));
95
- // Show the main error message
96
78
  console.error(`\n${error.message}`);
97
- // Show line number if available
98
79
  if (error.position) {
99
80
  const lines = sqlContent.substring(0, error.position).split("\n");
100
81
  const lineNumber = lines.length;
101
82
  const columnNumber = lines[lines.length - 1].length + 1;
102
83
  console.error(`\n📍 Location: Line ${lineNumber}, Column ${columnNumber}`);
103
84
  console.error(` Position: ${error.position} characters into file`);
104
- // Show context around the error (3 lines before and after)
105
85
  const allLines = sqlContent.split("\n");
106
86
  const startLine = Math.max(0, lineNumber - 4);
107
87
  const endLine = Math.min(allLines.length, lineNumber + 2);
@@ -114,7 +94,6 @@ export async function runSqlFile(filePath) {
114
94
  }
115
95
  console.error("━".repeat(60));
116
96
  }
117
- // Show additional PostgreSQL error details
118
97
  if (error.detail) {
119
98
  console.error(`\n📝 Detail: ${error.detail}`);
120
99
  }
@@ -127,10 +106,9 @@ export async function runSqlFile(filePath) {
127
106
  if (error.code) {
128
107
  console.error(`\n🏷️ SQL Error Code: ${error.code}`);
129
108
  }
130
- // Show the SQL file being executed
131
- console.error(`\n📂 File: ${targetFile.path}`);
132
- if (targetFile.version !== "unknown") {
133
- console.error(` Version: ${targetFile.version}`);
109
+ console.error(`\n📂 Source: ${meta.path}`);
110
+ if (meta.version !== "unknown") {
111
+ console.error(` Version: ${meta.version}`);
134
112
  }
135
113
  console.error("\n" + "━".repeat(60));
136
114
  process.exit(1);
@@ -141,19 +119,104 @@ export async function runSqlFile(filePath) {
141
119
  }
142
120
  }
143
121
  /**
144
- * Execute a SQL query and return results
122
+ * Execute a SQL file against the database.
123
+ * Uses BLT_DATA_LOAD_URL when set (dev snapshot apply), otherwise SUPABASE_CONNECTION_STRING.
145
124
  */
146
- export async function executeQuery(query) {
147
- // Read database connection from environment variables
125
+ export async function runSqlFile(filePath, connectionOverride) {
126
+ let targetFile;
127
+ let sqlContent;
128
+ if (filePath) {
129
+ const fileName = filePath.split("/").pop() || filePath;
130
+ sqlContent = readFileSync(filePath, "utf8");
131
+ targetFile = {
132
+ name: fileName,
133
+ version: "unknown",
134
+ path: filePath,
135
+ };
136
+ }
137
+ else {
138
+ targetFile = getLatestSqlFile();
139
+ sqlContent = readFileSync(targetFile.path, "utf8");
140
+ }
141
+ await runSqlContent(sqlContent, {
142
+ name: targetFile.name,
143
+ path: targetFile.path,
144
+ version: targetFile.version,
145
+ }, connectionOverride);
146
+ }
147
+ const MISSING_SUPABASE_CONN = "Please set SUPABASE_CONNECTION_STRING environment variable.";
148
+ /** Connection string used by `blt data pull` (read-only replica or safe read URL). */
149
+ const ENV_PULL_URL = "BLT_DATA_PULL_URL";
150
+ /** Connection string used by `blt data apply` (dev target); falls back to SUPABASE_CONNECTION_STRING. */
151
+ const ENV_LOAD_URL = "BLT_DATA_LOAD_URL";
152
+ export function requireConnectionString(envHint) {
148
153
  const connectionString = process.env.SUPABASE_CONNECTION_STRING;
149
154
  if (!connectionString) {
150
- console.error(`\n❌ Error: No database connection string found.`);
151
- console.error("Please set SUPABASE_CONNECTION_STRING environment variable.");
152
- console.error("\nExample:");
153
- console.error(' export SUPABASE_CONNECTION_STRING="postgresql://user:password@localhost:5432/dbname"');
155
+ console.error("\n❌ Error: No database connection string found.");
156
+ console.error(MISSING_SUPABASE_CONN);
157
+ console.error(envHint ? `\n${envHint}` : "");
158
+ console.error('\nExample: export SUPABASE_CONNECTION_STRING="postgresql://..."');
159
+ process.exit(1);
160
+ }
161
+ return connectionString;
162
+ }
163
+ /**
164
+ * Postgres URL used for snapshot pulls (`blt data pull`).
165
+ * Prefer a read replica or READ ONLY role—not a production superuser.
166
+ */
167
+ export function getPullConnectionString() {
168
+ const connectionString = process.env[ENV_PULL_URL] || process.env.SUPABASE_CONNECTION_STRING;
169
+ if (!connectionString) {
170
+ console.error(`\n❌ Error: No pull database URL found.`);
171
+ console.error(`Set ${ENV_PULL_URL} (recommended) or SUPABASE_CONNECTION_STRING for read-only pulls.`);
154
172
  process.exit(1);
155
173
  }
156
- // Create PostgreSQL client
174
+ return connectionString;
175
+ }
176
+ /**
177
+ * Postgres URL used to apply snapshots (`blt data apply`).
178
+ * Defaults to SUPABASE_CONNECTION_STRING if BLT_DATA_LOAD_URL is unset.
179
+ */
180
+ export function getLoadConnectionString() {
181
+ return (process.env[ENV_LOAD_URL] ||
182
+ process.env.SUPABASE_CONNECTION_STRING ||
183
+ (() => {
184
+ console.error(`\n❌ Error: No load database URL found.`);
185
+ console.error(`Set ${ENV_LOAD_URL} or SUPABASE_CONNECTION_STRING for apply.`);
186
+ process.exit(1);
187
+ return ""; // unreachable
188
+ })());
189
+ }
190
+ /**
191
+ * Run queries inside BEGIN READ ONLY / COMMIT. No DML.
192
+ */
193
+ export async function withReadOnlyClient(connectionString, run) {
194
+ const client = new pg.Client({ connectionString });
195
+ await client.connect();
196
+ try {
197
+ await client.query("BEGIN READ ONLY");
198
+ const out = await run(client);
199
+ await client.query("COMMIT");
200
+ return out;
201
+ }
202
+ catch (e) {
203
+ try {
204
+ await client.query("ROLLBACK");
205
+ }
206
+ catch {
207
+ // ignore rollback errors
208
+ }
209
+ throw e;
210
+ }
211
+ finally {
212
+ await client.end();
213
+ }
214
+ }
215
+ /**
216
+ * Execute a SQL query and return results
217
+ */
218
+ export async function executeQuery(query) {
219
+ const connectionString = requireConnectionString("");
157
220
  const client = new pg.Client({ connectionString });
158
221
  try {
159
222
  await client.connect();
@@ -1 +1 @@
1
- {"version":3,"file":"database-runner.js","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database-runner.js","sourceRoot":"","sources":["../../src/lib/database-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ export interface Droplet {
2
+ id: number;
3
+ name: string;
4
+ status: string;
5
+ memory: number;
6
+ vcpus: number;
7
+ disk: number;
8
+ region: {
9
+ slug: string;
10
+ name: string;
11
+ };
12
+ image: {
13
+ slug: string;
14
+ name: string;
15
+ };
16
+ size_slug: string;
17
+ networks: {
18
+ v4: Array<{
19
+ ip_address: string;
20
+ type: string;
21
+ }>;
22
+ v6: Array<{
23
+ ip_address: string;
24
+ type: string;
25
+ }>;
26
+ };
27
+ tags: string[];
28
+ created_at: string;
29
+ }
30
+ export interface DnsRecord {
31
+ id: number;
32
+ type: string;
33
+ name: string;
34
+ data: string;
35
+ ttl: number;
36
+ }
37
+ export interface SshKey {
38
+ id: number;
39
+ name: string;
40
+ fingerprint: string;
41
+ public_key: string;
42
+ }
43
+ export interface CreateDropletOptions {
44
+ name: string;
45
+ size: string;
46
+ region: string;
47
+ image: string;
48
+ sshKeys?: string[];
49
+ tags?: string[];
50
+ userData?: string;
51
+ }
52
+ export declare function createDroplet(opts: CreateDropletOptions): Promise<Droplet>;
53
+ export declare function deleteDroplet(id: number): Promise<void>;
54
+ export declare function listDroplets(tag?: string): Promise<Droplet[]>;
55
+ export declare function getDroplet(idOrName: string): Promise<Droplet>;
56
+ export declare function listSshKeys(): Promise<SshKey[]>;
57
+ export declare function createDnsRecord(domain: string, type: string, name: string, data: string, ttl?: number): Promise<DnsRecord>;
58
+ export declare function listDnsRecords(domain: string): Promise<DnsRecord[]>;
59
+ export declare function deleteDnsRecord(domain: string, recordId: number): Promise<void>;
60
+ //# sourceMappingURL=digitalocean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digitalocean.d.ts","sourceRoot":"","sources":["../../src/lib/digitalocean.ts"],"names":[],"mappings":"AAiEA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QACR,EAAE,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAChD,EAAE,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjD,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAsB,aAAa,CACjC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED,wBAAsB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAMnE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnE;AAMD,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGrD;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,SAAM,GACR,OAAO,CAAC,SAAS,CAAC,CASpB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAKzE;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf"}
@@ -0,0 +1,108 @@
1
+ // DigitalOcean API helper — pure API layer, no CLI wiring
2
+ import { readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { homedir } from "node:os";
5
+ const DO_API = "https://api.digitalocean.com/v2";
6
+ function readDoctlToken() {
7
+ const configPath = process.platform === "darwin"
8
+ ? join(homedir(), "Library", "Application Support", "doctl", "config.yaml")
9
+ : join(homedir(), ".config", "doctl", "config.yaml");
10
+ try {
11
+ const content = readFileSync(configPath, "utf-8");
12
+ const match = content.match(/^access-token:\s*(.+)$/m);
13
+ return match?.[1]?.trim() || undefined;
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ }
19
+ function getToken() {
20
+ const token = process.env.DIGITALOCEAN_ACCESS_TOKEN ??
21
+ process.env.DIGITALOCEAN_TOKEN ??
22
+ readDoctlToken();
23
+ if (!token) {
24
+ throw new Error("DigitalOcean token not found. Either run 'doctl auth init' or set " +
25
+ "DIGITALOCEAN_ACCESS_TOKEN / DIGITALOCEAN_TOKEN.");
26
+ }
27
+ return token;
28
+ }
29
+ async function doFetch(path, options) {
30
+ const res = await fetch(`${DO_API}${path}`, {
31
+ ...options,
32
+ headers: {
33
+ "Content-Type": "application/json",
34
+ Authorization: `Bearer ${getToken()}`,
35
+ ...options?.headers,
36
+ },
37
+ });
38
+ if (res.status === 204)
39
+ return undefined;
40
+ const body = await res.text();
41
+ if (!res.ok) {
42
+ throw new Error(`DigitalOcean API ${res.status} ${res.statusText}: ${body}`);
43
+ }
44
+ return body ? JSON.parse(body) : undefined;
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // Droplet operations
48
+ // ---------------------------------------------------------------------------
49
+ export async function createDroplet(opts) {
50
+ const { droplet } = await doFetch("/droplets", {
51
+ method: "POST",
52
+ body: JSON.stringify({
53
+ name: opts.name,
54
+ region: opts.region,
55
+ size: opts.size,
56
+ image: opts.image,
57
+ ssh_keys: opts.sshKeys ?? [],
58
+ tags: opts.tags ?? [],
59
+ ...(opts.userData ? { user_data: opts.userData } : {}),
60
+ }),
61
+ });
62
+ return droplet;
63
+ }
64
+ export async function deleteDroplet(id) {
65
+ await doFetch(`/droplets/${id}`, { method: "DELETE" });
66
+ }
67
+ export async function listDroplets(tag) {
68
+ const query = tag ? `?tag_name=${encodeURIComponent(tag)}` : "";
69
+ const { droplets } = await doFetch(`/droplets${query}`);
70
+ return droplets;
71
+ }
72
+ export async function getDroplet(idOrName) {
73
+ if (/^\d+$/.test(idOrName)) {
74
+ const { droplet } = await doFetch(`/droplets/${idOrName}`);
75
+ return droplet;
76
+ }
77
+ const all = await listDroplets();
78
+ const match = all.find((d) => d.name === idOrName);
79
+ if (!match) {
80
+ throw new Error(`Droplet not found: ${idOrName}`);
81
+ }
82
+ return match;
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // SSH key operations
86
+ // ---------------------------------------------------------------------------
87
+ export async function listSshKeys() {
88
+ const { ssh_keys } = await doFetch("/account/keys");
89
+ return ssh_keys;
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // DNS operations
93
+ // ---------------------------------------------------------------------------
94
+ export async function createDnsRecord(domain, type, name, data, ttl = 300) {
95
+ const { domain_record } = await doFetch(`/domains/${encodeURIComponent(domain)}/records`, {
96
+ method: "POST",
97
+ body: JSON.stringify({ type, name, data, ttl }),
98
+ });
99
+ return domain_record;
100
+ }
101
+ export async function listDnsRecords(domain) {
102
+ const { domain_records } = await doFetch(`/domains/${encodeURIComponent(domain)}/records`);
103
+ return domain_records;
104
+ }
105
+ export async function deleteDnsRecord(domain, recordId) {
106
+ await doFetch(`/domains/${encodeURIComponent(domain)}/records/${recordId}`, { method: "DELETE" });
107
+ }
108
+ //# sourceMappingURL=digitalocean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digitalocean.js","sourceRoot":"","sources":["../../src/lib/digitalocean.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,21 @@
1
1
  import type { YamlFile } from "./constants";
2
+ /**
3
+ * Recursively substitute environment variables in all string values.
4
+ *
5
+ * `${UUID}` (and `{UUID}` / `$UUID`) is special: each placeholder is replaced
6
+ * with a newly generated UUID, not `process.env.UUID`.
7
+ *
8
+ * NOTE: If you see `${SUPABASE_URL}` (or any other `${VAR}`) in your *output*,
9
+ * instead of the actual env value, it means `process.env.VAR` was undefined
10
+ * at the time this function ran. This likely means the environment variable
11
+ * wasn't loaded, set, or visible to the Bun/Node.js process at runtime.
12
+ *
13
+ * Bun automatically loads from .env, but if you're running this with Node.js,
14
+ * you need to ensure dotenv is loaded, or the env values are set in the OS.
15
+ *
16
+ * If you want to debug, try logging `process.env` or check how you run Bun/Node.
17
+ */
18
+ export declare function processEnvVars(value: unknown): unknown;
2
19
  /**
3
20
  * Convert YAML content to JSON array format.
4
21
  */
@@ -8,7 +25,14 @@ export declare function yamlToJson(yamlContent: string): Record<string, unknown>
8
25
  */
9
26
  export declare function jsonToSql(rows: {
10
27
  row: Record<string, unknown>;
11
- }[], name: string, type?: "function" | "procedure" | "table"): string;
28
+ }[], name: string, type?: "function" | "procedure" | "table", options?: {
29
+ conflictColumns?: string[];
30
+ excludeFromConflictUpdate?: string[];
31
+ conflictWhere?: string;
32
+ columnUdts?: Record<string, string>;
33
+ /** When true, append `OVERRIDING SYSTEM VALUE` for GENERATED ALWAYS identity columns in the row map. */
34
+ overridingSystemValue?: boolean;
35
+ }): string;
12
36
  /**
13
37
  * Convert YAML content to SQL statements.
14
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"yaml-converter.d.ts","sourceRoot":"","sources":["../../src/lib/yaml-converter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAoR5C;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,EACxC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAU,GAAG,WAAW,GAAG,OAAiB,GACjD,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAU,GAAG,WAAW,GAAG,OAAiB,GACjD,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAqBxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBvD"}
1
+ {"version":3,"file":"yaml-converter.d.ts","sourceRoot":"","sources":["../../src/lib/yaml-converter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2B5C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAStD;AA+TD;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEzE;AAED;;GAEG;AACH,wBAAgB,SAAS,CACxB,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAAE,EACxC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAU,GAAG,WAAW,GAAG,OAAiB,EAClD,OAAO,CAAC,EAAE;IACT,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,wGAAwG;IACxG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAChC,GACC,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,UAAU,GAAG,WAAW,GAAG,OAAiB,GACjD,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAqBxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBvD"}