evaengine 1.0.14 → 3.0.0
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 +15 -7
- package/bin/engine +2 -31
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +32 -0
- package/dist/bin.js.map +1 -0
- package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
- package/dist/commands/index.js +6 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/interface.d.ts +18 -0
- package/dist/commands/interface.js +40 -0
- package/dist/commands/interface.js.map +1 -0
- package/dist/commands/make_entity.d.ts +47 -0
- package/dist/commands/make_entity.js +410 -0
- package/dist/commands/make_entity.js.map +1 -0
- package/dist/commands/tramp.d.ts +7 -0
- package/dist/commands/tramp.js +29 -0
- package/dist/commands/tramp.js.map +1 -0
- package/dist/config/index.d.ts +92 -0
- package/dist/config/index.js +96 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di.d.ts +131 -0
- package/dist/di.js +197 -0
- package/dist/di.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.js +404 -0
- package/dist/engine.js.map +1 -0
- package/dist/entities/index.d.ts +54 -0
- package/dist/entities/index.js +228 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/exceptions/index.d.ts +153 -0
- package/dist/exceptions/index.js +466 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/auth.d.ts +5 -0
- package/dist/middlewares/auth.js +63 -0
- package/dist/middlewares/auth.js.map +1 -0
- package/dist/middlewares/auth_kong.d.ts +2 -0
- package/dist/middlewares/auth_kong.js +24 -0
- package/dist/middlewares/auth_kong.js.map +1 -0
- package/dist/middlewares/debug.d.ts +3 -0
- package/dist/middlewares/debug.js +50 -0
- package/dist/middlewares/debug.js.map +1 -0
- package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
- package/dist/middlewares/index.js +9 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/providers.d.ts +25 -0
- package/dist/middlewares/providers.js +63 -0
- package/dist/middlewares/providers.js.map +1 -0
- package/dist/middlewares/session.d.ts +5 -0
- package/dist/middlewares/session.js +46 -0
- package/dist/middlewares/session.js.map +1 -0
- package/dist/middlewares/trace.d.ts +52 -0
- package/dist/middlewares/trace.js +225 -0
- package/dist/middlewares/trace.js.map +1 -0
- package/dist/middlewares/validator.d.ts +10 -0
- package/dist/middlewares/validator.js +43 -0
- package/dist/middlewares/validator.js.map +1 -0
- package/dist/middlewares/view_cache.d.ts +14 -0
- package/dist/middlewares/view_cache.js +102 -0
- package/dist/middlewares/view_cache.js.map +1 -0
- package/dist/services/cache.d.ts +68 -0
- package/dist/services/cache.js +206 -0
- package/dist/services/cache.js.map +1 -0
- package/dist/services/config.d.ts +17 -0
- package/dist/services/config.js +67 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/env.d.ts +12 -0
- package/dist/services/env.js +24 -0
- package/dist/services/env.js.map +1 -0
- package/dist/services/event_manager.d.ts +30 -0
- package/dist/services/event_manager.js +74 -0
- package/dist/services/event_manager.js.map +1 -0
- package/dist/services/http_client.d.ts +67 -0
- package/dist/services/http_client.js +61 -0
- package/dist/services/http_client.js.map +1 -0
- package/{src/services/index.js → dist/services/index.d.ts} +1 -15
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -0
- package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
- package/dist/services/interface.js +6 -0
- package/dist/services/interface.js.map +1 -0
- package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
- package/dist/services/joi.js +11 -0
- package/dist/services/joi.js.map +1 -0
- package/dist/services/jwt_token.d.ts +25 -0
- package/dist/services/jwt_token.js +76 -0
- package/dist/services/jwt_token.js.map +1 -0
- package/dist/services/jwt_token_kong.d.ts +26 -0
- package/dist/services/jwt_token_kong.js +64 -0
- package/dist/services/jwt_token_kong.js.map +1 -0
- package/dist/services/logger.d.ts +31 -0
- package/dist/services/logger.js +125 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/namespace.d.ts +62 -0
- package/dist/services/namespace.js +171 -0
- package/dist/services/namespace.js.map +1 -0
- package/dist/services/now.d.ts +15 -0
- package/dist/services/now.js +42 -0
- package/dist/services/now.js.map +1 -0
- package/dist/services/providers.d.ts +55 -0
- package/dist/services/providers.js +134 -0
- package/dist/services/providers.js.map +1 -0
- package/dist/services/redis.d.ts +19 -0
- package/dist/services/redis.js +52 -0
- package/dist/services/redis.js.map +1 -0
- package/dist/services/rest_client.d.ts +49 -0
- package/dist/services/rest_client.js +95 -0
- package/dist/services/rest_client.js.map +1 -0
- package/dist/swagger/index.d.ts +223 -0
- package/dist/swagger/index.js +564 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/types/express.d.ts +14 -0
- package/dist/types/vendor.d.ts +30 -0
- package/dist/utils/api_scaffold.d.ts +74 -0
- package/dist/utils/api_scaffold.js +220 -0
- package/dist/utils/api_scaffold.js.map +1 -0
- package/dist/utils/case_converter.d.ts +7 -0
- package/dist/utils/case_converter.js +29 -0
- package/dist/utils/case_converter.js.map +1 -0
- package/dist/utils/crc32.d.ts +2 -0
- package/dist/utils/crc32.js +43 -0
- package/dist/utils/crc32.js.map +1 -0
- package/dist/utils/cron.d.ts +27 -0
- package/dist/utils/cron.js +186 -0
- package/dist/utils/cron.js.map +1 -0
- package/dist/utils/datetime.d.ts +4 -0
- package/dist/utils/datetime.js +6 -0
- package/dist/utils/datetime.js.map +1 -0
- package/dist/utils/host.d.ts +18 -0
- package/dist/utils/host.js +33 -0
- package/dist/utils/host.js.map +1 -0
- package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jwt.d.ts +16 -0
- package/dist/utils/jwt.js +93 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/pagination.d.ts +150 -0
- package/dist/utils/pagination.js +242 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/random.d.ts +3 -0
- package/dist/utils/random.js +18 -0
- package/dist/utils/random.js.map +1 -0
- package/dist/utils/request_client.d.ts +33 -0
- package/dist/utils/request_client.js +153 -0
- package/dist/utils/request_client.js.map +1 -0
- package/dist/utils/smart_query.d.ts +144 -0
- package/dist/utils/smart_query.js +310 -0
- package/dist/utils/smart_query.js.map +1 -0
- package/dist/utils/test.d.ts +14 -0
- package/dist/utils/test.js +37 -0
- package/dist/utils/test.js.map +1 -0
- package/dist/utils/wrapper.d.ts +3 -0
- package/dist/utils/wrapper.js +5 -0
- package/dist/utils/wrapper.js.map +1 -0
- package/package.json +22 -15
- package/index.js +0 -2
- package/src/commands/interface.js +0 -45
- package/src/commands/make_entity.js +0 -490
- package/src/commands/tramp.js +0 -34
- package/src/config/index.js +0 -95
- package/src/di.js +0 -96
- package/src/engine.js +0 -556
- package/src/entities/index.js +0 -272
- package/src/exceptions/index.js +0 -501
- package/src/index.js +0 -55
- package/src/middlewares/auth.js +0 -67
- package/src/middlewares/auth_kong.js +0 -28
- package/src/middlewares/debug.js +0 -88
- package/src/middlewares/providers.js +0 -73
- package/src/middlewares/session.js +0 -63
- package/src/middlewares/trace.js +0 -254
- package/src/middlewares/validator.js +0 -50
- package/src/middlewares/view_cache.js +0 -127
- package/src/services/cache.js +0 -223
- package/src/services/config.js +0 -115
- package/src/services/env.js +0 -28
- package/src/services/event_manager.js +0 -84
- package/src/services/http_client.js +0 -69
- package/src/services/jwt_token.js +0 -89
- package/src/services/jwt_token_kong.js +0 -75
- package/src/services/logger.js +0 -150
- package/src/services/namespace.js +0 -176
- package/src/services/now.js +0 -49
- package/src/services/providers.js +0 -158
- package/src/services/redis.js +0 -63
- package/src/services/rest_client.js +0 -112
- package/src/swagger/index.js +0 -665
- package/src/utils/api_scaffold.js +0 -240
- package/src/utils/case_converter.js +0 -33
- package/src/utils/crc32.js +0 -44
- package/src/utils/cron.js +0 -208
- package/src/utils/datetime.js +0 -13
- package/src/utils/host.js +0 -39
- package/src/utils/pagination.js +0 -260
- package/src/utils/random.js +0 -23
- package/src/utils/request_client.js +0 -179
- package/src/utils/smart_query.js +0 -352
- package/src/utils/test.js +0 -48
- package/src/utils/wrapper.js +0 -8
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import Config from './config.js';
|
|
2
|
+
import Logger from './logger.js';
|
|
3
|
+
import { createRequestClient } from '../utils/request_client.js';
|
|
4
|
+
import ServiceInterface from './interface.js';
|
|
5
|
+
interface RequestParams {
|
|
6
|
+
url?: string;
|
|
7
|
+
uri?: string;
|
|
8
|
+
headers?: Record<string, unknown>;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
interface RequestDump {
|
|
12
|
+
method: string;
|
|
13
|
+
uri?: {
|
|
14
|
+
protocol: string;
|
|
15
|
+
href: string;
|
|
16
|
+
} | null;
|
|
17
|
+
headers: Record<string, unknown>;
|
|
18
|
+
req?: object;
|
|
19
|
+
_json?: boolean;
|
|
20
|
+
formData?: Record<string, unknown> | null;
|
|
21
|
+
body?: unknown;
|
|
22
|
+
form?: (data: unknown) => {
|
|
23
|
+
body: unknown;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
interface ResponseDump {
|
|
27
|
+
statusCode: number;
|
|
28
|
+
statusMessage: string;
|
|
29
|
+
headers: Record<string, unknown>;
|
|
30
|
+
body: unknown;
|
|
31
|
+
}
|
|
32
|
+
declare class HttpClient extends ServiceInterface {
|
|
33
|
+
config: object;
|
|
34
|
+
client: ReturnType<typeof createRequestClient>;
|
|
35
|
+
static dependencies: (typeof Config | typeof Logger)[];
|
|
36
|
+
constructor(config: Config, logger: Logger);
|
|
37
|
+
getProto(): (params?: {
|
|
38
|
+
url?: string;
|
|
39
|
+
method?: string;
|
|
40
|
+
headers?: Record<string, unknown>;
|
|
41
|
+
body?: unknown;
|
|
42
|
+
json?: unknown;
|
|
43
|
+
qs?: Record<string, unknown> | string;
|
|
44
|
+
form?: Record<string, unknown>;
|
|
45
|
+
formData?: Record<string, unknown>;
|
|
46
|
+
simple?: boolean;
|
|
47
|
+
resolveWithFullResponse?: boolean;
|
|
48
|
+
timeout?: number;
|
|
49
|
+
}) => Promise<unknown>;
|
|
50
|
+
getInstance(): (params?: {
|
|
51
|
+
url?: string;
|
|
52
|
+
method?: string;
|
|
53
|
+
headers?: Record<string, unknown>;
|
|
54
|
+
body?: unknown;
|
|
55
|
+
json?: unknown;
|
|
56
|
+
qs?: Record<string, unknown> | string;
|
|
57
|
+
form?: Record<string, unknown>;
|
|
58
|
+
formData?: Record<string, unknown>;
|
|
59
|
+
simple?: boolean;
|
|
60
|
+
resolveWithFullResponse?: boolean;
|
|
61
|
+
timeout?: number;
|
|
62
|
+
}) => Promise<unknown>;
|
|
63
|
+
request(params: RequestParams): Promise<unknown>;
|
|
64
|
+
dumpRequest(req: RequestDump, asString?: boolean): object | string;
|
|
65
|
+
dumpResponse(res: ResponseDump, asString?: boolean): object | string;
|
|
66
|
+
}
|
|
67
|
+
export default HttpClient;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import Config from "./config.js";
|
|
2
|
+
import Logger from "./logger.js";
|
|
3
|
+
import { createRequestClient } from "../utils/request_client.js";
|
|
4
|
+
import { HttpRequestLogicException, HttpRequestIOException } from "../exceptions/index.js";
|
|
5
|
+
import ServiceInterface from "./interface.js";
|
|
6
|
+
class HttpClient extends ServiceInterface {
|
|
7
|
+
config;
|
|
8
|
+
client;
|
|
9
|
+
static dependencies = [Config, Logger];
|
|
10
|
+
constructor(config, logger) {
|
|
11
|
+
super();
|
|
12
|
+
this.config = config.get();
|
|
13
|
+
this.client = createRequestClient(logger);
|
|
14
|
+
}
|
|
15
|
+
getProto() {
|
|
16
|
+
return this.client;
|
|
17
|
+
}
|
|
18
|
+
getInstance() {
|
|
19
|
+
return this.client;
|
|
20
|
+
}
|
|
21
|
+
async request(params) {
|
|
22
|
+
try {
|
|
23
|
+
return await this.client(params);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const { statusCode } = e;
|
|
27
|
+
if (statusCode && statusCode >= 400 && statusCode < 500) {
|
|
28
|
+
throw new HttpRequestLogicException(e);
|
|
29
|
+
}
|
|
30
|
+
throw new HttpRequestIOException(e);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
dumpRequest(req, asString = false) {
|
|
34
|
+
const getBody = (r) => {
|
|
35
|
+
if (r._json) {
|
|
36
|
+
return r.body;
|
|
37
|
+
}
|
|
38
|
+
return r.form(r.formData).body;
|
|
39
|
+
};
|
|
40
|
+
const dump = {
|
|
41
|
+
method: req.method,
|
|
42
|
+
protocol: req.uri && req.uri.protocol === 'https:' ? 'https' : 'http',
|
|
43
|
+
url: req.uri ? req.uri.href : null,
|
|
44
|
+
headers: req.headers,
|
|
45
|
+
body: req.req && (req._json || req.formData)
|
|
46
|
+
? getBody(req) : null
|
|
47
|
+
};
|
|
48
|
+
return asString === true ? JSON.stringify(dump) : dump;
|
|
49
|
+
}
|
|
50
|
+
dumpResponse(res, asString = false) {
|
|
51
|
+
const dump = {
|
|
52
|
+
statusCode: res.statusCode,
|
|
53
|
+
statusMessage: res.statusMessage,
|
|
54
|
+
headers: res.headers,
|
|
55
|
+
body: res.body
|
|
56
|
+
};
|
|
57
|
+
return asString === true ? JSON.stringify(dump) : dump;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export default HttpClient;
|
|
61
|
+
//# sourceMappingURL=http_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http_client.js","sourceRoot":"","sources":["../../src/services/http_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,18 +10,4 @@ import Namespace from './namespace.js';
|
|
|
10
10
|
import Now from './now.js';
|
|
11
11
|
import ValidatorBase from './joi.js';
|
|
12
12
|
import EventManager from './event_manager.js';
|
|
13
|
-
|
|
14
|
-
export {
|
|
15
|
-
Cache,
|
|
16
|
-
Config,
|
|
17
|
-
Env,
|
|
18
|
-
HttpClient,
|
|
19
|
-
JsonWebToken,
|
|
20
|
-
Logger,
|
|
21
|
-
Redis,
|
|
22
|
-
RestClient,
|
|
23
|
-
Namespace,
|
|
24
|
-
Now,
|
|
25
|
-
ValidatorBase,
|
|
26
|
-
EventManager
|
|
27
|
-
};
|
|
13
|
+
export { Cache, Config, Env, HttpClient, JsonWebToken, Logger, Redis, RestClient, Namespace, Now, ValidatorBase, EventManager };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Cache from "./cache.js";
|
|
2
|
+
import Config from "./config.js";
|
|
3
|
+
import Env from "./env.js";
|
|
4
|
+
import HttpClient from "./http_client.js";
|
|
5
|
+
import JsonWebToken from "./jwt_token.js";
|
|
6
|
+
import Logger from "./logger.js";
|
|
7
|
+
import Redis from "./redis.js";
|
|
8
|
+
import RestClient from "./rest_client.js";
|
|
9
|
+
import Namespace from "./namespace.js";
|
|
10
|
+
import Now from "./now.js";
|
|
11
|
+
import ValidatorBase from "./joi.js";
|
|
12
|
+
import EventManager from "./event_manager.js";
|
|
13
|
+
export { Cache, Config, Env, HttpClient, JsonWebToken, Logger, Redis, RestClient, Namespace, Now, ValidatorBase, EventManager };
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EACL,KAAK,EACL,MAAM,EACN,GAAG,EACH,UAAU,EACV,YAAY,EACZ,MAAM,EACN,KAAK,EACL,UAAU,EACV,SAAS,EACT,GAAG,EACH,aAAa,EACb,YAAY,EACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/services/interface.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import Joi from 'joi';
|
|
2
2
|
import ServiceInterface from './interface.js';
|
|
3
|
-
|
|
4
3
|
export default class ValidatorBase extends ServiceInterface {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
getJoi() {
|
|
10
|
-
return Joi;
|
|
11
|
-
}
|
|
4
|
+
getProto(): typeof Joi;
|
|
5
|
+
getJoi(): typeof Joi;
|
|
12
6
|
}
|
|
13
|
-
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joi.js","sourceRoot":"","sources":["../../src/services/joi.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,gBAAgB,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IAChD,QAAQ;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM;QACJ,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as jwt from '../utils/jwt.js';
|
|
2
|
+
import Config from './config.js';
|
|
3
|
+
import Redis from './redis.js';
|
|
4
|
+
import ServiceInterface from './interface.js';
|
|
5
|
+
import type { Redis as RedisClient } from 'ioredis';
|
|
6
|
+
interface TokenConfig {
|
|
7
|
+
prefix: string;
|
|
8
|
+
secret: string;
|
|
9
|
+
}
|
|
10
|
+
declare class JsonWebToken extends ServiceInterface {
|
|
11
|
+
redis: RedisClient;
|
|
12
|
+
config: TokenConfig;
|
|
13
|
+
static dependencies: (typeof Config | typeof Redis)[];
|
|
14
|
+
constructor(config: Config, redis: Redis);
|
|
15
|
+
getProto(): typeof jwt;
|
|
16
|
+
getRedis(): RedisClient;
|
|
17
|
+
getPrefix(): string;
|
|
18
|
+
save(uid: string | number, item: object): Promise<string>;
|
|
19
|
+
find(tokenString: string): Promise<unknown>;
|
|
20
|
+
clear(tokenString: string): boolean | Promise<number>;
|
|
21
|
+
getRedisKey(tokenString: string, groupOnly?: boolean): string;
|
|
22
|
+
encode(item: object, secret?: string): string;
|
|
23
|
+
decode(str: string, secret?: string): object;
|
|
24
|
+
}
|
|
25
|
+
export default JsonWebToken;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as jwt from "../utils/jwt.js";
|
|
2
|
+
import Config from "./config.js";
|
|
3
|
+
import Redis from "./redis.js";
|
|
4
|
+
import ServiceInterface from "./interface.js";
|
|
5
|
+
class JsonWebToken extends ServiceInterface {
|
|
6
|
+
redis;
|
|
7
|
+
config;
|
|
8
|
+
static dependencies = [Config, Redis];
|
|
9
|
+
constructor(config, redis) {
|
|
10
|
+
super();
|
|
11
|
+
this.redis = redis.getInstance();
|
|
12
|
+
this.config = config.get('token');
|
|
13
|
+
}
|
|
14
|
+
getProto() {
|
|
15
|
+
return jwt;
|
|
16
|
+
}
|
|
17
|
+
getRedis() {
|
|
18
|
+
return this.redis;
|
|
19
|
+
}
|
|
20
|
+
getPrefix() {
|
|
21
|
+
return this.config.prefix;
|
|
22
|
+
}
|
|
23
|
+
async save(uid, item) {
|
|
24
|
+
const toSaveItem = Object.assign({ uid }, item);
|
|
25
|
+
const tokenString = this.encode(toSaveItem);
|
|
26
|
+
const key = [this.getPrefix(), uid, tokenString.split('.').pop()].join(':');
|
|
27
|
+
//TODO 过期时间
|
|
28
|
+
await this.getRedis().set(key, JSON.stringify(toSaveItem));
|
|
29
|
+
return tokenString;
|
|
30
|
+
}
|
|
31
|
+
async find(tokenString) {
|
|
32
|
+
if (!tokenString) {
|
|
33
|
+
return { uid: null, expiredAt: 0 };
|
|
34
|
+
}
|
|
35
|
+
const parsedToken = this.decode(tokenString);
|
|
36
|
+
if (!parsedToken || !{}.hasOwnProperty.call(parsedToken, 'uid')) {
|
|
37
|
+
return { uid: null, expiredAt: 0 };
|
|
38
|
+
}
|
|
39
|
+
const key = [this.getPrefix(), parsedToken.uid, tokenString.split('.').pop()].join(':');
|
|
40
|
+
const storedToken = await this.redis.get(key);
|
|
41
|
+
if (!storedToken) {
|
|
42
|
+
return {
|
|
43
|
+
uid: parsedToken.uid,
|
|
44
|
+
expiredAt: 0
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return JSON.parse(storedToken);
|
|
48
|
+
}
|
|
49
|
+
clear(tokenString) {
|
|
50
|
+
if (!tokenString) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
const key = this.getRedisKey(tokenString);
|
|
54
|
+
if (!key) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return this.redis.del(key);
|
|
58
|
+
}
|
|
59
|
+
getRedisKey(tokenString, groupOnly = false) {
|
|
60
|
+
const parsedToken = this.decode(tokenString);
|
|
61
|
+
if (!parsedToken || !{}.hasOwnProperty.call(parsedToken, 'uid')) {
|
|
62
|
+
return '';
|
|
63
|
+
}
|
|
64
|
+
return groupOnly === true ?
|
|
65
|
+
[this.getPrefix(), parsedToken.uid].join(':') :
|
|
66
|
+
[this.getPrefix(), parsedToken.uid, tokenString.split('.').pop()].join(':');
|
|
67
|
+
}
|
|
68
|
+
encode(item, secret = this.config.secret) {
|
|
69
|
+
return jwt.encode(item, secret);
|
|
70
|
+
}
|
|
71
|
+
decode(str, secret = this.config.secret) {
|
|
72
|
+
return jwt.decode(str, secret);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export default JsonWebToken;
|
|
76
|
+
//# sourceMappingURL=jwt_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt_token.js","sourceRoot":"","sources":["../../src/services/jwt_token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as jwt from '../utils/jwt.js';
|
|
2
|
+
import Config from './config.js';
|
|
3
|
+
import RestClient from '../services/rest_client.js';
|
|
4
|
+
import ServiceInterface from './interface.js';
|
|
5
|
+
interface KongTokenConfig {
|
|
6
|
+
secret: string;
|
|
7
|
+
kong: {
|
|
8
|
+
endpoint: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
declare class KongJsonWebToken extends ServiceInterface {
|
|
12
|
+
restClient: RestClient;
|
|
13
|
+
config: KongTokenConfig;
|
|
14
|
+
static dependencies: (typeof Config | typeof RestClient)[];
|
|
15
|
+
constructor(config: Config, restClient: RestClient);
|
|
16
|
+
getProto(): typeof jwt;
|
|
17
|
+
save(uid: string | number, item: {
|
|
18
|
+
username?: string;
|
|
19
|
+
expiredAt?: number;
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
find(tokenString: string): Promise<unknown>;
|
|
22
|
+
clear(tokenString: string): boolean | Promise<unknown>;
|
|
23
|
+
encode(item: object, secret?: string): string;
|
|
24
|
+
decode(str: string, secret?: string): object;
|
|
25
|
+
}
|
|
26
|
+
export default KongJsonWebToken;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as jwt from "../utils/jwt.js";
|
|
2
|
+
import get from 'lodash/get.js';
|
|
3
|
+
import { RuntimeException } from "../exceptions/index.js";
|
|
4
|
+
import Config from "./config.js";
|
|
5
|
+
import RestClient from "../services/rest_client.js";
|
|
6
|
+
import ServiceInterface from "./interface.js";
|
|
7
|
+
class KongJsonWebToken extends ServiceInterface {
|
|
8
|
+
restClient;
|
|
9
|
+
config;
|
|
10
|
+
static dependencies = [Config, RestClient];
|
|
11
|
+
constructor(config, restClient) {
|
|
12
|
+
super();
|
|
13
|
+
this.restClient = restClient;
|
|
14
|
+
this.config = config.get('token');
|
|
15
|
+
if (!get(this.config, 'kong.endpoint')) {
|
|
16
|
+
throw new RuntimeException('config item `token.kong.endpoint` can not be null');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getProto() {
|
|
20
|
+
return jwt;
|
|
21
|
+
}
|
|
22
|
+
async save(uid, item) {
|
|
23
|
+
const toSaveItem = Object.assign({ uid }, item);
|
|
24
|
+
const tokenString = this.encode(toSaveItem);
|
|
25
|
+
await this.restClient.request({
|
|
26
|
+
url: `${this.config.kong.endpoint}/rbac/credentials`,
|
|
27
|
+
method: 'post',
|
|
28
|
+
body: {
|
|
29
|
+
custom_id: uid.toString(),
|
|
30
|
+
username: item.username || null,
|
|
31
|
+
key: tokenString,
|
|
32
|
+
expired_at: item.expiredAt ? item.expiredAt * 1000 : null
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return tokenString;
|
|
36
|
+
}
|
|
37
|
+
async find(tokenString) {
|
|
38
|
+
if (!tokenString) {
|
|
39
|
+
return { uid: null, expiredAt: 0 };
|
|
40
|
+
}
|
|
41
|
+
const parsedToken = this.decode(tokenString);
|
|
42
|
+
if (!parsedToken || !{}.hasOwnProperty.call(parsedToken, 'uid')) {
|
|
43
|
+
return { uid: null, expiredAt: 0 };
|
|
44
|
+
}
|
|
45
|
+
return parsedToken;
|
|
46
|
+
}
|
|
47
|
+
clear(tokenString) {
|
|
48
|
+
if (!tokenString) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return this.restClient.request({
|
|
52
|
+
url: `${this.config.kong.endpoint}/rbac/credentials/${tokenString}`,
|
|
53
|
+
method: 'delete'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
encode(item, secret = this.config.secret) {
|
|
57
|
+
return jwt.encode(item, secret);
|
|
58
|
+
}
|
|
59
|
+
decode(str, secret = this.config.secret) {
|
|
60
|
+
return jwt.decode(str, secret);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export default KongJsonWebToken;
|
|
64
|
+
//# sourceMappingURL=jwt_token_kong.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt_token_kong.js","sourceRoot":"","sources":["../../src/services/jwt_token_kong.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import Env from './env.js';
|
|
3
|
+
import Config from './config.js';
|
|
4
|
+
import Namespace from './namespace.js';
|
|
5
|
+
import ServiceInterface from './interface.js';
|
|
6
|
+
declare class Logger extends ServiceInterface {
|
|
7
|
+
env: Env;
|
|
8
|
+
config: Config;
|
|
9
|
+
namespace: Namespace;
|
|
10
|
+
level: string;
|
|
11
|
+
instance: winston.Logger | null;
|
|
12
|
+
label: string | null;
|
|
13
|
+
logfile: string | null;
|
|
14
|
+
static dependencies: (typeof Env | typeof Config | typeof Namespace)[];
|
|
15
|
+
constructor(env: Env, config: Config, namespace: Namespace);
|
|
16
|
+
getProto(): typeof winston;
|
|
17
|
+
getWinston(): typeof winston;
|
|
18
|
+
setLogFile(logfile: string): this;
|
|
19
|
+
setLabel(label: string): this;
|
|
20
|
+
setLevel(level: string): this;
|
|
21
|
+
getInstance(): winston.Logger;
|
|
22
|
+
factory(logPath: string | false, key?: string, level?: string): winston.Logger;
|
|
23
|
+
populateTraceId(args: unknown[]): [string, ...unknown[]];
|
|
24
|
+
debug(...args: unknown[]): winston.Logger;
|
|
25
|
+
verbose(...args: unknown[]): winston.Logger;
|
|
26
|
+
info(...args: unknown[]): winston.Logger;
|
|
27
|
+
warn(...args: unknown[]): winston.Logger;
|
|
28
|
+
error(...args: unknown[]): winston.Logger;
|
|
29
|
+
dump(obj: unknown): winston.Logger;
|
|
30
|
+
}
|
|
31
|
+
export default Logger;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import moment from 'moment-timezone';
|
|
2
|
+
import winston from 'winston';
|
|
3
|
+
import { inspect } from 'util';
|
|
4
|
+
import Env from "./env.js";
|
|
5
|
+
import Config from "./config.js";
|
|
6
|
+
import Namespace from "./namespace.js";
|
|
7
|
+
import ServiceInterface from "./interface.js";
|
|
8
|
+
class Logger extends ServiceInterface {
|
|
9
|
+
env;
|
|
10
|
+
config;
|
|
11
|
+
namespace;
|
|
12
|
+
level;
|
|
13
|
+
instance;
|
|
14
|
+
label;
|
|
15
|
+
logfile;
|
|
16
|
+
static dependencies = [Env, Config, Namespace];
|
|
17
|
+
constructor(env, config, namespace) {
|
|
18
|
+
super();
|
|
19
|
+
this.env = env;
|
|
20
|
+
this.config = config;
|
|
21
|
+
this.namespace = namespace;
|
|
22
|
+
let level = env.isProduction() ? 'info' : 'debug';
|
|
23
|
+
if (process.env.LOG_LEVEL) {
|
|
24
|
+
level = process.env.LOG_LEVEL;
|
|
25
|
+
}
|
|
26
|
+
this.level = level;
|
|
27
|
+
winston.level = level;
|
|
28
|
+
this.instance = null;
|
|
29
|
+
this.label = null;
|
|
30
|
+
this.logfile = null;
|
|
31
|
+
}
|
|
32
|
+
getProto() {
|
|
33
|
+
return winston;
|
|
34
|
+
}
|
|
35
|
+
getWinston() {
|
|
36
|
+
return winston;
|
|
37
|
+
}
|
|
38
|
+
setLogFile(logfile) {
|
|
39
|
+
this.logfile = logfile;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
setLabel(label) {
|
|
43
|
+
this.label = label;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
setLevel(level) {
|
|
47
|
+
this.level = level;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
getInstance() {
|
|
51
|
+
if (this.instance) {
|
|
52
|
+
return this.instance;
|
|
53
|
+
}
|
|
54
|
+
const logPath = this.logfile || this.config.get('logger.file');
|
|
55
|
+
this.instance = this.factory(logPath);
|
|
56
|
+
return this.instance;
|
|
57
|
+
}
|
|
58
|
+
factory(logPath, key = 'global', level = this.level) {
|
|
59
|
+
const timestamp = () => moment().format();
|
|
60
|
+
return logPath ? winston.createLogger({
|
|
61
|
+
format: winston.format.combine(winston.format.splat(), winston.format.json()),
|
|
62
|
+
transports: [
|
|
63
|
+
new (winston.transports.Console)({
|
|
64
|
+
name: `${key}-console`,
|
|
65
|
+
timestamp,
|
|
66
|
+
level,
|
|
67
|
+
label: this.label
|
|
68
|
+
}),
|
|
69
|
+
new (winston.transports.File)({
|
|
70
|
+
name: `${key}-file`,
|
|
71
|
+
timestamp,
|
|
72
|
+
json: false,
|
|
73
|
+
level,
|
|
74
|
+
label: this.label,
|
|
75
|
+
filename: logPath
|
|
76
|
+
})
|
|
77
|
+
]
|
|
78
|
+
}) : winston.createLogger({
|
|
79
|
+
format: winston.format.combine(winston.format.splat(), winston.format.json()),
|
|
80
|
+
transports: [
|
|
81
|
+
new (winston.transports.Console)({
|
|
82
|
+
name: `${key}-console`,
|
|
83
|
+
timestamp,
|
|
84
|
+
level,
|
|
85
|
+
label: this.label,
|
|
86
|
+
colorize: !this.env.isProduction(),
|
|
87
|
+
prettyPrint: !this.env.isProduction()
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
populateTraceId(args) {
|
|
93
|
+
if (!this.namespace.get('tracer')) {
|
|
94
|
+
return args;
|
|
95
|
+
}
|
|
96
|
+
const { spanId, traceId } = (this.namespace.get('tracer') || {});
|
|
97
|
+
if (spanId) {
|
|
98
|
+
args.push(spanId);
|
|
99
|
+
}
|
|
100
|
+
if (spanId !== traceId) {
|
|
101
|
+
args.push(traceId);
|
|
102
|
+
}
|
|
103
|
+
return args;
|
|
104
|
+
}
|
|
105
|
+
debug(...args) {
|
|
106
|
+
return this.getInstance().debug(...this.populateTraceId(args));
|
|
107
|
+
}
|
|
108
|
+
verbose(...args) {
|
|
109
|
+
return this.getInstance().verbose(...this.populateTraceId(args));
|
|
110
|
+
}
|
|
111
|
+
info(...args) {
|
|
112
|
+
return this.getInstance().info(...this.populateTraceId(args));
|
|
113
|
+
}
|
|
114
|
+
warn(...args) {
|
|
115
|
+
return this.getInstance().warn(...this.populateTraceId(args));
|
|
116
|
+
}
|
|
117
|
+
error(...args) {
|
|
118
|
+
return this.getInstance().error(...this.populateTraceId(args));
|
|
119
|
+
}
|
|
120
|
+
dump(obj) {
|
|
121
|
+
return this.debug(inspect(obj, { depth: null, colors: true }));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export default Logger;
|
|
125
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import Config from './config.js';
|
|
3
|
+
import ServiceInterface from './interface.js';
|
|
4
|
+
/**
|
|
5
|
+
* CLS 语义的上下文是键值集合;AsyncLocalStorage 的 context 是单个值,
|
|
6
|
+
* 因此用 Map 承载,保持 get(key)/set(key, value) 的消费方式不变。
|
|
7
|
+
*/
|
|
8
|
+
type ClsContext = Map<string, unknown>;
|
|
9
|
+
export declare class Store {
|
|
10
|
+
get(...args: unknown[]): unknown;
|
|
11
|
+
set(...args: unknown[]): this;
|
|
12
|
+
bind(...args: unknown[]): unknown;
|
|
13
|
+
reset(): this;
|
|
14
|
+
active(): unknown;
|
|
15
|
+
run(callback: (context?: unknown, ...args: unknown[]) => unknown, ...args: unknown[]): unknown;
|
|
16
|
+
bindEmitter(...args: unknown[]): unknown;
|
|
17
|
+
getContext(): unknown;
|
|
18
|
+
createContext(): unknown;
|
|
19
|
+
}
|
|
20
|
+
export declare class NullStore extends Store {
|
|
21
|
+
constructor(...args: unknown[]);
|
|
22
|
+
}
|
|
23
|
+
export declare class NsStore extends Store {
|
|
24
|
+
name: string;
|
|
25
|
+
storage: AsyncLocalStorage<ClsContext>;
|
|
26
|
+
constructor(name: string);
|
|
27
|
+
get(key: string): unknown;
|
|
28
|
+
set(key: string, value: unknown): this;
|
|
29
|
+
bind<T extends (...args: never[]) => unknown>(fn: T): (...args: never[]) => unknown;
|
|
30
|
+
active(): ClsContext | undefined;
|
|
31
|
+
run(callback: (context: ClsContext, ...args: unknown[]) => unknown, ...args: unknown[]): unknown;
|
|
32
|
+
bindEmitter(emitter: unknown): unknown;
|
|
33
|
+
getContext(): NsStore;
|
|
34
|
+
createContext(): ClsContext;
|
|
35
|
+
reset(): this;
|
|
36
|
+
}
|
|
37
|
+
interface NamespaceConfig {
|
|
38
|
+
enable?: boolean;
|
|
39
|
+
}
|
|
40
|
+
declare class Namespace extends ServiceInterface {
|
|
41
|
+
config: NamespaceConfig;
|
|
42
|
+
defaultName: string;
|
|
43
|
+
store: Store | null;
|
|
44
|
+
name: string | null;
|
|
45
|
+
static dependencies: (typeof Config)[];
|
|
46
|
+
constructor(config: Config);
|
|
47
|
+
isEnabled(): boolean | undefined;
|
|
48
|
+
getDefaultName(): string;
|
|
49
|
+
setDefaultName(name: string): this;
|
|
50
|
+
getName(): string | null;
|
|
51
|
+
getStore(): Store;
|
|
52
|
+
destroy(name: string): this;
|
|
53
|
+
use(ns?: string | null): Store;
|
|
54
|
+
get(key: string): unknown;
|
|
55
|
+
set(key: string, value: unknown): unknown;
|
|
56
|
+
bind(...args: unknown[]): unknown;
|
|
57
|
+
active(): unknown;
|
|
58
|
+
run(...args: unknown[]): unknown;
|
|
59
|
+
bindEmitter(...args: unknown[]): unknown;
|
|
60
|
+
createContext(): unknown;
|
|
61
|
+
}
|
|
62
|
+
export default Namespace;
|