geni-bioinfo 0.1.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 (58) hide show
  1. package/dist/auth.d.ts +8 -0
  2. package/dist/auth.js +76 -0
  3. package/dist/aws/clients.d.ts +18 -0
  4. package/dist/aws/clients.js +34 -0
  5. package/dist/commands/activate.d.ts +2 -0
  6. package/dist/commands/activate.js +20 -0
  7. package/dist/commands/activity-log.d.ts +2 -0
  8. package/dist/commands/activity-log.js +31 -0
  9. package/dist/commands/api-token.d.ts +2 -0
  10. package/dist/commands/api-token.js +96 -0
  11. package/dist/commands/auth.d.ts +2 -0
  12. package/dist/commands/auth.js +55 -0
  13. package/dist/commands/engine.d.ts +2 -0
  14. package/dist/commands/engine.js +83 -0
  15. package/dist/commands/environment.d.ts +2 -0
  16. package/dist/commands/environment.js +69 -0
  17. package/dist/commands/image.d.ts +2 -0
  18. package/dist/commands/image.js +40 -0
  19. package/dist/commands/instance.d.ts +2 -0
  20. package/dist/commands/instance.js +39 -0
  21. package/dist/commands/log.d.ts +3 -0
  22. package/dist/commands/log.js +43 -0
  23. package/dist/commands/login.d.ts +2 -0
  24. package/dist/commands/login.js +24 -0
  25. package/dist/commands/plugin.d.ts +2 -0
  26. package/dist/commands/plugin.js +80 -0
  27. package/dist/commands/queue.d.ts +2 -0
  28. package/dist/commands/queue.js +74 -0
  29. package/dist/commands/registry.d.ts +2 -0
  30. package/dist/commands/registry.js +72 -0
  31. package/dist/commands/setup/create.d.ts +2 -0
  32. package/dist/commands/setup/create.js +254 -0
  33. package/dist/commands/setup/delete.d.ts +2 -0
  34. package/dist/commands/setup/delete.js +97 -0
  35. package/dist/commands/setup/status.d.ts +2 -0
  36. package/dist/commands/setup/status.js +46 -0
  37. package/dist/commands/setup.d.ts +2 -0
  38. package/dist/commands/setup.js +13 -0
  39. package/dist/commands/storage.d.ts +2 -0
  40. package/dist/commands/storage.js +67 -0
  41. package/dist/commands/submission.d.ts +2 -0
  42. package/dist/commands/submission.js +87 -0
  43. package/dist/commands/task.d.ts +2 -0
  44. package/dist/commands/task.js +21 -0
  45. package/dist/commands/tenant.d.ts +2 -0
  46. package/dist/commands/tenant.js +68 -0
  47. package/dist/commands/user.d.ts +2 -0
  48. package/dist/commands/user.js +82 -0
  49. package/dist/commands/workflow.d.ts +2 -0
  50. package/dist/commands/workflow.js +80 -0
  51. package/dist/errors.d.ts +38 -0
  52. package/dist/errors.js +194 -0
  53. package/dist/format.d.ts +22 -0
  54. package/dist/format.js +155 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.js +91 -0
  57. package/dist/templates/setup.yaml +503 -0
  58. package/package.json +49 -0
@@ -0,0 +1,87 @@
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.submissionCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const auth_1 = require("../auth");
11
+ const errors_1 = require("../errors");
12
+ const format_js_1 = require("../format.js");
13
+ function parseTimeToSeconds(value) {
14
+ const parts = value.split(':').map(Number);
15
+ if (parts.length !== 3 || parts.some(isNaN)) {
16
+ throw (0, errors_1.invalidArgument)('Time must be in DD:HH:MM format (days:hours:minutes).', 'Example: 00:12:30');
17
+ }
18
+ const [days, hours, minutes] = parts;
19
+ return (days * 86400) + (hours * 3600) + (minutes * 60);
20
+ }
21
+ exports.submissionCommand = new commander_1.Command('submission')
22
+ .description('Manage workflow submissions');
23
+ exports.submissionCommand
24
+ .command('list')
25
+ .description('List submissions')
26
+ .option('--status <status>', 'Filter by status (SUBMITTED, SUCCEEDED, FAILED)')
27
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
28
+ .action(async (opts) => {
29
+ const query = opts.status ? `?status=${opts.status}` : '';
30
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submissions${query}`));
31
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionColumns);
32
+ });
33
+ exports.submissionCommand
34
+ .command('get <id>')
35
+ .description('Get a submission by ID')
36
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
37
+ .action(async (id, opts) => {
38
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submissions/${id}`));
39
+ (0, format_js_1.formatOutput)(data, opts.format, format_js_1.submissionColumns);
40
+ });
41
+ exports.submissionCommand
42
+ .command('create')
43
+ .description('Submit a workflow run')
44
+ .requiredOption('--workflow-name <name>', 'Workflow name')
45
+ .option('--workflow-version <version>', 'Workflow version')
46
+ .requiredOption('--params-file <file>', 'Path to params file (.json/.yaml/.yml)')
47
+ .requiredOption('--engine-id <id>', 'Engine ID')
48
+ .requiredOption('--queue-id <id>', 'Queue ID')
49
+ .requiredOption('--output-folder <s3-uri>', 'S3 URI prefix for workflow output files (e.g. s3://my-bucket/outputs/)')
50
+ .option('--alert-time <DD:HH:MM>', 'Alert time override (DD:HH:MM)')
51
+ .option('--cancel-time <DD:HH:MM>', 'Cancel time override (DD:HH:MM)')
52
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
53
+ .action(async (opts) => {
54
+ const form = new FormData();
55
+ form.append('workflowName', opts.workflowName);
56
+ if (opts.workflowVersion)
57
+ form.append('version', opts.workflowVersion);
58
+ form.append('engineId', opts.engineId);
59
+ form.append('queueId', opts.queueId);
60
+ form.append('output', opts.outputFolder);
61
+ if (opts.alertTime)
62
+ form.append('alertTimeSeconds', String(parseTimeToSeconds(opts.alertTime)));
63
+ if (opts.cancelTime)
64
+ form.append('cancelTimeSeconds', String(parseTimeToSeconds(opts.cancelTime)));
65
+ const paramsBuffer = await fs_1.default.promises.readFile(opts.paramsFile);
66
+ form.append('params', new Blob([paramsBuffer]), path_1.default.basename(opts.paramsFile));
67
+ const res = await fetch((0, auth_1.apiUrl)('/submissions'), {
68
+ method: 'POST',
69
+ headers: (0, auth_1.getAuthHeaders)(),
70
+ body: form,
71
+ });
72
+ const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url: (0, auth_1.apiUrl)('/submissions') });
73
+ (0, format_js_1.formatOutput)(data, opts.format, format_js_1.submissionColumns);
74
+ });
75
+ exports.submissionCommand
76
+ .command('cancel <id>')
77
+ .description('Cancel a running submission')
78
+ .action(async (id) => {
79
+ const url = (0, auth_1.apiUrl)(`/submissions/${id}/cancel`);
80
+ const res = await fetch(url, {
81
+ method: 'POST',
82
+ headers: (0, auth_1.getAuthHeaders)(),
83
+ });
84
+ const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url });
85
+ console.log(`${data.message} (${data.submissionId})`);
86
+ });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zdWJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlDQUEyQztBQUMzQyw0Q0FBbUI7QUFDbkIsZ0RBQXVCO0FBQ3ZCLGtDQUE2RTtBQUM3RSxzQ0FBMkM7QUFDM0MsNENBQWlGO0FBRWpGLFNBQVMsa0JBQWtCLENBQUMsS0FBYTtJQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUEsd0JBQWUsRUFDbkIsdURBQXVELEVBQ3ZELG1CQUFtQixDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUNwQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFHWSxRQUFBLGlCQUFpQixHQUFHLElBQUksbUJBQU8sQ0FBQyxZQUFZLENBQUM7S0FDdkQsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUE7QUFFN0MseUJBQWlCO0tBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztLQUMvQixNQUFNLENBQUMsbUJBQW1CLEVBQUUsaURBQWlELENBQUM7S0FDOUUsU0FBUyxDQUFDLElBQUksa0JBQU0sQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFP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QUMxQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQVUsRUFBRSxFQUFFO0lBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUEsYUFBTSxFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQy9DLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUMzQixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxJQUFBLHFCQUFjLEdBQUU7S0FDMUIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQThDLENBQUE7SUFDOUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUE7QUFDdkQsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInXG5pbXBvcnQgZnMgZnJvbSAnZnMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24sIGdldEF1dGhIZWFkZXJzLCByZWFkSnNvblJlc3BvbnNlIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7IGludmFsaWRBcmd1bWVudCB9IGZyb20gJy4uL2Vycm9ycydcbmltcG9ydCB7IGZvcm1hdE91dHB1dCwgc3VibWlzc2lvbkNvbHVtbnMsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG5mdW5jdGlvbiBwYXJzZVRpbWVUb1NlY29uZHModmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICBpZiAocGFydHMubGVuZ3RoICE9PSAzIHx8IHBhcnRzLnNvbWUoaXNOYU4pKSB7XG4gICAgdGhyb3cgaW52YWxpZEFyZ3VtZW50KFxuICAgICAgJ1RpbWUgbXVzdCBiZSBpbiBERDpISDpNTSBmb3JtYXQgKGRheXM6aG91cnM6bWludXRlcykuJyxcbiAgICAgICdFeGFtcGxlOiAwMDoxMjozMCcsXG4gICAgKVxuICB9XG4gIGNvbnN0IFtkYXlzLCBob3VycywgbWludXRlc10gPSBwYXJ0c1xuICByZXR1cm4gKGRheXMgKiA4NjQwMCkgKyAoaG91cnMgKiAzNjAwKSArIChtaW51dGVzICogNjApXG59XG5cblxuZXhwb3J0IGNvbnN0IHN1Ym1pc3Npb25Db21tYW5kID0gbmV3IENvbW1hbmQoJ3N1Ym1pc3Npb24nKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSB3b3JrZmxvdyBzdWJtaXNzaW9ucycpXG5cbnN1Ym1pc3Npb25Db21tYW5kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHN1Ym1pc3Npb25zJylcbiAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN0YXR1cyAoU1VCTUlUVEVELCBTVUNDRUVERUQsIEZBSUxFRCknKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyBzdGF0dXM/OiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IG9wdHMuc3RhdHVzID8gYD9zdGF0dXM9JHtvcHRzLnN0YXR1c31gIDogJydcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb25zJHtxdWVyeX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgc3VibWlzc2lvbkNvbHVtbnMpXG4gIH0pXG5cbnN1Ym1pc3Npb25Db21tYW5kXG4gIC5jb21tYW5kKCdnZXQgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGEgc3VibWlzc2lvbiBieSBJRCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jIChpZDogc3RyaW5nLCBvcHRzOiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb25zLyR7aWR9YCkpXG4gICAgZm9ybWF0T3V0cHV0KGRhdGEsIG9wdHMuZm9ybWF0LCBzdWJtaXNzaW9uQ29sdW1ucylcbiAgfSlcblxuc3VibWlzc2lvbkNvbW1hbmRcbiAgLmNvbW1hbmQoJ2NyZWF0ZScpXG4gIC5kZXNjcmlwdGlvbignU3VibWl0IGEgd29ya2Zsb3cgcnVuJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLXdvcmtmbG93LW5hbWUgPG5hbWU+JywgJ1dvcmtmbG93IG5hbWUnKVxuICAub3B0aW9uKCctLXdvcmtmbG93LXZlcnNpb24gPHZlcnNpb24+JywgJ1dvcmtmbG93IHZlcnNpb24nKVxuICAucmVxdWlyZWRPcHRpb24oJy0tcGFyYW1zLWZpbGUgPGZpbGU+JywgJ1BhdGggdG8gcGFyYW1zIGZpbGUgKC5qc29uLy55YW1sLy55bWwpJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLWVuZ2luZS1pZCA8aWQ+JywgJ0VuZ2luZSBJRCcpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1xdWV1ZS1pZCA8aWQ+JywgJ1F1ZXVlIElEJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLW91dHB1dC1mb2xkZXIgPHMzLXVyaT4nLCAnUzMgVVJJIHByZWZpeCBmb3Igd29ya2Zsb3cgb3V0cHV0IGZpbGVzIChlLmcuIHMzOi8vbXktYnVja2V0L291dHB1dHMvKScpXG4gIC5vcHRpb24oJy0tYWxlcnQtdGltZSA8REQ6SEg6TU0+JywgJ0FsZXJ0IHRpbWUgb3ZlcnJpZGUgKEREOkhIOk1NKScpXG4gIC5vcHRpb24oJy0tY2FuY2VsLXRpbWUgPEREOkhIOk1NPicsICdDYW5jZWwgdGltZSBvdmVycmlkZSAoREQ6SEg6TU0pJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHtcbiAgICB3b3JrZmxvd05hbWU6IHN0cmluZ1xuICAgIHdvcmtmbG93VmVyc2lvbj86IHN0cmluZ1xuICAgIHBhcmFtc0ZpbGU6IHN0cmluZ1xuICAgIGVuZ2luZUlkOiBzdHJpbmdcbiAgICBxdWV1ZUlkOiBzdHJpbmdcbiAgICBvdXRwdXRGb2xkZXI6IHN0cmluZ1xuICAgIGFsZXJ0VGltZT86IHN0cmluZ1xuICAgIGNhbmNlbFRpbWU/OiBzdHJpbmdcbiAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdFxuICB9KSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgZm9ybS5hcHBlbmQoJ3dvcmtmbG93TmFtZScsIG9wdHMud29ya2Zsb3dOYW1lKVxuICAgIGlmIChvcHRzLndvcmtmbG93VmVyc2lvbikgZm9ybS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRzLndvcmtmbG93VmVyc2lvbilcbiAgICBmb3JtLmFwcGVuZCgnZW5naW5lSWQnLCBvcHRzLmVuZ2luZUlkKVxuICAgIGZvcm0uYXBwZW5kKCdxdWV1ZUlkJywgb3B0cy5xdWV1ZUlkKVxuICAgIGZvcm0uYXBwZW5kKCdvdXRwdXQnLCBvcHRzLm91dHB1dEZvbGRlcilcbiAgICBpZiAob3B0cy5hbGVydFRpbWUpIGZvcm0uYXBwZW5kKCdhbGVydFRpbWVTZWNvbmRzJywgU3RyaW5nKHBhcnNlVGltZVRvU2Vjb25kcyhvcHRzLmFsZXJ0VGltZSkpKVxuICAgIGlmIChvcHRzLmNhbmNlbFRpbWUpIGZvcm0uYXBwZW5kKCdjYW5jZWxUaW1lU2Vjb25kcycsIFN0cmluZyhwYXJzZVRpbWVUb1NlY29uZHMob3B0cy5jYW5jZWxUaW1lKSkpXG4gICAgY29uc3QgcGFyYW1zQnVmZmVyID0gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUob3B0cy5wYXJhbXNGaWxlKVxuICAgIGZvcm0uYXBwZW5kKCdwYXJhbXMnLCBuZXcgQmxvYihbcGFyYW1zQnVmZmVyXSksIHBhdGguYmFzZW5hbWUob3B0cy5wYXJhbXNGaWxlKSlcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGFwaVVybCgnL3N1Ym1pc3Npb25zJyksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogZ2V0QXV0aEhlYWRlcnMoKSxcbiAgICAgIGJvZHk6IGZvcm0sXG4gICAgfSlcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEpzb25SZXNwb25zZShyZXMsIHsgbWV0aG9kOiAnUE9TVCcsIHVybDogYXBpVXJsKCcvc3VibWlzc2lvbnMnKSB9KVxuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgc3VibWlzc2lvbkNvbHVtbnMpXG4gIH0pXG5cbnN1Ym1pc3Npb25Db21tYW5kXG4gIC5jb21tYW5kKCdjYW5jZWwgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignQ2FuY2VsIGEgcnVubmluZyBzdWJtaXNzaW9uJylcbiAgLmFjdGlvbihhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHVybCA9IGFwaVVybChgL3N1Ym1pc3Npb25zLyR7aWR9L2NhbmNlbGApXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IGdldEF1dGhIZWFkZXJzKCksXG4gICAgfSlcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEpzb25SZXNwb25zZShyZXMsIHsgbWV0aG9kOiAnUE9TVCcsIHVybCB9KSBhcyB7IHN1Ym1pc3Npb25JZDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGAke2RhdGEubWVzc2FnZX0gKCR7ZGF0YS5zdWJtaXNzaW9uSWR9KWApXG4gIH0pXG4iXX0=
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const taskCommand: Command;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.taskCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const auth_1 = require("../auth");
6
+ const format_js_1 = require("../format.js");
7
+ exports.taskCommand = new commander_1.Command('task')
8
+ .description('Manage tasks');
9
+ exports.taskCommand
10
+ .command('list')
11
+ .description('List tasks')
12
+ .option('--submission-id <id>', 'Filter by submission ID')
13
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
14
+ .action(async (opts) => {
15
+ const url = opts.submissionId
16
+ ? (0, auth_1.apiUrl)(`/tasks?submissionId=${opts.submissionId}`)
17
+ : (0, auth_1.apiUrl)('/tasks');
18
+ const data = await (0, auth_1.fetchJson)(url);
19
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskColumns);
20
+ });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy90YXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUEyQztBQUMzQyxrQ0FBMkM7QUFDM0MsNENBQTJFO0FBRTlELFFBQUEsV0FBVyxHQUFHLElBQUksbUJBQU8sQ0FBQyxNQUFNLENBQUM7S0FDM0MsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRTlCLG1CQUFXO0tBQ1IsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyxZQUFZLENBQUM7S0FDekIsTUFBTSxDQUFDLHNCQUFzQixFQUFFLHlCQUF5QixDQUFDO0tBQ3pELFNBQVMsQ0FBQyxJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM5RyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQXFELEVBQUUsRUFBRTtJQUN0RSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWTtRQUMzQixDQUFDLENBQUMsSUFBQSxhQUFNLEVBQUMsdUJBQXVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwRCxDQUFDLENBQUMsSUFBQSxhQUFNLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsR0FBRyxDQUF5QixDQUFBO0lBQ3pELElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsdUJBQVcsQ0FBQyxDQUFBO0FBQ3BGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHsgZm9ybWF0T3V0cHV0LCB0YXNrQ29sdW1ucywgdHlwZSBPdXRwdXRGb3JtYXQgfSBmcm9tICcuLi9mb3JtYXQuanMnXG5cbmV4cG9ydCBjb25zdCB0YXNrQ29tbWFuZCA9IG5ldyBDb21tYW5kKCd0YXNrJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgdGFza3MnKVxuXG50YXNrQ29tbWFuZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB0YXNrcycpXG4gIC5vcHRpb24oJy0tc3VibWlzc2lvbi1pZCA8aWQ+JywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIElEJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgc3VibWlzc2lvbklkPzogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgY29uc3QgdXJsID0gb3B0cy5zdWJtaXNzaW9uSWRcbiAgICAgID8gYXBpVXJsKGAvdGFza3M/c3VibWlzc2lvbklkPSR7b3B0cy5zdWJtaXNzaW9uSWR9YClcbiAgICAgIDogYXBpVXJsKCcvdGFza3MnKVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24odXJsKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCB0YXNrQ29sdW1ucylcbiAgfSlcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const tenantCommand: Command;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tenantCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const auth_1 = require("../auth");
6
+ const format_1 = require("../format");
7
+ exports.tenantCommand = new commander_1.Command('tenant')
8
+ .description('Manage tenants');
9
+ exports.tenantCommand
10
+ .command('create')
11
+ .description('Create a new tenant')
12
+ .requiredOption('--name <name>', 'Tenant name (lowercase, hyphens allowed)')
13
+ .requiredOption('--contact-email <email>', 'Contact email address for the tenant')
14
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
15
+ .action(async (opts) => {
16
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/support/tenants'), {
17
+ method: 'POST',
18
+ headers: { 'Content-Type': 'application/json' },
19
+ body: JSON.stringify({ name: opts.name, contactEmail: opts.contactEmail }),
20
+ });
21
+ (0, format_1.formatOutput)(data, opts.format, format_1.tenantColumns);
22
+ });
23
+ exports.tenantCommand
24
+ .command('list')
25
+ .description('List all tenants')
26
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
27
+ .action(async (opts) => {
28
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/support/tenants'));
29
+ (0, format_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_1.tenantColumns);
30
+ });
31
+ exports.tenantCommand
32
+ .command('get <id>')
33
+ .description('Get a tenant by ID')
34
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
35
+ .action(async (id, opts) => {
36
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/support/tenants/${id}`));
37
+ (0, format_1.formatOutput)(data, opts.format, format_1.tenantColumns);
38
+ });
39
+ exports.tenantCommand
40
+ .command('enable <id>')
41
+ .description('Enable a tenant')
42
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
43
+ .action(async (id, opts) => {
44
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/support/tenants/${id}/enable`), {
45
+ method: 'PUT',
46
+ });
47
+ (0, format_1.formatOutput)(data, opts.format, format_1.tenantColumns);
48
+ });
49
+ exports.tenantCommand
50
+ .command('disable <id>')
51
+ .description('Disable a tenant')
52
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
53
+ .action(async (id, opts) => {
54
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/support/tenants/${id}/disable`), {
55
+ method: 'PUT',
56
+ });
57
+ (0, format_1.formatOutput)(data, opts.format, format_1.tenantColumns);
58
+ });
59
+ exports.tenantCommand
60
+ .command('delete <id>')
61
+ .description('Delete a tenant')
62
+ .action(async (id) => {
63
+ await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/support/tenants/${id}`), {
64
+ method: 'DELETE',
65
+ });
66
+ console.log('Tenant deleted successfully.');
67
+ });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3RlbmFudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNEM7QUFDNUMsa0NBQTRDO0FBQzVDLHNDQUEyRTtBQUU5RCxRQUFBLGFBQWEsR0FBRyxJQUFJLG1CQUFPLENBQUMsUUFBUSxDQUFDO0tBQy9DLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWpDLHFCQUFhO0tBQ1YsT0FBTyxDQUFDLFFBQVEsQ0FBQztLQUNqQixXQUFXLENBQUMscUJBQXFCLENBQUM7S0FDbEMsY0FBYyxDQUFDLGVBQWUsRUFBRSwwQ0FBMEMsQ0FBQztLQUMzRSxjQUFjLENBQUMseUJBQXlCLEVBQUUsc0NBQXNDLENBQUM7S0FDakYsU0FBUyxDQUFDLElBQUksa0JBQU0sQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzlHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBa0UsRUFBRSxFQUFFO0lBQ25GLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBUyxFQUFDLElBQUEsYUFBTSxFQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDdkQsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQzNFLENBQUMsQ0FBQztJQUNILElBQUEscUJBQVksRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxzQkFBYSxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFD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LE1BQU0sRUFBRSxzQkFBYSxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDLENBQUM7QUFFTCxxQkFBYTtLQUNWLE9BQU8sQ0FBQyxhQUFhLENBQUM7S0FDdEIsV0FBVyxDQUFDLGlCQUFpQixDQUFDO0tBQzlCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBVSxFQUFFLEVBQUU7SUFDM0IsTUFBTSxJQUFBLGdCQUFTLEVBQUMsSUFBQSxhQUFNLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDaEQsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQgeyBmb3JtYXRPdXRwdXQsIHRlbmFudENvbHVtbnMsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0JztcblxuZXhwb3J0IGNvbnN0IHRlbmFudENvbW1hbmQgPSBuZXcgQ29tbWFuZCgndGVuYW50JylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2UgdGVuYW50cycpO1xuXG50ZW5hbnRDb21tYW5kXG4gIC5jb21tYW5kKCdjcmVhdGUnKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyB0ZW5hbnQnKVxuICAucmVxdWlyZWRPcHRpb24oJy0tbmFtZSA8bmFtZT4nLCAnVGVuYW50IG5hbWUgKGxvd2VyY2FzZSwgaHlwaGVucyBhbGxvd2VkKScpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1jb250YWN0LWVtYWlsIDxlbWFpbD4nLCAnQ29udGFjdCBlbWFpbCBhZGRyZXNzIGZvciB0aGUgdGVuYW50JylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgbmFtZTogc3RyaW5nOyBjb250YWN0RW1haWw6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKCcvc3VwcG9ydC90ZW5hbnRzJyksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IG9wdHMubmFtZSwgY29udGFjdEVtYWlsOiBvcHRzLmNvbnRhY3RFbWFpbCB9KSxcbiAgICB9KTtcbiAgICBmb3JtYXRPdXRwdXQoZGF0YSwgb3B0cy5mb3JtYXQsIHRlbmFudENvbHVtbnMpO1xuICB9KTtcblxudGVuYW50Q29tbWFuZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCBhbGwgdGVuYW50cycpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jIChvcHRzOiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL3N1cHBvcnQvdGVuYW50cycpKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfTtcbiAgICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgdGVuYW50Q29sdW1ucyk7XG4gIH0pO1xuXG50ZW5hbnRDb21tYW5kXG4gIC5jb21tYW5kKCdnZXQgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGEgdGVuYW50IGJ5IElEJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKGlkOiBzdHJpbmcsIG9wdHM6IHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvc3VwcG9ydC90ZW5hbnRzLyR7aWR9YCkpO1xuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgdGVuYW50Q29sdW1ucyk7XG4gIH0pO1xuXG50ZW5hbnRDb21tYW5kXG4gIC5jb21tYW5kKCdlbmFibGUgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignRW5hYmxlIGEgdGVuYW50JylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKGlkOiBzdHJpbmcsIG9wdHM6IHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvc3VwcG9ydC90ZW5hbnRzLyR7aWR9L2VuYWJsZWApLCB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgIH0pO1xuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgdGVuYW50Q29sdW1ucyk7XG4gIH0pO1xuXG50ZW5hbnRDb21tYW5kXG4gIC5jb21tYW5kKCdkaXNhYmxlIDxpZD4nKVxuICAuZGVzY3JpcHRpb24oJ0Rpc2FibGUgYSB0ZW5hbnQnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAoaWQ6IHN0cmluZywgb3B0czogeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9zdXBwb3J0L3RlbmFudHMvJHtpZH0vZGlzYWJsZWApLCB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgIH0pO1xuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgdGVuYW50Q29sdW1ucyk7XG4gIH0pO1xuXG50ZW5hbnRDb21tYW5kXG4gIC5jb21tYW5kKCdkZWxldGUgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignRGVsZXRlIGEgdGVuYW50JylcbiAgLmFjdGlvbihhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9zdXBwb3J0L3RlbmFudHMvJHtpZH1gKSwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnVGVuYW50IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICB9KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const userCommand: Command;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userCommand = void 0;
4
+ const commander_1 = require("commander");
5
+ const auth_1 = require("../auth");
6
+ const format_js_1 = require("../format.js");
7
+ const ROLE_CHOICES = ['support', 'admin', 'analyst', 'viewer'];
8
+ const userColumns = [
9
+ { header: 'ID', value: (r) => r.id },
10
+ { header: 'Name', value: (r) => r.name },
11
+ { header: 'Email', value: (r) => r.email },
12
+ { header: 'Role', value: (r) => r.role ?? '' },
13
+ { header: 'Status', value: (r) => r.status },
14
+ { header: 'Tenant ID', value: (r) => r.tenantId },
15
+ { header: 'Created At', value: (r) => r.createdAt },
16
+ ];
17
+ exports.userCommand = new commander_1.Command('user')
18
+ .description('Manage users');
19
+ exports.userCommand
20
+ .command('create')
21
+ .description('Create a new user.')
22
+ .requiredOption('--name <name>', 'User name')
23
+ .requiredOption('--email <email>', 'User email')
24
+ .addOption(new commander_1.Option('--role <role>', 'RBAC role for the new user')
25
+ .choices([...ROLE_CHOICES])
26
+ .default('analyst'))
27
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
28
+ .action(async (opts) => {
29
+ const body = { name: opts.name, email: opts.email, role: opts.role };
30
+ if (process.env.GENI_TENANT_ID)
31
+ body.tenantId = process.env.GENI_TENANT_ID;
32
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/admin/users'), {
33
+ method: 'POST',
34
+ headers: { 'Content-Type': 'application/json' },
35
+ body: JSON.stringify(body),
36
+ });
37
+ (0, format_js_1.formatOutput)(data, opts.format, userColumns);
38
+ });
39
+ exports.userCommand
40
+ .command('list')
41
+ .description('List users')
42
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
43
+ .action(async (opts) => {
44
+ const qs = process.env.GENI_TENANT_ID ? `?tenantId=${encodeURIComponent(process.env.GENI_TENANT_ID)}` : '';
45
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/admin/users${qs}`));
46
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, userColumns);
47
+ });
48
+ exports.userCommand
49
+ .command('get <id>')
50
+ .description('Get a user by ID')
51
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
52
+ .action(async (id, opts) => {
53
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/admin/users/${id}`));
54
+ (0, format_js_1.formatOutput)(data, opts.format, userColumns);
55
+ });
56
+ exports.userCommand
57
+ .command('assign-role <userId>')
58
+ .description('Assign a new RBAC role to a user')
59
+ .requiredOption('--role <role>', `One of: ${ROLE_CHOICES.join(', ')}`, (v) => {
60
+ if (!ROLE_CHOICES.includes(v)) {
61
+ throw new Error(`role must be one of: ${ROLE_CHOICES.join(', ')}`);
62
+ }
63
+ return v;
64
+ })
65
+ .action(async (userId, opts) => {
66
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/admin/users/${encodeURIComponent(userId)}/role`), {
67
+ method: 'PUT',
68
+ headers: { 'Content-Type': 'application/json' },
69
+ body: JSON.stringify({ role: opts.role }),
70
+ });
71
+ console.log(JSON.stringify(data, null, 2));
72
+ });
73
+ exports.userCommand
74
+ .command('delete <id>')
75
+ .description('Delete a user by ID')
76
+ .action(async (id) => {
77
+ await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/admin/users/${encodeURIComponent(id)}`), {
78
+ method: 'DELETE',
79
+ });
80
+ console.log('User deleted successfully.');
81
+ });
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUE0QztBQUM1QyxrQ0FBNEM7QUFDNUMsNENBQStEO0FBRS9ELE1BQU0sWUFBWSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFFeEUsTUFBTSxXQUFXLEdBQUc7SUFDbEIsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDN0QsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFDakUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7SUFDbkUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQTBCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFO0lBQ3ZFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3JFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO0NBQzdFLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBRyxJQUFJLG1C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QUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyxDQUFDO0FBRUwsbUJBQVc7S0FDUixPQUFPLENBQUMsYUFBYSxDQUFDO0tBQ3RCLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztLQUNsQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQVUsRUFBRSxFQUFFO0lBQzNCLE1BQU0sSUFBQSxnQkFBUyxFQUFDLElBQUEsYUFBTSxFQUFDLGdCQUFnQixrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDaEUsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCc7XG5pbXBvcnQgeyBmb3JtYXRPdXRwdXQsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0LmpzJztcblxuY29uc3QgUk9MRV9DSE9JQ0VTID0gWydzdXBwb3J0JywgJ2FkbWluJywgJ2FuYWx5c3QnLCAndmlld2VyJ10gYXMgY29uc3Q7XG5cbmNvbnN0IHVzZXJDb2x1bW5zID0gW1xuICB7IGhlYWRlcjogJ0lEJywgdmFsdWU6IChyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gci5pZCB9LFxuICB7IGhlYWRlcjogJ05hbWUnLCB2YWx1ZTogKHI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiByLm5hbWUgfSxcbiAgeyBoZWFkZXI6ICdFbWFpbCcsIHZhbHVlOiAocjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHIuZW1haWwgfSxcbiAgeyBoZWFkZXI6ICdSb2xlJywgdmFsdWU6IChyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gci5yb2xlID8/ICcnIH0sXG4gIHsgaGVhZGVyOiAnU3RhdHVzJywgdmFsdWU6IChyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gci5zdGF0dXMgfSxcbiAgeyBoZWFkZXI6ICdUZW5hbnQgSUQnLCB2YWx1ZTogKHI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiByLnRlbmFudElkIH0sXG4gIHsgaGVhZGVyOiAnQ3JlYXRlZCBBdCcsIHZhbHVlOiAocjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHIuY3JlYXRlZEF0IH0sXG5dO1xuXG5leHBvcnQgY29uc3QgdXNlckNvbW1hbmQgPSBuZXcgQ29tbWFuZCgndXNlcicpXG4gIC5kZXNjcmlwdGlvbignTWFuYWdlIHVzZXJzJyk7XG5cbnVzZXJDb21tYW5kXG4gIC5jb21tYW5kKCdjcmVhdGUnKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyB1c2VyLicpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1uYW1lIDxuYW1lPicsICdVc2VyIG5hbWUnKVxuICAucmVxdWlyZWRPcHRpb24oJy0tZW1haWwgPGVtYWlsPicsICdVc2VyIGVtYWlsJylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLXJvbGUgPHJvbGU+JywgJ1JCQUMgcm9sZSBmb3IgdGhlIG5ldyB1c2VyJylcbiAgICAgIC5jaG9pY2VzKFsuLi5ST0xFX0NIT0lDRVNdKVxuICAgICAgLmRlZmF1bHQoJ2FuYWx5c3QnKSxcbiAgKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIHJvbGU/OiAodHlwZW9mIFJPTEVfQ0hPSUNFUylbbnVtYmVyXTtcbiAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBuYW1lOiBvcHRzLm5hbWUsIGVtYWlsOiBvcHRzLmVtYWlsLCByb2xlOiBvcHRzLnJvbGUgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuR0VOSV9URU5BTlRfSUQpIGJvZHkudGVuYW50SWQgPSBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRDtcblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKCcvYWRtaW4vdXNlcnMnKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pO1xuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgdXNlckNvbHVtbnMpO1xuICB9KTtcblxudXNlckNvbW1hbmRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdXNlcnMnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgY29uc3QgcXMgPSBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCA/IGA/dGVuYW50SWQ9JHtlbmNvZGVVUklDb21wb25lbnQocHJvY2Vzcy5lbnYuR0VOSV9URU5BTlRfSUQpfWAgOiAnJztcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2FkbWluL3VzZXJzJHtxc31gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH07XG4gICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIHVzZXJDb2x1bW5zKTtcbiAgfSk7XG5cbnVzZXJDb21tYW5kXG4gIC5jb21tYW5kKCdnZXQgPGlkPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGEgdXNlciBieSBJRCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jIChpZDogc3RyaW5nLCBvcHRzOiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2FkbWluL3VzZXJzLyR7aWR9YCkpO1xuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgdXNlckNvbHVtbnMpO1xuICB9KTtcblxudXNlckNvbW1hbmRcbiAgLmNvbW1hbmQoJ2Fzc2lnbi1yb2xlIDx1c2VySWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdBc3NpZ24gYSBuZXcgUkJBQyByb2xlIHRvIGEgdXNlcicpXG4gIC5yZXF1aXJlZE9wdGlvbihcbiAgICAnLS1yb2xlIDxyb2xlPicsXG4gICAgYE9uZSBvZjogJHtST0xFX0NIT0lDRVMuam9pbignLCAnKX1gLFxuICAgICh2OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghUk9MRV9DSE9JQ0VTLmluY2x1ZGVzKHYgYXMgKHR5cGVvZiBST0xFX0NIT0lDRVMpW251bWJlcl0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcm9sZSBtdXN0IGJlIG9uZSBvZjogJHtST0xFX0NIT0lDRVMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2O1xuICAgIH0sXG4gIClcbiAgLmFjdGlvbihhc3luYyAodXNlcklkOiBzdHJpbmcsIG9wdHM6IHsgcm9sZTogc3RyaW5nIH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2FkbWluL3VzZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCl9L3JvbGVgKSwge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyByb2xlOiBvcHRzLnJvbGUgfSksXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikpO1xuICB9KTtcblxudXNlckNvbW1hbmRcbiAgLmNvbW1hbmQoJ2RlbGV0ZSA8aWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSB1c2VyIGJ5IElEJylcbiAgLmFjdGlvbihhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9hZG1pbi91c2Vycy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YCksIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJ1VzZXIgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyk7XG4gIH0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const workflowCommand: Command;
@@ -0,0 +1,80 @@
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.workflowCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const auth_1 = require("../auth");
11
+ const errors_1 = require("../errors");
12
+ const format_js_1 = require("../format.js");
13
+ function parseTimeToSeconds(value) {
14
+ const parts = value.split(':').map(Number);
15
+ if (parts.length !== 3 || parts.some(isNaN)) {
16
+ throw (0, errors_1.invalidArgument)('Time must be in DD:HH:MM format (days:hours:minutes).', 'Example: 00:12:30');
17
+ }
18
+ const [days, hours, minutes] = parts;
19
+ return (days * 86400) + (hours * 3600) + (minutes * 60);
20
+ }
21
+ function guessFileType(filePath) {
22
+ const lower = filePath.toLowerCase();
23
+ if (lower.endsWith('.nf'))
24
+ return 'TEXT';
25
+ if (lower.endsWith('.zip'))
26
+ return 'ZIP';
27
+ throw (0, errors_1.invalidArgument)(`Cannot determine file type from extension. File must be .nf (TEXT) or .zip (ZIP).`, `Provided: ${filePath}`);
28
+ }
29
+ exports.workflowCommand = new commander_1.Command('workflow')
30
+ .description('Manage workflows');
31
+ exports.workflowCommand
32
+ .command('list')
33
+ .description('List all registered workflows')
34
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
35
+ .action(async (opts) => {
36
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/workflows'));
37
+ (0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.workflowColumns);
38
+ });
39
+ exports.workflowCommand
40
+ .command('get <name>')
41
+ .description('Get a workflow by name')
42
+ .option('--version <version>', 'Workflow version (defaults to latest)')
43
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
44
+ .action(async (name, opts) => {
45
+ const query = opts.version ? `?version=${opts.version}` : '';
46
+ const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/workflows/${name}${query}`));
47
+ (0, format_js_1.formatOutput)(data, opts.format, format_js_1.workflowColumns);
48
+ });
49
+ exports.workflowCommand
50
+ .command('create')
51
+ .description('Register a new workflow (.nf file or .zip archive)')
52
+ .requiredOption('--workflow-name <name>', 'Workflow name')
53
+ .requiredOption('--workflow-version <alias>', 'Workflow version (alias)')
54
+ .requiredOption('--file <file>', 'Workflow file path (.nf or .zip)')
55
+ .option('--file-type <type>', 'File type (TEXT for .nf, ZIP for .zip archives; auto-guessed from extension if not provided)')
56
+ .option('--alert-time <DD:HH:MM>', 'Default alert time for submissions (DD:HH:MM)')
57
+ .option('--cancel-time <DD:HH:MM>', 'Default cancel time for submissions (DD:HH:MM)')
58
+ .addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
59
+ .action(async (opts) => {
60
+ const form = new FormData();
61
+ form.append('name', opts.workflowName);
62
+ form.append('version', opts.workflowVersion);
63
+ form.append('engine', 'nextflow');
64
+ const fileType = opts.fileType?.toUpperCase() || guessFileType(opts.file);
65
+ form.append('fileType', fileType);
66
+ if (opts.alertTime)
67
+ form.append('alertTimeSeconds', String(parseTimeToSeconds(opts.alertTime)));
68
+ if (opts.cancelTime)
69
+ form.append('cancelTimeSeconds', String(parseTimeToSeconds(opts.cancelTime)));
70
+ const fileBuffer = await fs_1.default.promises.readFile(opts.file);
71
+ form.append('file', new Blob([fileBuffer]), path_1.default.basename(opts.file));
72
+ const res = await fetch((0, auth_1.apiUrl)('/workflows'), {
73
+ method: 'POST',
74
+ headers: (0, auth_1.getAuthHeaders)(),
75
+ body: form,
76
+ });
77
+ const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url: (0, auth_1.apiUrl)('/workflows') });
78
+ (0, format_js_1.formatOutput)(data, opts.format, format_js_1.workflowColumns);
79
+ });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUNBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFDdkIsa0NBQTZFO0FBQzdFLHNDQUEyQztBQUMzQyw0Q0FBK0U7QUFFL0UsU0FBUyxrQkFBa0IsQ0FBQyxLQUFhO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBQSx3QkFBZSxFQUNuQix1REFBdUQsRUFDdkQsbUJBQW1CLENBQ3BCLENBQUE7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUE7QUFDekQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFFBQWdCO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUE7SUFDeEMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQ3hDLE1BQU0sSUFBQSx3QkFBZSxFQUNuQixtRkFBbUYsRUFDbkYsYUFBYSxRQUFRLEVBQUUsQ0FDeEIsQ0FBQTtBQUNILENBQUM7QUFFWSxRQUFBLGVBQWUsR0FBRyxJQUFJLG1CQUFPLENBQUMsVUFBVSxDQUFDO0tBQ25ELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBRWxDLHVCQUFlO0tBQ1osT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztLQUM1QyxTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDOUcsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUE4QixFQUFFLEVBQUU7SUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsSUFBQSxhQUFNLEVBQUMsWUFBWSxDQUFDLENBQXlCLENBQUE7SUFDMUUsSUFBQSx3QkFBWSxFQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSwyQkFBZSxDQUFDLENBQUE7QUFDeEYsQ0FBQyxDQUFDLENBQUE7QUFFSix1QkFBZTtLQUNaLE9BQU8sQ0FBQyxZQUFZLENBQUM7S0FDckIsV0FBVyxDQUFDLHdCQUF3QixDQUFDO0tBQ3JDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSx1Q0FBdUMsQ0FBQztLQUN0RSxTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDOUcsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFZLEVBQUUsSUFBZ0QsRUFBRSxFQUFFO0lBQy9FLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGdCQUFTLEVBQUMsSUFBQSxhQUFNLEVBQUMsY0FBYyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xFLElBQUEsd0JBQVksRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSwyQkFBZSxDQUFDLENBQUE7QUFDbEQsQ0FBQyxDQUFDLENBQUE7QUFFSix1QkFBZTtLQUNaLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO0tBQ2pFLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUM7S0FDekQsY0FBYyxDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDO0tBQ3hFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsa0NBQWtDLENBQUM7S0FDbkUsTUFBTSxDQUFDLG9CQUFvQixFQUFFLDhGQUE4RixDQUFDO0tBQzVILE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwrQ0FBK0MsQ0FBQztLQUNsRixNQUFNLENBQUMsMEJBQTBCLEVBQUUsZ0RBQWdELENBQUM7S0FDcEYsU0FBUyxDQUFDLElBQUksa0JBQU0sQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQzlHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBdUosRUFBRSxFQUFFO0lBQ3hLLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUE7SUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFFakMsSUFBSSxJQUFJLENBQUMsU0FBUztRQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0YsSUFBSSxJQUFJLENBQUMsVUFBVTtRQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEcsTUFBTSxVQUFVLEdBQUcsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGNBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFFckUsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsWUFBWSxDQUFDLEVBQUU7UUFDNUMsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsSUFBQSxxQkFBYyxHQUFFO1FBQ3pCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUEsYUFBTSxFQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN2RixJQUFBLHdCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsMkJBQWUsQ0FBQyxDQUFBO0FBQ2xELENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uLCBnZXRBdXRoSGVhZGVycywgcmVhZEpzb25SZXNwb25zZSB9IGZyb20gJy4uL2F1dGgnXG5pbXBvcnQgeyBpbnZhbGlkQXJndW1lbnQgfSBmcm9tICcuLi9lcnJvcnMnXG5pbXBvcnQgeyBmb3JtYXRPdXRwdXQsIHdvcmtmbG93Q29sdW1ucywgdHlwZSBPdXRwdXRGb3JtYXQgfSBmcm9tICcuLi9mb3JtYXQuanMnXG5cbmZ1bmN0aW9uIHBhcnNlVGltZVRvU2Vjb25kcyh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMgfHwgcGFydHMuc29tZShpc05hTikpIHtcbiAgICB0aHJvdyBpbnZhbGlkQXJndW1lbnQoXG4gICAgICAnVGltZSBtdXN0IGJlIGluIEREOkhIOk1NIGZvcm1hdCAoZGF5czpob3VyczptaW51dGVzKS4nLFxuICAgICAgJ0V4YW1wbGU6IDAwOjEyOjMwJyxcbiAgICApXG4gIH1cbiAgY29uc3QgW2RheXMsIGhvdXJzLCBtaW51dGVzXSA9IHBhcnRzXG4gIHJldHVybiAoZGF5cyAqIDg2NDAwKSArIChob3VycyAqIDM2MDApICsgKG1pbnV0ZXMgKiA2MClcbn1cblxuZnVuY3Rpb24gZ3Vlc3NGaWxlVHlwZShmaWxlUGF0aDogc3RyaW5nKTogJ1RFWFQnIHwgJ1pJUCcge1xuICBjb25zdCBsb3dlciA9IGZpbGVQYXRoLnRvTG93ZXJDYXNlKClcbiAgaWYgKGxvd2VyLmVuZHNXaXRoKCcubmYnKSkgcmV0dXJuICdURVhUJ1xuICBpZiAobG93ZXIuZW5kc1dpdGgoJy56aXAnKSkgcmV0dXJuICdaSVAnXG4gIHRocm93IGludmFsaWRBcmd1bWVudChcbiAgICBgQ2Fubm90IGRldGVybWluZSBmaWxlIHR5cGUgZnJvbSBleHRlbnNpb24uIEZpbGUgbXVzdCBiZSAubmYgKFRFWFQpIG9yIC56aXAgKFpJUCkuYCxcbiAgICBgUHJvdmlkZWQ6ICR7ZmlsZVBhdGh9YCxcbiAgKVxufVxuXG5leHBvcnQgY29uc3Qgd29ya2Zsb3dDb21tYW5kID0gbmV3IENvbW1hbmQoJ3dvcmtmbG93JylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2Ugd29ya2Zsb3dzJylcblxud29ya2Zsb3dDb21tYW5kXG4gIC5jb21tYW5kKCdsaXN0JylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGFsbCByZWdpc3RlcmVkIHdvcmtmbG93cycpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jIChvcHRzOiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL3dvcmtmbG93cycpKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCB3b3JrZmxvd0NvbHVtbnMpXG4gIH0pXG5cbndvcmtmbG93Q29tbWFuZFxuICAuY29tbWFuZCgnZ2V0IDxuYW1lPicpXG4gIC5kZXNjcmlwdGlvbignR2V0IGEgd29ya2Zsb3cgYnkgbmFtZScpXG4gIC5vcHRpb24oJy0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnV29ya2Zsb3cgdmVyc2lvbiAoZGVmYXVsdHMgdG8gbGF0ZXN0KScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jIChuYW1lOiBzdHJpbmcsIG9wdHM6IHsgdmVyc2lvbj86IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gb3B0cy52ZXJzaW9uID8gYD92ZXJzaW9uPSR7b3B0cy52ZXJzaW9ufWAgOiAnJ1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvd29ya2Zsb3dzLyR7bmFtZX0ke3F1ZXJ5fWApKVxuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgd29ya2Zsb3dDb2x1bW5zKVxuICB9KVxuXG53b3JrZmxvd0NvbW1hbmRcbiAgLmNvbW1hbmQoJ2NyZWF0ZScpXG4gIC5kZXNjcmlwdGlvbignUmVnaXN0ZXIgYSBuZXcgd29ya2Zsb3cgKC5uZiBmaWxlIG9yIC56aXAgYXJjaGl2ZSknKVxuICAucmVxdWlyZWRPcHRpb24oJy0td29ya2Zsb3ctbmFtZSA8bmFtZT4nLCAnV29ya2Zsb3cgbmFtZScpXG4gIC5yZXF1aXJlZE9wdGlvbignLS13b3JrZmxvdy12ZXJzaW9uIDxhbGlhcz4nLCAnV29ya2Zsb3cgdmVyc2lvbiAoYWxpYXMpJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLWZpbGUgPGZpbGU+JywgJ1dvcmtmbG93IGZpbGUgcGF0aCAoLm5mIG9yIC56aXApJylcbiAgLm9wdGlvbignLS1maWxlLXR5cGUgPHR5cGU+JywgJ0ZpbGUgdHlwZSAoVEVYVCBmb3IgLm5mLCBaSVAgZm9yIC56aXAgYXJjaGl2ZXM7IGF1dG8tZ3Vlc3NlZCBmcm9tIGV4dGVuc2lvbiBpZiBub3QgcHJvdmlkZWQpJylcbiAgLm9wdGlvbignLS1hbGVydC10aW1lIDxERDpISDpNTT4nLCAnRGVmYXVsdCBhbGVydCB0aW1lIGZvciBzdWJtaXNzaW9ucyAoREQ6SEg6TU0pJylcbiAgLm9wdGlvbignLS1jYW5jZWwtdGltZSA8REQ6SEg6TU0+JywgJ0RlZmF1bHQgY2FuY2VsIHRpbWUgZm9yIHN1Ym1pc3Npb25zIChERDpISDpNTSknKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyB3b3JrZmxvd05hbWU6IHN0cmluZzsgd29ya2Zsb3dWZXJzaW9uOiBzdHJpbmc7IGZpbGU6IHN0cmluZzsgZmlsZVR5cGU/OiBzdHJpbmc7IGFsZXJ0VGltZT86IHN0cmluZzsgY2FuY2VsVGltZT86IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0cy53b3JrZmxvd05hbWUpXG4gICAgZm9ybS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRzLndvcmtmbG93VmVyc2lvbilcbiAgICBmb3JtLmFwcGVuZCgnZW5naW5lJywgJ25leHRmbG93JylcbiAgICBcbiAgICBjb25zdCBmaWxlVHlwZSA9IG9wdHMuZmlsZVR5cGU/LnRvVXBwZXJDYXNlKCkgfHwgZ3Vlc3NGaWxlVHlwZShvcHRzLmZpbGUpXG4gICAgZm9ybS5hcHBlbmQoJ2ZpbGVUeXBlJywgZmlsZVR5cGUpXG4gICAgXG4gICAgaWYgKG9wdHMuYWxlcnRUaW1lKSBmb3JtLmFwcGVuZCgnYWxlcnRUaW1lU2Vjb25kcycsIFN0cmluZyhwYXJzZVRpbWVUb1NlY29uZHMob3B0cy5hbGVydFRpbWUpKSlcbiAgICBpZiAob3B0cy5jYW5jZWxUaW1lKSBmb3JtLmFwcGVuZCgnY2FuY2VsVGltZVNlY29uZHMnLCBTdHJpbmcocGFyc2VUaW1lVG9TZWNvbmRzKG9wdHMuY2FuY2VsVGltZSkpKVxuICAgIGNvbnN0IGZpbGVCdWZmZXIgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShvcHRzLmZpbGUpXG4gICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBuZXcgQmxvYihbZmlsZUJ1ZmZlcl0pLCBwYXRoLmJhc2VuYW1lKG9wdHMuZmlsZSkpXG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChhcGlVcmwoJy93b3JrZmxvd3MnKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiBnZXRBdXRoSGVhZGVycygpLFxuICAgICAgYm9keTogZm9ybSxcbiAgICB9KVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkSnNvblJlc3BvbnNlKHJlcywgeyBtZXRob2Q6ICdQT1NUJywgdXJsOiBhcGlVcmwoJy93b3JrZmxvd3MnKSB9KVxuICAgIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgd29ya2Zsb3dDb2x1bW5zKVxuICB9KVxuIl19
@@ -0,0 +1,38 @@
1
+ export type CliErrorCode = 'INVALID_ARGUMENT' | 'AUTH' | 'NOT_FOUND' | 'UPSTREAM' | 'INTERNAL';
2
+ export declare class CliError extends Error {
3
+ code: CliErrorCode;
4
+ exitCode: number;
5
+ hint?: string;
6
+ details?: unknown;
7
+ constructor(params: {
8
+ code: CliErrorCode;
9
+ message: string;
10
+ exitCode: number;
11
+ hint?: string;
12
+ details?: unknown;
13
+ cause?: unknown;
14
+ });
15
+ }
16
+ export declare class HttpRequestError extends Error {
17
+ status: number;
18
+ method: string;
19
+ url: string;
20
+ body: string;
21
+ parsedBody?: unknown;
22
+ constructor(params: {
23
+ status: number;
24
+ method: string;
25
+ url: string;
26
+ body: string;
27
+ parsedBody?: unknown;
28
+ });
29
+ }
30
+ export declare function invalidArgument(message: string, hint?: string): CliError;
31
+ export declare function notFound(message: string): CliError;
32
+ export declare function isDebugEnabled(argv?: string[]): boolean;
33
+ export declare function wantsJsonError(argv?: string[]): boolean;
34
+ export declare function toCliError(err: unknown): CliError;
35
+ export declare function printCliError(err: CliError, opts: {
36
+ json: boolean;
37
+ debug: boolean;
38
+ }): void;