@kaapi/kaapi 0.0.12 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/lib/abstract-app.d.ts +23 -0
- package/lib/abstract-app.js +23 -0
- package/lib/abstract-app.js.map +1 -0
- package/lib/app.d.ts +17 -11
- package/lib/app.js +41 -44
- package/lib/app.js.map +1 -1
- package/lib/base-app.d.ts +23 -0
- package/lib/base-app.js +23 -0
- package/lib/base-app.js.map +1 -0
- package/lib/baseApp.js +1 -1
- package/lib/baseApp.js.map +1 -1
- package/lib/index.d.ts +6 -2
- package/lib/index.js +6 -2
- package/lib/index.js.map +1 -1
- package/lib/services/docs/docs.d.ts +4 -4
- package/lib/services/docs/docs.js +2 -2
- package/lib/services/docs/docs.js.map +1 -1
- package/lib/services/docs/generators.js +14 -3
- package/lib/services/docs/generators.js.map +1 -1
- package/lib/services/docs/swagger-ui-generator.d.ts +19 -0
- package/lib/services/docs/swagger-ui-generator.js +245 -0
- package/lib/services/docs/swagger-ui-generator.js.map +1 -0
- package/lib/services/docs/utils.d.ts +15 -0
- package/lib/services/docs/utils.js +41 -0
- package/lib/services/docs/utils.js.map +1 -0
- package/lib/services/log.js +1 -1
- package/lib/services/log.js.map +1 -1
- package/lib/services/plugin.d.ts +27 -1
- package/lib/services/plugin.js +55 -2
- package/lib/services/plugin.js.map +1 -1
- package/lib/services/plugins/auth-designs/api-key-auth-design.d.ts +42 -0
- package/lib/services/plugins/auth-designs/api-key-auth-design.js +116 -0
- package/lib/services/plugins/auth-designs/api-key-auth-design.js.map +1 -0
- package/lib/services/plugins/auth-designs/basic-auth-design.d.ts +29 -0
- package/lib/services/plugins/auth-designs/basic-auth-design.js +88 -0
- package/lib/services/plugins/auth-designs/basic-auth-design.js.map +1 -0
- package/lib/services/plugins/auth-designs/bearer-auth-design.d.ts +29 -0
- package/lib/services/plugins/auth-designs/bearer-auth-design.js +87 -0
- package/lib/services/plugins/auth-designs/bearer-auth-design.js.map +1 -0
- package/lib/services/plugins/plugin.d.ts +88 -0
- package/lib/services/plugins/plugin.js +86 -0
- package/lib/services/plugins/plugin.js.map +1 -0
- package/package.json +3 -3
- package/types/overrides.d.ts +3 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// BasicAuthDesign
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BasicAuthDesign = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const boom_1 = tslib_1.__importDefault(require("@hapi/boom"));
|
|
7
|
+
const api_doc_generator_1 = require("@novice1/api-doc-generator");
|
|
8
|
+
const plugin_1 = require("../plugin");
|
|
9
|
+
class BasicAuthDesign extends plugin_1.AuthDesign {
|
|
10
|
+
constructor(arg) {
|
|
11
|
+
super();
|
|
12
|
+
this.key = 'Authorization';
|
|
13
|
+
this.strategyName = 'basic-auth-design';
|
|
14
|
+
if (arg === null || arg === void 0 ? void 0 : arg.strategyName)
|
|
15
|
+
this.strategyName = arg.strategyName;
|
|
16
|
+
this.auth = (arg === null || arg === void 0 ? void 0 : arg.auth) ? Object.assign({}, arg.auth) : {};
|
|
17
|
+
}
|
|
18
|
+
setDescription(description) {
|
|
19
|
+
this.description = description;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
getStrategyName() {
|
|
23
|
+
return this.strategyName;
|
|
24
|
+
}
|
|
25
|
+
getDescription() {
|
|
26
|
+
return this.description;
|
|
27
|
+
}
|
|
28
|
+
docs() {
|
|
29
|
+
const docs = new api_doc_generator_1.BasicAuthUtil(this.strategyName);
|
|
30
|
+
if (this.description) {
|
|
31
|
+
docs.setDescription(this.description);
|
|
32
|
+
}
|
|
33
|
+
return docs;
|
|
34
|
+
}
|
|
35
|
+
integrateStrategy(t) {
|
|
36
|
+
const strategyName = this.strategyName;
|
|
37
|
+
t.scheme(strategyName, (_server, options) => {
|
|
38
|
+
return {
|
|
39
|
+
authenticate: (request, h) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
var _a;
|
|
41
|
+
const settings = options || {};
|
|
42
|
+
const authorization = request.raw.req.headers[this.key.toLowerCase()];
|
|
43
|
+
const authSplit = typeof authorization === 'string' ? authorization.split(/\s+/) : ['', ''];
|
|
44
|
+
const tokenType = authSplit[0];
|
|
45
|
+
let token = authSplit[1];
|
|
46
|
+
if (tokenType.toLowerCase() !== 'basic') {
|
|
47
|
+
token = '';
|
|
48
|
+
return boom_1.default.unauthorized(null, strategyName);
|
|
49
|
+
}
|
|
50
|
+
const [username, password] = Buffer.from(token, 'base64').toString().split(':', 2);
|
|
51
|
+
if (settings.validate) {
|
|
52
|
+
try {
|
|
53
|
+
const result = yield ((_a = settings.validate) === null || _a === void 0 ? void 0 : _a.call(settings, request, username, password, h));
|
|
54
|
+
if (result && 'isAuth' in result) {
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
if (result && 'isBoom' in result) {
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
if (result) {
|
|
61
|
+
const { isValid, credentials, artifacts, message } = result;
|
|
62
|
+
if (isValid && credentials) {
|
|
63
|
+
return h.authenticated({ credentials, artifacts });
|
|
64
|
+
}
|
|
65
|
+
if (message) {
|
|
66
|
+
return h.unauthenticated(boom_1.default.unauthorized(message, 'Basic'), {
|
|
67
|
+
credentials: credentials || {},
|
|
68
|
+
artifacts
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
return boom_1.default.internal(err instanceof Error ? err : `${err}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return boom_1.default.unauthorized(null, 'Basic');
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
t.strategy(strategyName, strategyName, this.auth);
|
|
82
|
+
}
|
|
83
|
+
toString() {
|
|
84
|
+
return this.getStrategyName();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.BasicAuthDesign = BasicAuthDesign;
|
|
88
|
+
//# sourceMappingURL=basic-auth-design.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-auth-design.js","sourceRoot":"","sources":["../../../../src/services/plugins/auth-designs/basic-auth-design.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import Boom from '@hapi/boom';
|
|
2
|
+
import { Auth, AuthCredentials, ReqRef, ReqRefDefaults, Request, ResponseToolkit } from '@hapi/hapi';
|
|
3
|
+
import { BearerUtil } from '@novice1/api-doc-generator';
|
|
4
|
+
import { AuthDesign, KaapiTools } from '../plugin';
|
|
5
|
+
export type BearerAuthOptions<Refs extends ReqRef = ReqRefDefaults> = {
|
|
6
|
+
validate?(request: Request<Refs>, token: string, h: ResponseToolkit<Refs>): Promise<{
|
|
7
|
+
isValid?: boolean;
|
|
8
|
+
artifacts?: unknown;
|
|
9
|
+
credentials?: AuthCredentials;
|
|
10
|
+
message?: string;
|
|
11
|
+
} | Auth | Boom.Boom>;
|
|
12
|
+
};
|
|
13
|
+
export interface BearerAuthArg {
|
|
14
|
+
auth?: BearerAuthOptions;
|
|
15
|
+
strategyName?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class BearerAuthDesign extends AuthDesign {
|
|
18
|
+
readonly key = "Authorization";
|
|
19
|
+
protected strategyName: string;
|
|
20
|
+
protected description?: string;
|
|
21
|
+
protected auth: BearerAuthOptions;
|
|
22
|
+
constructor(arg?: BearerAuthArg);
|
|
23
|
+
setDescription(description: string): this;
|
|
24
|
+
getStrategyName(): string;
|
|
25
|
+
getDescription(): string | undefined;
|
|
26
|
+
docs(): BearerUtil;
|
|
27
|
+
integrateStrategy(t: KaapiTools): void | Promise<void>;
|
|
28
|
+
toString(): string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// BearerAuthDesign
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BearerAuthDesign = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const boom_1 = tslib_1.__importDefault(require("@hapi/boom"));
|
|
7
|
+
const api_doc_generator_1 = require("@novice1/api-doc-generator");
|
|
8
|
+
const plugin_1 = require("../plugin");
|
|
9
|
+
class BearerAuthDesign extends plugin_1.AuthDesign {
|
|
10
|
+
constructor(arg) {
|
|
11
|
+
super();
|
|
12
|
+
this.key = 'Authorization';
|
|
13
|
+
this.strategyName = 'bearer-auth-design';
|
|
14
|
+
if (arg === null || arg === void 0 ? void 0 : arg.strategyName)
|
|
15
|
+
this.strategyName = arg.strategyName;
|
|
16
|
+
this.auth = (arg === null || arg === void 0 ? void 0 : arg.auth) ? Object.assign({}, arg.auth) : {};
|
|
17
|
+
}
|
|
18
|
+
setDescription(description) {
|
|
19
|
+
this.description = description;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
getStrategyName() {
|
|
23
|
+
return this.strategyName;
|
|
24
|
+
}
|
|
25
|
+
getDescription() {
|
|
26
|
+
return this.description;
|
|
27
|
+
}
|
|
28
|
+
docs() {
|
|
29
|
+
const docs = new api_doc_generator_1.BearerUtil(this.strategyName);
|
|
30
|
+
if (this.description) {
|
|
31
|
+
docs.setDescription(this.description);
|
|
32
|
+
}
|
|
33
|
+
return docs;
|
|
34
|
+
}
|
|
35
|
+
integrateStrategy(t) {
|
|
36
|
+
const strategyName = this.strategyName;
|
|
37
|
+
t.scheme(strategyName, (_server, options) => {
|
|
38
|
+
return {
|
|
39
|
+
authenticate: (request, h) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
var _a;
|
|
41
|
+
const settings = options || {};
|
|
42
|
+
const authorization = request.raw.req.headers[this.key.toLowerCase()];
|
|
43
|
+
const authSplit = typeof authorization === 'string' ? authorization.split(/\s+/) : ['', ''];
|
|
44
|
+
const tokenType = authSplit[0];
|
|
45
|
+
let token = authSplit[1];
|
|
46
|
+
if (tokenType.toLowerCase() !== 'bearer') {
|
|
47
|
+
token = '';
|
|
48
|
+
return boom_1.default.unauthorized(null, strategyName);
|
|
49
|
+
}
|
|
50
|
+
if (settings.validate) {
|
|
51
|
+
try {
|
|
52
|
+
const result = yield ((_a = settings.validate) === null || _a === void 0 ? void 0 : _a.call(settings, request, token, h));
|
|
53
|
+
if (result && 'isAuth' in result) {
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
if (result && 'isBoom' in result) {
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
if (result) {
|
|
60
|
+
const { isValid, credentials, artifacts, message } = result;
|
|
61
|
+
if (isValid && credentials) {
|
|
62
|
+
return h.authenticated({ credentials, artifacts });
|
|
63
|
+
}
|
|
64
|
+
if (message) {
|
|
65
|
+
return h.unauthenticated(boom_1.default.unauthorized(message, 'Bearer'), {
|
|
66
|
+
credentials: credentials || {},
|
|
67
|
+
artifacts
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return boom_1.default.internal(err instanceof Error ? err : `${err}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return boom_1.default.unauthorized(null, 'Bearer');
|
|
77
|
+
}),
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
t.strategy(strategyName, strategyName, this.auth);
|
|
81
|
+
}
|
|
82
|
+
toString() {
|
|
83
|
+
return this.getStrategyName();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.BearerAuthDesign = BearerAuthDesign;
|
|
87
|
+
//# sourceMappingURL=bearer-auth-design.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer-auth-design.js","sourceRoot":"","sources":["../../../../src/services/plugins/auth-designs/bearer-auth-design.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { HandlerDecorations, InternalRouteOptionType, Lifecycle, MergeType, ReqRef, ReqRefDefaults, RouteOptionTypes, Server, ServerAuthScheme } from '@hapi/hapi';
|
|
2
|
+
import { ILogger } from '../log';
|
|
3
|
+
import { KaapiServerRoute } from '@kaapi/server';
|
|
4
|
+
import { KaapiOpenAPI, KaapiPostman } from '../docs/generators';
|
|
5
|
+
import { BaseAuthUtil } from '@novice1/api-doc-generator/lib/utils/auth/baseAuthUtils';
|
|
6
|
+
import { KaapiGroupAuthUtil } from '../docs/utils';
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* Set of tools
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* log
|
|
13
|
+
* openapi
|
|
14
|
+
* postman
|
|
15
|
+
* server
|
|
16
|
+
* route(...)
|
|
17
|
+
* scheme(...)
|
|
18
|
+
* strategy(...)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export interface KaapiTools {
|
|
22
|
+
readonly log: ILogger;
|
|
23
|
+
route<Refs extends ReqRef = ReqRefDefaults>(serverRoute: KaapiServerRoute<Refs>, handler?: HandlerDecorations | Lifecycle.Method<Refs, Lifecycle.ReturnValue<Refs>>): this;
|
|
24
|
+
openapi?: KaapiOpenAPI;
|
|
25
|
+
postman?: KaapiPostman;
|
|
26
|
+
scheme<Refs extends ReqRef = ReqRefDefaults, Options extends object = {}>(name: string, scheme: ServerAuthScheme<Options, Refs>): void;
|
|
27
|
+
strategy(name: MergeType<InternalRouteOptionType, RouteOptionTypes>['Strategy'], scheme: string, options?: object): void;
|
|
28
|
+
server: Server;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Interface to extend kaapi app functionalities.
|
|
32
|
+
* ```ts
|
|
33
|
+
* const app = new Kaapi({
|
|
34
|
+
* extend: [plugin]
|
|
35
|
+
* })
|
|
36
|
+
* // or
|
|
37
|
+
* await app.extend(plugin)
|
|
38
|
+
* // or
|
|
39
|
+
* await app.extend([plugin1, plugin2])
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export interface KaapiPlugin {
|
|
43
|
+
integrate(t: KaapiTools): void | Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* AuthDesign plugin
|
|
47
|
+
*/
|
|
48
|
+
export declare abstract class AuthDesign implements KaapiPlugin {
|
|
49
|
+
integrate(t: KaapiTools): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Whatever needs to be done to complete the integration.
|
|
52
|
+
* (e.g.: register a route, ...)
|
|
53
|
+
*/
|
|
54
|
+
integrateHook(_t: KaapiTools): void | Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the schema used for the documentation
|
|
57
|
+
*/
|
|
58
|
+
abstract docs(): BaseAuthUtil | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Where authentication schemes and strategies should be registered.
|
|
61
|
+
*/
|
|
62
|
+
abstract integrateStrategy(t: KaapiTools): void;
|
|
63
|
+
/**
|
|
64
|
+
* The name of the strategy, for info purpose
|
|
65
|
+
*/
|
|
66
|
+
abstract getStrategyName(): string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* An auth design that groups multiple auth designs.
|
|
70
|
+
*
|
|
71
|
+
* Usefull to regroup the auth schemes in the documentation and register the strategies in parallel.
|
|
72
|
+
* ```ts
|
|
73
|
+
* const authdesigns = new GroupAuthDesign([
|
|
74
|
+
* authdesign1,
|
|
75
|
+
* authdesign2
|
|
76
|
+
* ])
|
|
77
|
+
* app.extend(authdesigns)
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare class GroupAuthDesign extends AuthDesign {
|
|
81
|
+
protected designs: AuthDesign[];
|
|
82
|
+
constructor(designs: AuthDesign[]);
|
|
83
|
+
docs(): KaapiGroupAuthUtil;
|
|
84
|
+
integrateStrategy(t: KaapiTools): void;
|
|
85
|
+
integrateHook(t: KaapiTools): Promise<void>;
|
|
86
|
+
getStrategyName(): string;
|
|
87
|
+
getStrategies(): string[];
|
|
88
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GroupAuthDesign = exports.AuthDesign = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const api_doc_generator_1 = require("@novice1/api-doc-generator");
|
|
6
|
+
const utils_1 = require("../docs/utils");
|
|
7
|
+
/**
|
|
8
|
+
* AuthDesign plugin
|
|
9
|
+
*/
|
|
10
|
+
class AuthDesign {
|
|
11
|
+
integrate(t) {
|
|
12
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
try {
|
|
15
|
+
this.integrateStrategy(t);
|
|
16
|
+
t.log.debug(`Auth Design "${this.constructor.name}" set strategy (integrateStrategy).`);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
t.log.error(`Auth Design "${this.constructor.name}" failed to integrate auth strategy: ${err}`);
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
const securityScheme = this.docs();
|
|
23
|
+
if (securityScheme) {
|
|
24
|
+
if (securityScheme instanceof api_doc_generator_1.OAuth2Util && !securityScheme.getHost() && ((_a = t.postman) === null || _a === void 0 ? void 0 : _a.getHost().length)) {
|
|
25
|
+
securityScheme.setHost(t.postman.getHost()[0]);
|
|
26
|
+
}
|
|
27
|
+
(_b = t.openapi) === null || _b === void 0 ? void 0 : _b.addSecurityScheme(securityScheme).setDefaultSecurity(securityScheme);
|
|
28
|
+
(_c = t.postman) === null || _c === void 0 ? void 0 : _c.setDefaultSecurity(securityScheme);
|
|
29
|
+
t.log.debug(`Auth Design "${this.constructor.name}" set security scheme (docs).`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
t.log.warn(`Auth Design "${this.constructor.name}" did not provide a security scheme (docs()).`);
|
|
33
|
+
}
|
|
34
|
+
yield this.integrateHook(t);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Whatever needs to be done to complete the integration.
|
|
39
|
+
* (e.g.: register a route, ...)
|
|
40
|
+
*/
|
|
41
|
+
integrateHook(_t) {
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.AuthDesign = AuthDesign;
|
|
45
|
+
/**
|
|
46
|
+
* An auth design that groups multiple auth designs.
|
|
47
|
+
*
|
|
48
|
+
* Usefull to regroup the auth schemes in the documentation and register the strategies in parallel.
|
|
49
|
+
* ```ts
|
|
50
|
+
* const authdesigns = new GroupAuthDesign([
|
|
51
|
+
* authdesign1,
|
|
52
|
+
* authdesign2
|
|
53
|
+
* ])
|
|
54
|
+
* app.extend(authdesigns)
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
class GroupAuthDesign extends AuthDesign {
|
|
58
|
+
constructor(designs) {
|
|
59
|
+
super();
|
|
60
|
+
this.designs = designs;
|
|
61
|
+
}
|
|
62
|
+
docs() {
|
|
63
|
+
return new utils_1.KaapiGroupAuthUtil(this.designs
|
|
64
|
+
.map(d => d.docs())
|
|
65
|
+
.filter(d => typeof d != 'undefined'));
|
|
66
|
+
}
|
|
67
|
+
integrateStrategy(t) {
|
|
68
|
+
for (const d of this.designs) {
|
|
69
|
+
d.integrateStrategy(t);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
integrateHook(t) {
|
|
73
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
yield Promise.all(this.designs
|
|
75
|
+
.map(d => d.integrateHook(t)));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
getStrategyName() {
|
|
79
|
+
return this.getStrategies()[0] || '';
|
|
80
|
+
}
|
|
81
|
+
getStrategies() {
|
|
82
|
+
return this.designs.map(d => d.getStrategyName()).filter(n => n);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.GroupAuthDesign = GroupAuthDesign;
|
|
86
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/services/plugins/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaapi/kaapi",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "TypeScript-based framework",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@hapi/boom": "^10.0.1",
|
|
20
|
-
"@hapi/hapi": "^21.4.
|
|
20
|
+
"@hapi/hapi": "^21.4.3",
|
|
21
21
|
"@hapi/hoek": "^11.0.7",
|
|
22
22
|
"@hapi/inert": "^7.1.0",
|
|
23
23
|
"@novice1/api-doc-generator": "^1.0.2",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"swagger-ui-dist": "^5.27.1",
|
|
27
27
|
"tslib": "^2.8.1",
|
|
28
28
|
"winston": "^3.17.0",
|
|
29
|
-
"@kaapi/server": "^0.0.
|
|
29
|
+
"@kaapi/server": "^0.0.14"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"lint": "eslint .",
|