@occam-scaly/mcp-server 0.1.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 (91) hide show
  1. package/README.md +166 -0
  2. package/bin/scaly-mcp.js +6 -0
  3. package/dist/audit.d.ts +25 -0
  4. package/dist/audit.d.ts.map +1 -0
  5. package/dist/audit.js +182 -0
  6. package/dist/audit.js.map +1 -0
  7. package/dist/client.d.ts +16 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +142 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +24 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +76 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +279 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/resources/index.d.ts +17 -0
  20. package/dist/resources/index.d.ts.map +1 -0
  21. package/dist/resources/index.js +505 -0
  22. package/dist/resources/index.js.map +1 -0
  23. package/dist/tools/addons.d.ts +3 -0
  24. package/dist/tools/addons.d.ts.map +1 -0
  25. package/dist/tools/addons.js +128 -0
  26. package/dist/tools/addons.js.map +1 -0
  27. package/dist/tools/apps.d.ts +3 -0
  28. package/dist/tools/apps.d.ts.map +1 -0
  29. package/dist/tools/apps.js +121 -0
  30. package/dist/tools/apps.js.map +1 -0
  31. package/dist/tools/compute.d.ts +3 -0
  32. package/dist/tools/compute.d.ts.map +1 -0
  33. package/dist/tools/compute.js +135 -0
  34. package/dist/tools/compute.js.map +1 -0
  35. package/dist/tools/db.d.ts +3 -0
  36. package/dist/tools/db.d.ts.map +1 -0
  37. package/dist/tools/db.js +597 -0
  38. package/dist/tools/db.js.map +1 -0
  39. package/dist/tools/deployments.d.ts +3 -0
  40. package/dist/tools/deployments.d.ts.map +1 -0
  41. package/dist/tools/deployments.js +354 -0
  42. package/dist/tools/deployments.js.map +1 -0
  43. package/dist/tools/diagnose.d.ts +3 -0
  44. package/dist/tools/diagnose.d.ts.map +1 -0
  45. package/dist/tools/diagnose.js +213 -0
  46. package/dist/tools/diagnose.js.map +1 -0
  47. package/dist/tools/env.d.ts +3 -0
  48. package/dist/tools/env.d.ts.map +1 -0
  49. package/dist/tools/env.js +216 -0
  50. package/dist/tools/env.js.map +1 -0
  51. package/dist/tools/index.d.ts +38 -0
  52. package/dist/tools/index.d.ts.map +1 -0
  53. package/dist/tools/index.js +48 -0
  54. package/dist/tools/index.js.map +1 -0
  55. package/dist/tools/jobs.d.ts +3 -0
  56. package/dist/tools/jobs.d.ts.map +1 -0
  57. package/dist/tools/jobs.js +160 -0
  58. package/dist/tools/jobs.js.map +1 -0
  59. package/dist/tools/logs.d.ts +3 -0
  60. package/dist/tools/logs.d.ts.map +1 -0
  61. package/dist/tools/logs.js +157 -0
  62. package/dist/tools/logs.js.map +1 -0
  63. package/dist/tools/operations.d.ts +3 -0
  64. package/dist/tools/operations.d.ts.map +1 -0
  65. package/dist/tools/operations.js +262 -0
  66. package/dist/tools/operations.js.map +1 -0
  67. package/dist/tools/project.d.ts +3 -0
  68. package/dist/tools/project.d.ts.map +1 -0
  69. package/dist/tools/project.js +341 -0
  70. package/dist/tools/project.js.map +1 -0
  71. package/dist/tools/s3.d.ts +3 -0
  72. package/dist/tools/s3.d.ts.map +1 -0
  73. package/dist/tools/s3.js +256 -0
  74. package/dist/tools/s3.js.map +1 -0
  75. package/dist/tools/status.d.ts +3 -0
  76. package/dist/tools/status.d.ts.map +1 -0
  77. package/dist/tools/status.js +139 -0
  78. package/dist/tools/status.js.map +1 -0
  79. package/dist/tools/write.d.ts +3 -0
  80. package/dist/tools/write.d.ts.map +1 -0
  81. package/dist/tools/write.js +900 -0
  82. package/dist/tools/write.js.map +1 -0
  83. package/dist/utils/jwt.d.ts +3 -0
  84. package/dist/utils/jwt.d.ts.map +1 -0
  85. package/dist/utils/jwt.js +32 -0
  86. package/dist/utils/jwt.js.map +1 -0
  87. package/dist/utils/paths.d.ts +5 -0
  88. package/dist/utils/paths.d.ts.map +1 -0
  89. package/dist/utils/paths.js +26 -0
  90. package/dist/utils/paths.js.map +1 -0
  91. package/package.json +50 -0
@@ -0,0 +1,597 @@
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.dbTools = void 0;
7
+ const zod_1 = require("zod");
8
+ const node_net_1 = __importDefault(require("node:net"));
9
+ const node_stream_1 = require("node:stream");
10
+ const ws_1 = require("ws");
11
+ const pg_1 = require("pg");
12
+ const node_fs_1 = __importDefault(require("node:fs"));
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const node_child_process_1 = require("node:child_process");
15
+ const config_js_1 = require("../config.js");
16
+ const client_js_1 = require("../client.js");
17
+ const jwt_js_1 = require("../utils/jwt.js");
18
+ const paths_js_1 = require("../utils/paths.js");
19
+ const index_js_1 = require("./index.js");
20
+ function deriveDomainFromApiUrl(apiUrl) {
21
+ const host = new URL(apiUrl).host;
22
+ return host.replace(/^api-/, '').replace(/^api\./, '');
23
+ }
24
+ function stripSqlComments(sql) {
25
+ const noLine = sql
26
+ .split('\n')
27
+ .map((line) => line.replace(/--.*$/g, ''))
28
+ .join('\n');
29
+ return noLine.replace(/\/\*[\s\S]*?\*\//g, '');
30
+ }
31
+ function isLikelyWrite(sql) {
32
+ const s = stripSqlComments(sql).toLowerCase();
33
+ return /\b(insert|update|delete|drop|alter|truncate|create|grant|revoke)\b/.test(s);
34
+ }
35
+ function isLikelyDangerous(sql) {
36
+ const s = stripSqlComments(sql).toLowerCase();
37
+ const reasons = [];
38
+ if (/\bdrop\b/.test(s))
39
+ reasons.push('DROP statement');
40
+ if (/\btruncate\b/.test(s))
41
+ reasons.push('TRUNCATE statement');
42
+ if (/\bdelete\b/.test(s) && !/\bwhere\b/.test(s))
43
+ reasons.push('DELETE without WHERE');
44
+ if (/\balter\b/.test(s) && /\bdrop\b/.test(s))
45
+ reasons.push('ALTER ... DROP');
46
+ return { dangerous: reasons.length > 0, reasons };
47
+ }
48
+ function hasMultipleStatements(sql) {
49
+ const s = stripSqlComments(sql).trim();
50
+ const idx = s.indexOf(';');
51
+ if (idx === -1)
52
+ return false;
53
+ // Allow a single trailing semicolon only.
54
+ return s.slice(0, -1).includes(';');
55
+ }
56
+ const CREATE_DB_PROXY_TOKEN = `
57
+ mutation CreateDatabaseProxyToken($where: AddOnWhereUniqueInput!, $ttlMinutes: Int) {
58
+ createDatabaseProxyToken(where: $where, ttlMinutes: $ttlMinutes) {
59
+ token
60
+ expiresAt
61
+ host
62
+ port
63
+ database
64
+ username
65
+ ttlMinutes
66
+ }
67
+ }
68
+ `;
69
+ async function mintDbProxyInfo(addonId, ttlMinutes) {
70
+ const data = await (0, client_js_1.oidcQuery)(CREATE_DB_PROXY_TOKEN, {
71
+ where: { id: addonId },
72
+ ttlMinutes
73
+ });
74
+ return data.createDatabaseProxyToken;
75
+ }
76
+ async function withTunnelPort({ bearer, apiUrl, fn }) {
77
+ const domain = deriveDomainFromApiUrl(apiUrl);
78
+ const tunnelUrl = `wss://dbt.${domain}`;
79
+ const server = node_net_1.default.createServer((socket) => {
80
+ socket.setNoDelay(true);
81
+ const ws = new ws_1.WebSocket(tunnelUrl, {
82
+ headers: { authorization: `Bearer ${bearer}` }
83
+ });
84
+ let closed = false;
85
+ const closeAll = () => {
86
+ if (closed)
87
+ return;
88
+ closed = true;
89
+ try {
90
+ socket.destroy();
91
+ }
92
+ catch { }
93
+ try {
94
+ ws.terminate();
95
+ }
96
+ catch { }
97
+ };
98
+ const done = () => closeAll();
99
+ const wsStream = (0, ws_1.createWebSocketStream)(ws);
100
+ (0, node_stream_1.pipeline)(socket, wsStream, done);
101
+ (0, node_stream_1.pipeline)(wsStream, socket, done);
102
+ ws.on('close', done);
103
+ ws.on('error', done);
104
+ socket.on('close', done);
105
+ socket.on('error', done);
106
+ });
107
+ await new Promise((resolve, reject) => {
108
+ server.once('error', reject);
109
+ server.listen(0, '127.0.0.1', () => resolve());
110
+ });
111
+ const address = server.address();
112
+ if (!address || typeof address === 'string') {
113
+ try {
114
+ server.close();
115
+ }
116
+ catch { }
117
+ throw new Error('Failed to start DB tunnel server');
118
+ }
119
+ try {
120
+ return await fn(address.port);
121
+ }
122
+ finally {
123
+ try {
124
+ server.close();
125
+ }
126
+ catch { }
127
+ }
128
+ }
129
+ async function withTunnel({ bearer, apiUrl, connectInfo, fn }) {
130
+ return await withTunnelPort({
131
+ bearer,
132
+ apiUrl,
133
+ fn: async (port) => {
134
+ const client = new pg_1.Client({
135
+ host: '127.0.0.1',
136
+ port,
137
+ user: connectInfo.username,
138
+ password: connectInfo.token,
139
+ database: connectInfo.database,
140
+ ssl: { rejectUnauthorized: false }
141
+ });
142
+ try {
143
+ await client.connect();
144
+ return await fn(client);
145
+ }
146
+ finally {
147
+ try {
148
+ await client.end();
149
+ }
150
+ catch { }
151
+ }
152
+ }
153
+ });
154
+ }
155
+ function shapeRowsWithLimits(rows, maxRows, maxBytes) {
156
+ const out = [];
157
+ let bytes = 0;
158
+ let truncated = false;
159
+ for (const row of rows) {
160
+ if (out.length >= maxRows) {
161
+ truncated = true;
162
+ break;
163
+ }
164
+ const json = JSON.stringify(row);
165
+ const nextBytes = bytes + Buffer.byteLength(json, 'utf8');
166
+ if (nextBytes > maxBytes) {
167
+ truncated = true;
168
+ break;
169
+ }
170
+ bytes = nextBytes;
171
+ out.push(row);
172
+ }
173
+ return { rows: out, truncated, bytes_returned: bytes };
174
+ }
175
+ const DbQuerySchema = zod_1.z.object({
176
+ addon_id: zod_1.z.string().describe('Database add-on id'),
177
+ sql: zod_1.z.string().min(1).describe('SQL query (read-only)'),
178
+ params: zod_1.z.array(zod_1.z.any()).optional().describe('Optional parameter values'),
179
+ max_rows: zod_1.z.number().int().min(1).max(1000).optional().default(100),
180
+ max_bytes: zod_1.z
181
+ .number()
182
+ .int()
183
+ .min(1024)
184
+ .max(5_000_000)
185
+ .optional()
186
+ .default(256_000),
187
+ timeout_ms: zod_1.z.number().int().min(1000).max(60_000).optional().default(15_000),
188
+ ttl_minutes: zod_1.z.number().int().min(5).max(120).optional().default(60)
189
+ });
190
+ const DbExecuteSchema = zod_1.z.object({
191
+ addon_id: zod_1.z.string().describe('Database add-on id'),
192
+ sql: zod_1.z.string().min(1).describe('SQL to execute (may write data)'),
193
+ params: zod_1.z.array(zod_1.z.any()).optional().describe('Optional parameter values'),
194
+ preview: zod_1.z.boolean().optional().default(true),
195
+ confirm: zod_1.z.boolean().optional().default(false),
196
+ allow_dangerous: zod_1.z.boolean().optional().default(false),
197
+ timeout_ms: zod_1.z.number().int().min(1000).max(60_000).optional().default(15_000),
198
+ ttl_minutes: zod_1.z.number().int().min(5).max(120).optional().default(60)
199
+ });
200
+ const DbMigrationPlanSchema = zod_1.z.object({
201
+ migration_path: zod_1.z
202
+ .string()
203
+ .describe('Workspace-relative path to SQL migration file')
204
+ });
205
+ const DbMigrateSchema = zod_1.z.object({
206
+ addon_id: zod_1.z.string().describe('Database add-on id'),
207
+ migration_path: zod_1.z
208
+ .string()
209
+ .describe('Workspace-relative path to SQL migration file'),
210
+ preview: zod_1.z.boolean().optional().default(true),
211
+ confirm: zod_1.z.boolean().optional().default(false),
212
+ allow_dangerous: zod_1.z.boolean().optional().default(false),
213
+ timeout_ms: zod_1.z
214
+ .number()
215
+ .int()
216
+ .min(1000)
217
+ .max(300_000)
218
+ .optional()
219
+ .default(60_000),
220
+ ttl_minutes: zod_1.z.number().int().min(5).max(120).optional().default(60)
221
+ });
222
+ const DbSchemaDumpSchema = zod_1.z.object({
223
+ addon_id: zod_1.z.string().describe('Database add-on id'),
224
+ output_path: zod_1.z.string().optional().default('.scaly/schema.sql'),
225
+ overwrite: zod_1.z.boolean().optional().default(false),
226
+ timeout_ms: zod_1.z
227
+ .number()
228
+ .int()
229
+ .min(1000)
230
+ .max(300_000)
231
+ .optional()
232
+ .default(60_000),
233
+ ttl_minutes: zod_1.z.number().int().min(5).max(120).optional().default(60)
234
+ });
235
+ exports.dbTools = [
236
+ {
237
+ name: 'scaly_db_query',
238
+ description: 'Execute a read-only SQL query against a database add-on. Requires SCALY_OIDC_TOKEN; never returns credentials.',
239
+ inputSchema: DbQuerySchema,
240
+ handler: async (input) => {
241
+ try {
242
+ if (isLikelyWrite(input.sql)) {
243
+ return (0, index_js_1.fail)({
244
+ code: 'VALIDATION_ERROR',
245
+ message: 'Refusing to run a write query in scaly_db_query. Use scaly_db_execute with explicit confirmation.',
246
+ retriable: false
247
+ });
248
+ }
249
+ if (hasMultipleStatements(input.sql)) {
250
+ return (0, index_js_1.fail)({
251
+ code: 'VALIDATION_ERROR',
252
+ message: 'Multiple SQL statements are not allowed in scaly_db_query.',
253
+ retriable: false
254
+ });
255
+ }
256
+ const cfg = (0, config_js_1.loadConfig)();
257
+ if (!cfg.oidcToken) {
258
+ return (0, index_js_1.fail)({
259
+ code: 'PERMISSION_DENIED',
260
+ message: 'SCALY_OIDC_TOKEN is required for database tools (set it in the MCP server env).',
261
+ retriable: false
262
+ });
263
+ }
264
+ if ((0, jwt_js_1.isJwtExpired)(cfg.oidcToken)) {
265
+ return (0, index_js_1.fail)({
266
+ code: 'TOKEN_EXPIRED',
267
+ message: 'SCALY_OIDC_TOKEN is expired. Refresh your Scaly session token and restart the MCP server.',
268
+ retriable: false
269
+ });
270
+ }
271
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
272
+ const result = await withTunnel({
273
+ bearer: cfg.oidcToken,
274
+ apiUrl: cfg.apiUrl,
275
+ connectInfo: {
276
+ username: proxy.username,
277
+ token: proxy.token,
278
+ database: proxy.database
279
+ },
280
+ fn: async (client) => {
281
+ const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
282
+ await client.query(`SET statement_timeout TO ${timeout}`);
283
+ return await client.query(input.sql, input.params || []);
284
+ }
285
+ });
286
+ const columns = result.fields.map((f) => f.name);
287
+ const shaped = shapeRowsWithLimits(result.rows, input.max_rows, input.max_bytes);
288
+ return (0, index_js_1.ok)({
289
+ addon_id: input.addon_id,
290
+ columns,
291
+ rows: shaped.rows,
292
+ row_count_returned: shaped.rows.length,
293
+ row_count_reported: result.rowCount ?? null,
294
+ truncated: shaped.truncated,
295
+ max_rows: input.max_rows,
296
+ max_bytes: input.max_bytes,
297
+ bytes_returned: shaped.bytes_returned
298
+ });
299
+ }
300
+ catch (err) {
301
+ return (0, index_js_1.fail)({
302
+ code: 'INTERNAL_ERROR',
303
+ message: err.message,
304
+ retriable: true
305
+ });
306
+ }
307
+ }
308
+ },
309
+ {
310
+ name: 'scaly_db_execute',
311
+ description: 'Execute SQL that may write data. Defaults to preview=true. Requires confirm=true to run, and allow_dangerous=true for destructive statements.',
312
+ inputSchema: DbExecuteSchema,
313
+ handler: async (input) => {
314
+ try {
315
+ const analysis = isLikelyDangerous(input.sql);
316
+ const multi = hasMultipleStatements(input.sql);
317
+ if (input.preview) {
318
+ return (0, index_js_1.ok)({
319
+ preview: true,
320
+ addon_id: input.addon_id,
321
+ multiple_statements: multi,
322
+ dangerous: analysis.dangerous,
323
+ reasons: analysis.reasons
324
+ });
325
+ }
326
+ if (multi) {
327
+ return (0, index_js_1.fail)({
328
+ code: 'VALIDATION_ERROR',
329
+ message: 'Multiple SQL statements are not allowed in scaly_db_execute.',
330
+ retriable: false
331
+ });
332
+ }
333
+ if (!input.confirm) {
334
+ return (0, index_js_1.fail)({
335
+ code: 'VALIDATION_ERROR',
336
+ message: 'confirm must be true to execute SQL.',
337
+ retriable: false
338
+ });
339
+ }
340
+ if (analysis.dangerous && !input.allow_dangerous) {
341
+ return (0, index_js_1.fail)({
342
+ code: 'VALIDATION_ERROR',
343
+ message: 'This statement appears destructive. Re-run with allow_dangerous=true after explicit user confirmation.',
344
+ retriable: false,
345
+ details: { reasons: analysis.reasons }
346
+ });
347
+ }
348
+ const cfg = (0, config_js_1.loadConfig)();
349
+ if (!cfg.oidcToken) {
350
+ return (0, index_js_1.fail)({
351
+ code: 'PERMISSION_DENIED',
352
+ message: 'SCALY_OIDC_TOKEN is required for database tools (set it in the MCP server env).',
353
+ retriable: false
354
+ });
355
+ }
356
+ if ((0, jwt_js_1.isJwtExpired)(cfg.oidcToken)) {
357
+ return (0, index_js_1.fail)({
358
+ code: 'TOKEN_EXPIRED',
359
+ message: 'SCALY_OIDC_TOKEN is expired. Refresh your Scaly session token and restart the MCP server.',
360
+ retriable: false
361
+ });
362
+ }
363
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
364
+ const execResult = await withTunnel({
365
+ bearer: cfg.oidcToken,
366
+ apiUrl: cfg.apiUrl,
367
+ connectInfo: {
368
+ username: proxy.username,
369
+ token: proxy.token,
370
+ database: proxy.database
371
+ },
372
+ fn: async (client) => {
373
+ const timeout = Math.max(1000, Math.min(60_000, input.timeout_ms));
374
+ await client.query(`SET statement_timeout TO ${timeout}`);
375
+ return await client.query(input.sql, input.params || []);
376
+ }
377
+ });
378
+ return (0, index_js_1.ok)({
379
+ preview: false,
380
+ addon_id: input.addon_id,
381
+ row_count: execResult.rowCount ?? null,
382
+ command: execResult.command ?? null
383
+ });
384
+ }
385
+ catch (err) {
386
+ return (0, index_js_1.fail)({
387
+ code: 'INTERNAL_ERROR',
388
+ message: err.message,
389
+ retriable: true
390
+ });
391
+ }
392
+ }
393
+ },
394
+ {
395
+ name: 'scaly_db_migration_plan',
396
+ description: 'Preview a SQL migration file for destructive changes. Does not connect to the database.',
397
+ inputSchema: DbMigrationPlanSchema,
398
+ handler: async (input) => {
399
+ try {
400
+ const { abs, rel } = (0, paths_js_1.validateWorkspaceRelativePath)(input.migration_path);
401
+ if (!node_fs_1.default.existsSync(abs)) {
402
+ return (0, index_js_1.fail)({
403
+ code: 'RESOURCE_NOT_FOUND',
404
+ message: `Migration file not found: ${rel}`,
405
+ retriable: false
406
+ });
407
+ }
408
+ const sql = node_fs_1.default.readFileSync(abs, 'utf8');
409
+ const analysis = isLikelyDangerous(sql);
410
+ return (0, index_js_1.ok)({
411
+ migration_path: rel,
412
+ bytes: Buffer.byteLength(sql, 'utf8'),
413
+ dangerous: analysis.dangerous,
414
+ reasons: analysis.reasons
415
+ });
416
+ }
417
+ catch (err) {
418
+ return (0, index_js_1.fail)({
419
+ code: 'INTERNAL_ERROR',
420
+ message: err.message,
421
+ retriable: false
422
+ });
423
+ }
424
+ }
425
+ },
426
+ {
427
+ name: 'scaly_db_migrate',
428
+ description: 'Apply a SQL migration file to a database add-on. Defaults to preview=true. Requires confirm=true to run; allow_dangerous=true for destructive migrations.',
429
+ inputSchema: DbMigrateSchema,
430
+ handler: async (input) => {
431
+ try {
432
+ const { abs, rel } = (0, paths_js_1.validateWorkspaceRelativePath)(input.migration_path);
433
+ if (!node_fs_1.default.existsSync(abs)) {
434
+ return (0, index_js_1.fail)({
435
+ code: 'RESOURCE_NOT_FOUND',
436
+ message: `Migration file not found: ${rel}`,
437
+ retriable: false
438
+ });
439
+ }
440
+ const sql = node_fs_1.default.readFileSync(abs, 'utf8');
441
+ const analysis = isLikelyDangerous(sql);
442
+ if (input.preview) {
443
+ return (0, index_js_1.ok)({
444
+ preview: true,
445
+ addon_id: input.addon_id,
446
+ migration_path: rel,
447
+ dangerous: analysis.dangerous,
448
+ reasons: analysis.reasons,
449
+ bytes: Buffer.byteLength(sql, 'utf8')
450
+ });
451
+ }
452
+ if (!input.confirm) {
453
+ return (0, index_js_1.fail)({
454
+ code: 'VALIDATION_ERROR',
455
+ message: 'confirm must be true to run migrations.',
456
+ retriable: false
457
+ });
458
+ }
459
+ if (analysis.dangerous && !input.allow_dangerous) {
460
+ return (0, index_js_1.fail)({
461
+ code: 'VALIDATION_ERROR',
462
+ message: 'Migration appears destructive. Re-run with allow_dangerous=true after explicit user confirmation.',
463
+ retriable: false,
464
+ details: { reasons: analysis.reasons }
465
+ });
466
+ }
467
+ const cfg = (0, config_js_1.loadConfig)();
468
+ if (!cfg.oidcToken) {
469
+ return (0, index_js_1.fail)({
470
+ code: 'PERMISSION_DENIED',
471
+ message: 'SCALY_OIDC_TOKEN is required for database tools (set it in the MCP server env).',
472
+ retriable: false
473
+ });
474
+ }
475
+ if ((0, jwt_js_1.isJwtExpired)(cfg.oidcToken)) {
476
+ return (0, index_js_1.fail)({
477
+ code: 'TOKEN_EXPIRED',
478
+ message: 'SCALY_OIDC_TOKEN is expired. Refresh your Scaly session token and restart the MCP server.',
479
+ retriable: false
480
+ });
481
+ }
482
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
483
+ const res = await withTunnel({
484
+ bearer: cfg.oidcToken,
485
+ apiUrl: cfg.apiUrl,
486
+ connectInfo: {
487
+ username: proxy.username,
488
+ token: proxy.token,
489
+ database: proxy.database
490
+ },
491
+ fn: async (client) => {
492
+ const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
493
+ await client.query(`SET statement_timeout TO ${timeout}`);
494
+ return await client.query(sql);
495
+ }
496
+ });
497
+ return (0, index_js_1.ok)({
498
+ preview: false,
499
+ addon_id: input.addon_id,
500
+ migration_path: rel,
501
+ command: res.command ?? null,
502
+ row_count: res.rowCount ?? null,
503
+ bytes: Buffer.byteLength(sql, 'utf8')
504
+ });
505
+ }
506
+ catch (err) {
507
+ return (0, index_js_1.fail)({
508
+ code: 'INTERNAL_ERROR',
509
+ message: err.message,
510
+ retriable: true
511
+ });
512
+ }
513
+ }
514
+ },
515
+ {
516
+ name: 'scaly_db_schema_dump',
517
+ description: 'Dump database schema to a workspace file. Requires `pg_dump` installed locally. Never returns credentials.',
518
+ inputSchema: DbSchemaDumpSchema,
519
+ handler: async (input) => {
520
+ try {
521
+ const { abs, rel } = (0, paths_js_1.validateWorkspaceRelativePath)(input.output_path);
522
+ if (node_fs_1.default.existsSync(abs) && !input.overwrite) {
523
+ return (0, index_js_1.fail)({
524
+ code: 'RESOURCE_EXISTS',
525
+ message: `Refusing to overwrite existing file: ${rel}`,
526
+ retriable: false
527
+ });
528
+ }
529
+ const cfg = (0, config_js_1.loadConfig)();
530
+ if (!cfg.oidcToken) {
531
+ return (0, index_js_1.fail)({
532
+ code: 'PERMISSION_DENIED',
533
+ message: 'SCALY_OIDC_TOKEN is required for database tools (set it in the MCP server env).',
534
+ retriable: false
535
+ });
536
+ }
537
+ if ((0, jwt_js_1.isJwtExpired)(cfg.oidcToken)) {
538
+ return (0, index_js_1.fail)({
539
+ code: 'TOKEN_EXPIRED',
540
+ message: 'SCALY_OIDC_TOKEN is expired. Refresh your Scaly session token and restart the MCP server.',
541
+ retriable: false
542
+ });
543
+ }
544
+ const proxy = await mintDbProxyInfo(input.addon_id, input.ttl_minutes);
545
+ const timeout = Math.max(1000, Math.min(300_000, input.timeout_ms));
546
+ const env = {
547
+ ...process.env,
548
+ PGPASSWORD: proxy.token,
549
+ PGSSLMODE: 'require',
550
+ PGCONNECT_TIMEOUT: String(Math.ceil(timeout / 1000))
551
+ };
552
+ const res = await withTunnelPort({
553
+ bearer: cfg.oidcToken,
554
+ apiUrl: cfg.apiUrl,
555
+ fn: (port) => (0, node_child_process_1.spawnSync)('pg_dump', [
556
+ '--schema-only',
557
+ '--no-owner',
558
+ '--no-privileges',
559
+ '-h',
560
+ '127.0.0.1',
561
+ '-p',
562
+ String(port),
563
+ '-U',
564
+ proxy.username,
565
+ '-d',
566
+ proxy.database
567
+ ], { encoding: 'utf8', env })
568
+ });
569
+ if (res.status !== 0) {
570
+ const msg = res.error?.message ||
571
+ res.stderr ||
572
+ 'pg_dump failed (is it installed and on PATH?)';
573
+ return (0, index_js_1.fail)({
574
+ code: 'NOT_SUPPORTED',
575
+ message: msg,
576
+ retriable: false
577
+ });
578
+ }
579
+ node_fs_1.default.mkdirSync(node_path_1.default.dirname(abs), { recursive: true });
580
+ node_fs_1.default.writeFileSync(abs, res.stdout, 'utf8');
581
+ return (0, index_js_1.ok)({
582
+ addon_id: input.addon_id,
583
+ output_path: rel,
584
+ bytes_written: Buffer.byteLength(res.stdout, 'utf8')
585
+ });
586
+ }
587
+ catch (err) {
588
+ return (0, index_js_1.fail)({
589
+ code: 'INTERNAL_ERROR',
590
+ message: err.message,
591
+ retriable: true
592
+ });
593
+ }
594
+ }
595
+ }
596
+ ];
597
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/tools/db.ts"],"names":[],"mappings":";;;;;;AAAA,6BAAwB;AACxB,wDAA2B;AAC3B,6CAAuC;AACvC,2BAAsD;AACtD,2BAA4B;AAC5B,sDAAyB;AACzB,0DAA6B;AAC7B,2DAA+C;AAE/C,4CAA0C;AAC1C,4CAAyC;AACzC,4CAA+C;AAC/C,gDAAkE;AAClE,yCAA2D;AAE3D,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,GAAG;SACf,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SACzC,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,oEAAoE,CAAC,IAAI,CAC9E,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IAIpC,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/D,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9E,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7B,0CAA0C;IAC1C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,qBAAqB,GAAG;;;;;;;;;;;;CAY7B,CAAC;AAYF,KAAK,UAAU,eAAe,CAC5B,OAAe,EACf,UAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAS,EAC1B,qBAAqB,EACrB;QACE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;QACtB,UAAU;KACX,CACF,CAAC;IACF,OAAO,IAAI,CAAC,wBAAwB,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,cAAc,CAAI,EAC/B,MAAM,EACN,MAAM,EACN,EAAE,EAKH;IACC,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,aAAa,MAAM,EAAE,CAAC;IAExC,MAAM,MAAM,GAAG,kBAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,EAAE,GAAG,IAAI,cAAS,CAAC,SAAS,EAAE;YAClC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;SAC/C,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,EAAE,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAA,0BAAqB,EAAC,EAAE,CAAC,CAAC;QAC3C,IAAA,sBAAQ,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACjC,IAAA,sBAAQ,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEjC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAI,EAC3B,MAAM,EACN,MAAM,EACN,WAAW,EACX,EAAE,EAMH;IACC,OAAO,MAAM,cAAc,CAAC;QAC1B,MAAM;QACN,MAAM;QACN,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,WAAM,CAAC;gBACxB,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,IAAI,EAAE,WAAW,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,WAAW,CAAC,KAAK;gBAC3B,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;aACnC,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAW,EAAE,OAAe,EAAE,QAAgB;IACzE,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;YACzB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,KAAK,GAAG,SAAS,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACxD,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACnE,SAAS,EAAE,OAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;IACnB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAClE,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7E,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,cAAc,EAAE,OAAC;SACd,MAAM,EAAE;SACR,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,cAAc,EAAE,OAAC;SACd,MAAM,EAAE;SACR,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,eAAe,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtD,UAAU,EAAE,OAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;IAClB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACnD,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAC/D,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChD,UAAU,EAAE,OAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,IAAI,CAAC;SACT,GAAG,CAAC,OAAO,CAAC;SACZ,QAAQ,EAAE;SACV,OAAO,CAAC,MAAM,CAAC;IAClB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACrE,CAAC,CAAC;AAEU,QAAA,OAAO,GAAqB;IACvC;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,gHAAgH;QAClH,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,KAAK,EAAE,KAAoC,EAAE,EAAE;YACtD,IAAI,CAAC;gBACH,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EACL,mGAAmG;wBACrG,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EACL,4DAA4D;wBAC9D,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,GAAG,GAAG,IAAA,sBAAU,GAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EACL,iFAAiF;wBACnF,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAA,qBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,OAAO,EACL,2FAA2F;wBAC7F,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEvE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;oBAC9B,MAAM,EAAE,GAAG,CAAC,SAAS;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,WAAW,EAAE;wBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB;oBACD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;wBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;wBACnE,MAAM,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;wBAC1D,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;oBAC3D,CAAC;iBACF,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,CAAC,IAAI,EACX,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,SAAS,CAChB,CAAC;gBACF,OAAO,IAAA,aAAE,EAAC;oBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO;oBACP,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;oBACtC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;oBAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,cAAc,EAAE,MAAM,CAAC,cAAc;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,IAAA,eAAI,EAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,+IAA+I;QACjJ,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE/C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,IAAA,aAAE,EAAC;wBACR,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,mBAAmB,EAAE,KAAK;wBAC1B,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;qBAC1B,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EACL,8DAA8D;wBAChE,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EAAE,sCAAsC;wBAC/C,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;oBACjD,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EACL,wGAAwG;wBAC1G,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;qBACvC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,GAAG,GAAG,IAAA,sBAAU,GAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EACL,iFAAiF;wBACnF,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAA,qBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,OAAO,EACL,2FAA2F;wBAC7F,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;oBAClC,MAAM,EAAE,GAAG,CAAC,SAAS;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,WAAW,EAAE;wBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB;oBACD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;wBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;wBACnE,MAAM,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;wBAC1D,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;oBAC3D,CAAC;iBACF,CAAC,CAAC;gBAEH,OAAO,IAAA,aAAE,EAAC;oBACR,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,SAAS,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI;oBACtC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,IAAI;iBACpC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,IAAA,eAAI,EAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,yFAAyF;QAC3F,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,KAAK,EAAE,KAA4C,EAAE,EAAE;YAC9D,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAA,wCAA6B,EAChD,KAAK,CAAC,cAAc,CACrB,CAAC;gBACF,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,oBAAoB;wBAC1B,OAAO,EAAE,6BAA6B,GAAG,EAAE;wBAC3C,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,IAAA,aAAE,EAAC;oBACR,cAAc,EAAE,GAAG;oBACnB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;oBACrC,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,IAAA,eAAI,EAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,2JAA2J;QAC7J,WAAW,EAAE,eAAe;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAA,wCAA6B,EAChD,KAAK,CAAC,cAAc,CACrB,CAAC;gBACF,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,oBAAoB;wBAC1B,OAAO,EAAE,6BAA6B,GAAG,EAAE;wBAC3C,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACzC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAExC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,IAAA,aAAE,EAAC;wBACR,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,cAAc,EAAE,GAAG;wBACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;wBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;wBACzB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;qBACtC,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EAAE,yCAAyC;wBAClD,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;oBACjD,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,kBAAkB;wBACxB,OAAO,EACL,mGAAmG;wBACrG,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;qBACvC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,GAAG,GAAG,IAAA,sBAAU,GAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EACL,iFAAiF;wBACnF,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAA,qBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,OAAO,EACL,2FAA2F;wBAC7F,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBACvE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC;oBAC3B,MAAM,EAAE,GAAG,CAAC,SAAS;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,WAAW,EAAE;wBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB;oBACD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;wBACnB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;wBACpE,MAAM,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;wBAC1D,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,CAAC;iBACF,CAAC,CAAC;gBAEH,OAAO,IAAA,aAAE,EAAC;oBACR,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,cAAc,EAAE,GAAG;oBACnB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;oBAC5B,SAAS,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;oBAC/B,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,IAAA,eAAI,EAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,4GAA4G;QAC9G,WAAW,EAAE,kBAAkB;QAC/B,OAAO,EAAE,KAAK,EAAE,KAAyC,EAAE,EAAE;YAC3D,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAA,wCAA6B,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEtE,IAAI,iBAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBAC3C,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,wCAAwC,GAAG,EAAE;wBACtD,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,GAAG,GAAG,IAAA,sBAAU,GAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;oBACnB,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EACL,iFAAiF;wBACnF,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAA,qBAAY,EAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,OAAO,EACL,2FAA2F;wBAC7F,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpE,MAAM,GAAG,GAAG;oBACV,GAAG,OAAO,CAAC,GAAG;oBACd,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,SAAS,EAAE,SAAS;oBACpB,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;iBACrD,CAAC;gBAEF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC;oBAC/B,MAAM,EAAE,GAAG,CAAC,SAAS;oBACrB,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CACX,IAAA,8BAAS,EACP,SAAS,EACT;wBACE,eAAe;wBACf,YAAY;wBACZ,iBAAiB;wBACjB,IAAI;wBACJ,WAAW;wBACX,IAAI;wBACJ,MAAM,CAAC,IAAI,CAAC;wBACZ,IAAI;wBACJ,KAAK,CAAC,QAAQ;wBACd,IAAI;wBACJ,KAAK,CAAC,QAAQ;qBACf,EACD,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAC1B;iBACJ,CAAC,CAAC;gBAEH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,MAAM,GAAG,GACP,GAAG,CAAC,KAAK,EAAE,OAAO;wBAClB,GAAG,CAAC,MAAM;wBACV,+CAA+C,CAAC;oBAClD,OAAO,IAAA,eAAI,EAAC;wBACV,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,GAAG;wBACZ,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,iBAAE,CAAC,SAAS,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,iBAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE1C,OAAO,IAAA,aAAE,EAAC;oBACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,WAAW,EAAE,GAAG;oBAChB,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;iBACrD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,IAAA,eAAI,EAAC;oBACV,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from './index.js';
2
+ export declare const deploymentTools: ToolDefinition[];
3
+ //# sourceMappingURL=deployments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/tools/deployments.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAY,MAAM,YAAY,CAAC;AAgG3D,eAAO,MAAM,eAAe,EAAE,cAAc,EAkV3C,CAAC"}