@sente-labs/cli 0.11.0 → 0.14.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.
- package/README.md +73 -46
- package/dist/client.js +12 -3
- package/dist/client.js.map +1 -1
- package/dist/commands/inbox.js +30 -4
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/registration.js +211 -0
- package/dist/commands/registration.js.map +1 -0
- package/dist/config.js +0 -27
- package/dist/config.js.map +1 -1
- package/dist/index.js +5 -27
- package/dist/index.js.map +1 -1
- package/dist/{skill/autoupdate.js → update.js} +10 -47
- package/dist/update.js.map +1 -0
- package/package.json +3 -3
- package/dist/commands/appGraph.js +0 -110
- package/dist/commands/appGraph.js.map +0 -1
- package/dist/commands/auth.js +0 -54
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/deployWebhook.js +0 -94
- package/dist/commands/deployWebhook.js.map +0 -1
- package/dist/commands/init.js +0 -209
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/project.js +0 -283
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/schedule.js +0 -188
- package/dist/commands/schedule.js.map +0 -1
- package/dist/commands/secret.js +0 -245
- package/dist/commands/secret.js.map +0 -1
- package/dist/commands/task.js +0 -425
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/workflow.js +0 -69
- package/dist/commands/workflow.js.map +0 -1
- package/dist/skill/SKILL.md +0 -93
- package/dist/skill/autoupdate.js.map +0 -1
- package/dist/skill/template.js +0 -68
- package/dist/skill/template.js.map +0 -1
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerScheduleCommands = registerScheduleCommands;
|
|
4
|
-
const client_1 = require("../client");
|
|
5
|
-
const output_1 = require("../output");
|
|
6
|
-
/**
|
|
7
|
-
* Parse a human-friendly interval string ("30m", "1h", "2d", "1w") into the
|
|
8
|
-
* gateway's `{intervalValue, intervalUnit}` shape. Accepts bare units too:
|
|
9
|
-
* "minute(s)", "hour(s)", "day(s)", "week(s)" -- always lower-case.
|
|
10
|
-
*/
|
|
11
|
-
function parseInterval(raw) {
|
|
12
|
-
const trimmed = raw.trim().toLowerCase();
|
|
13
|
-
// Shorthand first: "30m", "1h", "2d", "1w".
|
|
14
|
-
const shortMatch = trimmed.match(/^(\d+)\s*([smhdw])$/);
|
|
15
|
-
if (shortMatch) {
|
|
16
|
-
const value = parseInt(shortMatch[1], 10);
|
|
17
|
-
const u = shortMatch[2];
|
|
18
|
-
const unit = u === 'm' ? 'minutes' : u === 'h' ? 'hours' : u === 'd' ? 'days' : u === 'w' ? 'weeks' : null;
|
|
19
|
-
if (unit && value > 0)
|
|
20
|
-
return { intervalValue: value, intervalUnit: unit };
|
|
21
|
-
}
|
|
22
|
-
// Long form: "5 minutes", "1 hour", "3 days", "2 weeks".
|
|
23
|
-
const longMatch = trimmed.match(/^(\d+)\s*(minute|minutes|hour|hours|day|days|week|weeks)$/);
|
|
24
|
-
if (longMatch) {
|
|
25
|
-
const value = parseInt(longMatch[1], 10);
|
|
26
|
-
const u = longMatch[2];
|
|
27
|
-
const unit = u.startsWith('minute') ? 'minutes' : u.startsWith('hour') ? 'hours' : u.startsWith('day') ? 'days' : 'weeks';
|
|
28
|
-
if (value > 0)
|
|
29
|
-
return { intervalValue: value, intervalUnit: unit };
|
|
30
|
-
}
|
|
31
|
-
throw new Error(`Could not parse interval "${raw}". Use e.g. "30m", "1h", "2d", "1w" or "5 minutes", "1 hour".`);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Translate CLI flags into the gateway's schedule body. Exactly one of
|
|
35
|
-
* `--interval`, `--cron`, `--at` must be set.
|
|
36
|
-
*/
|
|
37
|
-
function buildScheduleBody(opts) {
|
|
38
|
-
const provided = [opts.interval, opts.cron, opts.at].filter(Boolean).length;
|
|
39
|
-
if (provided === 0) {
|
|
40
|
-
throw new Error('Pass exactly one of --interval, --cron, or --at.');
|
|
41
|
-
}
|
|
42
|
-
if (provided > 1) {
|
|
43
|
-
throw new Error('--interval, --cron, and --at are mutually exclusive.');
|
|
44
|
-
}
|
|
45
|
-
const enabled = !opts.disabled;
|
|
46
|
-
const timezone = opts.timezone ?? 'UTC';
|
|
47
|
-
if (opts.interval) {
|
|
48
|
-
const { intervalValue, intervalUnit } = parseInterval(opts.interval);
|
|
49
|
-
return { scheduleType: 'interval', intervalValue, intervalUnit, timezone, enabled };
|
|
50
|
-
}
|
|
51
|
-
if (opts.cron) {
|
|
52
|
-
return { scheduleType: 'cron', cronExpression: opts.cron, timezone, enabled };
|
|
53
|
-
}
|
|
54
|
-
// one_time
|
|
55
|
-
const date = new Date(opts.at);
|
|
56
|
-
if (Number.isNaN(date.getTime())) {
|
|
57
|
-
throw new Error(`Could not parse --at "${opts.at}". Use ISO 8601 (e.g. "2026-12-31T17:00:00Z").`);
|
|
58
|
-
}
|
|
59
|
-
return { scheduleType: 'one_time', scheduledAt: date.toISOString(), timezone, enabled };
|
|
60
|
-
}
|
|
61
|
-
function describeSchedule(s) {
|
|
62
|
-
switch (s.scheduleType) {
|
|
63
|
-
case 'interval':
|
|
64
|
-
return `every ${s.intervalValue} ${s.intervalUnit}`;
|
|
65
|
-
case 'cron':
|
|
66
|
-
return `cron "${s.cronExpression}" (${s.timezone})`;
|
|
67
|
-
case 'one_time':
|
|
68
|
-
return `once at ${s.scheduledAt}`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function registerScheduleCommands(program, globalOpts) {
|
|
72
|
-
const schedule = program.command('schedule').description('Task schedule commands');
|
|
73
|
-
schedule
|
|
74
|
-
.command('set')
|
|
75
|
-
.description('Create or replace a task schedule')
|
|
76
|
-
.argument('<taskId>', 'task id (or shortId)')
|
|
77
|
-
.option('--interval <duration>', 'recurring interval (e.g. 30m, 1h, 2d, 1w)')
|
|
78
|
-
.option('--cron <expression>', 'cron expression (e.g. "0 */2 * * *")')
|
|
79
|
-
.option('--at <iso>', 'run once at this ISO 8601 datetime')
|
|
80
|
-
.option('--timezone <tz>', 'IANA timezone for cron schedules', 'UTC')
|
|
81
|
-
.option('--disabled', 'create the schedule but leave it disabled')
|
|
82
|
-
.action(async (taskId, cmdOpts) => {
|
|
83
|
-
const opts = globalOpts();
|
|
84
|
-
try {
|
|
85
|
-
const body = buildScheduleBody(cmdOpts);
|
|
86
|
-
const client = new client_1.GatewayClient();
|
|
87
|
-
// POST creates, PUT updates. Try create first; on 409 fall back to update.
|
|
88
|
-
let res;
|
|
89
|
-
try {
|
|
90
|
-
res = await client.request(`/api/tasks/${taskId}/schedule`, {
|
|
91
|
-
method: 'POST',
|
|
92
|
-
body,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
if (err instanceof client_1.ApiError && err.status === 409) {
|
|
97
|
-
res = await client.request(`/api/tasks/${taskId}/schedule`, {
|
|
98
|
-
method: 'PUT',
|
|
99
|
-
body,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
throw err;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
(0, output_1.printSuccess)({ schedule: res.schedule }, () => {
|
|
107
|
-
const s = res.schedule;
|
|
108
|
-
process.stdout.write(`Schedule ${s.id}: ${describeSchedule(s)}${s.enabled ? '' : ' (disabled)'}\n`);
|
|
109
|
-
if (s.nextRunAt) {
|
|
110
|
-
process.stdout.write(`Next run: ${s.nextRunAt}\n`);
|
|
111
|
-
}
|
|
112
|
-
}, opts);
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
schedule
|
|
119
|
-
.command('show')
|
|
120
|
-
.description('Show the schedule attached to a task (if any)')
|
|
121
|
-
.argument('<taskId>', 'task id')
|
|
122
|
-
.action(async (taskId) => {
|
|
123
|
-
const opts = globalOpts();
|
|
124
|
-
try {
|
|
125
|
-
const client = new client_1.GatewayClient();
|
|
126
|
-
const res = await client.request(`/api/tasks/${taskId}/schedule`);
|
|
127
|
-
(0, output_1.printSuccess)({ schedule: res.schedule }, () => {
|
|
128
|
-
if (!res.schedule) {
|
|
129
|
-
process.stdout.write('No schedule attached.\n');
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
const s = res.schedule;
|
|
133
|
-
process.stdout.write(`${describeSchedule(s)}${s.enabled ? '' : ' (disabled)'}\n`);
|
|
134
|
-
if (s.nextRunAt)
|
|
135
|
-
process.stdout.write(`Next run: ${s.nextRunAt}\n`);
|
|
136
|
-
if (s.lastRunAt) {
|
|
137
|
-
process.stdout.write(`Last run: ${s.lastRunAt}${s.lastRunStatus ? ` (${s.lastRunStatus})` : ''}\n`);
|
|
138
|
-
}
|
|
139
|
-
}, opts);
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
schedule
|
|
146
|
-
.command('remove')
|
|
147
|
-
.description('Remove the schedule attached to a task')
|
|
148
|
-
.argument('<taskId>', 'task id')
|
|
149
|
-
.action(async (taskId) => {
|
|
150
|
-
const opts = globalOpts();
|
|
151
|
-
try {
|
|
152
|
-
const client = new client_1.GatewayClient();
|
|
153
|
-
await client.request(`/api/tasks/${taskId}/schedule`, { method: 'DELETE' });
|
|
154
|
-
(0, output_1.printSuccess)({ ok: true, taskId }, `Removed schedule from task ${taskId}`, opts);
|
|
155
|
-
}
|
|
156
|
-
catch (err) {
|
|
157
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
schedule
|
|
161
|
-
.command('list')
|
|
162
|
-
.description('List scheduled tasks in the current organization')
|
|
163
|
-
.option('--limit <n>', 'max rows (default 10, max 50)', '10')
|
|
164
|
-
.action(async (cmdOpts) => {
|
|
165
|
-
const opts = globalOpts();
|
|
166
|
-
try {
|
|
167
|
-
const limit = Math.max(1, Math.min(50, parseInt(cmdOpts.limit, 10) || 10));
|
|
168
|
-
const client = new client_1.GatewayClient();
|
|
169
|
-
const res = await client.request('/api/tasks/scheduled', {
|
|
170
|
-
query: { limit },
|
|
171
|
-
});
|
|
172
|
-
(0, output_1.printSuccess)({ total: res.total, schedules: res.schedules }, () => {
|
|
173
|
-
if (res.schedules.length === 0) {
|
|
174
|
-
process.stdout.write('No scheduled tasks.\n');
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
for (const s of res.schedules) {
|
|
178
|
-
const line = `${s.taskId} ${describeSchedule(s.schedule).padEnd(28)} ${s.projectName} / ${s.workflowName} / ${s.taskName}`;
|
|
179
|
-
process.stdout.write(`${line}\n`);
|
|
180
|
-
}
|
|
181
|
-
}, opts);
|
|
182
|
-
}
|
|
183
|
-
catch (err) {
|
|
184
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=schedule.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/secret.js
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.registerSecretCommands = registerSecretCommands;
|
|
37
|
-
const readline = __importStar(require("readline"));
|
|
38
|
-
const client_1 = require("../client");
|
|
39
|
-
const output_1 = require("../output");
|
|
40
|
-
/**
|
|
41
|
-
* Read a secret value securely from the user. Two paths:
|
|
42
|
-
* - TTY interactive: prompt with input masking (no echo). User pastes value.
|
|
43
|
-
* - Non-TTY / --value-stdin: read entire stdin until EOF, strip trailing newline.
|
|
44
|
-
*
|
|
45
|
-
* We intentionally do NOT accept a `--value <plain>` flag because it leaks the
|
|
46
|
-
* value to shell history. `--value-stdin` is the only programmatic path.
|
|
47
|
-
*/
|
|
48
|
-
async function readSecretValue(useStdin) {
|
|
49
|
-
if (useStdin || !process.stdin.isTTY) {
|
|
50
|
-
return readAllStdin();
|
|
51
|
-
}
|
|
52
|
-
return promptHidden('Secret value (input hidden): ');
|
|
53
|
-
}
|
|
54
|
-
function readAllStdin() {
|
|
55
|
-
return new Promise((resolve, reject) => {
|
|
56
|
-
let data = '';
|
|
57
|
-
process.stdin.setEncoding('utf8');
|
|
58
|
-
process.stdin.on('data', (chunk) => (data += chunk));
|
|
59
|
-
process.stdin.on('end', () => resolve(data.replace(/\n+$/, '')));
|
|
60
|
-
process.stdin.on('error', reject);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* readline-based hidden prompt. Echoes nothing while the user types so the
|
|
65
|
-
* secret never appears on-screen or in scrollback. Falls back to plain prompt
|
|
66
|
-
* if stdin isn't a TTY (shouldn't happen since the caller already gates this).
|
|
67
|
-
*/
|
|
68
|
-
function promptHidden(question) {
|
|
69
|
-
return new Promise((resolve) => {
|
|
70
|
-
const rl = readline.createInterface({
|
|
71
|
-
input: process.stdin,
|
|
72
|
-
output: process.stdout,
|
|
73
|
-
terminal: true,
|
|
74
|
-
});
|
|
75
|
-
// Mute the output stream during input so keystrokes don't echo.
|
|
76
|
-
const stdoutWrite = process.stdout.write.bind(process.stdout);
|
|
77
|
-
let muted = false;
|
|
78
|
-
rl._writeToOutput = (str) => {
|
|
79
|
-
if (muted) {
|
|
80
|
-
// After we mute, only let the newline at the end pass.
|
|
81
|
-
if (str.includes('\n'))
|
|
82
|
-
stdoutWrite('\n');
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
stdoutWrite(str);
|
|
86
|
-
};
|
|
87
|
-
rl.question(question, (answer) => {
|
|
88
|
-
rl.close();
|
|
89
|
-
resolve(answer);
|
|
90
|
-
});
|
|
91
|
-
muted = true;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
function promptText(question, fallback) {
|
|
95
|
-
return new Promise((resolve) => {
|
|
96
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
97
|
-
const suffix = fallback ? ` [${fallback}]` : '';
|
|
98
|
-
rl.question(`${question}${suffix}: `, (answer) => {
|
|
99
|
-
rl.close();
|
|
100
|
-
resolve(answer.trim() || fallback || '');
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
function registerSecretCommands(program, globalOpts) {
|
|
105
|
-
const secret = program.command('secret').description('Secret commands');
|
|
106
|
-
secret
|
|
107
|
-
.command('create')
|
|
108
|
-
.description('Create a new secret in the current organization')
|
|
109
|
-
.requiredOption('--name <key>', 'secret key (referenced in steps as {{secret.name}})')
|
|
110
|
-
.option('--description <text>', 'human-readable description')
|
|
111
|
-
.option('--target-url <url>', 'restrict secret to matching URLs')
|
|
112
|
-
.option('--project <id>', 'link the new secret to this project (repeatable)', collect, [])
|
|
113
|
-
.option('--value-stdin', 'read the secret value from stdin (use for piping)')
|
|
114
|
-
.action(async (cmdOpts) => {
|
|
115
|
-
const opts = globalOpts();
|
|
116
|
-
try {
|
|
117
|
-
const value = await readSecretValue(!!cmdOpts.valueStdin);
|
|
118
|
-
if (!value) {
|
|
119
|
-
throw new Error('Secret value is required.');
|
|
120
|
-
}
|
|
121
|
-
// Description is required by the gateway. Prompt for one if missing.
|
|
122
|
-
let description = cmdOpts.description;
|
|
123
|
-
if (!description) {
|
|
124
|
-
if (process.stdin.isTTY && !cmdOpts.valueStdin && !(0, output_1.isJson)(opts)) {
|
|
125
|
-
description = await promptText('Description (visible to the agent)');
|
|
126
|
-
}
|
|
127
|
-
if (!description) {
|
|
128
|
-
// Use the key as a fallback so the create still works in
|
|
129
|
-
// non-interactive contexts without a separate flag.
|
|
130
|
-
description = cmdOpts.name;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
const client = new client_1.GatewayClient();
|
|
134
|
-
const res = await client.request('/api/secrets', {
|
|
135
|
-
method: 'POST',
|
|
136
|
-
body: {
|
|
137
|
-
key: cmdOpts.name,
|
|
138
|
-
description,
|
|
139
|
-
type: 'simple',
|
|
140
|
-
value,
|
|
141
|
-
targetUrl: cmdOpts.targetUrl,
|
|
142
|
-
projectIds: cmdOpts.project.length > 0 ? cmdOpts.project : undefined,
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
(0, output_1.printSuccess)({ secret: redact(res.secret) }, () => {
|
|
146
|
-
const s = res.secret;
|
|
147
|
-
process.stdout.write(`Created secret: ${s.key} (${s.id})\n`);
|
|
148
|
-
if (s.targetUrl)
|
|
149
|
-
process.stdout.write(`Target URL: ${s.targetUrl}\n`);
|
|
150
|
-
if (cmdOpts.project.length > 0) {
|
|
151
|
-
process.stdout.write(`Linked to ${cmdOpts.project.length} project(s).\n`);
|
|
152
|
-
}
|
|
153
|
-
process.stdout.write(`Reference in steps as: {{secret.${s.key}}}\n`);
|
|
154
|
-
}, opts);
|
|
155
|
-
}
|
|
156
|
-
catch (err) {
|
|
157
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
secret
|
|
161
|
-
.command('list')
|
|
162
|
-
.description('List secrets visible to the current user')
|
|
163
|
-
.action(async () => {
|
|
164
|
-
const opts = globalOpts();
|
|
165
|
-
try {
|
|
166
|
-
const client = new client_1.GatewayClient();
|
|
167
|
-
const res = await client.request('/api/secrets');
|
|
168
|
-
(0, output_1.printSuccess)({ secrets: res.secrets.map(redact) }, () => {
|
|
169
|
-
if (res.secrets.length === 0) {
|
|
170
|
-
process.stdout.write('No secrets found.\n');
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
for (const s of res.secrets) {
|
|
174
|
-
const projects = s.linkedProjects?.length
|
|
175
|
-
? ` -> ${s.linkedProjects.map((p) => p.name).join(', ')}`
|
|
176
|
-
: '';
|
|
177
|
-
process.stdout.write(`${s.id} ${s.key.padEnd(28)} ${s.type}${projects}\n`);
|
|
178
|
-
}
|
|
179
|
-
}, opts);
|
|
180
|
-
}
|
|
181
|
-
catch (err) {
|
|
182
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
secret
|
|
186
|
-
.command('link')
|
|
187
|
-
.description('Link a secret to a project')
|
|
188
|
-
.argument('<secretId>', 'secret id')
|
|
189
|
-
.argument('<projectId>', 'project id')
|
|
190
|
-
.action(async (secretId, projectId) => {
|
|
191
|
-
const opts = globalOpts();
|
|
192
|
-
try {
|
|
193
|
-
const client = new client_1.GatewayClient();
|
|
194
|
-
await client.request(`/api/secrets/${secretId}/link/${projectId}`, { method: 'POST' });
|
|
195
|
-
(0, output_1.printSuccess)({ ok: true, secretId, projectId }, `Linked secret ${secretId} to project ${projectId}`, opts);
|
|
196
|
-
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
secret
|
|
202
|
-
.command('unlink')
|
|
203
|
-
.description('Unlink a secret from a project')
|
|
204
|
-
.argument('<secretId>', 'secret id')
|
|
205
|
-
.argument('<projectId>', 'project id')
|
|
206
|
-
.action(async (secretId, projectId) => {
|
|
207
|
-
const opts = globalOpts();
|
|
208
|
-
try {
|
|
209
|
-
const client = new client_1.GatewayClient();
|
|
210
|
-
await client.request(`/api/secrets/${secretId}/link/${projectId}`, { method: 'DELETE' });
|
|
211
|
-
(0, output_1.printSuccess)({ ok: true, secretId, projectId }, `Unlinked secret ${secretId} from project ${projectId}`, opts);
|
|
212
|
-
}
|
|
213
|
-
catch (err) {
|
|
214
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
secret
|
|
218
|
-
.command('delete')
|
|
219
|
-
.description('Delete a secret (removes it from all linked projects)')
|
|
220
|
-
.argument('<secretId>', 'secret id')
|
|
221
|
-
.action(async (secretId) => {
|
|
222
|
-
const opts = globalOpts();
|
|
223
|
-
try {
|
|
224
|
-
const client = new client_1.GatewayClient();
|
|
225
|
-
await client.request(`/api/secrets/${secretId}`, { method: 'DELETE' });
|
|
226
|
-
(0, output_1.printSuccess)({ ok: true, secretId }, `Deleted secret ${secretId}`, opts);
|
|
227
|
-
}
|
|
228
|
-
catch (err) {
|
|
229
|
-
process.exit((0, output_1.printError)(err, opts));
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Strip anything that could contain the raw value from server responses before
|
|
235
|
-
* we print or return them. The gateway never sends values (only metadata), but
|
|
236
|
-
* defending in depth costs nothing.
|
|
237
|
-
*/
|
|
238
|
-
function redact(s) {
|
|
239
|
-
const { ...safe } = s;
|
|
240
|
-
return safe;
|
|
241
|
-
}
|
|
242
|
-
function collect(value, previous) {
|
|
243
|
-
return previous.concat([value]);
|
|
244
|
-
}
|
|
245
|
-
//# sourceMappingURL=secret.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/commands/secret.ts"],"names":[],"mappings":"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"}
|