@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.
Files changed (45) hide show
  1. package/README.md +4 -0
  2. package/lib/abstract-app.d.ts +23 -0
  3. package/lib/abstract-app.js +23 -0
  4. package/lib/abstract-app.js.map +1 -0
  5. package/lib/app.d.ts +17 -11
  6. package/lib/app.js +41 -44
  7. package/lib/app.js.map +1 -1
  8. package/lib/base-app.d.ts +23 -0
  9. package/lib/base-app.js +23 -0
  10. package/lib/base-app.js.map +1 -0
  11. package/lib/baseApp.js +1 -1
  12. package/lib/baseApp.js.map +1 -1
  13. package/lib/index.d.ts +6 -2
  14. package/lib/index.js +6 -2
  15. package/lib/index.js.map +1 -1
  16. package/lib/services/docs/docs.d.ts +4 -4
  17. package/lib/services/docs/docs.js +2 -2
  18. package/lib/services/docs/docs.js.map +1 -1
  19. package/lib/services/docs/generators.js +14 -3
  20. package/lib/services/docs/generators.js.map +1 -1
  21. package/lib/services/docs/swagger-ui-generator.d.ts +19 -0
  22. package/lib/services/docs/swagger-ui-generator.js +245 -0
  23. package/lib/services/docs/swagger-ui-generator.js.map +1 -0
  24. package/lib/services/docs/utils.d.ts +15 -0
  25. package/lib/services/docs/utils.js +41 -0
  26. package/lib/services/docs/utils.js.map +1 -0
  27. package/lib/services/log.js +1 -1
  28. package/lib/services/log.js.map +1 -1
  29. package/lib/services/plugin.d.ts +27 -1
  30. package/lib/services/plugin.js +55 -2
  31. package/lib/services/plugin.js.map +1 -1
  32. package/lib/services/plugins/auth-designs/api-key-auth-design.d.ts +42 -0
  33. package/lib/services/plugins/auth-designs/api-key-auth-design.js +116 -0
  34. package/lib/services/plugins/auth-designs/api-key-auth-design.js.map +1 -0
  35. package/lib/services/plugins/auth-designs/basic-auth-design.d.ts +29 -0
  36. package/lib/services/plugins/auth-designs/basic-auth-design.js +88 -0
  37. package/lib/services/plugins/auth-designs/basic-auth-design.js.map +1 -0
  38. package/lib/services/plugins/auth-designs/bearer-auth-design.d.ts +29 -0
  39. package/lib/services/plugins/auth-designs/bearer-auth-design.js +87 -0
  40. package/lib/services/plugins/auth-designs/bearer-auth-design.js.map +1 -0
  41. package/lib/services/plugins/plugin.d.ts +88 -0
  42. package/lib/services/plugins/plugin.js +86 -0
  43. package/lib/services/plugins/plugin.js.map +1 -0
  44. package/package.json +3 -3
  45. 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.12",
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.2",
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.12"
29
+ "@kaapi/server": "^0.0.14"
30
30
  },
31
31
  "scripts": {
32
32
  "lint": "eslint .",
@@ -1,8 +1,11 @@
1
+ import '@hapi/hapi'
2
+
1
3
  declare module '@hapi/hapi' {
2
4
  interface PluginSpecificConfiguration {
3
5
  kaapi?: {
4
6
  docs?: {
5
7
  disabled?: boolean;
8
+ story?: string;
6
9
  } | false
7
10
  };
8
11
  }