@asyncapi/cli 3.5.1 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/dev CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env nod
1
+ #!/usr/bin/env node
2
2
 
3
3
  const oclif = require('@oclif/core')
4
4
 
@@ -12,6 +12,7 @@ const helmet_1 = tslib_1.__importDefault(require("helmet"));
12
12
  const logger_1 = require("../../utils/logger");
13
13
  const constants_1 = require("./constants");
14
14
  const problem_middleware_1 = require("./middlewares/problem.middleware");
15
+ const logger_middleware_1 = require("./middlewares/logger.middleware");
15
16
  class App {
16
17
  constructor(controllers, port = process.env.PORT || 80, env = process.env.NODE_ENV || 'development') {
17
18
  this.controllers = controllers;
@@ -71,6 +72,7 @@ class App {
71
72
  // for `/docs` path
72
73
  crossOriginEmbedderPolicy: false,
73
74
  }));
75
+ this.app.use(logger_middleware_1.loggerMiddleware);
74
76
  });
75
77
  }
76
78
  initializeControllers() {
@@ -0,0 +1,8 @@
1
+ import { Router } from 'express';
2
+ import { Controller } from '../../../interfaces';
3
+ export declare class VersionController implements Controller {
4
+ basepath: string;
5
+ private startTime;
6
+ private getPackageInfo;
7
+ boot(): Promise<Router>;
8
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionController = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const os = tslib_1.__importStar(require("os"));
6
+ const fs = tslib_1.__importStar(require("fs"));
7
+ const path = tslib_1.__importStar(require("path"));
8
+ const express_1 = require("express");
9
+ class VersionController {
10
+ constructor() {
11
+ this.basepath = '/version';
12
+ this.startTime = new Date();
13
+ }
14
+ getPackageInfo() {
15
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
16
+ try {
17
+ const packagePath = path.join(process.cwd(), 'package.json');
18
+ return JSON.parse(fs.readFileSync(packagePath, 'utf8'));
19
+ }
20
+ catch (_a) {
21
+ return {};
22
+ }
23
+ });
24
+ }
25
+ boot() {
26
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
27
+ const router = (0, express_1.Router)();
28
+ router.get(`${this.basepath}`, (req, res, next) => tslib_1.__awaiter(this, void 0, void 0, function* () {
29
+ var _a;
30
+ try {
31
+ const packageJson = yield this.getPackageInfo();
32
+ const versionInfo = {
33
+ // Core version information
34
+ version: packageJson.version || process.env.npm_package_version || 'unknown',
35
+ name: packageJson.name || 'AsyncAPI CLI API',
36
+ description: packageJson.description || 'All in one CLI for all AsyncAPI tools',
37
+ // Runtime information
38
+ runtime: {
39
+ node: process.version,
40
+ environment: process.env.NODE_ENV || 'development',
41
+ platform: os.platform(),
42
+ arch: os.arch(),
43
+ uptime: `${Math.floor((Date.now() - this.startTime.getTime()) / 1000)} seconds`,
44
+ startTime: this.startTime.toISOString()
45
+ },
46
+ // Repository information
47
+ repository: {
48
+ url: packageJson.homepage || ((_a = packageJson.repository) === null || _a === void 0 ? void 0 : _a.url) || 'https://github.com/asyncapi/cli',
49
+ bugs: packageJson.bugs || 'https://github.com/asyncapi/cli/issues',
50
+ license: packageJson.license || 'Apache-2.0'
51
+ },
52
+ // API metadata
53
+ api: {
54
+ basePath: this.basepath,
55
+ timestamp: new Date().toISOString(),
56
+ health: 'ok'
57
+ }
58
+ };
59
+ res.json(versionInfo);
60
+ }
61
+ catch (err) {
62
+ return next(err);
63
+ }
64
+ }));
65
+ return router;
66
+ });
67
+ }
68
+ }
69
+ exports.VersionController = VersionController;
@@ -6,4 +6,5 @@ import { BundleController } from './controllers/bundle.controller';
6
6
  import { DiffController } from './controllers/diff.controller';
7
7
  import { DocsController } from './controllers/docs.controller';
8
8
  import { HelpController } from './controllers/help.controller';
9
- export declare const CONTROLLERS: (ValidateController | ParseController | GenerateController | ConvertController | BundleController | DiffController | DocsController | HelpController)[];
9
+ import { VersionController } from './controllers/version.controller';
10
+ export declare const CONTROLLERS: (ValidateController | ParseController | GenerateController | ConvertController | BundleController | DiffController | DocsController | HelpController | VersionController)[];
@@ -9,6 +9,7 @@ const bundle_controller_1 = require("./controllers/bundle.controller");
9
9
  const diff_controller_1 = require("./controllers/diff.controller");
10
10
  const docs_controller_1 = require("./controllers/docs.controller");
11
11
  const help_controller_1 = require("./controllers/help.controller");
12
+ const version_controller_1 = require("./controllers/version.controller");
12
13
  exports.CONTROLLERS = [
13
14
  new validate_controller_1.ValidateController(),
14
15
  new parse_controller_1.ParseController(),
@@ -18,4 +19,5 @@ exports.CONTROLLERS = [
18
19
  new diff_controller_1.DiffController(),
19
20
  new docs_controller_1.DocsController(),
20
21
  new help_controller_1.HelpController(),
22
+ new version_controller_1.VersionController(),
21
23
  ];
@@ -0,0 +1,2 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ export declare function loggerMiddleware(req: Request, res: Response, next: NextFunction): void;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loggerMiddleware = loggerMiddleware;
4
+ const logger_1 = require("../../../utils/logger");
5
+ function loggerMiddleware(req, res, next) {
6
+ const start = Date.now();
7
+ res.on('finish', () => {
8
+ const duration = Date.now() - start;
9
+ logger_1.logger.info(`[${req.method}] ${req.originalUrl} ${res.statusCode} - ${duration}ms`);
10
+ });
11
+ next();
12
+ }
@@ -10,7 +10,7 @@ export default class Diff extends Command {
10
10
  'log-diagnostics': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
11
  'diagnostics-format': import("@oclif/core/lib/interfaces").OptionFlag<import("@stoplight/spectral-cli/dist/services/config").OutputFormat, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  'fail-severity': import("@oclif/core/lib/interfaces").OptionFlag<"error" | "warn" | "info" | "hint", import("@oclif/core/lib/interfaces").CustomOptions>;
13
- output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ 'save-output': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
14
  help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
15
15
  format: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  type: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -25,6 +25,7 @@ export default class Diff extends Command {
25
25
  };
26
26
  run(): Promise<void>;
27
27
  outputJSON(diffOutput: AsyncAPIDiff, outputType: string): void;
28
+ writeOutputToFile(diffOutput: AsyncAPIDiff, outputType: string, filePath: string, outputFormat: string): Promise<void>;
28
29
  outputYAML(diffOutput: AsyncAPIDiff, outputType: string): void;
29
30
  outputMarkdown(diffOutput: AsyncAPIDiff, outputType: string): void;
30
31
  parseDocuments(command: Command, firstDocument: Specification, secondDocument: Specification, flags: Record<string, any>): Promise<{
@@ -32,6 +32,7 @@ class Diff extends base_1.default {
32
32
  let markdownSubtype = flags['markdownSubtype'];
33
33
  const watchMode = flags['watch'];
34
34
  const noError = flags['no-error'];
35
+ const writeOutput = flags['save-output'];
35
36
  let firstDocument, secondDocument;
36
37
  checkAndWarnFalseFlag(outputFormat, markdownSubtype);
37
38
  markdownSubtype = setDefaultMarkdownSubtype(outputFormat, markdownSubtype);
@@ -97,20 +98,25 @@ class Diff extends base_1.default {
97
98
  outputType: outputFormat, // NOSONAR
98
99
  markdownSubtype: markdownSubtype,
99
100
  });
100
- if (outputFormat === 'json') {
101
- this.outputJSON(diffOutput, outputType);
102
- }
103
- else if (outputFormat === 'yaml' || outputFormat === 'yml') {
104
- this.outputYAML(diffOutput, outputType);
105
- }
106
- else if (outputFormat === 'md') {
107
- this.outputMarkdown(diffOutput, outputType);
101
+ if (writeOutput) {
102
+ yield this.writeOutputToFile(diffOutput, outputType, writeOutput, outputFormat);
108
103
  }
109
104
  else {
110
- this.log(`The output format ${outputFormat} is not supported at the moment.`);
111
- }
112
- if (!noError) {
113
- throwOnBreakingChange(diffOutput, outputFormat);
105
+ if (outputFormat === 'json') {
106
+ this.outputJSON(diffOutput, outputType);
107
+ }
108
+ else if (outputFormat === 'yaml' || outputFormat === 'yml') {
109
+ this.outputYAML(diffOutput, outputType);
110
+ }
111
+ else if (outputFormat === 'md') {
112
+ this.outputMarkdown(diffOutput, outputType);
113
+ }
114
+ else {
115
+ this.log(`The output format ${outputFormat} is not supported at the moment.`);
116
+ }
117
+ if (!noError) {
118
+ throwOnBreakingChange(diffOutput, outputFormat);
119
+ }
114
120
  }
115
121
  }
116
122
  catch (error) {
@@ -142,6 +148,44 @@ class Diff extends base_1.default {
142
148
  this.log(`The output type ${outputType} is not supported at the moment.`);
143
149
  }
144
150
  }
151
+ writeOutputToFile(diffOutput, outputType, filePath, outputFormat) {
152
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
153
+ let content;
154
+ if (outputFormat === 'json') {
155
+ if (outputType === 'breaking') {
156
+ content = JSON.stringify(diffOutput.breaking(), null, 2);
157
+ }
158
+ else if (outputType === 'non-breaking') {
159
+ content = JSON.stringify(diffOutput.nonBreaking(), null, 2);
160
+ }
161
+ else if (outputType === 'unclassified') {
162
+ content = JSON.stringify(diffOutput.unclassified(), null, 2);
163
+ }
164
+ else if (outputType === 'all') {
165
+ content = JSON.stringify(diffOutput.getOutput(), null, 2);
166
+ }
167
+ else {
168
+ content = `The output type ${outputType} is not supported at the moment.`;
169
+ }
170
+ }
171
+ else if (outputFormat === 'yaml' || outputFormat === 'yml') {
172
+ content = genericOutput(diffOutput, outputType);
173
+ }
174
+ else if (outputFormat === 'md') {
175
+ content = genericOutput(diffOutput, outputType);
176
+ }
177
+ else {
178
+ content = `The output format ${outputFormat} is not supported at the moment.`;
179
+ }
180
+ try {
181
+ yield fs_1.promises.writeFile(filePath, content);
182
+ this.log(`Output successfully written to: ${filePath}`);
183
+ }
184
+ catch (error) {
185
+ this.error(`Failed to write output to file: ${error.message}`);
186
+ }
187
+ });
188
+ }
145
189
  outputYAML(diffOutput, outputType) {
146
190
  this.log(genericOutput(diffOutput, outputType));
147
191
  }
@@ -11,7 +11,7 @@ export default class Validate extends Command {
11
11
  'log-diagnostics': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
12
  'diagnostics-format': import("@oclif/core/lib/interfaces").OptionFlag<import("@stoplight/spectral-cli/dist/services/config").OutputFormat, import("@oclif/core/lib/interfaces").CustomOptions>;
13
13
  'fail-severity': import("@oclif/core/lib/interfaces").OptionFlag<"error" | "warn" | "info" | "hint", import("@oclif/core/lib/interfaces").CustomOptions>;
14
- output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ 'save-output': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
16
16
  watch: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
17
  };
@@ -55,6 +55,7 @@ class Validate extends base_1.default {
55
55
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
56
56
  var _a, _b, _c, _d, _e, _f, _g;
57
57
  const diagnosticsFormat = (_a = flags['diagnostics-format']) !== null && _a !== void 0 ? _a : 'stylish';
58
+ const writeOutput = flags['save-output'];
58
59
  const hasIssues = (_c = (((_b = result.data) === null || _b === void 0 ? void 0 : _b.diagnostics) && result.data.diagnostics.length > 0)) !== null && _c !== void 0 ? _c : false;
59
60
  const isFailSeverity = ((_d = result.data) === null || _d === void 0 ? void 0 : _d.status) === validation_service_1.ValidationStatus.INVALID;
60
61
  const sourceString = ((_e = this.specFile) === null || _e === void 0 ? void 0 : _e.toSourceString()) || '';
@@ -66,15 +67,15 @@ class Validate extends base_1.default {
66
67
  this.log(governanceMessage);
67
68
  }
68
69
  const diagnosticsOutput = this.validationService.formatDiagnosticsOutput(((_f = result.data) === null || _f === void 0 ? void 0 : _f.diagnostics) || [], diagnosticsFormat, (_g = flags['fail-severity']) !== null && _g !== void 0 ? _g : 'error');
69
- if (flags.output) {
70
- const { success, error } = yield this.validationService.saveDiagnosticsToFile(flags.output, diagnosticsFormat, diagnosticsOutput);
70
+ if (writeOutput) {
71
+ const { success, error } = yield this.validationService.saveDiagnosticsToFile(writeOutput, diagnosticsFormat, diagnosticsOutput);
71
72
  if (!success) {
72
73
  this.logToStderr(error || 'Failed to save diagnostics to file', {
73
74
  exit: 1,
74
75
  });
75
76
  }
76
77
  else {
77
- this.log(`Diagnostics saved to ${flags.output}`);
78
+ this.log(`Diagnostics saved to ${writeOutput}`);
78
79
  }
79
80
  }
80
81
  else {
@@ -2,7 +2,7 @@ export declare const diffFlags: () => {
2
2
  'log-diagnostics': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
3
3
  'diagnostics-format': import("@oclif/core/lib/interfaces").OptionFlag<import("@stoplight/spectral-cli/dist/services/config").OutputFormat, import("@oclif/core/lib/interfaces").CustomOptions>;
4
4
  'fail-severity': import("@oclif/core/lib/interfaces").OptionFlag<"error" | "warn" | "info" | "hint", import("@oclif/core/lib/interfaces").CustomOptions>;
5
- output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
5
+ 'save-output': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
6
6
  help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
7
7
  format: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
8
8
  type: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -6,5 +6,5 @@ export declare function parserFlags({ logDiagnostics, }?: ValidationFlagsOptions
6
6
  'log-diagnostics': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
7
7
  'diagnostics-format': import("@oclif/core/lib/interfaces").OptionFlag<OutputFormat, import("@oclif/core/lib/interfaces").CustomOptions>;
8
8
  'fail-severity': import("@oclif/core/lib/interfaces").OptionFlag<"error" | "warn" | "info" | "hint", import("@oclif/core/lib/interfaces").CustomOptions>;
9
- output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
+ 'save-output': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
10
  };
@@ -20,9 +20,9 @@ function parserFlags({ logDiagnostics = true, } = {}) {
20
20
  options: ['error', 'warn', 'info', 'hint'],
21
21
  default: 'error',
22
22
  })(),
23
- output: core_1.Flags.string({
23
+ 'save-output': core_1.Flags.string({
24
24
  description: 'The output file name. Omitting this flag the result will be printed in the console.',
25
- char: 'o',
25
+ char: 's',
26
26
  }),
27
27
  };
28
28
  }
@@ -5,7 +5,7 @@ export declare const validateFlags: () => {
5
5
  'log-diagnostics': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
6
  'diagnostics-format': import("@oclif/core/lib/interfaces").OptionFlag<import("@stoplight/spectral-cli/dist/services/config").OutputFormat, import("@oclif/core/lib/interfaces").CustomOptions>;
7
7
  'fail-severity': import("@oclif/core/lib/interfaces").OptionFlag<"error" | "warn" | "info" | "hint", import("@oclif/core/lib/interfaces").CustomOptions>;
8
- output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ 'save-output': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
9
  help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
10
10
  watch: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
11
  };
@@ -288,10 +288,10 @@
288
288
  ],
289
289
  "type": "option"
290
290
  },
291
- "output": {
292
- "char": "o",
291
+ "save-output": {
292
+ "char": "s",
293
293
  "description": "The output file name. Omitting this flag the result will be printed in the console.",
294
- "name": "output",
294
+ "name": "save-output",
295
295
  "hasDynamicHelp": false,
296
296
  "multiple": false,
297
297
  "type": "option"
@@ -584,10 +584,10 @@
584
584
  ],
585
585
  "type": "option"
586
586
  },
587
- "output": {
588
- "char": "o",
587
+ "save-output": {
588
+ "char": "s",
589
589
  "description": "The output file name. Omitting this flag the result will be printed in the console.",
590
- "name": "output",
590
+ "name": "save-output",
591
591
  "hasDynamicHelp": false,
592
592
  "multiple": false,
593
593
  "type": "option"
@@ -1121,8 +1121,9 @@
1121
1121
  },
1122
1122
  "output": {
1123
1123
  "char": "o",
1124
- "description": "The output file name. Omitting this flag the result will be printed in the console.",
1124
+ "description": "The output directory where the models should be written to. Omitting this flag will write the models to `stdout`.",
1125
1125
  "name": "output",
1126
+ "required": false,
1126
1127
  "hasDynamicHelp": false,
1127
1128
  "multiple": false,
1128
1129
  "type": "option"
@@ -1377,6 +1378,14 @@
1377
1378
  ],
1378
1379
  "type": "option"
1379
1380
  },
1381
+ "save-output": {
1382
+ "char": "s",
1383
+ "description": "The output file name. Omitting this flag the result will be printed in the console.",
1384
+ "name": "save-output",
1385
+ "hasDynamicHelp": false,
1386
+ "multiple": false,
1387
+ "type": "option"
1388
+ },
1380
1389
  "proxyHost": {
1381
1390
  "description": "Name of the ProxyHost",
1382
1391
  "name": "proxyHost",
@@ -2142,5 +2151,5 @@
2142
2151
  ]
2143
2152
  }
2144
2153
  },
2145
- "version": "3.5.1"
2154
+ "version": "3.6.0"
2146
2155
  }
package/openapi.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
- version: 0.1.0
3
+ version: 0.2.0
4
4
  title: AsyncAPI Server API
5
5
  description: Server API providing official AsyncAPI tools
6
6
  contact:
@@ -15,6 +15,31 @@ servers:
15
15
  - url: https://api.asyncapi.com/v1
16
16
 
17
17
  paths:
18
+ /version:
19
+ get:
20
+ summary: Get the current version of the AsyncAPI CLI.
21
+ operationId: getVersion
22
+ tags:
23
+ - version
24
+ responses:
25
+ "200":
26
+ description: Successfully retrieved the version.
27
+ content:
28
+ application/json:
29
+ schema:
30
+ ref: "#/components/schemas/VersionResponse"
31
+ "500":
32
+ description: Internal server error.
33
+ content:
34
+ application/json:
35
+ schema:
36
+ $ref: "#/components/schemas/Problem"
37
+ default:
38
+ description: Unexpected problem.
39
+ content:
40
+ application/json:
41
+ schema:
42
+ $ref: "#/components/schemas/Problem"
18
43
  /validate:
19
44
  post:
20
45
  summary: Validate the given AsyncAPI document.
@@ -581,3 +606,108 @@ components:
581
606
  - title
582
607
  - status
583
608
  additionalProperties: true
609
+ VersionResponse:
610
+ type: object
611
+ description: Version information for the AsyncAPI CLI API
612
+ properties:
613
+ version:
614
+ type: string
615
+ description: The current version of the AsyncAPI CLI
616
+ example: "3.5.1"
617
+ name:
618
+ type: string
619
+ description: The name of the application
620
+ example: "@asyncapi/cli"
621
+ description:
622
+ type: string
623
+ description: Description of the application
624
+ example: "All in one CLI for all AsyncAPI tools"
625
+ runtime:
626
+ type: object
627
+ description: Runtime information
628
+ properties:
629
+ node:
630
+ type: string
631
+ description: Node.js version
632
+ example: "v24.7.0"
633
+ environment:
634
+ type: string
635
+ description: Build environment
636
+ example: "development"
637
+ enum: ["development", "staging", "production"]
638
+ platform:
639
+ type: string
640
+ description: Operating system platform
641
+ example: "darwin"
642
+ arch:
643
+ type: string
644
+ description: System architecture
645
+ example: "arm64"
646
+ uptime:
647
+ type: string
648
+ description: Application uptime
649
+ example: "12 seconds"
650
+ startTime:
651
+ type: string
652
+ format: date-time
653
+ description: Application start time
654
+ example: "2025-09-12T05:08:25.171Z"
655
+ required:
656
+ - node
657
+ - environment
658
+ - platform
659
+ - arch
660
+ - uptime
661
+ - startTime
662
+ repository:
663
+ type: object
664
+ description: Repository information
665
+ properties:
666
+ url:
667
+ type: string
668
+ format: uri
669
+ description: Repository URL
670
+ example: "https://github.com/asyncapi/cli"
671
+ bugs:
672
+ type: string
673
+ format: uri
674
+ description: Bug tracker URL
675
+ example: "https://github.com/asyncapi/cli/issues"
676
+ license:
677
+ type: string
678
+ description: License type
679
+ example: "Apache-2.0"
680
+ required:
681
+ - url
682
+ - bugs
683
+ - license
684
+ api:
685
+ type: object
686
+ description: API metadata
687
+ properties:
688
+ basePath:
689
+ type: string
690
+ description: API base path
691
+ example: "/version"
692
+ timestamp:
693
+ type: string
694
+ format: date-time
695
+ description: Current timestamp
696
+ example: "2025-09-12T05:08:37.979Z"
697
+ health:
698
+ type: string
699
+ description: API health status
700
+ example: "ok"
701
+ enum: ["ok", "degraded", "error"]
702
+ required:
703
+ - basePath
704
+ - timestamp
705
+ - health
706
+ required:
707
+ - version
708
+ - name
709
+ - description
710
+ - build
711
+ - runtime
712
+ - repository
713
+ - api
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@asyncapi/cli",
3
3
  "description": "All in one CLI for all AsyncAPI tools",
4
- "version": "3.5.1",
4
+ "version": "3.6.0",
5
5
  "author": "@asyncapi",
6
6
  "bin": {
7
7
  "asyncapi": "./bin/run_bin"