@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,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProblemException = void 0;
|
|
4
|
+
const problem_1 = require("@asyncapi/problem");
|
|
5
|
+
const typePrefix = 'https://api.asyncapi.com/problem';
|
|
6
|
+
class ProblemException extends (0, problem_1.ProblemMixin)({
|
|
7
|
+
typePrefix,
|
|
8
|
+
}) {
|
|
9
|
+
}
|
|
10
|
+
exports.ProblemException = ProblemException;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ValidateController } from './controllers/validate.controller';
|
|
2
|
+
import { ParseController } from './controllers/parse.controller';
|
|
3
|
+
import { GenerateController } from './controllers/generate.controller';
|
|
4
|
+
import { ConvertController } from './controllers/convert.controller';
|
|
5
|
+
import { BundleController } from './controllers/bundle.controller';
|
|
6
|
+
import { DiffController } from './controllers/diff.controller';
|
|
7
|
+
import { DocsController } from './controllers/docs.controller';
|
|
8
|
+
import { HelpController } from './controllers/help.controller';
|
|
9
|
+
import { VersionController } from './controllers/version.controller';
|
|
10
|
+
export declare const CONTROLLERS: (ValidateController | ParseController | GenerateController | ConvertController | BundleController | DiffController | DocsController | HelpController | VersionController)[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONTROLLERS = void 0;
|
|
4
|
+
const validate_controller_1 = require("./controllers/validate.controller");
|
|
5
|
+
const parse_controller_1 = require("./controllers/parse.controller");
|
|
6
|
+
const generate_controller_1 = require("./controllers/generate.controller");
|
|
7
|
+
const convert_controller_1 = require("./controllers/convert.controller");
|
|
8
|
+
const bundle_controller_1 = require("./controllers/bundle.controller");
|
|
9
|
+
const diff_controller_1 = require("./controllers/diff.controller");
|
|
10
|
+
const docs_controller_1 = require("./controllers/docs.controller");
|
|
11
|
+
const help_controller_1 = require("./controllers/help.controller");
|
|
12
|
+
const version_controller_1 = require("./controllers/version.controller");
|
|
13
|
+
exports.CONTROLLERS = [
|
|
14
|
+
new validate_controller_1.ValidateController(),
|
|
15
|
+
new parse_controller_1.ParseController(),
|
|
16
|
+
new generate_controller_1.GenerateController(),
|
|
17
|
+
new convert_controller_1.ConvertController(),
|
|
18
|
+
new bundle_controller_1.BundleController(),
|
|
19
|
+
new diff_controller_1.DiffController(),
|
|
20
|
+
new docs_controller_1.DocsController(),
|
|
21
|
+
new help_controller_1.HelpController(),
|
|
22
|
+
new version_controller_1.VersionController(),
|
|
23
|
+
];
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NextFunction, Request, Response } from 'express';
|
|
2
|
+
import { ProblemException } from '../exceptions/problem.exception';
|
|
3
|
+
/**
|
|
4
|
+
* Catch problem exception, log it and serialize error to human readable form.
|
|
5
|
+
*/
|
|
6
|
+
export declare function problemMiddleware(error: ProblemException, req: Request, res: Response, next: NextFunction): void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.problemMiddleware = problemMiddleware;
|
|
4
|
+
const logger_1 = require("../../../utils/logger");
|
|
5
|
+
/**
|
|
6
|
+
* Catch problem exception, log it and serialize error to human readable form.
|
|
7
|
+
*/
|
|
8
|
+
function problemMiddleware(error, req, res, next) {
|
|
9
|
+
if (res.headersSent) {
|
|
10
|
+
return next(error);
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const problemShape = error.get();
|
|
14
|
+
const status = (problemShape.status = problemShape.status || 500);
|
|
15
|
+
problemShape.title = problemShape.title || 'Internal server error';
|
|
16
|
+
logger_1.logger.error(`[${req.method}] ${req.path} >> Status:: ${status}, Type:: ${problemShape.type.replace('https://api.asyncapi.com/problem/', '')}, Title:: ${problemShape.title}, Detail:: ${problemShape.detail}`);
|
|
17
|
+
const isError = status >= 500;
|
|
18
|
+
const problem = error.toObject({
|
|
19
|
+
includeStack: isError,
|
|
20
|
+
includeCause: isError,
|
|
21
|
+
});
|
|
22
|
+
res.status(status).json(problem);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
next(err);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Request, Response, NextFunction } from 'express';
|
|
2
|
+
export interface ValidationMiddlewareOptions {
|
|
3
|
+
path: string;
|
|
4
|
+
method: 'all' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';
|
|
5
|
+
documents?: Array<string>;
|
|
6
|
+
version?: 'v1';
|
|
7
|
+
condition?: (req: Request) => boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validate RequestBody and sent AsyncAPI document(s) for given path and method based on the OpenAPI Document.
|
|
11
|
+
*/
|
|
12
|
+
export declare function validationMiddleware(options: ValidationMiddlewareOptions): Promise<(req: Request, res: Response, next: NextFunction) => Promise<void>>;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validationMiddleware = validationMiddleware;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const problem_exception_1 = require("../exceptions/problem.exception");
|
|
6
|
+
const ajv_1 = require("../../../utils/ajv");
|
|
7
|
+
const app_openapi_1 = require("../../../utils/app-openapi");
|
|
8
|
+
const validation_service_1 = require("../../../domains/services/validation.service");
|
|
9
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
10
|
+
const ajvInstance = (0, ajv_1.createAjvInstance)();
|
|
11
|
+
/**
|
|
12
|
+
* Create AJV's validator function for given path in the OpenAPI document.
|
|
13
|
+
*/
|
|
14
|
+
function compileAjv(options) {
|
|
15
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
16
|
+
const appOpenAPI = yield (0, app_openapi_1.getAppOpenAPI)();
|
|
17
|
+
const paths = appOpenAPI.paths || {};
|
|
18
|
+
const pathName = options.path;
|
|
19
|
+
const path = paths[String(pathName)];
|
|
20
|
+
if (!path) {
|
|
21
|
+
throw new Error(`Path "${pathName}" doesn't exist in the OpenAPI document.`);
|
|
22
|
+
}
|
|
23
|
+
const methodName = options.method;
|
|
24
|
+
const method = path[String(methodName)];
|
|
25
|
+
if (!method) {
|
|
26
|
+
throw new Error(`Method "${methodName}" for "${pathName}" path doesn't exist in the OpenAPI document.`);
|
|
27
|
+
}
|
|
28
|
+
const requestBody = method.requestBody;
|
|
29
|
+
if (!requestBody) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
let schema = requestBody.content['application/json'].schema;
|
|
33
|
+
if (!schema) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
schema = Object.assign({}, schema);
|
|
37
|
+
schema['$schema'] = 'http://json-schema.org/draft-07/schema';
|
|
38
|
+
if (options.documents && schema.properties) {
|
|
39
|
+
schema.properties = Object.assign({}, schema.properties);
|
|
40
|
+
for (const field of options.documents) {
|
|
41
|
+
if (schema.properties[String(field)].items) {
|
|
42
|
+
schema.properties[String(field)] = Object.assign({}, schema.properties[String(field)]);
|
|
43
|
+
schema.properties[String(field)].items = true;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
schema.properties[String(field)] = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return ajvInstance.compile(schema);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function validateRequestBody(validate, body) {
|
|
54
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
const valid = validate(body);
|
|
56
|
+
const errors = validate.errors && [...validate.errors];
|
|
57
|
+
if (valid === false) {
|
|
58
|
+
throw new problem_exception_1.ProblemException({
|
|
59
|
+
type: 'invalid-request-body',
|
|
60
|
+
title: 'Invalid Request Body',
|
|
61
|
+
status: 422,
|
|
62
|
+
validationErrors: errors,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function validateSingleDocument(asyncapi, path, validationService) {
|
|
68
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (typeof asyncapi === 'object') {
|
|
70
|
+
asyncapi = JSON.stringify(asyncapi);
|
|
71
|
+
}
|
|
72
|
+
const specFile = new SpecificationFile_1.Specification(asyncapi, { fileURL: path });
|
|
73
|
+
return validationService
|
|
74
|
+
.validateDocument(specFile, {
|
|
75
|
+
'fail-severity': 'error',
|
|
76
|
+
suppressAllWarnings: false,
|
|
77
|
+
})
|
|
78
|
+
.then((result) => {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
if (!result.success || ((_a = result.data) === null || _a === void 0 ? void 0 : _a.status) !== 'valid') {
|
|
81
|
+
throw new problem_exception_1.ProblemException({
|
|
82
|
+
type: 'invalid-asyncapi-document',
|
|
83
|
+
title: 'Invalid AsyncAPI Document',
|
|
84
|
+
status: 422,
|
|
85
|
+
detail: result.error || 'The provided AsyncAPI document is invalid.',
|
|
86
|
+
diagnostics: result.diagnostics || ((_b = result.data) === null || _b === void 0 ? void 0 : _b.diagnostics),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return result.data;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function validateListDocuments(asyncapis, path, validationService) {
|
|
94
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
const validationResults = [];
|
|
96
|
+
for (const asyncapi of asyncapis) {
|
|
97
|
+
const parsed = yield validateSingleDocument(asyncapi, path, validationService);
|
|
98
|
+
if (parsed) {
|
|
99
|
+
validationResults.push(parsed);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new problem_exception_1.ProblemException({
|
|
103
|
+
type: 'invalid-asyncapi-document',
|
|
104
|
+
title: 'Invalid AsyncAPI Document',
|
|
105
|
+
status: 422,
|
|
106
|
+
detail: 'One or more provided AsyncAPI documents are invalid.',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return validationResults;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validate RequestBody and sent AsyncAPI document(s) for given path and method based on the OpenAPI Document.
|
|
115
|
+
*/
|
|
116
|
+
function validationMiddleware(options) {
|
|
117
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
118
|
+
options.version = options.version || 'v1';
|
|
119
|
+
const validate = yield compileAjv(options);
|
|
120
|
+
const documents = options.documents || [];
|
|
121
|
+
return (req, res, next) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
var _a;
|
|
123
|
+
// Check if the condition is met
|
|
124
|
+
if (options.condition && !options.condition(req)) {
|
|
125
|
+
return next();
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
if (!validate) {
|
|
129
|
+
throw new problem_exception_1.ProblemException({
|
|
130
|
+
type: 'invalid-request-body',
|
|
131
|
+
title: 'Invalid Request Body',
|
|
132
|
+
status: 422,
|
|
133
|
+
detail: `Request body validation is not supported for "${options.path}" path with "${options.method}" method.`,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
yield validateRequestBody(validate, req.body);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error instanceof problem_exception_1.ProblemException) {
|
|
140
|
+
return next(error);
|
|
141
|
+
}
|
|
142
|
+
// Handle unexpected errors
|
|
143
|
+
return next(new problem_exception_1.ProblemException({
|
|
144
|
+
type: 'internal-server-error',
|
|
145
|
+
title: 'Internal Server Error',
|
|
146
|
+
status: 500,
|
|
147
|
+
detail: `An unexpected error occurred during request validation: ${(_a = error.message) !== null && _a !== void 0 ? _a : 'Unknown error'}`,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
const parserConfig = {
|
|
151
|
+
__unstable: {
|
|
152
|
+
resolver: {
|
|
153
|
+
resolvers: [
|
|
154
|
+
// @TODO: Add Cookie Based Resolvers after migration and understanding some
|
|
155
|
+
// details about how to use them in the new parser-js version.
|
|
156
|
+
],
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
const validationService = new validation_service_1.ValidationService(parserConfig);
|
|
161
|
+
const resolveURL = req.header('x-asyncapi-resolve-url') ||
|
|
162
|
+
req.header('referer') ||
|
|
163
|
+
req.header('origin') ||
|
|
164
|
+
'';
|
|
165
|
+
try {
|
|
166
|
+
req.asyncapi = req.asyncapi || {};
|
|
167
|
+
for (const field of documents) {
|
|
168
|
+
const body = req.body[String(field)];
|
|
169
|
+
if (Array.isArray(body)) {
|
|
170
|
+
const results = yield validateListDocuments(body, resolveURL, validationService);
|
|
171
|
+
const parsedDocuments = results.map((result) => result.document);
|
|
172
|
+
if (!parsedDocuments.every(doc => doc !== undefined)) {
|
|
173
|
+
throw new problem_exception_1.ProblemException({
|
|
174
|
+
type: 'invalid-asyncapi-document-parse',
|
|
175
|
+
title: 'Invalid AsyncAPI Document (Parse Error)',
|
|
176
|
+
status: 422,
|
|
177
|
+
detail: 'One or more provided AsyncAPI documents are invalid.',
|
|
178
|
+
diagnostics: results.flatMap(result => result.diagnostics || []),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
req.asyncapi.parsedDocuments = parsedDocuments;
|
|
182
|
+
req.asyncapi.validationResults = results;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const result = yield validateSingleDocument(body, resolveURL, validationService);
|
|
186
|
+
req.asyncapi.parsedDocument = result === null || result === void 0 ? void 0 : result.document;
|
|
187
|
+
req.asyncapi.validationResult = result;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
next();
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
return next(err);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
const TYPES_400 = [
|
|
199
|
+
'null-or-falsey-document',
|
|
200
|
+
'impossible-to-convert-to-json',
|
|
201
|
+
'invalid-document-type',
|
|
202
|
+
'invalid-json',
|
|
203
|
+
'invalid-yaml',
|
|
204
|
+
];
|
|
205
|
+
/**
|
|
206
|
+
* Some error types have to be treated as 400 HTTP Status Code, another as 422.
|
|
207
|
+
*/
|
|
208
|
+
function retrieveStatusCode(type) {
|
|
209
|
+
if (TYPES_400.includes(type)) {
|
|
210
|
+
return 400;
|
|
211
|
+
}
|
|
212
|
+
return 422;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Merges fields from ParserError to ProblemException.
|
|
216
|
+
*/
|
|
217
|
+
function mergeParserError(error, parserError) {
|
|
218
|
+
if (parserError.detail) {
|
|
219
|
+
error.set('detail', parserError.detail);
|
|
220
|
+
}
|
|
221
|
+
if (parserError.validationErrors) {
|
|
222
|
+
error.set('validationErrors', parserError.validationErrors);
|
|
223
|
+
}
|
|
224
|
+
if (parserError.parsedJSON) {
|
|
225
|
+
error.set('parsedJSON', parserError.parsedJSON);
|
|
226
|
+
}
|
|
227
|
+
if (parserError.location) {
|
|
228
|
+
error.set('location', parserError.location);
|
|
229
|
+
}
|
|
230
|
+
if (parserError.refs) {
|
|
231
|
+
error.set('refs', parserError.refs);
|
|
232
|
+
}
|
|
233
|
+
return error;
|
|
234
|
+
}
|
|
235
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
236
|
+
function tryConvertToProblemException(err) {
|
|
237
|
+
const typeName = err.type.replace('https://github.com/asyncapi/parser-js/', '');
|
|
238
|
+
const error = new problem_exception_1.ProblemException({
|
|
239
|
+
type: typeName,
|
|
240
|
+
title: err.title,
|
|
241
|
+
status: retrieveStatusCode(typeName),
|
|
242
|
+
});
|
|
243
|
+
mergeParserError(error, err);
|
|
244
|
+
return error;
|
|
245
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
// include configs in the `dist` folder
|
|
5
|
+
require("./configs/production.json");
|
|
6
|
+
require("./configs/development.json");
|
|
7
|
+
require("./configs/test.json");
|
|
8
|
+
// for `config` module
|
|
9
|
+
process.env['NODE_CONFIG_DIR'] = `${__dirname}/configs`;
|
|
10
|
+
const app_1 = require("./app");
|
|
11
|
+
const _1 = require(".");
|
|
12
|
+
function main() {
|
|
13
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
const app = new app_1.App(_1.CONTROLLERS);
|
|
15
|
+
yield app.init();
|
|
16
|
+
app.listen();
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
main();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Command from '../internal/base';
|
|
2
|
+
export default class Bundle extends Command {
|
|
3
|
+
static readonly description = "Bundle one or multiple AsyncAPI Documents and their references together.";
|
|
4
|
+
static strict: boolean;
|
|
5
|
+
static examples: string[];
|
|
6
|
+
static flags: {
|
|
7
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
8
|
+
output: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
base: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
baseDir: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
xOrigin: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
private collectMetricsData;
|
|
15
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const base_1 = tslib_1.__importDefault(require("../internal/base"));
|
|
5
|
+
const bundler_1 = tslib_1.__importDefault(require("@asyncapi/bundler"));
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
8
|
+
const SpecificationFile_1 = require("../../../domains/models/SpecificationFile");
|
|
9
|
+
const bundle_flags_1 = require("../internal/flags/bundle.flags");
|
|
10
|
+
const { writeFile } = fs_1.promises;
|
|
11
|
+
class Bundle extends base_1.default {
|
|
12
|
+
run() {
|
|
13
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
const { argv, flags } = yield this.parse(Bundle);
|
|
15
|
+
const output = flags.output;
|
|
16
|
+
const outputFormat = path_1.default.extname(argv[0]);
|
|
17
|
+
const AsyncAPIFiles = argv;
|
|
18
|
+
this.metricsMetadata.files = AsyncAPIFiles.length;
|
|
19
|
+
const document = yield (0, bundler_1.default)(AsyncAPIFiles, {
|
|
20
|
+
base: flags.base,
|
|
21
|
+
baseDir: flags.baseDir,
|
|
22
|
+
xOrigin: flags.xOrigin,
|
|
23
|
+
});
|
|
24
|
+
yield this.collectMetricsData(document);
|
|
25
|
+
if (!output) {
|
|
26
|
+
if (outputFormat === '.yaml' || outputFormat === '.yml') {
|
|
27
|
+
this.log(document.yml());
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.log(JSON.stringify(document.json()));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const format = path_1.default.extname(output);
|
|
35
|
+
if (format === '.yml' || format === '.yaml') {
|
|
36
|
+
yield writeFile(path_1.default.resolve(process.cwd(), output), document.yml() || '', {
|
|
37
|
+
encoding: 'utf-8',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (format === '.json') {
|
|
41
|
+
yield writeFile(path_1.default.resolve(process.cwd(), output), document.string() || '', {
|
|
42
|
+
encoding: 'utf-8',
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
this.log(`Check out your shiny new bundled files at ${output}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
collectMetricsData(document) {
|
|
50
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
var _a;
|
|
52
|
+
try {
|
|
53
|
+
// We collect the metadata from the final output so it contains all the files
|
|
54
|
+
this.specFile = new SpecificationFile_1.Specification((_a = document.string()) !== null && _a !== void 0 ? _a : '');
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
if (e instanceof Error) {
|
|
58
|
+
this.log(`Skipping submitting anonymous metrics due to the following error: ${e.name}: ${e.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
Bundle.description = 'Bundle one or multiple AsyncAPI Documents and their references together.';
|
|
65
|
+
Bundle.strict = false;
|
|
66
|
+
Bundle.examples = [
|
|
67
|
+
'asyncapi bundle ./asyncapi.yaml > final-asyncapi.yaml',
|
|
68
|
+
'asyncapi bundle ./asyncapi.yaml --output final-asyncapi.yaml',
|
|
69
|
+
'asyncapi bundle ./asyncapi.yaml ./features.yaml',
|
|
70
|
+
'asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./main.yaml',
|
|
71
|
+
'asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./main.yaml --xOrigin',
|
|
72
|
+
'asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service',
|
|
73
|
+
];
|
|
74
|
+
Bundle.flags = (0, bundle_flags_1.bundleFlags)();
|
|
75
|
+
exports.default = Bundle;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Command from '../../internal/base';
|
|
2
|
+
export default class Analytics extends Command {
|
|
3
|
+
static readonly description = "Enable or disable analytics for metrics collection";
|
|
4
|
+
static readonly flags: {
|
|
5
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
6
|
+
disable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
enable: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
status: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
};
|
|
10
|
+
run(): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const base_1 = tslib_1.__importDefault(require("../../internal/base"));
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const os_1 = require("os");
|
|
8
|
+
const analytics_flags_1 = require("../../internal/flags/config/analytics.flags");
|
|
9
|
+
const picocolors_1 = require("picocolors");
|
|
10
|
+
const { readFile, writeFile } = fs_1.promises;
|
|
11
|
+
class Analytics extends base_1.default {
|
|
12
|
+
run() {
|
|
13
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
const { flags } = yield this.parse(Analytics);
|
|
15
|
+
const analyticsConfigFile = process.env.ASYNCAPI_METRICS_CONFIG_PATH ||
|
|
16
|
+
(0, path_1.join)((0, os_1.homedir)(), '.asyncapi-analytics');
|
|
17
|
+
try {
|
|
18
|
+
const analyticsConfigFileContent = JSON.parse(yield readFile((0, path_1.resolve)(analyticsConfigFile), { encoding: 'utf8' }));
|
|
19
|
+
if (flags.disable) {
|
|
20
|
+
analyticsConfigFileContent.analyticsEnabled = 'false';
|
|
21
|
+
this.log('\nAnalytics disabled.\n');
|
|
22
|
+
this.metricsMetadata.analytics_disabled = flags.disable;
|
|
23
|
+
}
|
|
24
|
+
else if (flags.enable) {
|
|
25
|
+
analyticsConfigFileContent.analyticsEnabled = 'true';
|
|
26
|
+
this.log('\nAnalytics enabled.\n');
|
|
27
|
+
this.metricsMetadata.analytics_enabled = flags.enable;
|
|
28
|
+
}
|
|
29
|
+
else if (!flags.status) {
|
|
30
|
+
this.log(`\nPlease append the ${(0, picocolors_1.blueBright)('--disable')} flag to the command if you prefer to disable analytics, or use the ${(0, picocolors_1.blueBright)('--enable')} flag if you want to enable analytics again. To check the current analytics status, use the ${(0, picocolors_1.blueBright)('--status')} flag.\n`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
yield writeFile(analyticsConfigFile, JSON.stringify(analyticsConfigFileContent), { encoding: 'utf8' });
|
|
34
|
+
if (flags.status) {
|
|
35
|
+
if (analyticsConfigFileContent.analyticsEnabled === 'true') {
|
|
36
|
+
this.log('\nAnalytics are enabled.\n');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.log(`\n${(0, picocolors_1.redBright)('Analytics are disabled.')} To enable analytics, use the ${(0, picocolors_1.blueBright)('--enable')} flag.\n`);
|
|
40
|
+
}
|
|
41
|
+
this.metricsMetadata.analytics_status_checked = flags.status;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
switch (e.code) {
|
|
46
|
+
case 'ENOENT':
|
|
47
|
+
this.error(`Unable to access the analytics configuration file. We tried to access the ${(0, picocolors_1.blueBright)('.asyncapi-analytics')} file in the path "${(0, picocolors_1.blueBright)(analyticsConfigFile)}" but the file could not be found.`);
|
|
48
|
+
break;
|
|
49
|
+
case 'EEXIST':
|
|
50
|
+
this.error(`Unable to update the analytics configuration file. We tried to update your ".asyncapi-analytics" file in the path "${(0, picocolors_1.blueBright)(analyticsConfigFile)}" but the file does not exist.`);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
this.error(`Unable to change your analytics configuration. Please check the following message for further info about the error:\n\n${(0, picocolors_1.redBright)(e)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
Analytics.description = 'Enable or disable analytics for metrics collection';
|
|
60
|
+
Analytics.flags = (0, analytics_flags_1.analyticsFlags)();
|
|
61
|
+
exports.default = Analytics;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Command from '../../../internal/base';
|
|
2
|
+
export default class AuthAdd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
pattern: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
token: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
8
|
+
static flags: {
|
|
9
|
+
'auth-type': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
header: import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const base_1 = tslib_1.__importDefault(require("../../../internal/base"));
|
|
6
|
+
const picocolors_1 = require("picocolors");
|
|
7
|
+
const config_service_1 = require("../../../../../domains/services/config.service");
|
|
8
|
+
class AuthAdd extends base_1.default {
|
|
9
|
+
run() {
|
|
10
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
11
|
+
const { args, flags } = yield this.parse(AuthAdd);
|
|
12
|
+
const isEnvVar = args.token.startsWith('$');
|
|
13
|
+
const tokenValue = isEnvVar ? args.token.slice(1) : args.token;
|
|
14
|
+
// Parse headers into an object
|
|
15
|
+
const headers = {};
|
|
16
|
+
if (flags.header) {
|
|
17
|
+
for (const headerEntry of flags.header) {
|
|
18
|
+
const [key, value] = headerEntry.split('=');
|
|
19
|
+
if (key && value) {
|
|
20
|
+
headers[key.trim()] = value.trim();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.warn(`⚠️ Ignored invalid header format: ${headerEntry}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const entry = {
|
|
28
|
+
pattern: args.pattern,
|
|
29
|
+
token: tokenValue,
|
|
30
|
+
authType: flags['auth-type'] || 'Bearer',
|
|
31
|
+
headers: Object.keys(headers).length ? headers : undefined,
|
|
32
|
+
};
|
|
33
|
+
try {
|
|
34
|
+
yield config_service_1.ConfigService.addAuthEntry(entry);
|
|
35
|
+
this.log(`✅ Auth config added for ${(0, picocolors_1.blueBright)(args.pattern)} using ${isEnvVar ? `env var (${tokenValue})` : 'raw token'} with auth type ${(0, picocolors_1.blueBright)(entry.authType || 'Bearer')}`);
|
|
36
|
+
if (entry.headers) {
|
|
37
|
+
this.log(`Headers: ${JSON.stringify(entry.headers, null, 2)}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
this.error(`❌ Failed to add auth config: ${err.message}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
AuthAdd.description = 'Add an authentication config for resolving $ref files requiring HTTP Authorization.';
|
|
47
|
+
AuthAdd.args = {
|
|
48
|
+
pattern: core_1.Args.string({
|
|
49
|
+
required: true,
|
|
50
|
+
description: 'Glob pattern for matching protected URLs (e.g. github.com/org/repo/**/*.*)',
|
|
51
|
+
}),
|
|
52
|
+
token: core_1.Args.string({
|
|
53
|
+
required: true,
|
|
54
|
+
description: 'Authentication token or environment variable reference (prefix with $, e.g. $GITHUB_TOKEN)',
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
AuthAdd.flags = {
|
|
58
|
+
'auth-type': core_1.Flags.string({
|
|
59
|
+
char: 'a',
|
|
60
|
+
description: 'Authentication type (default is "Bearer")',
|
|
61
|
+
}),
|
|
62
|
+
header: core_1.Flags.string({
|
|
63
|
+
char: 'h',
|
|
64
|
+
description: 'Additional header in key=value format; can be used multiple times',
|
|
65
|
+
multiple: true,
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
exports.default = AuthAdd;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Command from '../../../internal/base';
|
|
2
|
+
export default class ContextAdd extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static flags: {
|
|
5
|
+
help: import("@oclif/core/lib/interfaces").BooleanFlag<void>;
|
|
6
|
+
'set-current': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
7
|
+
};
|
|
8
|
+
static args: {
|
|
9
|
+
'context-name': import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
10
|
+
'spec-file-path': import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|