2026-06-26 15:56:49 +08:00

156 lines
68 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(() => {
var exports = {};
exports.id = "app/api/auth/login/route";
exports.ids = ["app/api/auth/login/route"];
exports.modules = {
/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js":
/*!*************************************************************************!*\
!*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***!
\*************************************************************************/
/***/ ((module) => {
module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js");
/***/ }),
/***/ "next/dist/compiled/next-server/app-route.runtime.dev.js":
/*!**************************************************************************!*\
!*** external "next/dist/compiled/next-server/app-route.runtime.dev.js" ***!
\**************************************************************************/
/***/ ((module) => {
module.exports = require("next/dist/compiled/next-server/app-route.runtime.dev.js");
/***/ }),
/***/ "buffer":
/*!*************************!*\
!*** external "buffer" ***!
\*************************/
/***/ ((module) => {
module.exports = require("buffer");
/***/ }),
/***/ "crypto":
/*!*************************!*\
!*** external "crypto" ***!
\*************************/
/***/ ((module) => {
module.exports = require("crypto");
/***/ }),
/***/ "fs":
/*!*********************!*\
!*** external "fs" ***!
\*********************/
/***/ ((module) => {
module.exports = require("fs");
/***/ }),
/***/ "path":
/*!***********************!*\
!*** external "path" ***!
\***********************/
/***/ ((module) => {
module.exports = require("path");
/***/ }),
/***/ "sql.js":
/*!*************************!*\
!*** external "sql.js" ***!
\*************************/
/***/ ((module) => {
module.exports = require("sql.js");
/***/ }),
/***/ "stream":
/*!*************************!*\
!*** external "stream" ***!
\*************************/
/***/ ((module) => {
module.exports = require("stream");
/***/ }),
/***/ "util":
/*!***********************!*\
!*** external "util" ***!
\***********************/
/***/ ((module) => {
module.exports = require("util");
/***/ }),
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2Flogin%2Froute&page=%2Fapi%2Fauth%2Flogin%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2Flogin%2Froute.js&appDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!":
/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2Flogin%2Froute&page=%2Fapi%2Fauth%2Flogin%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2Flogin%2Froute.js&appDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
\****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ patchFetch: () => (/* binding */ patchFetch),\n/* harmony export */ requestAsyncStorage: () => (/* binding */ requestAsyncStorage),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ serverHooks: () => (/* binding */ serverHooks),\n/* harmony export */ staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-route/module.compiled */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_gandanxiangzhao_Desktop_src_app_api_auth_login_route_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/app/api/auth/login/route.js */ \"(rsc)/./src/app/api/auth/login/route.js\");\n\n\n\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\nconst nextConfigOutput = \"\"\nconst routeModule = new next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppRouteRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_ROUTE,\n page: \"/api/auth/login/route\",\n pathname: \"/api/auth/login\",\n filename: \"route\",\n bundlePath: \"app/api/auth/login/route\"\n },\n resolvedPagePath: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/api/auth/login/route.js\",\n nextConfigOutput,\n userland: _Users_gandanxiangzhao_Desktop_src_app_api_auth_login_route_js__WEBPACK_IMPORTED_MODULE_3__\n});\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { requestAsyncStorage, staticGenerationAsyncStorage, serverHooks } = routeModule;\nconst originalPathname = \"/api/auth/login/route\";\nfunction patchFetch() {\n return (0,next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__.patchFetch)({\n serverHooks,\n staticGenerationAsyncStorage\n });\n}\n\n\n//# sourceMappingURL=app-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZhcGklMkZhdXRoJTJGbG9naW4lMkZyb3V0ZSZwYWdlPSUyRmFwaSUyRmF1dGglMkZsb2dpbiUyRnJvdXRlJmFwcFBhdGhzPSZwYWdlUGF0aD1wcml2YXRlLW5leHQtYXBwLWRpciUyRmFwaSUyRmF1dGglMkZsb2dpbiUyRnJvdXRlLmpzJmFwcERpcj0lMkZVc2VycyUyRmdhbmRhbnhpYW5nemhhbyUyRkRlc2t0b3AlMkYlRTUlOTAlODglRTUlOTAlOEMlRTYlQjUlODElRTglQkQlQUMlRTUlQUUlQTElRTYlODklQjklRTclQjMlQkIlRTclQkIlOUYlMkZzcmMlMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRlVzZXJzJTJGZ2FuZGFueGlhbmd6aGFvJTJGRGVza3RvcCUyRiVFNSU5MCU4OCVFNSU5MCU4QyVFNiVCNSU4MSVFOCVCRCVBQyVFNSVBRSVBMSVFNiU4OSVCOSVFNyVCMyVCQiVFNyVCQiU5RiZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDdUI7QUFDcEc7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdIQUFtQjtBQUMzQztBQUNBLGNBQWMseUVBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVk7QUFDWixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBaUU7QUFDekU7QUFDQTtBQUNBLFdBQVcsNEVBQVc7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUN1SDs7QUFFdkgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vP2YwZjEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiL1VzZXJzL2dhbmRhbnhpYW5nemhhby9EZXNrdG9wL+WQiOWQjOa1gei9rOWuoeaJueezu+e7ny9zcmMvYXBwL2FwaS9hdXRoL2xvZ2luL3JvdXRlLmpzXCI7XG4vLyBXZSBpbmplY3QgdGhlIG5leHRDb25maWdPdXRwdXQgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiB0aGUgcm91dGVcbi8vIG1vZHVsZS5cbmNvbnN0IG5leHRDb25maWdPdXRwdXQgPSBcIlwiXG5jb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBBcHBSb3V0ZVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5BUFBfUk9VVEUsXG4gICAgICAgIHBhZ2U6IFwiL2FwaS9hdXRoL2xvZ2luL3JvdXRlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9hcGkvYXV0aC9sb2dpblwiLFxuICAgICAgICBmaWxlbmFtZTogXCJyb3V0ZVwiLFxuICAgICAgICBidW5kbGVQYXRoOiBcImFwcC9hcGkvYXV0aC9sb2dpbi9yb3V0ZVwiXG4gICAgfSxcbiAgICByZXNvbHZlZFBhZ2VQYXRoOiBcIi9Vc2Vycy9nYW5kYW54aWFuZ3poYW8vRGVza3RvcC/lkIjlkIzmtYHovazlrqHmibnns7vnu58vc3JjL2FwcC9hcGkvYXV0aC9sb2dpbi9yb3V0ZS5qc1wiLFxuICAgIG5leHRDb25maWdPdXRwdXQsXG4gICAgdXNlcmxhbmRcbn0pO1xuLy8gUHVsbCBvdXQgdGhlIGV4cG9ydHMgdGhhdCB3ZSBuZWVkIHRvIGV4cG9zZSBmcm9tIHRoZSBtb2R1bGUuIFRoaXMgc2hvdWxkXG4vLyBiZSBlbGltaW5hdGVkIHdoZW4gd2UndmUgbW92ZWQgdGhlIG90aGVyIHJvdXRlcyB0byB0aGUgbmV3IGZvcm1hdC4gVGhlc2Vcbi8vIGFyZSB1c2VkIHRvIGhvb2sgaW50byB0aGUgcm91dGUuXG5jb25zdCB7IHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzIH0gPSByb3V0ZU1vZHVsZTtcbmNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBcIi9hcGkvYXV0aC9sb2dpbi9yb3V0ZVwiO1xuZnVuY3Rpb24gcGF0Y2hGZXRjaCgpIHtcbiAgICByZXR1cm4gX3BhdGNoRmV0Y2goe1xuICAgICAgICBzZXJ2ZXJIb29rcyxcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZVxuICAgIH0pO1xufVxuZXhwb3J0IHsgcm91dGVNb2R1bGUsIHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzLCBvcmlnaW5hbFBhdGhuYW1lLCBwYXRjaEZldGNoLCAgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2Flogin%2Froute&page=%2Fapi%2Fauth%2Flogin%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2Flogin%2Froute.js&appDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
/***/ }),
/***/ "(rsc)/./src/app/api/auth/login/route.js":
/*!*****************************************!*\
!*** ./src/app/api/auth/login/route.js ***!
\*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ POST: () => (/* binding */ POST),\n/* harmony export */ dynamic: () => (/* binding */ dynamic)\n/* harmony export */ });\n/* harmony import */ var _lib_db__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/lib/db */ \"(rsc)/./src/lib/db.js\");\n/* harmony import */ var _lib_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/auth */ \"(rsc)/./src/lib/auth.js\");\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bcryptjs */ \"(rsc)/./node_modules/bcryptjs/index.js\");\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(bcryptjs__WEBPACK_IMPORTED_MODULE_2__);\nconst dynamic = \"force-dynamic\";\n\n\n\n// POST /api/auth/login - 用户登录\nasync function POST(request) {\n try {\n const { username, password } = await request.json();\n if (!username || !password) {\n return Response.json({\n error: \"用户名和密码不能为空\"\n }, {\n status: 400\n });\n }\n const db = await (0,_lib_db__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n // 查找用户\n const user = db.prepare(\"SELECT * FROM users WHERE username = ?\").get(username);\n if (!user) {\n return Response.json({\n error: \"用户名或密码错误\"\n }, {\n status: 401\n });\n }\n if (user.status !== 1) {\n return Response.json({\n error: \"该账户已被停用,禁止登录\"\n }, {\n status: 403\n });\n }\n // 验证密码\n const isValid = bcryptjs__WEBPACK_IMPORTED_MODULE_2___default().compareSync(password, user.password);\n if (!isValid) {\n return Response.json({\n error: \"用户名或密码错误\"\n }, {\n status: 401\n });\n }\n // 生成 token\n const token = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.generateToken)(user);\n // 获取用户信息(不含密码)\n const { password: _, ...userInfo } = user;\n // 获取部门名称\n if (user.department_id) {\n const dept = db.prepare(\"SELECT name FROM departments WHERE id = ?\").get(user.department_id);\n if (dept) {\n userInfo.department_name = dept.name;\n }\n }\n // 获取系统配置(登录页面展示用)\n const configs = db.prepare(\"SELECT config_key, config_value FROM system_config\").all();\n const system_config = {};\n for (const config of configs){\n system_config[config.config_key] = config.config_value;\n }\n return Response.json({\n token,\n user: userInfo,\n system_config\n });\n } catch (error) {\n console.error(\"登录失败:\", error);\n return Response.json({\n error: \"服务器内部错误\"\n }, {\n status: 500\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9zcmMvYXBwL2FwaS9hdXRoL2xvZ2luL3JvdXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFPLE1BQU1BLFVBQVUsZ0JBQWdCO0FBQ1Y7QUFDYztBQUNiO0FBRTlCLDhCQUE4QjtBQUN2QixlQUFlSSxLQUFLQyxPQUFPO0lBQ2hDLElBQUk7UUFDRixNQUFNLEVBQUVDLFFBQVEsRUFBRUMsUUFBUSxFQUFFLEdBQUcsTUFBTUYsUUFBUUcsSUFBSTtRQUVqRCxJQUFJLENBQUNGLFlBQVksQ0FBQ0MsVUFBVTtZQUMxQixPQUFPRSxTQUFTRCxJQUFJLENBQ2xCO2dCQUFFRSxPQUFPO1lBQWEsR0FDdEI7Z0JBQUVDLFFBQVE7WUFBSTtRQUVsQjtRQUVBLE1BQU1DLEtBQUssTUFBTVgsbURBQUtBO1FBRXRCLE9BQU87UUFDUCxNQUFNWSxPQUFPRCxHQUFHRSxPQUFPLENBQUMsMENBQTBDQyxHQUFHLENBQUNUO1FBQ3RFLElBQUksQ0FBQ08sTUFBTTtZQUNULE9BQU9KLFNBQVNELElBQUksQ0FDbEI7Z0JBQUVFLE9BQU87WUFBVyxHQUNwQjtnQkFBRUMsUUFBUTtZQUFJO1FBRWxCO1FBRUEsSUFBSUUsS0FBS0YsTUFBTSxLQUFLLEdBQUc7WUFDckIsT0FBT0YsU0FBU0QsSUFBSSxDQUNsQjtnQkFBRUUsT0FBTztZQUFlLEdBQ3hCO2dCQUFFQyxRQUFRO1lBQUk7UUFFbEI7UUFFQSxPQUFPO1FBQ1AsTUFBTUssVUFBVWIsMkRBQWtCLENBQUNJLFVBQVVNLEtBQUtOLFFBQVE7UUFDMUQsSUFBSSxDQUFDUyxTQUFTO1lBQ1osT0FBT1AsU0FBU0QsSUFBSSxDQUNsQjtnQkFBRUUsT0FBTztZQUFXLEdBQ3BCO2dCQUFFQyxRQUFRO1lBQUk7UUFFbEI7UUFFQSxXQUFXO1FBQ1gsTUFBTU8sUUFBUWhCLHdEQUFhQSxDQUFDVztRQUU1QixlQUFlO1FBQ2YsTUFBTSxFQUFFTixVQUFVWSxDQUFDLEVBQUUsR0FBR0MsVUFBVSxHQUFHUDtRQUVyQyxTQUFTO1FBQ1QsSUFBSUEsS0FBS1EsYUFBYSxFQUFFO1lBQ3RCLE1BQU1DLE9BQU9WLEdBQUdFLE9BQU8sQ0FBQyw2Q0FBNkNDLEdBQUcsQ0FBQ0YsS0FBS1EsYUFBYTtZQUMzRixJQUFJQyxNQUFNO2dCQUNSRixTQUFTRyxlQUFlLEdBQUdELEtBQUtFLElBQUk7WUFDdEM7UUFDRjtRQUVBLGtCQUFrQjtRQUNsQixNQUFNQyxVQUFVYixHQUFHRSxPQUFPLENBQUMsc0RBQXNEWSxHQUFHO1FBQ3BGLE1BQU1DLGdCQUFnQixDQUFDO1FBQ3ZCLEtBQUssTUFBTUMsVUFBVUgsUUFBUztZQUM1QkUsYUFBYSxDQUFDQyxPQUFPQyxVQUFVLENBQUMsR0FBR0QsT0FBT0UsWUFBWTtRQUN4RDtRQUVBLE9BQU9yQixTQUFTRCxJQUFJLENBQUM7WUFDbkJVO1lBQ0FMLE1BQU1PO1lBQ05PO1FBQ0Y7SUFDRixFQUFFLE9BQU9qQixPQUFPO1FBQ2RxQixRQUFRckIsS0FBSyxDQUFDLFNBQVNBO1FBQ3ZCLE9BQU9ELFNBQVNELElBQUksQ0FDbEI7WUFBRUUsT0FBTztRQUFVLEdBQ25CO1lBQUVDLFFBQVE7UUFBSTtJQUVsQjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY29udHJhY3QtYXBwcm92YWwtc3lzdGVtLy4vc3JjL2FwcC9hcGkvYXV0aC9sb2dpbi9yb3V0ZS5qcz8yMDkxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBkeW5hbWljID0gXCJmb3JjZS1keW5hbWljXCI7XG5pbXBvcnQgZ2V0RGIgZnJvbSAnQC9saWIvZGInO1xuaW1wb3J0IHsgZ2VuZXJhdGVUb2tlbiB9IGZyb20gJ0AvbGliL2F1dGgnO1xuaW1wb3J0IGJjcnlwdCBmcm9tICdiY3J5cHRqcyc7XG5cbi8vIFBPU1QgL2FwaS9hdXRoL2xvZ2luIC0g55So5oi355m75b2VXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gUE9TVChyZXF1ZXN0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQgfSA9IGF3YWl0IHJlcXVlc3QuanNvbigpO1xuXG4gICAgaWYgKCF1c2VybmFtZSB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICB7IGVycm9yOiAn55So5oi35ZCN5ZKM5a+G56CB5LiN6IO95Li656m6JyB9LFxuICAgICAgICB7IHN0YXR1czogNDAwIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXREYigpO1xuXG4gICAgLy8g5p+l5om+55So5oi3XG4gICAgY29uc3QgdXNlciA9IGRiLnByZXBhcmUoJ1NFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgdXNlcm5hbWUgPSA/JykuZ2V0KHVzZXJuYW1lKTtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgICB7IGVycm9yOiAn55So5oi35ZCN5oiW5a+G56CB6ZSZ6K+vJyB9LFxuICAgICAgICB7IHN0YXR1czogNDAxIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuc3RhdHVzICE9PSAxKSB7XG4gICAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgICAgeyBlcnJvcjogJ+ivpei0puaIt+W3suiiq+WBnOeUqO+8jOemgeatoueZu+W9lScgfSxcbiAgICAgICAgeyBzdGF0dXM6IDQwMyB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIOmqjOivgeWvhueggVxuICAgIGNvbnN0IGlzVmFsaWQgPSBiY3J5cHQuY29tcGFyZVN5bmMocGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgIHsgZXJyb3I6ICfnlKjmiLflkI3miJblr4bnoIHplJnor68nIH0sXG4gICAgICAgIHsgc3RhdHVzOiA0MDEgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyDnlJ/miJAgdG9rZW5cbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRlVG9rZW4odXNlcik7XG5cbiAgICAvLyDojrflj5bnlKjmiLfkv6Hmga/vvIjkuI3lkKvlr4bnoIHvvIlcbiAgICBjb25zdCB7IHBhc3N3b3JkOiBfLCAuLi51c2VySW5mbyB9ID0gdXNlcjtcblxuICAgIC8vIOiOt+WPlumDqOmXqOWQjeensFxuICAgIGlmICh1c2VyLmRlcGFydG1lbnRfaWQpIHtcbiAgICAgIGNvbnN0IGRlcHQgPSBkYi5wcmVwYXJlKCdTRUxFQ1QgbmFtZSBGUk9NIGRlcGFydG1lbnRzIFdIRVJFIGlkID0gPycpLmdldCh1c2VyLmRlcGFydG1lbnRfaWQpO1xuICAgICAgaWYgKGRlcHQpIHtcbiAgICAgICAgdXNlckluZm8uZGVwYXJ0bWVudF9uYW1lID0gZGVwdC5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOiOt+WPluezu+e7n+mFjee9ru+8iOeZu+W9lemhtemdouWxleekuueUqO+8iVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBkYi5wcmVwYXJlKCdTRUxFQ1QgY29uZmlnX2tleSwgY29uZmlnX3ZhbHVlIEZST00gc3lzdGVtX2NvbmZpZycpLmFsbCgpO1xuICAgIGNvbnN0IHN5c3RlbV9jb25maWcgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgICBzeXN0ZW1fY29uZmlnW2NvbmZpZy5jb25maWdfa2V5XSA9IGNvbmZpZy5jb25maWdfdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oe1xuICAgICAgdG9rZW4sXG4gICAgICB1c2VyOiB1c2VySW5mbyxcbiAgICAgIHN5c3RlbV9jb25maWcsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcign55m75b2V5aSx6LSlOicsIGVycm9yKTtcbiAgICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICAgIHsgZXJyb3I6ICfmnI3liqHlmajlhoXpg6jplJnor68nIH0sXG4gICAgICB7IHN0YXR1czogNTAwIH1cbiAgICApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiZHluYW1pYyIsImdldERiIiwiZ2VuZXJhdGVUb2tlbiIsImJjcnlwdCIsIlBPU1QiLCJyZXF1ZXN0IiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImpzb24iLCJSZXNwb25zZSIsImVycm9yIiwic3RhdHVzIiwiZGIiLCJ1c2VyIiwicHJlcGFyZSIsImdldCIsImlzVmFsaWQiLCJjb21wYXJlU3luYyIsInRva2VuIiwiXyIsInVzZXJJbmZvIiwiZGVwYXJ0bWVudF9pZCIsImRlcHQiLCJkZXBhcnRtZW50X25hbWUiLCJuYW1lIiwiY29uZmlncyIsImFsbCIsInN5c3RlbV9jb25maWciLCJjb25maWciLCJjb25maWdfa2V5IiwiY29uZmlnX3ZhbHVlIiwiY29uc29sZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./src/app/api/auth/login/route.js\n");
/***/ }),
/***/ "(rsc)/./src/lib/auth.js":
/*!*************************!*\
!*** ./src/lib/auth.js ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ checkRole: () => (/* binding */ checkRole),\n/* harmony export */ forbiddenResponse: () => (/* binding */ forbiddenResponse),\n/* harmony export */ generateToken: () => (/* binding */ generateToken),\n/* harmony export */ getUserFromRequest: () => (/* binding */ getUserFromRequest),\n/* harmony export */ unauthorizedResponse: () => (/* binding */ unauthorizedResponse),\n/* harmony export */ verifyToken: () => (/* binding */ verifyToken)\n/* harmony export */ });\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ \"(rsc)/./node_modules/jsonwebtoken/index.js\");\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__);\n\nconst JWT_SECRET = process.env.JWT_SECRET || \"contract-approval-system-secret-key-2024\";\nconst TOKEN_EXPIRY = \"24h\";\n// 生成 JWT Token\nfunction generateToken(user) {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default().sign({\n id: user.id,\n username: user.username,\n real_name: user.real_name,\n role: user.role,\n department_id: user.department_id\n }, JWT_SECRET, {\n expiresIn: TOKEN_EXPIRY\n });\n}\n// 验证 JWT Token\nfunction verifyToken(token) {\n try {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default().verify(token, JWT_SECRET);\n } catch (error) {\n return null;\n }\n}\n// 从请求头获取用户信息\nfunction getUserFromRequest(request) {\n const authHeader = request.headers.get(\"Authorization\");\n if (!authHeader || !authHeader.startsWith(\"Bearer \")) {\n return null;\n }\n const token = authHeader.substring(7);\n return verifyToken(token);\n}\n// 检查是否有权限\nfunction checkRole(user, allowedRoles) {\n if (!user) return false;\n return allowedRoles.includes(user.role);\n}\n// 返回未授权响应\nfunction unauthorizedResponse() {\n return Response.json({\n error: \"未登录或登录已过期\"\n }, {\n status: 401\n });\n}\n// 返回无权限响应 \nfunction forbiddenResponse() {\n return Response.json({\n error: \"无权限访问\"\n }, {\n status: 403\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9zcmMvbGliL2F1dGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBK0I7QUFFL0IsTUFBTUMsYUFBYUMsUUFBUUMsR0FBRyxDQUFDRixVQUFVLElBQUk7QUFDN0MsTUFBTUcsZUFBZTtBQUVyQixlQUFlO0FBQ1IsU0FBU0MsY0FBY0MsSUFBSTtJQUNoQyxPQUFPTix3REFBUSxDQUNiO1FBQ0VRLElBQUlGLEtBQUtFLEVBQUU7UUFDWEMsVUFBVUgsS0FBS0csUUFBUTtRQUN2QkMsV0FBV0osS0FBS0ksU0FBUztRQUN6QkMsTUFBTUwsS0FBS0ssSUFBSTtRQUNmQyxlQUFlTixLQUFLTSxhQUFhO0lBQ25DLEdBQ0FYLFlBQ0E7UUFBRVksV0FBV1Q7SUFBYTtBQUU5QjtBQUVBLGVBQWU7QUFDUixTQUFTVSxZQUFZQyxLQUFLO0lBQy9CLElBQUk7UUFDRixPQUFPZiwwREFBVSxDQUFDZSxPQUFPZDtJQUMzQixFQUFFLE9BQU9nQixPQUFPO1FBQ2QsT0FBTztJQUNUO0FBQ0Y7QUFFQSxhQUFhO0FBQ04sU0FBU0MsbUJBQW1CQyxPQUFPO0lBQ3hDLE1BQU1DLGFBQWFELFFBQVFFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ0YsY0FBYyxDQUFDQSxXQUFXRyxVQUFVLENBQUMsWUFBWTtRQUNwRCxPQUFPO0lBQ1Q7SUFDQSxNQUFNUixRQUFRSyxXQUFXSSxTQUFTLENBQUM7SUFDbkMsT0FBT1YsWUFBWUM7QUFDckI7QUFFQSxVQUFVO0FBQ0gsU0FBU1UsVUFBVW5CLElBQUksRUFBRW9CLFlBQVk7SUFDMUMsSUFBSSxDQUFDcEIsTUFBTSxPQUFPO0lBQ2xCLE9BQU9vQixhQUFhQyxRQUFRLENBQUNyQixLQUFLSyxJQUFJO0FBQ3hDO0FBRUEsVUFBVTtBQUNILFNBQVNpQjtJQUNkLE9BQU9DLFNBQVNDLElBQUksQ0FDbEI7UUFBRWIsT0FBTztJQUFZLEdBQ3JCO1FBQUVjLFFBQVE7SUFBSTtBQUVsQjtBQUVBLFlBQVk7QUFDTCxTQUFTQztJQUNkLE9BQU9ILFNBQVNDLElBQUksQ0FDbEI7UUFBRWIsT0FBTztJQUFRLEdBQ2pCO1FBQUVjLFFBQVE7SUFBSTtBQUVsQiIsInNvdXJjZXMiOlsid2VicGFjazovL2NvbnRyYWN0LWFwcHJvdmFsLXN5c3RlbS8uL3NyYy9saWIvYXV0aC5qcz84N2JkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcblxuY29uc3QgSldUX1NFQ1JFVCA9IHByb2Nlc3MuZW52LkpXVF9TRUNSRVQgfHwgJ2NvbnRyYWN0LWFwcHJvdmFsLXN5c3RlbS1zZWNyZXQta2V5LTIwMjQnO1xuY29uc3QgVE9LRU5fRVhQSVJZID0gJzI0aCc7XG5cbi8vIOeUn+aIkCBKV1QgVG9rZW5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRva2VuKHVzZXIpIHtcbiAgcmV0dXJuIGp3dC5zaWduKFxuICAgIHtcbiAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICByZWFsX25hbWU6IHVzZXIucmVhbF9uYW1lLFxuICAgICAgcm9sZTogdXNlci5yb2xlLFxuICAgICAgZGVwYXJ0bWVudF9pZDogdXNlci5kZXBhcnRtZW50X2lkLFxuICAgIH0sXG4gICAgSldUX1NFQ1JFVCxcbiAgICB7IGV4cGlyZXNJbjogVE9LRU5fRVhQSVJZIH1cbiAgKTtcbn1cblxuLy8g6aqM6K+BIEpXVCBUb2tlblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVRva2VuKHRva2VuKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGp3dC52ZXJpZnkodG9rZW4sIEpXVF9TRUNSRVQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vIOS7juivt+axguWktOiOt+WPlueUqOaIt+S/oeaBr1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJGcm9tUmVxdWVzdChyZXF1ZXN0KSB7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJyk7XG4gIGlmICghYXV0aEhlYWRlciB8fCAhYXV0aEhlYWRlci5zdGFydHNXaXRoKCdCZWFyZXIgJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB0b2tlbiA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKDcpO1xuICByZXR1cm4gdmVyaWZ5VG9rZW4odG9rZW4pO1xufVxuXG4vLyDmo4Dmn6XmmK/lkKbmnInmnYPpmZBcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JvbGUodXNlciwgYWxsb3dlZFJvbGVzKSB7XG4gIGlmICghdXNlcikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gYWxsb3dlZFJvbGVzLmluY2x1ZGVzKHVzZXIucm9sZSk7XG59XG5cbi8vIOi/lOWbnuacquaOiOadg+WTjeW6lFxuZXhwb3J0IGZ1bmN0aW9uIHVuYXV0aG9yaXplZFJlc3BvbnNlKCkge1xuICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICB7IGVycm9yOiAn5pyq55m75b2V5oiW55m75b2V5bey6L+H5pyfJyB9LFxuICAgIHsgc3RhdHVzOiA0MDEgfVxuICApO1xufVxuXG4vLyDov5Tlm57ml6DmnYPpmZDlk43lupQgIFxuZXhwb3J0IGZ1bmN0aW9uIGZvcmJpZGRlblJlc3BvbnNlKCkge1xuICByZXR1cm4gUmVzcG9uc2UuanNvbihcbiAgICB7IGVycm9yOiAn5peg5p2D6ZmQ6K6/6ZeuJyB9LFxuICAgIHsgc3RhdHVzOiA0MDMgfVxuICApO1xufVxuIl0sIm5hbWVzIjpbImp3dCIsIkpXVF9TRUNSRVQiLCJwcm9jZXNzIiwiZW52IiwiVE9LRU5fRVhQSVJZIiwiZ2VuZXJhdGVUb2tlbiIsInVzZXIiLCJzaWduIiwiaWQiLCJ1c2VybmFtZSIsInJlYWxfbmFtZSIsInJvbGUiLCJkZXBhcnRtZW50X2lkIiwiZXhwaXJlc0luIiwidmVyaWZ5VG9rZW4iLCJ0b2tlbiIsInZlcmlmeSIsImVycm9yIiwiZ2V0VXNlckZyb21SZXF1ZXN0IiwicmVxdWVzdCIsImF1dGhIZWFkZXIiLCJoZWFkZXJzIiwiZ2V0Iiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImNoZWNrUm9sZSIsImFsbG93ZWRSb2xlcyIsImluY2x1ZGVzIiwidW5hdXRob3JpemVkUmVzcG9uc2UiLCJSZXNwb25zZSIsImpzb24iLCJzdGF0dXMiLCJmb3JiaWRkZW5SZXNwb25zZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./src/lib/auth.js\n");
/***/ }),
/***/ "(rsc)/./src/lib/db.js":
/*!***********************!*\
!*** ./src/lib/db.js ***!
\***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getDb)\n/* harmony export */ });\n/* harmony import */ var sql_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sql.js */ \"sql.js\");\n/* harmony import */ var sql_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sql_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! fs */ \"fs\");\n/* harmony import */ var fs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(fs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bcryptjs */ \"(rsc)/./node_modules/bcryptjs/index.js\");\n/* harmony import */ var bcryptjs__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(bcryptjs__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nconst DB_PATH = path__WEBPACK_IMPORTED_MODULE_1___default().join(process.cwd(), \"data\", \"database.sqlite\");\nlet db = null;\nlet SQL = null;\nlet initPromise = null;\nlet transactionDepth = 0;\nfunction saveDb() {\n if (transactionDepth > 0) {\n return;\n }\n if (db) {\n const data = db.export();\n const buffer = Buffer.from(data);\n const dir = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(DB_PATH);\n if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dir)) {\n fs__WEBPACK_IMPORTED_MODULE_2___default().mkdirSync(dir, {\n recursive: true\n });\n }\n fs__WEBPACK_IMPORTED_MODULE_2___default().writeFileSync(DB_PATH, buffer);\n }\n}\nasync function ensureInit() {\n if (db) return;\n if (initPromise) {\n await initPromise;\n return;\n }\n initPromise = (async ()=>{\n SQL = await sql_js__WEBPACK_IMPORTED_MODULE_0___default()();\n const dir = path__WEBPACK_IMPORTED_MODULE_1___default().dirname(DB_PATH);\n if (!fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(dir)) {\n fs__WEBPACK_IMPORTED_MODULE_2___default().mkdirSync(dir, {\n recursive: true\n });\n }\n try {\n if (fs__WEBPACK_IMPORTED_MODULE_2___default().existsSync(DB_PATH)) {\n const fileBuffer = fs__WEBPACK_IMPORTED_MODULE_2___default().readFileSync(DB_PATH);\n db = new SQL.Database(fileBuffer);\n } else {\n db = new SQL.Database();\n }\n } catch {\n db = new SQL.Database();\n }\n initializeDatabase(db);\n saveDb();\n })();\n await initPromise;\n}\n// 异步获取 db 代理 - 所有 API 路由使用这个\nasync function getDb() {\n await ensureInit();\n return {\n prepare (sql) {\n return {\n get (...params) {\n const stmt = db.prepare(sql);\n if (params.length > 0) stmt.bind(params);\n if (stmt.step()) {\n const result = stmt.getAsObject();\n stmt.free();\n return result;\n }\n stmt.free();\n return undefined;\n },\n all (...params) {\n const results = [];\n const stmt = db.prepare(sql);\n if (params.length > 0) stmt.bind(params);\n while(stmt.step()){\n results.push(stmt.getAsObject());\n }\n stmt.free();\n return results;\n },\n run (...params) {\n db.run(sql, params);\n const lastId = db.exec(\"SELECT last_insert_rowid() as id\");\n const changes = db.getRowsModified();\n saveDb();\n return {\n lastInsertRowid: lastId[0]?.values[0]?.[0] || 0,\n changes\n };\n }\n };\n },\n exec (sql) {\n db.exec(sql);\n saveDb();\n },\n transaction (fn) {\n return (...args)=>{\n transactionDepth++;\n db.run(\"BEGIN TRANSACTION\");\n try {\n const result = fn(...args);\n transactionDepth--;\n db.run(\"COMMIT\");\n saveDb();\n return result;\n } catch (error) {\n transactionDepth--;\n console.error(\"TRANSACTION ERROR:\", error);\n try {\n db.run(\"ROLLBACK\");\n } catch (rollbackError) {\n console.error(\"ROLLBACK ERROR:\", rollbackError);\n }\n throw error;\n }\n };\n }\n };\n}\nfunction initializeDatabase(database) {\n database.run(`CREATE TABLE IF NOT EXISTS departments (\n id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS users (\n id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE,\n password TEXT NOT NULL, real_name TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'employee', department_id INTEGER,\n status INTEGER DEFAULT 1, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (department_id) REFERENCES departments(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS partners (\n id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL,\n short_name TEXT, english_name TEXT, website TEXT, logo TEXT,\n address TEXT, description TEXT, is_deleted INTEGER DEFAULT 0,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS contracts (\n id INTEGER PRIMARY KEY AUTOINCREMENT, project_name TEXT NOT NULL,\n partner_id INTEGER, partner_name TEXT NOT NULL, contract_content TEXT,\n contract_years INTEGER, contract_amount REAL DEFAULT 0,\n estimated_profit REAL DEFAULT 0, payment_type TEXT DEFAULT 'receive',\n sign_date TEXT, status TEXT DEFAULT 'pending_supervisor',\n creator_id INTEGER NOT NULL, creator_name TEXT NOT NULL,\n department_id INTEGER, department_name TEXT, project_leader TEXT,\n supervisor_opinion TEXT, supervisor_approved INTEGER,\n supervisor_id INTEGER, supervisor_name TEXT, supervisor_time DATETIME,\n finance_opinion TEXT, finance_approved INTEGER,\n finance_id INTEGER, finance_name TEXT, finance_time DATETIME,\n secretary_opinion TEXT, secretary_approved INTEGER,\n secretary_id INTEGER, secretary_name TEXT, secretary_time DATETIME,\n reject_reason TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (creator_id) REFERENCES users(id),\n FOREIGN KEY (partner_id) REFERENCES partners(id),\n FOREIGN KEY (department_id) REFERENCES departments(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS contract_attachments (\n id INTEGER PRIMARY KEY AUTOINCREMENT, contract_id INTEGER NOT NULL,\n file_name TEXT NOT NULL, file_path TEXT NOT NULL,\n file_size INTEGER DEFAULT 0, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (contract_id) REFERENCES contracts(id))`);\n database.run(`CREATE TABLE IF NOT EXISTS system_config (\n id INTEGER PRIMARY KEY AUTOINCREMENT, config_key TEXT NOT NULL UNIQUE,\n config_value TEXT, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP)`);\n database.run(`CREATE TABLE IF NOT EXISTS role_permissions (\n id INTEGER PRIMARY KEY AUTOINCREMENT, role TEXT NOT NULL,\n menu_key TEXT NOT NULL, visible INTEGER DEFAULT 1,\n UNIQUE(role, menu_key))`);\n initDefaultData(database);\n}\nfunction initDefaultData(database) {\n const dc = database.exec(\"SELECT COUNT(*) FROM departments\");\n if ((dc[0]?.values[0]?.[0] || 0) === 0) {\n for (const n of [\n \"技术部\",\n \"市场部\",\n \"销售部\",\n \"财务部\",\n \"行政部\"\n ]){\n database.run(\"INSERT INTO departments (name) VALUES (?)\", [\n n\n ]);\n }\n }\n const uc = database.exec(\"SELECT COUNT(*) FROM users\");\n if ((uc[0]?.values[0]?.[0] || 0) === 0) {\n const s = bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().genSaltSync(10);\n const users = [\n [\n \"admin\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"admin123\", s),\n \"系统管理员\",\n \"admin\",\n null\n ],\n [\n \"zhangsan\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"张三\",\n \"employee\",\n 1\n ],\n [\n \"lisi\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"李四\",\n \"supervisor\",\n 1\n ],\n [\n \"wangwu_emp\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"王五\",\n \"employee\",\n 2\n ],\n [\n \"maqi\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"马七\",\n \"supervisor\",\n 2\n ],\n [\n \"wangwu\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"赵六\",\n \"finance\",\n 4\n ],\n [\n \"qianba\",\n bcryptjs__WEBPACK_IMPORTED_MODULE_3___default().hashSync(\"123456\", s),\n \"钱八\",\n \"secretary\",\n null\n ]\n ];\n for (const u of users){\n database.run(\"INSERT INTO users (username, password, real_name, role, department_id) VALUES (?,?,?,?,?)\", u);\n }\n }\n const cc = database.exec(\"SELECT COUNT(*) FROM system_config\");\n if ((cc[0]?.values[0]?.[0] || 0) === 0) {\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('company_name','合同流转审批系统')\");\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('company_logo','')\");\n database.run(\"INSERT INTO system_config (config_key, config_value) VALUES ('profit_percentage','10')\");\n }\n const pc = database.exec(\"SELECT COUNT(*) FROM role_permissions\");\n if ((pc[0]?.values[0]?.[0] || 0) === 0) {\n const menus = [\n \"dashboard\",\n \"contracts\",\n \"partners\",\n \"users\",\n \"departments\",\n \"settings\",\n \"permissions\"\n ];\n const roles = {\n admin: menus,\n employee: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n supervisor: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n finance: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ],\n secretary: [\n \"dashboard\",\n \"contracts\",\n \"partners\"\n ]\n };\n for (const [role, vm] of Object.entries(roles)){\n for (const m of menus){\n database.run(\"INSERT INTO role_permissions (role, menu_key, visible) VALUES (?,?,?)\", [\n role,\n m,\n vm.includes(m) ? 1 : 0\n ]);\n }\n }\n }\n const pac = database.exec(\"SELECT COUNT(*) FROM partners\");\n if ((pac[0]?.values[0]?.[0] || 0) === 0) {\n const defaultPartners = [\n [\n \"健帆生物科技集团股份有限公司\",\n \"健帆生物\",\n \"Jafron Biomedical Co., Ltd.\",\n \"http://www.jafron.com\",\n \"\",\n \"珠海市唐家湾科技创新海岸科技一路9号\",\n \"血液净化产品的研发、生产与销售\"\n ],\n [\n \"天士力医药集团股份有限公司\",\n \"天士力\",\n \"Tasly Pharmaceutical Group Co., Ltd.\",\n \"http://www.tasly.com\",\n \"\",\n \"天津市北辰科技园区科技东路1号\",\n \"现代中药、化学药、生物药的研发、生产与销售\"\n ],\n [\n \"雅培贸易(上海)有限公司\",\n \"雅培\",\n \"Abbott Laboratories Trading (Shanghai) Co., Ltd.\",\n \"http://www.abbott.com.cn\",\n \"\",\n \"中国上海自由贸易试验区外高桥保税区富特北路399号\",\n \"医疗健康、诊断、营养品及成熟药品\"\n ],\n [\n \"成都嗖嗖优速网络科技有限公司\",\n \"嗖嗖优速\",\n \"Chengdu Sousou Yousu Network Technology Co., Ltd.\",\n \"http://www.sousouyousu.com\",\n \"\",\n \"四川省成都市高新区吉泰五路88号\",\n \"互联网信息服务与网络技术研发\"\n ],\n [\n \"成都世纪城会展集团有限公司\",\n \"成都世纪城会展\",\n \"Chengdu Century City Exhibition Group Co., Ltd.\",\n \"http://www.centurycityexhibition.com\",\n \"\",\n \"四川省成都市高新区天府大道中段177号\",\n \"会展场馆运营、会议展览策划与执行\"\n ],\n [\n \"正大天晴药业集团股份有限公司\",\n \"正大天晴\",\n \"Chia Tai-Tianqing Pharmaceutical Group Co., Ltd.\",\n \"http://www.cttq.com\",\n \"\",\n \"江苏省连云港市新浦区巨龙北路16号\",\n \"抗肿瘤、肝病及呼吸系统药物研发与生产\"\n ],\n [\n \"国家卫生健康委能力建设和继续教育中心\",\n \"卫健委能建中心\",\n \"NCCHD, NHC\",\n \"http://www.ncchd.org.cn\",\n \"\",\n \"北京市海淀区学院路38号\",\n \"卫生健康行业人才队伍能力建设与继续医学教育\"\n ],\n [\n \"南京正大天晴制药有限公司\",\n \"南京正大天晴\",\n \"Nanjing Chia Tai-Tianqing Pharmaceutical Co., Ltd.\",\n \"http://www.njcttq.com\",\n \"\",\n \"江苏省南京市经济技术开发区恒广路36号\",\n \"心脑血管、外科及消化系统药物制造\"\n ],\n [\n \"西安盛博商务会展服务有限公司\",\n \"西安盛博会展\",\n \"Xi'an Shengbo Business Exhibition Service Co., Ltd.\",\n \"http://www.xashengbo.com\",\n \"\",\n \"陕西省西安市雁塔区朱雀大街南段2号\",\n \"会议展览服务与公关策划业务\"\n ]\n ];\n for (const p of defaultPartners){\n database.run(\"INSERT INTO partners (name, short_name, english_name, website, logo, address, description) VALUES (?,?,?,?,?,?,?)\", p);\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O2dCQUFDO2dCQUFrQjtnQkFBUTtnQkFBcUQ7Z0JBQThCO2dCQUFJO2dCQUFvQjthQUFpQjtZQUN2SjtnQkFBQztnQkFBaUI7Z0JBQVc7Z0JBQW1EO2dCQUF3QztnQkFBSTtnQkFBdUI7YUFBbUI7WUFDdEs7Z0JBQUM7Z0JBQWtCO2dCQUFRO2dCQUFvRDtnQkFBdUI7Z0JBQUk7Z0JBQXFCO2FBQXFCO1lBQ3BKO2dCQUFDO2dCQUFzQjtnQkFBVztnQkFBYztnQkFBMkI7Z0JBQUk7Z0JBQWdCO2FBQXdCO1lBQ3ZIO2dCQUFDO2dCQUFnQjtnQkFBVTtnQkFBc0Q7Z0JBQXlCO2dCQUFJO2dCQUF1QjthQUFtQjtZQUN4SjtnQkFBQztnQkFBa0I7Z0JBQVU7Z0JBQXdEO2dCQUE0QjtnQkFBSTtnQkFBcUI7YUFBZ0I7U0FDM0o7UUFDRCxLQUFLLE1BQU1DLEtBQUtELGdCQUFpQjtZQUMvQjFCLFNBQVNiLEdBQUcsQ0FBQyxxSEFBcUh3QztRQUNwSTtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vLi9zcmMvbGliL2RiLmpzPzdmOWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGluaXRTcWxKcyBmcm9tICdzcWwuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IGJjcnlwdCBmcm9tICdiY3J5cHRqcyc7XG5cbmNvbnN0IERCX1BBVEggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2RhdGEnLCAnZGF0YWJhc2Uuc3FsaXRlJyk7XG5cbmxldCBkYiA9IG51bGw7XG5sZXQgU1FMID0gbnVsbDtcbmxldCBpbml0UHJvbWlzZSA9IG51bGw7XG5sZXQgdHJhbnNhY3Rpb25EZXB0aCA9IDA7XG5cbmZ1bmN0aW9uIHNhdmVEYigpIHtcbiAgaWYgKHRyYW5zYWN0aW9uRGVwdGggPiAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChkYikge1xuICAgIGNvbnN0IGRhdGEgPSBkYi5leHBvcnQoKTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoREJfUEFUSCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKERCX1BBVEgsIGJ1ZmZlcik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlSW5pdCgpIHtcbiAgaWYgKGRiKSByZXR1cm47XG4gIGlmIChpbml0UHJvbWlzZSkge1xuICAgIGF3YWl0IGluaXRQcm9taXNlO1xuICAgIHJldHVybjtcbiAgfVxuICBpbml0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgU1FMID0gYXdhaXQgaW5pdFNxbEpzKCk7XG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKERCX1BBVEgpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKERCX1BBVEgpKSB7XG4gICAgICAgIGNvbnN0IGZpbGVCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoREJfUEFUSCk7XG4gICAgICAgIGRiID0gbmV3IFNRTC5EYXRhYmFzZShmaWxlQnVmZmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRiID0gbmV3IFNRTC5EYXRhYmFzZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgZGIgPSBuZXcgU1FMLkRhdGFiYXNlKCk7XG4gICAgfVxuICAgIGluaXRpYWxpemVEYXRhYmFzZShkYik7XG4gICAgc2F2ZURiKCk7XG4gIH0pKCk7XG4gIGF3YWl0IGluaXRQcm9taXNlO1xufVxuXG4vLyDlvILmraXojrflj5YgZGIg5Luj55CGIC0g5omA5pyJIEFQSSDot6/nlLHkvb/nlKjov5nkuKpcbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGdldERiKCkge1xuICBhd2FpdCBlbnN1cmVJbml0KCk7XG4gIHJldHVybiB7XG4gICAgcHJlcGFyZShzcWwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldCguLi5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBzdG10ID0gZGIucHJlcGFyZShzcWwpO1xuICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMCkgc3RtdC5iaW5kKHBhcmFtcyk7XG4gICAgICAgICAgaWYgKHN0bXQuc3RlcCgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBzdG10LmdldEFzT2JqZWN0KCk7XG4gICAgICAgICAgICBzdG10LmZyZWUoKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0bXQuZnJlZSgpO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGFsbCguLi5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgICAgY29uc3Qgc3RtdCA9IGRiLnByZXBhcmUoc3FsKTtcbiAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApIHN0bXQuYmluZChwYXJhbXMpO1xuICAgICAgICAgIHdoaWxlIChzdG10LnN0ZXAoKSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHN0bXQuZ2V0QXNPYmplY3QoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0bXQuZnJlZSgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9LFxuICAgICAgICBydW4oLi4ucGFyYW1zKSB7XG4gICAgICAgICAgZGIucnVuKHNxbCwgcGFyYW1zKTtcbiAgICAgICAgICBjb25zdCBsYXN0SWQgPSBkYi5leGVjKCdTRUxFQ1QgbGFzdF9pbnNlcnRfcm93aWQoKSBhcyBpZCcpO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZXMgPSBkYi5nZXRSb3dzTW9kaWZpZWQoKTtcbiAgICAgICAgICBzYXZlRGIoKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFzdEluc2VydFJvd2lkOiBsYXN0SWRbMF0/LnZhbHVlc1swXT8uWzBdIHx8IDAsXG4gICAgICAgICAgICBjaGFuZ2VzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIGV4ZWMoc3FsKSB7XG4gICAgICBkYi5leGVjKHNxbCk7XG4gICAgICBzYXZlRGIoKTtcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uKGZuKSB7XG4gICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdHJhbnNhY3Rpb25EZXB0aCsrO1xuICAgICAgICBkYi5ydW4oJ0JFR0lOIFRSQU5TQUNUSU9OJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm4oLi4uYXJncyk7XG4gICAgICAgICAgdHJhbnNhY3Rpb25EZXB0aC0tO1xuICAgICAgICAgIGRiLnJ1bignQ09NTUlUJyk7XG4gICAgICAgICAgc2F2ZURiKCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0cmFuc2FjdGlvbkRlcHRoLS07XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlRSQU5TQUNUSU9OIEVSUk9SOlwiLCBlcnJvcik7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRiLnJ1bignUk9MTEJBQ0snKTtcbiAgICAgICAgICB9IGNhdGNoIChyb2xsYmFja0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUk9MTEJBQ0sgRVJST1I6XCIsIHJvbGxiYWNrRXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVEYXRhYmFzZShkYXRhYmFzZSkge1xuICBkYXRhYmFzZS5ydW4oYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGRlcGFydG1lbnRzIChcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIG5hbWUgVEVYVCBOT1QgTlVMTCBVTklRVUUsXG4gICAgY3JlYXRlZF9hdCBEQVRFVElNRSBERUZBVUxUIENVUlJFTlRfVElNRVNUQU1QKWApO1xuICBkYXRhYmFzZS5ydW4oYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHVzZXJzIChcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHVzZXJuYW1lIFRFWFQgTk9UIE5VTEwgVU5JUVVFLFxuICAgIHBhc3N3b3JkIFRFWFQgTk9UIE5VTEwsIHJlYWxfbmFtZSBURVhUIE5PVCBOVUxMLFxuICAgIHJvbGUgVEVYVCBOT1QgTlVMTCBERUZBVUxUICdlbXBsb3llZScsIGRlcGFydG1lbnRfaWQgSU5URUdFUixcbiAgICBzdGF0dXMgSU5URUdFUiBERUZBVUxUIDEsIGNyZWF0ZWRfYXQgREFURVRJTUUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCxcbiAgICBGT1JFSUdOIEtFWSAoZGVwYXJ0bWVudF9pZCkgUkVGRVJFTkNFUyBkZXBhcnRtZW50cyhpZCkpYCk7XG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcGFydG5lcnMgKFxuICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgbmFtZSBURVhUIE5PVCBOVUxMLFxuICAgIHNob3J0X25hbWUgVEVYVCwgZW5nbGlzaF9uYW1lIFRFWFQsIHdlYnNpdGUgVEVYVCwgbG9nbyBURVhULFxuICAgIGFkZHJlc3MgVEVYVCwgZGVzY3JpcHRpb24gVEVYVCwgaXNfZGVsZXRlZCBJTlRFR0VSIERFRkFVTFQgMCxcbiAgICBjcmVhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVApYCk7XG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29udHJhY3RzIChcbiAgICBpZCBJTlRFR0VSIFBSSU1BUlkgS0VZIEFVVE9JTkNSRU1FTlQsIHByb2plY3RfbmFtZSBURVhUIE5PVCBOVUxMLFxuICAgIHBhcnRuZXJfaWQgSU5URUdFUiwgcGFydG5lcl9uYW1lIFRFWFQgTk9UIE5VTEwsIGNvbnRyYWN0X2NvbnRlbnQgVEVYVCxcbiAgICBjb250cmFjdF95ZWFycyBJTlRFR0VSLCBjb250cmFjdF9hbW91bnQgUkVBTCBERUZBVUxUIDAsXG4gICAgZXN0aW1hdGVkX3Byb2ZpdCBSRUFMIERFRkFVTFQgMCwgcGF5bWVudF90eXBlIFRFWFQgREVGQVVMVCAncmVjZWl2ZScsXG4gICAgc2lnbl9kYXRlIFRFWFQsIHN0YXR1cyBURVhUIERFRkFVTFQgJ3BlbmRpbmdfc3VwZXJ2aXNvcicsXG4gICAgY3JlYXRvcl9pZCBJTlRFR0VSIE5PVCBOVUxMLCBjcmVhdG9yX25hbWUgVEVYVCBOT1QgTlVMTCxcbiAgICBkZXBhcnRtZW50X2lkIElOVEVHRVIsIGRlcGFydG1lbnRfbmFtZSBURVhULCBwcm9qZWN0X2xlYWRlciBURVhULFxuICAgIHN1cGVydmlzb3Jfb3BpbmlvbiBURVhULCBzdXBlcnZpc29yX2FwcHJvdmVkIElOVEVHRVIsXG4gICAgc3VwZXJ2aXNvcl9pZCBJTlRFR0VSLCBzdXBlcnZpc29yX25hbWUgVEVYVCwgc3VwZXJ2aXNvcl90aW1lIERBVEVUSU1FLFxuICAgIGZpbmFuY2Vfb3BpbmlvbiBURVhULCBmaW5hbmNlX2FwcHJvdmVkIElOVEVHRVIsXG4gICAgZmluYW5jZV9pZCBJTlRFR0VSLCBmaW5hbmNlX25hbWUgVEVYVCwgZmluYW5jZV90aW1lIERBVEVUSU1FLFxuICAgIHNlY3JldGFyeV9vcGluaW9uIFRFWFQsIHNlY3JldGFyeV9hcHByb3ZlZCBJTlRFR0VSLFxuICAgIHNlY3JldGFyeV9pZCBJTlRFR0VSLCBzZWNyZXRhcnlfbmFtZSBURVhULCBzZWNyZXRhcnlfdGltZSBEQVRFVElNRSxcbiAgICByZWplY3RfcmVhc29uIFRFWFQsIGNyZWF0ZWRfYXQgREFURVRJTUUgREVGQVVMVCBDVVJSRU5UX1RJTUVTVEFNUCxcbiAgICB1cGRhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsXG4gICAgRk9SRUlHTiBLRVkgKGNyZWF0b3JfaWQpIFJFRkVSRU5DRVMgdXNlcnMoaWQpLFxuICAgIEZPUkVJR04gS0VZIChwYXJ0bmVyX2lkKSBSRUZFUkVOQ0VTIHBhcnRuZXJzKGlkKSxcbiAgICBGT1JFSUdOIEtFWSAoZGVwYXJ0bWVudF9pZCkgUkVGRVJFTkNFUyBkZXBhcnRtZW50cyhpZCkpYCk7XG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgY29udHJhY3RfYXR0YWNobWVudHMgKFxuICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCwgY29udHJhY3RfaWQgSU5URUdFUiBOT1QgTlVMTCxcbiAgICBmaWxlX25hbWUgVEVYVCBOT1QgTlVMTCwgZmlsZV9wYXRoIFRFWFQgTk9UIE5VTEwsXG4gICAgZmlsZV9zaXplIElOVEVHRVIgREVGQVVMVCAwLCBjcmVhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVAsXG4gICAgRk9SRUlHTiBLRVkgKGNvbnRyYWN0X2lkKSBSRUZFUkVOQ0VTIGNvbnRyYWN0cyhpZCkpYCk7XG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgc3lzdGVtX2NvbmZpZyAoXG4gICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCBjb25maWdfa2V5IFRFWFQgTk9UIE5VTEwgVU5JUVVFLFxuICAgIGNvbmZpZ192YWx1ZSBURVhULCB1cGRhdGVkX2F0IERBVEVUSU1FIERFRkFVTFQgQ1VSUkVOVF9USU1FU1RBTVApYCk7XG4gIGRhdGFiYXNlLnJ1bihgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcm9sZV9wZXJtaXNzaW9ucyAoXG4gICAgaWQgSU5URUdFUiBQUklNQVJZIEtFWSBBVVRPSU5DUkVNRU5ULCByb2xlIFRFWFQgTk9UIE5VTEwsXG4gICAgbWVudV9rZXkgVEVYVCBOT1QgTlVMTCwgdmlzaWJsZSBJTlRFR0VSIERFRkFVTFQgMSxcbiAgICBVTklRVUUocm9sZSwgbWVudV9rZXkpKWApO1xuICBpbml0RGVmYXVsdERhdGEoZGF0YWJhc2UpO1xufVxuXG5mdW5jdGlvbiBpbml0RGVmYXVsdERhdGEoZGF0YWJhc2UpIHtcbiAgY29uc3QgZGMgPSBkYXRhYmFzZS5leGVjKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSBkZXBhcnRtZW50cycpO1xuICBpZiAoKGRjWzBdPy52YWx1ZXNbMF0/LlswXSB8fCAwKSA9PT0gMCkge1xuICAgIGZvciAoY29uc3QgbiBvZiBbJ+aKgOacr+mDqCcsICfluILlnLrpg6gnLCAn6ZSA5ZSu6YOoJywgJ+i0ouWKoemDqCcsICfooYzmlL/pg6gnXSkge1xuICAgICAgZGF0YWJhc2UucnVuKCdJTlNFUlQgSU5UTyBkZXBhcnRtZW50cyAobmFtZSkgVkFMVUVTICg/KScsIFtuXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHVjID0gZGF0YWJhc2UuZXhlYygnU0VMRUNUIENPVU5UKCopIEZST00gdXNlcnMnKTtcbiAgaWYgKCh1Y1swXT8udmFsdWVzWzBdPy5bMF0gfHwgMCkgPT09IDApIHtcbiAgICBjb25zdCBzID0gYmNyeXB0LmdlblNhbHRTeW5jKDEwKTtcbiAgICBjb25zdCB1c2VycyA9IFtcbiAgICAgIFsnYWRtaW4nLCBiY3J5cHQuaGFzaFN5bmMoJ2FkbWluMTIzJywgcyksICfns7vnu5/nrqHnkIblkZgnLCAnYWRtaW4nLCBudWxsXSxcbiAgICAgIFsnemhhbmdzYW4nLCBiY3J5cHQuaGFzaFN5bmMoJzEyMzQ1NicsIHMpLCAn5byg5LiJJywgJ2VtcGxveWVlJywgMV0sXG4gICAgICBbJ2xpc2knLCBiY3J5cHQuaGFzaFN5bmMoJzEyMzQ1NicsIHMpLCAn5p2O5ZubJywgJ3N1cGVydmlzb3InLCAxXSxcbiAgICAgIFsnd2FuZ3d1X2VtcCcsIGJjcnlwdC5oYXNoU3luYygnMTIzNDU2JywgcyksICfnjovkupQnLCAnZW1wbG95ZWUnLCAyXSxcbiAgICAgIFsnbWFxaScsIGJjcnlwdC5oYXNoU3luYygnMTIzNDU2JywgcyksICfpqazkuIMnLCAnc3VwZXJ2aXNvcicsIDJdLFxuICAgICAgWyd3YW5nd3UnLCBiY3J5cHQuaGFzaFN5bmMoJzEyMzQ1NicsIHMpLCAn6LW15YWtJywgJ2ZpbmFuY2UnLCA0XSxcbiAgICAgIFsncWlhbmJhJywgYmNyeXB0Lmhhc2hTeW5jKCcxMjM0NTYnLCBzKSwgJ+mSseWFqycsICdzZWNyZXRhcnknLCBudWxsXSxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgdSBvZiB1c2Vycykge1xuICAgICAgZGF0YWJhc2UucnVuKCdJTlNFUlQgSU5UTyB1c2VycyAodXNlcm5hbWUsIHBhc3N3b3JkLCByZWFsX25hbWUsIHJvbGUsIGRlcGFydG1lbnRfaWQpIFZBTFVFUyAoPyw/LD8sPyw/KScsIHUpO1xuICAgIH1cbiAgfVxuICBjb25zdCBjYyA9IGRhdGFiYXNlLmV4ZWMoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIHN5c3RlbV9jb25maWcnKTtcbiAgaWYgKChjY1swXT8udmFsdWVzWzBdPy5bMF0gfHwgMCkgPT09IDApIHtcbiAgICBkYXRhYmFzZS5ydW4oXCJJTlNFUlQgSU5UTyBzeXN0ZW1fY29uZmlnIChjb25maWdfa2V5LCBjb25maWdfdmFsdWUpIFZBTFVFUyAoJ2NvbXBhbnlfbmFtZScsJ+WQiOWQjOa1gei9rOWuoeaJueezu+e7nycpXCIpO1xuICAgIGRhdGFiYXNlLnJ1bihcIklOU0VSVCBJTlRPIHN5c3RlbV9jb25maWcgKGNvbmZpZ19rZXksIGNvbmZpZ192YWx1ZSkgVkFMVUVTICgnY29tcGFueV9sb2dvJywnJylcIik7XG4gICAgZGF0YWJhc2UucnVuKFwiSU5TRVJUIElOVE8gc3lzdGVtX2NvbmZpZyAoY29uZmlnX2tleSwgY29uZmlnX3ZhbHVlKSBWQUxVRVMgKCdwcm9maXRfcGVyY2VudGFnZScsJzEwJylcIik7XG4gIH1cbiAgY29uc3QgcGMgPSBkYXRhYmFzZS5leGVjKCdTRUxFQ1QgQ09VTlQoKikgRlJPTSByb2xlX3Blcm1pc3Npb25zJyk7XG4gIGlmICgocGNbMF0/LnZhbHVlc1swXT8uWzBdIHx8IDApID09PSAwKSB7XG4gICAgY29uc3QgbWVudXMgPSBbJ2Rhc2hib2FyZCcsJ2NvbnRyYWN0cycsJ3BhcnRuZXJzJywndXNlcnMnLCdkZXBhcnRtZW50cycsJ3NldHRpbmdzJywncGVybWlzc2lvbnMnXTtcbiAgICBjb25zdCByb2xlcyA9IHsgYWRtaW46IG1lbnVzLCBlbXBsb3llZTogWydkYXNoYm9hcmQnLCdjb250cmFjdHMnLCdwYXJ0bmVycyddLFxuICAgICAgc3VwZXJ2aXNvcjogWydkYXNoYm9hcmQnLCdjb250cmFjdHMnLCdwYXJ0bmVycyddLCBmaW5hbmNlOiBbJ2Rhc2hib2FyZCcsJ2NvbnRyYWN0cycsJ3BhcnRuZXJzJ10sXG4gICAgICBzZWNyZXRhcnk6IFsnZGFzaGJvYXJkJywnY29udHJhY3RzJywncGFydG5lcnMnXSB9O1xuICAgIGZvciAoY29uc3QgW3JvbGUsIHZtXSBvZiBPYmplY3QuZW50cmllcyhyb2xlcykpIHtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBtZW51cykge1xuICAgICAgICBkYXRhYmFzZS5ydW4oJ0lOU0VSVCBJTlRPIHJvbGVfcGVybWlzc2lvbnMgKHJvbGUsIG1lbnVfa2V5LCB2aXNpYmxlKSBWQUxVRVMgKD8sPyw/KScsXG4gICAgICAgICAgW3JvbGUsIG0sIHZtLmluY2x1ZGVzKG0pID8gMSA6IDBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcGFjID0gZGF0YWJhc2UuZXhlYygnU0VMRUNUIENPVU5UKCopIEZST00gcGFydG5lcnMnKTtcbiAgaWYgKChwYWNbMF0/LnZhbHVlc1swXT8uWzBdIHx8IDApID09PSAwKSB7XG4gICAgY29uc3QgZGVmYXVsdFBhcnRuZXJzID0gW1xuICAgICAgWyflgaXluIbnlJ/niannp5HmioDpm4blm6LogqHku73mnInpmZDlhazlj7gnLCAn5YGl5biG55Sf54mpJywgJ0phZnJvbiBCaW9tZWRpY2FsIENvLiwgTHRkLicsICdodHRwOi8vd3d3LmphZnJvbi5jb20nLCAnJywgJ+ePoOa1t+W4guWUkOWutua5vuenkeaKgOWIm+aWsOa1t+WyuOenkeaKgOS4gOi3rznlj7cnLCAn6KGA5ray5YeA5YyW5Lqn5ZOB55qE56CU5Y+R44CB55Sf5Lqn5LiO6ZSA5ZSuJ10sXG4gICAgICBbJ+WkqeWjq+WKm+WMu+iNr+mbhuWbouiCoeS7veaciemZkOWFrOWPuCcsICflpKnlo6vlipsnLCAnVGFzbHkgUGhhcm1hY2V1dGljYWwgR3JvdXAgQ28uLCBMdGQuJywgJ2h0dHA6Ly93d3cudGFzbHkuY29tJywgJycsICflpKnmtKXluILljJfovrDnp5HmioDlm63ljLrnp5HmioDkuJzot68x5Y+3JywgJ+eOsOS7o+S4reiNr+OAgeWMluWtpuiNr+OAgeeUn+eJqeiNr+eahOeglOWPkeOAgeeUn+S6p+S4jumUgOWUriddLFxuICAgICAgWyfpm4Xln7notLjmmJPvvIjkuIrmtbfvvInmnInpmZDlhazlj7gnLCAn6ZuF5Z+5JywgJ0FiYm90dCBMYWJvcmF0b3JpZXMgVHJhZGluZyAoU2hhbmdoYWkpIENvLiwgTHRkLicsICdodHRwOi8vd3d3LmFiYm90dC5jb20uY24nLCAnJywgJ+S4reWbve+8iOS4iua1t++8ieiHqueUsei0uOaYk+ivlemqjOWMuuWklumrmOahpeS/neeojuWMuuWvjOeJueWMl+i3rzM5OeWPtycsICfljLvnlpflgaXlurfjgIHor4rmlq3jgIHokKXlhbvlk4Hlj4rmiJDnhp/oja/lk4EnXSxcbiAgICAgIFsn5oiQ6YO95ZeW5ZeW5LyY6YCf572R57uc56eR5oqA5pyJ6ZmQ5YWs5Y+4JywgJ+WXluWXluS8mOmAnycsICdDaGVuZ2R1IFNvdXNvdSBZb3VzdSBOZXR3b3JrIFRlY2hub2xvZ3kgQ28uLCBMdGQuJywgJ2h0dHA6Ly93d3cuc291c291eW91c3UuY29tJywgJycsICflm5vlt53nnIHmiJDpg73luILpq5jmlrDljLrlkInms7DkupTot684OOWPtycsICfkupLogZTnvZHkv6Hmga/mnI3liqHkuI7nvZHnu5zmioDmnK/noJTlj5EnXSxcbiAgICAgIFsn5oiQ6YO95LiW57qq5Z+O5Lya5bGV6ZuG5Zui5pyJ6ZmQ5YWs5Y+4JywgJ+aIkOmDveS4lue6quWfjuS8muWxlScsICdDaGVuZ2R1IENlbnR1cnkgQ2l0eSBFeGhpYml0aW9uIEdyb3VwIENvLiwgTHRkLicsICdodHRwOi8vd3d3LmNlbnR1cnljaXR5ZXhoaWJpdGlvbi5jb20nLCAnJywgJ+Wbm+W3neecgeaIkOmDveW4gumrmOaWsOWMuuWkqeW6nOWkp+mBk+S4reautTE3N+WPtycsICfkvJrlsZXlnLrppobov5DokKXjgIHkvJrorq7lsZXop4jnrZbliJLkuI7miafooYwnXSxcbiAgICAgIFsn5q2j5aSn5aSp5pm06I2v5Lia6ZuG5Zui6IKh5Lu95pyJ6ZmQ5YWs5Y+4JywgJ+ato+Wkp+WkqeaZtCcsICdDaGlhIFRhaS1UaWFucWluZyBQaGFybWFjZXV0aWNhbCBHcm91cCBDby4sIEx0ZC4nLCAnaHR0cDovL3d3dy5jdHRxLmNvbScsICcnLCAn5rGf6IuP55yB6L+e5LqR5riv5biC5paw5rWm5Yy65beo6b6Z5YyX6LevMTblj7cnLCAn5oqX6IK/55ik44CB6IKd55eF5Y+K5ZG85ZC457O757uf6I2v54mp56CU5Y+R5LiO55Sf5LqnJ10sXG4gICAgICBbJ+WbveWutuWNq+eUn+WBpeW6t+WnlOiDveWKm+W7uuiuvuWSjOe7p+e7reaVmeiCsuS4reW/gycsICfljavlgaXlp5Tog73lu7rkuK3lv4MnLCAnTkNDSEQsIE5IQycsICdodHRwOi8vd3d3Lm5jY2hkLm9yZy5jbicsICcnLCAn5YyX5Lqs5biC5rW35reA5Yy65a2m6Zmi6LevMzjlj7cnLCAn5Y2r55Sf5YGl5bq36KGM5Lia5Lq65omN6Zif5LyN6IO95Yqb5bu66K6+5LiO57un57ut5Yy75a2m5pWZ6IKyJ10sXG4gICAgICBbJ+WNl+S6rOato+Wkp+WkqeaZtOWItuiNr+aciemZkOWFrOWPuCcsICfljZfkuqzmraPlpKflpKnmmbQnLCAnTmFuamluZyBDaGlhIFRhaS1UaWFucWluZyBQaGFybWFjZXV0aWNhbCBDby4sIEx0ZC4nLCAnaHR0cDovL3d3dy5uamN0dHEuY29tJywgJycsICfmsZ/oi4/nnIHljZfkuqzluILnu4/mtY7mioDmnK/lvIDlj5HljLrmgZLlub/ot68zNuWPtycsICflv4PohJHooYDnrqHjgIHlpJbnp5Hlj4rmtojljJbns7vnu5/oja/nianliLbpgKAnXSxcbiAgICAgIFsn6KW/5a6J55ub5Y2a5ZWG5Yqh5Lya5bGV5pyN5Yqh5pyJ6ZmQ5YWs5Y+4JywgJ+ilv+Wuieebm+WNmuS8muWxlScsICdYaVxcJ2FuIFNoZW5nYm8gQnVzaW5lc3MgRXhoaWJpdGlvbiBTZXJ2aWNlIENvLiwgTHRkLicsICdodHRwOi8vd3d3Lnhhc2hlbmdiby5jb20nLCAnJywgJ+mZleilv+ecgeilv+WuieW4gumbgeWhlOWMuuacsembgOWkp+ihl+WNl+autTLlj7cnLCAn5Lya6K6u5bGV6KeI5pyN5Yqh5LiO5YWs5YWz562W5YiS5Lia5YqhJ11cbiAgICBdO1xuICAgIGZvciAoY29uc3QgcCBvZiBkZWZhdWx0UGFydG5lcnMpIHtcbiAgICAgIGRhdGFiYXNlLnJ1bignSU5TRVJUIElOVE8gcGFydG5lcnMgKG5hbWUsIHNob3J0X25hbWUsIGVuZ2xpc2hfbmFtZSwgd2Vic2l0ZSwgbG9nbywgYWRkcmVzcywgZGVzY3JpcHRpb24pIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyknLCBwKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbml0U3FsSnMiLCJwYXRoIiwiZnMiLCJiY3J5cHQiLCJEQl9QQVRIIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJkYiIsIlNRTCIsImluaXRQcm9taXNlIiwidHJhbnNhY3Rpb25EZXB0aCIsInNhdmVEYiIsImRhdGEiLCJleHBvcnQiLCJidWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiZGlyIiwiZGlybmFtZSIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGVTeW5jIiwiZW5zdXJlSW5pdCIsImZpbGVCdWZmZXIiLCJyZWFkRmlsZVN5bmMiLCJEYXRhYmFzZSIsImluaXRpYWxpemVEYXRhYmFzZSIsImdldERiIiwicHJlcGFyZSIsInNxbCIsImdldCIsInBhcmFtcyIsInN0bXQiLCJsZW5ndGgiLCJiaW5kIiwic3RlcCIsInJlc3VsdCIsImdldEFzT2JqZWN0IiwiZnJlZSIsInVuZGVmaW5lZCIsImFsbCIsInJlc3VsdHMiLCJwdXNoIiwicnVuIiwibGFzdElkIiwiZXhlYyIsImNoYW5nZXMiLCJnZXRSb3dzTW9kaWZpZWQiLCJsYXN0SW5zZXJ0Um93aWQiLCJ2YWx1ZXMiLCJ0cmFuc2FjdGlvbiIsImZuIiwiYXJncyIsImVycm9yIiwiY29uc29sZSIsInJvbGxiYWNrRXJyb3IiLCJkYXRhYmFzZSIsImluaXREZWZhdWx0RGF0YSIsImRjIiwibiIsInVjIiwicyIsImdlblNhbHRTeW5jIiwidXNlcnMiLCJoYXNoU3luYyIsInUiLCJjYyIsInBjIiwibWVudXMiLCJyb2xlcyIsImFkbWluIiwiZW1wbG95ZWUiLCJzdXBlcnZpc29yIiwiZmluYW5jZSIsInNlY3JldGFyeSIsInJvbGUiLCJ2bSIsIk9iamVjdCIsImVudHJpZXMiLCJtIiwiaW5jbHVkZXMiLCJwYWMiLCJkZWZhdWx0UGFydG5lcnMiLCJwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./src/lib/db.js\n");
/***/ })
};
;
// load runtime
var __webpack_require__ = require("../../../../webpack-runtime.js");
__webpack_require__.C(exports);
var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/semver","vendor-chunks/bcryptjs","vendor-chunks/jsonwebtoken","vendor-chunks/lodash.includes","vendor-chunks/jws","vendor-chunks/lodash.once","vendor-chunks/jwa","vendor-chunks/lodash.isinteger","vendor-chunks/ecdsa-sig-formatter","vendor-chunks/lodash.isplainobject","vendor-chunks/ms","vendor-chunks/lodash.isstring","vendor-chunks/lodash.isnumber","vendor-chunks/lodash.isboolean","vendor-chunks/safe-buffer","vendor-chunks/buffer-equal-constant-time"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fauth%2Flogin%2Froute&page=%2Fapi%2Fauth%2Flogin%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fauth%2Flogin%2Froute.js&appDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F%2Fsrc%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Fgandanxiangzhao%2FDesktop%2F%E5%90%88%E5%90%8C%E6%B5%81%E8%BD%AC%E5%AE%A1%E6%89%B9%E7%B3%BB%E7%BB%9F&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
module.exports = __webpack_exports__;
})();