@mrmtsu/mcms-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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +184 -0
  3. package/README.md +185 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +143 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/api.d.ts +2 -0
  8. package/dist/commands/api.js +27 -0
  9. package/dist/commands/api.js.map +1 -0
  10. package/dist/commands/auth.d.ts +2 -0
  11. package/dist/commands/auth.js +238 -0
  12. package/dist/commands/auth.js.map +1 -0
  13. package/dist/commands/completion.d.ts +2 -0
  14. package/dist/commands/completion.js +390 -0
  15. package/dist/commands/completion.js.map +1 -0
  16. package/dist/commands/config.d.ts +2 -0
  17. package/dist/commands/config.js +63 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/content.d.ts +2 -0
  20. package/dist/commands/content.js +191 -0
  21. package/dist/commands/content.js.map +1 -0
  22. package/dist/commands/media.d.ts +2 -0
  23. package/dist/commands/media.js +47 -0
  24. package/dist/commands/media.js.map +1 -0
  25. package/dist/commands/schema.d.ts +2 -0
  26. package/dist/commands/schema.js +71 -0
  27. package/dist/commands/schema.js.map +1 -0
  28. package/dist/commands/types.d.ts +2 -0
  29. package/dist/commands/types.js +85 -0
  30. package/dist/commands/types.js.map +1 -0
  31. package/dist/commands/utils.d.ts +8 -0
  32. package/dist/commands/utils.js +56 -0
  33. package/dist/commands/utils.js.map +1 -0
  34. package/dist/commands/validate.d.ts +2 -0
  35. package/dist/commands/validate.js +38 -0
  36. package/dist/commands/validate.js.map +1 -0
  37. package/dist/core/auth-store.d.ts +11 -0
  38. package/dist/core/auth-store.js +83 -0
  39. package/dist/core/auth-store.js.map +1 -0
  40. package/dist/core/client.d.ts +33 -0
  41. package/dist/core/client.js +416 -0
  42. package/dist/core/client.js.map +1 -0
  43. package/dist/core/config.d.ts +11 -0
  44. package/dist/core/config.js +73 -0
  45. package/dist/core/config.js.map +1 -0
  46. package/dist/core/context.d.ts +39 -0
  47. package/dist/core/context.js +382 -0
  48. package/dist/core/context.js.map +1 -0
  49. package/dist/core/errors.d.ts +26 -0
  50. package/dist/core/errors.js +167 -0
  51. package/dist/core/errors.js.map +1 -0
  52. package/dist/core/exit-codes.d.ts +10 -0
  53. package/dist/core/exit-codes.js +10 -0
  54. package/dist/core/exit-codes.js.map +1 -0
  55. package/dist/core/http.d.ts +24 -0
  56. package/dist/core/http.js +237 -0
  57. package/dist/core/http.js.map +1 -0
  58. package/dist/core/io.d.ts +2 -0
  59. package/dist/core/io.js +39 -0
  60. package/dist/core/io.js.map +1 -0
  61. package/dist/core/output.d.ts +4 -0
  62. package/dist/core/output.js +182 -0
  63. package/dist/core/output.js.map +1 -0
  64. package/dist/core/schema.d.ts +23 -0
  65. package/dist/core/schema.js +319 -0
  66. package/dist/core/schema.js.map +1 -0
  67. package/dist/validation/payload.d.ts +6 -0
  68. package/dist/validation/payload.js +204 -0
  69. package/dist/validation/payload.js.map +1 -0
  70. package/package.json +39 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Yusuke
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,184 @@
1
+ # mcms-cli
2
+
3
+ [English](./README.md) | 日本語
4
+
5
+ > 非公式プロジェクトです。このCLIは microCMS 公式とは無関係であり、承認・運営されていません。
6
+
7
+ `--json` の安定出力と終了コード設計を備えた、microCMS向けの AI/CI フレンドリー CLI です。
8
+
9
+ ## 命名の整理
10
+
11
+ - GitHub リポジトリ名: `mcms-cli`
12
+ - npm パッケージ名: `@mrmtsu/mcms-cli`
13
+ - 実際に実行するコマンド名: `microcms`
14
+ - ローカル保存時の識別子(configディレクトリ / keychain service): `mcms-cli`
15
+
16
+ `microcms` を実行コマンド名にしているのは可読性のためです。
17
+ 非公式であることは README 先頭に明記しています。
18
+
19
+ ## インストール
20
+
21
+ ```bash
22
+ npm i -g @mrmtsu/mcms-cli
23
+ # or
24
+ npx @mrmtsu/mcms-cli --help
25
+ ```
26
+
27
+ ## 認証
28
+
29
+ 現状は API キー認証のみです(OAuth は未対応)。
30
+
31
+ ```bash
32
+ # CI / 非対話実行の推奨:
33
+ export MICROCMS_SERVICE_DOMAIN=<service>
34
+ export MICROCMS_API_KEY=<key>
35
+
36
+ # 任意: named profile
37
+ microcms auth profile add work --service-domain <service> --set-default
38
+ microcms auth profile list --json
39
+
40
+ # キーチェーン保存:
41
+ printf '%s' '<key>' | microcms auth login --service-domain <service> --api-key-stdin
42
+ # TTY 対話入力(非表示):
43
+ microcms auth login --service-domain <service> --prompt
44
+ microcms auth status --json
45
+ ```
46
+
47
+ API キー解決順:
48
+ 1. `--api-key` / `--api-key-stdin`
49
+ 2. `MICROCMS_API_KEY`
50
+ 3. 選択中 profile の OS キーチェーン
51
+ 4. 解決済み service domain の OS キーチェーンエントリ
52
+
53
+ service domain 解決順:
54
+ 1. `--service-domain`
55
+ 2. `MICROCMS_SERVICE_DOMAIN`
56
+ 3. config の選択 profile(`--profile`, `MICROCMS_PROFILE`, default profile)
57
+ 4. config ファイル値(`$XDG_CONFIG_HOME/mcms-cli/config.json`)
58
+
59
+ ## コマンド
60
+
61
+ ```bash
62
+ microcms api list --json
63
+ microcms api info <endpoint> --json
64
+
65
+ microcms content list <endpoint> --json
66
+ microcms content list <endpoint> --all --json
67
+ microcms content get <endpoint> <id> --json
68
+ microcms content create <endpoint> --file payload.json --json
69
+ microcms content create <endpoint> --file payload.json --dry-run --json
70
+ microcms content update <endpoint> <id> --file payload.json --json
71
+ microcms content delete <endpoint> <id> --json
72
+
73
+ microcms media upload <path> --json
74
+ microcms media upload <path> --dry-run --json
75
+ microcms validate <endpoint> --file payload.json --json
76
+
77
+ microcms schema pull --out microcms-schema.json --json
78
+ microcms types generate --schema microcms-schema.json --out microcms-types.d.ts --json
79
+
80
+ microcms config doctor --json
81
+ microcms completion install zsh --json
82
+ microcms completion uninstall --json
83
+
84
+ microcms auth profile list --json
85
+ microcms auth profile add <name> --service-domain <service> [--set-default] --json
86
+ microcms auth profile use <name> --json
87
+ microcms auth profile remove <name> --json
88
+ ```
89
+
90
+ `validate` は API メタデータが取得できる場合、required/unknown/type/enum 相当チェックを行います。
91
+
92
+ ## グローバルオプション
93
+
94
+ - `--json`
95
+ - `--plain`
96
+ - `--table`
97
+ - `--select <fields>`
98
+ - `--profile <name>`
99
+ - `--service-domain <serviceDomain>`
100
+ - `--api-key <apiKey>`(非推奨: シェル履歴/プロセス一覧に露出しうる)
101
+ - `--api-key-stdin`
102
+ - `--timeout <ms>`
103
+ - `--retry <count>`
104
+ - `--retry-max-delay <ms>`
105
+ - `--verbose`
106
+ - `--no-color`
107
+
108
+ 補完では `microcms completion endpoints` を使って endpoint 候補を動的取得します。
109
+ `--retry` はデフォルトで retry-safe なリクエスト(GET)に適用されます。
110
+
111
+ ## JSON 契約 (v0)
112
+
113
+ Success:
114
+
115
+ ```json
116
+ {
117
+ "ok": true,
118
+ "data": {},
119
+ "meta": {
120
+ "requestId": null,
121
+ "version": "0.x"
122
+ }
123
+ }
124
+ ```
125
+
126
+ Error:
127
+
128
+ ```json
129
+ {
130
+ "ok": false,
131
+ "error": {
132
+ "code": "AUTH_FAILED",
133
+ "message": "...",
134
+ "retryable": false
135
+ },
136
+ "meta": {
137
+ "requestId": null,
138
+ "version": "0.x"
139
+ }
140
+ }
141
+ ```
142
+
143
+ `error.details` は `--verbose` 指定時のみ含まれます。
144
+
145
+ ## 終了コード
146
+
147
+ - `0`: success
148
+ - `2`: invalid input
149
+ - `3`: auth error
150
+ - `4`: permission error
151
+ - `5`: network/timeout
152
+ - `6`: conflict
153
+ - `1`: unknown error
154
+
155
+ ## 開発
156
+
157
+ ```bash
158
+ npm install
159
+ npm run test
160
+ npm run build
161
+ ```
162
+
163
+ ## 補足
164
+
165
+ - `api list/info` と `media upload` は microCMS Management API を利用します。
166
+ - Management API base URL のデフォルト: `https://<serviceDomain>.microcms-management.io`
167
+ - `MICROCMS_MANAGEMENT_API_BASE_URL` で上書き可能です。
168
+ - Content API base URL: `https://<serviceDomain>.microcms.io`
169
+ - `MICROCMS_CONTENT_API_BASE_URL` で上書き可能です(主にテスト用途)。
170
+ - ネットワーク不要の contract テストでは `MICROCMS_CONTENT_MOCK_FILE` を使えます。
171
+ - `MICROCMS_*_BASE_URL` の override 先は localhost または microcms ドメインのみ許可します。
172
+
173
+ ## 免責事項
174
+
175
+ - 本プロジェクトは非公式のコミュニティ製ツールであり、microCMS 公式とは無関係です。
176
+ - 本ソフトウェアは MIT License の下で「現状有姿(as is)」で提供され、いかなる保証もありません。
177
+ - 本番利用前に、必ずご自身の環境で検証し、必要なバックアップを取得してください。
178
+ - API キーの管理および本CLIで実行した操作の責任は利用者にあります。
179
+
180
+ ## OSS ドキュメント
181
+
182
+ - [Contributing](./CONTRIBUTING.md)
183
+ - [Security](./SECURITY.md)
184
+ - [Changelog](./CHANGELOG.md)
package/README.md ADDED
@@ -0,0 +1,185 @@
1
+ # mcms-cli
2
+
3
+ English | [日本語](./README.ja.md)
4
+
5
+ > Unofficial project. This CLI is not affiliated with, endorsed by, or maintained by microCMS.
6
+
7
+ AI/CI friendly CLI for microCMS with stable `--json` output and deterministic exit codes.
8
+
9
+ ## Naming
10
+
11
+ - GitHub repository name: `mcms-cli`
12
+ - npm package name: `@mrmtsu/mcms-cli`
13
+ - command you run: `microcms`
14
+ - local storage identifier (config dir / keychain service): `mcms-cli`
15
+
16
+ `microcms` as the command name is intentional for readability.
17
+ This project is unofficial, and that is explicitly stated in this README.
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ npm i -g @mrmtsu/mcms-cli
23
+ # or
24
+ npx @mrmtsu/mcms-cli --help
25
+ ```
26
+
27
+ ## Auth
28
+
29
+ This MVP uses API keys (not OAuth).
30
+
31
+ ```bash
32
+ # Recommended for CI/non-interactive:
33
+ export MICROCMS_SERVICE_DOMAIN=<service>
34
+ export MICROCMS_API_KEY=<key>
35
+
36
+ # Optional: use a named profile
37
+ microcms auth profile add work --service-domain <service> --set-default
38
+ microcms auth profile list --json
39
+
40
+ # Or store key in keychain:
41
+ printf '%s' '<key>' | microcms auth login --service-domain <service> --api-key-stdin
42
+ # Interactive TTY prompt (hidden input):
43
+ microcms auth login --service-domain <service> --prompt
44
+ microcms auth status --json
45
+ ```
46
+
47
+ Resolution order for API key:
48
+ 1. `--api-key` / `--api-key-stdin`
49
+ 2. `MICROCMS_API_KEY`
50
+ 3. OS keychain for selected profile (if available)
51
+ 4. OS keychain entry for resolved service domain
52
+
53
+ Resolution order for service domain:
54
+ 1. `--service-domain`
55
+ 2. `MICROCMS_SERVICE_DOMAIN`
56
+ 3. selected profile in config (`--profile`, `MICROCMS_PROFILE`, default profile)
57
+ 4. config file value (`$XDG_CONFIG_HOME/mcms-cli/config.json`)
58
+
59
+ ## Commands
60
+
61
+ ```bash
62
+ microcms api list --json
63
+ microcms api info <endpoint> --json
64
+
65
+ microcms content list <endpoint> --json
66
+ microcms content list <endpoint> --all --json
67
+ microcms content get <endpoint> <id> --json
68
+ microcms content create <endpoint> --file payload.json --json
69
+ microcms content create <endpoint> --file payload.json --dry-run --json
70
+ microcms content update <endpoint> <id> --file payload.json --json
71
+ microcms content delete <endpoint> <id> --json
72
+
73
+ microcms media upload <path> --json
74
+ microcms media upload <path> --dry-run --json
75
+ microcms validate <endpoint> --file payload.json --json
76
+
77
+ microcms schema pull --out microcms-schema.json --json
78
+ microcms types generate --schema microcms-schema.json --out microcms-types.d.ts --json
79
+
80
+ microcms config doctor --json
81
+ microcms completion install zsh --json
82
+ microcms completion uninstall --json
83
+
84
+ microcms auth profile list --json
85
+ microcms auth profile add <name> --service-domain <service> [--set-default] --json
86
+ microcms auth profile use <name> --json
87
+ microcms auth profile remove <name> --json
88
+ ```
89
+
90
+ `validate` is schema-aware when API metadata is available (required/unknown/type/enum-like checks).
91
+
92
+ Global options:
93
+
94
+ - `--json`
95
+ - `--plain`
96
+ - `--table`
97
+ - `--select <fields>`
98
+ - `--profile <name>`
99
+ - `--service-domain <serviceDomain>`
100
+ - `--api-key <apiKey>` (less secure)
101
+ - `--api-key-stdin`
102
+ - `--timeout <ms>`
103
+ - `--retry <count>`
104
+ - `--retry-max-delay <ms>`
105
+ - `--verbose`
106
+ - `--no-color`
107
+
108
+ Completion scripts use dynamic endpoint suggestions via `microcms completion endpoints` (internal helper).
109
+ `--retry` is applied to retry-safe requests (GET) by default.
110
+
111
+ ## JSON contract (v0)
112
+
113
+ Success:
114
+
115
+ ```json
116
+ {
117
+ "ok": true,
118
+ "data": {},
119
+ "meta": {
120
+ "requestId": null,
121
+ "version": "0.x"
122
+ }
123
+ }
124
+ ```
125
+
126
+ Error:
127
+
128
+ ```json
129
+ {
130
+ "ok": false,
131
+ "error": {
132
+ "code": "AUTH_FAILED",
133
+ "message": "...",
134
+ "retryable": false
135
+ },
136
+ "meta": {
137
+ "requestId": null,
138
+ "version": "0.x"
139
+ }
140
+ }
141
+ ```
142
+
143
+ `error.details` is included only when `--verbose` is enabled.
144
+
145
+ ## Exit codes
146
+
147
+ - `0`: success
148
+ - `2`: invalid input
149
+ - `3`: auth error
150
+ - `4`: permission error
151
+ - `5`: network/timeout
152
+ - `6`: conflict
153
+ - `1`: unknown error
154
+
155
+ ## Development
156
+
157
+ ```bash
158
+ npm install
159
+ npm run test
160
+ npm run build
161
+ ```
162
+
163
+ ## Notes
164
+
165
+ - `api list/info` and `media upload` use microCMS Management API.
166
+ - Default management API base URL is `https://<serviceDomain>.microcms-management.io`.
167
+ - You can override with `MICROCMS_MANAGEMENT_API_BASE_URL`.
168
+ - Content API base URL is `https://<serviceDomain>.microcms.io`.
169
+ - You can override content API base URL with `MICROCMS_CONTENT_API_BASE_URL` (primarily for tests).
170
+ - For contract tests without network, use `MICROCMS_CONTENT_MOCK_FILE` to run content CRUD against a local JSON fixture store.
171
+ - `MICROCMS_*_BASE_URL` overrides only allow localhost or microcms domains.
172
+
173
+ ## Disclaimer
174
+
175
+ - This is an unofficial community project and is not affiliated with microCMS.
176
+ - The software is provided "as is" under the MIT License, without warranty.
177
+ - Validate behavior in your environment and take backups before production use.
178
+ - You are responsible for API key management and all operations executed with this CLI.
179
+
180
+ ## OSS Docs
181
+
182
+ - [Contributing](./CONTRIBUTING.md)
183
+ - [Security](./SECURITY.md)
184
+ - [Changelog](./CHANGELOG.md)
185
+ # mcms-cli
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from "node:module";
3
+ import { Command, CommanderError } from "commander";
4
+ import { registerApiCommands } from "./commands/api.js";
5
+ import { registerAuthCommands } from "./commands/auth.js";
6
+ import { registerCompletionCommands } from "./commands/completion.js";
7
+ import { registerConfigCommands } from "./commands/config.js";
8
+ import { registerContentCommands } from "./commands/content.js";
9
+ import { registerMediaCommands } from "./commands/media.js";
10
+ import { registerSchemaCommands } from "./commands/schema.js";
11
+ import { registerTypesCommands } from "./commands/types.js";
12
+ import { registerValidateCommand } from "./commands/validate.js";
13
+ import { CliError, normalizeError } from "./core/errors.js";
14
+ import { EXIT_CODE } from "./core/exit-codes.js";
15
+ import { printError } from "./core/output.js";
16
+ const VERSION = resolveVersion();
17
+ function resolveVersion() {
18
+ try {
19
+ const require = createRequire(import.meta.url);
20
+ const pkg = require("../package.json");
21
+ if (typeof pkg.version === "string" && pkg.version.length > 0) {
22
+ return pkg.version;
23
+ }
24
+ }
25
+ catch {
26
+ // fallback for non-standard runtime layouts
27
+ }
28
+ return "0.1.0";
29
+ }
30
+ async function main(argv) {
31
+ const isJsonMode = argv.includes("--json");
32
+ const program = new Command();
33
+ program
34
+ .name("microcms")
35
+ .description("AI/CI friendly microCMS CLI")
36
+ .version(VERSION)
37
+ .option("--json", "machine-readable JSON output")
38
+ .option("--plain", "human output mode (line-oriented)")
39
+ .option("--table", "human output mode (table)")
40
+ .option("--select <fields>", "comma-separated field names for --table output")
41
+ .option("--profile <name>", "profile name to resolve service domain / keychain key")
42
+ .option("--service-domain <serviceDomain>", "microCMS service domain")
43
+ .option("--api-key <apiKey>", "microCMS API key (less secure: may leak via shell history/process list)")
44
+ .option("--api-key-stdin", "read microCMS API key from stdin")
45
+ .option("--timeout <ms>", "request timeout in milliseconds", "10000")
46
+ .option("--retry <count>", "retry count for retryable failures (0-10)", "2")
47
+ .option("--retry-max-delay <ms>", "max retry delay in milliseconds (100-120000)", "3000")
48
+ .option("--verbose", "verbose error output")
49
+ .option("--no-color", "disable colorized output")
50
+ .showHelpAfterError();
51
+ program.configureOutput({
52
+ writeOut: (text) => {
53
+ if (!isJsonMode) {
54
+ process.stdout.write(text);
55
+ }
56
+ },
57
+ writeErr: (text) => {
58
+ if (!isJsonMode) {
59
+ process.stderr.write(text);
60
+ }
61
+ }
62
+ });
63
+ registerAuthCommands(program);
64
+ registerApiCommands(program);
65
+ registerConfigCommands(program);
66
+ registerCompletionCommands(program);
67
+ registerContentCommands(program);
68
+ registerMediaCommands(program);
69
+ registerSchemaCommands(program);
70
+ registerTypesCommands(program);
71
+ registerValidateCommand(program);
72
+ program.exitOverride();
73
+ try {
74
+ await program.parseAsync(argv, { from: "user" });
75
+ }
76
+ catch (error) {
77
+ if (error instanceof CommanderError && (error.code === "commander.helpDisplayed" || error.exitCode === 0)) {
78
+ process.exit(EXIT_CODE.SUCCESS);
79
+ return;
80
+ }
81
+ const fallbackContext = createFallbackContext(argv);
82
+ const normalized = normalizeCommander(error) ?? normalizeError(error);
83
+ printError(fallbackContext, normalized);
84
+ process.exit(normalized.exitCode);
85
+ }
86
+ }
87
+ function createFallbackContext(argv) {
88
+ const json = argv.includes("--json");
89
+ const plain = argv.includes("--plain");
90
+ const table = argv.includes("--table");
91
+ const selectFields = parseSelectFieldsFromArgv(argv);
92
+ const outputMode = table ? "table" : plain ? "plain" : "inspect";
93
+ return {
94
+ json,
95
+ verbose: argv.includes("--verbose"),
96
+ color: !argv.includes("--no-color"),
97
+ timeoutMs: 10_000,
98
+ retry: 2,
99
+ retryMaxDelayMs: 3_000,
100
+ outputMode,
101
+ selectFields,
102
+ profile: undefined,
103
+ profileSource: "none",
104
+ serviceDomain: undefined,
105
+ serviceDomainSource: "none",
106
+ apiKey: undefined,
107
+ apiKeySource: "none",
108
+ apiKeySourceDetail: "none"
109
+ };
110
+ }
111
+ function parseSelectFieldsFromArgv(argv) {
112
+ const selectIndex = argv.indexOf("--select");
113
+ if (selectIndex === -1) {
114
+ return undefined;
115
+ }
116
+ const raw = argv.at(selectIndex + 1);
117
+ if (!raw || raw.startsWith("--")) {
118
+ return undefined;
119
+ }
120
+ const fields = raw
121
+ .split(",")
122
+ .map((field) => field.trim())
123
+ .filter((field) => field.length > 0);
124
+ return fields.length > 0 ? fields : undefined;
125
+ }
126
+ function normalizeCommander(error) {
127
+ if (!(error instanceof CommanderError)) {
128
+ return null;
129
+ }
130
+ if (error.exitCode === 0) {
131
+ return null;
132
+ }
133
+ return new CliError({
134
+ code: "INVALID_INPUT",
135
+ message: error.message,
136
+ exitCode: EXIT_CODE.INVALID_INPUT,
137
+ details: {
138
+ commanderCode: error.code
139
+ }
140
+ });
141
+ }
142
+ void main(process.argv.slice(2));
143
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerApiCommands(program: Command): void;
@@ -0,0 +1,27 @@
1
+ import { getApiInfo, listApis } from "../core/client.js";
2
+ import { printSuccess } from "../core/output.js";
3
+ import { contextFromCommand, getActionCommand } from "./utils.js";
4
+ export function registerApiCommands(program) {
5
+ const api = program.command("api").description("Inspect APIs");
6
+ api
7
+ .command("list")
8
+ .description("List APIs")
9
+ .action(async (...actionArgs) => {
10
+ const command = getActionCommand(actionArgs);
11
+ const ctx = await contextFromCommand(command);
12
+ const result = await listApis(ctx);
13
+ printSuccess(ctx, result.data, result.requestId);
14
+ });
15
+ api
16
+ .command("info")
17
+ .argument("<endpoint>", "API endpoint")
18
+ .description("Show API details")
19
+ .action(async (...actionArgs) => {
20
+ const endpoint = actionArgs[0];
21
+ const command = getActionCommand(actionArgs);
22
+ const ctx = await contextFromCommand(command);
23
+ const result = await getApiInfo(ctx, endpoint);
24
+ printSuccess(ctx, result.data, result.requestId);
25
+ });
26
+ }
27
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/commands/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE/D,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,KAAK,EAAE,GAAG,UAAqB,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEL,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;SACtC,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,GAAG,UAAqB,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACzC,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAuthCommands(program: Command): void;