@asyncapi-actions-test/trusted-publishing-test_asyncapi-cli 4.1.3
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/LICENSE +201 -0
- package/README.md +117 -0
- package/assets/create-template/templates/default/asyncapi.yaml +34 -0
- package/assets/create-template/templates/default/package-lock.json +4062 -0
- package/assets/create-template/templates/default/package.json +10 -0
- package/assets/create-template/templates/default/readme.md +4 -0
- package/assets/create-template/templates/default/template/index.js +11 -0
- package/assets/examples/adeo-kafka-request-reply-asyncapi.yml +298 -0
- package/assets/examples/anyof-asyncapi.yml +36 -0
- package/assets/examples/application-headers-asyncapi.yml +86 -0
- package/assets/examples/correlation-id-asyncapi.yml +180 -0
- package/assets/examples/default-example.json +51 -0
- package/assets/examples/default-example.yaml +31 -0
- package/assets/examples/examples.json +82 -0
- package/assets/examples/gitter-streaming-asyncapi.yml +178 -0
- package/assets/examples/kraken-websocket-request-reply-message-filter-in-reply-asyncapi.yml +388 -0
- package/assets/examples/kraken-websocket-request-reply-multiple-channels-asyncapi.yml +394 -0
- package/assets/examples/mercure-asyncapi.yml +58 -0
- package/assets/examples/not-asyncapi.yml +29 -0
- package/assets/examples/oneof-asyncapi.yml +57 -0
- package/assets/examples/operation-security-asyncapi.yml +117 -0
- package/assets/examples/rpc-client-asyncapi.yml +72 -0
- package/assets/examples/rpc-server-asyncapi.yml +69 -0
- package/assets/examples/simple-asyncapi.yml +31 -0
- package/assets/examples/slack-rtm-asyncapi.yml +982 -0
- package/assets/examples/streetlights-kafka-asyncapi.yml +199 -0
- package/assets/examples/streetlights-mqtt-asyncapi.yml +253 -0
- package/assets/examples/streetlights-operation-security-asyncapi.yml +240 -0
- package/assets/examples/tutorial.yml +41 -0
- package/assets/examples/websocket-gemini-asyncapi.yml +301 -0
- package/assets/logo.png +0 -0
- package/assets/server-api.png +0 -0
- package/bin/dev +17 -0
- package/bin/dev.cmd +3 -0
- package/bin/run +12 -0
- package/bin/run.cmd +3 -0
- package/bin/run_bin +13 -0
- package/bin/run_bin.cmd +3 -0
- package/lib/apps/api/app.d.ts +15 -0
- package/lib/apps/api/app.js +91 -0
- package/lib/apps/api/configs/development.json +16 -0
- package/lib/apps/api/configs/production.json +16 -0
- package/lib/apps/api/configs/test.json +16 -0
- package/lib/apps/api/constants.d.ts +1 -0
- package/lib/apps/api/constants.js +4 -0
- package/lib/apps/api/controllers/bundle.controller.d.ts +7 -0
- package/lib/apps/api/controllers/bundle.controller.js +44 -0
- package/lib/apps/api/controllers/convert.controller.d.ts +11 -0
- package/lib/apps/api/controllers/convert.controller.js +69 -0
- package/lib/apps/api/controllers/diff.controller.d.ts +7 -0
- package/lib/apps/api/controllers/diff.controller.js +42 -0
- package/lib/apps/api/controllers/docs.controller.d.ts +6 -0
- package/lib/apps/api/controllers/docs.controller.js +24 -0
- package/lib/apps/api/controllers/generate.controller.d.ts +22 -0
- package/lib/apps/api/controllers/generate.controller.js +174 -0
- package/lib/apps/api/controllers/help.controller.d.ts +6 -0
- package/lib/apps/api/controllers/help.controller.js +101 -0
- package/lib/apps/api/controllers/parse.controller.d.ts +10 -0
- package/lib/apps/api/controllers/parse.controller.js +35 -0
- package/lib/apps/api/controllers/validate.controller.d.ts +10 -0
- package/lib/apps/api/controllers/validate.controller.js +50 -0
- package/lib/apps/api/controllers/version.controller.d.ts +8 -0
- package/lib/apps/api/controllers/version.controller.js +69 -0
- package/lib/apps/api/exceptions/problem.exception.d.ts +14 -0
- package/lib/apps/api/exceptions/problem.exception.js +10 -0
- package/lib/apps/api/index.d.ts +10 -0
- package/lib/apps/api/index.js +23 -0
- package/lib/apps/api/middlewares/logger.middleware.d.ts +2 -0
- package/lib/apps/api/middlewares/logger.middleware.js +12 -0
- package/lib/apps/api/middlewares/problem.middleware.d.ts +6 -0
- package/lib/apps/api/middlewares/problem.middleware.js +27 -0
- package/lib/apps/api/middlewares/validation.middleware.d.ts +12 -0
- package/lib/apps/api/middlewares/validation.middleware.js +245 -0
- package/lib/apps/api/server.d.ts +3 -0
- package/lib/apps/api/server.js +19 -0
- package/lib/apps/cli/commands/bundle.d.ts +15 -0
- package/lib/apps/cli/commands/bundle.js +75 -0
- package/lib/apps/cli/commands/config/analytics.d.ts +11 -0
- package/lib/apps/cli/commands/config/analytics.js +61 -0
- package/lib/apps/cli/commands/config/auth/add.d.ts +13 -0
- package/lib/apps/cli/commands/config/auth/add.js +68 -0
- package/lib/apps/cli/commands/config/context/add.d.ts +13 -0
- package/lib/apps/cli/commands/config/context/add.js +46 -0
- package/lib/apps/cli/commands/config/context/current.d.ts +8 -0
- package/lib/apps/cli/commands/config/context/current.js +37 -0
- package/lib/apps/cli/commands/config/context/edit.d.ts +12 -0
- package/lib/apps/cli/commands/config/context/edit.js +44 -0
- package/lib/apps/cli/commands/config/context/index.d.ts +5 -0
- package/lib/apps/cli/commands/config/context/index.js +16 -0
- package/lib/apps/cli/commands/config/context/init.d.ts +12 -0
- package/lib/apps/cli/commands/config/context/init.js +31 -0
- package/lib/apps/cli/commands/config/context/list.d.ts +8 -0
- package/lib/apps/cli/commands/config/context/list.js +36 -0
- package/lib/apps/cli/commands/config/context/remove.d.ts +11 -0
- package/lib/apps/cli/commands/config/context/remove.js +39 -0
- package/lib/apps/cli/commands/config/context/use.d.ts +11 -0
- package/lib/apps/cli/commands/config/context/use.js +40 -0
- package/lib/apps/cli/commands/config/index.d.ts +5 -0
- package/lib/apps/cli/commands/config/index.js +16 -0
- package/lib/apps/cli/commands/config/versions.d.ts +8 -0
- package/lib/apps/cli/commands/config/versions.js +56 -0
- package/lib/apps/cli/commands/convert.d.ts +21 -0
- package/lib/apps/cli/commands/convert.js +85 -0
- package/lib/apps/cli/commands/diff.d.ts +36 -0
- package/lib/apps/cli/commands/diff.js +335 -0
- package/lib/apps/cli/commands/format.d.ts +18 -0
- package/lib/apps/cli/commands/format.js +97 -0
- package/lib/apps/cli/commands/generate/client.d.ts +30 -0
- package/lib/apps/cli/commands/generate/client.js +94 -0
- package/lib/apps/cli/commands/generate/fromTemplate.d.ts +29 -0
- package/lib/apps/cli/commands/generate/fromTemplate.js +91 -0
- package/lib/apps/cli/commands/generate/index.d.ts +5 -0
- package/lib/apps/cli/commands/generate/index.js +15 -0
- package/lib/apps/cli/commands/generate/models.d.ts +16 -0
- package/lib/apps/cli/commands/generate/models.js +166 -0
- package/lib/apps/cli/commands/new/file.d.ts +16 -0
- package/lib/apps/cli/commands/new/file.js +180 -0
- package/lib/apps/cli/commands/new/index.d.ts +5 -0
- package/lib/apps/cli/commands/new/index.js +15 -0
- package/lib/apps/cli/commands/new/template.d.ts +18 -0
- package/lib/apps/cli/commands/new/template.js +102 -0
- package/lib/apps/cli/commands/optimize.d.ts +41 -0
- package/lib/apps/cli/commands/optimize.js +289 -0
- package/lib/apps/cli/commands/pretty.d.ts +12 -0
- package/lib/apps/cli/commands/pretty.js +70 -0
- package/lib/apps/cli/commands/start/api.d.ts +11 -0
- package/lib/apps/cli/commands/start/api.js +23 -0
- package/lib/apps/cli/commands/start/index.d.ts +5 -0
- package/lib/apps/cli/commands/start/index.js +15 -0
- package/lib/apps/cli/commands/start/preview.d.ts +17 -0
- package/lib/apps/cli/commands/start/preview.js +41 -0
- package/lib/apps/cli/commands/start/studio.d.ts +16 -0
- package/lib/apps/cli/commands/start/studio.js +94 -0
- package/lib/apps/cli/commands/validate.d.ts +23 -0
- package/lib/apps/cli/commands/validate.js +95 -0
- package/lib/apps/cli/internal/args/generate.args.d.ts +3 -0
- package/lib/apps/cli/internal/args/generate.args.js +10 -0
- package/lib/apps/cli/internal/base/BaseGeneratorCommand.d.ts +42 -0
- package/lib/apps/cli/internal/base/BaseGeneratorCommand.js +119 -0
- package/lib/apps/cli/internal/base.d.ts +20 -0
- package/lib/apps/cli/internal/base.js +173 -0
- package/lib/apps/cli/internal/flags/bundle.flags.d.ts +7 -0
- package/lib/apps/cli/internal/flags/bundle.flags.js +26 -0
- package/lib/apps/cli/internal/flags/config/analytics.flags.d.ts +6 -0
- package/lib/apps/cli/internal/flags/config/analytics.flags.js +24 -0
- package/lib/apps/cli/internal/flags/config/context.flags.d.ts +4 -0
- package/lib/apps/cli/internal/flags/config/context.flags.js +16 -0
- package/lib/apps/cli/internal/flags/convert.flags.d.ts +7 -0
- package/lib/apps/cli/internal/flags/convert.flags.js +32 -0
- package/lib/apps/cli/internal/flags/diff.flags.d.ts +13 -0
- package/lib/apps/cli/internal/flags/diff.flags.js +29 -0
- package/lib/apps/cli/internal/flags/format.flags.d.ts +6 -0
- package/lib/apps/cli/internal/flags/format.flags.js +22 -0
- package/lib/apps/cli/internal/flags/generate/clients.flags.d.ts +16 -0
- package/lib/apps/cli/internal/flags/generate/clients.flags.js +8 -0
- package/lib/apps/cli/internal/flags/generate/fromTemplate.flags.d.ts +16 -0
- package/lib/apps/cli/internal/flags/generate/fromTemplate.flags.js +8 -0
- package/lib/apps/cli/internal/flags/generate/models.flags.d.ts +1 -0
- package/lib/apps/cli/internal/flags/generate/models.flags.js +14 -0
- package/lib/apps/cli/internal/flags/generate/sharedFlags.d.ts +16 -0
- package/lib/apps/cli/internal/flags/generate/sharedFlags.js +57 -0
- package/lib/apps/cli/internal/flags/global.flags.d.ts +4 -0
- package/lib/apps/cli/internal/flags/global.flags.js +18 -0
- package/lib/apps/cli/internal/flags/new/file.flags.d.ts +8 -0
- package/lib/apps/cli/internal/flags/new/file.flags.js +20 -0
- package/lib/apps/cli/internal/flags/new/template.flags.d.ts +7 -0
- package/lib/apps/cli/internal/flags/new/template.flags.js +28 -0
- package/lib/apps/cli/internal/flags/optimize.flags.d.ts +21 -0
- package/lib/apps/cli/internal/flags/optimize.flags.js +51 -0
- package/lib/apps/cli/internal/flags/parser.flags.d.ts +10 -0
- package/lib/apps/cli/internal/flags/parser.flags.js +28 -0
- package/lib/apps/cli/internal/flags/pretty.flags.d.ts +3 -0
- package/lib/apps/cli/internal/flags/pretty.flags.js +13 -0
- package/lib/apps/cli/internal/flags/proxy.flags.d.ts +4 -0
- package/lib/apps/cli/internal/flags/proxy.flags.js +17 -0
- package/lib/apps/cli/internal/flags/start/api.flags.d.ts +5 -0
- package/lib/apps/cli/internal/flags/start/api.flags.js +20 -0
- package/lib/apps/cli/internal/flags/start/preview.flags.d.ts +9 -0
- package/lib/apps/cli/internal/flags/start/preview.flags.js +32 -0
- package/lib/apps/cli/internal/flags/start/studio.flags.d.ts +7 -0
- package/lib/apps/cli/internal/flags/start/studio.flags.js +25 -0
- package/lib/apps/cli/internal/flags/validate.flags.d.ts +11 -0
- package/lib/apps/cli/internal/flags/validate.flags.js +22 -0
- package/lib/apps/cli/internal/globals.d.ts +10 -0
- package/lib/apps/cli/internal/globals.js +46 -0
- package/lib/apps/cli/internal/hooks/command_not_found/myhook.d.ts +4 -0
- package/lib/apps/cli/internal/hooks/command_not_found/myhook.js +85 -0
- package/lib/domains/models/Context.d.ts +21 -0
- package/lib/domains/models/Context.js +321 -0
- package/lib/domains/models/Preview.d.ts +2 -0
- package/lib/domains/models/Preview.js +227 -0
- package/lib/domains/models/SpecificationFile.d.ts +40 -0
- package/lib/domains/models/SpecificationFile.js +295 -0
- package/lib/domains/models/Studio.d.ts +2 -0
- package/lib/domains/models/Studio.js +182 -0
- package/lib/domains/models/generate/ClientLanguages.d.ts +12 -0
- package/lib/domains/models/generate/ClientLanguages.js +17 -0
- package/lib/domains/models/generate/Flags.d.ts +9 -0
- package/lib/domains/models/generate/Flags.js +2 -0
- package/lib/domains/services/archiver.service.d.ts +17 -0
- package/lib/domains/services/archiver.service.js +53 -0
- package/lib/domains/services/base.service.d.ts +6 -0
- package/lib/domains/services/base.service.js +26 -0
- package/lib/domains/services/config.service.d.ts +42 -0
- package/lib/domains/services/config.service.js +95 -0
- package/lib/domains/services/convert.service.d.ts +12 -0
- package/lib/domains/services/convert.service.js +65 -0
- package/lib/domains/services/generator.service.d.ts +15 -0
- package/lib/domains/services/generator.service.js +75 -0
- package/lib/domains/services/validation.service.d.ts +54 -0
- package/lib/domains/services/validation.service.js +375 -0
- package/lib/errors/context-error.d.ts +26 -0
- package/lib/errors/context-error.js +71 -0
- package/lib/errors/diff-error.d.ts +9 -0
- package/lib/errors/diff-error.js +27 -0
- package/lib/errors/generator-error.d.ts +3 -0
- package/lib/errors/generator-error.js +11 -0
- package/lib/errors/specification-file.d.ts +18 -0
- package/lib/errors/specification-file.js +65 -0
- package/lib/errors/validation-error.d.ts +11 -0
- package/lib/errors/validation-error.js +55 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +11 -0
- package/lib/interfaces/index.d.ts +87 -0
- package/lib/interfaces/index.js +7 -0
- package/lib/utils/ajv.d.ts +2 -0
- package/lib/utils/ajv.js +18 -0
- package/lib/utils/app-openapi.d.ts +4 -0
- package/lib/utils/app-openapi.js +28 -0
- package/lib/utils/generate/flags.d.ts +2 -0
- package/lib/utils/generate/flags.js +14 -0
- package/lib/utils/generate/mapBaseUrl.d.ts +6 -0
- package/lib/utils/generate/mapBaseUrl.js +34 -0
- package/lib/utils/generate/parseParams.d.ts +3 -0
- package/lib/utils/generate/parseParams.js +58 -0
- package/lib/utils/generate/prompts.d.ts +4 -0
- package/lib/utils/generate/prompts.js +77 -0
- package/lib/utils/generate/registry.d.ts +2 -0
- package/lib/utils/generate/registry.js +30 -0
- package/lib/utils/generate/watcher.d.ts +51 -0
- package/lib/utils/generate/watcher.js +230 -0
- package/lib/utils/logger.d.ts +6 -0
- package/lib/utils/logger.js +33 -0
- package/lib/utils/retrieve-language.d.ts +1 -0
- package/lib/utils/retrieve-language.js +9 -0
- package/lib/utils/scoreCalculator.d.ts +2 -0
- package/lib/utils/scoreCalculator.js +22 -0
- package/lib/utils/temp-dir.d.ts +2 -0
- package/lib/utils/temp-dir.js +26 -0
- package/oclif.manifest.json +2137 -0
- package/openapi.yaml +713 -0
- package/package.json +203 -0
- package/scripts/enableAutoComplete.js +160 -0
- package/scripts/fetch-asyncapi-example.js +126 -0
- package/scripts/generateTypesForGenerateCommand.js +40 -0
- package/scripts/releasePackagesRename.js +88 -0
- package/scripts/updateUsageDocs.js +73 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConvertController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
7
|
+
const convert_service_1 = require("../../../domains/services/convert.service");
|
|
8
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
9
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
10
|
+
/**
|
|
11
|
+
* Controller which exposes the Convert functionality
|
|
12
|
+
*/
|
|
13
|
+
class ConvertController {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.basepath = '/convert';
|
|
16
|
+
this.conversionService = new convert_service_1.ConversionService();
|
|
17
|
+
}
|
|
18
|
+
convert(req, res, next) {
|
|
19
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
try {
|
|
22
|
+
const options = req.body;
|
|
23
|
+
const specFile = new SpecificationFile_1.Specification(typeof options.source === 'string'
|
|
24
|
+
? options.source
|
|
25
|
+
: JSON.stringify(options.source));
|
|
26
|
+
const result = yield this.conversionService.convertDocument(specFile, options);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
return next(new problem_exception_1.ProblemException({
|
|
29
|
+
type: 'conversion-error',
|
|
30
|
+
title: 'Conversion failed',
|
|
31
|
+
status: 400,
|
|
32
|
+
detail: result.error,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
res.status(200).json({
|
|
36
|
+
converted: (_a = result.data) === null || _a === void 0 ? void 0 : _a.convertedDocument,
|
|
37
|
+
sourceFormat: (_b = result.data) === null || _b === void 0 ? void 0 : _b.originalFormat,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof problem_exception_1.ProblemException) {
|
|
42
|
+
return next(err);
|
|
43
|
+
}
|
|
44
|
+
return next(new problem_exception_1.ProblemException({
|
|
45
|
+
type: 'internal-server-error',
|
|
46
|
+
title: 'Internal server error',
|
|
47
|
+
status: 500,
|
|
48
|
+
detail: err.message,
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
boot() {
|
|
54
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
const router = (0, express_1.Router)();
|
|
56
|
+
router.post(this.basepath, yield (0, validation_middleware_1.validationMiddleware)({
|
|
57
|
+
path: this.basepath,
|
|
58
|
+
method: 'post',
|
|
59
|
+
documents: ['source'],
|
|
60
|
+
condition: (req) => {
|
|
61
|
+
const body = req.body;
|
|
62
|
+
return body.format === 'asyncapi';
|
|
63
|
+
},
|
|
64
|
+
}), this.convert.bind(this));
|
|
65
|
+
return router;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ConvertController = ConvertController;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DiffController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const diff_1 = require("@asyncapi/diff");
|
|
7
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
8
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
9
|
+
class DiffController {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.basepath = '/diff';
|
|
12
|
+
}
|
|
13
|
+
diff(req, res, next) {
|
|
14
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
const { asyncapis } = req.body;
|
|
16
|
+
try {
|
|
17
|
+
const output = (0, diff_1.diff)(asyncapis[0], asyncapis[1]).getOutput();
|
|
18
|
+
res.status(200).json({ diff: output });
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return next(new problem_exception_1.ProblemException({
|
|
22
|
+
type: 'internal-diff-error',
|
|
23
|
+
title: 'Internal Diff error',
|
|
24
|
+
status: 500,
|
|
25
|
+
detail: err.message,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
boot() {
|
|
31
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
const router = (0, express_1.Router)();
|
|
33
|
+
router.post(this.basepath, yield (0, validation_middleware_1.validationMiddleware)({
|
|
34
|
+
path: this.basepath,
|
|
35
|
+
method: 'post',
|
|
36
|
+
documents: ['asyncapis'],
|
|
37
|
+
}), this.diff.bind(this));
|
|
38
|
+
return router;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DiffController = DiffController;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocsController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const redoc_express_1 = tslib_1.__importDefault(require("redoc-express"));
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
class DocsController {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.basepath = '/docs';
|
|
11
|
+
}
|
|
12
|
+
boot() {
|
|
13
|
+
const router = (0, express_1.Router)();
|
|
14
|
+
router.get(`${this.basepath}/openapi.yaml`, (_, res) => {
|
|
15
|
+
res.sendFile('openapi.yaml', { root: '.' });
|
|
16
|
+
});
|
|
17
|
+
router.get(this.basepath, (0, redoc_express_1.default)({
|
|
18
|
+
title: 'OpenAPI Documentation',
|
|
19
|
+
specUrl: `/${constants_1.API_VERSION}${this.basepath}/openapi.yaml`,
|
|
20
|
+
}));
|
|
21
|
+
return router;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.DocsController = DocsController;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { Controller } from '../../../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Controller which exposes the Generator functionality
|
|
5
|
+
*/
|
|
6
|
+
export declare class GenerateController implements Controller {
|
|
7
|
+
basepath: string;
|
|
8
|
+
private archiverService;
|
|
9
|
+
private generatorService;
|
|
10
|
+
private ajv;
|
|
11
|
+
private generate;
|
|
12
|
+
private validateTemplateParameters;
|
|
13
|
+
/**
|
|
14
|
+
* Retrieve proper AJV's validator function, create or reuse it.
|
|
15
|
+
*/
|
|
16
|
+
getAjvValidator(templateName: string): Promise<import("ajv/dist/types").AnyValidateFunction<unknown> | undefined>;
|
|
17
|
+
/**
|
|
18
|
+
* Serialize template parameters. Read all parameters from template's package.json and create a proper JSON Schema for validating parameters.
|
|
19
|
+
*/
|
|
20
|
+
serializeTemplateParameters(templateName: string): Promise<object | undefined>;
|
|
21
|
+
boot(): Promise<Router>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const express_1 = require("express");
|
|
8
|
+
const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
|
9
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
10
|
+
const archiver_service_1 = require("../../../domains/services/archiver.service");
|
|
11
|
+
const generator_service_1 = require("../../../domains/services/generator.service");
|
|
12
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
13
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
14
|
+
/**
|
|
15
|
+
* Controller which exposes the Generator functionality
|
|
16
|
+
*/
|
|
17
|
+
class GenerateController {
|
|
18
|
+
constructor() {
|
|
19
|
+
this.basepath = '/generate';
|
|
20
|
+
this.archiverService = new archiver_service_1.ArchiverService();
|
|
21
|
+
this.generatorService = new generator_service_1.GeneratorService();
|
|
22
|
+
}
|
|
23
|
+
generate(req, res, next) {
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
// try {
|
|
26
|
+
// await this.validateTemplateParameters(req);
|
|
27
|
+
// } catch (err) {
|
|
28
|
+
// return next(err);
|
|
29
|
+
// }
|
|
30
|
+
const zip = this.archiverService.createZip(res);
|
|
31
|
+
let tmpDir;
|
|
32
|
+
try {
|
|
33
|
+
tmpDir = yield this.archiverService.createTempDirectory();
|
|
34
|
+
const { asyncapi, template, parameters } = req.body;
|
|
35
|
+
const options = {
|
|
36
|
+
forceWrite: true,
|
|
37
|
+
templateParams: parameters,
|
|
38
|
+
};
|
|
39
|
+
const generateFunc = this.generatorService.generate.bind(this.generatorService);
|
|
40
|
+
try {
|
|
41
|
+
const result = yield generateFunc(new SpecificationFile_1.Specification(typeof asyncapi === 'object' ? JSON.stringify(asyncapi) : asyncapi), template, tmpDir, options, {}, true);
|
|
42
|
+
if (!result.success) {
|
|
43
|
+
return next(new problem_exception_1.ProblemException({
|
|
44
|
+
type: 'generation-error',
|
|
45
|
+
title: 'Generation Error',
|
|
46
|
+
status: 500,
|
|
47
|
+
detail: result.error || 'An error occurred during generation.',
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (genErr) {
|
|
52
|
+
return next(new problem_exception_1.ProblemException({
|
|
53
|
+
type: 'internal-generator-error',
|
|
54
|
+
title: 'Internal Generator error',
|
|
55
|
+
status: 500,
|
|
56
|
+
detail: genErr.message,
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
this.archiverService.appendDirectory(zip, tmpDir, 'template');
|
|
60
|
+
this.archiverService.appendAsyncAPIDocument(zip, asyncapi);
|
|
61
|
+
res.status(200);
|
|
62
|
+
return yield this.archiverService.finalize(zip);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
return next(new problem_exception_1.ProblemException({
|
|
66
|
+
type: 'internal-server-error',
|
|
67
|
+
title: 'Internal server error',
|
|
68
|
+
status: 500,
|
|
69
|
+
detail: err.message,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
if (tmpDir) {
|
|
74
|
+
// Remove the temporary directory after the response is sent
|
|
75
|
+
// to avoid leaving temporary files on the server.
|
|
76
|
+
yield this.archiverService.removeTempDirectory(tmpDir);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
validateTemplateParameters(req) {
|
|
82
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
const { template, parameters } = req.body;
|
|
84
|
+
const validate = yield this.getAjvValidator(template);
|
|
85
|
+
if (!validate) {
|
|
86
|
+
throw new problem_exception_1.ProblemException({
|
|
87
|
+
type: 'invalid-template',
|
|
88
|
+
title: 'Invalid Generator Template',
|
|
89
|
+
status: 422,
|
|
90
|
+
detail: `Template ${template} is not valid or does not exist.`,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const valid = validate(parameters || {});
|
|
94
|
+
const errors = validate.errors && [...validate.errors];
|
|
95
|
+
if (valid === false) {
|
|
96
|
+
throw new problem_exception_1.ProblemException({
|
|
97
|
+
type: 'invalid-template-parameters',
|
|
98
|
+
title: 'Invalid Generator Template parameters',
|
|
99
|
+
status: 422,
|
|
100
|
+
validationErrors: errors,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Retrieve proper AJV's validator function, create or reuse it.
|
|
107
|
+
*/
|
|
108
|
+
getAjvValidator(templateName) {
|
|
109
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
if (!this.ajv) {
|
|
111
|
+
throw new Error('AJV instance is not initialized');
|
|
112
|
+
}
|
|
113
|
+
let validate = this.ajv.getSchema(templateName);
|
|
114
|
+
if (!validate) {
|
|
115
|
+
this.ajv.addSchema((yield this.serializeTemplateParameters(templateName)) || {}, templateName);
|
|
116
|
+
validate = this.ajv.getSchema(templateName);
|
|
117
|
+
}
|
|
118
|
+
return validate;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Serialize template parameters. Read all parameters from template's package.json and create a proper JSON Schema for validating parameters.
|
|
123
|
+
*/
|
|
124
|
+
serializeTemplateParameters(templateName) {
|
|
125
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
const pathToPackageJSON = path_1.default.join(__dirname, `../../../../node_modules/${templateName}/package.json`);
|
|
127
|
+
const packageJSONContent = yield fs_1.default.promises.readFile(pathToPackageJSON, 'utf-8');
|
|
128
|
+
const packageJSON = JSON.parse(packageJSONContent);
|
|
129
|
+
if (!packageJSON) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const generator = packageJSON.generator;
|
|
133
|
+
if (!generator || !generator.parameters) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const parameters = generator.parameters || {};
|
|
137
|
+
const required = [];
|
|
138
|
+
for (const parameter in parameters) {
|
|
139
|
+
// at the moment all parameters have to be passed to the Generator instance as string
|
|
140
|
+
parameters[String(parameter)].type = 'string';
|
|
141
|
+
if (parameters[String(parameter)].required) {
|
|
142
|
+
required.push(parameter);
|
|
143
|
+
}
|
|
144
|
+
delete parameters[String(parameter)].required;
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
148
|
+
type: 'object',
|
|
149
|
+
properties: parameters,
|
|
150
|
+
required,
|
|
151
|
+
// don't allow non supported properties
|
|
152
|
+
additionalProperties: false,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
boot() {
|
|
157
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
this.ajv = new ajv_1.default({
|
|
159
|
+
inlineRefs: true,
|
|
160
|
+
allErrors: true,
|
|
161
|
+
schemaId: 'id',
|
|
162
|
+
logger: false,
|
|
163
|
+
});
|
|
164
|
+
const router = (0, express_1.Router)();
|
|
165
|
+
router.post(`${this.basepath}`, yield (0, validation_middleware_1.validationMiddleware)({
|
|
166
|
+
path: this.basepath,
|
|
167
|
+
method: 'post',
|
|
168
|
+
documents: ['asyncapi'],
|
|
169
|
+
}), this.generate.bind(this));
|
|
170
|
+
return router;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.GenerateController = GenerateController;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HelpController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
7
|
+
const app_openapi_1 = require("../../../utils/app-openapi");
|
|
8
|
+
const getCommandsFromRequest = (req) => {
|
|
9
|
+
return req.params.command
|
|
10
|
+
? req.params.command.split('/').filter((cmd) => cmd.trim())
|
|
11
|
+
: [];
|
|
12
|
+
};
|
|
13
|
+
const isKeyValid = (key, obj) => {
|
|
14
|
+
return Object.keys(obj).includes(key);
|
|
15
|
+
};
|
|
16
|
+
const getPathKeysMatchingCommands = (commands, pathKeys) => {
|
|
17
|
+
if (!Array.isArray(pathKeys) ||
|
|
18
|
+
!pathKeys.every((key) => typeof key === 'string')) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return pathKeys.find((pathKey) => {
|
|
22
|
+
const pathParts = pathKey.split('/').filter((part) => part !== '');
|
|
23
|
+
return pathParts.every((pathPart, i) => {
|
|
24
|
+
const command = commands[Number(i)];
|
|
25
|
+
return pathPart === command || pathPart.startsWith('{');
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const getFullRequestBodySpec = (operationDetails) => {
|
|
30
|
+
return isKeyValid('requestBody', operationDetails)
|
|
31
|
+
? operationDetails.requestBody.content['application/json'].schema
|
|
32
|
+
: null;
|
|
33
|
+
};
|
|
34
|
+
const buildResponseObject = (matchedPathKey, method, operationDetails, requestBodySchema) => {
|
|
35
|
+
return {
|
|
36
|
+
command: matchedPathKey,
|
|
37
|
+
method: method.toUpperCase(),
|
|
38
|
+
summary: operationDetails.summary || '',
|
|
39
|
+
requestBody: requestBodySchema,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
class HelpController {
|
|
43
|
+
constructor() {
|
|
44
|
+
this.basepath = '/help';
|
|
45
|
+
}
|
|
46
|
+
boot() {
|
|
47
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const router = (0, express_1.Router)();
|
|
49
|
+
router.get('/help/:command*?', (req, res, next) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const commands = getCommandsFromRequest(req);
|
|
51
|
+
let openapiSpec;
|
|
52
|
+
try {
|
|
53
|
+
openapiSpec = yield (0, app_openapi_1.getAppOpenAPI)();
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return next(err);
|
|
57
|
+
}
|
|
58
|
+
if (commands.length === 0) {
|
|
59
|
+
const routes = isKeyValid('paths', openapiSpec)
|
|
60
|
+
? Object.keys(openapiSpec.paths).map((path) => ({
|
|
61
|
+
command: path.replace(/^\//, ''),
|
|
62
|
+
url: `${this.basepath}${path}`,
|
|
63
|
+
}))
|
|
64
|
+
: [];
|
|
65
|
+
return res.json(routes);
|
|
66
|
+
}
|
|
67
|
+
const pathKeys = isKeyValid('paths', openapiSpec)
|
|
68
|
+
? Object.keys(openapiSpec.paths)
|
|
69
|
+
: [];
|
|
70
|
+
const matchedPathKey = getPathKeysMatchingCommands(commands, pathKeys);
|
|
71
|
+
if (!matchedPathKey) {
|
|
72
|
+
return next(new problem_exception_1.ProblemException({
|
|
73
|
+
type: 'invalid-asyncapi-command',
|
|
74
|
+
title: 'Invalid AsyncAPI Command',
|
|
75
|
+
status: 404,
|
|
76
|
+
detail: 'The given AsyncAPI command is not valid.',
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
const pathInfo = isKeyValid(matchedPathKey, openapiSpec.paths)
|
|
80
|
+
? openapiSpec.paths[String(matchedPathKey)]
|
|
81
|
+
: undefined;
|
|
82
|
+
const method = commands.length > 1 ? 'get' : 'post';
|
|
83
|
+
const operationDetails = isKeyValid(method, pathInfo)
|
|
84
|
+
? pathInfo[String(method)]
|
|
85
|
+
: undefined;
|
|
86
|
+
if (!operationDetails) {
|
|
87
|
+
return next(new problem_exception_1.ProblemException({
|
|
88
|
+
type: 'invalid-asyncapi-command',
|
|
89
|
+
title: 'Invalid AsyncAPI Command',
|
|
90
|
+
status: 404,
|
|
91
|
+
detail: 'The given AsyncAPI command is not valid.',
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
const requestBodySchema = getFullRequestBodySpec(operationDetails);
|
|
95
|
+
return res.json(buildResponseObject(matchedPathKey, method, operationDetails, requestBodySchema));
|
|
96
|
+
}));
|
|
97
|
+
return router;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.HelpController = HelpController;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { Controller } from '../../../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Controller which exposes the Parser functionality, to parse the AsyncAPI document.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ParseController implements Controller {
|
|
7
|
+
basepath: string;
|
|
8
|
+
private parse;
|
|
9
|
+
boot(): Promise<Router>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParseController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
7
|
+
/**
|
|
8
|
+
* Controller which exposes the Parser functionality, to parse the AsyncAPI document.
|
|
9
|
+
*/
|
|
10
|
+
class ParseController {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.basepath = '/parse';
|
|
13
|
+
}
|
|
14
|
+
parse(req, res) {
|
|
15
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
var _a;
|
|
17
|
+
const stringified = JSON.stringify((_a = req.asyncapi) === null || _a === void 0 ? void 0 : _a.parsedDocument);
|
|
18
|
+
res.status(200).json({
|
|
19
|
+
parsed: stringified,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
boot() {
|
|
24
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
const router = (0, express_1.Router)();
|
|
26
|
+
router.post(`${this.basepath}`, yield (0, validation_middleware_1.validationMiddleware)({
|
|
27
|
+
path: this.basepath,
|
|
28
|
+
method: 'post',
|
|
29
|
+
documents: ['asyncapi'],
|
|
30
|
+
}), this.parse.bind(this));
|
|
31
|
+
return router;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ParseController = ParseController;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { Controller } from '../../../interfaces';
|
|
3
|
+
/**
|
|
4
|
+
* Controller which exposes the Parser functionality, to validate the AsyncAPI document.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ValidateController implements Controller {
|
|
7
|
+
basepath: string;
|
|
8
|
+
private validate;
|
|
9
|
+
boot(): Promise<Router>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const validation_middleware_1 = require("../middlewares/validation.middleware");
|
|
7
|
+
/**
|
|
8
|
+
* Controller which exposes the Parser functionality, to validate the AsyncAPI document.
|
|
9
|
+
*/
|
|
10
|
+
class ValidateController {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.basepath = '/validate';
|
|
13
|
+
}
|
|
14
|
+
validate(req, res) {
|
|
15
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
17
|
+
if ((_b = (_a = req.asyncapi) === null || _a === void 0 ? void 0 : _a.parsedDocuments) === null || _b === void 0 ? void 0 : _b.length) {
|
|
18
|
+
const results = ((_c = req.asyncapi.validationResults) === null || _c === void 0 ? void 0 : _c.map((result) => ({
|
|
19
|
+
status: result.status,
|
|
20
|
+
asyncapi: result.document,
|
|
21
|
+
diagnostics: result.diagnostics,
|
|
22
|
+
score: result.score,
|
|
23
|
+
}))) || [];
|
|
24
|
+
res.status(200).json({
|
|
25
|
+
results,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
res.status(200).json({
|
|
30
|
+
status: (_e = (_d = req.asyncapi) === null || _d === void 0 ? void 0 : _d.validationResult) === null || _e === void 0 ? void 0 : _e.status,
|
|
31
|
+
asyncapi: (_g = (_f = req.asyncapi) === null || _f === void 0 ? void 0 : _f.validationResult) === null || _g === void 0 ? void 0 : _g.document,
|
|
32
|
+
diagnostics: (_j = (_h = req.asyncapi) === null || _h === void 0 ? void 0 : _h.validationResult) === null || _j === void 0 ? void 0 : _j.diagnostics,
|
|
33
|
+
score: (_l = (_k = req.asyncapi) === null || _k === void 0 ? void 0 : _k.validationResult) === null || _l === void 0 ? void 0 : _l.score,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
boot() {
|
|
39
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const router = (0, express_1.Router)();
|
|
41
|
+
router.post(`${this.basepath}`, yield (0, validation_middleware_1.validationMiddleware)({
|
|
42
|
+
path: this.basepath,
|
|
43
|
+
method: 'post',
|
|
44
|
+
documents: ['asyncapi'],
|
|
45
|
+
}), this.validate.bind(this));
|
|
46
|
+
return router;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.ValidateController = ValidateController;
|
|
@@ -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;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ProblemExceptionProps {
|
|
2
|
+
status: number;
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
declare const ProblemException_base: {
|
|
6
|
+
new (problem: import("@asyncapi/problem").ProblemBase & ProblemExceptionProps, options?: import("@asyncapi/problem").ProblemOptions): import("@asyncapi/problem").Problem<ProblemExceptionProps>;
|
|
7
|
+
createType(type: string): string;
|
|
8
|
+
captureStackTrace(targetObject: object, constructorOpt?: Function | undefined): void;
|
|
9
|
+
prepareStackTrace?: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
|
|
10
|
+
stackTraceLimit: number;
|
|
11
|
+
};
|
|
12
|
+
export declare class ProblemException extends ProblemException_base {
|
|
13
|
+
}
|
|
14
|
+
export {};
|