mas-server 3.0.41 → 4.0.0-beta.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.
Files changed (103) hide show
  1. package/README.md +8 -7
  2. package/dist/getApp/apiHandler.d.ts +21 -0
  3. package/dist/getApp/apiHandler.d.ts.map +1 -0
  4. package/dist/getApp/config.d.ts +22 -0
  5. package/dist/getApp/config.d.ts.map +1 -0
  6. package/dist/getApp/docTransform.d.ts +41 -0
  7. package/dist/getApp/docTransform.d.ts.map +1 -0
  8. package/dist/getApp/fsRoutes.d.ts +17 -0
  9. package/dist/getApp/fsRoutes.d.ts.map +1 -0
  10. package/dist/getApp/getApp.d.ts +11 -0
  11. package/dist/getApp/getApp.d.ts.map +1 -0
  12. package/dist/getApp/logs.d.ts +29 -0
  13. package/dist/getApp/logs.d.ts.map +1 -0
  14. package/dist/index.d.ts +5 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +1 -121
  17. package/dist/middleware/openCors.d.ts +9 -0
  18. package/dist/middleware/openCors.d.ts.map +1 -0
  19. package/dist/type.d.ts +150 -0
  20. package/dist/type.d.ts.map +1 -0
  21. package/dist/utils/mas-encrypt.min.d.ts +6 -0
  22. package/dist/utils/mas-encrypt.min.d.ts.map +1 -0
  23. package/dist/utils/quickSend.d.ts +8 -0
  24. package/dist/utils/quickSend.d.ts.map +1 -0
  25. package/dist/utils/tokenUtils.d.ts +54 -0
  26. package/dist/utils/tokenUtils.d.ts.map +1 -0
  27. package/dist/utils/typeFromValidFormat.d.ts +69 -0
  28. package/dist/utils/typeFromValidFormat.d.ts.map +1 -0
  29. package/dist/utils/validType.d.ts +17 -0
  30. package/dist/utils/validType.d.ts.map +1 -0
  31. package/package.json +43 -46
  32. package/.temp/.keep +0 -0
  33. package/.temp/getRouteByApiSrc.ts +0 -55
  34. package/.temp/merge/a.ts +0 -4
  35. package/.temp/merge/as.ts +0 -1
  36. package/.temp/merge/b.ts +0 -3
  37. package/.temp/merge/i.js +0 -103
  38. package/.temp/merge/logs/.keep +0 -0
  39. package/.temp/merge/test.ts +0 -2
  40. package/.temp/merge/validType copy.ts +0 -149
  41. package/.temp/merge/validType.ts +0 -98
  42. package/.temp/merge/validTypeOptimize.ts +0 -98
  43. package/.temp/updateRouter.ts +0 -46
  44. package/.vscode/settings.json +0 -3
  45. package/beforebuild.js +0 -9
  46. package/dist/state.js +0 -4
  47. package/dist/typings/index.js +0 -2
  48. package/dist/utils/apiLimit.js +0 -20
  49. package/dist/utils/createRouter.js +0 -81
  50. package/dist/utils/getRouterInfo.js +0 -56
  51. package/dist/utils/logs.js +0 -58
  52. package/dist/utils/mas-encrypt.min.js +0 -1
  53. package/dist/utils/masUtils.js +0 -10
  54. package/dist/utils/meaToken.js +0 -57
  55. package/dist/utils/printLog.js +0 -12
  56. package/dist/utils/quickSend.js +0 -37
  57. package/dist/utils/readApi.js +0 -60
  58. package/dist/utils/validRouteData.js +0 -37
  59. package/dist/utils/validToken.js +0 -24
  60. package/dist/utils/validType.js +0 -84
  61. package/src/index.ts +0 -98
  62. package/src/state.ts +0 -1
  63. package/src/typings/index.ts +0 -113
  64. package/src/utils/apiLimit.ts +0 -15
  65. package/src/utils/createRouter.ts +0 -34
  66. package/src/utils/getRouterInfo.ts +0 -49
  67. package/src/utils/logs.ts +0 -21
  68. package/src/utils/mas-encrypt.min.js +0 -1
  69. package/src/utils/masUtils.ts +0 -7
  70. package/src/utils/meaToken.ts +0 -56
  71. package/src/utils/printLog.ts +0 -12
  72. package/src/utils/quickSend.ts +0 -25
  73. package/src/utils/readApi.ts +0 -28
  74. package/src/utils/validRouteData.ts +0 -45
  75. package/src/utils/validToken.ts +0 -22
  76. package/src/utils/validType.ts +0 -81
  77. package/test/apiTemplate/curd/del.ts +0 -9
  78. package/test/apiTemplate/curd/get.ts +0 -9
  79. package/test/apiTemplate/curd/set.ts +0 -9
  80. package/test/apiTemplate/defaultApi.ts +0 -8
  81. package/test/config/serverConfig/config.ts +0 -29
  82. package/test/config/sqlConfig/createSqlFormData.ts +0 -13
  83. package/test/logs/.keep +0 -0
  84. package/test/main.ts +0 -29
  85. package/test/scripts/beforeCreated.ts +0 -28
  86. package/test/scripts/createApiFile.ts +0 -26
  87. package/test/scripts/createApis.ts +0 -61
  88. package/test/scripts/createSqlForm.ts +0 -5
  89. package/test/scripts/getSqlFormType.ts +0 -23
  90. package/test/scripts/run.ts +0 -4
  91. package/test/src/api/example/ArrValid.ts +0 -11
  92. package/test/src/api/example/per.ts +0 -34
  93. package/test/src/api/example/tip.ts +0 -7
  94. package/test/src/api/example/validReqData.ts +0 -82
  95. package/test/src/api/index.ts +0 -9
  96. package/test/src/apiDoc.ts +0 -34
  97. package/test/src/debug.ts +0 -5
  98. package/test/src/masState.ts +0 -4
  99. package/test/src/sqlform.json +0 -1
  100. package/test/test.ts +0 -1
  101. package/tsconfig-build.json +0 -20
  102. package/tsconfig.json +0 -21
  103. package/tsconfigschema.json +0 -1263
package/README.md CHANGED
@@ -1,7 +1,8 @@
1
- 一款基于 express 面向中小型项目的后端框架
2
- 功能如下:
3
- 约定式路由
4
- 权限管理
5
- 日志管理
6
- IP 限流
7
- JWT 验证
1
+ # mas-server@4.0.0
2
+
3
+ 一款基于 express 面向中小型项目的后端框架
4
+ 功能如下:
5
+ 约定式路由
6
+ 权限管理
7
+ 日志管理
8
+ JWT 验证
@@ -0,0 +1,21 @@
1
+ import type { MasAppConfig, MasConfig, MasHandler } from '../type';
2
+ import express from 'express';
3
+ export type LoadedApiModule = {
4
+ config?: MasConfig;
5
+ handler?: MasHandler<any>;
6
+ doc?: any;
7
+ };
8
+ /**
9
+ * 根据已加载的 API 模块创建路由处理器,并在调用前做:
10
+ * - method 校验
11
+ * - content-type 校验(仅在配置了 `contentType` 且存在 body 时)
12
+ * - header 校验
13
+ * - token 校验 + permission 校验
14
+ * - requestFormat 校验
15
+ *
16
+ * @param filePath - API 文件路径(仅用于错误信息)
17
+ * @param mod - 已加载的 API 模块
18
+ * @param appConfig - 应用配置(用于 token 相关逻辑)
19
+ */
20
+ export declare function createApiHandler(filePath: string, mod: LoadedApiModule, appConfig: MasAppConfig): express.RequestHandler;
21
+ //# sourceMappingURL=apiHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiHandler.d.ts","sourceRoot":"","sources":["../../src/getApp/apiHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAC1B,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,cAAc,CA2FxB"}
@@ -0,0 +1,22 @@
1
+ import type { MasAppConfig } from '../type';
2
+ /**
3
+ * 默认应用配置(会在 getApp 内根据 dirname 补全路径字段)。
4
+ */
5
+ export declare const defaultConfig: MasAppConfig;
6
+ /**
7
+ * 深度合并 `MasAppConfig`(仅处理一层嵌套的 `logs/token`,避免浅合并误覆盖)。
8
+ *
9
+ * @param base - 默认配置
10
+ * @param override - 用户配置
11
+ */
12
+ export declare function mergeAppConfig(base: MasAppConfig, override?: MasAppConfig): MasAppConfig;
13
+ /**
14
+ * 根据传入的 dirname 自动探测 apis 目录(兼容 `src/apis` 与 `apis` 两种结构)。
15
+ *
16
+ * @param dirname - 项目根目录
17
+ */
18
+ export declare function resolveApisPaths(dirname: string): {
19
+ apisPath: string;
20
+ defalutApiPath: string;
21
+ };
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/getApp/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAa3B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,QAAQ,CAAC,EAAE,YAAY,GACtB,YAAY,CAQd;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB,CAkBA"}
@@ -0,0 +1,41 @@
1
+ import type { MasConfig } from '../type';
2
+ type AnyRecord = Record<string, any>;
3
+ /**
4
+ * 将 ValidFormat(包含构造器/函数)转换成可 JSON 序列化的结构:
5
+ * - String/Number/... -> "String" / "Number" ...
6
+ * - { a: String } -> { a: "String" }
7
+ * - [String] -> ["String"]
8
+ *
9
+ * @param format - ValidFormat
10
+ */
11
+ export declare function serializeValidFormat(format: unknown): any;
12
+ type DescItem = {
13
+ name: string;
14
+ desc: string;
15
+ type?: any;
16
+ };
17
+ type SectionDocView = {
18
+ example: AnyRecord;
19
+ desc: DescItem[];
20
+ };
21
+ /**
22
+ * 生成 debug docs 用的 config 视图(把 requestFormat/responseFormat/header 转成可 JSON 序列化结构)。
23
+ *
24
+ * @param config - API config
25
+ */
26
+ export declare function serializeMasConfigForDoc(config: MasConfig | undefined): any;
27
+ /**
28
+ * 生成 debug docs 用的 doc 视图:
29
+ * - 若用户提供 doc,则补齐 desc.type(从格式里推导)
30
+ * - 若没提供 doc,则从格式生成 example + desc
31
+ *
32
+ * @param config - API config
33
+ * @param doc - API doc(模块导出)
34
+ */
35
+ export declare function buildApiDocForDebug(config: MasConfig | undefined, doc: any): {
36
+ header: SectionDocView | undefined;
37
+ request: SectionDocView | undefined;
38
+ response: SectionDocView | undefined;
39
+ };
40
+ export {};
41
+ //# sourceMappingURL=docTransform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docTransform.d.ts","sourceRoot":"","sources":["../../src/getApp/docTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAErC;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,GAAG,CAqBzD;AA6CD,KAAK,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AAqE3D,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB,CAAC;AAyCF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,GAAG,CAY3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG;;;;EAM1E"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 同步遍历目录,收集 `.ts/.js` API 文件路径(排除 `.d.ts`)。
3
+ *
4
+ * @param dir - apis 根目录
5
+ */
6
+ export declare function walkApiFilesSync(dir: string): string[];
7
+ /**
8
+ * 将 api 文件路径映射为路由路径:
9
+ * - `apis/index.ts` -> `/`
10
+ * - `apis/user/index.ts` -> `/user`
11
+ * - `apis/user/login.ts` -> `/user/login`
12
+ *
13
+ * @param apisRoot - apis 根目录
14
+ * @param filePath - API 文件路径
15
+ */
16
+ export declare function toRoutePath(apisRoot: string, filePath: string): string;
17
+ //# sourceMappingURL=fsRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fsRoutes.d.ts","sourceRoot":"","sources":["../../src/getApp/fsRoutes.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBtD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQtE"}
@@ -0,0 +1,11 @@
1
+ import type { Express } from 'express';
2
+ import type { MasAppConfig } from '../type';
3
+ /**
4
+ * 创建 MAS Express 应用并挂载约定式路由。
5
+ *
6
+ * @param dirname - 项目根目录(默认会在其中探测 `src/apis` 或 `apis`)
7
+ * @param config - 应用配置(会与默认配置合并)
8
+ * @param beforeMounted - 在框架挂载中间件/路由前的回调(可用于注册自定义中间件)
9
+ */
10
+ export declare function getApp(dirname: string, config?: MasAppConfig, beforeMounted?: (_app: Express) => void): Promise<import("express-serve-static-core").Express>;
11
+ //# sourceMappingURL=getApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getApp.d.ts","sourceRoot":"","sources":["../../src/getApp/getApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,SAAS,CAAC;AAavD;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,YAAY,EACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,wDAmIxC"}
@@ -0,0 +1,29 @@
1
+ import type { Express } from 'express';
2
+ export type AccessLogOptions = {
3
+ /** 是否记录请求体 */
4
+ logRequestBody?: boolean;
5
+ /** 是否记录响应体 */
6
+ logResponseBody?: boolean;
7
+ /** body 最大记录长度,默认 2000 */
8
+ maxBodyLength?: number;
9
+ /** 需要打码/移除的字段名,默认 ['password','pwd','token'] */
10
+ redactKeys?: string[];
11
+ };
12
+ /**
13
+ * 控制台打印访问日志(打印 morgan 那一行)。
14
+ *
15
+ * @param app - express app
16
+ * @param options - 额外配置(是否记录入参/出参等)
17
+ */
18
+ export declare function attachConsoleLogs(app: Express, options?: AccessLogOptions): void;
19
+ /**
20
+ * 挂载 access log(落盘),实现与 `.backup/src/utils/logs.ts` 一致的策略:
21
+ * - morgan combined
22
+ * - rotating-file-stream:按天滚动 + 单文件 50MB
23
+ *
24
+ * @param app - express app
25
+ * @param dir - 日志目录
26
+ * @param options - 额外配置(是否记录入参/出参等)
27
+ */
28
+ export default function attachLogs(app: Express, dir: string, options?: AccessLogOptions): void;
29
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/getApp/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMvC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAyIF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,gBAAqB,QAe/B;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,QAoB/B"}
@@ -0,0 +1,5 @@
1
+ export type * from './type';
2
+ export { getApp } from './getApp/getApp';
3
+ export { validToken, createToken, decode, encode } from './utils/tokenUtils';
4
+ export { _Number, _String, type TypeFromValidFormat, type ValidFormat, } from './utils/typeFromValidFormat';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,mBAAmB,QAAQ,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG7E,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,mBAAmB,EACxB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,121 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.getApiRouter = exports.validType = exports.createToken = exports.validToken = exports.moment = exports.readApi = void 0;
40
- exports.getApp = getApp;
41
- require("module-alias/register");
42
- const express_1 = __importDefault(require("express"));
43
- const state_1 = require("./state");
44
- const printLog_1 = __importDefault(require("./utils/printLog"));
45
- const quickSend_1 = __importDefault(require("./utils/quickSend"));
46
- const readApi_1 = __importDefault(require("./utils/readApi"));
47
- exports.readApi = readApi_1.default;
48
- const validRouteData_1 = __importDefault(require("./utils/validRouteData"));
49
- const validToken_1 = __importDefault(require("./utils/validToken"));
50
- const ansi_colors_1 = __importDefault(require("ansi-colors"));
51
- const moment_1 = __importDefault(require("moment"));
52
- exports.moment = moment_1.default;
53
- require("moment/locale/zh-cn");
54
- moment_1.default.locale("zh-cn");
55
- const meaToken_1 = require("./utils/meaToken");
56
- Object.defineProperty(exports, "createToken", { enumerable: true, get: function () { return meaToken_1.createToken; } });
57
- Object.defineProperty(exports, "validToken", { enumerable: true, get: function () { return meaToken_1.validToken; } });
58
- const validType_1 = __importDefault(require("./utils/validType"));
59
- exports.validType = validType_1.default;
60
- const createRouter_1 = __importDefault(require("./utils/createRouter"));
61
- const getRouterInfo_1 = __importStar(require("./utils/getRouterInfo"));
62
- Object.defineProperty(exports, "getApiRouter", { enumerable: true, get: function () { return getRouterInfo_1.getApiRouter; } });
63
- const logs_1 = __importDefault(require("./utils/logs"));
64
- const apiLimit_1 = __importDefault(require("./utils/apiLimit"));
65
- // =================================================================
66
- function getApp(proConfig,
67
- /** 接口生成之前 */
68
- beforeMounted) {
69
- var _a;
70
- const config = require(proConfig.configPath).default;
71
- // 获取路由信息
72
- (0, getRouterInfo_1.default)(proConfig.apisPath, proConfig.defalutApiPath);
73
- state_1.state.config = config;
74
- // new express
75
- const app = (0, express_1.default)();
76
- beforeMounted && beforeMounted(app);
77
- // ip限制
78
- if ((_a = config.apiLimit) === null || _a === void 0 ? void 0 : _a.open) {
79
- (0, apiLimit_1.default)(app, config.apiLimit || {});
80
- }
81
- // 初始化app
82
- app.use(express_1.default.urlencoded({ extended: true }));
83
- app.use(express_1.default.json());
84
- // 错误处理中间件
85
- app.use((err, req, res, next) => {
86
- if (err.type == "entity.parse.failed") {
87
- req.body._str = err.body;
88
- }
89
- next();
90
- });
91
- //快速return
92
- app.use(quickSend_1.default);
93
- // 打印日志
94
- if (config.logs.debug) {
95
- app.use(require("express-ip")().getIpInfoMiddleware);
96
- app.use(printLog_1.default);
97
- }
98
- // 存储日志
99
- if (config.logs.open) {
100
- (0, logs_1.default)(app, proConfig.logPath);
101
- }
102
- // 权限管理
103
- if (config.token.open) {
104
- app.use(validToken_1.default);
105
- }
106
- // 数据效验
107
- app.use(validRouteData_1.default);
108
- // 创建路由
109
- (0, createRouter_1.default)(app, proConfig.apisPath);
110
- // 运行debug
111
- setTimeout(() => {
112
- try {
113
- require(proConfig.degbugPath);
114
- }
115
- catch (error) {
116
- console.info(ansi_colors_1.default.red("debug.js报错!!!"));
117
- console.info(error);
118
- }
119
- }, config.debugTime || 1000);
120
- return app;
121
- }
1
+ var c2=Object.create;var{getPrototypeOf:h2,defineProperty:M1,getOwnPropertyNames:r2}=Object;var t2=Object.prototype.hasOwnProperty;var e2=(n,r,t)=>{t=n!=null?c2(h2(n)):{};let h=r||!n||!n.__esModule?M1(t,"default",{value:n,enumerable:!0}):t;for(let c of r2(n))if(!t2.call(h,c))M1(h,c,{get:()=>n[c],enumerable:!0});return h};var s2=(n,r)=>()=>(r||n((r={exports:{}}).exports,r),r.exports);var Y1=s2((U2,z1)=>{var R=R||function(n){var r=Object.create||function(s){return t.prototype=s,s=new t,t.prototype=null,s};function t(){}var h={},c=h.lib={},i=c.Base={extend:function(s){var l=r(this);return s&&l.mixIn(s),l.hasOwnProperty("init")&&this.init!==l.init||(l.init=function(){l.$super.init.apply(this,arguments)}),(l.init.prototype=l).$super=this,l},create:function(){var s=this.extend();return s.init.apply(s,arguments),s},init:function(){},mixIn:function(s){for(var l in s)s.hasOwnProperty(l)&&(this[l]=s[l]);s.hasOwnProperty("toString")&&(this.toString=s.toString)},clone:function(){return this.init.prototype.extend(this)}},B=c.WordArray=i.extend({init:function(s,l){s=this.words=s||[],this.sigBytes=l!=null?l:4*s.length},toString:function(s){return(s||_).stringify(this)},concat:function(s){var l=this.words,u=s.words,y=this.sigBytes,g=s.sigBytes;if(this.clamp(),y%4)for(var f=0;f<g;f++){var A=u[f>>>2]>>>24-f%4*8&255;l[y+f>>>2]|=A<<24-(y+f)%4*8}else for(f=0;f<g;f+=4)l[y+f>>>2]=u[f>>>2];return this.sigBytes+=g,this},clamp:function(){var s=this.words,l=this.sigBytes;s[l>>>2]&=4294967295<<32-l%4*8,s.length=n.ceil(l/4)},clone:function(){var s=i.clone.call(this);return s.words=this.words.slice(0),s},random:function(s){for(var l=[],u=0;u<s;u+=4){var y=function(f){var A=987654321,z=4294967295;return function(){var M=((A=36969*(65535&A)+(A>>16)&z)<<16)+(f=18000*(65535&f)+(f>>16)&z)&z;return(M/4294967296+0.5)*(0.5<n.random()?1:-1)}}(4294967296*(g||n.random())),g=987654071*y();l.push(4294967296*y()|0)}return new B.init(l,s)}}),e=h.enc={},_=e.Hex={stringify:function(s){for(var{words:l,sigBytes:u}=s,y=[],g=0;g<u;g++){var f=l[g>>>2]>>>24-g%4*8&255;y.push((f>>>4).toString(16)),y.push((15&f).toString(16))}return y.join("")},parse:function(s){for(var l=s.length,u=[],y=0;y<l;y+=2)u[y>>>3]|=parseInt(s.substr(y,2),16)<<24-y%8*4;return new B.init(u,l/2)}},o=e.Latin1={stringify:function(s){for(var{words:l,sigBytes:u}=s,y=[],g=0;g<u;g++){var f=l[g>>>2]>>>24-g%4*8&255;y.push(String.fromCharCode(f))}return y.join("")},parse:function(s){for(var l=s.length,u=[],y=0;y<l;y++)u[y>>>2]|=(255&s.charCodeAt(y))<<24-y%4*8;return new B.init(u,l)}},v=e.Utf8={stringify:function(s){try{return decodeURIComponent(escape(o.stringify(s)))}catch(l){throw Error("Malformed UTF-8 data")}},parse:function(s){return o.parse(unescape(encodeURIComponent(s)))}},w=c.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new B.init,this._nDataBytes=0},_append:function(s){typeof s=="string"&&(s=v.parse(s)),this._data.concat(s),this._nDataBytes+=s.sigBytes},_process:function(z){var l=this._data,u=l.words,y=l.sigBytes,g=this.blockSize,f=y/(4*g),A=(f=z?n.ceil(f):n.max((0|f)-this._minBufferSize,0))*g,z=n.min(4*A,y);if(A){for(var M=0;M<A;M+=g)this._doProcessBlock(u,M);var C=u.splice(0,A);l.sigBytes-=z}return new B.init(C,z)},clone:function(){var s=i.clone.call(this);return s._data=this._data.clone(),s},_minBufferSize:0}),d=(c.Hasher=w.extend({cfg:i.extend(),init:function(s){this.cfg=this.cfg.extend(s),this.reset()},reset:function(){w.reset.call(this),this._doReset()},update:function(s){return this._append(s),this._process(),this},finalize:function(s){return s&&this._append(s),this._doFinalize()},blockSize:16,_createHelper:function(s){return function(l,u){return new s.init(u).finalize(l)}},_createHmacHelper:function(s){return function(l,u){return new d.HMAC.init(s,u).finalize(l)}}}),h.algo={});return h}(Math);(function(){var n=R.lib.WordArray;R.enc.Base64={stringify:function(r){for(var{words:t,sigBytes:h}=r,c=this._map,i=(r.clamp(),[]),B=0;B<h;B+=3)for(var e=(t[B>>>2]>>>24-B%4*8&255)<<16|(t[B+1>>>2]>>>24-(B+1)%4*8&255)<<8|t[B+2>>>2]>>>24-(B+2)%4*8&255,_=0;_<4&&B+0.75*_<h;_++)i.push(c.charAt(e>>>6*(3-_)&63));var o=c.charAt(64);if(o)for(;i.length%4;)i.push(o);return i.join("")},parse:function(r){var t=r.length,h=this._map;if(!(c=this._reverseMap))for(var c=this._reverseMap=[],i=0;i<h.length;i++)c[h.charCodeAt(i)]=i;for(var B,e,_=h.charAt(64),o=(_&&(_=r.indexOf(_))!==-1&&(t=_),r),v=t,w=c,d=[],s=0,l=0;l<v;l++)l%4&&(B=w[o.charCodeAt(l-1)]<<l%4*2,e=w[o.charCodeAt(l)]>>>6-l%4*2,d[s>>>2]|=(B|e)<<24-s%4*8,s++);return n.create(d,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})(),function(n){for(var r=R,c=r.lib,t=c.WordArray,h=c.Hasher,c=r.algo,i=[],B=0;B<64;B++)i[B]=4294967296*n.abs(n.sin(B+1))|0;c=c.MD5=h.extend({_doReset:function(){this._hash=new t.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(w,d){for(var s=0;s<16;s++){var l=d+s,u=w[l];w[l]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var y=this._hash.words,g=w[d+0],f=w[d+1],A=w[d+2],z=w[d+3],M=w[d+4],C=w[d+5],b=w[d+6],E=w[d+7],D=w[d+8],L=w[d+9],Z=w[d+10],K=w[d+11],I=w[d+12],W=w[d+13],X=w[d+14],N=w[d+15],k=e(y[0],p=y[1],S=y[2],H=y[3],g,7,i[0]),H=e(H,k,p,S,f,12,i[1]),S=e(S,H,k,p,A,17,i[2]),p=e(p,S,H,k,z,22,i[3]);k=e(k,p,S,H,M,7,i[4]),H=e(H,k,p,S,C,12,i[5]),S=e(S,H,k,p,b,17,i[6]),p=e(p,S,H,k,E,22,i[7]),k=e(k,p,S,H,D,7,i[8]),H=e(H,k,p,S,L,12,i[9]),S=e(S,H,k,p,Z,17,i[10]),p=e(p,S,H,k,K,22,i[11]),k=e(k,p,S,H,I,7,i[12]),H=e(H,k,p,S,W,12,i[13]),S=e(S,H,k,p,X,17,i[14]),k=_(k,p=e(p,S,H,k,N,22,i[15]),S,H,f,5,i[16]),H=_(H,k,p,S,b,9,i[17]),S=_(S,H,k,p,K,14,i[18]),p=_(p,S,H,k,g,20,i[19]),k=_(k,p,S,H,C,5,i[20]),H=_(H,k,p,S,Z,9,i[21]),S=_(S,H,k,p,N,14,i[22]),p=_(p,S,H,k,M,20,i[23]),k=_(k,p,S,H,L,5,i[24]),H=_(H,k,p,S,X,9,i[25]),S=_(S,H,k,p,z,14,i[26]),p=_(p,S,H,k,D,20,i[27]),k=_(k,p,S,H,W,5,i[28]),H=_(H,k,p,S,A,9,i[29]),S=_(S,H,k,p,E,14,i[30]),k=o(k,p=_(p,S,H,k,I,20,i[31]),S,H,C,4,i[32]),H=o(H,k,p,S,D,11,i[33]),S=o(S,H,k,p,K,16,i[34]),p=o(p,S,H,k,X,23,i[35]),k=o(k,p,S,H,f,4,i[36]),H=o(H,k,p,S,M,11,i[37]),S=o(S,H,k,p,E,16,i[38]),p=o(p,S,H,k,Z,23,i[39]),k=o(k,p,S,H,W,4,i[40]),H=o(H,k,p,S,g,11,i[41]),S=o(S,H,k,p,z,16,i[42]),p=o(p,S,H,k,b,23,i[43]),k=o(k,p,S,H,L,4,i[44]),H=o(H,k,p,S,I,11,i[45]),S=o(S,H,k,p,N,16,i[46]),k=v(k,p=o(p,S,H,k,A,23,i[47]),S,H,g,6,i[48]),H=v(H,k,p,S,E,10,i[49]),S=v(S,H,k,p,X,15,i[50]),p=v(p,S,H,k,C,21,i[51]),k=v(k,p,S,H,I,6,i[52]),H=v(H,k,p,S,z,10,i[53]),S=v(S,H,k,p,Z,15,i[54]),p=v(p,S,H,k,f,21,i[55]),k=v(k,p,S,H,D,6,i[56]),H=v(H,k,p,S,N,10,i[57]),S=v(S,H,k,p,b,15,i[58]),p=v(p,S,H,k,W,21,i[59]),k=v(k,p,S,H,M,6,i[60]),H=v(H,k,p,S,K,10,i[61]),S=v(S,H,k,p,A,15,i[62]),p=v(p,S,H,k,L,21,i[63]),y[0]=y[0]+k|0,y[1]=y[1]+p|0,y[2]=y[2]+S|0,y[3]=y[3]+H|0},_doFinalize:function(){for(var w=this._data,d=w.words,s=8*this._nDataBytes,l=8*w.sigBytes,u=(d[l>>>5]|=128<<24-l%32,n.floor(s/4294967296)),u=(d[15+(64+l>>>9<<4)]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8),d[14+(64+l>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),w.sigBytes=4*(d.length+1),this._process(),this._hash),y=u.words,g=0;g<4;g++){var f=y[g];y[g]=16711935&(f<<8|f>>>24)|4278255360&(f<<24|f>>>8)}return u},clone:function(){var w=h.clone.call(this);return w._hash=this._hash.clone(),w}});function e(w,d,s,l,u,y,g){return w=w+(d&s|~d&l)+u+g,(w<<y|w>>>32-y)+d}function _(w,d,s,l,u,y,g){return w=w+(d&l|s&~l)+u+g,(w<<y|w>>>32-y)+d}function o(w,d,s,l,u,y,g){return w=w+(d^s^l)+u+g,(w<<y|w>>>32-y)+d}function v(w,d,s,l,u,y,g){return w=w+(s^(d|~l))+u+g,(w<<y|w>>>32-y)+d}r.MD5=h._createHelper(c),r.HmacMD5=h._createHmacHelper(c)}(Math),function(){var n=R,c=n.lib,r=c.WordArray,t=c.Hasher,c=n.algo,h=[],c=c.SHA1=t.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(i,B){for(var e=this._hash.words,_=e[0],o=e[1],v=e[2],w=e[3],d=e[4],s=0;s<80;s++){h[s]=s<16?0|i[B+s]:(l=h[s-3]^h[s-8]^h[s-14]^h[s-16])<<1|l>>>31;var l=(_<<5|_>>>27)+d+h[s];l+=s<20?1518500249+(o&v|~o&w):s<40?1859775393+(o^v^w):s<60?(o&v|o&w|v&w)-1894007588:(o^v^w)-899497514,d=w,w=v,v=o<<30|o>>>2,o=_,_=l}e[0]=e[0]+_|0,e[1]=e[1]+o|0,e[2]=e[2]+v|0,e[3]=e[3]+w|0,e[4]=e[4]+d|0},_doFinalize:function(){var i=this._data,B=i.words,e=8*this._nDataBytes,_=8*i.sigBytes;return B[_>>>5]|=128<<24-_%32,B[14+(64+_>>>9<<4)]=Math.floor(e/4294967296),B[15+(64+_>>>9<<4)]=e,i.sigBytes=4*B.length,this._process(),this._hash},clone:function(){var i=t.clone.call(this);return i._hash=this._hash.clone(),i}});n.SHA1=t._createHelper(c),n.HmacSHA1=t._createHmacHelper(c)}(),function(n){var r=R,v=r.lib,t=v.WordArray,h=v.Hasher,v=r.algo,c=[],i=[];function B(w){return 4294967296*(w-(0|w))|0}for(var e=2,_=0;_<64;)!function(w){for(var d=n.sqrt(w),s=2;s<=d;s++)if(!(w%s))return;return 1}(e)||(_<8&&(c[_]=B(n.pow(e,0.5))),i[_]=B(n.pow(e,0.3333333333333333)),_++),e++;var o=[],v=v.SHA256=h.extend({_doReset:function(){this._hash=new t.init(c.slice(0))},_doProcessBlock:function(w,d){for(var s=this._hash.words,l=s[0],u=s[1],y=s[2],g=s[3],f=s[4],A=s[5],z=s[6],M=s[7],C=0;C<64;C++){o[C]=C<16?0|w[d+C]:(((b=o[C-15])<<25|b>>>7)^(b<<14|b>>>18)^b>>>3)+o[C-7]+(((b=o[C-2])<<15|b>>>17)^(b<<13|b>>>19)^b>>>10)+o[C-16];var b=l&u^l&y^u&y,E=M+((f<<26|f>>>6)^(f<<21|f>>>11)^(f<<7|f>>>25))+(f&A^~f&z)+i[C]+o[C],M=z,z=A,A=f,f=g+E|0,g=y,y=u,u=l,l=E+(((l<<30|l>>>2)^(l<<19|l>>>13)^(l<<10|l>>>22))+b)|0}s[0]=s[0]+l|0,s[1]=s[1]+u|0,s[2]=s[2]+y|0,s[3]=s[3]+g|0,s[4]=s[4]+f|0,s[5]=s[5]+A|0,s[6]=s[6]+z|0,s[7]=s[7]+M|0},_doFinalize:function(){var w=this._data,d=w.words,s=8*this._nDataBytes,l=8*w.sigBytes;return d[l>>>5]|=128<<24-l%32,d[14+(64+l>>>9<<4)]=n.floor(s/4294967296),d[15+(64+l>>>9<<4)]=s,w.sigBytes=4*d.length,this._process(),this._hash},clone:function(){var w=h.clone.call(this);return w._hash=this._hash.clone(),w}});r.SHA256=h._createHelper(v),r.HmacSHA256=h._createHmacHelper(v)}(Math),function(){var n=R.lib.WordArray,r=R.enc;r.Utf16=r.Utf16BE={stringify:function(h){for(var{words:c,sigBytes:i}=h,B=[],e=0;e<i;e+=2){var _=c[e>>>2]>>>16-e%4*8&65535;B.push(String.fromCharCode(_))}return B.join("")},parse:function(h){for(var c=h.length,i=[],B=0;B<c;B++)i[B>>>1]|=h.charCodeAt(B)<<16-B%2*16;return n.create(i,2*c)}};function t(h){return h<<8&4278255360|h>>>8&16711935}r.Utf16LE={stringify:function(h){for(var{words:c,sigBytes:i}=h,B=[],e=0;e<i;e+=2){var _=t(c[e>>>2]>>>16-e%4*8&65535);B.push(String.fromCharCode(_))}return B.join("")},parse:function(h){for(var c=h.length,i=[],B=0;B<c;B++)i[B>>>1]|=t(h.charCodeAt(B)<<16-B%2*16);return n.create(i,2*c)}}}(),function(){var n,r;typeof ArrayBuffer=="function"&&(n=R.lib.WordArray,r=n.init,(n.init=function(t){if((t=(t=t instanceof ArrayBuffer?new Uint8Array(t):t)instanceof Int8Array||typeof Uint8ClampedArray<"u"&&t instanceof Uint8ClampedArray||t instanceof Int16Array||t instanceof Uint16Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Float32Array||t instanceof Float64Array?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):t)instanceof Uint8Array){for(var h=t.byteLength,c=[],i=0;i<h;i++)c[i>>>2]|=t[i]<<24-i%4*8;r.call(this,c,h)}else r.apply(this,arguments)}).prototype=n)}(),function(){var n=R,o=n.lib,r=o.WordArray,t=o.Hasher,o=n.algo,h=r.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),c=r.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),i=r.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),B=r.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),e=r.create([0,1518500249,1859775393,2400959708,2840853838]),_=r.create([1352829926,1548603684,1836072691,2053994217,0]),o=o.RIPEMD160=t.extend({_doReset:function(){this._hash=r.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(s,l){for(var u=0;u<16;u++){var y=l+u,g=s[y];s[y]=16711935&(g<<8|g>>>24)|4278255360&(g<<24|g>>>8)}for(var f,A,z,M,C,b,E=this._hash.words,D=e.words,L=_.words,Z=h.words,K=c.words,I=i.words,W=B.words,X=f=E[0],N=A=E[1],k=z=E[2],H=M=E[3],S=C=E[4],u=0;u<80;u+=1)b=(b=d(b=(b=f+s[l+Z[u]]|0)+(u<16?(A^z^M)+D[0]:u<32?v(A,z,M)+D[1]:u<48?((A|~z)^M)+D[2]:u<64?w(A,z,M)+D[3]:(A^(z|~M))+D[4])|0,I[u]))+C|0,f=C,C=M,M=d(z,10),z=A,A=b,b=(b=d(b=(b=X+s[l+K[u]]|0)+(u<16?(N^(k|~H))+L[0]:u<32?w(N,k,H)+L[1]:u<48?((N|~k)^H)+L[2]:u<64?v(N,k,H)+L[3]:(N^k^H)+L[4])|0,W[u]))+S|0,X=S,S=H,H=d(k,10),k=N,N=b;b=E[1]+z+H|0,E[1]=E[2]+M+S|0,E[2]=E[3]+C+X|0,E[3]=E[4]+f+N|0,E[4]=E[0]+A+k|0,E[0]=b},_doFinalize:function(){for(var s=this._data,l=s.words,u=8*this._nDataBytes,y=8*s.sigBytes,y=(l[y>>>5]|=128<<24-y%32,l[14+(64+y>>>9<<4)]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8),s.sigBytes=4*(l.length+1),this._process(),this._hash),g=y.words,f=0;f<5;f++){var A=g[f];g[f]=16711935&(A<<8|A>>>24)|4278255360&(A<<24|A>>>8)}return y},clone:function(){var s=t.clone.call(this);return s._hash=this._hash.clone(),s}});function v(s,l,u){return s&l|~s&u}function w(s,l,u){return s&u|l&~u}function d(s,l){return s<<l|s>>>32-l}n.RIPEMD160=t._createHelper(o),n.HmacRIPEMD160=t._createHmacHelper(o)}(Math),function(){var n=R.lib.Base,r=R.enc.Utf8;R.algo.HMAC=n.extend({init:function(t,h){t=this._hasher=new t.init,typeof h=="string"&&(h=r.parse(h));for(var c=t.blockSize,i=4*c,t=((h=h.sigBytes>i?t.finalize(h):h).clamp(),this._oKey=h.clone()),h=this._iKey=h.clone(),B=t.words,e=h.words,_=0;_<c;_++)B[_]^=1549556828,e[_]^=909522486;t.sigBytes=h.sigBytes=i,this.reset()},reset:function(){var t=this._hasher;t.reset(),t.update(this._iKey)},update:function(t){return this._hasher.update(t),this},finalize:function(c){var h=this._hasher,c=h.finalize(c);return h.reset(),h.finalize(this._oKey.clone().concat(c))}})}(),function(){var n=R,h=n.lib,r=h.Base,t=h.WordArray,h=n.algo,c=h.SHA1,i=h.HMAC,B=h.PBKDF2=r.extend({cfg:r.extend({keySize:4,hasher:c,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,_){for(var o=this.cfg,v=i.create(o.hasher,e),w=t.create(),d=t.create([1]),s=w.words,l=d.words,u=o.keySize,y=o.iterations;s.length<u;){for(var g=v.update(_).finalize(d),f=(v.reset(),g.words),A=f.length,z=g,M=1;M<y;M++){z=v.finalize(z),v.reset();for(var C=z.words,b=0;b<A;b++)f[b]^=C[b]}w.concat(g),l[0]++}return w.sigBytes=4*u,w}});n.PBKDF2=function(e,_,o){return B.create(o).compute(e,_)}}(),function(){var n=R,h=n.lib,r=h.Base,t=h.WordArray,h=n.algo,c=h.MD5,i=h.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:c,iterations:1}),init:function(B){this.cfg=this.cfg.extend(B)},compute:function(B,e){for(var _=this.cfg,o=_.hasher.create(),v=t.create(),w=v.words,d=_.keySize,s=_.iterations;w.length<d;){l&&o.update(l);var l=o.update(B).finalize(e);o.reset();for(var u=1;u<s;u++)l=o.finalize(l),o.reset();v.concat(l)}return v.sigBytes=4*d,v}});n.EvpKDF=function(B,e,_){return i.create(_).compute(B,e)}}(),function(){var n=R,r=n.lib.WordArray,h=n.algo,t=h.SHA256,h=h.SHA224=t.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var c=t._doFinalize.call(this);return c.sigBytes-=4,c}});n.SHA224=t._createHelper(h),n.HmacSHA224=t._createHmacHelper(h)}(),function(){var n=R,h=n.lib,r=h.Base,t=h.WordArray,h=n.x64={};h.Word=r.extend({init:function(c,i){this.high=c,this.low=i}}),h.WordArray=r.extend({init:function(c,i){c=this.words=c||[],this.sigBytes=i!=null?i:8*c.length},toX32:function(){for(var c=this.words,i=c.length,B=[],e=0;e<i;e++){var _=c[e];B.push(_.high),B.push(_.low)}return t.create(B,this.sigBytes)},clone:function(){for(var c=r.clone.call(this),i=c.words=this.words.slice(0),B=i.length,e=0;e<B;e++)i[e]=i[e].clone();return c}})}(),function(n){for(var r=R,i=r.lib,t=i.WordArray,h=i.Hasher,c=r.x64.Word,i=r.algo,B=[],e=[],_=[],o=1,v=0,w=0;w<24;w++){B[o+5*v]=(w+1)*(w+2)/2%64;var d=(2*o+3*v)%5;o=v%5,v=d}for(o=0;o<5;o++)for(v=0;v<5;v++)e[o+5*v]=v+(2*o+3*v)%5*5;for(var s=1,l=0;l<24;l++){for(var u,y=0,g=0,f=0;f<7;f++)1&s&&((u=(1<<f)-1)<32?g^=1<<u:y^=1<<u-32),128&s?s=s<<1^113:s<<=1;_[l]=c.create(y,g)}for(var A=[],z=0;z<25;z++)A[z]=c.create();i=i.SHA3=h.extend({cfg:h.cfg.extend({outputLength:512}),_doReset:function(){for(var M=this._state=[],C=0;C<25;C++)M[C]=new c.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(M,C){for(var b=this._state,E=this.blockSize/2,D=0;D<E;D++){var Z=M[C+2*D],L=M[C+2*D+1],Z=16711935&(Z<<8|Z>>>24)|4278255360&(Z<<24|Z>>>8);($=b[D]).high^=16711935&(L<<8|L>>>24)|4278255360&(L<<24|L>>>8),$.low^=Z}for(var K=0;K<24;K++){for(var I=0;I<5;I++){for(var W=0,X=0,N=0;N<5;N++)W^=($=b[I+5*N]).high,X^=$.low;var k=A[I];k.high=W,k.low=X}for(I=0;I<5;I++)for(var H=A[(I+4)%5],p=A[(I+1)%5],S=p.high,p=p.low,W=H.high^(S<<1|p>>>31),X=H.low^(p<<1|S>>>31),N=0;N<5;N++)($=b[I+5*N]).high^=W,$.low^=X;for(var Y=1;Y<25;Y++){var Q=($=b[Y]).high,J=$.low,U=B[Y],Q=(X=U<32?(W=Q<<U|J>>>32-U,J<<U|Q>>>32-U):(W=J<<U-32|Q>>>64-U,Q<<U-32|J>>>64-U),A[e[Y]]);Q.high=W,Q.low=X}var G=A[0],O=b[0];G.high=O.high,G.low=O.low;for(I=0;I<5;I++)for(N=0;N<5;N++){var $=b[Y=I+5*N],j=A[Y],x=A[(I+1)%5+5*N],c1=A[(I+2)%5+5*N];$.high=j.high^~x.high&c1.high,$.low=j.low^~x.low&c1.low}$=b[0],G=_[K],$.high^=G.high,$.low^=G.low}},_doFinalize:function(){for(var M=this._data,C=M.words,D=(this._nDataBytes,8*M.sigBytes),b=32*this.blockSize,E=(C[D>>>5]|=1<<24-D%32,C[(n.ceil((1+D)/b)*b>>>5)-1]|=128,M.sigBytes=4*C.length,this._process(),this._state),D=this.cfg.outputLength/8,L=D/8,Z=[],K=0;K<L;K++){var I=E[K],W=I.high,I=I.low,W=16711935&(W<<8|W>>>24)|4278255360&(W<<24|W>>>8);Z.push(16711935&(I<<8|I>>>24)|4278255360&(I<<24|I>>>8)),Z.push(W)}return new t.init(Z,D)},clone:function(){for(var M=h.clone.call(this),C=M._state=this._state.slice(0),b=0;b<25;b++)C[b]=C[b].clone();return M}}),r.SHA3=h._createHelper(i),r.HmacSHA3=h._createHmacHelper(i)}(Math),function(){var n=R,r=n.lib.Hasher,c=n.x64,t=c.Word,h=c.WordArray,c=n.algo;function i(){return t.create.apply(t,arguments)}for(var B=[i(1116352408,3609767458),i(1899447441,602891725),i(3049323471,3964484399),i(3921009573,2173295548),i(961987163,4081628472),i(1508970993,3053834265),i(2453635748,2937671579),i(2870763221,3664609560),i(3624381080,2734883394),i(310598401,1164996542),i(607225278,1323610764),i(1426881987,3590304994),i(1925078388,4068182383),i(2162078206,991336113),i(2614888103,633803317),i(3248222580,3479774868),i(3835390401,2666613458),i(4022224774,944711139),i(264347078,2341262773),i(604807628,2007800933),i(770255983,1495990901),i(1249150122,1856431235),i(1555081692,3175218132),i(1996064986,2198950837),i(2554220882,3999719339),i(2821834349,766784016),i(2952996808,2566594879),i(3210313671,3203337956),i(3336571891,1034457026),i(3584528711,2466948901),i(113926993,3758326383),i(338241895,168717936),i(666307205,1188179964),i(773529912,1546045734),i(1294757372,1522805485),i(1396182291,2643833823),i(1695183700,2343527390),i(1986661051,1014477480),i(2177026350,1206759142),i(2456956037,344077627),i(2730485921,1290863460),i(2820302411,3158454273),i(3259730800,3505952657),i(3345764771,106217008),i(3516065817,3606008344),i(3600352804,1432725776),i(4094571909,1467031594),i(275423344,851169720),i(430227734,3100823752),i(506948616,1363258195),i(659060556,3750685593),i(883997877,3785050280),i(958139571,3318307427),i(1322822218,3812723403),i(1537002063,2003034995),i(1747873779,3602036899),i(1955562222,1575990012),i(2024104815,1125592928),i(2227730452,2716904306),i(2361852424,442776044),i(2428436474,593698344),i(2756734187,3733110249),i(3204031479,2999351573),i(3329325298,3815920427),i(3391569614,3928383900),i(3515267271,566280711),i(3940187606,3454069534),i(4118630271,4000239992),i(116418474,1914138554),i(174292421,2731055270),i(289380356,3203993006),i(460393269,320620315),i(685471733,587496836),i(852142971,1086792851),i(1017036298,365543100),i(1126000580,2618297676),i(1288033470,3409855158),i(1501505948,4234509866),i(1607167915,987167468),i(1816402316,1246189591)],e=[],_=0;_<80;_++)e[_]=i();c=c.SHA512=r.extend({_doReset:function(){this._hash=new h.init([new t.init(1779033703,4089235720),new t.init(3144134277,2227873595),new t.init(1013904242,4271175723),new t.init(2773480762,1595750129),new t.init(1359893119,2917565137),new t.init(2600822924,725511199),new t.init(528734635,4215389547),new t.init(1541459225,327033209)])},_doProcessBlock:function(o,v){for(var f=this._hash.words,w=f[0],d=f[1],s=f[2],l=f[3],u=f[4],y=f[5],g=f[6],f=f[7],A=w.high,z=w.low,M=d.high,C=d.low,b=s.high,E=s.low,D=l.high,L=l.low,Z=u.high,K=u.low,I=y.high,W=y.low,X=g.high,N=g.low,k=f.high,H=f.low,P=A,S=z,_1=M,n1=C,s1=b,m=E,H1=D,e1=L,V=Z,p=K,B1=I,t1=W,y1=X,r1=N,S1=k,h1=H,Y=0;Y<80;Y++)var J,U,x=e[Y],Q=(Y<16?(U=x.high=0|o[v+2*Y],J=x.low=0|o[v+2*Y+1]):(O=(j=e[Y-15]).high,j=j.low,G=(Q=e[Y-2]).high,Q=Q.low,U=(U=(U=((O>>>1|j<<31)^(O>>>8|j<<24)^O>>>7)+($=e[Y-7]).high+((J=(j=(j>>>1|O<<31)^(j>>>8|O<<24)^(j>>>7|O<<25))+$.low)>>>0<j>>>0?1:0))+((G>>>19|Q<<13)^(G<<3|Q>>>29)^G>>>6)+((J=J+(O=(Q>>>19|G<<13)^(Q<<3|G>>>29)^(Q>>>6|G<<26)))>>>0<O>>>0?1:0))+($=e[Y-16]).high+((J=J+(j=$.low))>>>0<j>>>0?1:0),x.high=U,x.low=J),V&B1^~V&y1),G=p&t1^~p&r1,O=P&_1^P&s1^_1&s1,$=(S>>>28|P<<4)^(S<<30|P>>>2)^(S<<25|P>>>7),j=B[Y],x=j.high,c1=j.low,T=h1+((p>>>14|V<<18)^(p>>>18|V<<14)^(p<<23|V>>>9)),g1=S1+((V>>>14|p<<18)^(V>>>18|p<<14)^(V<<23|p>>>9))+(T>>>0<h1>>>0?1:0),C1=$+(S&n1^S&m^n1&m),S1=y1,h1=r1,y1=B1,r1=t1,B1=V,t1=p,V=H1+(g1=g1+Q+((T=T+G)>>>0<G>>>0?1:0)+x+((T=T+c1)>>>0<c1>>>0?1:0)+U+((T=T+J)>>>0<J>>>0?1:0))+((p=e1+T|0)>>>0<e1>>>0?1:0)|0,H1=s1,e1=m,s1=_1,m=n1,_1=P,n1=S,P=g1+(((P>>>28|S<<4)^(P<<30|S>>>2)^(P<<25|S>>>7))+O+(C1>>>0<$>>>0?1:0))+((S=T+C1|0)>>>0<T>>>0?1:0)|0;z=w.low=z+S,w.high=A+P+(z>>>0<S>>>0?1:0),C=d.low=C+n1,d.high=M+_1+(C>>>0<n1>>>0?1:0),E=s.low=E+m,s.high=b+s1+(E>>>0<m>>>0?1:0),L=l.low=L+e1,l.high=D+H1+(L>>>0<e1>>>0?1:0),K=u.low=K+p,u.high=Z+V+(K>>>0<p>>>0?1:0),W=y.low=W+t1,y.high=I+B1+(W>>>0<t1>>>0?1:0),N=g.low=N+r1,g.high=X+y1+(N>>>0<r1>>>0?1:0),H=f.low=H+h1,f.high=k+S1+(H>>>0<h1>>>0?1:0)},_doFinalize:function(){var o=this._data,v=o.words,w=8*this._nDataBytes,d=8*o.sigBytes;return v[d>>>5]|=128<<24-d%32,v[30+(128+d>>>10<<5)]=Math.floor(w/4294967296),v[31+(128+d>>>10<<5)]=w,o.sigBytes=4*v.length,this._process(),this._hash.toX32()},clone:function(){var o=r.clone.call(this);return o._hash=this._hash.clone(),o},blockSize:32}),n.SHA512=r._createHelper(c),n.HmacSHA512=r._createHmacHelper(c)}(),function(){var n=R,c=n.x64,r=c.Word,t=c.WordArray,c=n.algo,h=c.SHA512,c=c.SHA384=h.extend({_doReset:function(){this._hash=new t.init([new r.init(3418070365,3238371032),new r.init(1654270250,914150663),new r.init(2438529370,812702999),new r.init(355462360,4144912697),new r.init(1731405415,4290775857),new r.init(2394180231,1750603025),new r.init(3675008525,1694076839),new r.init(1203062813,3204075428)])},_doFinalize:function(){var i=h._doFinalize.call(this);return i.sigBytes-=16,i}});n.SHA384=h._createHelper(c),n.HmacSHA384=h._createHmacHelper(c)}(),R.lib.Cipher||function(){var n=R,r=n.lib,t=r.Base,h=r.WordArray,c=r.BufferedBlockAlgorithm,s=n.enc,i=(s.Utf8,s.Base64),B=n.algo.EvpKDF,e=r.Cipher=c.extend({cfg:t.extend(),createEncryptor:function(u,y){return this.create(this._ENC_XFORM_MODE,u,y)},createDecryptor:function(u,y){return this.create(this._DEC_XFORM_MODE,u,y)},init:function(u,y,g){this.cfg=this.cfg.extend(g),this._xformMode=u,this._key=y,this.reset()},reset:function(){c.reset.call(this),this._doReset()},process:function(u){return this._append(u),this._process()},finalize:function(u){return u&&this._append(u),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(u){return{encrypt:function(y,g,f){return _(g).encrypt(u,y,g,f)},decrypt:function(y,g,f){return _(g).decrypt(u,y,g,f)}}}});function _(u){return typeof u=="string"?l:d}r.StreamCipher=e.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var s=n.mode={},w=r.BlockCipherMode=t.extend({createEncryptor:function(u,y){return this.Encryptor.create(u,y)},createDecryptor:function(u,y){return this.Decryptor.create(u,y)},init:function(u,y){this._cipher=u,this._iv=y}}),w=s.CBC=((s=w.extend()).Encryptor=s.extend({processBlock:function(u,y){var g=this._cipher,f=g.blockSize;o.call(this,u,y,f),g.encryptBlock(u,y),this._prevBlock=u.slice(y,y+f)}}),s.Decryptor=s.extend({processBlock:function(u,y){var g=this._cipher,f=g.blockSize,A=u.slice(y,y+f);g.decryptBlock(u,y),o.call(this,u,y,f),this._prevBlock=A}}),s);function o(u,y,g){var f,A=this._iv;A?(f=A,this._iv=void 0):f=this._prevBlock;for(var z=0;z<g;z++)u[y+z]^=f[z]}var s=(n.pad={}).Pkcs7={pad:function(u,y){for(var y=4*y,g=y-u.sigBytes%y,f=g<<24|g<<16|g<<8|g,A=[],z=0;z<g;z+=4)A.push(f);y=h.create(A,g),u.concat(y)},unpad:function(u){var y=255&u.words[u.sigBytes-1>>>2];u.sigBytes-=y}},v=(r.BlockCipher=e.extend({cfg:e.cfg.extend({mode:w,padding:s}),reset:function(){e.reset.call(this);var u,g=this.cfg,y=g.iv,g=g.mode;this._xformMode==this._ENC_XFORM_MODE?u=g.createEncryptor:(u=g.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==u?this._mode.init(this,y&&y.words):(this._mode=u.call(g,this,y&&y.words),this._mode.__creator=u)},_doProcessBlock:function(u,y){this._mode.processBlock(u,y)},_doFinalize:function(){var u,y=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(y.pad(this._data,this.blockSize),u=this._process(!0)):(u=this._process(!0),y.unpad(u)),u},blockSize:4}),r.CipherParams=t.extend({init:function(u){this.mixIn(u)},toString:function(u){return(u||this.formatter).stringify(this)}})),w=(n.format={}).OpenSSL={stringify:function(g){var{ciphertext:y,salt:g}=g;return(g?h.create([1398893684,1701076831]).concat(g).concat(y):y).toString(i)},parse:function(g){var y,g=i.parse(g),f=g.words;return f[0]==1398893684&&f[1]==1701076831&&(y=h.create(f.slice(2,4)),f.splice(0,4),g.sigBytes-=16),v.create({ciphertext:g,salt:y})}},d=r.SerializableCipher=t.extend({cfg:t.extend({format:w}),encrypt:function(u,A,g,f){f=this.cfg.extend(f);var z=u.createEncryptor(g,f),A=z.finalize(A),z=z.cfg;return v.create({ciphertext:A,key:g,iv:z.iv,algorithm:u,mode:z.mode,padding:z.padding,blockSize:u.blockSize,formatter:f.format})},decrypt:function(u,y,g,f){return f=this.cfg.extend(f),y=this._parse(y,f.format),u.createDecryptor(g,f).finalize(y.ciphertext)},_parse:function(u,y){return typeof u=="string"?y.parse(u,this):u}}),s=(n.kdf={}).OpenSSL={execute:function(u,y,g,f){return f=f||h.random(8),u=B.create({keySize:y+g}).compute(u,f),g=h.create(u.words.slice(y),4*g),u.sigBytes=4*y,v.create({key:u,iv:g,salt:f})}},l=r.PasswordBasedCipher=d.extend({cfg:d.cfg.extend({kdf:s}),encrypt:function(u,y,g,f){return g=(f=this.cfg.extend(f)).kdf.execute(g,u.keySize,u.ivSize),f.iv=g.iv,u=d.encrypt.call(this,u,y,g.key,f),u.mixIn(g),u},decrypt:function(u,y,g,f){return f=this.cfg.extend(f),y=this._parse(y,f.format),g=f.kdf.execute(g,u.keySize,u.ivSize,y.salt),f.iv=g.iv,d.decrypt.call(this,u,y,g.key,f)}})}(),R.mode.CFB=function(){var n=R.lib.BlockCipherMode.extend();function r(t,h,c,i){var B,e=this._iv;e?(B=e.slice(0),this._iv=void 0):B=this._prevBlock,i.encryptBlock(B,0);for(var _=0;_<c;_++)t[h+_]^=B[_]}return n.Encryptor=n.extend({processBlock:function(t,h){var c=this._cipher,i=c.blockSize;r.call(this,t,h,i,c),this._prevBlock=t.slice(h,h+i)}}),n.Decryptor=n.extend({processBlock:function(t,h){var c=this._cipher,i=c.blockSize,B=t.slice(h,h+i);r.call(this,t,h,i,c),this._prevBlock=B}}),n}(),R.mode.ECB=function(){var n=R.lib.BlockCipherMode.extend();return n.Encryptor=n.extend({processBlock:function(r,t){this._cipher.encryptBlock(r,t)}}),n.Decryptor=n.extend({processBlock:function(r,t){this._cipher.decryptBlock(r,t)}}),n}(),R.pad.AnsiX923={pad:function(n,t){var h=n.sigBytes,t=4*t,t=t-h%t,h=h+t-1;n.clamp(),n.words[h>>>2]|=t<<24-h%4*8,n.sigBytes+=t},unpad:function(n){var r=255&n.words[n.sigBytes-1>>>2];n.sigBytes-=r}},R.pad.Iso10126={pad:function(n,r){r*=4,r-=n.sigBytes%r,n.concat(R.lib.WordArray.random(r-1)).concat(R.lib.WordArray.create([r<<24],1))},unpad:function(n){var r=255&n.words[n.sigBytes-1>>>2];n.sigBytes-=r}},R.pad.Iso97971={pad:function(n,r){n.concat(R.lib.WordArray.create([2147483648],1)),R.pad.ZeroPadding.pad(n,r)},unpad:function(n){R.pad.ZeroPadding.unpad(n),n.sigBytes--}},R.mode.OFB=function(){var n=R.lib.BlockCipherMode.extend(),r=n.Encryptor=n.extend({processBlock:function(t,h){var c=this._cipher,i=c.blockSize,B=this._iv,e=this._keystream;B&&(e=this._keystream=B.slice(0),this._iv=void 0),c.encryptBlock(e,0);for(var _=0;_<i;_++)t[h+_]^=e[_]}});return n.Decryptor=r,n}(),R.pad.NoPadding={pad:function(){},unpad:function(){}},function(){var n=R.lib.CipherParams,r=R.enc.Hex;R.format.Hex={stringify:function(t){return t.ciphertext.toString(r)},parse:function(t){return t=r.parse(t),n.create({ciphertext:t})}}}(),function(){for(var n=R,r=n.lib.BlockCipher,C=n.algo,t=[],h=[],c=[],i=[],B=[],e=[],_=[],o=[],v=[],w=[],d=[],s=0;s<256;s++)d[s]=s<128?s<<1:s<<1^283;for(var l=0,u=0,s=0;s<256;s++){var y=u^u<<1^u<<2^u<<3^u<<4,g=d[h[t[l]=y=y>>>8^255&y^99]=l],f=d[g],A=d[f],z=257*d[y]^16843008*y;c[l]=z<<24|z>>>8,i[l]=z<<16|z>>>16,B[l]=z<<8|z>>>24,e[l]=z,_[y]=(z=16843009*A^65537*f^257*g^16843008*l)<<24|z>>>8,o[y]=z<<16|z>>>16,v[y]=z<<8|z>>>24,w[y]=z,l?(l=g^d[d[d[A^g]]],u^=d[d[u]]):l=u=1}var M=[0,1,2,4,8,16,32,64,128,27,54],C=C.AES=r.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var b=this._keyPriorReset=this._key,E=b.words,D=b.sigBytes/4,L=4*(1+(this._nRounds=6+D)),Z=this._keySchedule=[],K=0;K<L;K++)K<D?Z[K]=E[K]:(X=Z[K-1],K%D?6<D&&K%D==4&&(X=t[X>>>24]<<24|t[X>>>16&255]<<16|t[X>>>8&255]<<8|t[255&X]):(X=t[(X=X<<8|X>>>24)>>>24]<<24|t[X>>>16&255]<<16|t[X>>>8&255]<<8|t[255&X],X^=M[K/D|0]<<24),Z[K]=Z[K-D]^X);for(var I=this._invKeySchedule=[],W=0;W<L;W++){var X,K=L-W;X=W%4?Z[K]:Z[K-4],I[W]=W<4||K<=4?X:_[t[X>>>24]]^o[t[X>>>16&255]]^v[t[X>>>8&255]]^w[t[255&X]]}}},encryptBlock:function(b,E){this._doCryptBlock(b,E,this._keySchedule,c,i,B,e,t)},decryptBlock:function(b,E){var D=b[E+1],D=(b[E+1]=b[E+3],b[E+3]=D,this._doCryptBlock(b,E,this._invKeySchedule,_,o,v,w,h),b[E+1]);b[E+1]=b[E+3],b[E+3]=D},_doCryptBlock:function(b,E,D,L,Z,K,I,W){for(var X=this._nRounds,J=b[E]^D[0],U=b[E+1]^D[1],Q=b[E+2]^D[2],G=b[E+3]^D[3],N=4,k=1;k<X;k++)var H=L[J>>>24]^Z[U>>>16&255]^K[Q>>>8&255]^I[255&G]^D[N++],S=L[U>>>24]^Z[Q>>>16&255]^K[G>>>8&255]^I[255&J]^D[N++],p=L[Q>>>24]^Z[G>>>16&255]^K[J>>>8&255]^I[255&U]^D[N++],Y=L[G>>>24]^Z[J>>>16&255]^K[U>>>8&255]^I[255&Q]^D[N++],J=H,U=S,Q=p,G=Y;H=(W[J>>>24]<<24|W[U>>>16&255]<<16|W[Q>>>8&255]<<8|W[255&G])^D[N++],S=(W[U>>>24]<<24|W[Q>>>16&255]<<16|W[G>>>8&255]<<8|W[255&J])^D[N++],p=(W[Q>>>24]<<24|W[G>>>16&255]<<16|W[J>>>8&255]<<8|W[255&U])^D[N++],Y=(W[G>>>24]<<24|W[J>>>16&255]<<16|W[U>>>8&255]<<8|W[255&Q])^D[N++],b[E]=H,b[E+1]=S,b[E+2]=p,b[E+3]=Y},keySize:8});n.AES=r._createHelper(C)}(),function(){var n=R,t=n.lib,r=t.WordArray,t=t.BlockCipher,h=n.algo,c=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],i=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],B=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],e=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],_=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],o=h.DES=t.extend({_doReset:function(){for(var d=this._key.words,s=[],l=0;l<56;l++){var u=c[l]-1;s[l]=d[u>>>5]>>>31-u%32&1}for(var y=this._subKeys=[],g=0;g<16;g++){for(var f=y[g]=[],A=B[g],l=0;l<24;l++)f[l/6|0]|=s[(i[l]-1+A)%28]<<31-l%6,f[4+(l/6|0)]|=s[28+(i[l+24]-1+A)%28]<<31-l%6;f[0]=f[0]<<1|f[0]>>>31;for(l=1;l<7;l++)f[l]=f[l]>>>4*(l-1)+3;f[7]=f[7]<<5|f[7]>>>27}for(var z=this._invSubKeys=[],l=0;l<16;l++)z[l]=y[15-l]},encryptBlock:function(d,s){this._doCryptBlock(d,s,this._subKeys)},decryptBlock:function(d,s){this._doCryptBlock(d,s,this._invSubKeys)},_doCryptBlock:function(d,s,l){this._lBlock=d[s],this._rBlock=d[s+1],v.call(this,4,252645135),v.call(this,16,65535),w.call(this,2,858993459),w.call(this,8,16711935),v.call(this,1,1431655765);for(var u=0;u<16;u++){for(var y=l[u],g=this._lBlock,f=this._rBlock,A=0,z=0;z<8;z++)A|=e[z][((f^y[z])&_[z])>>>0];this._lBlock=f,this._rBlock=g^A}var M=this._lBlock;this._lBlock=this._rBlock,this._rBlock=M,v.call(this,1,1431655765),w.call(this,8,16711935),w.call(this,2,858993459),v.call(this,16,65535),v.call(this,4,252645135),d[s]=this._lBlock,d[s+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function v(d,s){s=(this._lBlock>>>d^this._rBlock)&s,this._rBlock^=s,this._lBlock^=s<<d}function w(d,s){s=(this._rBlock>>>d^this._lBlock)&s,this._lBlock^=s,this._rBlock^=s<<d}n.DES=t._createHelper(o),h=h.TripleDES=t.extend({_doReset:function(){var d=this._key.words;this._des1=o.createEncryptor(r.create(d.slice(0,2))),this._des2=o.createEncryptor(r.create(d.slice(2,4))),this._des3=o.createEncryptor(r.create(d.slice(4,6)))},encryptBlock:function(d,s){this._des1.encryptBlock(d,s),this._des2.decryptBlock(d,s),this._des3.encryptBlock(d,s)},decryptBlock:function(d,s){this._des3.decryptBlock(d,s),this._des2.encryptBlock(d,s),this._des1.decryptBlock(d,s)},keySize:6,ivSize:2,blockSize:2}),n.TripleDES=t._createHelper(h)}(),function(){var n=R,r=n.lib.StreamCipher,t=n.algo,h=t.RC4=r.extend({_doReset:function(){for(var i=this._key,B=i.words,e=i.sigBytes,_=this._S=[],o=0;o<256;o++)_[o]=o;for(var o=0,v=0;o<256;o++){var w=o%e,w=B[w>>>2]>>>24-w%4*8&255,v=(v+_[o]+w)%256,w=_[o];_[o]=_[v],_[v]=w}this._i=this._j=0},_doProcessBlock:function(i,B){i[B]^=c.call(this)},keySize:8,ivSize:0});function c(){for(var i=this._S,B=this._i,e=this._j,_=0,o=0;o<4;o++){var e=(e+i[B=(B+1)%256])%256,v=i[B];i[B]=i[e],i[e]=v,_|=i[(i[B]+i[e])%256]<<24-8*o}return this._i=B,this._j=e,_}n.RC4=r._createHelper(h),t=t.RC4Drop=h.extend({cfg:h.cfg.extend({drop:192}),_doReset:function(){h._doReset.call(this);for(var i=this.cfg.drop;0<i;i--)c.call(this)}}),n.RC4Drop=r._createHelper(t)}(),R.mode.CTRGladman=function(){var n=R.lib.BlockCipherMode.extend();function r(h){var c,i,B;return(h>>24&255)==255?(i=h>>8&255,B=255&h,(c=h>>16&255)===255?(c=0,i===255?(i=0,B===255?B=0:++B):++i):++c,h=0,h=(h+=c<<16)+(i<<8)+B):h+=16777216,h}var t=n.Encryptor=n.extend({processBlock:function(h,c){var i=this._cipher,B=i.blockSize,e=this._iv,_=this._counter,o=(e&&(_=this._counter=e.slice(0),this._iv=void 0),((e=_)[0]=r(e[0]))===0&&(e[1]=r(e[1])),_.slice(0));i.encryptBlock(o,0);for(var v=0;v<B;v++)h[c+v]^=o[v]}});return n.Decryptor=t,n}(),function(){var n=R,r=n.lib.StreamCipher,i=n.algo,t=[],h=[],c=[],i=i.Rabbit=r.extend({_doReset:function(){for(var e=this._key.words,_=this.cfg.iv,o=0;o<4;o++)e[o]=16711935&(e[o]<<8|e[o]>>>24)|4278255360&(e[o]<<24|e[o]>>>8);for(var v=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],w=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]],o=this._b=0;o<4;o++)B.call(this);for(o=0;o<8;o++)w[o]^=v[o+4&7];if(_){var _=_.words,d=_[0],_=_[1],d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),_=16711935&(_<<8|_>>>24)|4278255360&(_<<24|_>>>8),s=d>>>16|4294901760&_,l=_<<16|65535&d;w[0]^=d,w[1]^=s,w[2]^=_,w[3]^=l,w[4]^=d,w[5]^=s,w[6]^=_,w[7]^=l;for(o=0;o<4;o++)B.call(this)}},_doProcessBlock:function(e,_){var o=this._X;B.call(this),t[0]=o[0]^o[5]>>>16^o[3]<<16,t[1]=o[2]^o[7]>>>16^o[5]<<16,t[2]=o[4]^o[1]>>>16^o[7]<<16,t[3]=o[6]^o[3]>>>16^o[1]<<16;for(var v=0;v<4;v++)t[v]=16711935&(t[v]<<8|t[v]>>>24)|4278255360&(t[v]<<24|t[v]>>>8),e[_+v]^=t[v]},blockSize:4,ivSize:2});function B(){for(var e=this._X,_=this._C,o=0;o<8;o++)h[o]=_[o];_[0]=_[0]+1295307597+this._b|0,_[1]=_[1]+3545052371+(_[0]>>>0<h[0]>>>0?1:0)|0,_[2]=_[2]+886263092+(_[1]>>>0<h[1]>>>0?1:0)|0,_[3]=_[3]+1295307597+(_[2]>>>0<h[2]>>>0?1:0)|0,_[4]=_[4]+3545052371+(_[3]>>>0<h[3]>>>0?1:0)|0,_[5]=_[5]+886263092+(_[4]>>>0<h[4]>>>0?1:0)|0,_[6]=_[6]+1295307597+(_[5]>>>0<h[5]>>>0?1:0)|0,_[7]=_[7]+3545052371+(_[6]>>>0<h[6]>>>0?1:0)|0,this._b=_[7]>>>0<h[7]>>>0?1:0;for(o=0;o<8;o++){var v=e[o]+_[o],w=65535&v,d=v>>>16;c[o]=((w*w>>>17)+w*d>>>15)+d*d^((4294901760&v)*v|0)+((65535&v)*v|0)}e[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,e[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,e[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,e[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,e[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,e[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,e[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,e[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}n.Rabbit=r._createHelper(i)}(),R.mode.CTR=function(){var n=R.lib.BlockCipherMode.extend(),r=n.Encryptor=n.extend({processBlock:function(t,h){var c=this._cipher,i=c.blockSize,B=this._iv,e=this._counter,_=(B&&(e=this._counter=B.slice(0),this._iv=void 0),e.slice(0));c.encryptBlock(_,0),e[i-1]=e[i-1]+1|0;for(var o=0;o<i;o++)t[h+o]^=_[o]}});return n.Decryptor=r,n}(),function(){var n=R,r=n.lib.StreamCipher,i=n.algo,t=[],h=[],c=[],i=i.RabbitLegacy=r.extend({_doReset:function(){for(var e=this._key.words,_=this.cfg.iv,o=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],v=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]],w=this._b=0;w<4;w++)B.call(this);for(w=0;w<8;w++)v[w]^=o[w+4&7];if(_){var e=_.words,_=e[0],e=e[1],_=16711935&(_<<8|_>>>24)|4278255360&(_<<24|_>>>8),e=16711935&(e<<8|e>>>24)|4278255360&(e<<24|e>>>8),d=_>>>16|4294901760&e,s=e<<16|65535&_;v[0]^=_,v[1]^=d,v[2]^=e,v[3]^=s,v[4]^=_,v[5]^=d,v[6]^=e,v[7]^=s;for(w=0;w<4;w++)B.call(this)}},_doProcessBlock:function(e,_){var o=this._X;B.call(this),t[0]=o[0]^o[5]>>>16^o[3]<<16,t[1]=o[2]^o[7]>>>16^o[5]<<16,t[2]=o[4]^o[1]>>>16^o[7]<<16,t[3]=o[6]^o[3]>>>16^o[1]<<16;for(var v=0;v<4;v++)t[v]=16711935&(t[v]<<8|t[v]>>>24)|4278255360&(t[v]<<24|t[v]>>>8),e[_+v]^=t[v]},blockSize:4,ivSize:2});function B(){for(var e=this._X,_=this._C,o=0;o<8;o++)h[o]=_[o];_[0]=_[0]+1295307597+this._b|0,_[1]=_[1]+3545052371+(_[0]>>>0<h[0]>>>0?1:0)|0,_[2]=_[2]+886263092+(_[1]>>>0<h[1]>>>0?1:0)|0,_[3]=_[3]+1295307597+(_[2]>>>0<h[2]>>>0?1:0)|0,_[4]=_[4]+3545052371+(_[3]>>>0<h[3]>>>0?1:0)|0,_[5]=_[5]+886263092+(_[4]>>>0<h[4]>>>0?1:0)|0,_[6]=_[6]+1295307597+(_[5]>>>0<h[5]>>>0?1:0)|0,_[7]=_[7]+3545052371+(_[6]>>>0<h[6]>>>0?1:0)|0,this._b=_[7]>>>0<h[7]>>>0?1:0;for(o=0;o<8;o++){var v=e[o]+_[o],w=65535&v,d=v>>>16;c[o]=((w*w>>>17)+w*d>>>15)+d*d^((4294901760&v)*v|0)+((65535&v)*v|0)}e[0]=c[0]+(c[7]<<16|c[7]>>>16)+(c[6]<<16|c[6]>>>16)|0,e[1]=c[1]+(c[0]<<8|c[0]>>>24)+c[7]|0,e[2]=c[2]+(c[1]<<16|c[1]>>>16)+(c[0]<<16|c[0]>>>16)|0,e[3]=c[3]+(c[2]<<8|c[2]>>>24)+c[1]|0,e[4]=c[4]+(c[3]<<16|c[3]>>>16)+(c[2]<<16|c[2]>>>16)|0,e[5]=c[5]+(c[4]<<8|c[4]>>>24)+c[3]|0,e[6]=c[6]+(c[5]<<16|c[5]>>>16)+(c[4]<<16|c[4]>>>16)|0,e[7]=c[7]+(c[6]<<8|c[6]>>>24)+c[5]|0}n.RabbitLegacy=r._createHelper(i)}(),R.pad.ZeroPadding={pad:function(n,r){r*=4,n.clamp(),n.sigBytes+=r-(n.sigBytes%r||r)},unpad:function(n){for(var r=n.words,t=n.sigBytes-1;!(r[t>>>2]>>>24-t%4*8&255);)t--;n.sigBytes=t+1}};var d2="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function G1(n){if(typeof n!="string")return!1;try{return JSON.parse(n),!0}catch(r){return!1}}var J1=(n,r)=>parseInt(Math.random()*(r-n+1)+n),k1=(n)=>{let r="";for(let t=0;t<n;t++)r+=d2[J1(0,64)];return r},F={encode(n){return n=R.enc.Utf8.parse(n),R.enc.Base64.stringify(n)},decode(n){return(n=R.enc.Base64.parse(n)).toString(R.enc.Utf8)}};function v2(n,r){try{var t=k1(8),h=k1(8),c=(r=R.enc.Utf8.parse(r),R.enc.Utf8.parse(t+h)),i=R.enc.Utf8.parse(n);return t+R.AES.encrypt(i,r,{iv:c,mode:R.mode.CBC,padding:R.pad.Pkcs7}).ciphertext.toString()+h}catch(B){}}function f2(n,r){try{var t=n.slice(0,8),h=n.slice(n.length-8,n.length),c=(n=n.slice(8,n.length-8),r=R.enc.Utf8.parse(r),R.enc.Utf8.parse(t+h)),i=R.enc.Hex.parse(n),B=R.enc.Base64.stringify(i);return R.AES.decrypt(B,r,{iv:c,mode:R.mode.CBC,padding:R.pad.Pkcs7}).toString(R.enc.Utf8).toString()}catch(e){}}var g2=function(n,r,t=0){for(n instanceof Object&&(n=JSON.stringify(n));r.length<16;)r+="0";return n=F.encode(v2(n,r)),t&&(n=F.encode(n),n=F.encode(n),n=F.encode(n),n=F.encode(n),n=F.encode(n)),n},S2=function(n,r,t=0){try{for(;r.length<16;)r+="0";return n=F.decode(n),t&&(n=F.decode(n),n=F.decode(n),n=F.decode(n),n=F.decode(n),n=F.decode(n)),(n=G1(n=f2(n,r))?JSON.parse(n):n)!=""&&n}catch(h){return!1}};try{z1&&(z1.exports={encode:g2,decode:S2,isJSON:G1,randomInt:J1,randomStr:k1})}catch(n){}});import f1 from"express";import n2 from"node:fs";import W1 from"node:path";import{pathToFileURL as i2}from"node:url";var _2=(n,r,t)=>{let h=r;h.return=async(c,i=1,B=200,e="")=>{if(c===null||c===void 0)i=0;if(c instanceof Promise)c=await c;r.status(B).send({msg:e,status:i?1:0,data:c===null||c===void 0?null:c})},h.reply=async(c,i,B=200,e="")=>{let _=i??(c?1:0);return await h.return(c,_,B,e)},h.success=async(c,i="成功")=>{return await h.return(c,1,200,i)},h.fail=async(c,i="系统错误,请联系管理员")=>{return await h.return(c,0,200,i)},t()},X1=_2;import o2 from"node:fs";import I1 from"node:path";var o1={logs:{open:!0,debug:!0},token:{open:!0,pwd:"8087",headerParams:"token"},projectName:"mas-app",openCors:!1,corsUrl:[]};function N1(n,r){if(!r)return{...n};return{...n,...r,logs:{...n?.logs,...r?.logs},token:{...n?.token,...r?.token}}}function K1(n){let r=[{apisPath:I1.join(n,"src/apis"),defalutApiPath:""},{apisPath:I1.join(n,"apis"),defalutApiPath:""}];for(let t of r)if(o2.existsSync(t.apisPath))return t;return r[0]}import l1 from"node:fs";import p1 from"node:path";function Z1(n){if(!l1.existsSync(n))return[];if(!l1.statSync(n).isDirectory())return[];let t=[],h=[n];while(h.length){let c=h.pop(),i=l1.readdirSync(c,{withFileTypes:!0});for(let B of i){let e=p1.join(c,B.name);if(B.isDirectory()){h.push(e);continue}if(!B.isFile())continue;if(B.name.endsWith(".d.ts"))continue;if(B.name.endsWith(".ts")||B.name.endsWith(".js"))t.push(e)}}return t}function L1(n,r){let c=p1.relative(n,r).replace(/\.(ts|js)$/,"").split(p1.sep).join("/");if(c==="index")return"/";if(c.endsWith("/index"))return`/${c.slice(0,-6)}`;return`/${c}`}function a(n){return Object.prototype.toString.call(n).slice(8,-1).toLowerCase()}function Q1(n){return n==="?"||n===-1}function U1(n,r){if(n===null||n===void 0)return!0;if(r==="?")return a(n)==="string";return a(n)==="number"}function u2(n){return Array.isArray(n)&&n.length>0&&(n[0]==="?"||n[0]===-1)}function y2(n,r){if(n===null||n===void 0)return!0;if(!Array.isArray(n))return!1;if(n.length===0)return!1;for(let t of n)if(r==="?"){if(a(t)!=="string")return!1}else if(a(t)!=="number")return!1;return!0}function B2(n,r){return a(n)===r.name.toLowerCase()}function l2(n,r,t){if(a(n)!=="object"||n===null)return!1;let h=n;if(t){for(let c of Object.keys(h))if(!(c in r))return!1}for(let c of Object.keys(r)){let i=h[c],B=r[c];if(!B)return!1;if(u2(B)){let e=B[0];if(!y2(i,e))return!1;continue}if(Q1(B)){if(!U1(i,B))return!1;continue}if(i===null||i===void 0)return!1;if(!i1(i,B,t))return!1}return!0}function w2(n,r,t){if(!Array.isArray(n))return!1;if(n.length===0)return!1;let h=r[0];if(!h)throw Error("非法的校验格式:数组格式不能为空(示例:[String] / [{...}])");for(let c of n)if(!i1(c,h,t))return!1;return!0}function i1(n,r,t=!1){if(Q1(r))return U1(n,r);if(n===null||n===void 0)return!1;let h=a(r);if(h==="function")return B2(n,r);if(Array.isArray(r))return w2(n,r,t);if(h==="object")return l2(n,r,t);return!1}var w1=e2(Y1(),1),$1=()=>new Date().getTime();function j1(n,r="8087",t=0){return w1.decode(n,r,t)}function O1(n,r="8087",t=0){return w1.encode(n,r,t)}var b1=({token:n,permission:r=[]},t="8087")=>{if(!n)return{msg:"没有传入token数据",errorCode:0,status:0,token:n};let h=j1(n,t);if(!h)return{msg:"token数据错误",errorCode:1,status:0,token:n};if(r.length!=0){let c=h._permission;if(!c)return{msg:"权限错误",errorCode:2,status:0,token:n};if(c?.filter((i)=>r.includes(i)).length==0)return{msg:"权限错误",errorCode:2,status:0,token:n}}if(h._masTime!==0){if($1()>h._masTime)return{msg:"token过期",errorCode:3,status:0,token:n}}return{...h,status:1}};function H2({data:n=null,time:r=0,permission:t=[]}={},h="8087"){let c={};return c.data=n,t.length!=0&&(c._permission=t),r!==0&&(c._masTime=r*1000+$1()),O1(c,h)}function A1(n,r,t){return async(h,c,i)=>{try{let{config:B,handler:e}=r;if(!e)return c.reply?.(null,0,500,`API 模块缺少导出 handler:${n}`);let _=B?.methods??"all";if(_!=="all"&&h.method.toLowerCase()!==_)return c.reply?.(null,0,405,"Method Not Allowed");if(B?.contentType){if(h.method.toUpperCase()!=="GET"&&h.headers["content-length"]!==void 0){let v=h.headers["content-type"]??"";if(!String(v).includes(B.contentType))return c.reply?.(null,0,400,"Content-Type 不匹配")}}if(B?.header)for(let[o,v]of Object.entries(B.header)){let w=h.headers[o.toLowerCase()],d;if(Array.isArray(w))d=w[0];else d=w;if(d===void 0||d===null)return c.reply?.(null,0,400,`缺少 Header:${o}`);let s=d;if(v===Number)s=Number(d);if(v===Boolean)s=d==="true"||d==="1"||d==="yes";if(!i1(s,v,!1))return c.reply?.(null,0,400,`Header 类型错误:${o}`)}if(t.token.open&&B?.token){let o=t.token.headerParams,v=h.headers[o.toLowerCase()]??h.query?.[o]??h.body?.[o],w=b1({token:v,permission:B.permission??[]},t.token.pwd);if(w.status===0)return c.reply?.(null,0,401,w.msg);h.tokenData=w}if(B?.requestFormat){if(!i1(h.body,B.requestFormat,!!B.strict))return c.reply?.(null,0,400,"请求参数格式错误")}return await e(h,c)}catch(B){return i(B)}}}function q(n){if(!n)return n;if(n==="?")return"String?";if(n===-1)return"Number?";if(typeof n==="function")return n.name??"Function";if(Array.isArray(n)){if(n[0]==="?")return["String"];if(n[0]===-1)return["Number"];return[q(n[0])]}if(typeof n==="object"){let r={};for(let[t,h]of Object.entries(n))r[t]=q(h);return r}return n}function u1(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)&&Object.prototype.toString.call(n)==="[object Object]"}function d1(n){if(!n)return null;if(n==="?")return"string";if(n===-1)return 0;if(typeof n==="function"){let r=n.name;if(r==="String")return"string";if(r==="Number")return 0;if(r==="Boolean")return!0;if(r==="Object")return{};return null}if(Array.isArray(n)){if(n[0]==="?")return["string"];if(n[0]===-1)return[0];return[d1(n[0])]}if(u1(n)){let r={};for(let[t,h]of Object.entries(n))r[t]=d1(h);return r}return null}function F1(n,r=""){if(!n)return[];if(n==="?"||n===-1)return[{name:r||"value",desc:"",type:q(n)}];if(typeof n==="function")return[{name:r||"value",desc:"",type:q(n)}];if(Array.isArray(n))return[{name:r||"value",desc:"",type:q(n)}];if(u1(n)){let t=[];for(let[h,c]of Object.entries(n)){let i=r?`${r}.${h}`:h;t.push(...F1(c,i))}return t}return[]}function p2(n,r){if(!n)return;if(!r)return;let t=r.split(".").filter(Boolean),h=n;for(let c of t){if(!h)return;if(Array.isArray(h))return h;if(typeof h==="function")return h;if(!u1(h))return;h=h[c]}return h}function R1(n,r){if(!n&&!r)return;let t=n?.example??(u1(r)?d1(r):null),h=u1(t)?t:{value:d1(r)},c=Array.isArray(n?.desc)?n.desc:[],B=(c.length>0?c:F1(r)).map((e)=>{if(e.type)return e;let o=p2(r,e.name);if(o)return{...e,type:q(o)};return{...e,type:"String"}});return{example:h,desc:B}}function V1(n){if(!n)return n;return{...n,header:n.header?q(n.header):n.header,requestFormat:n.requestFormat?q(n.requestFormat):n.requestFormat,responseFormat:n.responseFormat?q(n.responseFormat):n.responseFormat}}function P1(n,r){return{header:R1(r?.header,n?.header),request:R1(r?.request,n?.requestFormat),response:R1(r?.response,n?.responseFormat)}}import k2 from"node:fs";import z2 from"moment";import v1 from"morgan";import{createStream as b2}from"rotating-file-stream";function A2(n){return typeof n==="object"&&n!==null&&!Array.isArray(n)&&Object.prototype.toString.call(n)==="[object Object]"}function E1(n,r){if(!n)return n;if(Array.isArray(n))return n.map((h)=>E1(h,r));if(!A2(n))return n;let t={};for(let[h,c]of Object.entries(n))if(r.includes(h))t[h]="[REDACTED]";else t[h]=E1(c,r);return t}function T1(n,r,t){try{if(n===void 0)return"-";if(n===null)return"null";let h=E1(n,t),c;if(typeof h==="string")c=h;else{let i=JSON.stringify(h);c=i===void 0?"-":i}if(c.length>r)c=`${c.slice(0,r)}...(truncated)`;return c}catch{return"[Unserializable]"}}function x1(n,r){if(!r.logRequestBody&&!r.logResponseBody)return;let t=n;if(t.__masBodyCaptureAttached)return;t.__masBodyCaptureAttached=!0,n.use((h,c,i)=>{if(r.logRequestBody)c.locals.__masReqBody=h.body;if(!r.logResponseBody)return i();let B=c,e=B.send?.bind(B),_=B.json?.bind(B);if(typeof e==="function")B.send=(o)=>{return c.locals.__masResBody=o,e(o)};if(typeof _==="function")B.json=(o)=>{return c.locals.__masResBody=o,_(o)};i()})}function q1(n,r){v1.token("date",()=>z2().utcOffset(8).format("YYYY-MM-DD HH:mm:ss")),v1.token("req-body",(c,i)=>{if(!n.logRequestBody)return"-";return T1(i.locals?.__masReqBody,n.maxBodyLength,n.redactKeys)}),v1.token("res-body",(c,i)=>{if(!n.logResponseBody)return"-";return T1(i.locals?.__masResBody,n.maxBodyLength,n.redactKeys)});let t=':remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" req=:req-body res=:res-body',h=':remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"';return v1(n.logRequestBody||n.logResponseBody?t:h,{stream:r})}function a1(n,r={}){let t={logRequestBody:r.logRequestBody??!0,logResponseBody:r.logResponseBody??!0,maxBodyLength:r.maxBodyLength??2000,redactKeys:r.redactKeys??[]};x1(n,t),n.use(q1(t,{write:(h)=>process.stdout.write(h)}))}function D1(n,r,t={}){k2.mkdirSync(r,{recursive:!0});let h={logRequestBody:t.logRequestBody??!0,logResponseBody:t.logResponseBody??!0,maxBodyLength:t.maxBodyLength??2000,redactKeys:t.redactKeys??[]};x1(n,h);let c=b2("access.log",{size:"50M",interval:"1d",path:r});n.use(q1(h,c))}function R2(n,r){if(!n)return!1;if(!r||r.length===0)return!0;return r.some((t)=>{if(t===n)return!0;if(t.includes("*")){let h=t.replace(/\*/g,".*").replace(/\./g,"\\.");return new RegExp(`^${h}$`).test(n)}return!1})}function m1(n,r){let t={allowHeader:[]};n.use((h,c,i)=>{let B=h.headers.origin,e=h.headers["access-control-request-headers"];if(e){let _=e.split(",").map((o)=>o.trim()).filter(Boolean);t.allowHeader=[...new Set([...t.allowHeader,..._])]}if(B&&R2(B,r))c.setHeader("Access-Control-Allow-Origin",B);else if(B&&r&&r.length>0);else if(!r||r.length===0){if(B)c.setHeader("Access-Control-Allow-Origin",B)}if(c.setHeader("Access-Control-Allow-Headers",t.allowHeader.length>0?t.allowHeader.join(", "):"*"),c.setHeader("Access-Control-Allow-Methods","PUT, POST, GET, DELETE, OPTIONS, PATCH"),c.setHeader("Access-Control-Allow-Credentials","true"),h.method==="OPTIONS")return c.status(204).send();i()})}async function E2(n,r,t){let h=f1();t&&t(h);let c=K1(n);o1.logs.logPath=W1.join(n,"logs"),o1.apisPath=c.apisPath,o1.defalutApiPath=c.defalutApiPath;let i=N1(o1,r);if(i.openCors)m1(h,i.corsUrl);h.use(f1.json({limit:"10mb"})),h.use(f1.urlencoded({extended:!0}));let B=i.staticPath??"public",e=i.staticUrl??"/public",_=W1.isAbsolute(B)?B:W1.join(n,B);if(n2.existsSync(_))h.use(e,f1.static(_));if(h.use(X1),i.logs.debug)a1(h,{logRequestBody:i.logs.logRequestBody,logResponseBody:i.logs.logResponseBody,maxBodyLength:i.logs.maxBodyLength,redactKeys:i.logs.redactKeys});if(i.logs.open&&i.logs.logPath)D1(h,i.logs.logPath,{logRequestBody:i.logs.logRequestBody,logResponseBody:i.logs.logResponseBody,maxBodyLength:i.logs.maxBodyLength,redactKeys:i.logs.redactKeys});let o=i.apisPath,v=Z1(o),w=i.defalutApiPath,d=[];for(let s of v){let l=L1(o,s),u=`/api${l}`,y=await import(i2(s).href);if(typeof y.handler!=="function")throw Error(`API 模块缺少导出 handler:${s}`);d.push({path:l,apiPath:u,file:s,mod:y}),h.all(u,A1(s,y,i))}if(i.exposeApiDocs!==!1)h.get("/debug/docs",async(s,l)=>{let u=[];for(let y of d){let g=y.mod.config,f=y.mod.doc;u.push({path:y.apiPath,file:y.file,config:V1(g),doc:P1(g,f)})}l.reply?.(u)});if(w&&n2.existsSync(w)){let s=await import(i2(w).href);if(typeof s.handler!=="function")throw Error(`兜底 API 模块缺少导出 handler:${w}`);h.use(A1(w,s,i))}else h.use((s,l)=>{l.reply?.(null,0,404,"Not Found")});return h.use((s,l,u,y)=>{let g=s?.message?String(s.message):"系统错误,请联系管理员";if(typeof u?.reply==="function")return u.reply(null,0,500,g);return u.status(500).send({status:0,msg:g,data:null})}),h}var D2="?",W2=-1;export{b1 as validToken,E2 as getApp,O1 as encode,j1 as decode,H2 as createToken,D2 as _String,W2 as _Number};
@@ -0,0 +1,9 @@
1
+ import type { Express } from 'express';
2
+ /**
3
+ * 开放 CORS 中间件:支持配置允许的跨域地址列表。
4
+ *
5
+ * @param app - Express 应用实例
6
+ * @param corsUrl - 允许的跨域地址列表(为空或未配置则允许所有)
7
+ */
8
+ export declare function openCors(app: Express, corsUrl?: string[]): void;
9
+ //# sourceMappingURL=openCors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCors.d.ts","sourceRoot":"","sources":["../../src/middleware/openCors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AA4BxE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QA8CxD"}
package/dist/type.d.ts ADDED
@@ -0,0 +1,150 @@
1
+ import type { Request, Response } from 'express';
2
+ import type { TypeFromValidFormat, ValidFormat } from './utils/typeFromValidFormat';
3
+ /**
4
+ * 请求类型
5
+ */
6
+ export type MasReq<TRequestFormat = any> = Request<any, any, TypeFromValidFormat<TRequestFormat>>;
7
+ /**
8
+ * MAS 接口配置的最小结构(仅用于类型推导)。
9
+ */
10
+ export type MasConfigLike = {
11
+ requestFormat?: any;
12
+ responseFormat?: any;
13
+ };
14
+ /**
15
+ * HTTP 方法类型。
16
+ */
17
+ export type HttpMethod = 'get' | 'post' | 'all';
18
+ /**
19
+ * MAS 接口的完整配置类型。
20
+ */
21
+ export type MasConfig<TRequestFormat extends ValidFormat | undefined = ValidFormat, TResponseFormat extends ValidFormat | undefined = ValidFormat, THeader extends Record<string, ValidFormat> | undefined = Record<string, ValidFormat>> = {
22
+ /** 接口名称 */
23
+ name?: string;
24
+ /** 是否严格模式(strict=true 时对象不允许出现多余字段) */
25
+ strict?: boolean;
26
+ /** HTTP 方法 */
27
+ methods?: HttpMethod;
28
+ /** Content-Type */
29
+ contentType?: string;
30
+ /** Header 参数格式(key 为参数名,value 为类型描述符) */
31
+ header?: THeader;
32
+ /** 请求体格式 */
33
+ requestFormat?: TRequestFormat;
34
+ /** 响应体格式 */
35
+ responseFormat?: TResponseFormat;
36
+ /** 是否需要 token 验证 */
37
+ token?: boolean;
38
+ /** 权限列表 */
39
+ permission?: string[];
40
+ };
41
+ /** 从配置中提取 requestFormat */
42
+ type ReqFormatOf<TConfig> = TConfig extends {
43
+ requestFormat?: infer TRequestFormat;
44
+ } ? NonNullable<TRequestFormat> : any;
45
+ /** 从配置中提取 responseFormat */
46
+ type ResFormatOf<TConfig> = TConfig extends {
47
+ responseFormat?: infer TResponseFormat;
48
+ } ? NonNullable<TResponseFormat> : any;
49
+ /**
50
+ * MAS 接口处理函数类型:入参 req/res 会根据 `config` 自动推导。
51
+ *
52
+ * 用法示例:
53
+ * `export default (async (req, res) => { ... }) satisfies MasHandler<typeof config>;`
54
+ */
55
+ export type MasHandler<TConfig extends MasConfigLike = MasConfigLike> = (req: MasReq<ReqFormatOf<TConfig>>, res: MasRes<ResFormatOf<TConfig>>) => any;
56
+ /**
57
+ * 响应类型
58
+ */
59
+ export type MasRes<TResponseFormat = any> = Response<TypeFromValidFormat<TResponseFormat>> & {
60
+ /**
61
+ * MAS 封装的统一返回方法。
62
+ *
63
+ * @param reply - 返回的数据体;可通过 `MasRes<typeof config.responseFormat>` 从 responseFormat 推导
64
+ * @param status - 业务状态(沿用现有约定,保持 any)
65
+ * @param code - 业务码
66
+ * @param msg - 提示信息
67
+ */
68
+ reply: (data: TypeFromValidFormat<TResponseFormat>, status?: any, code?: number, msg?: string) => void;
69
+ };
70
+ /**
71
+ * API 文档中字段的描述信息。
72
+ */
73
+ export type FieldDesc = {
74
+ /** 字段名称 */
75
+ name: string;
76
+ /** 字段描述 */
77
+ desc: string;
78
+ };
79
+ /**
80
+ * API 文档中某个部分(header/request/response)的结构。
81
+ */
82
+ export type SectionDoc = {
83
+ /** 示例数据对象 */
84
+ example: Record<string, any>;
85
+ /** 字段描述数组 */
86
+ desc: FieldDesc[];
87
+ };
88
+ /**
89
+ * API 文档的完整结构。
90
+ */
91
+ export type ApisDoc = {
92
+ /** Header 部分的文档 */
93
+ header?: SectionDoc;
94
+ /** Request 部分的文档 */
95
+ request?: SectionDoc;
96
+ /** Response 部分的文档 */
97
+ response?: SectionDoc;
98
+ };
99
+ export type MasAppConfig = {
100
+ logs: {
101
+ /** 是否记录日志 */
102
+ open: boolean;
103
+ /** 是否打印访问日志 */
104
+ debug: boolean;
105
+ /** 日志路径,默认 logs/ */
106
+ logPath?: string;
107
+ /**
108
+ * 是否在 access log 中记录请求体(req.body)。默认开启
109
+ */
110
+ logRequestBody?: boolean;
111
+ /**
112
+ * 是否在 access log 中记录响应体(res.send/res.json)。默认开启
113
+ */
114
+ logResponseBody?: boolean;
115
+ /**
116
+ * body 最大记录长度(超过会截断),默认 2000。
117
+ */
118
+ maxBodyLength?: number;
119
+ /**
120
+ * 需要打码/移除的字段名(支持嵌套对象的 key 匹配),默认:[]。
121
+ */
122
+ redactKeys?: string[];
123
+ };
124
+ token: {
125
+ /** 是否使用token */
126
+ open: boolean;
127
+ /** token密钥,密钥中只能包含大小写字母和数字 */
128
+ pwd: string;
129
+ /** 参数名 */
130
+ headerParams: string;
131
+ };
132
+ /** 接口路径,默认src/apis 或 apis/ */
133
+ apisPath?: string;
134
+ /** 兜底接口文件路径,不传默认返回404 */
135
+ defalutApiPath?: string;
136
+ /** 项目名称,默认mas-app */
137
+ projectName?: string;
138
+ /** 是否允许跨域,默认 false */
139
+ openCors?: boolean;
140
+ /** 跨域允许的地址 */
141
+ corsUrl?: string[];
142
+ /** 静态文件目录路径,默认 public/ */
143
+ staticPath?: string;
144
+ /** 静态资源访问路径前缀,默认 /public */
145
+ staticUrl?: string;
146
+ /** 是否暴露接口文档信息(/debug/docs),默认 true */
147
+ exposeApiDocs?: boolean;
148
+ };
149
+ export {};
150
+ //# sourceMappingURL=type.d.ts.map