@jayfong/x-server 2.118.1 → 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/lib/_virtual/_rolldown/runtime.mjs +4 -0
- package/lib/cli/api_generator.d.mts +74 -0
- package/lib/cli/api_generator.mjs +310 -0
- package/lib/cli/build_util.d.mts +17 -0
- package/lib/cli/build_util.mjs +156 -0
- package/lib/cli/cli.d.mts +1 -0
- package/lib/cli/cli.mjs +355 -0
- package/lib/cli/css_register.d.mts +1 -0
- package/lib/cli/css_register.mjs +7 -0
- package/lib/cli/deploy_util.d.mts +23 -0
- package/lib/cli/deploy_util.mjs +70 -0
- package/lib/cli/dev_util.d.mts +7 -0
- package/lib/cli/dev_util.mjs +25 -0
- package/lib/cli/env_util.d.mts +45 -0
- package/lib/cli/env_util.mjs +207 -0
- package/lib/cli/esbuild_register.d.mts +1 -0
- package/lib/cli/esbuild_register.mjs +7 -0
- package/lib/cli/template_util.d.mts +18 -0
- package/lib/cli/template_util.mjs +85 -0
- package/lib/cli/templates/crons.ts +1 -1
- package/lib/cli/templates/handlers.ts +1 -1
- package/lib/cli/templates/hooks.ts +1 -1
- package/lib/cli/templates/models.ts +7 -7
- package/lib/cli/templates/package.json +11 -1
- package/lib/cli/templates/routes.ts +2 -1
- package/lib/core/ctx_storage.d.mts +3 -0
- package/lib/core/ctx_storage.mjs +4 -0
- package/lib/core/define_bus.d.mts +37 -0
- package/lib/core/define_bus.mjs +12 -0
- package/lib/core/{define_cron.d.ts → define_cron.d.mts} +2 -2
- package/lib/core/define_cron.mjs +11 -0
- package/lib/core/{define_handler.d.ts → define_handler.d.mts} +19 -19
- package/lib/core/define_handler.mjs +44 -0
- package/lib/core/define_hook.d.mts +2 -0
- package/lib/core/define_hook.mjs +6 -0
- package/lib/core/define_server.d.mts +3 -0
- package/lib/core/define_server.mjs +8 -0
- package/lib/core/{define_task.d.ts → define_task.d.mts} +2 -2
- package/lib/core/define_task.mjs +102 -0
- package/lib/core/get_handler_url.d.mts +2 -0
- package/lib/core/get_handler_url.mjs +7 -0
- package/lib/core/handler.d.mts +16 -0
- package/lib/core/handler.mjs +132 -0
- package/lib/core/http_error.d.mts +2 -0
- package/lib/core/http_error.mjs +1 -0
- package/lib/core/http_header.d.mts +856 -0
- package/lib/core/http_header.mjs +860 -0
- package/lib/core/http_method.d.mts +3 -0
- package/lib/core/http_method.mjs +10 -0
- package/lib/core/http_redirect.d.mts +5 -0
- package/lib/core/http_redirect.mjs +10 -0
- package/lib/core/server.d.mts +20 -0
- package/lib/core/server.mjs +186 -0
- package/lib/core/types.d.mts +256 -0
- package/lib/exports.d.mts +46 -0
- package/lib/exports.mjs +46 -0
- package/lib/index.d.mts +48 -0
- package/lib/index.mjs +45 -0
- package/lib/plugins/base.d.mts +4 -0
- package/lib/plugins/compress.d.mts +12 -0
- package/lib/plugins/compress.mjs +15 -0
- package/lib/plugins/cookie.d.mts +12 -0
- package/lib/plugins/cookie.mjs +15 -0
- package/lib/plugins/cors.d.mts +22 -0
- package/lib/plugins/cors.mjs +34 -0
- package/lib/plugins/file_parser.d.mts +15 -0
- package/lib/plugins/file_parser.mjs +24 -0
- package/lib/plugins/form_body_parser.d.mts +12 -0
- package/lib/plugins/form_body_parser.mjs +15 -0
- package/lib/plugins/ws_parser.d.mts +12 -0
- package/lib/plugins/ws_parser.mjs +15 -0
- package/lib/plugins/xml_parser.d.mts +19 -0
- package/lib/plugins/xml_parser.mjs +40 -0
- package/lib/services/ai.d.mts +31 -0
- package/lib/services/ai.mjs +44 -0
- package/lib/services/base.d.mts +4 -0
- package/lib/services/base.mjs +1 -0
- package/lib/services/cache.d.mts +165 -0
- package/lib/services/cache.mjs +323 -0
- package/lib/services/captcha.d.mts +65 -0
- package/lib/services/captcha.mjs +61 -0
- package/lib/services/{crypto.js → crypto.d.mts} +19 -78
- package/lib/services/crypto.mjs +141 -0
- package/lib/services/db_value.d.mts +60 -0
- package/lib/services/db_value.mjs +64 -0
- package/lib/services/dingtalk.d.mts +39 -0
- package/lib/services/dingtalk.mjs +44 -0
- package/lib/services/dispose.d.mts +17 -0
- package/lib/services/dispose.mjs +18 -0
- package/lib/services/emoji.d.mts +10 -0
- package/lib/services/emoji.mjs +2025 -0
- package/lib/services/file_store.d.mts +49 -0
- package/lib/services/file_store.mjs +58 -0
- package/lib/services/html.d.mts +11 -0
- package/lib/services/html.mjs +12 -0
- package/lib/services/jwt.d.mts +33 -0
- package/lib/services/jwt.mjs +42 -0
- package/lib/services/log.d.mts +37 -0
- package/lib/services/log.mjs +99 -0
- package/lib/services/mail.d.mts +22 -0
- package/lib/services/mail.mjs +28 -0
- package/lib/services/pay.d.mts +123 -0
- package/lib/services/pay.mjs +157 -0
- package/lib/services/random.d.mts +27 -0
- package/lib/services/random.mjs +42 -0
- package/lib/services/rate_limit.d.mts +37 -0
- package/lib/services/rate_limit.mjs +40 -0
- package/lib/services/redis.d.mts +11 -0
- package/lib/services/redis.mjs +6 -0
- package/lib/services/sensitive_words.d.mts +29 -0
- package/lib/services/sensitive_words.mjs +37 -0
- package/lib/services/sms.d.mts +40 -0
- package/lib/services/sms.mjs +30238 -0
- package/lib/types/dto.d.mts +30 -0
- package/lib/types/dto.mjs +1 -0
- package/lib/x.d.mts +11 -0
- package/lib/x.mjs +21 -0
- package/lib/x_init.d.mts +1 -0
- package/lib/x_init.mjs +10 -0
- package/package.json +99 -43
- package/lib/_cjs/cli/api_generator.js +0 -438
- package/lib/_cjs/cli/build_util.js +0 -243
- package/lib/_cjs/cli/cli.js +0 -378
- package/lib/_cjs/cli/css_register.js +0 -7
- package/lib/_cjs/cli/deploy_util.js +0 -76
- package/lib/_cjs/cli/dev_util.js +0 -25
- package/lib/_cjs/cli/env_util.js +0 -252
- package/lib/_cjs/cli/esbuild_register.js +0 -7
- package/lib/_cjs/cli/template_util.js +0 -101
- package/lib/_cjs/cli/templates/crons.ts +0 -2
- package/lib/_cjs/cli/templates/handlers.ts +0 -3
- package/lib/_cjs/cli/templates/hooks.ts +0 -2
- package/lib/_cjs/cli/templates/models.ts +0 -123
- package/lib/_cjs/cli/templates/package.json +0 -3
- package/lib/_cjs/cli/templates/routes.ts +0 -68
- package/lib/_cjs/core/ctx_storage.js +0 -6
- package/lib/_cjs/core/define_bus.js +0 -31
- package/lib/_cjs/core/define_cron.js +0 -13
- package/lib/_cjs/core/define_handler.js +0 -56
- package/lib/_cjs/core/define_hook.js +0 -8
- package/lib/_cjs/core/define_server.js +0 -10
- package/lib/_cjs/core/define_task.js +0 -113
- package/lib/_cjs/core/get_handler_url.js +0 -11
- package/lib/_cjs/core/handler.js +0 -216
- package/lib/_cjs/core/http_error.js +0 -6
- package/lib/_cjs/core/http_header.js +0 -142
- package/lib/_cjs/core/http_method.js +0 -12
- package/lib/_cjs/core/http_redirect.js +0 -11
- package/lib/_cjs/core/server.js +0 -221
- package/lib/_cjs/core/types.js +0 -8
- package/lib/_cjs/exports.js +0 -273
- package/lib/_cjs/index.js +0 -15
- package/lib/_cjs/plugins/base.js +0 -3
- package/lib/_cjs/plugins/compress.js +0 -18
- package/lib/_cjs/plugins/cookie.js +0 -18
- package/lib/_cjs/plugins/cors.js +0 -38
- package/lib/_cjs/plugins/file_parser.js +0 -28
- package/lib/_cjs/plugins/form_body_parser.js +0 -18
- package/lib/_cjs/plugins/ws_parser.js +0 -18
- package/lib/_cjs/plugins/xml_parser.js +0 -48
- package/lib/_cjs/services/ai.js +0 -48
- package/lib/_cjs/services/base.js +0 -3
- package/lib/_cjs/services/cache.js +0 -400
- package/lib/_cjs/services/captcha.js +0 -78
- package/lib/_cjs/services/crypto.js +0 -175
- package/lib/_cjs/services/db_value.js +0 -77
- package/lib/_cjs/services/dingtalk.js +0 -51
- package/lib/_cjs/services/dispose.js +0 -23
- package/lib/_cjs/services/emoji.js +0 -2034
- package/lib/_cjs/services/file_store.js +0 -67
- package/lib/_cjs/services/html.js +0 -17
- package/lib/_cjs/services/jwt.js +0 -65
- package/lib/_cjs/services/log.js +0 -108
- package/lib/_cjs/services/mail.js +0 -31
- package/lib/_cjs/services/pay.js +0 -191
- package/lib/_cjs/services/random.js +0 -51
- package/lib/_cjs/services/rate_limit.js +0 -54
- package/lib/_cjs/services/redis.js +0 -12
- package/lib/_cjs/services/sensitive_words.js +0 -62
- package/lib/_cjs/services/sms.js +0 -84
- package/lib/_cjs/types/dto.js +0 -3
- package/lib/_cjs/x.js +0 -35
- package/lib/cli/api_generator.d.ts +0 -74
- package/lib/cli/api_generator.js +0 -432
- package/lib/cli/build_util.d.ts +0 -17
- package/lib/cli/build_util.js +0 -236
- package/lib/cli/cli.d.ts +0 -2
- package/lib/cli/cli.js +0 -374
- package/lib/cli/css_register.js +0 -5
- package/lib/cli/deploy_util.d.ts +0 -23
- package/lib/cli/deploy_util.js +0 -70
- package/lib/cli/dev_util.d.ts +0 -8
- package/lib/cli/dev_util.js +0 -19
- package/lib/cli/env_util.d.ts +0 -45
- package/lib/cli/env_util.js +0 -246
- package/lib/cli/esbuild_register.js +0 -5
- package/lib/cli/template_util.d.ts +0 -18
- package/lib/cli/template_util.js +0 -95
- package/lib/core/ctx_storage.d.ts +0 -3
- package/lib/core/ctx_storage.js +0 -2
- package/lib/core/define_bus.d.ts +0 -37
- package/lib/core/define_bus.js +0 -27
- package/lib/core/define_cron.js +0 -9
- package/lib/core/define_handler.js +0 -48
- package/lib/core/define_hook.d.ts +0 -2
- package/lib/core/define_hook.js +0 -4
- package/lib/core/define_server.d.ts +0 -3
- package/lib/core/define_server.js +0 -6
- package/lib/core/define_task.js +0 -107
- package/lib/core/get_handler_url.d.ts +0 -2
- package/lib/core/get_handler_url.js +0 -7
- package/lib/core/handler.d.ts +0 -16
- package/lib/core/handler.js +0 -209
- package/lib/core/http_error.d.ts +0 -2
- package/lib/core/http_error.js +0 -2
- package/lib/core/http_header.d.ts +0 -856
- package/lib/core/http_header.js +0 -139
- package/lib/core/http_method.d.ts +0 -3
- package/lib/core/http_method.js +0 -8
- package/lib/core/http_redirect.d.ts +0 -5
- package/lib/core/http_redirect.js +0 -6
- package/lib/core/server.d.ts +0 -20
- package/lib/core/server.js +0 -215
- package/lib/core/types.d.ts +0 -265
- package/lib/core/types.js +0 -4
- package/lib/exports.d.ts +0 -45
- package/lib/exports.js +0 -47
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -3
- package/lib/plugins/base.d.ts +0 -4
- package/lib/plugins/base.js +0 -1
- package/lib/plugins/compress.d.ts +0 -13
- package/lib/plugins/compress.js +0 -12
- package/lib/plugins/cookie.d.ts +0 -13
- package/lib/plugins/cookie.js +0 -12
- package/lib/plugins/cors.d.ts +0 -22
- package/lib/plugins/cors.js +0 -33
- package/lib/plugins/file_parser.d.ts +0 -16
- package/lib/plugins/file_parser.js +0 -22
- package/lib/plugins/form_body_parser.d.ts +0 -13
- package/lib/plugins/form_body_parser.js +0 -12
- package/lib/plugins/ws_parser.d.ts +0 -13
- package/lib/plugins/ws_parser.js +0 -12
- package/lib/plugins/xml_parser.d.ts +0 -19
- package/lib/plugins/xml_parser.js +0 -43
- package/lib/services/ai.d.ts +0 -31
- package/lib/services/ai.js +0 -43
- package/lib/services/base.d.ts +0 -4
- package/lib/services/base.js +0 -1
- package/lib/services/cache.d.ts +0 -173
- package/lib/services/cache.js +0 -394
- package/lib/services/captcha.d.ts +0 -65
- package/lib/services/captcha.js +0 -72
- package/lib/services/crypto.d.ts +0 -110
- package/lib/services/db_value.d.ts +0 -60
- package/lib/services/db_value.js +0 -72
- package/lib/services/dingtalk.d.ts +0 -39
- package/lib/services/dingtalk.js +0 -45
- package/lib/services/dispose.d.ts +0 -17
- package/lib/services/dispose.js +0 -17
- package/lib/services/emoji.d.ts +0 -10
- package/lib/services/emoji.js +0 -2029
- package/lib/services/file_store.d.ts +0 -49
- package/lib/services/file_store.js +0 -61
- package/lib/services/html.d.ts +0 -11
- package/lib/services/html.js +0 -12
- package/lib/services/jwt.d.ts +0 -34
- package/lib/services/jwt.js +0 -59
- package/lib/services/log.d.ts +0 -37
- package/lib/services/log.js +0 -102
- package/lib/services/mail.d.ts +0 -23
- package/lib/services/mail.js +0 -25
- package/lib/services/pay.d.ts +0 -123
- package/lib/services/pay.js +0 -185
- package/lib/services/random.d.ts +0 -27
- package/lib/services/random.js +0 -45
- package/lib/services/rate_limit.d.ts +0 -37
- package/lib/services/rate_limit.js +0 -49
- package/lib/services/redis.d.ts +0 -12
- package/lib/services/redis.js +0 -7
- package/lib/services/sensitive_words.d.ts +0 -30
- package/lib/services/sensitive_words.js +0 -57
- package/lib/services/sms.d.ts +0 -40
- package/lib/services/sms.js +0 -78
- package/lib/types/dto.d.ts +0 -86
- package/lib/types/dto.js +0 -1
- package/lib/x.d.ts +0 -17
- package/lib/x.js +0 -30
- /package/lib/{cli/css_register.d.ts → core/types.mjs} +0 -0
- /package/lib/{cli/esbuild_register.d.ts → plugins/base.mjs} +0 -0
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { BaseService } from './base';
|
|
2
|
-
export type FileStoreServiceOptions = {
|
|
3
|
-
accessKey: string;
|
|
4
|
-
secretKey: string;
|
|
5
|
-
/** 如: cos.ap-guangzhou.myqcloud.com */
|
|
6
|
-
endpoint: string;
|
|
7
|
-
/** 如: image-311111 */
|
|
8
|
-
bucket: string;
|
|
9
|
-
/** 如: x */
|
|
10
|
-
dir: string;
|
|
11
|
-
/** 如: cdn.com */
|
|
12
|
-
cdnUrl: string;
|
|
13
|
-
};
|
|
14
|
-
export type FileStoreServiceGetUploadUrlPayload = {
|
|
15
|
-
fileName: string;
|
|
16
|
-
ttl: number;
|
|
17
|
-
keepName?: boolean;
|
|
18
|
-
};
|
|
19
|
-
export type FileStoreServiceGetUploadUrlResult = {
|
|
20
|
-
/** 文件类型 */
|
|
21
|
-
contentType: string;
|
|
22
|
-
/** 文件上传地址 */
|
|
23
|
-
uploadUrl: string;
|
|
24
|
-
/** 文件公开访问地址 */
|
|
25
|
-
publicUrl: string;
|
|
26
|
-
};
|
|
27
|
-
export type FileStoreServiceUploadPayload = {
|
|
28
|
-
/** 文件名 */
|
|
29
|
-
fileName: string;
|
|
30
|
-
/** 文件内容 */
|
|
31
|
-
content: Buffer;
|
|
32
|
-
keepName?: boolean;
|
|
33
|
-
};
|
|
34
|
-
export type FileStoreServiceUploadResult = FileStoreServiceGetUploadUrlResult;
|
|
35
|
-
export declare class FileStoreService implements BaseService {
|
|
36
|
-
private options;
|
|
37
|
-
serviceName: string;
|
|
38
|
-
private endpoint;
|
|
39
|
-
private dir;
|
|
40
|
-
private cdnUrl;
|
|
41
|
-
constructor(options: FileStoreServiceOptions);
|
|
42
|
-
getUploadUrl(payload: FileStoreServiceGetUploadUrlPayload): Promise<FileStoreServiceGetUploadUrlResult>;
|
|
43
|
-
upload(payload: FileStoreServiceUploadPayload): Promise<FileStoreServiceUploadResult>;
|
|
44
|
-
}
|
|
45
|
-
declare module '../x' {
|
|
46
|
-
interface X {
|
|
47
|
-
fileStore: FileStoreService;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
2
|
-
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
3
|
-
import { xr } from '@jayfong/x-request';
|
|
4
|
-
import mime from 'mime';
|
|
5
|
-
import { isUrl, ms } from 'vtils';
|
|
6
|
-
import { x } from "../x";
|
|
7
|
-
export class FileStoreService {
|
|
8
|
-
constructor(options) {
|
|
9
|
-
this.options = options;
|
|
10
|
-
this.serviceName = 'fileStore';
|
|
11
|
-
this.endpoint = '';
|
|
12
|
-
this.dir = '';
|
|
13
|
-
this.cdnUrl = '';
|
|
14
|
-
this.endpoint = isUrl(this.options.endpoint) ? this.options.endpoint : `https://${this.options.endpoint}`;
|
|
15
|
-
this.dir = this.options.dir ? `${this.options.dir.replace(/^\/+/, '').replace(/\/+$/, '')}` : '';
|
|
16
|
-
this.cdnUrl = (isUrl(this.options.cdnUrl) ? this.options.cdnUrl : `https://${this.options.cdnUrl}`).replace(/\/+$/, '');
|
|
17
|
-
}
|
|
18
|
-
async getUploadUrl(payload) {
|
|
19
|
-
const s3Client = new S3Client({
|
|
20
|
-
credentials: {
|
|
21
|
-
accessKeyId: this.options.accessKey,
|
|
22
|
-
secretAccessKey: this.options.secretKey
|
|
23
|
-
},
|
|
24
|
-
endpoint: this.endpoint,
|
|
25
|
-
region: 'x'
|
|
26
|
-
});
|
|
27
|
-
const contentType = mime.getType(payload.fileName) || 'application/octet-stream';
|
|
28
|
-
const fileName = payload.keepName ? payload.fileName : `${x.random.cuid2()}.${mime.getExtension(contentType)}`;
|
|
29
|
-
const dir = this.dir ? `${this.dir}/` : '';
|
|
30
|
-
const command = new PutObjectCommand({
|
|
31
|
-
Bucket: this.options.bucket,
|
|
32
|
-
Key: `${dir}${fileName}`,
|
|
33
|
-
ContentType: contentType
|
|
34
|
-
});
|
|
35
|
-
const uploadUrl = await getSignedUrl(s3Client, command, {
|
|
36
|
-
expiresIn: ms(payload.ttl, true)
|
|
37
|
-
});
|
|
38
|
-
const publicUrl = `${this.cdnUrl}/${dir}${fileName}`;
|
|
39
|
-
return {
|
|
40
|
-
contentType,
|
|
41
|
-
uploadUrl,
|
|
42
|
-
publicUrl
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
async upload(payload) {
|
|
46
|
-
const res = await this.getUploadUrl({
|
|
47
|
-
fileName: payload.fileName,
|
|
48
|
-
ttl: ms('1m'),
|
|
49
|
-
keepName: payload.keepName
|
|
50
|
-
});
|
|
51
|
-
await xr.post({
|
|
52
|
-
url: res.uploadUrl,
|
|
53
|
-
method: 'PUT',
|
|
54
|
-
headers: {
|
|
55
|
-
'Content-Type': res.contentType
|
|
56
|
-
},
|
|
57
|
-
data: payload.content
|
|
58
|
-
});
|
|
59
|
-
return res;
|
|
60
|
-
}
|
|
61
|
-
}
|
package/lib/services/html.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BaseService } from './base';
|
|
2
|
-
export declare class HtmlService implements BaseService {
|
|
3
|
-
serviceName: string;
|
|
4
|
-
escape(html: string): string;
|
|
5
|
-
unescape(html: string): string;
|
|
6
|
-
}
|
|
7
|
-
declare module '../x' {
|
|
8
|
-
interface X {
|
|
9
|
-
html: HtmlService;
|
|
10
|
-
}
|
|
11
|
-
}
|
package/lib/services/html.js
DELETED
package/lib/services/jwt.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { IncomingHttpHeaders } from 'node:http';
|
|
2
|
-
import jwt from 'jsonwebtoken';
|
|
3
|
-
import { LRUCache } from 'lru-cache';
|
|
4
|
-
import { type MsValue } from 'vtils';
|
|
5
|
-
import type { RequiredBy } from 'vtils/types';
|
|
6
|
-
import type { BaseService } from './base';
|
|
7
|
-
export interface JwtServiceJwtPayload extends Record<string, any> {
|
|
8
|
-
}
|
|
9
|
-
export interface JwtServiceOptions {
|
|
10
|
-
secret: string;
|
|
11
|
-
ttl: MsValue;
|
|
12
|
-
cache?: LRUCache.Options<string, JwtServiceJwtPayload, any>;
|
|
13
|
-
onVerify?: (payload: JwtServiceJwtPayload & RequiredBy<jwt.JwtPayload, 'iat' | 'exp'> & {
|
|
14
|
-
token: string;
|
|
15
|
-
}) => any;
|
|
16
|
-
}
|
|
17
|
-
export declare class JwtService implements BaseService {
|
|
18
|
-
private options;
|
|
19
|
-
serviceName: string;
|
|
20
|
-
private cache;
|
|
21
|
-
constructor(options: JwtServiceOptions);
|
|
22
|
-
sign<T extends JwtServiceJwtPayload>(payload: T, ttl?: MsValue): string;
|
|
23
|
-
verify<T extends JwtServiceJwtPayload>(token: string): Promise<T & {
|
|
24
|
-
token: string;
|
|
25
|
-
}>;
|
|
26
|
-
verifyFromHttpHeaders<T extends JwtServiceJwtPayload>(headers: IncomingHttpHeaders): Promise<T & {
|
|
27
|
-
token: string;
|
|
28
|
-
}>;
|
|
29
|
-
}
|
|
30
|
-
declare module '../x' {
|
|
31
|
-
interface X {
|
|
32
|
-
jwt: JwtService;
|
|
33
|
-
}
|
|
34
|
-
}
|
package/lib/services/jwt.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import jwt from 'jsonwebtoken';
|
|
2
|
-
import { LRUCache } from 'lru-cache';
|
|
3
|
-
import { ms } from 'vtils';
|
|
4
|
-
import { differenceInMilliseconds, fromUnixTime } from 'vtils/date';
|
|
5
|
-
import { HttpError } from "../core/http_error";
|
|
6
|
-
export class JwtService {
|
|
7
|
-
constructor(options) {
|
|
8
|
-
this.options = options;
|
|
9
|
-
this.serviceName = 'jwt';
|
|
10
|
-
this.cache = void 0;
|
|
11
|
-
if (options.cache) {
|
|
12
|
-
this.cache = new LRUCache(options.cache);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
sign(payload, ttl = this.options.ttl) {
|
|
16
|
-
const token = jwt.sign(payload, this.options.secret, {
|
|
17
|
-
expiresIn: ms(ttl, true)
|
|
18
|
-
});
|
|
19
|
-
if (this.cache) {
|
|
20
|
-
this.cache.set(token, payload, {
|
|
21
|
-
ttl: ms(ttl)
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
return token;
|
|
25
|
-
}
|
|
26
|
-
async verify(token) {
|
|
27
|
-
const data = await new Promise((resolve, reject) => {
|
|
28
|
-
if (this.cache && this.cache.has(token)) {
|
|
29
|
-
resolve(this.cache.get(token));
|
|
30
|
-
} else {
|
|
31
|
-
jwt.verify(token, this.options.secret, {
|
|
32
|
-
ignoreExpiration: false
|
|
33
|
-
}, (err, data) => {
|
|
34
|
-
if (err || !data || typeof data === 'string' || !data.iat || !data.exp) {
|
|
35
|
-
reject(new HttpError.Unauthorized('data'));
|
|
36
|
-
} else {
|
|
37
|
-
data.token = token;
|
|
38
|
-
if (this.cache) {
|
|
39
|
-
this.cache.set(token, data, {
|
|
40
|
-
ttl: differenceInMilliseconds(fromUnixTime(data.exp), new Date())
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
resolve(data);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
await this.options.onVerify?.(data);
|
|
49
|
-
return data;
|
|
50
|
-
}
|
|
51
|
-
async verifyFromHttpHeaders(headers) {
|
|
52
|
-
const authorization = headers.authorization || headers['sec-websocket-protocol'] && `Bearer ${headers['sec-websocket-protocol']}` || '';
|
|
53
|
-
if (!authorization) {
|
|
54
|
-
throw new HttpError.Unauthorized('header');
|
|
55
|
-
}
|
|
56
|
-
const [scheme, token = scheme] = authorization.split(' ');
|
|
57
|
-
return this.verify(token);
|
|
58
|
-
}
|
|
59
|
-
}
|
package/lib/services/log.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Merge } from 'vtils/types';
|
|
2
|
-
import { BaseService } from './base';
|
|
3
|
-
export type LogServiceLevel = 'error' | 'info' | 'success';
|
|
4
|
-
export type LogServiceDesc = Record<string, any> | any[];
|
|
5
|
-
export type LogServiceWriter = 'file' | 'console';
|
|
6
|
-
export type LogServicePayload = {
|
|
7
|
-
writer?: LogServiceWriter;
|
|
8
|
-
level: LogServiceLevel;
|
|
9
|
-
title: string;
|
|
10
|
-
desc?: LogServiceDesc;
|
|
11
|
-
};
|
|
12
|
-
export type LogServiceLogItem<K extends string = string> = Merge<LogServicePayload, {
|
|
13
|
-
traceId: string;
|
|
14
|
-
time: string;
|
|
15
|
-
desc: Record<K, any>;
|
|
16
|
-
}>;
|
|
17
|
-
export declare class LogService implements BaseService {
|
|
18
|
-
serviceName: string;
|
|
19
|
-
getLogFile(date: Date): string;
|
|
20
|
-
private get logFile();
|
|
21
|
-
private getLogWriter;
|
|
22
|
-
parseLogLineText<K extends string = string>(text: string, keysMap?: Record<string, string[]>): LogServiceLogItem<K>;
|
|
23
|
-
private log;
|
|
24
|
-
info: (title: string, desc?: LogServiceDesc) => void;
|
|
25
|
-
success: (title: string, desc?: LogServiceDesc) => void;
|
|
26
|
-
error: (title: string, desc?: LogServiceDesc) => void;
|
|
27
|
-
console: {
|
|
28
|
-
info: (title: string, desc?: LogServiceDesc) => void;
|
|
29
|
-
success: (title: string, desc?: LogServiceDesc) => void;
|
|
30
|
-
error: (title: string, desc?: LogServiceDesc) => void;
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
declare module '../x' {
|
|
34
|
-
interface X {
|
|
35
|
-
log: LogService;
|
|
36
|
-
}
|
|
37
|
-
}
|
package/lib/services/log.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import fs from 'fs-extra';
|
|
3
|
-
import { memoize } from 'vtils';
|
|
4
|
-
import { formatDate } from 'vtils/date';
|
|
5
|
-
import { x } from "../x";
|
|
6
|
-
export class LogService {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.serviceName = 'log';
|
|
9
|
-
this.getLogWriter = memoize(logFile => {
|
|
10
|
-
fs.ensureFileSync(logFile);
|
|
11
|
-
return fs.createWriteStream(logFile, {
|
|
12
|
-
flags: 'a'
|
|
13
|
-
});
|
|
14
|
-
}, logFile => logFile);
|
|
15
|
-
this.info = (title, desc) => {
|
|
16
|
-
this.log({
|
|
17
|
-
level: 'info',
|
|
18
|
-
title,
|
|
19
|
-
desc
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
this.success = (title, desc) => {
|
|
23
|
-
this.log({
|
|
24
|
-
level: 'success',
|
|
25
|
-
title,
|
|
26
|
-
desc
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
this.error = (title, desc) => {
|
|
30
|
-
this.log({
|
|
31
|
-
level: 'error',
|
|
32
|
-
title,
|
|
33
|
-
desc
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
this.console = {
|
|
37
|
-
info: (title, desc) => {
|
|
38
|
-
this.log({
|
|
39
|
-
writer: 'console',
|
|
40
|
-
level: 'info',
|
|
41
|
-
title,
|
|
42
|
-
desc
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
success: (title, desc) => {
|
|
46
|
-
this.log({
|
|
47
|
-
writer: 'console',
|
|
48
|
-
level: 'success',
|
|
49
|
-
title,
|
|
50
|
-
desc
|
|
51
|
-
});
|
|
52
|
-
},
|
|
53
|
-
error: (title, desc) => {
|
|
54
|
-
this.log({
|
|
55
|
-
writer: 'console',
|
|
56
|
-
level: 'error',
|
|
57
|
-
title,
|
|
58
|
-
desc
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
getLogFile(date) {
|
|
64
|
-
const year = date.getFullYear();
|
|
65
|
-
const month = date.getMonth() + 1;
|
|
66
|
-
return path.join(x.dataDir, `log/${year}/${month < 10 ? `0${month}` : month}.log`);
|
|
67
|
-
}
|
|
68
|
-
get logFile() {
|
|
69
|
-
return this.getLogFile(new Date());
|
|
70
|
-
}
|
|
71
|
-
parseLogLineText(text, keysMap = {}) {
|
|
72
|
-
const segments = text.split(/\t+/);
|
|
73
|
-
// 没有 traceId 的注入一下
|
|
74
|
-
if (segments[1].length < 10) {
|
|
75
|
-
segments.splice(1, 0, '');
|
|
76
|
-
}
|
|
77
|
-
const [time, traceId, level, title, ...desc] = segments;
|
|
78
|
-
return {
|
|
79
|
-
time: time,
|
|
80
|
-
traceId: traceId,
|
|
81
|
-
level: level,
|
|
82
|
-
title: title,
|
|
83
|
-
desc: desc.reduce((res, item, index) => {
|
|
84
|
-
if (keysMap[title]) {
|
|
85
|
-
res[keysMap[title][index]] = item;
|
|
86
|
-
} else {
|
|
87
|
-
const i = item.indexOf(':');
|
|
88
|
-
res[item.substring(0, i)] = item.substring(i + 1);
|
|
89
|
-
}
|
|
90
|
-
return res;
|
|
91
|
-
}, {})
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
log(payload) {
|
|
95
|
-
const getContent = () => `${[formatDate(new Date(), 'yyyy-mm-dd hh:ii:ss'), ...(!x.ctx ? [] : [x.ctx.traceId]), payload.level, payload.title, ...(!payload.desc ? [] : Array.isArray(payload.desc) ? payload.desc : Object.keys(payload.desc).map(key => `${key}:${payload.desc[key]}`))].map(item => String(item).replace(/[\r\n\t]+/g, ' ')).join('\t')}`;
|
|
96
|
-
if (payload.writer === 'console') {
|
|
97
|
-
console[payload.level === 'error' ? 'error' : 'log'](getContent());
|
|
98
|
-
} else {
|
|
99
|
-
this.getLogWriter(this.logFile).write(`${getContent()}\n`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
package/lib/services/mail.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import nodemailer from 'nodemailer';
|
|
2
|
-
import { BaseService } from './base';
|
|
3
|
-
export interface MailServiceOptions {
|
|
4
|
-
host: string;
|
|
5
|
-
port: number;
|
|
6
|
-
secure: boolean;
|
|
7
|
-
user: string;
|
|
8
|
-
pass: string;
|
|
9
|
-
}
|
|
10
|
-
export interface MailServiceSendOptions extends nodemailer.SendMailOptions {
|
|
11
|
-
}
|
|
12
|
-
export declare class MailService implements BaseService {
|
|
13
|
-
private options;
|
|
14
|
-
serviceName: string;
|
|
15
|
-
private transporter;
|
|
16
|
-
constructor(options: MailServiceOptions);
|
|
17
|
-
send(options: MailServiceSendOptions): Promise<any>;
|
|
18
|
-
}
|
|
19
|
-
declare module '../x' {
|
|
20
|
-
interface X {
|
|
21
|
-
mail: MailService;
|
|
22
|
-
}
|
|
23
|
-
}
|
package/lib/services/mail.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import nodemailer from 'nodemailer';
|
|
2
|
-
import { x } from "../x";
|
|
3
|
-
export class MailService {
|
|
4
|
-
constructor(options) {
|
|
5
|
-
this.options = options;
|
|
6
|
-
this.serviceName = 'mail';
|
|
7
|
-
this.transporter = void 0;
|
|
8
|
-
}
|
|
9
|
-
async send(options) {
|
|
10
|
-
if (!this.transporter) {
|
|
11
|
-
this.transporter = nodemailer.createTransport({
|
|
12
|
-
host: this.options.host,
|
|
13
|
-
port: this.options.port,
|
|
14
|
-
secure: this.options.secure,
|
|
15
|
-
auth: {
|
|
16
|
-
user: this.options.user,
|
|
17
|
-
pass: this.options.pass
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
await this.transporter.verify();
|
|
21
|
-
x.dispose.add(() => this.transporter.close());
|
|
22
|
-
}
|
|
23
|
-
return this.transporter.sendMail(options);
|
|
24
|
-
}
|
|
25
|
-
}
|
package/lib/services/pay.d.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import type { BaseService } from './base';
|
|
2
|
-
export interface PayServiceOptions {
|
|
3
|
-
/** 支付宝 */
|
|
4
|
-
alipay?: {
|
|
5
|
-
/** 应用 ID */
|
|
6
|
-
appId: string;
|
|
7
|
-
/** 商户应用私钥 */
|
|
8
|
-
privateKey: string;
|
|
9
|
-
/** 支付宝公钥,用于对返回结果验签 */
|
|
10
|
-
publicKey: string;
|
|
11
|
-
};
|
|
12
|
-
/** 微信支付(APIv3),未实现回调验签,因此验证微信支付身份块不需要关心 */
|
|
13
|
-
wepay?: {
|
|
14
|
-
/** 公众号 APPID */
|
|
15
|
-
appId: string;
|
|
16
|
-
/** 商户 ID */
|
|
17
|
-
merchantId: string;
|
|
18
|
-
/** 商户API证书私钥 */
|
|
19
|
-
privateKey: string;
|
|
20
|
-
/** 商户API证书序列号 */
|
|
21
|
-
certificateSerialNumber: string;
|
|
22
|
-
/** 密钥,用于解密回调数据 */
|
|
23
|
-
secretKey: string;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export interface PayServicePrepareAlipayOptions {
|
|
27
|
-
/** 商品名称 */
|
|
28
|
-
goodsName: string;
|
|
29
|
-
/** 交易单号 */
|
|
30
|
-
tradeNumber: string;
|
|
31
|
-
/** 总金额 */
|
|
32
|
-
totalMoney: number;
|
|
33
|
-
/** 通知地址(POST) */
|
|
34
|
-
notifyUrl: string;
|
|
35
|
-
/** 返回地址 */
|
|
36
|
-
returnUrl?: string;
|
|
37
|
-
}
|
|
38
|
-
export interface PayServicePrepareAlipayResult {
|
|
39
|
-
/** 支付地址,需跳转过去 */
|
|
40
|
-
payUrl: string;
|
|
41
|
-
}
|
|
42
|
-
export interface PayServicePrepareWepayOptions {
|
|
43
|
-
/** 商品名称 */
|
|
44
|
-
goodsName: string;
|
|
45
|
-
/** 交易单号 */
|
|
46
|
-
tradeNumber: string;
|
|
47
|
-
/** 总金额 */
|
|
48
|
-
totalMoney: number;
|
|
49
|
-
/** 通知地址(POST) */
|
|
50
|
-
notifyUrl: string;
|
|
51
|
-
/** 公众号用户的 openid */
|
|
52
|
-
openid: string;
|
|
53
|
-
}
|
|
54
|
-
export interface PayServicePrepareWepayResult {
|
|
55
|
-
/** 支付参数,可直接传给 JSSDK 调用 */
|
|
56
|
-
payParams: {
|
|
57
|
-
appId: string;
|
|
58
|
-
timestamp: string;
|
|
59
|
-
nonceStr: string;
|
|
60
|
-
package: string;
|
|
61
|
-
signType: string;
|
|
62
|
-
paySign: string;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
export interface PayServiceVerifyNotifyDataResult {
|
|
66
|
-
/**
|
|
67
|
-
* 渠道订单号。
|
|
68
|
-
*
|
|
69
|
-
* - 支付宝最长 `64` 位;
|
|
70
|
-
* - 微信支付最长 `32` 位。
|
|
71
|
-
*/
|
|
72
|
-
channelOrderNo: string;
|
|
73
|
-
}
|
|
74
|
-
export interface PayServiceGetOrderInfoPayload {
|
|
75
|
-
/**
|
|
76
|
-
* 渠道。
|
|
77
|
-
*/
|
|
78
|
-
channel: 'alipay' | 'wepay';
|
|
79
|
-
/**
|
|
80
|
-
* 商家订单号。
|
|
81
|
-
*/
|
|
82
|
-
orderNo?: string;
|
|
83
|
-
/**
|
|
84
|
-
* 渠道订单号。
|
|
85
|
-
*/
|
|
86
|
-
channelOrderNo?: string;
|
|
87
|
-
}
|
|
88
|
-
export interface PayServiceGetOrderInfoResult {
|
|
89
|
-
/**
|
|
90
|
-
* 商家订单号。
|
|
91
|
-
*/
|
|
92
|
-
orderNo: string;
|
|
93
|
-
/**
|
|
94
|
-
* 渠道订单号。
|
|
95
|
-
*
|
|
96
|
-
* - 支付宝最长 `64` 位;
|
|
97
|
-
* - 微信支付最长 `32` 位。
|
|
98
|
-
*/
|
|
99
|
-
channelOrderNo: string;
|
|
100
|
-
/**
|
|
101
|
-
* 订单状态。
|
|
102
|
-
*/
|
|
103
|
-
status: 'success' | 'fail';
|
|
104
|
-
}
|
|
105
|
-
export declare class PayService implements BaseService {
|
|
106
|
-
private options;
|
|
107
|
-
serviceName: string;
|
|
108
|
-
private alipaySdk;
|
|
109
|
-
constructor(options: PayServiceOptions);
|
|
110
|
-
prepareAlipay(options: PayServicePrepareAlipayOptions): Promise<PayServicePrepareAlipayResult>;
|
|
111
|
-
prepareWepay(options: PayServicePrepareWepayOptions): Promise<PayServicePrepareWepayResult>;
|
|
112
|
-
verifyNotifyData(data: any): false | PayServiceVerifyNotifyDataResult;
|
|
113
|
-
verifyNotifyDataOrFail(data: any, message?: string): PayServiceVerifyNotifyDataResult;
|
|
114
|
-
getOrderInfo(payload: PayServiceGetOrderInfoPayload): Promise<PayServiceGetOrderInfoResult>;
|
|
115
|
-
private wepaySign;
|
|
116
|
-
private wepayDecrypt;
|
|
117
|
-
private wepayRequest;
|
|
118
|
-
}
|
|
119
|
-
declare module '../x' {
|
|
120
|
-
interface X {
|
|
121
|
-
pay: PayService;
|
|
122
|
-
}
|
|
123
|
-
}
|