@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.
Files changed (157) hide show
  1. package/dist/auth/browser-flow.d.ts +42 -0
  2. package/dist/auth/browser-flow.d.ts.map +1 -0
  3. package/dist/auth/browser-flow.js +193 -0
  4. package/dist/auth/browser-flow.js.map +1 -0
  5. package/dist/auth/callback-server.d.ts +81 -0
  6. package/dist/auth/callback-server.d.ts.map +1 -0
  7. package/dist/auth/callback-server.js +193 -0
  8. package/dist/auth/callback-server.js.map +1 -0
  9. package/dist/auth/metadata.d.ts +43 -0
  10. package/dist/auth/metadata.d.ts.map +1 -0
  11. package/dist/auth/metadata.js +66 -0
  12. package/dist/auth/metadata.js.map +1 -0
  13. package/dist/auth/pkce.d.ts +42 -0
  14. package/dist/auth/pkce.d.ts.map +1 -0
  15. package/dist/auth/pkce.js +52 -0
  16. package/dist/auth/pkce.js.map +1 -0
  17. package/dist/auth/types.d.ts +72 -0
  18. package/dist/auth/types.d.ts.map +1 -0
  19. package/dist/auth/types.js +11 -0
  20. package/dist/auth/types.js.map +1 -0
  21. package/dist/client-factory.d.ts +29 -0
  22. package/dist/client-factory.d.ts.map +1 -0
  23. package/dist/client-factory.js +43 -0
  24. package/dist/client-factory.js.map +1 -0
  25. package/dist/commands/app-claim.d.ts +9 -0
  26. package/dist/commands/app-claim.d.ts.map +1 -0
  27. package/dist/commands/app-claim.js +128 -0
  28. package/dist/commands/app-claim.js.map +1 -0
  29. package/dist/commands/app-module.d.ts +9 -0
  30. package/dist/commands/app-module.d.ts.map +1 -0
  31. package/dist/commands/app-module.js +104 -0
  32. package/dist/commands/app-module.js.map +1 -0
  33. package/dist/commands/app-permission.d.ts +9 -0
  34. package/dist/commands/app-permission.d.ts.map +1 -0
  35. package/dist/commands/app-permission.js +118 -0
  36. package/dist/commands/app-permission.js.map +1 -0
  37. package/dist/commands/app-role.d.ts +9 -0
  38. package/dist/commands/app-role.d.ts.map +1 -0
  39. package/dist/commands/app-role.js +166 -0
  40. package/dist/commands/app-role.js.map +1 -0
  41. package/dist/commands/app.d.ts +12 -0
  42. package/dist/commands/app.d.ts.map +1 -0
  43. package/dist/commands/app.js +255 -0
  44. package/dist/commands/app.js.map +1 -0
  45. package/dist/commands/audit.d.ts +12 -0
  46. package/dist/commands/audit.d.ts.map +1 -0
  47. package/dist/commands/audit.js +96 -0
  48. package/dist/commands/audit.js.map +1 -0
  49. package/dist/commands/bulk.d.ts +12 -0
  50. package/dist/commands/bulk.d.ts.map +1 -0
  51. package/dist/commands/bulk.js +77 -0
  52. package/dist/commands/bulk.js.map +1 -0
  53. package/dist/commands/client-secret.d.ts +18 -0
  54. package/dist/commands/client-secret.d.ts.map +1 -0
  55. package/dist/commands/client-secret.js +126 -0
  56. package/dist/commands/client-secret.js.map +1 -0
  57. package/dist/commands/client.d.ts +27 -0
  58. package/dist/commands/client.d.ts.map +1 -0
  59. package/dist/commands/client.js +385 -0
  60. package/dist/commands/client.js.map +1 -0
  61. package/dist/commands/completion.d.ts +27 -0
  62. package/dist/commands/completion.d.ts.map +1 -0
  63. package/dist/commands/completion.js +42 -0
  64. package/dist/commands/completion.js.map +1 -0
  65. package/dist/commands/config.d.ts +14 -0
  66. package/dist/commands/config.d.ts.map +1 -0
  67. package/dist/commands/config.js +85 -0
  68. package/dist/commands/config.js.map +1 -0
  69. package/dist/commands/doctor.d.ts +25 -0
  70. package/dist/commands/doctor.d.ts.map +1 -0
  71. package/dist/commands/doctor.js +198 -0
  72. package/dist/commands/doctor.js.map +1 -0
  73. package/dist/commands/exports.d.ts +12 -0
  74. package/dist/commands/exports.d.ts.map +1 -0
  75. package/dist/commands/exports.js +80 -0
  76. package/dist/commands/exports.js.map +1 -0
  77. package/dist/commands/health.d.ts +12 -0
  78. package/dist/commands/health.d.ts.map +1 -0
  79. package/dist/commands/health.js +53 -0
  80. package/dist/commands/health.js.map +1 -0
  81. package/dist/commands/keys.d.ts +14 -0
  82. package/dist/commands/keys.d.ts.map +1 -0
  83. package/dist/commands/keys.js +91 -0
  84. package/dist/commands/keys.js.map +1 -0
  85. package/dist/commands/login.d.ts +36 -0
  86. package/dist/commands/login.d.ts.map +1 -0
  87. package/dist/commands/login.js +78 -0
  88. package/dist/commands/login.js.map +1 -0
  89. package/dist/commands/logout.d.ts +25 -0
  90. package/dist/commands/logout.d.ts.map +1 -0
  91. package/dist/commands/logout.js +43 -0
  92. package/dist/commands/logout.js.map +1 -0
  93. package/dist/commands/org.d.ts +26 -0
  94. package/dist/commands/org.d.ts.map +1 -0
  95. package/dist/commands/org.js +396 -0
  96. package/dist/commands/org.js.map +1 -0
  97. package/dist/commands/provision.d.ts +47 -0
  98. package/dist/commands/provision.d.ts.map +1 -0
  99. package/dist/commands/provision.js +400 -0
  100. package/dist/commands/provision.js.map +1 -0
  101. package/dist/commands/sessions.d.ts +14 -0
  102. package/dist/commands/sessions.d.ts.map +1 -0
  103. package/dist/commands/sessions.js +122 -0
  104. package/dist/commands/sessions.js.map +1 -0
  105. package/dist/commands/stats.d.ts +12 -0
  106. package/dist/commands/stats.d.ts.map +1 -0
  107. package/dist/commands/stats.js +46 -0
  108. package/dist/commands/stats.js.map +1 -0
  109. package/dist/commands/user-claim.d.ts +17 -0
  110. package/dist/commands/user-claim.d.ts.map +1 -0
  111. package/dist/commands/user-claim.js +123 -0
  112. package/dist/commands/user-claim.js.map +1 -0
  113. package/dist/commands/user-role.d.ts +17 -0
  114. package/dist/commands/user-role.d.ts.map +1 -0
  115. package/dist/commands/user-role.js +118 -0
  116. package/dist/commands/user-role.js.map +1 -0
  117. package/dist/commands/user.d.ts +26 -0
  118. package/dist/commands/user.d.ts.map +1 -0
  119. package/dist/commands/user.js +352 -0
  120. package/dist/commands/user.js.map +1 -0
  121. package/dist/commands/version.d.ts +25 -0
  122. package/dist/commands/version.d.ts.map +1 -0
  123. package/dist/commands/version.js +83 -0
  124. package/dist/commands/version.js.map +1 -0
  125. package/dist/commands/whoami.d.ts +26 -0
  126. package/dist/commands/whoami.d.ts.map +1 -0
  127. package/dist/commands/whoami.js +66 -0
  128. package/dist/commands/whoami.js.map +1 -0
  129. package/dist/credential-store.d.ts +101 -0
  130. package/dist/credential-store.d.ts.map +1 -0
  131. package/dist/credential-store.js +121 -0
  132. package/dist/credential-store.js.map +1 -0
  133. package/dist/error-handler.d.ts +47 -0
  134. package/dist/error-handler.d.ts.map +1 -0
  135. package/dist/error-handler.js +166 -0
  136. package/dist/error-handler.js.map +1 -0
  137. package/dist/global-options.d.ts +50 -0
  138. package/dist/global-options.d.ts.map +1 -0
  139. package/dist/global-options.js +62 -0
  140. package/dist/global-options.js.map +1 -0
  141. package/dist/index.d.ts +29 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +122 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/output.d.ts +75 -0
  146. package/dist/output.d.ts.map +1 -0
  147. package/dist/output.js +100 -0
  148. package/dist/output.js.map +1 -0
  149. package/dist/parsers.d.ts +74 -0
  150. package/dist/parsers.d.ts.map +1 -0
  151. package/dist/parsers.js +125 -0
  152. package/dist/parsers.js.map +1 -0
  153. package/dist/prompt.d.ts +50 -0
  154. package/dist/prompt.d.ts.map +1 -0
  155. package/dist/prompt.js +98 -0
  156. package/dist/prompt.js.map +1 -0
  157. package/package.json +46 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Audit command — view audit log entries.
3
+ *
4
+ * Subcommands:
5
+ * list List audit log entries with optional filters
6
+ *
7
+ * @module commands/audit
8
+ */
9
+ import { createClient } from '../client-factory.js';
10
+ import { handleError } from '../error-handler.js';
11
+ import { printTable, printJson, success, warn, formatDate, truncate } from '../output.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Command
14
+ // ---------------------------------------------------------------------------
15
+ export const auditCommand = {
16
+ command: 'audit',
17
+ describe: 'View audit log',
18
+ builder: (yargs) => yargs
19
+ .command('list', 'List audit log entries', (y) => y
20
+ .option('event-type', {
21
+ type: 'string',
22
+ describe: 'Filter by event type',
23
+ })
24
+ .option('actor-id', {
25
+ type: 'string',
26
+ describe: 'Filter by actor ID',
27
+ })
28
+ .option('org-id', {
29
+ type: 'string',
30
+ describe: 'Filter by organization ID',
31
+ })
32
+ .option('resource-type', {
33
+ type: 'string',
34
+ describe: 'Filter by resource type',
35
+ })
36
+ .option('resource-id', {
37
+ type: 'string',
38
+ describe: 'Filter by resource ID',
39
+ })
40
+ .option('from', {
41
+ type: 'string',
42
+ describe: 'Filter from date (ISO 8601)',
43
+ })
44
+ .option('to', {
45
+ type: 'string',
46
+ describe: 'Filter to date (ISO 8601)',
47
+ })
48
+ .option('page', {
49
+ type: 'number',
50
+ describe: 'Page number',
51
+ })
52
+ .option('page-size', {
53
+ type: 'number',
54
+ describe: 'Results per page',
55
+ }), async (argv) => {
56
+ try {
57
+ const client = createClient(argv);
58
+ const result = await client.audit.list({
59
+ eventType: argv['event-type'],
60
+ actorId: argv['actor-id'],
61
+ organizationId: argv['org-id'],
62
+ resourceType: argv['resource-type'],
63
+ resourceId: argv['resource-id'],
64
+ from: argv.from,
65
+ to: argv.to,
66
+ page: argv.page,
67
+ pageSize: argv['page-size'],
68
+ });
69
+ if (argv.json) {
70
+ printJson(result);
71
+ return;
72
+ }
73
+ const entries = result.data;
74
+ if (entries.length === 0) {
75
+ warn('No audit entries found');
76
+ return;
77
+ }
78
+ printTable(['Event', 'Actor', 'Resource', 'IP', 'Date'], entries.map((e) => [
79
+ e.eventType,
80
+ e.actorEmail ?? truncate(e.actorId ?? '—', 12),
81
+ e.resourceType ? `${e.resourceType}:${truncate(e.resourceId ?? '', 12)}` : '—',
82
+ e.ipAddress ?? '—',
83
+ formatDate(e.createdAt),
84
+ ]));
85
+ success(`${entries.length} audit entries (page ${result.page ?? 1})`);
86
+ }
87
+ catch (err) {
88
+ handleError(err, argv.verbose);
89
+ }
90
+ })
91
+ .demandCommand(1, 'Please specify an audit subcommand: list'),
92
+ handler: () => {
93
+ // No-op — subcommands handle execution
94
+ },
95
+ };
96
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Bulk command — bulk status operations.
3
+ *
4
+ * Subcommands:
5
+ * execute Execute a bulk status operation on organizations or users
6
+ *
7
+ * @module commands/bulk
8
+ */
9
+ import type { CommandModule } from 'yargs';
10
+ import type { GlobalOptions } from '../global-options.js';
11
+ export declare const bulkCommand: CommandModule<GlobalOptions, GlobalOptions>;
12
+ //# sourceMappingURL=bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../src/commands/bulk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAoB1D,eAAO,MAAM,WAAW,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CA6EnE,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Bulk command — bulk status operations.
3
+ *
4
+ * Subcommands:
5
+ * execute Execute a bulk status operation on organizations or users
6
+ *
7
+ * @module commands/bulk
8
+ */
9
+ import { createClient } from '../client-factory.js';
10
+ import { handleError } from '../error-handler.js';
11
+ import { printTable, printJson, success, warn, error as printError } from '../output.js';
12
+ import { confirm } from '../prompt.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Command
15
+ // ---------------------------------------------------------------------------
16
+ export const bulkCommand = {
17
+ command: 'bulk',
18
+ describe: 'Bulk status operations',
19
+ builder: (yargs) => yargs
20
+ .command('execute', 'Execute a bulk status operation', (y) => y
21
+ .option('entity-type', {
22
+ type: 'string',
23
+ describe: 'Entity type',
24
+ choices: ['organizations', 'users'],
25
+ demandOption: true,
26
+ })
27
+ .option('action', {
28
+ type: 'string',
29
+ describe: 'Status action',
30
+ choices: ['suspend', 'activate', 'deactivate', 'lock', 'unlock'],
31
+ demandOption: true,
32
+ })
33
+ .option('ids', {
34
+ type: 'string',
35
+ describe: 'Comma-separated entity IDs',
36
+ demandOption: true,
37
+ }), async (argv) => {
38
+ try {
39
+ const ids = argv.ids.split(',').map((id) => id.trim()).filter(Boolean);
40
+ if (ids.length === 0) {
41
+ printError('No IDs provided');
42
+ return;
43
+ }
44
+ if (!argv.force) {
45
+ const ok = await confirm(`${argv.action} ${ids.length} ${argv['entity-type']}?`);
46
+ if (!ok) {
47
+ warn('Aborted');
48
+ return;
49
+ }
50
+ }
51
+ const client = createClient(argv);
52
+ const result = await client.bulk.execute({
53
+ entityType: argv['entity-type'],
54
+ action: argv.action,
55
+ ids,
56
+ });
57
+ if (argv.json) {
58
+ printJson(result);
59
+ return;
60
+ }
61
+ success(`Bulk ${argv.action}: ${result.succeeded} succeeded, ${result.failed} failed`);
62
+ if (result.errors.length > 0) {
63
+ console.log();
64
+ printError(`${result.errors.length} error(s):`);
65
+ printTable(['ID', 'Error'], result.errors.map((e) => [e.id, e.error]));
66
+ }
67
+ }
68
+ catch (err) {
69
+ handleError(err, argv.verbose);
70
+ }
71
+ })
72
+ .demandCommand(1, 'Please specify a bulk subcommand: execute'),
73
+ handler: () => {
74
+ // No-op — subcommands handle execution
75
+ },
76
+ };
77
+ //# sourceMappingURL=bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../src/commands/bulk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CLI client secret subcommands.
3
+ *
4
+ * Manages client secrets via the Porta SDK — generate, list, and revoke.
5
+ * Secret generate displays the plaintext ONCE in a prominent warning box.
6
+ *
7
+ * Usage:
8
+ * porta client secret generate <client-id> [--label "production"]
9
+ * porta client secret list <client-id>
10
+ * porta client secret revoke <client-id> <secret-id>
11
+ *
12
+ * @module commands/client-secret
13
+ */
14
+ import type { CommandModule } from 'yargs';
15
+ import type { GlobalOptions } from '../global-options.js';
16
+ /** The client secret subcommand group — registered under `client` */
17
+ export declare const clientSecretCommand: CommandModule<GlobalOptions, GlobalOptions>;
18
+ //# sourceMappingURL=client-secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-secret.d.ts","sourceRoot":"","sources":["../../src/commands/client-secret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqC1D,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAkI3E,CAAC"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * CLI client secret subcommands.
3
+ *
4
+ * Manages client secrets via the Porta SDK — generate, list, and revoke.
5
+ * Secret generate displays the plaintext ONCE in a prominent warning box.
6
+ *
7
+ * Usage:
8
+ * porta client secret generate <client-id> [--label "production"]
9
+ * porta client secret list <client-id>
10
+ * porta client secret revoke <client-id> <secret-id>
11
+ *
12
+ * @module commands/client-secret
13
+ */
14
+ import { createClient } from '../client-factory.js';
15
+ import { handleError } from '../error-handler.js';
16
+ import { printTable, printJson, success, warn, info, formatDate, truncate, } from '../output.js';
17
+ import { confirm } from '../prompt.js';
18
+ // ---------------------------------------------------------------------------
19
+ // Command definition
20
+ // ---------------------------------------------------------------------------
21
+ /** The client secret subcommand group — registered under `client` */
22
+ export const clientSecretCommand = {
23
+ command: 'secret',
24
+ describe: 'Manage client secrets',
25
+ builder: (yargs) => {
26
+ return yargs
27
+ // ── generate ───────────────────────────────────────────────────
28
+ .command('generate <client-id>', 'Generate a new client secret', (y) => y
29
+ .positional('client-id', {
30
+ type: 'string',
31
+ demandOption: true,
32
+ description: 'Client UUID',
33
+ })
34
+ .option('label', {
35
+ type: 'string',
36
+ description: 'Label for the secret (e.g., "production")',
37
+ }), async (argv) => {
38
+ try {
39
+ const sdkClient = createClient(argv);
40
+ const secret = await sdkClient.clients.generateSecret(argv['client-id'], { label: argv.label });
41
+ if (argv.json) {
42
+ printJson(secret);
43
+ }
44
+ else {
45
+ // One-time secret display — prominent warning box
46
+ console.log('');
47
+ warn('⚠️ IMPORTANT: Copy this secret now. It will not be shown again!');
48
+ console.log('');
49
+ console.log('┌─────────────────────────────────────────────────────────────────┐');
50
+ console.log(`│ Secret: ${secret.secret.padEnd(55)}│`);
51
+ console.log(`│ Label: ${(secret.label ?? '—').padEnd(55)}│`);
52
+ console.log(`│ ID: ${truncate(secret.id, 8).padEnd(55)}│`);
53
+ console.log('└─────────────────────────────────────────────────────────────────┘');
54
+ console.log('');
55
+ }
56
+ }
57
+ catch (err) {
58
+ handleError(err, argv.verbose);
59
+ }
60
+ })
61
+ // ── list ───────────────────────────────────────────────────────
62
+ .command('list <client-id>', 'List secrets for a client (metadata only)', (y) => y.positional('client-id', {
63
+ type: 'string',
64
+ demandOption: true,
65
+ description: 'Client UUID',
66
+ }), async (argv) => {
67
+ try {
68
+ const sdkClient = createClient(argv);
69
+ const secrets = await sdkClient.clients.listSecrets(argv['client-id']);
70
+ if (secrets.length === 0) {
71
+ warn('No secrets found');
72
+ return;
73
+ }
74
+ if (argv.json) {
75
+ printJson(secrets);
76
+ }
77
+ else {
78
+ printTable(['ID', 'Label', 'Last Used', 'Expires', 'Created'], secrets.map((s) => [
79
+ truncate(s.id, 8),
80
+ s.label ?? '—',
81
+ s.lastUsedAt ? formatDate(s.lastUsedAt) : '—',
82
+ s.expiresAt ? formatDate(s.expiresAt) : '—',
83
+ formatDate(s.createdAt),
84
+ ]));
85
+ info(`Total: ${secrets.length} secrets`);
86
+ }
87
+ }
88
+ catch (err) {
89
+ handleError(err, argv.verbose);
90
+ }
91
+ })
92
+ // ── revoke ─────────────────────────────────────────────────────
93
+ .command('revoke <client-id> <secret-id>', 'Revoke a client secret (permanent)', (y) => y
94
+ .positional('client-id', {
95
+ type: 'string',
96
+ demandOption: true,
97
+ description: 'Client UUID',
98
+ })
99
+ .positional('secret-id', {
100
+ type: 'string',
101
+ demandOption: true,
102
+ description: 'Secret UUID',
103
+ }), async (argv) => {
104
+ try {
105
+ if (!argv.force) {
106
+ const confirmed = await confirm(`Revoke secret ${argv['secret-id']}? This is permanent and cannot be undone.`);
107
+ if (!confirmed) {
108
+ warn('Operation cancelled');
109
+ return;
110
+ }
111
+ }
112
+ const sdkClient = createClient(argv);
113
+ await sdkClient.clients.revokeSecret(argv['client-id'], argv['secret-id']);
114
+ success(`Secret revoked: ${argv['secret-id']}`);
115
+ }
116
+ catch (err) {
117
+ handleError(err, argv.verbose);
118
+ }
119
+ })
120
+ .demandCommand(1, 'Specify a secret subcommand: generate, list, revoke');
121
+ },
122
+ handler: () => {
123
+ // No-op — subcommands handle execution
124
+ },
125
+ };
126
+ //# sourceMappingURL=client-secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-secret.js","sourceRoot":"","sources":["../../src/commands/client-secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
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 type { CommandModule } from 'yargs';
24
+ import type { GlobalOptions } from '../global-options.js';
25
+ /** The client command module — registered at the top level of the CLI */
26
+ export declare const clientCommand: CommandModule<GlobalOptions, GlobalOptions>;
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/commands/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAwD1D,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CA0crE,CAAC"}