befly 3.9.38 → 3.9.40
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 +37 -38
- package/befly.config.ts +62 -40
- package/checks/checkApi.ts +16 -16
- package/checks/checkApp.ts +19 -25
- package/checks/checkTable.ts +42 -42
- package/docs/README.md +42 -35
- package/docs/{api.md → api/api.md} +223 -231
- package/docs/cipher.md +71 -69
- package/docs/database.md +143 -141
- package/docs/{examples.md → guide/examples.md} +181 -181
- package/docs/guide/quickstart.md +331 -0
- package/docs/hooks/auth.md +38 -0
- package/docs/hooks/cors.md +28 -0
- package/docs/{hook.md → hooks/hook.md} +140 -57
- package/docs/hooks/parser.md +19 -0
- package/docs/hooks/rateLimit.md +47 -0
- package/docs/{redis.md → infra/redis.md} +84 -93
- package/docs/plugins/cipher.md +61 -0
- package/docs/plugins/database.md +128 -0
- package/docs/{plugin.md → plugins/plugin.md} +83 -81
- package/docs/quickstart.md +26 -26
- package/docs/{addon.md → reference/addon.md} +46 -46
- package/docs/{config.md → reference/config.md} +32 -80
- package/docs/{logger.md → reference/logger.md} +52 -52
- package/docs/{sync.md → reference/sync.md} +32 -35
- package/docs/{table.md → reference/table.md} +1 -1
- package/docs/{validator.md → reference/validator.md} +57 -57
- package/hooks/auth.ts +8 -4
- package/hooks/cors.ts +13 -13
- package/hooks/parser.ts +37 -17
- package/hooks/permission.ts +26 -14
- package/hooks/rateLimit.ts +276 -0
- package/hooks/validator.ts +8 -8
- package/lib/asyncContext.ts +43 -0
- package/lib/cacheHelper.ts +212 -77
- package/lib/cacheKeys.ts +38 -0
- package/lib/cipher.ts +30 -30
- package/lib/connect.ts +28 -28
- package/lib/dbHelper.ts +183 -102
- package/lib/jwt.ts +16 -16
- package/lib/logger.ts +610 -19
- package/lib/redisHelper.ts +185 -44
- package/lib/sqlBuilder.ts +90 -91
- package/lib/validator.ts +59 -39
- package/loader/loadApis.ts +48 -44
- package/loader/loadHooks.ts +40 -14
- package/loader/loadPlugins.ts +16 -17
- package/main.ts +57 -47
- package/package.json +47 -45
- package/paths.ts +15 -14
- package/plugins/cache.ts +5 -4
- package/plugins/cipher.ts +3 -3
- package/plugins/config.ts +2 -2
- package/plugins/db.ts +9 -9
- package/plugins/jwt.ts +3 -3
- package/plugins/logger.ts +8 -12
- package/plugins/redis.ts +8 -8
- package/plugins/tool.ts +6 -6
- package/router/api.ts +85 -56
- package/router/static.ts +12 -12
- package/sync/syncAll.ts +12 -12
- package/sync/syncApi.ts +55 -52
- package/sync/syncDb/apply.ts +20 -19
- package/sync/syncDb/constants.ts +25 -23
- package/sync/syncDb/ddl.ts +35 -36
- package/sync/syncDb/helpers.ts +6 -9
- package/sync/syncDb/schema.ts +10 -9
- package/sync/syncDb/sqlite.ts +7 -8
- package/sync/syncDb/table.ts +37 -35
- package/sync/syncDb/tableCreate.ts +21 -20
- package/sync/syncDb/types.ts +23 -20
- package/sync/syncDb/version.ts +10 -10
- package/sync/syncDb.ts +43 -36
- package/sync/syncDev.ts +74 -65
- package/sync/syncMenu.ts +190 -55
- package/tests/api-integration-array-number.test.ts +282 -0
- package/tests/befly-config-env.test.ts +78 -0
- package/tests/cacheHelper.test.ts +135 -104
- package/tests/cacheKeys.test.ts +41 -0
- package/tests/cipher.test.ts +90 -89
- package/tests/dbHelper-advanced.test.ts +140 -134
- package/tests/dbHelper-all-array-types.test.ts +316 -0
- package/tests/dbHelper-array-serialization.test.ts +258 -0
- package/tests/dbHelper-columns.test.ts +56 -55
- package/tests/dbHelper-execute.test.ts +45 -44
- package/tests/dbHelper-joins.test.ts +124 -119
- package/tests/fields-redis-cache.test.ts +29 -27
- package/tests/fields-validate.test.ts +38 -38
- package/tests/getClientIp.test.ts +54 -0
- package/tests/integration.test.ts +69 -67
- package/tests/jwt.test.ts +27 -26
- package/tests/logger.test.ts +267 -34
- package/tests/rateLimit-hook.test.ts +477 -0
- package/tests/redisHelper.test.ts +187 -188
- package/tests/redisKeys.test.ts +6 -73
- package/tests/scanConfig.test.ts +144 -0
- package/tests/sqlBuilder-advanced.test.ts +217 -215
- package/tests/sqlBuilder.test.ts +92 -91
- package/tests/sync-connection.test.ts +29 -29
- package/tests/syncDb-apply.test.ts +97 -96
- package/tests/syncDb-array-number.test.ts +160 -0
- package/tests/syncDb-constants.test.ts +48 -47
- package/tests/syncDb-ddl.test.ts +99 -98
- package/tests/syncDb-helpers.test.ts +29 -28
- package/tests/syncDb-schema.test.ts +61 -60
- package/tests/syncDb-types.test.ts +60 -59
- package/tests/syncMenu-paths.test.ts +68 -0
- package/tests/util.test.ts +42 -41
- package/tests/validator-array-number.test.ts +310 -0
- package/tests/validator-default.test.ts +373 -0
- package/tests/validator.test.ts +271 -266
- package/tsconfig.json +4 -5
- package/types/api.d.ts +7 -12
- package/types/befly.d.ts +60 -13
- package/types/cache.d.ts +8 -4
- package/types/common.d.ts +17 -9
- package/types/context.d.ts +2 -2
- package/types/crypto.d.ts +23 -0
- package/types/database.d.ts +19 -19
- package/types/hook.d.ts +2 -2
- package/types/jwt.d.ts +118 -0
- package/types/logger.d.ts +30 -0
- package/types/plugin.d.ts +4 -4
- package/types/redis.d.ts +7 -3
- package/types/roleApisCache.ts +23 -0
- package/types/sync.d.ts +10 -10
- package/types/table.d.ts +50 -9
- package/types/validate.d.ts +69 -0
- package/utils/addonHelper.ts +90 -0
- package/utils/arrayKeysToCamel.ts +18 -0
- package/utils/calcPerfTime.ts +13 -0
- package/utils/configTypes.ts +3 -0
- package/utils/cors.ts +19 -0
- package/utils/fieldClear.ts +75 -0
- package/utils/genShortId.ts +12 -0
- package/utils/getClientIp.ts +45 -0
- package/utils/keysToCamel.ts +22 -0
- package/utils/keysToSnake.ts +22 -0
- package/utils/modules.ts +98 -0
- package/utils/pickFields.ts +19 -0
- package/utils/process.ts +56 -0
- package/utils/regex.ts +225 -0
- package/utils/response.ts +115 -0
- package/utils/route.ts +23 -0
- package/utils/scanConfig.ts +142 -0
- package/utils/scanFiles.ts +48 -0
- package/.prettierignore +0 -2
- package/.prettierrc +0 -12
- package/docs/1-/345/237/272/346/234/254/344/273/213/347/273/215.md +0 -35
- package/docs/2-/345/210/235/346/255/245/344/275/223/351/252/214.md +0 -64
- package/docs/3-/347/254/254/344/270/200/344/270/252/346/216/245/345/217/243.md +0 -46
- package/docs/4-/346/223/215/344/275/234/346/225/260/346/215/256/345/272/223.md +0 -172
- package/hooks/requestLogger.ts +0 -84
- package/types/index.ts +0 -24
- package/util.ts +0 -283
package/lib/jwt.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* JWT 工具类 - 基于 fast-jwt 实现
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import type { AuthConfig } from "../types/befly.js";
|
|
6
|
+
import type { JwtPayload, JwtSignOptions, JwtVerifyOptions, JwtDecoded, JwtHeader } from "../types/jwt.js";
|
|
7
|
+
import type { Algorithm as FastJwtAlgorithm } from "fast-jwt";
|
|
6
8
|
|
|
7
|
-
import
|
|
8
|
-
import type { AuthConfig } from '../types/befly.js';
|
|
9
|
-
import type { JwtPayload, JwtSignOptions, JwtVerifyOptions, JwtDecoded, JwtHeader } from 'befly-shared/types';
|
|
9
|
+
import { createSigner, createVerifier, createDecoder } from "fast-jwt";
|
|
10
10
|
|
|
11
11
|
interface FastJwtComplete {
|
|
12
12
|
header: JwtHeader;
|
|
@@ -20,15 +20,15 @@ export class Jwt {
|
|
|
20
20
|
|
|
21
21
|
constructor(config: AuthConfig = {}) {
|
|
22
22
|
this.config = {
|
|
23
|
-
secret: config.secret ||
|
|
24
|
-
expiresIn: config.expiresIn ||
|
|
25
|
-
algorithm: config.algorithm ||
|
|
23
|
+
secret: config.secret || "befly-secret",
|
|
24
|
+
expiresIn: config.expiresIn || "7d",
|
|
25
|
+
algorithm: config.algorithm || "HS256"
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
sign(payload: JwtPayload, options: JwtSignOptions = {}): string {
|
|
30
|
-
const key = options.secret || this.config.secret ||
|
|
31
|
-
const algorithm = (options.algorithm || this.config.algorithm ||
|
|
30
|
+
const key = options.secret || this.config.secret || "befly-secret";
|
|
31
|
+
const algorithm = (options.algorithm || this.config.algorithm || "HS256") as FastJwtAlgorithm;
|
|
32
32
|
|
|
33
33
|
const signer = createSigner({
|
|
34
34
|
key: key,
|
|
@@ -38,17 +38,17 @@ export class Jwt {
|
|
|
38
38
|
aud: options.audience,
|
|
39
39
|
sub: options.subject,
|
|
40
40
|
jti: options.jwtId,
|
|
41
|
-
notBefore: typeof options.notBefore ===
|
|
41
|
+
notBefore: typeof options.notBefore === "number" ? options.notBefore : undefined
|
|
42
42
|
});
|
|
43
43
|
return signer(payload);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
verify<T = JwtPayload>(token: string, options: JwtVerifyOptions = {}): T {
|
|
47
|
-
if (!token || typeof token !==
|
|
48
|
-
throw new Error(
|
|
47
|
+
if (!token || typeof token !== "string") {
|
|
48
|
+
throw new Error("Token必须是非空字符串");
|
|
49
49
|
}
|
|
50
|
-
const key = options.secret || this.config.secret ||
|
|
51
|
-
const algorithm = (this.config.algorithm ||
|
|
50
|
+
const key = options.secret || this.config.secret || "befly-secret";
|
|
51
|
+
const algorithm = (this.config.algorithm || "HS256") as FastJwtAlgorithm;
|
|
52
52
|
const algorithms: FastJwtAlgorithm[] = options.algorithms ? (options.algorithms as FastJwtAlgorithm[]) : [algorithm];
|
|
53
53
|
|
|
54
54
|
const verifier = createVerifier({
|
|
@@ -68,8 +68,8 @@ export class Jwt {
|
|
|
68
68
|
decode(token: string, complete?: false): JwtPayload;
|
|
69
69
|
decode(token: string, complete: true): JwtDecoded;
|
|
70
70
|
decode(token: string, complete: boolean = false): JwtPayload | JwtDecoded {
|
|
71
|
-
if (!token || typeof token !==
|
|
72
|
-
throw new Error(
|
|
71
|
+
if (!token || typeof token !== "string") {
|
|
72
|
+
throw new Error("Token必须是非空字符串");
|
|
73
73
|
}
|
|
74
74
|
if (complete) {
|
|
75
75
|
const decoder = createDecoder({ complete: true });
|