@grandlinex/kernel 1.3.7 → 1.3.9
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/dist/cjs/Kernel.d.ts +3 -5
- package/dist/cjs/Kernel.js +3 -5
- package/dist/cjs/classes/BaseAction.js +16 -7
- package/dist/cjs/classes/BaseKernelMetric.d.ts +14 -0
- package/dist/cjs/classes/BaseKernelMetric.js +6 -0
- package/dist/cjs/classes/index.d.ts +1 -0
- package/dist/cjs/classes/index.js +1 -0
- package/dist/cjs/lib/index.d.ts +2 -4
- package/dist/mjs/Kernel.d.ts +3 -5
- package/dist/mjs/Kernel.js +3 -5
- package/dist/mjs/classes/BaseAction.js +17 -8
- package/dist/mjs/classes/BaseKernelMetric.d.ts +14 -0
- package/dist/mjs/classes/BaseKernelMetric.js +2 -0
- package/dist/mjs/classes/index.d.ts +1 -0
- package/dist/mjs/classes/index.js +1 -0
- package/dist/mjs/lib/index.d.ts +2 -4
- package/package.json +2 -2
package/dist/cjs/Kernel.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { CoreKernel, CoreLogger } from '@grandlinex/core';
|
|
2
2
|
import { ICClient, IKernel } from './lib/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { BaseKernelMetric } from './classes/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* @class Kernel
|
|
6
6
|
*/
|
|
7
7
|
export default class Kernel extends CoreKernel<ICClient> implements IKernel {
|
|
8
8
|
private expressPort;
|
|
9
9
|
private readonly apiVersion;
|
|
10
|
+
protected metric: BaseKernelMetric<unknown> | null;
|
|
10
11
|
/**
|
|
11
12
|
* Default Constructor
|
|
12
13
|
* @param options App Name
|
|
@@ -24,8 +25,5 @@ export default class Kernel extends CoreKernel<ICClient> implements IKernel {
|
|
|
24
25
|
getAppServerPort(): number;
|
|
25
26
|
setAppServerPort(port: number): void;
|
|
26
27
|
getApiVersion(): number;
|
|
27
|
-
|
|
28
|
-
code: number;
|
|
29
|
-
req: XRequest;
|
|
30
|
-
}): void;
|
|
28
|
+
getMetric(): BaseKernelMetric<unknown> | null;
|
|
31
29
|
}
|
package/dist/cjs/Kernel.js
CHANGED
|
@@ -16,6 +16,7 @@ class Kernel extends core_1.CoreKernel {
|
|
|
16
16
|
*/
|
|
17
17
|
constructor(options) {
|
|
18
18
|
super({ ...options });
|
|
19
|
+
this.metric = null;
|
|
19
20
|
this.apiVersion = options.apiVersion ?? 1;
|
|
20
21
|
this.setBaseModule(new KernelModule_js_1.default(this));
|
|
21
22
|
if (options.portOverride) {
|
|
@@ -39,11 +40,8 @@ class Kernel extends core_1.CoreKernel {
|
|
|
39
40
|
getApiVersion() {
|
|
40
41
|
return this.apiVersion;
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (code < 200 || code >= 300) {
|
|
45
|
-
this.debug(data.req.path, data.req.ip, data.code);
|
|
46
|
-
}
|
|
43
|
+
getMetric() {
|
|
44
|
+
return this.metric;
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
47
|
exports.default = Kernel;
|
|
@@ -15,7 +15,7 @@ class BaseAction extends core_1.CoreAction {
|
|
|
15
15
|
static validateSchema(error, inputSchema, key, field, required = true) {
|
|
16
16
|
let schema;
|
|
17
17
|
if ((0, core_1.instanceOfEntity)(inputSchema)) {
|
|
18
|
-
schema = swagger_mate_1.
|
|
18
|
+
schema = swagger_mate_1.ESchemaEditor.schemaFromEntity(inputSchema);
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
21
21
|
schema = inputSchema;
|
|
@@ -118,6 +118,21 @@ class BaseAction extends core_1.CoreAction {
|
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
async secureHandler(req, res, next) {
|
|
121
|
+
const metric = this.getKernel().getMetric();
|
|
122
|
+
if (metric) {
|
|
123
|
+
const end = metric.start({
|
|
124
|
+
req,
|
|
125
|
+
action: this,
|
|
126
|
+
});
|
|
127
|
+
if (end) {
|
|
128
|
+
res.on('finish', () => metric.end({
|
|
129
|
+
started: end,
|
|
130
|
+
req,
|
|
131
|
+
res,
|
|
132
|
+
action: this,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
121
136
|
const xPath = {};
|
|
122
137
|
Object.entries(req.params).forEach(([k, v]) => {
|
|
123
138
|
if (typeof v === 'string') {
|
|
@@ -132,12 +147,6 @@ class BaseAction extends core_1.CoreAction {
|
|
|
132
147
|
});
|
|
133
148
|
const extension = this.initExtension(res);
|
|
134
149
|
const auth = extension.timing.start('auth');
|
|
135
|
-
res.on('finish', () => {
|
|
136
|
-
this.getKernel().responseCodeFunction({
|
|
137
|
-
code: res.statusCode,
|
|
138
|
-
req,
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
150
|
const cc = this.getKernel().getCryptoClient();
|
|
142
151
|
if (!cc) {
|
|
143
152
|
res.status(504).send('internal server error');
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { XRequest, XResponse } from '../lib/express.js';
|
|
2
|
+
import BaseAction from './BaseAction.js';
|
|
3
|
+
export type MetricEventStart = {
|
|
4
|
+
req: XRequest;
|
|
5
|
+
action: BaseAction;
|
|
6
|
+
};
|
|
7
|
+
export type MetricEventEnd<T> = MetricEventStart & {
|
|
8
|
+
started: T;
|
|
9
|
+
res: XResponse;
|
|
10
|
+
};
|
|
11
|
+
export declare abstract class BaseKernelMetric<T> {
|
|
12
|
+
abstract start(event: MetricEventStart): T | null;
|
|
13
|
+
abstract end(event: MetricEventEnd<T>): void;
|
|
14
|
+
}
|
|
@@ -5,6 +5,7 @@ import BaseKernelModule from './BaseKernelModule.js';
|
|
|
5
5
|
import BaseApiAction from './BaseApiAction.js';
|
|
6
6
|
import RouteApiAction from './RouteApiAction.js';
|
|
7
7
|
import BaseAuthProvider from './BaseAuthProvider.js';
|
|
8
|
+
export * from './BaseKernelMetric.js';
|
|
8
9
|
export * from './BaseAction.js';
|
|
9
10
|
export * from './BaseUserAgent.js';
|
|
10
11
|
export * from './BaseAuthProvider.js';
|
|
@@ -60,6 +60,7 @@ const RouteApiAction_js_1 = __importDefault(require("./RouteApiAction.js"));
|
|
|
60
60
|
exports.RouteApiAction = RouteApiAction_js_1.default;
|
|
61
61
|
const BaseAuthProvider_js_1 = __importDefault(require("./BaseAuthProvider.js"));
|
|
62
62
|
exports.BaseAuthProvider = BaseAuthProvider_js_1.default;
|
|
63
|
+
__exportStar(require("./BaseKernelMetric.js"), exports);
|
|
63
64
|
__exportStar(require("./BaseAction.js"), exports);
|
|
64
65
|
__exportStar(require("./BaseUserAgent.js"), exports);
|
|
65
66
|
__exportStar(require("./BaseAuthProvider.js"), exports);
|
package/dist/cjs/lib/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import express from 'express';
|
|
|
3
3
|
import * as jwt from 'jsonwebtoken';
|
|
4
4
|
import { IAuthProvider, JwtExtend, JwtToken } from '../classes/index.js';
|
|
5
5
|
import { XActionEvent, XRequest } from './express.js';
|
|
6
|
+
import { BaseKernelMetric } from '../classes/BaseKernelMetric.js';
|
|
6
7
|
/**
|
|
7
8
|
* Represents a request for validating a JWT token with optional constraints.
|
|
8
9
|
*
|
|
@@ -83,10 +84,7 @@ export interface IKernel<T extends JwtExtend = JwtExtend> extends ICoreKernel<IC
|
|
|
83
84
|
getAppServerPort(): number;
|
|
84
85
|
getApiVersion(): number;
|
|
85
86
|
setAppServerPort(port: number): void;
|
|
86
|
-
|
|
87
|
-
code: number;
|
|
88
|
-
req: XRequest;
|
|
89
|
-
}): void;
|
|
87
|
+
getMetric(): BaseKernelMetric<any> | null;
|
|
90
88
|
}
|
|
91
89
|
export type IBaseKernelModule<K extends IKernel = IKernel, T extends IDataBase<any, any> | null = any, P extends IBaseClient | null = any, C extends IBaseCache | null = any, E extends IBasePresenter | null = any> = ICoreKernelModule<K, T, P, C, E>;
|
|
92
90
|
export type IBasePresenter = ICorePresenter<express.Express>;
|
package/dist/mjs/Kernel.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { CoreKernel, CoreLogger } from '@grandlinex/core';
|
|
2
2
|
import { ICClient, IKernel } from './lib/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { BaseKernelMetric } from './classes/index.js';
|
|
4
4
|
/**
|
|
5
5
|
* @class Kernel
|
|
6
6
|
*/
|
|
7
7
|
export default class Kernel extends CoreKernel<ICClient> implements IKernel {
|
|
8
8
|
private expressPort;
|
|
9
9
|
private readonly apiVersion;
|
|
10
|
+
protected metric: BaseKernelMetric<unknown> | null;
|
|
10
11
|
/**
|
|
11
12
|
* Default Constructor
|
|
12
13
|
* @param options App Name
|
|
@@ -24,8 +25,5 @@ export default class Kernel extends CoreKernel<ICClient> implements IKernel {
|
|
|
24
25
|
getAppServerPort(): number;
|
|
25
26
|
setAppServerPort(port: number): void;
|
|
26
27
|
getApiVersion(): number;
|
|
27
|
-
|
|
28
|
-
code: number;
|
|
29
|
-
req: XRequest;
|
|
30
|
-
}): void;
|
|
28
|
+
getMetric(): BaseKernelMetric<unknown> | null;
|
|
31
29
|
}
|
package/dist/mjs/Kernel.js
CHANGED
|
@@ -11,6 +11,7 @@ export default class Kernel extends CoreKernel {
|
|
|
11
11
|
*/
|
|
12
12
|
constructor(options) {
|
|
13
13
|
super({ ...options });
|
|
14
|
+
this.metric = null;
|
|
14
15
|
this.apiVersion = options.apiVersion ?? 1;
|
|
15
16
|
this.setBaseModule(new KernelModule(this));
|
|
16
17
|
if (options.portOverride) {
|
|
@@ -34,10 +35,7 @@ export default class Kernel extends CoreKernel {
|
|
|
34
35
|
getApiVersion() {
|
|
35
36
|
return this.apiVersion;
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (code < 200 || code >= 300) {
|
|
40
|
-
this.debug(data.req.path, data.req.ip, data.code);
|
|
41
|
-
}
|
|
38
|
+
getMetric() {
|
|
39
|
+
return this.metric;
|
|
42
40
|
}
|
|
43
41
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CoreAction, instanceOfEntity, } from '@grandlinex/core';
|
|
2
|
-
import { ActionMode, isErrorType, isSwaggerRef,
|
|
2
|
+
import { ActionMode, ESchemaEditor, isErrorType, isSwaggerRef, } from '@grandlinex/swagger-mate';
|
|
3
3
|
import { ExpressServerTiming } from './timing/index.js';
|
|
4
4
|
import { BaseUserAgent } from './BaseUserAgent.js';
|
|
5
5
|
export default class BaseAction extends CoreAction {
|
|
@@ -13,7 +13,7 @@ export default class BaseAction extends CoreAction {
|
|
|
13
13
|
static validateSchema(error, inputSchema, key, field, required = true) {
|
|
14
14
|
let schema;
|
|
15
15
|
if (instanceOfEntity(inputSchema)) {
|
|
16
|
-
schema =
|
|
16
|
+
schema = ESchemaEditor.schemaFromEntity(inputSchema);
|
|
17
17
|
}
|
|
18
18
|
else {
|
|
19
19
|
schema = inputSchema;
|
|
@@ -116,6 +116,21 @@ export default class BaseAction extends CoreAction {
|
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
async secureHandler(req, res, next) {
|
|
119
|
+
const metric = this.getKernel().getMetric();
|
|
120
|
+
if (metric) {
|
|
121
|
+
const end = metric.start({
|
|
122
|
+
req,
|
|
123
|
+
action: this,
|
|
124
|
+
});
|
|
125
|
+
if (end) {
|
|
126
|
+
res.on('finish', () => metric.end({
|
|
127
|
+
started: end,
|
|
128
|
+
req,
|
|
129
|
+
res,
|
|
130
|
+
action: this,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
119
134
|
const xPath = {};
|
|
120
135
|
Object.entries(req.params).forEach(([k, v]) => {
|
|
121
136
|
if (typeof v === 'string') {
|
|
@@ -130,12 +145,6 @@ export default class BaseAction extends CoreAction {
|
|
|
130
145
|
});
|
|
131
146
|
const extension = this.initExtension(res);
|
|
132
147
|
const auth = extension.timing.start('auth');
|
|
133
|
-
res.on('finish', () => {
|
|
134
|
-
this.getKernel().responseCodeFunction({
|
|
135
|
-
code: res.statusCode,
|
|
136
|
-
req,
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
148
|
const cc = this.getKernel().getCryptoClient();
|
|
140
149
|
if (!cc) {
|
|
141
150
|
res.status(504).send('internal server error');
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { XRequest, XResponse } from '../lib/express.js';
|
|
2
|
+
import BaseAction from './BaseAction.js';
|
|
3
|
+
export type MetricEventStart = {
|
|
4
|
+
req: XRequest;
|
|
5
|
+
action: BaseAction;
|
|
6
|
+
};
|
|
7
|
+
export type MetricEventEnd<T> = MetricEventStart & {
|
|
8
|
+
started: T;
|
|
9
|
+
res: XResponse;
|
|
10
|
+
};
|
|
11
|
+
export declare abstract class BaseKernelMetric<T> {
|
|
12
|
+
abstract start(event: MetricEventStart): T | null;
|
|
13
|
+
abstract end(event: MetricEventEnd<T>): void;
|
|
14
|
+
}
|
|
@@ -5,6 +5,7 @@ import BaseKernelModule from './BaseKernelModule.js';
|
|
|
5
5
|
import BaseApiAction from './BaseApiAction.js';
|
|
6
6
|
import RouteApiAction from './RouteApiAction.js';
|
|
7
7
|
import BaseAuthProvider from './BaseAuthProvider.js';
|
|
8
|
+
export * from './BaseKernelMetric.js';
|
|
8
9
|
export * from './BaseAction.js';
|
|
9
10
|
export * from './BaseUserAgent.js';
|
|
10
11
|
export * from './BaseAuthProvider.js';
|
|
@@ -5,6 +5,7 @@ import BaseKernelModule from './BaseKernelModule.js';
|
|
|
5
5
|
import BaseApiAction from './BaseApiAction.js';
|
|
6
6
|
import RouteApiAction from './RouteApiAction.js';
|
|
7
7
|
import BaseAuthProvider from './BaseAuthProvider.js';
|
|
8
|
+
export * from './BaseKernelMetric.js';
|
|
8
9
|
export * from './BaseAction.js';
|
|
9
10
|
export * from './BaseUserAgent.js';
|
|
10
11
|
export * from './BaseAuthProvider.js';
|
package/dist/mjs/lib/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import express from 'express';
|
|
|
3
3
|
import * as jwt from 'jsonwebtoken';
|
|
4
4
|
import { IAuthProvider, JwtExtend, JwtToken } from '../classes/index.js';
|
|
5
5
|
import { XActionEvent, XRequest } from './express.js';
|
|
6
|
+
import { BaseKernelMetric } from '../classes/BaseKernelMetric.js';
|
|
6
7
|
/**
|
|
7
8
|
* Represents a request for validating a JWT token with optional constraints.
|
|
8
9
|
*
|
|
@@ -83,10 +84,7 @@ export interface IKernel<T extends JwtExtend = JwtExtend> extends ICoreKernel<IC
|
|
|
83
84
|
getAppServerPort(): number;
|
|
84
85
|
getApiVersion(): number;
|
|
85
86
|
setAppServerPort(port: number): void;
|
|
86
|
-
|
|
87
|
-
code: number;
|
|
88
|
-
req: XRequest;
|
|
89
|
-
}): void;
|
|
87
|
+
getMetric(): BaseKernelMetric<any> | null;
|
|
90
88
|
}
|
|
91
89
|
export type IBaseKernelModule<K extends IKernel = IKernel, T extends IDataBase<any, any> | null = any, P extends IBaseClient | null = any, C extends IBaseCache | null = any, E extends IBasePresenter | null = any> = ICoreKernelModule<K, T, P, C, E>;
|
|
92
90
|
export type IBasePresenter = ICorePresenter<express.Express>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grandlinex/kernel",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"description": "GrandLineX is an out-of-the-box server framework on top of ExpressJs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"license": "BSD-3-Clause",
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@grandlinex/core": "1.3.1",
|
|
50
|
-
"@grandlinex/swagger-mate": "1.3.
|
|
50
|
+
"@grandlinex/swagger-mate": "1.3.9",
|
|
51
51
|
"@types/jsonwebtoken": "9.0.10",
|
|
52
52
|
"@types/ms": "2.1.0",
|
|
53
53
|
"body-parser": "2.2.1",
|