geni-bioinfo 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/costs.js +63 -3
- package/dist/commands/log.d.ts +2 -2
- package/dist/commands/log.js +64 -83
- package/dist/commands/login.js +40 -6
- package/dist/commands/submission.js +8 -2
- package/dist/commands/task.js +15 -1
- package/dist/commands/workflow.js +75 -1
- package/dist/format.d.ts +4 -0
- package/dist/format.js +61 -21
- package/dist/index.js +1 -6
- package/package.json +1 -1
package/dist/commands/costs.js
CHANGED
|
@@ -18,6 +18,8 @@ function addCommonOptions(cmd) {
|
|
|
18
18
|
}
|
|
19
19
|
function buildParams(opts) {
|
|
20
20
|
const params = new URLSearchParams();
|
|
21
|
+
if (process.env.GENI_TENANT_ID)
|
|
22
|
+
params.set('tenantId', process.env.GENI_TENANT_ID);
|
|
21
23
|
if (opts.startDate)
|
|
22
24
|
params.set('from', `${opts.startDate}T00:00:00.000Z`);
|
|
23
25
|
if (opts.endDate) {
|
|
@@ -46,10 +48,13 @@ addCommonOptions(exports.costsCommand
|
|
|
46
48
|
.command('submission')
|
|
47
49
|
.description('Per-submission cost breakdown')
|
|
48
50
|
.argument('[ids...]', 'Filter by submission IDs')
|
|
51
|
+
.option('--status <status>', 'Filter by submission status (case insensitive, e.g. succeeded, FAILED)')
|
|
49
52
|
.option('--limit <n>', 'Max results (1–200)', '50')
|
|
50
53
|
.option('--offset <n>', 'Pagination offset', '0')
|
|
51
54
|
.addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (ids, opts) => {
|
|
52
55
|
const params = buildParams(opts);
|
|
56
|
+
if (opts.status)
|
|
57
|
+
params.set('submissionStatus', opts.status.toUpperCase());
|
|
53
58
|
ids.forEach(id => params.append('id', id));
|
|
54
59
|
params.set('limit', opts.limit);
|
|
55
60
|
params.set('offset', opts.offset);
|
|
@@ -77,6 +82,53 @@ addCommonOptions(exports.costsCommand
|
|
|
77
82
|
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance-type${qs(buildParams(opts))}`));
|
|
78
83
|
(0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.analyticsByInstanceTypeColumns);
|
|
79
84
|
});
|
|
85
|
+
exports.costsCommand
|
|
86
|
+
.command('task')
|
|
87
|
+
.description('Per-task cost breakdown')
|
|
88
|
+
.argument('[ids...]', 'Filter by task IDs')
|
|
89
|
+
.option('--submission-id <id>', 'Filter by submission ID')
|
|
90
|
+
.option('--limit <n>', 'Max results (1–200)', '50')
|
|
91
|
+
.option('--offset <n>', 'Pagination offset', '0')
|
|
92
|
+
.addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
|
|
93
|
+
.action(async (ids, opts) => {
|
|
94
|
+
const params = new URLSearchParams();
|
|
95
|
+
if (process.env.GENI_TENANT_ID)
|
|
96
|
+
params.set('tenantId', process.env.GENI_TENANT_ID);
|
|
97
|
+
ids.forEach(id => params.append('id', id));
|
|
98
|
+
if (opts.submissionId)
|
|
99
|
+
params.set('submissionId', opts.submissionId);
|
|
100
|
+
params.set('limit', opts.limit);
|
|
101
|
+
params.set('offset', opts.offset);
|
|
102
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/task${qs(params)}`));
|
|
103
|
+
(0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByTaskColumns);
|
|
104
|
+
});
|
|
105
|
+
addCommonOptions(exports.costsCommand
|
|
106
|
+
.command('instance')
|
|
107
|
+
.description('Per-instance cost breakdown')
|
|
108
|
+
.option('--environment-id <id>', 'Filter by environment ID')
|
|
109
|
+
.option('--engine-id <id>', 'Filter by engine ID')
|
|
110
|
+
.option('--queue-id <id>', 'Filter by queue ID')
|
|
111
|
+
.option('--instance-type <type>', 'Filter by EC2 instance type (e.g. m5.xlarge)')
|
|
112
|
+
.option('--execution-mode <mode>', 'Filter by execution mode (e.g. SPOT, ON_DEMAND)')
|
|
113
|
+
.option('--limit <n>', 'Max results (1–200)', '50')
|
|
114
|
+
.option('--offset <n>', 'Pagination offset', '0')
|
|
115
|
+
.addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))).action(async (opts) => {
|
|
116
|
+
const params = buildParams(opts);
|
|
117
|
+
if (opts.environmentId)
|
|
118
|
+
params.set('environmentId', opts.environmentId);
|
|
119
|
+
if (opts.engineId)
|
|
120
|
+
params.set('engineId', opts.engineId);
|
|
121
|
+
if (opts.queueId)
|
|
122
|
+
params.set('queueId', opts.queueId);
|
|
123
|
+
if (opts.instanceType)
|
|
124
|
+
params.set('instanceType', opts.instanceType);
|
|
125
|
+
if (opts.executionMode)
|
|
126
|
+
params.set('executionMode', opts.executionMode);
|
|
127
|
+
params.set('limit', opts.limit);
|
|
128
|
+
params.set('offset', opts.offset);
|
|
129
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/costs/instance${qs(params)}`));
|
|
130
|
+
(0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.costsByInstanceColumns);
|
|
131
|
+
});
|
|
80
132
|
addCommonOptions(exports.costsCommand
|
|
81
133
|
.command('engine')
|
|
82
134
|
.description('Cost grouped by engine')
|
|
@@ -104,8 +156,16 @@ addCommonOptions(exports.costsCommand
|
|
|
104
156
|
exports.costsCommand
|
|
105
157
|
.command('sync')
|
|
106
158
|
.description('Trigger a CUR actual-cost sync')
|
|
107
|
-
.
|
|
108
|
-
|
|
159
|
+
.option('--reset', 'Clear all actual cost data before syncing, forcing a full recalculation from CUR')
|
|
160
|
+
.action(async (opts) => {
|
|
161
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)('/costs/sync'), {
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers: { 'Content-Type': 'application/json' },
|
|
164
|
+
body: JSON.stringify({
|
|
165
|
+
reset: opts.reset ?? false,
|
|
166
|
+
...(process.env.GENI_TENANT_ID ? { tenantId: process.env.GENI_TENANT_ID } : {}),
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
109
169
|
console.log(`Sync job enqueued: ${data.jobId}`);
|
|
110
170
|
});
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FXcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLElBQUksQ0FBQyxTQUFTO1FBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRXpFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxD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QixNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBc0IsQ0FBQTtJQUM1RixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUNqRCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7XG4gIGZvcm1hdE91dHB1dCxcbiAgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMsXG4gIGFuYWx5dGljc0J5U3VibWlzc2lvbkNvbHVtbnMsXG4gIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zLFxuICBhbmFseXRpY3NCeVF1ZXVlQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlJbnN0YW5jZVR5cGVDb2x1bW5zLFxuICBhbmFseXRpY3NPdmVyVGltZUNvbHVtbnMsXG4gIGNvc3RzQnlFbmdpbmVDb2x1bW5zLFxuICBjb3N0c0J5RXhlY3V0aW9uTW9kZUNvbHVtbnMsXG4gIHR5cGUgT3V0cHV0Rm9ybWF0LFxufSBmcm9tICcuLi9mb3JtYXQuanMnXG5cbnR5cGUgQmFzZU9wdHMgPSB7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZ1xuICBlbmREYXRlPzogc3RyaW5nXG4gIHN1Ym1pc3Npb25TdGF0dXM/OiBzdHJpbmdcbn1cblxuY29uc3QgREFURV9SRSA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kL1xuXG5mdW5jdGlvbiBwYXJzZURhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghREFURV9SRS50ZXN0KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBZWVlZLU1NLURELCBnb3QgXCIke3ZhbHVlfVwiYClcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmZ1bmN0aW9uIGFkZENvbW1vbk9wdGlvbnMoY21kOiBDb21tYW5kKTogQ29tbWFuZCB7XG4gIHJldHVybiBjbWRcbiAgICAub3B0aW9uKCctLXN0YXJ0LWRhdGUgPFlZWVktTU0tREQ+JywgJ1N0YXJ0IGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLWVuZC1kYXRlIDxZWVlZLU1NLUREPicsICdFbmQgZGF0ZSAoVVRDLCBpbmNsdXNpdmUpJywgcGFyc2VEYXRlKVxuICAgIC5vcHRpb24oJy0tc3VibWlzc2lvbi1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gc3RhdHVzIChlLmcuIFNVQ0NFRURFRCwgRkFJTEVELCBSVU5OSU5HKScpXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKG9wdHM6IEJhc2VPcHRzKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG5cbiAgaWYgKG9wdHMuc3RhcnREYXRlKSBwYXJhbXMuc2V0KCdmcm9tJywgYCR7b3B0cy5zdGFydERhdGV9VDAwOjAwOjAwLjAwMFpgKVxuXG4gIGlmIChvcHRzLmVuZERhdGUpIHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoYCR7b3B0cy5lbmREYXRlfVQwMDowMDowMC4wMDBaYClcbiAgICBkLnNldFVUQ0RhdGUoZC5nZXRVVENEYXRlKCkgKyAxKVxuICAgIHBhcmFtcy5zZXQoJ3RvJywgZC50b0lTT1N0cmluZygpKVxuICB9XG5cbiAgaWYgKG9wdHMuc3VibWlzc2lvblN0YXR1cykgcGFyYW1zLnNldCgnc3VibWlzc2lvblN0YXR1cycsIG9wdHMuc3VibWlzc2lvblN0YXR1cylcbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBxcyhwYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHMgPSBwYXJhbXMudG9TdHJpbmcoKVxuICByZXR1cm4gcyA/IGA/JHtzfWAgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgY29zdHNDb21tYW5kID0gbmV3IENvbW1hbmQoJ2Nvc3RzJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IGNvc3QgYW5hbHl0aWNzJylcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3N1bW1hcnknKVxuICAgIC5kZXNjcmlwdGlvbignT3ZlcmFsbCBjb3N0IHRvdGFscyBmb3IgdGhlIHRlbmFudCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdW1tYXJ5JHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpXG4gIGZvcm1hdE91dHB1dChkYXRhLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzU3VtbWFyeUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnc3VibWlzc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQZXItc3VibWlzc2lvbiBjb3N0IGJyZWFrZG93bicpXG4gICAgLmFyZ3VtZW50KCdbaWRzLi4uXScsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBJRHMnKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gICAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKGlkczogc3RyaW5nW10sIG9wdHM6IEJhc2VPcHRzICYgeyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9zdWJtaXNzaW9uJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbnZpcm9ubWVudCcpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZW52aXJvbm1lbnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW52aXJvbm1lbnQke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5RW52aXJvbm1lbnRDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ3F1ZXVlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBxdWV1ZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9xdWV1ZSR7cXMoYnVpbGRQYXJhbXMob3B0cykpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzQnlRdWV1ZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnaW5zdGFuY2UtdHlwZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgRUMyIGluc3RhbmNlIHR5cGUgYW5kIG1hcmtldCB0eXBlJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2luc3RhbmNlLXR5cGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5SW5zdGFuY2VUeXBlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdlbmdpbmUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGVuZ2luZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9lbmdpbmUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFbmdpbmVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2V4ZWN1dGlvbi1tb2RlJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBleGVjdXRpb24gbW9kZSAoc3BvdCAvIG9uLWRlbWFuZCknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZXhlY3V0aW9uLW1vZGUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdvdmVyLXRpbWUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBidWNrZXRlZCBieSB0aW1lIHBlcmlvZCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWludGVydmFsIDxpbnRlcnZhbD4nLCAnVGltZSBidWNrZXQgc2l6ZScpLmNob2ljZXMoWydkYXknLCAnd2VlaycsICdtb250aCddKS5kZWZhdWx0KCdkYXknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgaW50ZXJ2YWw6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyhvcHRzKVxuICBwYXJhbXMuc2V0KCdpbnRlcnZhbCcsIG9wdHMuaW50ZXJ2YWwpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvb3Zlci10aW1lJHtxcyhwYXJhbXMpfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgYW5hbHl0aWNzT3ZlclRpbWVDb2x1bW5zKVxufSlcblxuY29zdHNDb21tYW5kXG4gIC5jb21tYW5kKCdzeW5jJylcbiAgLmRlc2NyaXB0aW9uKCdUcmlnZ2VyIGEgQ1VSIGFjdHVhbC1jb3N0IHN5bmMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL2Nvc3RzL3N5bmMnKSwgeyBtZXRob2Q6ICdQT1NUJyB9KSBhcyB7IGpvYklkOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGBTeW5jIGpvYiBlbnF1ZXVlZDogJHtkYXRhLmpvYklkfWApXG4gIH0pXG4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLGtDQUEyQztBQUMzQyw0Q0FhcUI7QUFRckIsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUE7QUFFckMsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2hGLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBWTtJQUNwQyxPQUFPLEdBQUc7U0FDUCxNQUFNLENBQUMsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsU0FBUyxDQUFDO1NBQzdFLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSwyQkFBMkIsRUFBRSxTQUFTLENBQUM7U0FDekUsTUFBTSxDQUFDLDhCQUE4QixFQUFFLCtEQUErRCxDQUFDLENBQUE7QUFDNUcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtJQUVwQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7SUFFbEYsSUFBSSxJQUFJLENBQUMsU0FBUztRQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQTtJQUV6RSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFP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QyxDQUFDLENBQUE7QUFFRixvQkFBWTtLQUNULE9BQU8sQ0FBQyxNQUFNLENBQUM7S0FDZixXQUFXLENBQUMsZ0NBQWdDLENBQUM7S0FDN0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxrRkFBa0YsQ0FBQztLQUNyRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQXlCLEVBQUUsRUFBRTtJQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxhQUFhLENBQUMsRUFBRTtRQUNsRCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtRQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLO1lBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2hGLENBQUM7S0FDSCxDQUFzQixDQUFBO0lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ2pELENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHtcbiAgZm9ybWF0T3V0cHV0LFxuICBhbmFseXRpY3NTdW1tYXJ5Q29sdW1ucyxcbiAgYW5hbHl0aWNzQnlTdWJtaXNzaW9uQ29sdW1ucyxcbiAgYW5hbHl0aWNzQnlFbnZpcm9ubWVudENvbHVtbnMsXG4gIGFuYWx5dGljc0J5UXVldWVDb2x1bW5zLFxuICBhbmFseXRpY3NCeUluc3RhbmNlVHlwZUNvbHVtbnMsXG4gIGFuYWx5dGljc092ZXJUaW1lQ29sdW1ucyxcbiAgY29zdHNCeUVuZ2luZUNvbHVtbnMsXG4gIGNvc3RzQnlFeGVjdXRpb25Nb2RlQ29sdW1ucyxcbiAgY29zdHNCeVRhc2tDb2x1bW5zLFxuICBjb3N0c0J5SW5zdGFuY2VDb2x1bW5zLFxuICB0eXBlIE91dHB1dEZvcm1hdCxcbn0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG50eXBlIEJhc2VPcHRzID0ge1xuICBzdGFydERhdGU/OiBzdHJpbmdcbiAgZW5kRGF0ZT86IHN0cmluZ1xuICBzdWJtaXNzaW9uU3RhdHVzPzogc3RyaW5nXG59XG5cbmNvbnN0IERBVEVfUkUgPSAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC9cblxuZnVuY3Rpb24gcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIURBVEVfUkUudGVzdCh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgWVlZWS1NTS1ERCwgZ290IFwiJHt2YWx1ZX1cImApXG4gIHJldHVybiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBhZGRDb21tb25PcHRpb25zKGNtZDogQ29tbWFuZCk6IENvbW1hbmQge1xuICByZXR1cm4gY21kXG4gICAgLm9wdGlvbignLS1zdGFydC1kYXRlIDxZWVlZLU1NLUREPicsICdTdGFydCBkYXRlIChVVEMsIGluY2x1c2l2ZSknLCBwYXJzZURhdGUpXG4gICAgLm9wdGlvbignLS1lbmQtZGF0ZSA8WVlZWS1NTS1ERD4nLCAnRW5kIGRhdGUgKFVUQywgaW5jbHVzaXZlKScsIHBhcnNlRGF0ZSlcbiAgICAub3B0aW9uKCctLXN1Ym1pc3Npb24tc3RhdHVzIDxzdGF0dXM+JywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIHN0YXR1cyAoZS5nLiBTVUNDRUVERUQsIEZBSUxFRCwgUlVOTklORyknKVxufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhvcHRzOiBCYXNlT3B0cyk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuXG4gIGlmIChwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCkgcGFyYW1zLnNldCgndGVuYW50SWQnLCBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRClcblxuICBpZiAob3B0cy5zdGFydERhdGUpIHBhcmFtcy5zZXQoJ2Zyb20nLCBgJHtvcHRzLnN0YXJ0RGF0ZX1UMDA6MDA6MDAuMDAwWmApXG5cbiAgaWYgKG9wdHMuZW5kRGF0ZSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShgJHtvcHRzLmVuZERhdGV9VDAwOjAwOjAwLjAwMFpgKVxuICAgIGQuc2V0VVRDRGF0ZShkLmdldFVUQ0RhdGUoKSArIDEpXG4gICAgcGFyYW1zLnNldCgndG8nLCBkLnRvSVNPU3RyaW5nKCkpXG4gIH1cblxuICBpZiAob3B0cy5zdWJtaXNzaW9uU3RhdHVzKSBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uU3RhdHVzJywgb3B0cy5zdWJtaXNzaW9uU3RhdHVzKVxuICByZXR1cm4gcGFyYW1zXG59XG5cbmZ1bmN0aW9uIHFzKHBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgcyA9IHBhcmFtcy50b1N0cmluZygpXG4gIHJldHVybiBzID8gYD8ke3N9YCA6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBjb3N0c0NvbW1hbmQgPSBuZXcgQ29tbWFuZCgnY29zdHMnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgY29zdCBhbmFseXRpY3MnKVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnc3VtbWFyeScpXG4gICAgLmRlc2NyaXB0aW9uKCdPdmVyYWxsIGNvc3QgdG90YWxzIGZvciB0aGUgdGVuYW50JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL3N1bW1hcnkke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSlcbiAgZm9ybWF0T3V0cHV0KGRhdGEsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NTdW1tYXJ5Q29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdzdWJtaXNzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ1Blci1zdWJtaXNzaW9uIGNvc3QgYnJlYWtkb3duJylcbiAgICAuYXJndW1lbnQoJ1tpZHMuLi5dJywgJ0ZpbHRlciBieSBzdWJtaXNzaW9uIElEcycpXG4gICAgLm9wdGlvbignLS1zdGF0dXMgPHN0YXR1cz4nLCAnRmlsdGVyIGJ5IHN1Ym1pc3Npb24gc3RhdHVzIChjYXNlIGluc2Vuc2l0aXZlLCBlLmcuIHN1Y2NlZWRlZCwgRkFJTEVEKScpXG4gICAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTWF4IHJlc3VsdHMgKDHigJMyMDApJywgJzUwJylcbiAgICAub3B0aW9uKCctLW9mZnNldCA8bj4nLCAnUGFnaW5hdGlvbiBvZmZzZXQnLCAnMCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAoaWRzOiBzdHJpbmdbXSwgb3B0czogQmFzZU9wdHMgJiB7IHN0YXR1cz86IHN0cmluZzsgbGltaXQ6IHN0cmluZzsgb2Zmc2V0OiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgaWYgKG9wdHMuc3RhdHVzKSBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uU3RhdHVzJywgb3B0cy5zdGF0dXMudG9VcHBlckNhc2UoKSlcbiAgaWRzLmZvckVhY2goaWQgPT4gcGFyYW1zLmFwcGVuZCgnaWQnLCBpZCkpXG4gIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0cy5saW1pdClcbiAgcGFyYW1zLnNldCgnb2Zmc2V0Jywgb3B0cy5vZmZzZXQpXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvc3VibWlzc2lvbiR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5U3VibWlzc2lvbkNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnZW52aXJvbm1lbnQnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IGVudmlyb25tZW50JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2Vudmlyb25tZW50JHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NCeUVudmlyb25tZW50Q29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdxdWV1ZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgcXVldWUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvcXVldWUke3FzKGJ1aWxkUGFyYW1zKG9wdHMpKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc0J5UXVldWVDb2x1bW5zKVxufSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2luc3RhbmNlLXR5cGUnKVxuICAgIC5kZXNjcmlwdGlvbignQ29zdCBncm91cGVkIGJ5IEVDMiBpbnN0YW5jZSB0eXBlIGFuZCBtYXJrZXQgdHlwZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9pbnN0YW5jZS10eXBlJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBhbmFseXRpY3NCeUluc3RhbmNlVHlwZUNvbHVtbnMpXG59KVxuXG5jb3N0c0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3Rhc2snKVxuICAuZGVzY3JpcHRpb24oJ1Blci10YXNrIGNvc3QgYnJlYWtkb3duJylcbiAgLmFyZ3VtZW50KCdbaWRzLi4uXScsICdGaWx0ZXIgYnkgdGFzayBJRHMnKVxuICAub3B0aW9uKCctLXN1Ym1pc3Npb24taWQgPGlkPicsICdGaWx0ZXIgYnkgc3VibWlzc2lvbiBJRCcpXG4gIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gIC5vcHRpb24oJy0tb2Zmc2V0IDxuPicsICdQYWdpbmF0aW9uIG9mZnNldCcsICcwJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKGlkczogc3RyaW5nW10sIG9wdHM6IHsgc3VibWlzc2lvbklkPzogc3RyaW5nOyBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgIGlmIChwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCkgcGFyYW1zLnNldCgndGVuYW50SWQnLCBwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRClcbiAgICBpZHMuZm9yRWFjaChpZCA9PiBwYXJhbXMuYXBwZW5kKCdpZCcsIGlkKSlcbiAgICBpZiAob3B0cy5zdWJtaXNzaW9uSWQpIHBhcmFtcy5zZXQoJ3N1Ym1pc3Npb25JZCcsIG9wdHMuc3VibWlzc2lvbklkKVxuICAgIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0cy5saW1pdClcbiAgICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL3Rhc2ske3FzKHBhcmFtcyl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlUYXNrQ29sdW1ucylcbiAgfSlcblxuYWRkQ29tbW9uT3B0aW9ucyhcbiAgY29zdHNDb21tYW5kXG4gICAgLmNvbW1hbmQoJ2luc3RhbmNlJylcbiAgICAuZGVzY3JpcHRpb24oJ1Blci1pbnN0YW5jZSBjb3N0IGJyZWFrZG93bicpXG4gICAgLm9wdGlvbignLS1lbnZpcm9ubWVudC1pZCA8aWQ+JywgICAnRmlsdGVyIGJ5IGVudmlyb25tZW50IElEJylcbiAgICAub3B0aW9uKCctLWVuZ2luZS1pZCA8aWQ+JywgICAgICAgICdGaWx0ZXIgYnkgZW5naW5lIElEJylcbiAgICAub3B0aW9uKCctLXF1ZXVlLWlkIDxpZD4nLCAgICAgICAgICdGaWx0ZXIgYnkgcXVldWUgSUQnKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAgJ0ZpbHRlciBieSBFQzIgaW5zdGFuY2UgdHlwZSAoZS5nLiBtNS54bGFyZ2UpJylcbiAgICAub3B0aW9uKCctLWV4ZWN1dGlvbi1tb2RlIDxtb2RlPicsICdGaWx0ZXIgYnkgZXhlY3V0aW9uIG1vZGUgKGUuZy4gU1BPVCwgT05fREVNQU5EKScpXG4gICAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAgJ01heCByZXN1bHRzICgx4oCTMjAwKScsICc1MCcpXG4gICAgLm9wdGlvbignLS1vZmZzZXQgPG4+JywgJ1BhZ2luYXRpb24gb2Zmc2V0JywgJzAnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYge1xuICBlbnZpcm9ubWVudElkPzogc3RyaW5nOyBlbmdpbmVJZD86IHN0cmluZzsgcXVldWVJZD86IHN0cmluZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nOyBleGVjdXRpb25Nb2RlPzogc3RyaW5nO1xuICBsaW1pdDogc3RyaW5nOyBvZmZzZXQ6IHN0cmluZzsgZm9ybWF0OiBPdXRwdXRGb3JtYXRcbn0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgaWYgKG9wdHMuZW52aXJvbm1lbnRJZCkgcGFyYW1zLnNldCgnZW52aXJvbm1lbnRJZCcsIG9wdHMuZW52aXJvbm1lbnRJZClcbiAgaWYgKG9wdHMuZW5naW5lSWQpICAgICAgcGFyYW1zLnNldCgnZW5naW5lSWQnLCBvcHRzLmVuZ2luZUlkKVxuICBpZiAob3B0cy5xdWV1ZUlkKSAgICAgICBwYXJhbXMuc2V0KCdxdWV1ZUlkJywgb3B0cy5xdWV1ZUlkKVxuICBpZiAob3B0cy5pbnN0YW5jZVR5cGUpICBwYXJhbXMuc2V0KCdpbnN0YW5jZVR5cGUnLCBvcHRzLmluc3RhbmNlVHlwZSlcbiAgaWYgKG9wdHMuZXhlY3V0aW9uTW9kZSkgcGFyYW1zLnNldCgnZXhlY3V0aW9uTW9kZScsIG9wdHMuZXhlY3V0aW9uTW9kZSlcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBvcHRzLmxpbWl0KVxuICBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRzLm9mZnNldClcbiAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9jb3N0cy9pbnN0YW5jZSR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGNvc3RzQnlJbnN0YW5jZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnZW5naW5lJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgZ3JvdXBlZCBieSBlbmdpbmUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuKS5hY3Rpb24oYXN5bmMgKG9wdHM6IEJhc2VPcHRzICYgeyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvY29zdHMvZW5naW5lJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5RW5naW5lQ29sdW1ucylcbn0pXG5cbmFkZENvbW1vbk9wdGlvbnMoXG4gIGNvc3RzQ29tbWFuZFxuICAgIC5jb21tYW5kKCdleGVjdXRpb24tbW9kZScpXG4gICAgLmRlc2NyaXB0aW9uKCdDb3N0IGdyb3VwZWQgYnkgZXhlY3V0aW9uIG1vZGUgKHNwb3QgLyBvbi1kZW1hbmQpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbikuYWN0aW9uKGFzeW5jIChvcHRzOiBCYXNlT3B0cyAmIHsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL2V4ZWN1dGlvbi1tb2RlJHtxcyhidWlsZFBhcmFtcyhvcHRzKSl9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBjb3N0c0J5RXhlY3V0aW9uTW9kZUNvbHVtbnMpXG59KVxuXG5hZGRDb21tb25PcHRpb25zKFxuICBjb3N0c0NvbW1hbmRcbiAgICAuY29tbWFuZCgnb3Zlci10aW1lJylcbiAgICAuZGVzY3JpcHRpb24oJ0Nvc3QgYnVja2V0ZWQgYnkgdGltZSBwZXJpb2QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1pbnRlcnZhbCA8aW50ZXJ2YWw+JywgJ1RpbWUgYnVja2V0IHNpemUnKS5jaG9pY2VzKFsnZGF5JywgJ3dlZWsnLCAnbW9udGgnXSkuZGVmYXVsdCgnZGF5JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4pLmFjdGlvbihhc3luYyAob3B0czogQmFzZU9wdHMgJiB7IGludGVydmFsOiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMob3B0cylcbiAgcGFyYW1zLnNldCgnaW50ZXJ2YWwnLCBvcHRzLmludGVydmFsKVxuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL2Nvc3RzL292ZXItdGltZSR7cXMocGFyYW1zKX1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIGFuYWx5dGljc092ZXJUaW1lQ29sdW1ucylcbn0pXG5cbmNvc3RzQ29tbWFuZFxuICAuY29tbWFuZCgnc3luYycpXG4gIC5kZXNjcmlwdGlvbignVHJpZ2dlciBhIENVUiBhY3R1YWwtY29zdCBzeW5jJylcbiAgLm9wdGlvbignLS1yZXNldCcsICdDbGVhciBhbGwgYWN0dWFsIGNvc3QgZGF0YSBiZWZvcmUgc3luY2luZywgZm9yY2luZyBhIGZ1bGwgcmVjYWxjdWxhdGlvbiBmcm9tIENVUicpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgcmVzZXQ/OiBib29sZWFuIH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCgnL2Nvc3RzL3N5bmMnKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgcmVzZXQ6IG9wdHMucmVzZXQgPz8gZmFsc2UsXG4gICAgICAgIC4uLihwcm9jZXNzLmVudi5HRU5JX1RFTkFOVF9JRCA/IHsgdGVuYW50SWQ6IHByb2Nlc3MuZW52LkdFTklfVEVOQU5UX0lEIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICB9KSBhcyB7IGpvYklkOiBzdHJpbmcgfVxuICAgIGNvbnNvbGUubG9nKGBTeW5jIGpvYiBlbnF1ZXVlZDogJHtkYXRhLmpvYklkfWApXG4gIH0pXG4iXX0=
|
package/dist/commands/log.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
2
|
+
export declare const logsSubcommand: Command;
|
|
3
|
+
export declare const taskLogsSubcommand: Command;
|
package/dist/commands/log.js
CHANGED
|
@@ -1,99 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.taskLogsSubcommand = exports.logsSubcommand = void 0;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const auth_1 = require("../auth");
|
|
6
6
|
const format_js_1 = require("../format.js");
|
|
7
|
-
exports.
|
|
8
|
-
.description('
|
|
9
|
-
|
|
10
|
-
.
|
|
11
|
-
.
|
|
12
|
-
.
|
|
7
|
+
exports.logsSubcommand = new commander_1.Command('logs')
|
|
8
|
+
.description('View logs for a submission')
|
|
9
|
+
.argument('<submission-id>', 'Submission ID')
|
|
10
|
+
.option('--tail', 'Show last N lines instead of all logs')
|
|
11
|
+
.option('--limit <n>', 'Number of lines to show with --tail', '50')
|
|
12
|
+
.option('--follow', 'Continuously poll for new log lines')
|
|
13
13
|
.addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
|
|
14
|
-
.action(async (opts) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
data
|
|
14
|
+
.action(async (submissionId, opts) => {
|
|
15
|
+
if (opts.tail || opts.follow) {
|
|
16
|
+
const limit = parseInt(opts.limit, 10);
|
|
17
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&limit=${limit}`));
|
|
18
|
+
let lastTimestamp = printLogLines(data.items);
|
|
19
|
+
if (opts.follow) {
|
|
20
|
+
await pollLogs(lastTimestamp, async (since) => {
|
|
21
|
+
const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}&since=${encodeURIComponent(since)}`));
|
|
22
|
+
return res.items;
|
|
23
|
+
}, (items) => {
|
|
24
|
+
lastTimestamp = printLogLines(items) ?? lastTimestamp;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
18
27
|
}
|
|
19
28
|
else {
|
|
20
|
-
(0,
|
|
29
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/submission-logs?submissionId=${submissionId}`));
|
|
30
|
+
if (opts.format === 'table') {
|
|
31
|
+
data.items.forEach(item => console.log(item.message));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
(0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.submissionLogColumns);
|
|
35
|
+
}
|
|
21
36
|
}
|
|
22
37
|
});
|
|
23
|
-
exports.
|
|
24
|
-
.
|
|
25
|
-
.
|
|
26
|
-
.option('--
|
|
38
|
+
exports.taskLogsSubcommand = new commander_1.Command('logs')
|
|
39
|
+
.description('View logs for a task')
|
|
40
|
+
.argument('<task-id>', 'Task ID')
|
|
41
|
+
.option('--tail', 'Show last N lines instead of all logs')
|
|
42
|
+
.option('--limit <n>', 'Number of lines to show with --tail', '50')
|
|
27
43
|
.option('--follow', 'Continuously poll for new log lines')
|
|
28
|
-
.
|
|
29
|
-
const limit = parseInt(opts.limit, 10);
|
|
30
|
-
const url = submissionId
|
|
31
|
-
? `/submission-logs?submissionId=${submissionId}&limit=${limit}`
|
|
32
|
-
: `/submission-logs?limit=${limit}`;
|
|
33
|
-
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(url));
|
|
34
|
-
let lastTimestamp = printLogLines(data.items);
|
|
35
|
-
if (opts.follow) {
|
|
36
|
-
await pollLogs(lastTimestamp, async (since) => {
|
|
37
|
-
const base = submissionId
|
|
38
|
-
? `/submission-logs?submissionId=${submissionId}`
|
|
39
|
-
: `/submission-logs`;
|
|
40
|
-
const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`${base}&since=${encodeURIComponent(since)}`));
|
|
41
|
-
return res.items;
|
|
42
|
-
}, (items) => {
|
|
43
|
-
lastTimestamp = printLogLines(items) ?? lastTimestamp;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
exports.taskLogCommand = new commander_1.Command('task-log')
|
|
48
|
-
.description('Manage task logs');
|
|
49
|
-
exports.taskLogCommand
|
|
50
|
-
.command('list')
|
|
51
|
-
.description('List task logs for a submission')
|
|
52
|
-
.requiredOption('--submission-id <id>', 'Submission ID')
|
|
53
|
-
.option('--task-id <id>', 'Task ID (optional, filter by specific task)')
|
|
44
|
+
.option('--short', 'Omit task ID prefix')
|
|
54
45
|
.addOption(new commander_1.Option('--format <format>', 'Output format').choices(['table', 'json', 'csv']).default('table'))
|
|
55
|
-
.action(async (opts) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
46
|
+
.action(async (taskId, opts) => {
|
|
47
|
+
if (opts.tail || opts.follow) {
|
|
48
|
+
const limit = parseInt(opts.limit, 10);
|
|
49
|
+
const buildUrl = (since) => {
|
|
50
|
+
const params = new URLSearchParams();
|
|
51
|
+
params.set('taskId', taskId);
|
|
52
|
+
if (since)
|
|
53
|
+
params.set('since', since);
|
|
54
|
+
else
|
|
55
|
+
params.set('limit', String(limit));
|
|
56
|
+
return `/task-logs?${params}`;
|
|
57
|
+
};
|
|
58
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
|
|
59
|
+
const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? taskId);
|
|
60
|
+
let lastTimestamp = printTaskLogLines(data.items, id);
|
|
61
|
+
if (opts.follow) {
|
|
62
|
+
await pollLogs(lastTimestamp, async (since) => {
|
|
63
|
+
const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
|
|
64
|
+
return res.items;
|
|
65
|
+
}, (items) => {
|
|
66
|
+
lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
62
69
|
}
|
|
63
70
|
else {
|
|
64
|
-
(0,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
.option('--limit <n>', 'Number of recent log lines to show', '50')
|
|
72
|
-
.option('--follow', 'Continuously poll for new log lines')
|
|
73
|
-
.option('--short', 'Omit task ID prefix')
|
|
74
|
-
.action(async (submissionId, opts) => {
|
|
75
|
-
const limit = parseInt(opts.limit, 10);
|
|
76
|
-
const buildUrl = (since) => {
|
|
77
|
-
const params = new URLSearchParams();
|
|
78
|
-
params.set('submissionId', submissionId);
|
|
79
|
-
if (opts.taskId)
|
|
80
|
-
params.set('taskId', opts.taskId);
|
|
81
|
-
if (since)
|
|
82
|
-
params.set('since', since);
|
|
83
|
-
else
|
|
84
|
-
params.set('limit', String(limit));
|
|
85
|
-
return `/task-logs?${params}`;
|
|
86
|
-
};
|
|
87
|
-
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl()));
|
|
88
|
-
const id = (item) => opts.short ? undefined : (item.jobName ?? item.taskId ?? opts.taskId);
|
|
89
|
-
let lastTimestamp = printTaskLogLines(data.items, id);
|
|
90
|
-
if (opts.follow) {
|
|
91
|
-
await pollLogs(lastTimestamp, async (since) => {
|
|
92
|
-
const res = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(buildUrl(since)));
|
|
93
|
-
return res.items;
|
|
94
|
-
}, (items) => {
|
|
95
|
-
lastTimestamp = printTaskLogLines(items, id) ?? lastTimestamp;
|
|
96
|
-
});
|
|
71
|
+
const data = await (0, auth_1.fetchJson)((0, auth_1.apiUrl)(`/task-logs?taskId=${taskId}`));
|
|
72
|
+
if (opts.format === 'table') {
|
|
73
|
+
data.items.forEach(item => console.log(item.message));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
(0, format_js_1.formatOutput)(opts.format === 'json' ? data : data.items, opts.format, format_js_1.taskLogColumns);
|
|
77
|
+
}
|
|
97
78
|
}
|
|
98
79
|
});
|
|
99
80
|
function printLogLines(items, id) {
|
|
@@ -142,4 +123,4 @@ async function pollLogs(initialTimestamp, fetch, onItems) {
|
|
|
142
123
|
});
|
|
143
124
|
});
|
|
144
125
|
}
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLG9CQUFvQixHQUFHLElBQUksbUJBQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUM5RCxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtBQUV4Qyw0QkFBb0I7S0FDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDO0tBQ3ZELFNBQVMsQ0FBQyxJQUFJLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM5RyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQW9ELEVBQUUsRUFBRTtJQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxJQUFBLGFBQU0sRUFBQyxpQ0FBaUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQXlCLENBQUE7SUFDbEgsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUErQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFBLHdCQUFZLEVBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENB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Q3JCLGdCQUFvQyxFQUNwQyxLQUE0QyxFQUM1QyxPQUFtQztJQUVuQyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3hELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUM3QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx5Q0FBeUM7WUFDM0MsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUVSLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdkIsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCB7IGFwaVVybCwgZmV0Y2hKc29uIH0gZnJvbSAnLi4vYXV0aCdcbmltcG9ydCB7IGZvcm1hdE91dHB1dCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMsIHRhc2tMb2dDb2x1bW5zLCB0eXBlIE91dHB1dEZvcm1hdCB9IGZyb20gJy4uL2Zvcm1hdC5qcydcblxuZXhwb3J0IGNvbnN0IHN1Ym1pc3Npb25Mb2dDb21tYW5kID0gbmV3IENvbW1hbmQoJ3N1Ym1pc3Npb24tbG9nJylcbiAgLmRlc2NyaXB0aW9uKCdNYW5hZ2Ugc3VibWlzc2lvbiBsb2dzJylcblxuc3VibWlzc2lvbkxvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ2xpc3QnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgbG9ncyBmb3IgYSBzdWJtaXNzaW9uJylcbiAgLnJlcXVpcmVkT3B0aW9uKCctLXN1Ym1pc3Npb24taWQgPGlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgc3VibWlzc2lvbklkOiBzdHJpbmc7IGZvcm1hdDogT3V0cHV0Rm9ybWF0IH0pID0+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtvcHRzLnN1Ym1pc3Npb25JZH1gKSkgYXMgeyBpdGVtczogdW5rbm93bltdIH1cbiAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucylcbiAgICB9XG4gIH0pXG5cbnN1Ym1pc3Npb25Mb2dDb21tYW5kXG4gIC5jb21tYW5kKCd0YWlsIFtzdWJtaXNzaW9uLWlkXScpXG4gIC5kZXNjcmlwdGlvbignVGFpbCBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgcmVjZW50IGxvZyBsaW5lcyB0byBzaG93JywgJzUwJylcbiAgLm9wdGlvbignLS1mb2xsb3cnLCAnQ29udGludW91c2x5IHBvbGwgZm9yIG5ldyBsb2cgbGluZXMnKVxuICAuYWN0aW9uKGFzeW5jIChzdWJtaXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgb3B0czogeyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgY29uc3QgdXJsID0gc3VibWlzc2lvbklkXG4gICAgICA/IGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mbGltaXQ9JHtsaW1pdH1gXG4gICAgICA6IGAvc3VibWlzc2lvbi1sb2dzP2xpbWl0PSR7bGltaXR9YFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKHVybCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludExvZ0xpbmVzKGRhdGEuaXRlbXMpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlID0gc3VibWlzc2lvbklkXG4gICAgICAgICAgPyBgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9YFxuICAgICAgICAgIDogYC9zdWJtaXNzaW9uLWxvZ3NgXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYCR7YmFzZX0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ0NvbW1hbmQgPSBuZXcgQ29tbWFuZCgndGFzay1sb2cnKVxuICAuZGVzY3JpcHRpb24oJ01hbmFnZSB0YXNrIGxvZ3MnKVxuXG50YXNrTG9nQ29tbWFuZFxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB0YXNrIGxvZ3MgZm9yIGEgc3VibWlzc2lvbicpXG4gIC5yZXF1aXJlZE9wdGlvbignLS1zdWJtaXNzaW9uLWlkIDxpZD4nLCAnU3VibWlzc2lvbiBJRCcpXG4gIC5vcHRpb24oJy0tdGFzay1pZCA8aWQ+JywgJ1Rhc2sgSUQgKG9wdGlvbmFsLCBmaWx0ZXIgYnkgc3BlY2lmaWMgdGFzayknKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQnKS5jaG9pY2VzKFsndGFibGUnLCAnanNvbicsICdjc3YnXSkuZGVmYXVsdCgndGFibGUnKSlcbiAgLmFjdGlvbihhc3luYyAob3B0czogeyBzdWJtaXNzaW9uSWQ6IHN0cmluZzsgdGFza0lkPzogc3RyaW5nOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgbGV0IHVybCA9IGAvdGFzay1sb2dzP3N1Ym1pc3Npb25JZD0ke29wdHMuc3VibWlzc2lvbklkfWBcbiAgICBpZiAob3B0cy50YXNrSWQpIHVybCArPSBgJnRhc2tJZD0ke29wdHMudGFza0lkfWBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybCh1cmwpKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgIGlmIChvcHRzLmZvcm1hdCA9PT0gJ3RhYmxlJykge1xuICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybWF0T3V0cHV0KG9wdHMuZm9ybWF0ID09PSAnanNvbicgPyBkYXRhIDogZGF0YS5pdGVtcywgb3B0cy5mb3JtYXQsIHRhc2tMb2dDb2x1bW5zKVxuICAgIH1cbiAgfSlcblxudGFza0xvZ0NvbW1hbmRcbiAgLmNvbW1hbmQoJ3RhaWwgPHN1Ym1pc3Npb24taWQ+JylcbiAgLmRlc2NyaXB0aW9uKCdUYWlsIGxvZ3MgZm9yIGEgc3VibWlzc2lvbiBvciB0YXNrJylcbiAgLm9wdGlvbignLS10YXNrLWlkIDxpZD4nLCAnVGFzayBJRCAob3B0aW9uYWwsIGZpbHRlciBieSBzcGVjaWZpYyB0YXNrKScpXG4gIC5vcHRpb24oJy0tbGltaXQgPG4+JywgJ051bWJlciBvZiByZWNlbnQgbG9nIGxpbmVzIHRvIHNob3cnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhc2tJZD86IHN0cmluZzsgbGltaXQ6IHN0cmluZzsgZm9sbG93OiBib29sZWFuOyBzaG9ydDogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICBjb25zdCBidWlsZFVybCA9IChzaW5jZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICBwYXJhbXMuc2V0KCdzdWJtaXNzaW9uSWQnLCBzdWJtaXNzaW9uSWQpXG4gICAgICBpZiAob3B0cy50YXNrSWQpIHBhcmFtcy5zZXQoJ3Rhc2tJZCcsIG9wdHMudGFza0lkKVxuICAgICAgaWYgKHNpbmNlKSBwYXJhbXMuc2V0KCdzaW5jZScsIHNpbmNlKVxuICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICByZXR1cm4gYC90YXNrLWxvZ3M/JHtwYXJhbXN9YFxuICAgIH1cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgY29uc3QgaWQgPSAoaXRlbTogVGFza0xvZ0l0ZW0pID0+IG9wdHMuc2hvcnQgPyB1bmRlZmluZWQgOiAoaXRlbS5qb2JOYW1lID8/IGl0ZW0udGFza0lkID8/IG9wdHMudGFza0lkKVxuICAgIGxldCBsYXN0VGltZXN0YW1wID0gcHJpbnRUYXNrTG9nTGluZXMoZGF0YS5pdGVtcywgaWQpXG5cbiAgICBpZiAob3B0cy5mb2xsb3cpIHtcbiAgICAgIGF3YWl0IHBvbGxMb2dzKGxhc3RUaW1lc3RhbXAsIGFzeW5jIChzaW5jZSkgPT4ge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICByZXR1cm4gcmVzLml0ZW1zXG4gICAgICB9LCAoaXRlbXMpID0+IHtcbiAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBMkM7QUFDM0Msa0NBQTJDO0FBQzNDLDRDQUFvRztBQUV2RixRQUFBLGNBQWMsR0FBRyxJQUFJLG1CQUFPLENBQUMsTUFBTSxDQUFDO0tBQzlDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO0tBQzVDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsdUNBQXVDLENBQUM7S0FDekQsTUFBTSxDQUFDLGFBQWEsRUFBRSxxQ0FBcUMsRUFBRSxJQUFJLENBQUM7S0FDbEUsTUFBTSxDQUFDLFVBQVUsRUFBRSxxQ0FBcUMsQ0FBQztLQUN6RCxTQUFTLENBQUMsSUFBSSxrQkFBTSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDOUcsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFvQixFQUFFLElBQTZFLEVBQUUsRUFBRTtJQUNwSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxnQkFBUyxFQUFDLElBQUEsYUFBTSxFQUFDLGlDQUFpQyxZQUFZLFVBQVUsS0FBSyxFQUFFLENBQUMsQ0FBeUIsQ0FBQTtRQUM1SCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1B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O0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IHsgYXBpVXJsLCBmZXRjaEpzb24gfSBmcm9tICcuLi9hdXRoJ1xuaW1wb3J0IHsgZm9ybWF0T3V0cHV0LCBzdWJtaXNzaW9uTG9nQ29sdW1ucywgdGFza0xvZ0NvbHVtbnMsIHR5cGUgT3V0cHV0Rm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0LmpzJ1xuXG5leHBvcnQgY29uc3QgbG9nc1N1YmNvbW1hbmQgPSBuZXcgQ29tbWFuZCgnbG9ncycpXG4gIC5kZXNjcmlwdGlvbignVmlldyBsb2dzIGZvciBhIHN1Ym1pc3Npb24nKVxuICAuYXJndW1lbnQoJzxzdWJtaXNzaW9uLWlkPicsICdTdWJtaXNzaW9uIElEJylcbiAgLm9wdGlvbignLS10YWlsJywgJ1Nob3cgbGFzdCBOIGxpbmVzIGluc3RlYWQgb2YgYWxsIGxvZ3MnKVxuICAub3B0aW9uKCctLWxpbWl0IDxuPicsICdOdW1iZXIgb2YgbGluZXMgdG8gc2hvdyB3aXRoIC0tdGFpbCcsICc1MCcpXG4gIC5vcHRpb24oJy0tZm9sbG93JywgJ0NvbnRpbnVvdXNseSBwb2xsIGZvciBuZXcgbG9nIGxpbmVzJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0JykuY2hvaWNlcyhbJ3RhYmxlJywgJ2pzb24nLCAnY3N2J10pLmRlZmF1bHQoJ3RhYmxlJykpXG4gIC5hY3Rpb24oYXN5bmMgKHN1Ym1pc3Npb25JZDogc3RyaW5nLCBvcHRzOiB7IHRhaWw6IGJvb2xlYW47IGxpbWl0OiBzdHJpbmc7IGZvbGxvdzogYm9vbGVhbjsgZm9ybWF0OiBPdXRwdXRGb3JtYXQgfSkgPT4ge1xuICAgIGlmIChvcHRzLnRhaWwgfHwgb3B0cy5mb2xsb3cpIHtcbiAgICAgIGNvbnN0IGxpbWl0ID0gcGFyc2VJbnQob3B0cy5saW1pdCwgMTApXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3N1Ym1pc3Npb24tbG9ncz9zdWJtaXNzaW9uSWQ9JHtzdWJtaXNzaW9uSWR9JmxpbWl0PSR7bGltaXR9YCkpIGFzIHsgaXRlbXM6IExvZ0l0ZW1bXSB9XG4gICAgICBsZXQgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoZGF0YS5pdGVtcylcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGAvc3VibWlzc2lvbi1sb2dzP3N1Ym1pc3Npb25JZD0ke3N1Ym1pc3Npb25JZH0mc2luY2U9JHtlbmNvZGVVUklDb21wb25lbnQoc2luY2UpfWApKSBhcyB7IGl0ZW1zOiBMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50TG9nTGluZXMoaXRlbXMpID8/IGxhc3RUaW1lc3RhbXBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoSnNvbihhcGlVcmwoYC9zdWJtaXNzaW9uLWxvZ3M/c3VibWlzc2lvbklkPSR7c3VibWlzc2lvbklkfWApKSBhcyB7IGl0ZW1zOiB1bmtub3duW10gfVxuICAgICAgaWYgKG9wdHMuZm9ybWF0ID09PSAndGFibGUnKSB7XG4gICAgICAgIChkYXRhLml0ZW1zIGFzIHsgbWVzc2FnZTogc3RyaW5nIH1bXSkuZm9yRWFjaChpdGVtID0+IGNvbnNvbGUubG9nKGl0ZW0ubWVzc2FnZSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXRPdXRwdXQob3B0cy5mb3JtYXQgPT09ICdqc29uJyA/IGRhdGEgOiBkYXRhLml0ZW1zLCBvcHRzLmZvcm1hdCwgc3VibWlzc2lvbkxvZ0NvbHVtbnMpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG5leHBvcnQgY29uc3QgdGFza0xvZ3NTdWJjb21tYW5kID0gbmV3IENvbW1hbmQoJ2xvZ3MnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgbG9ncyBmb3IgYSB0YXNrJylcbiAgLmFyZ3VtZW50KCc8dGFzay1pZD4nLCAnVGFzayBJRCcpXG4gIC5vcHRpb24oJy0tdGFpbCcsICdTaG93IGxhc3QgTiBsaW5lcyBpbnN0ZWFkIG9mIGFsbCBsb2dzJylcbiAgLm9wdGlvbignLS1saW1pdCA8bj4nLCAnTnVtYmVyIG9mIGxpbmVzIHRvIHNob3cgd2l0aCAtLXRhaWwnLCAnNTAnKVxuICAub3B0aW9uKCctLWZvbGxvdycsICdDb250aW51b3VzbHkgcG9sbCBmb3IgbmV3IGxvZyBsaW5lcycpXG4gIC5vcHRpb24oJy0tc2hvcnQnLCAnT21pdCB0YXNrIElEIHByZWZpeCcpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCcpLmNob2ljZXMoWyd0YWJsZScsICdqc29uJywgJ2NzdiddKS5kZWZhdWx0KCd0YWJsZScpKVxuICAuYWN0aW9uKGFzeW5jICh0YXNrSWQ6IHN0cmluZywgb3B0czogeyB0YWlsOiBib29sZWFuOyBsaW1pdDogc3RyaW5nOyBmb2xsb3c6IGJvb2xlYW47IHNob3J0OiBib29sZWFuOyBmb3JtYXQ6IE91dHB1dEZvcm1hdCB9KSA9PiB7XG4gICAgaWYgKG9wdHMudGFpbCB8fCBvcHRzLmZvbGxvdykge1xuICAgICAgY29uc3QgbGltaXQgPSBwYXJzZUludChvcHRzLmxpbWl0LCAxMClcbiAgICAgIGNvbnN0IGJ1aWxkVXJsID0gKHNpbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICBwYXJhbXMuc2V0KCd0YXNrSWQnLCB0YXNrSWQpXG4gICAgICAgIGlmIChzaW5jZSkgcGFyYW1zLnNldCgnc2luY2UnLCBzaW5jZSlcbiAgICAgICAgZWxzZSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpXG4gICAgICAgIHJldHVybiBgL3Rhc2stbG9ncz8ke3BhcmFtc31gXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChidWlsZFVybCgpKSkgYXMgeyBpdGVtczogVGFza0xvZ0l0ZW1bXSB9XG4gICAgICBjb25zdCBpZCA9IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gb3B0cy5zaG9ydCA/IHVuZGVmaW5lZCA6IChpdGVtLmpvYk5hbWUgPz8gaXRlbS50YXNrSWQgPz8gdGFza0lkKVxuICAgICAgbGV0IGxhc3RUaW1lc3RhbXAgPSBwcmludFRhc2tMb2dMaW5lcyhkYXRhLml0ZW1zLCBpZClcbiAgICAgIGlmIChvcHRzLmZvbGxvdykge1xuICAgICAgICBhd2FpdCBwb2xsTG9ncyhsYXN0VGltZXN0YW1wLCBhc3luYyAoc2luY2UpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEpzb24oYXBpVXJsKGJ1aWxkVXJsKHNpbmNlKSkpIGFzIHsgaXRlbXM6IFRhc2tMb2dJdGVtW10gfVxuICAgICAgICAgIHJldHVybiByZXMuaXRlbXNcbiAgICAgICAgfSwgKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgbGFzdFRpbWVzdGFtcCA9IHByaW50VGFza0xvZ0xpbmVzKGl0ZW1zLCBpZCkgPz8gbGFzdFRpbWVzdGFtcFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hKc29uKGFwaVVybChgL3Rhc2stbG9ncz90YXNrSWQ9JHt0YXNrSWR9YCkpIGFzIHsgaXRlbXM6IHVua25vd25bXSB9XG4gICAgICBpZiAob3B0cy5mb3JtYXQgPT09ICd0YWJsZScpIHtcbiAgICAgICAgKGRhdGEuaXRlbXMgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfVtdKS5mb3JFYWNoKGl0ZW0gPT4gY29uc29sZS5sb2coaXRlbS5tZXNzYWdlKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvcm1hdE91dHB1dChvcHRzLmZvcm1hdCA9PT0gJ2pzb24nID8gZGF0YSA6IGRhdGEuaXRlbXMsIG9wdHMuZm9ybWF0LCB0YXNrTG9nQ29sdW1ucylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbmludGVyZmFjZSBMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBUYXNrTG9nSXRlbSBleHRlbmRzIExvZ0l0ZW0ge1xuICB0YXNrSWQ/OiBzdHJpbmdcbiAgam9iTmFtZT86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBwcmludExvZ0xpbmVzKGl0ZW1zOiBMb2dJdGVtW10sIGlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGlmIChpZCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2lkfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke2l0ZW0ubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnRpbWVzdGFtcCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwcmludFRhc2tMb2dMaW5lcyhpdGVtczogVGFza0xvZ0l0ZW1bXSwgaWQ6IChpdGVtOiBUYXNrTG9nSXRlbSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdHMgPSBuZXcgRGF0ZShpdGVtLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgIGNvbnN0IHByZWZpeCA9IGlkKGl0ZW0pXG4gICAgaWYgKHByZWZpeCkge1xuICAgICAgY29uc29sZS5sb2coYCR7dHN9ICAke3ByZWZpeH0gICR7aXRlbS5tZXNzYWdlfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGAke3RzfSAgJHtpdGVtLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS50aW1lc3RhbXAgOiB1bmRlZmluZWRcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9sbExvZ3MoXG4gIGluaXRpYWxUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmV0Y2g6IChzaW5jZTogc3RyaW5nKSA9PiBQcm9taXNlPExvZ0l0ZW1bXT4sXG4gIG9uSXRlbXM6IChpdGVtczogTG9nSXRlbVtdKSA9PiB2b2lkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBzaW5jZSA9IGluaXRpYWxUaW1lc3RhbXAgPz8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBhd2FpdCBmZXRjaChzaW5jZSlcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvbkl0ZW1zKGl0ZW1zKVxuICAgICAgICAgIHNpbmNlID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0udGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgdHJhbnNpZW50IGVycm9ycyBkdXJpbmcgcG9sbGluZ1xuICAgICAgfVxuICAgIH0sIDMwMDApXG5cbiAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZSgpXG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
|
package/dist/commands/login.js
CHANGED
|
@@ -2,23 +2,57 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.loginCommand = void 0;
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
|
+
const readline_1 = require("readline");
|
|
5
6
|
const auth_1 = require("../auth");
|
|
7
|
+
async function prompt(question) {
|
|
8
|
+
const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
9
|
+
return new Promise(resolve => rl.question(question, answer => { rl.close(); resolve(answer); }));
|
|
10
|
+
}
|
|
11
|
+
async function promptPassword(question) {
|
|
12
|
+
process.stdout.write(question);
|
|
13
|
+
process.stdin.setRawMode(true);
|
|
14
|
+
process.stdin.resume();
|
|
15
|
+
process.stdin.setEncoding('utf8');
|
|
16
|
+
return new Promise(resolve => {
|
|
17
|
+
let password = '';
|
|
18
|
+
process.stdin.on('data', function handler(ch) {
|
|
19
|
+
if (ch === '\n' || ch === '\r' || ch === '') {
|
|
20
|
+
process.stdin.setRawMode(false);
|
|
21
|
+
process.stdin.pause();
|
|
22
|
+
process.stdin.removeListener('data', handler);
|
|
23
|
+
process.stdout.write('\n');
|
|
24
|
+
resolve(password);
|
|
25
|
+
}
|
|
26
|
+
else if (ch === '' || ch === '\b') {
|
|
27
|
+
if (password.length > 0) {
|
|
28
|
+
password = password.slice(0, -1);
|
|
29
|
+
process.stdout.write('\b \b');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
password += ch;
|
|
34
|
+
process.stdout.write('*');
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
6
39
|
exports.loginCommand = new commander_1.Command('login')
|
|
7
40
|
.description('Login into GENI Workflows and store credentials')
|
|
8
|
-
.option('--email <email>', 'User email')
|
|
9
41
|
.option('--password <password>', 'User password')
|
|
10
42
|
.action(async (opts) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
43
|
+
const email = await prompt('Email: ');
|
|
44
|
+
const password = opts.password ?? await promptPassword('Password: ');
|
|
45
|
+
if (!email || !password) {
|
|
46
|
+
console.error('Email and password are required.');
|
|
47
|
+
process.exit(1);
|
|
14
48
|
}
|
|
15
49
|
const res = await fetch((0, auth_1.apiUrl)('/auth/login'), {
|
|
16
50
|
method: 'POST',
|
|
17
51
|
headers: { 'Content-Type': 'application/json' },
|
|
18
|
-
body: JSON.stringify({ email
|
|
52
|
+
body: JSON.stringify({ email, password }),
|
|
19
53
|
});
|
|
20
54
|
const data = await (0, auth_1.readJsonResponse)(res, { method: 'POST', url: (0, auth_1.apiUrl)('/auth/login') });
|
|
21
55
|
(0, auth_1.saveCredentials)(data.accessToken);
|
|
22
56
|
console.log('Logged in. Credentials saved to ~/.geni/credentials.json');
|
|
23
57
|
});
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQW9DO0FBQ3BDLHVDQUEyQztBQUMzQyxrQ0FBb0U7QUFFcEUsS0FBSyxVQUFVLE1BQU0sQ0FBQyxRQUFnQjtJQUNwQyxNQUFNLEVBQUUsR0FBRyxJQUFBLDBCQUFlLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxRQUFnQjtJQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLE9BQU8sQ0FBQyxFQUFVO1lBQ2xELElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxZQUFZLEdBQUcsSUFBSSxtQkFBTyxDQUFDLE9BQU8sQ0FBQztLQUM3QyxXQUFXLENBQUMsaURBQWlELENBQUM7S0FDOUQsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGVBQWUsQ0FBQztLQUNoRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQTJCLEVBQUUsRUFBRTtJQUM1QyxNQUFNLEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3JFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBQSxhQUFNLEVBQUMsYUFBYSxDQUFDLEVBQUU7UUFDN0MsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7UUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUEsYUFBTSxFQUFDLGFBQWEsQ0FBQyxFQUFFLENBRXRGLENBQUM7SUFDRixJQUFBLHNCQUFlLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJmYWNlIH0gZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0IHsgYXBpVXJsLCByZWFkSnNvblJlc3BvbnNlLCBzYXZlQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9hdXRoJztcblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IGNyZWF0ZUludGVyZmFjZSh7IGlucHV0OiBwcm9jZXNzLnN0ZGluLCBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0IH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybC5xdWVzdGlvbihxdWVzdGlvbiwgYW5zd2VyID0+IHsgcmwuY2xvc2UoKTsgcmVzb2x2ZShhbnN3ZXIpOyB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdFBhc3N3b3JkKHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShxdWVzdGlvbik7XG4gIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcbiAgcHJvY2Vzcy5zdGRpbi5zZXRFbmNvZGluZygndXRmOCcpO1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgbGV0IHBhc3N3b3JkID0gJyc7XG4gICAgcHJvY2Vzcy5zdGRpbi5vbignZGF0YScsIGZ1bmN0aW9uIGhhbmRsZXIoY2g6IHN0cmluZykge1xuICAgICAgaWYgKGNoID09PSAnXFxuJyB8fCBjaCA9PT0gJ1xccicgfHwgY2ggPT09ICdcdTAwMDMnKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4ucGF1c2UoKTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5yZW1vdmVMaXN0ZW5lcignZGF0YScsIGhhbmRsZXIpO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG4gICAgICAgIHJlc29sdmUocGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ38nIHx8IGNoID09PSAnXFxiJykge1xuICAgICAgICBpZiAocGFzc3dvcmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXGIgXFxiJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3N3b3JkICs9IGNoO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnKicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvZ2luQ29tbWFuZCA9IG5ldyBDb21tYW5kKCdsb2dpbicpXG4gIC5kZXNjcmlwdGlvbignTG9naW4gaW50byBHRU5JIFdvcmtmbG93cyBhbmQgc3RvcmUgY3JlZGVudGlhbHMnKVxuICAub3B0aW9uKCctLXBhc3N3b3JkIDxwYXNzd29yZD4nLCAnVXNlciBwYXNzd29yZCcpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgcGFzc3dvcmQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IGVtYWlsID0gYXdhaXQgcHJvbXB0KCdFbWFpbDogJyk7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBvcHRzLnBhc3N3b3JkID8/IGF3YWl0IHByb21wdFBhc3N3b3JkKCdQYXNzd29yZDogJyk7XG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VtYWlsIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQuJyk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGFwaVVybCgnL2F1dGgvbG9naW4nKSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZW1haWwsIHBhc3N3b3JkIH0pLFxuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkSnNvblJlc3BvbnNlKHJlcywgeyBtZXRob2Q6ICdQT1NUJywgdXJsOiBhcGlVcmwoJy9hdXRoL2xvZ2luJykgfSkgYXMge1xuICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICB9O1xuICAgIHNhdmVDcmVkZW50aWFscyhkYXRhLmFjY2Vzc1Rva2VuKTtcbiAgICBjb25zb2xlLmxvZygnTG9nZ2VkIGluLiBDcmVkZW50aWFscyBzYXZlZCB0byB+Ly5nZW5pL2NyZWRlbnRpYWxzLmpzb24nKTtcbiAgfSk7XG4iXX0=
|