@kindgi/cli 0.1.4 → 0.1.5
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 +13 -7
- package/dist/build/bundle.d.ts +11 -3
- package/dist/build/bundle.d.ts.map +1 -1
- package/dist/build/bundle.js +17 -3
- package/dist/build/bundle.js.map +1 -1
- package/dist/build/defaults.d.ts +3 -1
- package/dist/build/defaults.d.ts.map +1 -1
- package/dist/build/defaults.js +44 -1
- package/dist/build/defaults.js.map +1 -1
- package/dist/build/java-image.d.ts +31 -0
- package/dist/build/java-image.d.ts.map +1 -0
- package/dist/build/java-image.js +146 -0
- package/dist/build/java-image.js.map +1 -0
- package/dist/build/pack-root.d.ts +1 -31
- package/dist/build/pack-root.d.ts.map +1 -1
- package/dist/build/pack-root.js +22 -2
- package/dist/build/pack-root.js.map +1 -1
- package/dist/build/runners.d.ts +44 -0
- package/dist/build/runners.d.ts.map +1 -1
- package/dist/build/scala-image.d.ts +21 -0
- package/dist/build/scala-image.d.ts.map +1 -0
- package/dist/build/scala-image.js +150 -0
- package/dist/build/scala-image.js.map +1 -0
- package/dist/cli-pin.d.ts +16 -0
- package/dist/cli-pin.d.ts.map +1 -0
- package/dist/cli-pin.js +66 -0
- package/dist/cli-pin.js.map +1 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +9 -8
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/approvals.d.ts.map +1 -1
- package/dist/commands/approvals.js +30 -4
- package/dist/commands/approvals.js.map +1 -1
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +100 -37
- package/dist/commands/artifacts.js.map +1 -1
- package/dist/commands/auth.js +2 -2
- package/dist/commands/blocks.d.ts.map +1 -1
- package/dist/commands/blocks.js +5 -4
- package/dist/commands/blocks.js.map +1 -1
- package/dist/commands/build.d.ts +10 -2
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +109 -16
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/capabilities.d.ts.map +1 -1
- package/dist/commands/capabilities.js +37 -10
- package/dist/commands/capabilities.js.map +1 -1
- package/dist/commands/console.d.ts +21 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/console.js +87 -0
- package/dist/commands/console.js.map +1 -0
- package/dist/commands/conversations.d.ts.map +1 -1
- package/dist/commands/conversations.js +13 -2
- package/dist/commands/conversations.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +2 -2
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +11 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +212 -40
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +356 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/env-scoped.d.ts +44 -0
- package/dist/commands/env-scoped.d.ts.map +1 -0
- package/dist/commands/env-scoped.js +222 -0
- package/dist/commands/env-scoped.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +85 -123
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/eval-runs.d.ts +9 -0
- package/dist/commands/eval-runs.d.ts.map +1 -1
- package/dist/commands/eval-runs.js +20 -19
- package/dist/commands/eval-runs.js.map +1 -1
- package/dist/commands/eval-suites.d.ts.map +1 -1
- package/dist/commands/eval-suites.js +16 -8
- package/dist/commands/eval-suites.js.map +1 -1
- package/dist/commands/exports.d.ts +3 -0
- package/dist/commands/exports.d.ts.map +1 -0
- package/dist/commands/exports.js +82 -0
- package/dist/commands/exports.js.map +1 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +6 -5
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/flows.d.ts.map +1 -1
- package/dist/commands/flows.js +2 -1
- package/dist/commands/flows.js.map +1 -1
- package/dist/commands/gate-policies.d.ts.map +1 -1
- package/dist/commands/gate-policies.js +2 -1
- package/dist/commands/gate-policies.js.map +1 -1
- package/dist/commands/guardrails.d.ts.map +1 -1
- package/dist/commands/guardrails.js +3 -2
- package/dist/commands/guardrails.js.map +1 -1
- package/dist/commands/helpers.js +5 -5
- package/dist/commands/helpers.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +14 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +254 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/judge-classes.d.ts.map +1 -1
- package/dist/commands/judge-classes.js +11 -10
- package/dist/commands/judge-classes.js.map +1 -1
- package/dist/commands/judgments.d.ts.map +1 -1
- package/dist/commands/judgments.js +7 -6
- package/dist/commands/judgments.js.map +1 -1
- package/dist/commands/key.js +4 -4
- package/dist/commands/memory.d.ts.map +1 -1
- package/dist/commands/memory.js +277 -25
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/people.d.ts +3 -0
- package/dist/commands/people.d.ts.map +1 -0
- package/dist/commands/people.js +166 -0
- package/dist/commands/people.js.map +1 -0
- package/dist/commands/proposals.d.ts.map +1 -1
- package/dist/commands/proposals.js +390 -69
- package/dist/commands/proposals.js.map +1 -1
- package/dist/commands/provenance.d.ts.map +1 -1
- package/dist/commands/provenance.js +6 -7
- package/dist/commands/provenance.js.map +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +7 -5
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/reviewers.d.ts.map +1 -1
- package/dist/commands/reviewers.js +3 -2
- package/dist/commands/reviewers.js.map +1 -1
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +35 -15
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/schedules.d.ts +3 -0
- package/dist/commands/schedules.d.ts.map +1 -0
- package/dist/commands/schedules.js +275 -0
- package/dist/commands/schedules.js.map +1 -0
- package/dist/commands/secrets.d.ts.map +1 -1
- package/dist/commands/secrets.js +10 -11
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/service-accounts.d.ts +3 -0
- package/dist/commands/service-accounts.d.ts.map +1 -0
- package/dist/commands/service-accounts.js +175 -0
- package/dist/commands/service-accounts.js.map +1 -0
- package/dist/commands/skills.d.ts +1 -1
- package/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +11 -4
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/sso.d.ts +6 -0
- package/dist/commands/sso.d.ts.map +1 -0
- package/dist/commands/sso.js +318 -0
- package/dist/commands/sso.js.map +1 -0
- package/dist/commands/tokens.d.ts +11 -0
- package/dist/commands/tokens.d.ts.map +1 -1
- package/dist/commands/tokens.js +144 -11
- package/dist/commands/tokens.js.map +1 -1
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +4 -3
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/unwired.d.ts.map +1 -1
- package/dist/commands/unwired.js +1 -30
- package/dist/commands/unwired.js.map +1 -1
- package/dist/commands/upgrade.d.ts +11 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +160 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/dev/defaults.d.ts +28 -11
- package/dist/dev/defaults.d.ts.map +1 -1
- package/dist/dev/defaults.js +114 -35
- package/dist/dev/defaults.js.map +1 -1
- package/dist/dev/google-credentials.d.ts +50 -0
- package/dist/dev/google-credentials.d.ts.map +1 -0
- package/dist/dev/google-credentials.js +157 -0
- package/dist/dev/google-credentials.js.map +1 -0
- package/dist/dev/java-builder.d.ts +56 -0
- package/dist/dev/java-builder.d.ts.map +1 -0
- package/dist/dev/java-builder.js +204 -0
- package/dist/dev/java-builder.js.map +1 -0
- package/dist/dev/jvm-run-files.d.ts +29 -0
- package/dist/dev/jvm-run-files.d.ts.map +1 -0
- package/dist/dev/jvm-run-files.js +94 -0
- package/dist/dev/jvm-run-files.js.map +1 -0
- package/dist/dev/lines.d.ts +13 -0
- package/dist/dev/lines.d.ts.map +1 -0
- package/dist/dev/lines.js +24 -0
- package/dist/dev/lines.js.map +1 -0
- package/dist/dev/log-view.d.ts +116 -0
- package/dist/dev/log-view.d.ts.map +1 -0
- package/dist/dev/log-view.js +233 -0
- package/dist/dev/log-view.js.map +1 -0
- package/dist/dev/pack-code.d.ts +79 -4
- package/dist/dev/pack-code.d.ts.map +1 -1
- package/dist/dev/pack-code.js +262 -3
- package/dist/dev/pack-code.js.map +1 -1
- package/dist/dev/pack-env.d.ts.map +1 -1
- package/dist/dev/pack-env.js +4 -0
- package/dist/dev/pack-env.js.map +1 -1
- package/dist/dev/pack-service.d.ts +11 -1
- package/dist/dev/pack-service.d.ts.map +1 -1
- package/dist/dev/pack-service.js +56 -20
- package/dist/dev/pack-service.js.map +1 -1
- package/dist/dev/paths.d.ts +6 -0
- package/dist/dev/paths.d.ts.map +1 -1
- package/dist/dev/paths.js +8 -0
- package/dist/dev/paths.js.map +1 -1
- package/dist/dev/project-database.js +1 -1
- package/dist/dev/project-database.js.map +1 -1
- package/dist/dev/runners.d.ts +35 -9
- package/dist/dev/runners.d.ts.map +1 -1
- package/dist/dev/runtime-container.d.ts +10 -2
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +48 -20
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-env.d.ts +10 -0
- package/dist/dev/runtime-env.d.ts.map +1 -1
- package/dist/dev/runtime-env.js +8 -4
- package/dist/dev/runtime-env.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/scala-builder.d.ts +72 -0
- package/dist/dev/scala-builder.d.ts.map +1 -0
- package/dist/dev/scala-builder.js +347 -0
- package/dist/dev/scala-builder.js.map +1 -0
- package/dist/env/project-env.d.ts.map +1 -1
- package/dist/env/project-env.js +3 -1
- package/dist/env/project-env.js.map +1 -1
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -1
- package/dist/init/augment-scaffolder.js +1 -1
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/dependency-specs.d.ts +26 -0
- package/dist/init/dependency-specs.d.ts.map +1 -1
- package/dist/init/dependency-specs.js +38 -0
- package/dist/init/dependency-specs.js.map +1 -1
- package/dist/init/java-augment.d.ts +24 -0
- package/dist/init/java-augment.d.ts.map +1 -0
- package/dist/init/java-augment.js +198 -0
- package/dist/init/java-augment.js.map +1 -0
- package/dist/init/mode-detect.d.ts +2 -2
- package/dist/init/mode-detect.d.ts.map +1 -1
- package/dist/init/mode-detect.js +12 -1
- package/dist/init/mode-detect.js.map +1 -1
- package/dist/init/python-augment.js +1 -1
- package/dist/init/python-augment.js.map +1 -1
- package/dist/init/scala-augment.d.ts +23 -0
- package/dist/init/scala-augment.d.ts.map +1 -0
- package/dist/init/scala-augment.js +213 -0
- package/dist/init/scala-augment.js.map +1 -0
- package/dist/init/template-files.d.ts +40 -2
- package/dist/init/template-files.d.ts.map +1 -1
- package/dist/init/template-files.js +56 -5
- package/dist/init/template-files.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +20 -2
- package/dist/main.js.map +1 -1
- package/dist/open-url.d.ts +15 -0
- package/dist/open-url.d.ts.map +1 -0
- package/dist/open-url.js +41 -0
- package/dist/open-url.js.map +1 -0
- package/dist/package-manager.d.ts +10 -3
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +19 -1
- package/dist/package-manager.js.map +1 -1
- package/dist/providers/presets/anthropic.json +11 -3
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +30 -2
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +47 -3
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +7 -5
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +40 -15
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +66 -2
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +5 -4
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-java-authoring-agents/SKILL.md +220 -0
- package/dist/sdk-skills/kindgi-java-authoring-flows/SKILL.md +390 -0
- package/dist/sdk-skills/kindgi-java-authoring-guardrails/SKILL.md +209 -0
- package/dist/sdk-skills/kindgi-java-authoring-tools/SKILL.md +334 -0
- package/dist/sdk-skills/kindgi-java-getting-started/SKILL.md +270 -0
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +25 -3
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +10 -3
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +45 -6
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +2 -2
- package/dist/sdk-skills/kindgi-scala-authoring-agents/SKILL.md +217 -0
- package/dist/sdk-skills/kindgi-scala-authoring-flows/SKILL.md +357 -0
- package/dist/sdk-skills/kindgi-scala-authoring-guardrails/SKILL.md +199 -0
- package/dist/sdk-skills/kindgi-scala-authoring-tools/SKILL.md +302 -0
- package/dist/sdk-skills/kindgi-scala-getting-started/SKILL.md +302 -0
- package/dist/templates/java/.mvn/wrapper/maven-wrapper.properties +3 -0
- package/dist/templates/java/AGENTS.md +31 -0
- package/dist/templates/java/README.md.tmpl +69 -0
- package/dist/templates/java/gitignore +9 -0
- package/dist/templates/java/kindgi.config.json.tmpl +8 -0
- package/dist/templates/java/kindgiw +33 -0
- package/dist/templates/java/kindgiw.cmd +28 -0
- package/dist/templates/java/mvnw +295 -0
- package/dist/templates/java/pom.xml.tmpl +65 -0
- package/dist/templates/java/src/main/java/__PACKAGE__/agents/EchoAgent.java.tmpl +27 -0
- package/dist/templates/java/src/main/java/__PACKAGE__/flows/EchoFlow.java.tmpl +18 -0
- package/dist/templates/java/src/main/java/__PACKAGE__/guardrails/ResponseNotEmpty.java.tmpl +28 -0
- package/dist/templates/java/src/main/java/__PACKAGE__/tools/Echo.java.tmpl +22 -0
- package/dist/templates/java/src/main/java/__PACKAGE__/tools/Greet.java.tmpl +23 -0
- package/dist/templates/java/src/test/java/__PACKAGE__/ToolsTest.java.tmpl +30 -0
- package/dist/templates/minimal/README.md.tmpl +6 -12
- package/dist/templates/python/README.md.tmpl +4 -4
- package/dist/templates/sample/README.md.tmpl +5 -11
- package/dist/templates/scala/AGENTS.md +32 -0
- package/dist/templates/scala/README.md.tmpl +75 -0
- package/dist/templates/scala/build.sbt.tmpl +16 -0
- package/dist/templates/scala/gitignore +13 -0
- package/dist/templates/scala/kindgi.config.json.tmpl +8 -0
- package/dist/templates/scala/project/build.properties +1 -0
- package/dist/templates/scala/src/main/scala/__PACKAGE__/agents/EchoAgent.scala.tmpl +23 -0
- package/dist/templates/scala/src/main/scala/__PACKAGE__/flows/EchoFlow.scala.tmpl +16 -0
- package/dist/templates/scala/src/main/scala/__PACKAGE__/guardrails/ResponseNotEmpty.scala.tmpl +21 -0
- package/dist/templates/scala/src/main/scala/__PACKAGE__/tools/Echo.scala.tmpl +16 -0
- package/dist/templates/scala/src/main/scala/__PACKAGE__/tools/Greet.scala.tmpl +17 -0
- package/dist/templates/scala/src/test/scala/__PACKAGE__/ToolsSuite.scala.tmpl +23 -0
- package/package.json +13 -12
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
4
|
+
import { renderJson } from '../output.js';
|
|
5
|
+
import { listFlag, readJsonInput, requiredPositional, runSdk, runSdkRendered, stringFlag, } from './helpers.js';
|
|
6
|
+
/** The identity providers `start --idp` has steps for. */
|
|
7
|
+
/** The setup guides, at the docs' root (always the latest release). */
|
|
8
|
+
const GUIDES = 'https://docs.kindgi.com/guides/sso';
|
|
9
|
+
const IDP_STEPS = {
|
|
10
|
+
google: {
|
|
11
|
+
kind: 'oidc',
|
|
12
|
+
guide: 'google',
|
|
13
|
+
steps: [
|
|
14
|
+
'Google Cloud console → Google Auth Platform:',
|
|
15
|
+
' 1. Branding: the app name and a support email.',
|
|
16
|
+
' 2. Audience: Internal (only your Google Workspace accounts; no test users, no review).',
|
|
17
|
+
' 3. Data access: openid, email, profile.',
|
|
18
|
+
' 4. Clients → Create client → Web application → Authorized redirect URIs: the URI above.',
|
|
19
|
+
' 5. Download the client ID and secret (Google shows the secret once).',
|
|
20
|
+
'Issuer: https://accounts.google.com',
|
|
21
|
+
].join('\n'),
|
|
22
|
+
},
|
|
23
|
+
entra: {
|
|
24
|
+
kind: 'oidc',
|
|
25
|
+
guide: 'entra-id',
|
|
26
|
+
steps: [
|
|
27
|
+
'Microsoft Entra admin center → App registrations → New registration:',
|
|
28
|
+
' 1. Supported account types: this organizational directory only (single tenant).',
|
|
29
|
+
' 2. Redirect URI: Web, the URI above.',
|
|
30
|
+
' 3. Copy the Application (client) ID and the Directory (tenant) ID.',
|
|
31
|
+
' 4. Certificates & secrets → New client secret: copy its Value (shown once). It expires:',
|
|
32
|
+
' note the date.',
|
|
33
|
+
' 5. Enterprise applications → the app → Properties → Assignment required: Yes; then',
|
|
34
|
+
' Users and groups: who may sign in.',
|
|
35
|
+
'Issuer: https://login.microsoftonline.com/<directory-tenant-id>/v2.0 (never `common`).',
|
|
36
|
+
].join('\n'),
|
|
37
|
+
},
|
|
38
|
+
okta: {
|
|
39
|
+
kind: 'oidc',
|
|
40
|
+
guide: 'okta',
|
|
41
|
+
steps: [
|
|
42
|
+
'Okta admin console → Applications → Create App Integration → OIDC - OpenID Connect →',
|
|
43
|
+
'Web Application:',
|
|
44
|
+
' 1. Sign-in redirect URIs: the URI above.',
|
|
45
|
+
' 2. Assignments: the groups who may sign in.',
|
|
46
|
+
' 3. Copy the client ID and the client secret.',
|
|
47
|
+
'Issuer: https://<your-org>.okta.com',
|
|
48
|
+
].join('\n'),
|
|
49
|
+
},
|
|
50
|
+
keycloak: {
|
|
51
|
+
kind: 'oidc',
|
|
52
|
+
guide: 'keycloak',
|
|
53
|
+
steps: [
|
|
54
|
+
'Keycloak admin console → your realm → Clients → Create client → OpenID Connect:',
|
|
55
|
+
' 1. Client authentication: On. Authentication flow: Standard flow.',
|
|
56
|
+
' 2. Valid redirect URIs: the URI above (exactly; no wildcard).',
|
|
57
|
+
' 3. Credentials tab: copy the client secret.',
|
|
58
|
+
' 4. Each person needs an email with "Email verified" on, or sign-in is refused.',
|
|
59
|
+
'Issuer: https://<keycloak-host>/realms/<realm>',
|
|
60
|
+
].join('\n'),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const kindOption = {
|
|
64
|
+
kind: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
description: '`oidc` (OpenID Connect: Google, Entra ID, Okta, Keycloak…) or `saml`.',
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
/** The provider's fields as flags; `--spec` takes anything else, as JSON. */
|
|
70
|
+
const configOptions = {
|
|
71
|
+
...kindOption,
|
|
72
|
+
name: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'What the sign-in button says ("Sign in with …").',
|
|
75
|
+
},
|
|
76
|
+
domains: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
multiple: true,
|
|
79
|
+
description: 'An email domain whose people sign in with it (`acme.com`); repeatable or comma-separated.',
|
|
80
|
+
},
|
|
81
|
+
issuer: { type: 'string', description: 'OIDC: the issuer URL.' },
|
|
82
|
+
'client-id': { type: 'string', description: 'OIDC: the client ID.' },
|
|
83
|
+
'client-secret-ref': {
|
|
84
|
+
type: 'string',
|
|
85
|
+
description: "OIDC: the NAME of the client secret in Kindgi's secret store (`kindgi secrets set <NAME>`), never the secret.",
|
|
86
|
+
},
|
|
87
|
+
'idp-metadata': {
|
|
88
|
+
type: 'string',
|
|
89
|
+
description: "SAML: the identity provider's metadata XML, as `@<file>`.",
|
|
90
|
+
},
|
|
91
|
+
'sp-signing-key-ref': {
|
|
92
|
+
type: 'string',
|
|
93
|
+
description: 'SAML: the NAME of the signing key, for identity providers that want signed requests.',
|
|
94
|
+
},
|
|
95
|
+
spec: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Any other provider fields, as inline JSON or `@<file>` (flags win).',
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
async function configFromFlags(ctx) {
|
|
101
|
+
const specText = stringFlag(ctx, 'spec');
|
|
102
|
+
const spec = specText === undefined ? {} : await readJsonInput(specText);
|
|
103
|
+
if (spec === null || typeof spec !== 'object' || Array.isArray(spec)) {
|
|
104
|
+
throw new Error('--spec must be a JSON object');
|
|
105
|
+
}
|
|
106
|
+
const domains = listFlag(ctx, 'domains')
|
|
107
|
+
.flatMap((d) => d.split(','))
|
|
108
|
+
.map((d) => d.trim())
|
|
109
|
+
.filter((d) => d !== '');
|
|
110
|
+
const metadataArg = stringFlag(ctx, 'idp-metadata');
|
|
111
|
+
if (metadataArg !== undefined && !metadataArg.startsWith('@')) {
|
|
112
|
+
throw new Error('--idp-metadata takes a file: --idp-metadata=@<path-to-metadata.xml>');
|
|
113
|
+
}
|
|
114
|
+
const flags = {
|
|
115
|
+
kind: stringFlag(ctx, 'kind'),
|
|
116
|
+
displayName: stringFlag(ctx, 'name'),
|
|
117
|
+
issuer: stringFlag(ctx, 'issuer'),
|
|
118
|
+
clientId: stringFlag(ctx, 'client-id'),
|
|
119
|
+
clientSecretRef: stringFlag(ctx, 'client-secret-ref'),
|
|
120
|
+
spSigningKeyRef: stringFlag(ctx, 'sp-signing-key-ref'),
|
|
121
|
+
...(domains.length > 0 && { domains }),
|
|
122
|
+
...(metadataArg !== undefined && {
|
|
123
|
+
idpMetadataXml: await readFile(metadataArg.slice(1), 'utf8'),
|
|
124
|
+
}),
|
|
125
|
+
};
|
|
126
|
+
for (const [k, v] of Object.entries(flags))
|
|
127
|
+
if (v === undefined)
|
|
128
|
+
delete flags[k];
|
|
129
|
+
return { ...spec, ...flags };
|
|
130
|
+
}
|
|
131
|
+
function kindFlag(ctx) {
|
|
132
|
+
const kind = stringFlag(ctx, 'kind');
|
|
133
|
+
if (kind === undefined || kind === 'oidc' || kind === 'saml')
|
|
134
|
+
return kind;
|
|
135
|
+
throw new Error('--kind must be `oidc` or `saml`');
|
|
136
|
+
}
|
|
137
|
+
/** What to send IT: the URLs for their side, and what to send back. */
|
|
138
|
+
export function handoffText(urls, idp) {
|
|
139
|
+
const { providerId, signIn } = urls;
|
|
140
|
+
const out = [];
|
|
141
|
+
if ('redirectUri' in signIn) {
|
|
142
|
+
out.push(`Sign-in with "${providerId}" (OpenID Connect). Send this to whoever runs your identity provider:`, '', ' Create an OpenID Connect web application (a confidential client) for Kindgi.', ` Redirect URI: ${signIn.redirectUri}`, ' Scopes: openid email profile', ' Let in only the people who should use Kindgi (assign users or groups).', '', ' Send back: the issuer URL and the client ID. The client secret goes into', " Kindgi's secret store under a name, never by email or chat:", ' kindgi secrets set <NAME> --env=<runtime env> --scope=tenant');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
out.push(`Sign-in with "${providerId}" (SAML). Send this to whoever runs your identity provider:`, '', ' Create a SAML 2.0 application for Kindgi.', ` ACS URL (single sign-on URL): ${signIn.acsUrl}`, ` Entity ID (audience): ${signIn.spEntityId}`, ` Service provider metadata: ${signIn.spMetadataUrl}`, ' Name ID: the email address (or an `email` attribute). Sign the assertions.', ' Let in only the people who should use Kindgi (assign users or groups).', '', " Send back: the identity provider's metadata XML.");
|
|
146
|
+
}
|
|
147
|
+
const steps = idp === undefined ? undefined : IDP_STEPS[idp];
|
|
148
|
+
if (steps !== undefined)
|
|
149
|
+
out.push('', steps.steps);
|
|
150
|
+
const guide = steps?.guide ?? ('redirectUri' in signIn ? 'oidc' : 'saml');
|
|
151
|
+
out.push('', `Step by step: ${GUIDES}/${guide}/`);
|
|
152
|
+
out.push('', 'Then register it:', 'redirectUri' in signIn
|
|
153
|
+
? ` kindgi sso providers finish ${providerId} --kind=oidc --issuer=<issuer> --client-id=<client-id> --client-secret-ref=<NAME> --domains=<your-domain>`
|
|
154
|
+
: ` kindgi sso providers finish ${providerId} --kind=saml --idp-metadata=@<metadata.xml> --domains=<your-domain>`, '', 'These URLs stay the same after registering and after any `update`.');
|
|
155
|
+
return `${out.join('\n')}\n`;
|
|
156
|
+
}
|
|
157
|
+
const start = {
|
|
158
|
+
kind: 'leaf',
|
|
159
|
+
name: 'start',
|
|
160
|
+
description: 'Get the URLs to give your identity provider, before registering anything, and a message to send IT.',
|
|
161
|
+
usage: 'kindgi sso providers start <provider-id> --kind=oidc|saml [--idp=google|entra|okta|keycloak]',
|
|
162
|
+
optionSpec: {
|
|
163
|
+
...kindOption,
|
|
164
|
+
idp: {
|
|
165
|
+
type: 'string',
|
|
166
|
+
description: 'Add the click-by-click steps for `google`, `entra`, `okta` or `keycloak` (OIDC).',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
run: (ctx) => runSdkRendered(ctx, 'sso providers start', async () => {
|
|
170
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
171
|
+
const idp = stringFlag(ctx, 'idp');
|
|
172
|
+
if (idp !== undefined && IDP_STEPS[idp] === undefined) {
|
|
173
|
+
throw new Error(`--idp must be one of: ${Object.keys(IDP_STEPS).join(', ')}`);
|
|
174
|
+
}
|
|
175
|
+
const kind = kindFlag(ctx) ?? (idp !== undefined ? IDP_STEPS[idp]?.kind : undefined);
|
|
176
|
+
const urls = await ctx
|
|
177
|
+
.client()
|
|
178
|
+
.auth.providers.signIn(providerId, kind === undefined ? undefined : { kind });
|
|
179
|
+
if (ctx.globals.formatRequested)
|
|
180
|
+
return renderJson(urls, ctx.globals.format);
|
|
181
|
+
return { stdout: handoffText(urls, idp), stderr: '' };
|
|
182
|
+
}),
|
|
183
|
+
};
|
|
184
|
+
const finish = {
|
|
185
|
+
kind: 'leaf',
|
|
186
|
+
name: 'finish',
|
|
187
|
+
description: 'Register the provider with what your identity provider gave back.',
|
|
188
|
+
usage: 'kindgi sso providers finish <provider-id> --domains=<d> (--kind=oidc --issuer=<url> --client-id=<id> --client-secret-ref=<NAME> | --kind=saml --idp-metadata=@<file>) [--name=<text>] [...]',
|
|
189
|
+
optionSpec: configOptions,
|
|
190
|
+
run: (ctx) => runSdk(ctx, 'sso providers finish', async () => {
|
|
191
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
192
|
+
kindFlag(ctx);
|
|
193
|
+
const config = { ...(await configFromFlags(ctx)), providerId };
|
|
194
|
+
if (config.kind === undefined)
|
|
195
|
+
throw new Error('--kind=oidc|saml is required');
|
|
196
|
+
if (!Array.isArray(config.domains) || config.domains.length === 0) {
|
|
197
|
+
throw new Error("--domains=<your-domain> is required: sign-in is email first, so people find this provider by their email's domain");
|
|
198
|
+
}
|
|
199
|
+
return await ctx.client().auth.providers.register(config);
|
|
200
|
+
}),
|
|
201
|
+
};
|
|
202
|
+
const update = {
|
|
203
|
+
kind: 'leaf',
|
|
204
|
+
name: 'update',
|
|
205
|
+
description: "Change a provider; its URLs (on your identity provider's side) don't change.",
|
|
206
|
+
usage: 'kindgi sso providers update <provider-id> [--client-id=<id>] [--client-secret-ref=<NAME>] [--domains=<d>] [--name=<text>] [--remove=<field>] [...]',
|
|
207
|
+
optionSpec: {
|
|
208
|
+
...configOptions,
|
|
209
|
+
remove: {
|
|
210
|
+
type: 'string',
|
|
211
|
+
multiple: true,
|
|
212
|
+
description: 'An optional field to remove (e.g. `displayName`, `domains`); repeatable.',
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
run: (ctx) => runSdk(ctx, 'sso providers update', async () => {
|
|
216
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
217
|
+
kindFlag(ctx);
|
|
218
|
+
const changes = await configFromFlags(ctx);
|
|
219
|
+
for (const field of listFlag(ctx, 'remove').flatMap((f) => f.split(','))) {
|
|
220
|
+
if (field.trim() !== '')
|
|
221
|
+
changes[field.trim()] = null;
|
|
222
|
+
}
|
|
223
|
+
if (Object.keys(changes).length === 0)
|
|
224
|
+
throw new Error('Nothing to change: give a flag or --spec');
|
|
225
|
+
return await ctx
|
|
226
|
+
.client()
|
|
227
|
+
.auth.providers.update(providerId, changes);
|
|
228
|
+
}),
|
|
229
|
+
};
|
|
230
|
+
const get = {
|
|
231
|
+
kind: 'leaf',
|
|
232
|
+
name: 'get',
|
|
233
|
+
description: 'Show one provider, with the URLs your identity provider has.',
|
|
234
|
+
usage: 'kindgi sso providers get <provider-id>',
|
|
235
|
+
run: (ctx) => runSdk(ctx, 'sso providers get', async () => {
|
|
236
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
237
|
+
return await ctx.client().auth.providers.get(providerId);
|
|
238
|
+
}),
|
|
239
|
+
};
|
|
240
|
+
const list = {
|
|
241
|
+
kind: 'leaf',
|
|
242
|
+
name: 'list',
|
|
243
|
+
description: "List this tenant's sign-in providers.",
|
|
244
|
+
usage: 'kindgi sso providers list',
|
|
245
|
+
run: (ctx) => runSdk(ctx, 'sso providers list', async () => await ctx.client().auth.providers.list(), {
|
|
246
|
+
rows: (page) => page.data,
|
|
247
|
+
columns: [
|
|
248
|
+
{ header: 'PROVIDER', get: (p) => p.providerId },
|
|
249
|
+
{ header: 'KIND', get: (p) => p.kind },
|
|
250
|
+
{ header: 'NAME', get: (p) => p.displayName ?? '' },
|
|
251
|
+
{ header: 'DOMAINS', get: (p) => (p.domains ?? []).join(',') },
|
|
252
|
+
],
|
|
253
|
+
}),
|
|
254
|
+
};
|
|
255
|
+
const remove = {
|
|
256
|
+
kind: 'leaf',
|
|
257
|
+
name: 'remove',
|
|
258
|
+
description: "Stop signing in with a provider. Registering the same id again gives it the same URLs, but nobody's earlier sign-in carries over.",
|
|
259
|
+
usage: 'kindgi sso providers remove <provider-id>',
|
|
260
|
+
run: (ctx) => runSdk(ctx, 'sso providers remove', async () => {
|
|
261
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
262
|
+
return await ctx.client().auth.providers.unregister(providerId);
|
|
263
|
+
}),
|
|
264
|
+
};
|
|
265
|
+
const test = {
|
|
266
|
+
kind: 'leaf',
|
|
267
|
+
name: 'test',
|
|
268
|
+
description: 'The link to try signing in with a provider, as a person at one of its domains.',
|
|
269
|
+
usage: 'kindgi sso providers test <provider-id> [--email=<someone@your-domain>]',
|
|
270
|
+
optionSpec: {
|
|
271
|
+
email: {
|
|
272
|
+
type: 'string',
|
|
273
|
+
description: "Whose sign-in to try; default: someone at the provider's first domain.",
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
run: (ctx) => runSdkRendered(ctx, 'sso providers test', async () => {
|
|
277
|
+
const providerId = requiredPositional(ctx, 0, 'provider-id');
|
|
278
|
+
const client = ctx.client();
|
|
279
|
+
const provider = await client.auth.providers.get(providerId);
|
|
280
|
+
const domain = provider.domains?.[0];
|
|
281
|
+
const email = stringFlag(ctx, 'email') ?? (domain === undefined ? undefined : `someone@${domain}`);
|
|
282
|
+
const options = await client.auth.signInOptions(email === undefined ? undefined : { email });
|
|
283
|
+
const option = options.data.find((o) => o.providerId === providerId);
|
|
284
|
+
const signInUrl = option === undefined ? undefined : new URL(option.signInUrl, ctx.apiUrl()).toString();
|
|
285
|
+
if (ctx.globals.formatRequested) {
|
|
286
|
+
return renderJson({ providerId, email, signInUrl: signInUrl ?? null }, ctx.globals.format);
|
|
287
|
+
}
|
|
288
|
+
if (signInUrl !== undefined) {
|
|
289
|
+
return {
|
|
290
|
+
stdout: [
|
|
291
|
+
`Open this in a browser and sign in as a person who's been added to this tenant:`,
|
|
292
|
+
` ${signInUrl}`,
|
|
293
|
+
'',
|
|
294
|
+
'Afterwards, the console shows who you are signed in as.',
|
|
295
|
+
'',
|
|
296
|
+
].join('\n'),
|
|
297
|
+
stderr: '',
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
const why = email === undefined
|
|
301
|
+
? `"${providerId}" has no domains. Sign-in is email first, so people find a provider by their email's domain: kindgi sso providers update ${providerId} --domains=<your-domain>`
|
|
302
|
+
: `No sign-in page offers "${providerId}" for ${email}: its domain isn't one of the provider's, or it isn't verified for this tenant (a runtime that serves several tenants routes a domain only once its operator lists it in KINDGI_AUTH_VERIFIED_DOMAINS).`;
|
|
303
|
+
return { stdout: '', stderr: `${why}\n`, exitCode: 1 };
|
|
304
|
+
}),
|
|
305
|
+
};
|
|
306
|
+
const providers = {
|
|
307
|
+
kind: 'group',
|
|
308
|
+
name: 'providers',
|
|
309
|
+
description: "Your organization's identity providers (Google, Entra ID, Okta, Keycloak, SAML…).",
|
|
310
|
+
subcommands: [start, finish, update, get, list, test, remove],
|
|
311
|
+
};
|
|
312
|
+
export const ssoCommand = {
|
|
313
|
+
kind: 'group',
|
|
314
|
+
name: 'sso',
|
|
315
|
+
description: "Sign-in with your organization's identity provider (single sign-on).",
|
|
316
|
+
subcommands: [providers],
|
|
317
|
+
};
|
|
318
|
+
//# sourceMappingURL=sso.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sso.js","sourceRoot":"","sources":["../../src/commands/sso.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import type { ApiKeyPrincipal } from '@kindgi/client';
|
|
2
|
+
import type { CommandContext } from '../context.js';
|
|
1
3
|
import type { Command } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* `kindgi tokens`: API keys. A key acts for one principal, a person or a
|
|
6
|
+
* service account, with that principal's grants. Its role is a ceiling
|
|
7
|
+
* under them, and its project a limit.
|
|
8
|
+
*/
|
|
9
|
+
/** `--for=user:<id>` or `--for=sa:<id>` (also `service-account:<id>`). */
|
|
10
|
+
export declare function principalFlag(ctx: CommandContext, name?: string): ApiKeyPrincipal | undefined;
|
|
11
|
+
/** `--expires=30d|12h|90m` (from now) or an ISO date. */
|
|
12
|
+
export declare function expiresFlag(ctx: CommandContext, now?: () => number): string | undefined;
|
|
2
13
|
export declare const tokensCommand: Command;
|
|
3
14
|
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAYpD,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAEvD;;;;GAIG;AAEH,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,SAAQ,GAAG,eAAe,GAAG,SAAS,CAW5F;AAKD,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,eAAmB,GAAG,MAAM,GAAG,SAAS,CAc3F;AAuID,eAAO,MAAM,aAAa,EAAE,OAM3B,CAAC"}
|
package/dist/commands/tokens.js
CHANGED
|
@@ -1,33 +1,166 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
-
import {
|
|
3
|
+
import { UsageError } from '../errors.js';
|
|
4
|
+
import { renderJson } from '../output.js';
|
|
5
|
+
import { integerFlag, listFlag, requiredPositional, runSdk, runSdkRendered, stringFlag, } from './helpers.js';
|
|
6
|
+
/**
|
|
7
|
+
* `kindgi tokens`: API keys. A key acts for one principal, a person or a
|
|
8
|
+
* service account, with that principal's grants. Its role is a ceiling
|
|
9
|
+
* under them, and its project a limit.
|
|
10
|
+
*/
|
|
11
|
+
/** `--for=user:<id>` or `--for=sa:<id>` (also `service-account:<id>`). */
|
|
12
|
+
export function principalFlag(ctx, name = 'for') {
|
|
13
|
+
const raw = stringFlag(ctx, name);
|
|
14
|
+
if (raw === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
const colon = raw.indexOf(':');
|
|
17
|
+
const kind = raw.slice(0, colon);
|
|
18
|
+
const id = raw.slice(colon + 1);
|
|
19
|
+
if (colon > 0 && id !== '') {
|
|
20
|
+
if (kind === 'user')
|
|
21
|
+
return { kind: 'user', id };
|
|
22
|
+
if (kind === 'sa' || kind === 'service-account')
|
|
23
|
+
return { kind: 'service-account', id };
|
|
24
|
+
}
|
|
25
|
+
throw new UsageError(`--${name} must be user:<id> or sa:<id>, got "${raw}"`);
|
|
26
|
+
}
|
|
27
|
+
const DURATION_RE = /^(\d+)([dhm])$/;
|
|
28
|
+
const UNIT_MS = { d: 86_400_000, h: 3_600_000, m: 60_000 };
|
|
29
|
+
/** `--expires=30d|12h|90m` (from now) or an ISO date. */
|
|
30
|
+
export function expiresFlag(ctx, now = () => Date.now()) {
|
|
31
|
+
const raw = stringFlag(ctx, 'expires');
|
|
32
|
+
if (raw === undefined)
|
|
33
|
+
return undefined;
|
|
34
|
+
const span = DURATION_RE.exec(raw);
|
|
35
|
+
if (span !== null) {
|
|
36
|
+
const ms = Number(span[1]) * UNIT_MS[span[2]];
|
|
37
|
+
if (ms <= 0)
|
|
38
|
+
throw new UsageError('--expires must be in the future');
|
|
39
|
+
return new Date(now() + ms).toISOString();
|
|
40
|
+
}
|
|
41
|
+
const at = new Date(raw);
|
|
42
|
+
if (Number.isNaN(at.getTime())) {
|
|
43
|
+
throw new UsageError(`--expires must be like 30d, 12h or 90m, or an ISO date; got "${raw}"`);
|
|
44
|
+
}
|
|
45
|
+
return at.toISOString();
|
|
46
|
+
}
|
|
47
|
+
const principalCell = (p) => p === undefined ? '' : `${p.kind === 'user' ? 'user' : 'sa'}:${p.id}`;
|
|
48
|
+
const when = (v) => (v !== undefined ? String(v) : '');
|
|
49
|
+
/** `tokens list --table`. */
|
|
50
|
+
const TOKENS_TABLE = {
|
|
51
|
+
rows: (page) => page.data,
|
|
52
|
+
columns: [
|
|
53
|
+
{ header: 'ID', get: (t) => String(t.id) },
|
|
54
|
+
{ header: 'FOR', get: (t) => principalCell(t.principal) },
|
|
55
|
+
{ header: 'ROLE', get: (t) => t.role },
|
|
56
|
+
{ header: 'PROJECT', get: (t) => when(t.projectId) },
|
|
57
|
+
{ header: 'LABEL', get: (t) => t.label ?? '' },
|
|
58
|
+
{ header: 'CREATED', get: (t) => String(t.createdAt) },
|
|
59
|
+
{ header: 'EXPIRES', get: (t) => when(t.expiresAt) },
|
|
60
|
+
{ header: 'REVOKED', get: (t) => when(t.revokedAt) },
|
|
61
|
+
{ header: 'LAST USED', get: (t) => when(t.lastUsedAt) },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
const ROLES = ['member', 'admin'];
|
|
4
65
|
const create = {
|
|
5
66
|
kind: 'leaf',
|
|
6
67
|
name: 'create',
|
|
7
|
-
description: 'Create a
|
|
8
|
-
usage: 'kindgi tokens create --
|
|
68
|
+
description: 'Create an API key, for you or (a tenant admin) for someone else. Its secret is printed once, here: store it now, nothing shows it again. A `member` key takes no admin action on the tenant; a key limited to a project acts only there.',
|
|
69
|
+
usage: 'kindgi tokens create [--for=user:<id>|sa:<id>] [--role=member|admin] [--project=<project-id>] [--expires=30d|<iso-date>] [--label=<text>] [--capability=<cap>]…',
|
|
9
70
|
optionSpec: {
|
|
10
|
-
|
|
71
|
+
for: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Whom it acts for: `user:<id>` or `sa:<service-account-id>` (default: you).',
|
|
74
|
+
},
|
|
75
|
+
role: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: '`member` (the default) or `admin` (needs a tenant admin, for one).',
|
|
78
|
+
},
|
|
79
|
+
project: { type: 'string', description: 'Limit the key to this project.' },
|
|
80
|
+
expires: {
|
|
11
81
|
type: 'string',
|
|
12
|
-
description: '
|
|
82
|
+
description: 'When it stops working: `30d`, `12h`, `90m` from now, or an ISO date.',
|
|
83
|
+
},
|
|
84
|
+
label: { type: 'string', description: 'What the key is for, e.g. `ci`.' },
|
|
85
|
+
capability: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
multiple: true,
|
|
88
|
+
description: 'A capability it carries (repeatable); you must hold it.',
|
|
13
89
|
},
|
|
14
90
|
},
|
|
15
|
-
run: (ctx) =>
|
|
91
|
+
run: (ctx) => runSdkRendered(ctx, 'tokens create', async () => {
|
|
92
|
+
const principal = principalFlag(ctx);
|
|
93
|
+
const role = stringFlag(ctx, 'role');
|
|
94
|
+
if (role !== undefined && !ROLES.includes(role)) {
|
|
95
|
+
throw new UsageError(`--role must be member or admin, got "${role}"`);
|
|
96
|
+
}
|
|
97
|
+
const projectId = stringFlag(ctx, 'project');
|
|
98
|
+
const expiresAt = expiresFlag(ctx);
|
|
99
|
+
const label = stringFlag(ctx, 'label');
|
|
100
|
+
const capabilities = listFlag(ctx, 'capability');
|
|
101
|
+
const created = await ctx.client().tokens.create({
|
|
102
|
+
...(principal !== undefined && { for: principal }),
|
|
103
|
+
...(role !== undefined && { role: role }),
|
|
104
|
+
...(projectId !== undefined && { projectId: projectId }),
|
|
105
|
+
...(expiresAt !== undefined && { expiresAt: expiresAt }),
|
|
106
|
+
...(label !== undefined && { label }),
|
|
107
|
+
...(capabilities.length > 0 && { capabilities }),
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
...renderJson(created, ctx.globals.format),
|
|
111
|
+
stderr: `⚠ The secret of key ${String(created.meta.id)} is shown once, above: store it now.\n`,
|
|
112
|
+
};
|
|
113
|
+
}),
|
|
114
|
+
};
|
|
115
|
+
const list = {
|
|
116
|
+
kind: 'leaf',
|
|
117
|
+
name: 'list',
|
|
118
|
+
description: 'List API keys, newest first, revoked ones included; never secrets. A tenant admin sees every key (`--for` narrows to one principal); anyone else, their own.',
|
|
119
|
+
usage: 'kindgi tokens list [--for=user:<id>|sa:<id>] [--limit=<n>] [--cursor=<c>] [--table]',
|
|
120
|
+
optionSpec: {
|
|
121
|
+
for: { type: 'string', description: "Only this principal's keys (tenant admins)." },
|
|
122
|
+
limit: { type: 'string', description: 'The most keys to return.' },
|
|
123
|
+
cursor: {
|
|
124
|
+
type: 'string',
|
|
125
|
+
description: "Resume after this cursor, from the previous page's `nextCursor`.",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
run: (ctx) => runSdk(ctx, 'tokens list', async () => {
|
|
129
|
+
const principal = principalFlag(ctx);
|
|
130
|
+
const limit = integerFlag(ctx, 'limit');
|
|
131
|
+
const cursor = stringFlag(ctx, 'cursor');
|
|
132
|
+
return await ctx.client().tokens.list({
|
|
133
|
+
...(principal !== undefined && { principal }),
|
|
134
|
+
...(limit !== undefined && { limit }),
|
|
135
|
+
...(cursor !== undefined && { cursor: cursor }),
|
|
136
|
+
});
|
|
137
|
+
}, TOKENS_TABLE),
|
|
138
|
+
};
|
|
139
|
+
const get = {
|
|
140
|
+
kind: 'leaf',
|
|
141
|
+
name: 'get',
|
|
142
|
+
description: 'One API key, by id. No secret.',
|
|
143
|
+
usage: 'kindgi tokens get <token-id>',
|
|
144
|
+
run: (ctx) => runSdk(ctx, 'tokens get', async () => {
|
|
145
|
+
const id = requiredPositional(ctx, 0, 'token-id');
|
|
146
|
+
return await ctx.client().tokens.get(id);
|
|
147
|
+
}),
|
|
16
148
|
};
|
|
17
149
|
const revoke = {
|
|
18
150
|
kind: 'leaf',
|
|
19
151
|
name: 'revoke',
|
|
20
|
-
description: 'Revoke an API
|
|
152
|
+
description: 'Revoke an API key: from its next request on, it is refused.',
|
|
21
153
|
usage: 'kindgi tokens revoke <token-id>',
|
|
22
154
|
run: (ctx) => runSdk(ctx, 'tokens revoke', async () => {
|
|
23
|
-
requiredPositional(ctx, 0, 'token-id');
|
|
24
|
-
|
|
155
|
+
const id = requiredPositional(ctx, 0, 'token-id');
|
|
156
|
+
await ctx.client().tokens.revoke(id);
|
|
157
|
+
return { tokenId: id, revoked: true };
|
|
25
158
|
}),
|
|
26
159
|
};
|
|
27
160
|
export const tokensCommand = {
|
|
28
161
|
kind: 'group',
|
|
29
162
|
name: 'tokens',
|
|
30
|
-
description: '
|
|
31
|
-
subcommands: [create, revoke],
|
|
163
|
+
description: 'API keys for you, a person or a service account: create (its secret shown once), list, get, revoke.',
|
|
164
|
+
subcommands: [create, list, get, revoke],
|
|
32
165
|
};
|
|
33
166
|
//# sourceMappingURL=tokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AAuKvD,eAAO,MAAM,YAAY,EAAE,OAK1B,CAAC"}
|
package/dist/commands/tools.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
import { UsageError } from '../errors.js';
|
|
3
4
|
import { projectIdFlag, readJsonInput, requiredPositional, runSdk, stringFlag, truncateCell, } from './helpers.js';
|
|
4
5
|
/** `tools list --table`. */
|
|
5
6
|
const TOOLS_TABLE = {
|
|
@@ -32,7 +33,7 @@ const list = {
|
|
|
32
33
|
const limitStr = stringFlag(ctx, 'limit');
|
|
33
34
|
const limit = limitStr !== undefined ? Number.parseInt(limitStr, 10) : undefined;
|
|
34
35
|
if (limit !== undefined && Number.isNaN(limit)) {
|
|
35
|
-
throw new
|
|
36
|
+
throw new UsageError(`--limit must be an integer, got "${limitStr}"`);
|
|
36
37
|
}
|
|
37
38
|
return await ctx.client().tools.list({
|
|
38
39
|
...(name !== undefined && { name }),
|
|
@@ -69,7 +70,7 @@ const publish = {
|
|
|
69
70
|
run: (ctx) => runSdk(ctx, 'tools publish', async () => {
|
|
70
71
|
const manifestText = stringFlag(ctx, 'manifest');
|
|
71
72
|
if (manifestText === undefined)
|
|
72
|
-
throw new
|
|
73
|
+
throw new UsageError('--manifest=<json-or-@file> is required');
|
|
73
74
|
const manifest = (await readJsonInput(manifestText));
|
|
74
75
|
const projectId = await projectIdFlag(ctx);
|
|
75
76
|
return await ctx.client().tools.register(manifest, { projectId });
|
|
@@ -111,7 +112,7 @@ const versions = {
|
|
|
111
112
|
const limitStr = stringFlag(ctx, 'limit');
|
|
112
113
|
const limit = limitStr !== undefined ? Number.parseInt(limitStr, 10) : undefined;
|
|
113
114
|
if (limit !== undefined && Number.isNaN(limit)) {
|
|
114
|
-
throw new
|
|
115
|
+
throw new UsageError(`--limit must be an integer, got "${limitStr}"`);
|
|
115
116
|
}
|
|
116
117
|
const includeTombstoned = ctx.options['include-tombstoned'] === true;
|
|
117
118
|
return await ctx.client().tools.versions.list(toolId, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAKjC,OAAO,EAEL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,YAAY,GACb,MAAM,cAAc,CAAC;AAGtB,4BAA4B;AAC5B,MAAM,WAAW,GAAoC;IACnD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI;IACzB,OAAO,EAAE;QACP,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAChD,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE;QACxD,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,IAAI,GAAgB;IACxB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,wBAAwB;IACrC,KAAK,EAAE,kEAAkE;IACzE,UAAU,EAAE;QACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kDAAkD,EAAE;QACzF,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qDAAqD;SACnE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kEAAkE;SAChF;KACF;IACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CACX,MAAM,CACJ,GAAG,EACH,YAAY,EACZ,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwired.d.ts","sourceRoot":"","sources":["../../src/commands/unwired.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"unwired.d.ts","sourceRoot":"","sources":["../../src/commands/unwired.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA6B,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAC;AAEH,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMzE;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAKxD;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,MAAM,GAAE,SAAS,MAAM,EAAO,GAC7B,SAAS,OAAO,EAAE,CAEpB"}
|