@portaidentity/cli 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.
- package/dist/auth/browser-flow.d.ts +42 -0
- package/dist/auth/browser-flow.d.ts.map +1 -0
- package/dist/auth/browser-flow.js +193 -0
- package/dist/auth/browser-flow.js.map +1 -0
- package/dist/auth/callback-server.d.ts +81 -0
- package/dist/auth/callback-server.d.ts.map +1 -0
- package/dist/auth/callback-server.js +193 -0
- package/dist/auth/callback-server.js.map +1 -0
- package/dist/auth/metadata.d.ts +43 -0
- package/dist/auth/metadata.d.ts.map +1 -0
- package/dist/auth/metadata.js +66 -0
- package/dist/auth/metadata.js.map +1 -0
- package/dist/auth/pkce.d.ts +42 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +52 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/types.d.ts +72 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +11 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/client-factory.d.ts +29 -0
- package/dist/client-factory.d.ts.map +1 -0
- package/dist/client-factory.js +43 -0
- package/dist/client-factory.js.map +1 -0
- package/dist/commands/app-claim.d.ts +9 -0
- package/dist/commands/app-claim.d.ts.map +1 -0
- package/dist/commands/app-claim.js +128 -0
- package/dist/commands/app-claim.js.map +1 -0
- package/dist/commands/app-module.d.ts +9 -0
- package/dist/commands/app-module.d.ts.map +1 -0
- package/dist/commands/app-module.js +104 -0
- package/dist/commands/app-module.js.map +1 -0
- package/dist/commands/app-permission.d.ts +9 -0
- package/dist/commands/app-permission.d.ts.map +1 -0
- package/dist/commands/app-permission.js +118 -0
- package/dist/commands/app-permission.js.map +1 -0
- package/dist/commands/app-role.d.ts +9 -0
- package/dist/commands/app-role.d.ts.map +1 -0
- package/dist/commands/app-role.js +166 -0
- package/dist/commands/app-role.js.map +1 -0
- package/dist/commands/app.d.ts +12 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +255 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/audit.d.ts +12 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +96 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/bulk.d.ts +12 -0
- package/dist/commands/bulk.d.ts.map +1 -0
- package/dist/commands/bulk.js +77 -0
- package/dist/commands/bulk.js.map +1 -0
- package/dist/commands/client-secret.d.ts +18 -0
- package/dist/commands/client-secret.d.ts.map +1 -0
- package/dist/commands/client-secret.js +126 -0
- package/dist/commands/client-secret.js.map +1 -0
- package/dist/commands/client.d.ts +27 -0
- package/dist/commands/client.d.ts.map +1 -0
- package/dist/commands/client.js +385 -0
- package/dist/commands/client.js.map +1 -0
- package/dist/commands/completion.d.ts +27 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +42 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +14 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +85 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +25 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +198 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/exports.d.ts +12 -0
- package/dist/commands/exports.d.ts.map +1 -0
- package/dist/commands/exports.js +80 -0
- package/dist/commands/exports.js.map +1 -0
- package/dist/commands/health.d.ts +12 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +53 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/keys.d.ts +14 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +91 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/login.d.ts +36 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +78 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +25 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +43 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/org.d.ts +26 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +396 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/provision.d.ts +47 -0
- package/dist/commands/provision.d.ts.map +1 -0
- package/dist/commands/provision.js +400 -0
- package/dist/commands/provision.js.map +1 -0
- package/dist/commands/sessions.d.ts +14 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +122 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/stats.d.ts +12 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +46 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/user-claim.d.ts +17 -0
- package/dist/commands/user-claim.d.ts.map +1 -0
- package/dist/commands/user-claim.js +123 -0
- package/dist/commands/user-claim.js.map +1 -0
- package/dist/commands/user-role.d.ts +17 -0
- package/dist/commands/user-role.d.ts.map +1 -0
- package/dist/commands/user-role.js +118 -0
- package/dist/commands/user-role.js.map +1 -0
- package/dist/commands/user.d.ts +26 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +352 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/version.d.ts +25 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +83 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/whoami.d.ts +26 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +66 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/credential-store.d.ts +101 -0
- package/dist/credential-store.d.ts.map +1 -0
- package/dist/credential-store.js +121 -0
- package/dist/credential-store.js.map +1 -0
- package/dist/error-handler.d.ts +47 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +166 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/global-options.d.ts +50 -0
- package/dist/global-options.d.ts.map +1 -0
- package/dist/global-options.js +62 -0
- package/dist/global-options.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +75 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +100 -0
- package/dist/output.js.map +1 -0
- package/dist/parsers.d.ts +74 -0
- package/dist/parsers.d.ts.map +1 -0
- package/dist/parsers.js +125 -0
- package/dist/parsers.js.map +1 -0
- package/dist/prompt.d.ts +50 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +98 -0
- package/dist/prompt.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI client management commands.
|
|
3
|
+
*
|
|
4
|
+
* Provides CRUD and lifecycle management for OIDC clients, plus
|
|
5
|
+
* nested secret subcommands. All operations use the Porta SDK for
|
|
6
|
+
* Admin API communication.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* porta client create --org <org-id> --app <app-id> --type confidential --redirect-uris "https://..." [--name "My Client"]
|
|
10
|
+
* porta client list --app <app-id> [--status active|revoked] [--page 1] [--page-size 20]
|
|
11
|
+
* porta client show <client-id>
|
|
12
|
+
* porta client update <client-id> --name "New Name" [--redirect-uris "..."]
|
|
13
|
+
* porta client revoke <client-id>
|
|
14
|
+
* porta client restore <client-id>
|
|
15
|
+
* porta client history <client-id>
|
|
16
|
+
* porta client login-methods get <client-id>
|
|
17
|
+
* porta client login-methods set <client-id> --methods "password,magic_link"
|
|
18
|
+
* porta client login-methods clear <client-id>
|
|
19
|
+
* porta client secret <subcommand> ...
|
|
20
|
+
*
|
|
21
|
+
* @module commands/client
|
|
22
|
+
*/
|
|
23
|
+
import { createClient } from '../client-factory.js';
|
|
24
|
+
import { handleError } from '../error-handler.js';
|
|
25
|
+
import { printTable, printJson, success, warn, info, formatDate, truncate, } from '../output.js';
|
|
26
|
+
import { confirm } from '../prompt.js';
|
|
27
|
+
import { parseLoginMethodsFlag, parseCommaSeparated } from '../parsers.js';
|
|
28
|
+
import { clientSecretCommand } from './client-secret.js';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Command definition
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/** The client command module — registered at the top level of the CLI */
|
|
33
|
+
export const clientCommand = {
|
|
34
|
+
command: 'client',
|
|
35
|
+
describe: 'Manage OIDC clients',
|
|
36
|
+
builder: (yargs) => {
|
|
37
|
+
return yargs
|
|
38
|
+
// ── create ──────────────────────────────────────────────────────
|
|
39
|
+
.command('create', 'Create a new OIDC client', (y) => y
|
|
40
|
+
.option('org', {
|
|
41
|
+
type: 'string',
|
|
42
|
+
demandOption: true,
|
|
43
|
+
description: 'Organization UUID (owner of the client)',
|
|
44
|
+
})
|
|
45
|
+
.option('app', {
|
|
46
|
+
type: 'string',
|
|
47
|
+
demandOption: true,
|
|
48
|
+
description: 'Application UUID or slug',
|
|
49
|
+
})
|
|
50
|
+
.option('name', {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Client display name',
|
|
53
|
+
})
|
|
54
|
+
.option('type', {
|
|
55
|
+
type: 'string',
|
|
56
|
+
choices: ['confidential', 'public'],
|
|
57
|
+
demandOption: true,
|
|
58
|
+
description: 'Client type (confidential has secret, public does not)',
|
|
59
|
+
})
|
|
60
|
+
.option('application-type', {
|
|
61
|
+
type: 'string',
|
|
62
|
+
choices: ['web', 'native', 'spa'],
|
|
63
|
+
default: 'web',
|
|
64
|
+
description: 'Application deployment type',
|
|
65
|
+
})
|
|
66
|
+
.option('redirect-uris', {
|
|
67
|
+
type: 'string',
|
|
68
|
+
demandOption: true,
|
|
69
|
+
description: 'Comma-separated redirect URIs',
|
|
70
|
+
})
|
|
71
|
+
.option('login-methods', {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Comma-separated login methods (password, magic_link) or "inherit" to use the org default',
|
|
74
|
+
}), async (argv) => {
|
|
75
|
+
try {
|
|
76
|
+
const loginMethods = parseLoginMethodsFlag(argv['login-methods'],
|
|
77
|
+
/* allowInherit */ true);
|
|
78
|
+
const sdkClient = createClient(argv);
|
|
79
|
+
// Resolve app slug → UUID if needed via SDK get
|
|
80
|
+
let appId = argv.app;
|
|
81
|
+
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
82
|
+
if (!UUID_REGEX.test(appId)) {
|
|
83
|
+
const { data: app } = await sdkClient.applications.get(appId);
|
|
84
|
+
appId = app.id;
|
|
85
|
+
}
|
|
86
|
+
const result = await sdkClient.clients.create({
|
|
87
|
+
applicationId: appId,
|
|
88
|
+
name: argv.name ?? 'Unnamed Client',
|
|
89
|
+
clientType: argv.type,
|
|
90
|
+
redirectUris: parseCommaSeparated(argv['redirect-uris']),
|
|
91
|
+
...(loginMethods !== undefined && { loginMethods }),
|
|
92
|
+
});
|
|
93
|
+
if (argv.json) {
|
|
94
|
+
printJson(result);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
success(`Client created: ${result.name} (${result.clientId})`);
|
|
98
|
+
printTable(['Field', 'Value'], [
|
|
99
|
+
['ID', result.id],
|
|
100
|
+
['Client ID', result.clientId],
|
|
101
|
+
['Name', result.name],
|
|
102
|
+
['Type', result.clientType],
|
|
103
|
+
['Status', result.status],
|
|
104
|
+
['Redirect URIs', result.redirectUris.join(', ')],
|
|
105
|
+
['Created', formatDate(result.createdAt)],
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
handleError(err, argv.verbose);
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
// ── list ────────────────────────────────────────────────────────
|
|
114
|
+
.command('list', 'List clients for an application', (y) => y
|
|
115
|
+
.option('app', {
|
|
116
|
+
type: 'string',
|
|
117
|
+
demandOption: true,
|
|
118
|
+
description: 'Application UUID or slug',
|
|
119
|
+
})
|
|
120
|
+
.option('status', {
|
|
121
|
+
type: 'string',
|
|
122
|
+
choices: ['active', 'revoked'],
|
|
123
|
+
description: 'Filter by status',
|
|
124
|
+
})
|
|
125
|
+
.option('page', {
|
|
126
|
+
type: 'number',
|
|
127
|
+
default: 1,
|
|
128
|
+
description: 'Page number',
|
|
129
|
+
})
|
|
130
|
+
.option('page-size', {
|
|
131
|
+
type: 'number',
|
|
132
|
+
default: 20,
|
|
133
|
+
description: 'Items per page',
|
|
134
|
+
}), async (argv) => {
|
|
135
|
+
try {
|
|
136
|
+
const sdkClient = createClient(argv);
|
|
137
|
+
const result = await sdkClient.clients.list({
|
|
138
|
+
page: argv.page,
|
|
139
|
+
pageSize: argv['page-size'],
|
|
140
|
+
...(argv.status && { status: argv.status }),
|
|
141
|
+
...(argv.app && { applicationId: argv.app }),
|
|
142
|
+
});
|
|
143
|
+
if (result.data.length === 0) {
|
|
144
|
+
warn('No clients found');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (argv.json) {
|
|
148
|
+
printJson(result);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
printTable(['ID', 'Client ID', 'Name', 'Type', 'Status', 'Created'], result.data.map((c) => [
|
|
152
|
+
truncate(c.id, 8),
|
|
153
|
+
truncate(c.clientId, 8),
|
|
154
|
+
c.name,
|
|
155
|
+
c.clientType,
|
|
156
|
+
c.status,
|
|
157
|
+
formatDate(c.createdAt),
|
|
158
|
+
]));
|
|
159
|
+
info(`Total: ${result.total} clients`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
handleError(err, argv.verbose);
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
// ── show ────────────────────────────────────────────────────────
|
|
167
|
+
.command('show <client-id>', 'Show client details', (y) => y.positional('client-id', {
|
|
168
|
+
type: 'string',
|
|
169
|
+
demandOption: true,
|
|
170
|
+
description: 'Client internal UUID or client_id',
|
|
171
|
+
}), async (argv) => {
|
|
172
|
+
try {
|
|
173
|
+
const sdkClient = createClient(argv);
|
|
174
|
+
const { data: c } = await sdkClient.clients.get(argv['client-id']);
|
|
175
|
+
if (argv.json) {
|
|
176
|
+
printJson(c);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
printTable(['Field', 'Value'], [
|
|
180
|
+
['ID', c.id],
|
|
181
|
+
['Client ID', c.clientId],
|
|
182
|
+
['Name', c.name],
|
|
183
|
+
['Type', c.clientType],
|
|
184
|
+
['Status', c.status],
|
|
185
|
+
['Redirect URIs', c.redirectUris.join(', ') || '—'],
|
|
186
|
+
['Grant Types', c.grantTypes.join(', ')],
|
|
187
|
+
['Login Methods', c.loginMethods === null ? 'inherit' : c.loginMethods.join(', ')],
|
|
188
|
+
['Created', formatDate(c.createdAt)],
|
|
189
|
+
['Updated', formatDate(c.updatedAt)],
|
|
190
|
+
]);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
handleError(err, argv.verbose);
|
|
195
|
+
}
|
|
196
|
+
})
|
|
197
|
+
// ── update ──────────────────────────────────────────────────────
|
|
198
|
+
.command('update <client-id>', 'Update client fields', (y) => y
|
|
199
|
+
.positional('client-id', {
|
|
200
|
+
type: 'string',
|
|
201
|
+
demandOption: true,
|
|
202
|
+
description: 'Client internal UUID or client_id',
|
|
203
|
+
})
|
|
204
|
+
.option('name', {
|
|
205
|
+
type: 'string',
|
|
206
|
+
description: 'New client display name',
|
|
207
|
+
})
|
|
208
|
+
.option('redirect-uris', {
|
|
209
|
+
type: 'string',
|
|
210
|
+
description: 'New comma-separated redirect URIs',
|
|
211
|
+
})
|
|
212
|
+
.option('login-methods', {
|
|
213
|
+
type: 'string',
|
|
214
|
+
description: 'Comma-separated login methods (password, magic_link) or "inherit" to reset to org default',
|
|
215
|
+
}), async (argv) => {
|
|
216
|
+
try {
|
|
217
|
+
const loginMethods = parseLoginMethodsFlag(argv['login-methods'],
|
|
218
|
+
/* allowInherit */ true);
|
|
219
|
+
const sdkClient = createClient(argv);
|
|
220
|
+
const { data: current, etag } = await sdkClient.clients.get(argv['client-id']);
|
|
221
|
+
const updated = await sdkClient.clients.update(current.id, {
|
|
222
|
+
name: argv.name,
|
|
223
|
+
redirectUris: argv['redirect-uris']
|
|
224
|
+
? parseCommaSeparated(argv['redirect-uris'])
|
|
225
|
+
: undefined,
|
|
226
|
+
...(loginMethods !== undefined && { loginMethods }),
|
|
227
|
+
}, etag ?? undefined);
|
|
228
|
+
if (argv.json) {
|
|
229
|
+
printJson(updated);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
success(`Client updated: ${updated.name} (${updated.clientId})`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
handleError(err, argv.verbose);
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
// ── revoke ──────────────────────────────────────────────────────
|
|
240
|
+
.command('revoke <client-id>', 'Revoke a client (permanent)', (y) => y.positional('client-id', {
|
|
241
|
+
type: 'string',
|
|
242
|
+
demandOption: true,
|
|
243
|
+
description: 'Client internal UUID or client_id',
|
|
244
|
+
}), async (argv) => {
|
|
245
|
+
try {
|
|
246
|
+
const sdkClient = createClient(argv);
|
|
247
|
+
const { data: c } = await sdkClient.clients.get(argv['client-id']);
|
|
248
|
+
if (!argv.force) {
|
|
249
|
+
const confirmed = await confirm(`Revoke client "${c.name}" (${c.clientId})? This is permanent and cannot be undone.`);
|
|
250
|
+
if (!confirmed) {
|
|
251
|
+
warn('Operation cancelled');
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
await sdkClient.clients.revoke(c.id);
|
|
256
|
+
success(`Client revoked: ${c.name} (${c.clientId})`);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
handleError(err, argv.verbose);
|
|
260
|
+
}
|
|
261
|
+
})
|
|
262
|
+
// ── restore (NEW) ───────────────────────────────────────────────
|
|
263
|
+
.command('restore <client-id>', 'Restore a revoked client', (y) => y.positional('client-id', {
|
|
264
|
+
type: 'string',
|
|
265
|
+
demandOption: true,
|
|
266
|
+
description: 'Client internal UUID or client_id',
|
|
267
|
+
}), async (argv) => {
|
|
268
|
+
try {
|
|
269
|
+
const sdkClient = createClient(argv);
|
|
270
|
+
const { data: c } = await sdkClient.clients.get(argv['client-id']);
|
|
271
|
+
await sdkClient.clients.restore(c.id);
|
|
272
|
+
success(`Client restored: ${c.name} (${c.clientId})`);
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
handleError(err, argv.verbose);
|
|
276
|
+
}
|
|
277
|
+
})
|
|
278
|
+
// ── history (NEW) ───────────────────────────────────────────────
|
|
279
|
+
.command('history <client-id>', 'Show client change history', (y) => y.positional('client-id', {
|
|
280
|
+
type: 'string',
|
|
281
|
+
demandOption: true,
|
|
282
|
+
description: 'Client internal UUID or client_id',
|
|
283
|
+
}), async (argv) => {
|
|
284
|
+
try {
|
|
285
|
+
const sdkClient = createClient(argv);
|
|
286
|
+
const history = await sdkClient.clients.getHistory(argv['client-id']);
|
|
287
|
+
if (history.length === 0) {
|
|
288
|
+
warn('No history entries found');
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (argv.json) {
|
|
292
|
+
printJson(history);
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
printTable(['Date', 'Action', 'Actor', 'Changes'], history.map((h) => [
|
|
296
|
+
formatDate(h.createdAt),
|
|
297
|
+
h.action,
|
|
298
|
+
h.performedBy ?? '—',
|
|
299
|
+
h.changes ? JSON.stringify(h.changes).slice(0, 60) : '—',
|
|
300
|
+
]));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
catch (err) {
|
|
304
|
+
handleError(err, argv.verbose);
|
|
305
|
+
}
|
|
306
|
+
})
|
|
307
|
+
// ── login-methods ───────────────────────────────────────────────
|
|
308
|
+
.command('login-methods', 'Manage client login method overrides', (loginYargs) => {
|
|
309
|
+
return loginYargs
|
|
310
|
+
// ── login-methods get ──
|
|
311
|
+
.command('get <client-id>', 'Show current login methods for a client', (y) => y.positional('client-id', {
|
|
312
|
+
type: 'string',
|
|
313
|
+
demandOption: true,
|
|
314
|
+
description: 'Client internal UUID or client_id',
|
|
315
|
+
}), async (argv) => {
|
|
316
|
+
try {
|
|
317
|
+
const sdkClient = createClient(argv);
|
|
318
|
+
const { data: c } = await sdkClient.clients.get(argv['client-id']);
|
|
319
|
+
if (argv.json) {
|
|
320
|
+
printJson({
|
|
321
|
+
clientId: c.clientId,
|
|
322
|
+
loginMethods: c.loginMethods,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
const display = c.loginMethods === null
|
|
327
|
+
? 'inherit (using org default)'
|
|
328
|
+
: c.loginMethods.join(', ');
|
|
329
|
+
info(`Login methods for ${c.name}: ${display}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
handleError(err, argv.verbose);
|
|
334
|
+
}
|
|
335
|
+
})
|
|
336
|
+
// ── login-methods set ──
|
|
337
|
+
.command('set <client-id>', 'Set login method overrides for a client', (y) => y
|
|
338
|
+
.positional('client-id', {
|
|
339
|
+
type: 'string',
|
|
340
|
+
demandOption: true,
|
|
341
|
+
description: 'Client internal UUID or client_id',
|
|
342
|
+
})
|
|
343
|
+
.option('methods', {
|
|
344
|
+
type: 'string',
|
|
345
|
+
demandOption: true,
|
|
346
|
+
description: 'Comma-separated login methods (password, magic_link)',
|
|
347
|
+
}), async (argv) => {
|
|
348
|
+
try {
|
|
349
|
+
const loginMethods = parseLoginMethodsFlag(argv.methods, false);
|
|
350
|
+
const sdkClient = createClient(argv);
|
|
351
|
+
const { data: current, etag } = await sdkClient.clients.get(argv['client-id']);
|
|
352
|
+
await sdkClient.clients.update(current.id, { loginMethods: loginMethods ?? undefined }, etag ?? undefined);
|
|
353
|
+
success(`Login methods set for ${current.name}: ${argv.methods}`);
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
handleError(err, argv.verbose);
|
|
357
|
+
}
|
|
358
|
+
})
|
|
359
|
+
// ── login-methods clear ──
|
|
360
|
+
.command('clear <client-id>', 'Clear login method overrides (inherit from org)', (y) => y.positional('client-id', {
|
|
361
|
+
type: 'string',
|
|
362
|
+
demandOption: true,
|
|
363
|
+
description: 'Client internal UUID or client_id',
|
|
364
|
+
}), async (argv) => {
|
|
365
|
+
try {
|
|
366
|
+
const sdkClient = createClient(argv);
|
|
367
|
+
const { data: current, etag } = await sdkClient.clients.get(argv['client-id']);
|
|
368
|
+
await sdkClient.clients.update(current.id, { loginMethods: null }, etag ?? undefined);
|
|
369
|
+
success(`Login methods cleared for ${current.name} (will inherit from org)`);
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
handleError(err, argv.verbose);
|
|
373
|
+
}
|
|
374
|
+
})
|
|
375
|
+
.demandCommand(1, 'Specify a login-methods subcommand: get, set, clear');
|
|
376
|
+
})
|
|
377
|
+
// ── nested subcommand groups ────────────────────────────────────
|
|
378
|
+
.command(clientSecretCommand)
|
|
379
|
+
.demandCommand(1, 'Specify a client subcommand: create, list, show, update, revoke, restore, history, login-methods, secret');
|
|
380
|
+
},
|
|
381
|
+
handler: () => {
|
|
382
|
+
// No-op — subcommands handle execution
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/commands/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI completion command — generate shell completion scripts.
|
|
3
|
+
*
|
|
4
|
+
* Leverages yargs' built-in completion support to generate
|
|
5
|
+
* shell completion scripts for bash, zsh, and fish.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* porta completion # Print completion script
|
|
9
|
+
* source <(porta completion) # Install for current session (bash/zsh)
|
|
10
|
+
*
|
|
11
|
+
* Permanent installation:
|
|
12
|
+
* porta completion >> ~/.bashrc # bash
|
|
13
|
+
* porta completion >> ~/.zshrc # zsh
|
|
14
|
+
*
|
|
15
|
+
* @module commands/completion
|
|
16
|
+
*/
|
|
17
|
+
import type { CommandModule } from 'yargs';
|
|
18
|
+
import type { GlobalOptions } from '../global-options.js';
|
|
19
|
+
/**
|
|
20
|
+
* The completion command module — outputs shell completion script.
|
|
21
|
+
*
|
|
22
|
+
* This is a thin wrapper that triggers yargs' built-in `showCompletionScript()`
|
|
23
|
+
* method. The completion script handles tab-completion for commands,
|
|
24
|
+
* subcommands, and options.
|
|
25
|
+
*/
|
|
26
|
+
export declare const completionCommand: CommandModule<GlobalOptions, GlobalOptions>;
|
|
27
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAezE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI completion command — generate shell completion scripts.
|
|
3
|
+
*
|
|
4
|
+
* Leverages yargs' built-in completion support to generate
|
|
5
|
+
* shell completion scripts for bash, zsh, and fish.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* porta completion # Print completion script
|
|
9
|
+
* source <(porta completion) # Install for current session (bash/zsh)
|
|
10
|
+
*
|
|
11
|
+
* Permanent installation:
|
|
12
|
+
* porta completion >> ~/.bashrc # bash
|
|
13
|
+
* porta completion >> ~/.zshrc # zsh
|
|
14
|
+
*
|
|
15
|
+
* @module commands/completion
|
|
16
|
+
*/
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Command Definition
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/**
|
|
21
|
+
* The completion command module — outputs shell completion script.
|
|
22
|
+
*
|
|
23
|
+
* This is a thin wrapper that triggers yargs' built-in `showCompletionScript()`
|
|
24
|
+
* method. The completion script handles tab-completion for commands,
|
|
25
|
+
* subcommands, and options.
|
|
26
|
+
*/
|
|
27
|
+
export const completionCommand = {
|
|
28
|
+
command: 'completion',
|
|
29
|
+
describe: 'Generate shell completion script',
|
|
30
|
+
handler: async () => {
|
|
31
|
+
// yargs.showCompletionScript() is called via the yargs configuration
|
|
32
|
+
// in index.ts. This handler is a fallback for direct invocation.
|
|
33
|
+
console.log('# Porta CLI shell completion');
|
|
34
|
+
console.log('# Add the following to your shell profile:');
|
|
35
|
+
console.log('# source <(porta completion)');
|
|
36
|
+
console.log('#');
|
|
37
|
+
console.log('# Or use yargs built-in completion:');
|
|
38
|
+
console.log('# porta --get-yargs-completions');
|
|
39
|
+
process.exit(0);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAgD;IAC5E,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,kCAAkC;IAE5C,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,qEAAqE;QACrE,iEAAiE;QACjE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config command — manage system configuration.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* list List all configuration entries
|
|
6
|
+
* get Get a specific configuration value
|
|
7
|
+
* set Set a configuration value
|
|
8
|
+
*
|
|
9
|
+
* @module commands/config
|
|
10
|
+
*/
|
|
11
|
+
import type { CommandModule } from 'yargs';
|
|
12
|
+
import type { GlobalOptions } from '../global-options.js';
|
|
13
|
+
export declare const configCommand: CommandModule<GlobalOptions, GlobalOptions>;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsB1D,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAgGrE,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config command — manage system configuration.
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* list List all configuration entries
|
|
6
|
+
* get Get a specific configuration value
|
|
7
|
+
* set Set a configuration value
|
|
8
|
+
*
|
|
9
|
+
* @module commands/config
|
|
10
|
+
*/
|
|
11
|
+
import { createClient } from '../client-factory.js';
|
|
12
|
+
import { handleError } from '../error-handler.js';
|
|
13
|
+
import { printTable, printJson, success, formatDate } from '../output.js';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Command
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
export const configCommand = {
|
|
18
|
+
command: 'config',
|
|
19
|
+
describe: 'Manage system configuration',
|
|
20
|
+
builder: (yargs) => yargs
|
|
21
|
+
// ── list ──────────────────────────────────────────────────────────
|
|
22
|
+
.command('list', 'List all configuration entries', (y) => y, async (argv) => {
|
|
23
|
+
try {
|
|
24
|
+
const client = createClient(argv);
|
|
25
|
+
const entries = await client.config.list();
|
|
26
|
+
if (argv.json) {
|
|
27
|
+
printJson(entries);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
printTable(['Key', 'Value', 'Updated'], entries.map((e) => [e.key, e.value, formatDate(e.updatedAt)]));
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
handleError(err, argv.verbose);
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
// ── get ───────────────────────────────────────────────────────────
|
|
37
|
+
.command('get <key>', 'Get a configuration value', (y) => y.positional('key', {
|
|
38
|
+
type: 'string',
|
|
39
|
+
describe: 'Configuration key',
|
|
40
|
+
demandOption: true,
|
|
41
|
+
}), async (argv) => {
|
|
42
|
+
try {
|
|
43
|
+
const client = createClient(argv);
|
|
44
|
+
const entry = await client.config.get(argv.key);
|
|
45
|
+
if (argv.json) {
|
|
46
|
+
printJson(entry);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
printTable(['Key', 'Value', 'Description', 'Updated'], [[entry.key, entry.value, entry.description ?? '—', formatDate(entry.updatedAt)]]);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
handleError(err, argv.verbose);
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
// ── set ───────────────────────────────────────────────────────────
|
|
56
|
+
.command('set <key> <value>', 'Set a configuration value', (y) => y
|
|
57
|
+
.positional('key', {
|
|
58
|
+
type: 'string',
|
|
59
|
+
describe: 'Configuration key',
|
|
60
|
+
demandOption: true,
|
|
61
|
+
})
|
|
62
|
+
.positional('value', {
|
|
63
|
+
type: 'string',
|
|
64
|
+
describe: 'New value',
|
|
65
|
+
demandOption: true,
|
|
66
|
+
}), async (argv) => {
|
|
67
|
+
try {
|
|
68
|
+
const client = createClient(argv);
|
|
69
|
+
const entry = await client.config.set(argv.key, argv.value);
|
|
70
|
+
if (argv.json) {
|
|
71
|
+
printJson(entry);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
success(`Set ${entry.key} = ${entry.value}`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
handleError(err, argv.verbose);
|
|
78
|
+
}
|
|
79
|
+
})
|
|
80
|
+
.demandCommand(1, 'Please specify a config subcommand: list, get, set'),
|
|
81
|
+
handler: () => {
|
|
82
|
+
// No-op — subcommands handle execution
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI doctor command — diagnostic checks for the CLI environment.
|
|
3
|
+
*
|
|
4
|
+
* Runs a series of checks to verify the CLI setup is correct:
|
|
5
|
+
* 1. Node.js version (>= 22.0.0 required)
|
|
6
|
+
* 2. Credentials file exists and is readable
|
|
7
|
+
* 3. Token validity (not expired)
|
|
8
|
+
* 4. Server reachability (health endpoint)
|
|
9
|
+
* 5. Admin metadata endpoint accessible
|
|
10
|
+
*
|
|
11
|
+
* Useful for troubleshooting authentication or connectivity issues.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* porta doctor # Run all diagnostic checks
|
|
15
|
+
* porta doctor --json # JSON output (machine-readable)
|
|
16
|
+
*
|
|
17
|
+
* @module commands/doctor
|
|
18
|
+
*/
|
|
19
|
+
import type { CommandModule } from 'yargs';
|
|
20
|
+
import type { GlobalOptions } from '../global-options.js';
|
|
21
|
+
/**
|
|
22
|
+
* The doctor command module — runs diagnostic checks.
|
|
23
|
+
*/
|
|
24
|
+
export declare const doctorCommand: CommandModule<GlobalOptions, GlobalOptions>;
|
|
25
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmK1D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAoDrE,CAAC"}
|