@zincapp/znvault-cli 4.24.2 → 4.24.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.
Files changed (53) hide show
  1. package/dist/commands/dynamic-secrets/index.d.ts.map +1 -1
  2. package/dist/commands/dynamic-secrets/index.js +65 -2
  3. package/dist/commands/dynamic-secrets/index.js.map +1 -1
  4. package/dist/commands/dynamic-secrets/permit.d.ts +5 -0
  5. package/dist/commands/dynamic-secrets/permit.d.ts.map +1 -0
  6. package/dist/commands/dynamic-secrets/permit.js +104 -0
  7. package/dist/commands/dynamic-secrets/permit.js.map +1 -0
  8. package/dist/commands/dynamic-secrets/recovery-fence.d.ts +5 -0
  9. package/dist/commands/dynamic-secrets/recovery-fence.d.ts.map +1 -0
  10. package/dist/commands/dynamic-secrets/recovery-fence.js +84 -0
  11. package/dist/commands/dynamic-secrets/recovery-fence.js.map +1 -0
  12. package/dist/commands/dynamic-secrets/recovery-parse.d.ts +4 -0
  13. package/dist/commands/dynamic-secrets/recovery-parse.d.ts.map +1 -0
  14. package/dist/commands/dynamic-secrets/recovery-parse.js +22 -0
  15. package/dist/commands/dynamic-secrets/recovery-parse.js.map +1 -0
  16. package/dist/commands/dynamic-secrets/recovery-types.d.ts +117 -0
  17. package/dist/commands/dynamic-secrets/recovery-types.d.ts.map +1 -0
  18. package/dist/commands/dynamic-secrets/recovery-types.js +3 -0
  19. package/dist/commands/dynamic-secrets/recovery-types.js.map +1 -0
  20. package/dist/commands/dynamic-secrets/role.d.ts +2 -5
  21. package/dist/commands/dynamic-secrets/role.d.ts.map +1 -1
  22. package/dist/commands/dynamic-secrets/role.js +10 -2
  23. package/dist/commands/dynamic-secrets/role.js.map +1 -1
  24. package/dist/commands/dynamic-secrets/types.d.ts +10 -0
  25. package/dist/commands/dynamic-secrets/types.d.ts.map +1 -1
  26. package/dist/commands/mysql/index.d.ts +2 -0
  27. package/dist/commands/mysql/index.d.ts.map +1 -1
  28. package/dist/commands/mysql/index.js +70 -2
  29. package/dist/commands/mysql/index.js.map +1 -1
  30. package/dist/commands/mysql/mycnf.d.ts +2 -2
  31. package/dist/commands/mysql/mycnf.d.ts.map +1 -1
  32. package/dist/commands/mysql/mycnf.js +1 -1
  33. package/dist/commands/mysql/mycnf.js.map +1 -1
  34. package/dist/commands/mysql/permit-broker.d.ts +35 -0
  35. package/dist/commands/mysql/permit-broker.d.ts.map +1 -0
  36. package/dist/commands/mysql/permit-broker.js +365 -0
  37. package/dist/commands/mysql/permit-broker.js.map +1 -0
  38. package/dist/commands/mysql/recovery-hpke.d.ts +32 -0
  39. package/dist/commands/mysql/recovery-hpke.d.ts.map +1 -0
  40. package/dist/commands/mysql/recovery-hpke.js +311 -0
  41. package/dist/commands/mysql/recovery-hpke.js.map +1 -0
  42. package/dist/commands/mysql/run.d.ts +59 -19
  43. package/dist/commands/mysql/run.d.ts.map +1 -1
  44. package/dist/commands/mysql/run.js +399 -46
  45. package/dist/commands/mysql/run.js.map +1 -1
  46. package/dist/commands/mysql/types.d.ts +7 -0
  47. package/dist/commands/mysql/types.d.ts.map +1 -1
  48. package/dist/lib/client/http.d.ts.map +1 -1
  49. package/dist/lib/client/http.js +18 -0
  50. package/dist/lib/client/http.js.map +1 -1
  51. package/dist/lib/client/types.d.ts +6 -0
  52. package/dist/lib/client/types.d.ts.map +1 -1
  53. package/package.json +5 -1
@@ -11,26 +11,37 @@
11
11
  * the lifetime of the run. The inode is kept alive solely by the inherited
12
12
  * fd; closing it (cleanup) reclaims the bytes. This removes the old
13
13
  * "spawn-then-unlink" race: spawn() returns when the child is forked but
14
- * BEFORE it exec's mysql and reads --defaults-extra-file, so unlinking after
14
+ * BEFORE it exec's mysql and reads --defaults-file, so unlinking after
15
15
  * spawn could win the race and crash mysql with
16
16
  * "Failed to open required defaults file".
17
- * - `--defaults-extra-file=/dev/fd/<fd>` is ALWAYS the first argument (mysql
18
- * rejects it in any other position).
17
+ * - `--defaults-file=/dev/fd/<fd>` is ALWAYS the first argument (clients
18
+ * reject it in any other position). A preflight capability probe adds
19
+ * `--no-login-paths` for Oracle MySQL; MariaDB omits that unsupported flag.
20
+ * This is load-bearing: `--defaults-extra-file` would still read ambient
21
+ * option files afterwards, allowing ~/.my.cnf to override the leased
22
+ * host/user/password. Oracle's `--no-login-paths` also excludes
23
+ * .mylogin.cnf; MariaDB has no login-path facility.
24
+ * - Non-interactive exec always adds `--binary-mode`. Both Oracle MySQL and
25
+ * MariaDB then treat `\\!`/`system` as SQL input instead of executing local
26
+ * shell commands, while retaining DELIMITER support.
19
27
  * - The child INHERITS the fd at the SAME number N, so `/dev/fd/N` resolves to
20
28
  * the same inode inside the child (see buildChildStdio).
21
- * - `MYSQL_HISTFILE=/dev/null` is injected into the child env so executed
22
- * SQL is not persisted to ~/.mysql_history (spec F4).
29
+ * - The mysql child receives a minimal, non-secret environment allowlist.
30
+ * Vault authentication variables and unrelated process secrets are never
31
+ * inherited. `MYSQL_HISTFILE=/dev/null` prevents SQL history persistence
32
+ * (spec F4).
23
33
  * - No --host / --port flags are added; connection coordinates come from the
24
34
  * cnf written by B2 (spec F2 — no client-side override). Caller passthrough
25
- * is scrubbed of any host/port/defaults/password override flag, since mysql
26
- * CLI flags override option-file values (last-wins) and would otherwise
27
- * re-point the leased credential at an arbitrary server (F2 bypass).
35
+ * is restricted to a fixed allowlist of argument-free presentation flags.
36
+ * This prevents current and future mysql options from overriding the
37
+ * target, credentials, input fence or printing the defaults file.
28
38
  * - This module never re-opens the cnf path itself; mysql reads it via the
29
39
  * inherited fd. The parent's own copy of the fd is released by cleanup()
30
40
  * once the child has exited (spec F3 hygiene).
31
41
  */
32
42
  import * as fs from 'node:fs';
33
43
  import * as path from 'node:path';
44
+ import { spawnSync } from 'node:child_process';
34
45
  // ─────────────────────────────────────────────────────────────────────────────
35
46
  // PATH resolution
36
47
  // ─────────────────────────────────────────────────────────────────────────────
@@ -64,8 +75,64 @@ export function assertMysqlOnPath() {
64
75
  'and ensure it is on your PATH.');
65
76
  }
66
77
  // ─────────────────────────────────────────────────────────────────────────────
67
- // Passthrough flag allow/deny (spec F2 — no client-side connection override)
78
+ // Passthrough flag allowlist (spec F2 — no client-side connection override)
68
79
  // ─────────────────────────────────────────────────────────────────────────────
80
+ /**
81
+ * Fixed, argument-free mysql options that cannot select a target/credential,
82
+ * execute alternate input, run local commands, write files, or print defaults.
83
+ * Unknown options are rejected even when they appear harmless: mysql/mariadb's
84
+ * my_getopt modifiers and abbreviations are extensible and denylisting them has
85
+ * repeatedly proven unsafe.
86
+ */
87
+ const ALLOWED_PASSTHROUGH_LONG_FLAGS = new Set([
88
+ '--auto-rehash',
89
+ '--auto-vertical-output',
90
+ '--batch',
91
+ '--binary-as-hex',
92
+ '--column-names',
93
+ '--column-type-info',
94
+ '--comments',
95
+ '--compress',
96
+ '--force',
97
+ '--html',
98
+ '--ignore-spaces',
99
+ '--line-numbers',
100
+ '--no-auto-rehash',
101
+ '--one-database',
102
+ '--quick',
103
+ '--raw',
104
+ '--reconnect',
105
+ '--safe-updates',
106
+ '--show-warnings',
107
+ '--silent',
108
+ '--skip-column-names',
109
+ '--skip-line-numbers',
110
+ '--table',
111
+ '--unbuffered',
112
+ '--vertical',
113
+ '--verbose',
114
+ '--wait',
115
+ '--xml',
116
+ ]);
117
+ /** Argument-free short equivalents of the allowed long flags above. */
118
+ const ALLOWED_PASSTHROUGH_SHORT_FLAGS = new Set([
119
+ 'A', 'B', 'b', 'C', 'c', 'E', 'f', 'H', 'i', 'L', 'N', 'n',
120
+ 'o', 'q', 'r', 's', 't', 'v', 'w', 'X',
121
+ ]);
122
+ function isAllowedPassthroughToken(token) {
123
+ if (token.startsWith('--')) {
124
+ // Every allowlisted long flag is argument-free. Reject = forms even for an
125
+ // allowed head so a boolean value cannot invert or reinterpret it.
126
+ return !token.includes('=') && ALLOWED_PASSTHROUGH_LONG_FLAGS.has(token);
127
+ }
128
+ if (!/^-[^-][A-Za-z]*$/.test(token))
129
+ return false;
130
+ for (let index = 1; index < token.length; index++) {
131
+ if (!ALLOWED_PASSTHROUGH_SHORT_FLAGS.has(token[index]))
132
+ return false;
133
+ }
134
+ return true;
135
+ }
69
136
  /**
70
137
  * Connection/credential/defaults flags that a caller MUST NOT be able to inject
71
138
  * via `-- <passthrough>`.
@@ -90,36 +157,291 @@ const FORBIDDEN_PASSTHROUGH_FLAGS = new Set([
90
157
  '--defaults-extra-file',
91
158
  '--defaults-file',
92
159
  '--login-path',
160
+ '--no-login-paths',
93
161
  '--no-defaults',
162
+ // Alternate target/user selectors and transports.
163
+ '--user',
164
+ '-u',
165
+ '--socket',
166
+ '-S',
167
+ '--protocol',
168
+ '--dns-srv-name',
169
+ '--database',
170
+ '-D',
94
171
  // Password — must come from the leased cnf only, never from argv.
95
172
  '--password',
96
173
  '-p',
97
174
  ]);
98
175
  /**
99
- * Reject any passthrough token that is (or starts with `=`-form of) a forbidden
100
- * connection/credential/defaults override flag.
176
+ * Flags which could disable or reinterpret the non-interactive input fence.
177
+ * `--binary-mode` is server-selected by runMysql for exec mode; callers may
178
+ * neither negate it nor re-enable client commands / supply alternate argv SQL.
179
+ */
180
+ const FORBIDDEN_INPUT_CONTROL_FLAGS = new Set([
181
+ '--binary-mode',
182
+ '--commands',
183
+ '--named-commands',
184
+ '-G',
185
+ '--execute',
186
+ '-e',
187
+ '--init-command',
188
+ '--init-command-add',
189
+ ]);
190
+ /** Meta options that can expose credentials read from the inherited cnf. */
191
+ const FORBIDDEN_SECRET_OUTPUT_FLAGS = new Set([
192
+ '--print-defaults',
193
+ ]);
194
+ const MYSQL_LONG_OPTION_MODIFIERS = [
195
+ 'autoset',
196
+ 'loose',
197
+ 'enable',
198
+ 'disable',
199
+ 'skip',
200
+ 'maximum',
201
+ ];
202
+ const MAX_LONG_OPTION_MODIFIER_DEPTH = 8;
203
+ function canonicalLongFlag(flag) {
204
+ // my_getopt accepts `_` as `-` in long options, so the filter must do the
205
+ // same or `--defaults_file`, `--login_path`, etc. bypass their dashed forms.
206
+ let canonical = flag.replaceAll('_', '-');
207
+ // my_getopt composes these modifiers and accepts abbreviations for every
208
+ // segment. For example, all of these can negate our earlier --binary-mode:
209
+ // --enable-skip-binary-mode
210
+ // --loose-enable-skip-binary-mode
211
+ // --loo-ena-ski-bin
212
+ // --loose-maximum-skip-binary-mode
213
+ // MariaDB additionally composes --autoset-*; Oracle rejects it, but the CLI
214
+ // supports both families and therefore enforces the union fail-closed.
215
+ // Strip the chain iteratively so the final security-sensitive option is
216
+ // always checked. Bound the loop and fail closed instead of allowing an
217
+ // attacker-controlled modifier chain to escape canonicalisation.
218
+ for (let depth = 0; canonical.startsWith('--'); depth++) {
219
+ const body = canonical.slice(2);
220
+ const separator = body.indexOf('-');
221
+ if (separator <= 0)
222
+ break;
223
+ const segment = body.slice(0, separator);
224
+ const modifier = MYSQL_LONG_OPTION_MODIFIERS.find(candidate => candidate.startsWith(segment));
225
+ if (modifier === undefined)
226
+ break;
227
+ if (depth >= MAX_LONG_OPTION_MODIFIER_DEPTH) {
228
+ throw new Error(`Passthrough flag '${flag}' is not allowed — mysql option modifier ` +
229
+ 'chain exceeds the safe canonicalisation limit.');
230
+ }
231
+ canonical = `--${body.slice(separator + 1)}`;
232
+ }
233
+ return canonical;
234
+ }
235
+ /**
236
+ * mysql accepts unambiguous long-option abbreviations (`--hos` for `--host`).
237
+ * Reject both the full forbidden spelling and every prefix mysql could resolve
238
+ * to it. Longer unrelated options such as `--hostgroup` remain unaffected.
239
+ */
240
+ function matchesForbiddenLongFlag(flag, forbidden) {
241
+ if (!flag.startsWith('--') || flag.length <= 2)
242
+ return false;
243
+ for (const candidate of forbidden) {
244
+ if (candidate.startsWith('--') && candidate.startsWith(flag))
245
+ return true;
246
+ }
247
+ return false;
248
+ }
249
+ /**
250
+ * Apply the forbidden-option matcher to every segment suffix of a long option.
251
+ *
252
+ * This is the fail-closed backstop for current or future my_getopt modifiers:
253
+ * even if a client learns an unknown `--foo-` wrapper, `--foo-bin` exposes the
254
+ * `--bin` suffix and `--foo-skip-binary-mode` exposes `--binary-mode`. The
255
+ * known modifier canonicaliser remains useful for precise diagnostics and its
256
+ * explicit depth bound, but security does not depend on our modifier list being
257
+ * eternally complete.
258
+ */
259
+ function hasForbiddenLongFlagSuffix(flag, forbidden) {
260
+ const normalized = flag.replaceAll('_', '-');
261
+ if (!normalized.startsWith('--'))
262
+ return false;
263
+ const segments = normalized.slice(2).split('-').filter(Boolean);
264
+ for (let index = 0; index < segments.length; index++) {
265
+ const suffix = `--${segments.slice(index).join('-')}`;
266
+ if (matchesForbiddenLongFlag(suffix, forbidden))
267
+ return true;
268
+ }
269
+ return false;
270
+ }
271
+ const FORBIDDEN_CONNECTION_SHORT_FLAGS = new Set([
272
+ 'h', // host
273
+ 'P', // port
274
+ 'u', // user
275
+ 'S', // socket
276
+ 'D', // database
277
+ 'p', // password
278
+ ]);
279
+ const FORBIDDEN_INPUT_SHORT_FLAGS = new Set([
280
+ 'e', // execute
281
+ 'G', // named-commands
282
+ ]);
283
+ /**
284
+ * Find a forbidden option anywhere in a mysql short-option cluster.
285
+ *
286
+ * mysql accepts clusters and attached arguments, so looking only at token[1]
287
+ * is unsafe: `-vh127.0.0.1`, `-vP3307`, `-vuother` and `-vppassword`
288
+ * all place a security-sensitive option after an innocuous `-v`. All currently
289
+ * supported innocuous mysql short options are argument-less; every short
290
+ * option that can select a target, credential or alternate SQL input is in one
291
+ * of the sets above. Scanning the complete token therefore handles both
292
+ * clusters and attached arguments without changing benign clusters such as
293
+ * `-vvv`, `-BNrs` or `-fvt`.
294
+ */
295
+ function findForbiddenShortFlag(token) {
296
+ if (!/^-[^-]/.test(token))
297
+ return undefined;
298
+ for (const letter of token.slice(1)) {
299
+ if (FORBIDDEN_CONNECTION_SHORT_FLAGS.has(letter)) {
300
+ return { flag: `-${letter}`, kind: 'connection' };
301
+ }
302
+ if (FORBIDDEN_INPUT_SHORT_FLAGS.has(letter)) {
303
+ return { flag: `-${letter}`, kind: 'input' };
304
+ }
305
+ }
306
+ return undefined;
307
+ }
308
+ /**
309
+ * Accept only the fixed allowlist of argument-free presentation flags.
310
+ * Forbidden-option recognition below exists for actionable diagnostics; the
311
+ * final generic rejection is the security boundary for unknown future flags.
101
312
  *
102
313
  * Recognised forms for a forbidden flag `--host`:
103
314
  * - exact: `--host` (its value is the next token)
104
315
  * - inline: `--host=value`
105
316
  * - short: `-h` (value is next token) / `-P`, `-p`
106
317
  *
107
- * Tokens that merely START with a forbidden name but are a different flag
108
- * (e.g. `--hostgroup`, `--port-something`) are NOT rejected.
109
- *
110
- * @throws Error naming the offending flag and citing F2, on the first match.
318
+ * @throws Error naming the first non-allowlisted token.
111
319
  */
112
320
  export function assertPassthroughAllowed(passthrough) {
113
321
  for (const token of passthrough) {
322
+ if (isAllowedPassthroughToken(token))
323
+ continue;
114
324
  // Normalise an inline `--flag=value` to its flag head for the lookup.
115
325
  const eqIdx = token.indexOf('=');
116
326
  const flag = eqIdx === -1 ? token : token.slice(0, eqIdx);
117
- if (FORBIDDEN_PASSTHROUGH_FLAGS.has(flag)) {
118
- throw new Error(`Passthrough flag '${flag}' is not allowed — host/port come from the ` +
327
+ const canonicalFlag = canonicalLongFlag(flag);
328
+ const forbiddenShort = findForbiddenShortFlag(flag);
329
+ if (matchesForbiddenLongFlag(canonicalFlag, FORBIDDEN_SECRET_OUTPUT_FLAGS)
330
+ || hasForbiddenLongFlagSuffix(flag, FORBIDDEN_SECRET_OUTPUT_FLAGS)) {
331
+ throw new Error(`Passthrough flag '${flag}' is not allowed — credentials from the ` +
332
+ 'leased defaults file must never be printed.');
333
+ }
334
+ if (matchesForbiddenLongFlag(canonicalFlag, FORBIDDEN_PASSTHROUGH_FLAGS)
335
+ || hasForbiddenLongFlagSuffix(flag, FORBIDDEN_PASSTHROUGH_FLAGS)
336
+ || forbiddenShort?.kind === 'connection') {
337
+ throw new Error(`Passthrough flag '${flag}' is not allowed` +
338
+ `${forbiddenShort === undefined ? '' : ` (contains ${forbiddenShort.flag})`} — ` +
339
+ 'host/port come from the ' +
119
340
  `leased connection and cannot be overridden (see F2).`);
120
341
  }
342
+ if (matchesForbiddenLongFlag(canonicalFlag, FORBIDDEN_INPUT_CONTROL_FLAGS)
343
+ || hasForbiddenLongFlagSuffix(flag, FORBIDDEN_INPUT_CONTROL_FLAGS)
344
+ || forbiddenShort?.kind === 'input') {
345
+ throw new Error(`Passthrough flag '${flag}' is not allowed` +
346
+ `${forbiddenShort === undefined ? '' : ` (contains ${forbiddenShort.flag})`} — ` +
347
+ 'non-interactive SQL must ' +
348
+ 'remain fenced by server-selected --binary-mode.');
349
+ }
350
+ throw new Error(`Passthrough token '${token}' is not allowed — only fixed, ` +
351
+ 'argument-free mysql presentation flags may be passed through.');
352
+ }
353
+ }
354
+ /**
355
+ * Validate the optional positional schema before it reaches mysql argv.
356
+ *
357
+ * MySQL identifiers can be broader when quoted inside SQL, but the CLI schema
358
+ * selector is deliberately a conservative ASCII contract. This prevents a
359
+ * value beginning with `-` from being interpreted as a client option and keeps
360
+ * control characters or shell-like path material out of process arguments.
361
+ */
362
+ export function assertSafeMysqlDatabase(database) {
363
+ if (database === undefined)
364
+ return;
365
+ if (!/^[A-Za-z0-9_$][A-Za-z0-9_$.-]{0,63}$/.test(database)) {
366
+ throw new Error('Invalid MySQL database/schema: expected 1-64 ASCII identifier ' +
367
+ 'characters, beginning with a letter, digit, underscore, or dollar sign.');
121
368
  }
122
369
  }
370
+ export function assertMysqlExecCapabilities(capabilities) {
371
+ if (!capabilities.supportsBinaryMode) {
372
+ throw new Error('mysql client cannot disable local commands for piped SQL; install a supported MySQL or MariaDB client');
373
+ }
374
+ }
375
+ const capabilityCache = new Map();
376
+ function buildMysqlChildEnv() {
377
+ const env = { MYSQL_HISTFILE: '/dev/null' };
378
+ const exactAllowed = [
379
+ 'PATH',
380
+ 'TERM',
381
+ 'TZ',
382
+ 'TMPDIR',
383
+ 'LANG',
384
+ 'LC_ALL',
385
+ 'LC_CTYPE',
386
+ 'LC_MESSAGES',
387
+ 'LC_COLLATE',
388
+ 'LC_NUMERIC',
389
+ 'LC_TIME',
390
+ 'LC_MONETARY',
391
+ 'LC_ADDRESS',
392
+ 'LC_IDENTIFICATION',
393
+ 'LC_MEASUREMENT',
394
+ 'LC_NAME',
395
+ 'LC_PAPER',
396
+ 'LC_TELEPHONE',
397
+ ];
398
+ for (const name of exactAllowed) {
399
+ const value = process.env[name];
400
+ if (value !== undefined)
401
+ env[name] = value;
402
+ }
403
+ return env;
404
+ }
405
+ /**
406
+ * Probe option-file isolation before a lease/permit is consumed.
407
+ *
408
+ * Oracle MySQL clients expose --no-login-paths and require it to exclude
409
+ * .mylogin.cnf. MariaDB clients do not implement login paths and reject that
410
+ * flag, so their exclusive --defaults-file is sufficient. Unknown clients
411
+ * without the Oracle flag fail closed.
412
+ */
413
+ export function inspectMysqlClient(binary = assertMysqlOnPath()) {
414
+ const cached = capabilityCache.get(binary);
415
+ if (cached !== undefined)
416
+ return cached;
417
+ const result = spawnSync(binary, ['--no-defaults', '--help'], {
418
+ encoding: 'utf8',
419
+ env: buildMysqlChildEnv(),
420
+ timeout: 5_000,
421
+ maxBuffer: 2 * 1024 * 1024,
422
+ });
423
+ if (result.error !== undefined || result.status !== 0) {
424
+ throw new Error('Unable to inspect mysql client capabilities safely');
425
+ }
426
+ const help = result.stdout + '\n' + result.stderr;
427
+ if (!/(?:^|\s)--defaults-file(?:[=\s]|$)/m.test(help)) {
428
+ throw new Error('mysql client does not support an exclusive --defaults-file');
429
+ }
430
+ const supportsNoLoginPaths = /(?:^|\s)--no-login-paths(?:[=\s]|$)/m.test(help);
431
+ const supportsBinaryMode = /(?:^|\s)--binary-mode(?:[=\s]|$)/m.test(help);
432
+ const family = /mariadb/i.test(help) ? 'mariadb' : 'mysql';
433
+ if (!supportsNoLoginPaths && family !== 'mariadb') {
434
+ throw new Error('Oracle mysql client cannot disable login paths; install a supported MySQL or MariaDB client');
435
+ }
436
+ const capabilities = {
437
+ binary,
438
+ family,
439
+ supportsNoLoginPaths,
440
+ supportsBinaryMode,
441
+ };
442
+ capabilityCache.set(binary, capabilities);
443
+ return capabilities;
444
+ }
123
445
  /**
124
446
  * Build the mysql argv and child environment.
125
447
  *
@@ -128,44 +450,52 @@ export function assertPassthroughAllowed(passthrough) {
128
450
  * without spawning real mysql.
129
451
  *
130
452
  * Security invariants:
131
- * - `--defaults-extra-file=<fdPath>` is args[0].
453
+ * - `--defaults-file=<fdPath>` is args[0]. Oracle MySQL then receives
454
+ * `--no-login-paths`; MariaDB omits the unsupported flag after probing.
455
+ * - Exec invocations force `--binary-mode` before the positional schema.
132
456
  * - No --user / -u / --password / -p / MYSQL_PWD in args or env.
133
457
  * - No --host / --port / -h / -P flags (connection coords from cnf).
134
- * - Forbidden override flags in `passthrough` are rejected (spec F2).
458
+ * - Only fixed, argument-free passthrough flags are accepted (spec F2).
459
+ * - The child environment is a non-secret allowlist; Vault credentials and
460
+ * ambient MySQL selectors are never inherited.
135
461
  * - MYSQL_HISTFILE=/dev/null overrides any pre-existing value.
136
462
  *
137
- * @throws If `passthrough` contains a forbidden connection/credential/defaults
138
- * override flag (see assertPassthroughAllowed).
463
+ * @throws If `passthrough` contains a token outside the fixed safe allowlist.
139
464
  */
140
465
  export function buildMysqlInvocation(opts) {
141
- const { fdPath, database, passthrough = [] } = opts;
466
+ const { fdPath, database, passthrough = [], supportsNoLoginPaths = true, binaryMode = false, } = opts;
467
+ assertSafeMysqlDatabase(database);
142
468
  // F2: reject host/port/defaults/password overrides BEFORE they reach argv.
143
469
  assertPassthroughAllowed(passthrough);
144
- // --defaults-extra-file MUST be first (mysql enforces this).
145
- const args = [`--defaults-extra-file=${fdPath}`];
146
- // database as a positional arg (spec F8 narrows the default schema only).
147
- if (database) {
148
- args.push(database);
149
- }
150
- // Caller-supplied pass-through flags appended verbatim at the end (now safe —
151
- // forbidden connection/credential overrides were rejected above).
470
+ // --defaults-file MUST be first (mysql enforces this). Unlike
471
+ // --defaults-extra-file, it excludes ~/.my.cnf and the other ordinary option
472
+ // files. MySQL still reads .mylogin.cnf unless --no-login-paths is present.
473
+ const args = [`--defaults-file=${fdPath}`];
474
+ if (supportsNoLoginPaths)
475
+ args.push('--no-login-paths');
476
+ if (binaryMode)
477
+ args.push('--binary-mode');
478
+ // Validated presentation flags remain options and therefore precede the
479
+ // explicit option terminator.
152
480
  args.push(...passthrough);
153
- // Child env: inherit everything, then suppress history (spec F4).
154
- // Critically: do NOT add MYSQL_PWD, MYSQL_USER, --password, etc.
155
- const env = {
156
- ...process.env,
157
- MYSQL_HISTFILE: '/dev/null',
158
- };
159
- // Scrub any ambient MYSQL_PWD so the password comes ONLY from the cnf
160
- // (spec: never from env). Also scrub MYSQL_PWD_PATH for completeness.
161
- delete env.MYSQL_PWD;
162
- delete env.MYSQL_PWD_PATH;
481
+ // Add a second defence against option injection: even a future validator
482
+ // regression cannot turn the positional schema into --print-defaults, -e,
483
+ // --host, etc. Both supported clients accept `--` before the database.
484
+ if (database !== undefined) {
485
+ args.push('--', database);
486
+ }
487
+ // Child env: explicit non-secret allowlist. Copying process.env here would
488
+ // leak the consumer's ZNVAULT_API_KEY/ZNVAULT_PASSWORD (and arbitrary CI
489
+ // secrets) into the external mysql process. Locale/terminal variables are
490
+ // sufficient for deterministic client behaviour; the binary path is already
491
+ // resolved before spawn. MYSQL_HISTFILE is fixed, never caller-controlled.
492
+ const env = buildMysqlChildEnv();
163
493
  return { args, env };
164
494
  }
165
495
  /**
166
496
  * Build the `stdio` array for spawning mysql so that the cnf fd is inherited by
167
497
  * the child at the SAME numeric index `fd`. This is what makes
168
- * `--defaults-extra-file=/dev/fd/<fd>` resolve correctly in the child: the
498
+ * `--defaults-file=/dev/fd/<fd>` resolve correctly in the child: the
169
499
  * child must have an fd open at exactly `fd`.
170
500
  *
171
501
  * Layout:
@@ -212,16 +542,17 @@ export function buildChildStdio(fd, stdin0) {
212
542
  *
213
543
  * - Resolves with the child's numeric exit code (caller/CI relies on non-zero).
214
544
  * - The cnf fd (`opts.fd`) is inherited by the child at the SAME number so
215
- * `--defaults-extra-file=/dev/fd/<fd>` resolves in the child (spec F1). The
545
+ * `--defaults-file=/dev/fd/<fd>` resolves in the child (spec F1). The
216
546
  * directory entry was already unlinked in createMyCnf — there is NOTHING to
217
547
  * unlink here, and NO post-spawn unlink race.
218
548
  * - 'connect' mode: stdin/stdout/stderr are inherited (interactive terminal);
219
549
  * the cnf fd is additionally inherited at index `fd`.
220
550
  * - 'exec' mode: stdin (index 0) is wired as:
221
- * 1. files (concatenated, in order) → stdin pipe
222
- * 2. sql (string) → stdin pipe
223
- * 3. parent stdin (if not a TTY) → piped through (inherit)
224
- * 4. parent stdin is a TTY and neither files nor sql provided → Error
551
+ * 1. input (exact Buffer) → stdin pipe
552
+ * 2. files (concatenated, in order) → stdin pipe
553
+ * 3. sql (string) → stdin pipe
554
+ * 4. parent stdin (if not a TTY) piped through (inherit)
555
+ * 5. parent stdin is a TTY and no source was provided → Error
225
556
  * stdout/stderr are inherited; the cnf fd is inherited at index `fd`.
226
557
  *
227
558
  * The parent's own copy of `opts.fd` is intentionally NOT closed here — the
@@ -236,12 +567,24 @@ export function buildChildStdio(fd, stdin0) {
236
567
  * @throws If exec mode is requested but no SQL source is available.
237
568
  */
238
569
  export async function runMysql(opts) {
570
+ // Fail closed before even resolving/probing the local client. This ordering
571
+ // is security-relevant for recovery permits: an invalid passthrough must be
572
+ // rejected deterministically even when mysql is absent, and no client-side
573
+ // capability check or spawn may happen first. buildMysqlInvocation repeats
574
+ // the check at the final argv assembly boundary as defence in depth.
575
+ assertPassthroughAllowed(opts.passthrough ?? []);
576
+ assertSafeMysqlDatabase(opts.database);
239
577
  const { spawn } = await import('node:child_process');
240
578
  const mysqlBin = assertMysqlOnPath();
579
+ const capabilities = inspectMysqlClient(mysqlBin);
580
+ if (opts.mode === 'exec')
581
+ assertMysqlExecCapabilities(capabilities);
241
582
  const { args, env } = buildMysqlInvocation({
242
583
  fdPath: opts.fdPath,
243
584
  database: opts.database,
244
585
  passthrough: opts.passthrough,
586
+ supportsNoLoginPaths: capabilities.supportsNoLoginPaths,
587
+ binaryMode: opts.mode === 'exec',
245
588
  });
246
589
  if (opts.mode === 'connect') {
247
590
  // Interactive: inherit std streams + the cnf fd at its own number.
@@ -256,6 +599,16 @@ export async function runMysql(opts) {
256
599
  // stdin (index 0) is 'pipe' when we feed SQL ourselves (files / sql), and
257
600
  // 'inherit' when we pass the parent's piped stdin through. The cnf fd (>= 3)
258
601
  // is a separate, higher index — no collision with stdin.
602
+ if (opts.input !== undefined) {
603
+ const input = opts.input;
604
+ const stdio = buildChildStdio(opts.fd, 'pipe');
605
+ const child = spawn(mysqlBin, args, { stdio, env });
606
+ return new Promise((resolve, reject) => {
607
+ child.on('error', (err) => { reject(err); });
608
+ child.on('close', (code) => { resolve(code ?? 1); });
609
+ child.stdin.end(input);
610
+ });
611
+ }
259
612
  if (opts.files && opts.files.length > 0) {
260
613
  // Read + concatenate files in order, pipe the result.
261
614
  const fsModule = await import('node:fs');
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/mysql/run.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,wEAAwE;YACxE,4DAA4D;YAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,SAAS,IAAI,CAAC,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,kCAAkC;QAClC,gFAAgF;QAChF,gCAAgC,CACjC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,6EAA6E;AAC7E,gFAAgF;AAEhF;;;;;;;;;;;;;GAaG;AACH,MAAM,2BAA2B,GAAwB,IAAI,GAAG,CAAC;IAC/D,+DAA+D;IAC/D,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,6EAA6E;IAC7E,uBAAuB;IACvB,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,kEAAkE;IAClE,YAAY;IACZ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAA8B;IACrE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,sEAAsE;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE1D,IAAI,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,6CAA6C;gBACtE,sDAAsD,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAuBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA8B;IAIjE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpD,2EAA2E;IAC3E,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAEtC,6DAA6D;IAC7D,MAAM,IAAI,GAAa,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;IAE3D,4EAA4E;IAC5E,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,8EAA8E;IAC9E,kEAAkE;IAClE,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAE1B,kEAAkE;IAClE,iEAAiE;IACjE,MAAM,GAAG,GAAsB;QAC7B,GAAG,OAAO,CAAC,GAAG;QACd,cAAc,EAAE,WAAW;KAC5B,CAAC;IAEF,sEAAsE;IACtE,sEAAsE;IACtE,OAAO,GAAG,CAAC,SAAS,CAAC;IACrB,OAAO,GAAG,CAAC,cAAc,CAAC;IAE1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AAYD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,MAA0B;IACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACpC,0EAA0E;QAC1E,uEAAuE;QACvE,4DAA4D;QAC5D,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAC,EAAE,CAAC,4BAA4B;YACzE,qEAAqE,CACtE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiB,IAAI,KAAK,CAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;aAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;;YAC7C,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAC3B,CAAC;IACD,sEAAsE;IACtE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC;AAwCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAkB;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,oBAAoB,CAAC;QACzC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,mEAAmE;QACnE,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,6EAA6E;IAC7E,yDAAyD;IAEzD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,MAAM,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,uEAAuE;YACvE,qEAAqE;YACpE,KAAK,CAAC,KAA+B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3B,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,sDAAsD;YACrD,KAAK,CAAC,KAA+B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,8CAA8C;YAC9C,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,gCAAgC;IAChC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/mysql/run.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,11 @@ export interface MysqlAliasAddOptions {
26
26
  /** Role name or ID to bind to the alias. */
27
27
  role: string;
28
28
  }
29
+ /** Options for the one-shot Recovery Fence v1 consumer. */
30
+ export interface MysqlExecPermitOptions {
31
+ /** PostgreSQL-authoritative epoch copied from the issued permit. */
32
+ fenceEpoch: string;
33
+ /** SQL files to concatenate and feed over stdin. No inline SQL option exists. */
34
+ file: string[];
35
+ }
29
36
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/mysql/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/mysql/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/lib/client/http.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AAK7E;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAwCD;;GAEG;AACH,qBAAa,UAAU;IAUrB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,cAAc,CAA8B;gBAExC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAc1C;;;;OAIG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;IAIlC,iFAAiF;IACjF,SAAS,CAAC,eAAe,IAAI,OAAO;IAIpC;;;OAGG;IACH,SAAS,KAAK,OAAO,IAAI,MAAM,CAE9B;IAED,oEAAoE;IACpE,SAAS,KAAK,QAAQ,IAAI,OAAO,CAEhC;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;IAKjD;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;YACW,gBAAgB;IAuC9B;;;;;;;;;;OAUG;IACG,YAAY,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgElE,sFAAsF;YACxE,oBAAoB;IAwClC;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBtF;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAuKrD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA+BvD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IASjC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBhD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB/C,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBjD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAe1C"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/lib/client/http.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AAK7E;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAwCD;;GAEG;AACH,qBAAa,UAAU;IAUrB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAU;IACnC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,cAAc,CAA8B;gBAExC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC;IAc1C;;;;OAIG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;IAIlC,iFAAiF;IACjF,SAAS,CAAC,eAAe,IAAI,OAAO;IAIpC;;;OAGG;IACH,SAAS,KAAK,OAAO,IAAI,MAAM,CAE9B;IAED,oEAAoE;IACpE,SAAS,KAAK,QAAQ,IAAI,OAAO,CAEhC;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;IAKjD;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;YACW,gBAAgB;IAuC9B;;;;;;;;;;OAUG;IACG,YAAY,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgElE,sFAAsF;YACxE,oBAAoB;IAwClC;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBtF;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IA0LrD;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA+BvD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IASjC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBhD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiB/C,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBjD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAe1C"}