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

226 lines
118 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/contracts/import/route";
exports.ids = ["app/api/contracts/import/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");
/***/ }),
/***/ "rimraf":
/*!*************************!*\
!*** external "rimraf" ***!
\*************************/
/***/ ((module) => {
module.exports = require("rimraf");
/***/ }),
/***/ "assert":
/*!*************************!*\
!*** external "assert" ***!
\*************************/
/***/ ((module) => {
module.exports = require("assert");
/***/ }),
/***/ "buffer":
/*!*************************!*\
!*** external "buffer" ***!
\*************************/
/***/ ((module) => {
module.exports = require("buffer");
/***/ }),
/***/ "constants":
/*!****************************!*\
!*** external "constants" ***!
\****************************/
/***/ ((module) => {
module.exports = require("constants");
/***/ }),
/***/ "crypto":
/*!*************************!*\
!*** external "crypto" ***!
\*************************/
/***/ ((module) => {
module.exports = require("crypto");
/***/ }),
/***/ "events":
/*!*************************!*\
!*** external "events" ***!
\*************************/
/***/ ((module) => {
module.exports = require("events");
/***/ }),
/***/ "fs":
/*!*********************!*\
!*** external "fs" ***!
\*********************/
/***/ ((module) => {
module.exports = require("fs");
/***/ }),
/***/ "os":
/*!*********************!*\
!*** external "os" ***!
\*********************/
/***/ ((module) => {
module.exports = require("os");
/***/ }),
/***/ "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");
/***/ }),
/***/ "string_decoder":
/*!*********************************!*\
!*** external "string_decoder" ***!
\*********************************/
/***/ ((module) => {
module.exports = require("string_decoder");
/***/ }),
/***/ "util":
/*!***********************!*\
!*** external "util" ***!
\***********************/
/***/ ((module) => {
module.exports = require("util");
/***/ }),
/***/ "zlib":
/*!***********************!*\
!*** external "zlib" ***!
\***********************/
/***/ ((module) => {
module.exports = require("zlib");
/***/ }),
/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Fimport%2Froute&page=%2Fapi%2Fcontracts%2Fimport%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Fimport%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%2Fcontracts%2Fimport%2Froute&page=%2Fapi%2Fcontracts%2Fimport%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Fimport%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_contracts_import_route_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./src/app/api/contracts/import/route.js */ \"(rsc)/./src/app/api/contracts/import/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/contracts/import/route\",\n pathname: \"/api/contracts/import\",\n filename: \"route\",\n bundlePath: \"app/api/contracts/import/route\"\n },\n resolvedPagePath: \"/Users/gandanxiangzhao/Desktop/合同流转审批系统/src/app/api/contracts/import/route.js\",\n nextConfigOutput,\n userland: _Users_gandanxiangzhao_Desktop_src_app_api_contracts_import_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/contracts/import/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/bmFtZT1hcHAlMkZhcGklMkZjb250cmFjdHMlMkZpbXBvcnQlMkZyb3V0ZSZwYWdlPSUyRmFwaSUyRmNvbnRyYWN0cyUyRmltcG9ydCUyRnJvdXRlJmFwcFBhdGhzPSZwYWdlUGF0aD1wcml2YXRlLW5leHQtYXBwLWRpciUyRmFwaSUyRmNvbnRyYWN0cyUyRmltcG9ydCUyRnJvdXRlLmpzJmFwcERpcj0lMkZVc2VycyUyRmdhbmRhbnhpYW5nemhhbyUyRkRlc2t0b3AlMkYlRTUlOTAlODglRTUlOTAlOEMlRTYlQjUlODElRTglQkQlQUMlRTUlQUUlQTElRTYlODklQjklRTclQjMlQkIlRTclQkIlOUYlMkZzcmMlMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRlVzZXJzJTJGZ2FuZGFueGlhbmd6aGFvJTJGRGVza3RvcCUyRiVFNSU5MCU4OCVFNSU5MCU4QyVFNiVCNSU4MSVFOCVCRCVBQyVFNSVBRSVBMSVFNiU4OSVCOSVFNyVCMyVCQiVFNyVCQiU5RiZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDNkI7QUFDMUc7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdIQUFtQjtBQUMzQztBQUNBLGNBQWMseUVBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVk7QUFDWixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpRUFBaUU7QUFDekU7QUFDQTtBQUNBLFdBQVcsNEVBQVc7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUN1SDs7QUFFdkgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vPzRiOWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiL1VzZXJzL2dhbmRhbnhpYW5nemhhby9EZXNrdG9wL+WQiOWQjOa1gei9rOWuoeaJueezu+e7ny9zcmMvYXBwL2FwaS9jb250cmFjdHMvaW1wb3J0L3JvdXRlLmpzXCI7XG4vLyBXZSBpbmplY3QgdGhlIG5leHRDb25maWdPdXRwdXQgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiB0aGUgcm91dGVcbi8vIG1vZHVsZS5cbmNvbnN0IG5leHRDb25maWdPdXRwdXQgPSBcIlwiXG5jb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBBcHBSb3V0ZVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5BUFBfUk9VVEUsXG4gICAgICAgIHBhZ2U6IFwiL2FwaS9jb250cmFjdHMvaW1wb3J0L3JvdXRlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9hcGkvY29udHJhY3RzL2ltcG9ydFwiLFxuICAgICAgICBmaWxlbmFtZTogXCJyb3V0ZVwiLFxuICAgICAgICBidW5kbGVQYXRoOiBcImFwcC9hcGkvY29udHJhY3RzL2ltcG9ydC9yb3V0ZVwiXG4gICAgfSxcbiAgICByZXNvbHZlZFBhZ2VQYXRoOiBcIi9Vc2Vycy9nYW5kYW54aWFuZ3poYW8vRGVza3RvcC/lkIjlkIzmtYHovazlrqHmibnns7vnu58vc3JjL2FwcC9hcGkvY29udHJhY3RzL2ltcG9ydC9yb3V0ZS5qc1wiLFxuICAgIG5leHRDb25maWdPdXRwdXQsXG4gICAgdXNlcmxhbmRcbn0pO1xuLy8gUHVsbCBvdXQgdGhlIGV4cG9ydHMgdGhhdCB3ZSBuZWVkIHRvIGV4cG9zZSBmcm9tIHRoZSBtb2R1bGUuIFRoaXMgc2hvdWxkXG4vLyBiZSBlbGltaW5hdGVkIHdoZW4gd2UndmUgbW92ZWQgdGhlIG90aGVyIHJvdXRlcyB0byB0aGUgbmV3IGZvcm1hdC4gVGhlc2Vcbi8vIGFyZSB1c2VkIHRvIGhvb2sgaW50byB0aGUgcm91dGUuXG5jb25zdCB7IHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzIH0gPSByb3V0ZU1vZHVsZTtcbmNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBcIi9hcGkvY29udHJhY3RzL2ltcG9ydC9yb3V0ZVwiO1xuZnVuY3Rpb24gcGF0Y2hGZXRjaCgpIHtcbiAgICByZXR1cm4gX3BhdGNoRmV0Y2goe1xuICAgICAgICBzZXJ2ZXJIb29rcyxcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZVxuICAgIH0pO1xufVxuZXhwb3J0IHsgcm91dGVNb2R1bGUsIHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzLCBvcmlnaW5hbFBhdGhuYW1lLCBwYXRjaEZldGNoLCAgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Fimport%2Froute&page=%2Fapi%2Fcontracts%2Fimport%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Fimport%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/contracts/import/route.js":
/*!***********************************************!*\
!*** ./src/app/api/contracts/import/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 exceljs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! exceljs */ \"(rsc)/./node_modules/exceljs/excel.js\");\n/* harmony import */ var exceljs__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(exceljs__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_3__);\nconst dynamic = \"force-dynamic\";\n\n\n\n\n// Helper to parse numeric values from Excel\nconst parseNum = (val)=>{\n if (val === null || val === undefined || val === \"\") return null;\n if (typeof val === \"number\") return val;\n const cleaned = String(val).replace(/[¥$,\\s]/g, \"\");\n const num = parseFloat(cleaned);\n return isNaN(num) ? null : num;\n};\n// Helper to fuzzy match Chinese names (handles sound-alike/homophone typos)\nconst findUserFuzzy = (name, userMap, allUsers)=>{\n if (!name) return null;\n const cleanedName = name.trim();\n // 1. 尝试精确匹配\n if (userMap.has(cleanedName)) {\n return userMap.get(cleanedName);\n }\n // 2. 尝试模糊匹配(如 乔新晓 匹配 乔欣晓)\n // 三字姓名如果姓和名匹配2个字即可认为同一人\n if (cleanedName.length === 3) {\n for (const u of allUsers){\n if (u.real_name.length === 3) {\n let matchCount = 0;\n if (u.real_name[0] === cleanedName[0]) matchCount++;\n if (u.real_name[1] === cleanedName[1]) matchCount++;\n if (u.real_name[2] === cleanedName[2]) matchCount++;\n if (matchCount >= 2) {\n return u;\n }\n }\n }\n } else if (cleanedName.length === 2) {\n // 二字姓名:如果姓(第一个字)相同,即可作为候选匹配\n for (const u of allUsers){\n if (u.real_name.length === 2 && u.real_name[0] === cleanedName[0]) {\n return u;\n }\n }\n }\n return null;\n};\n// Helper to parse dates from Excel (fixes 1970-01-01 Excel serial date number issue)\nconst parseDate = (val)=>{\n if (val instanceof Date) {\n return val.toISOString().substring(0, 10);\n }\n if (val === null || val === undefined || val === \"\") return null;\n const strVal = String(val).trim();\n // 1. 针对 YYYYMMDD (8位数字) 格式的处理\n if (/^\\d{8}$/.test(strVal)) {\n const year = strVal.substring(0, 4);\n const month = strVal.substring(4, 6);\n const day = strVal.substring(6, 8);\n return `${year}-${month}-${day}`;\n }\n // 2. 如果是数字且在合理范围内,代表 Excel 序列日期数40000 - 60000 之间为近十年日期)\n if (typeof val === \"number\" && val > 0 && val < 100000) {\n const excelEpoch = new Date(Date.UTC(1899, 11, 30));\n const msPerDay = 24 * 60 * 60 * 1000;\n const date = new Date(excelEpoch.getTime() + val * msPerDay);\n if (!isNaN(date.getTime())) {\n return date.toISOString().substring(0, 10);\n }\n }\n // 3. 针对中文常见日期字符串格式如“2023年10月24日”进行正则提取防止 JS 原生 Date 解析报错\n const match = strVal.match(/(\\d{4})[-/年. ]\\s*(\\d{1,2})[-/月. ]\\s*(\\d{1,2})[日\\s]*/);\n if (match) {\n const year = match[1];\n const month = match[2].padStart(2, \"0\");\n const day = match[3].padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n }\n const date = new Date(val);\n if (!isNaN(date.getTime())) {\n return date.toISOString().substring(0, 10);\n }\n return strVal;\n};\n// POST /api/contracts/import - 导入历史已通过合同 Excel\nasync function POST(request) {\n try {\n const user = (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.getUserFromRequest)(request);\n if (!user) return (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.unauthorizedResponse)();\n if (!(0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.checkRole)(user, [\n \"admin\"\n ])) return (0,_lib_auth__WEBPACK_IMPORTED_MODULE_1__.forbiddenResponse)();\n const formData = await request.formData();\n const file = formData.get(\"file\");\n if (!file) {\n return Response.json({\n error: \"请选择要上传的 Excel 文件\"\n }, {\n status: 400\n });\n }\n const arrayBuffer = await file.arrayBuffer();\n const workbook = new (exceljs__WEBPACK_IMPORTED_MODULE_2___default().Workbook)();\n await workbook.xlsx.load(Buffer.from(arrayBuffer));\n const worksheet = workbook.worksheets[0];\n if (!worksheet) {\n return Response.json({\n error: \"Excel 工作表为空\"\n }, {\n status: 400\n });\n }\n const db = await (0,_lib_db__WEBPACK_IMPORTED_MODULE_0__[\"default\"])();\n // 预先获取全量用户用于匹配经办人和项目负责人\n const allUsers = db.prepare(\"SELECT id, username, real_name, role, department_id FROM users\").all();\n const userMap = new Map();\n for (const u of allUsers){\n userMap.set(u.real_name, u);\n }\n // 预先获取全量部门名称和ID映射\n const allDepts = db.prepare(\"SELECT id, name FROM departments\").all();\n const deptMap = new Map();\n const deptIdToNameMap = new Map();\n for (const d of allDepts){\n deptMap.set(d.name, d.id);\n deptIdToNameMap.set(d.id, d.name);\n }\n // 预先获取合作伙伴列表\n const allPartners = db.prepare(\"SELECT id, name FROM partners WHERE is_deleted = 0\").all();\n const partnerMap = new Map();\n for (const p of allPartners){\n partnerMap.set(p.name, p.id);\n }\n // 解析表头列索引\n const headers = {};\n const headerRow = worksheet.getRow(1);\n headerRow.eachCell((cell, colNumber)=>{\n const text = cell.text ? cell.text.trim() : \"\";\n if (!text) return;\n if (text.includes(\"创建时间\") || text.includes(\"经办日期\")) headers.created_at = colNumber;\n else if (text.includes(\"经办人\") || text.includes(\"创建人\")) headers.creator_name = colNumber;\n else if (text.includes(\"所属部门\")) headers.department_name = colNumber;\n else if (text.includes(\"项目负责人\") || text.includes(\"负责人\")) headers.project_leader = colNumber;\n else if (text.includes(\"签订\") || text.includes(\"签署\") || text.includes(\"签字\") || text.includes(\"签章\")) headers.sign_date = colNumber;\n else if (text.includes(\"项目名称\") || text.includes(\"合同名称\")) headers.project_name = colNumber;\n else if (text.includes(\"合作单位\") || text.includes(\"合作企业\")) headers.partner_name = colNumber;\n else if (text.includes(\"项目内容\") || text.includes(\"合同内容\")) headers.contract_content = colNumber;\n else if (text.includes(\"合同总金额\") || text.includes(\"合同金额\") || text.includes(\"金额\")) headers.contract_amount = colNumber;\n else if (text.includes(\"预估利润\") || text.includes(\"利润\")) headers.estimated_profit = colNumber;\n else if (text.includes(\"收款/付款\") || text.includes(\"类型\")) headers.payment_type = colNumber;\n else if (text.includes(\"初审意见\") || text.includes(\"主管意见\")) headers.supervisor_opinion = colNumber;\n else if (text.includes(\"财务部意见\") || text.includes(\"财务意见\")) headers.finance_opinion = colNumber;\n else if (text.includes(\"终审意见\") || text.includes(\"秘书长意见\")) headers.secretary_opinion = colNumber;\n else if (text.includes(\"合同期限\") || text.includes(\"合作期限\")) headers.contract_years = colNumber;\n });\n // 默认审核人员(财务和秘书长)\n const financeUser = allUsers.find((u)=>u.role === \"finance\");\n const finance_id = financeUser ? financeUser.id : null;\n const finance_name = financeUser ? financeUser.real_name : null;\n const secretaryUser = allUsers.find((u)=>u.role === \"secretary\");\n const secretary_id = secretaryUser ? secretaryUser.id : null;\n const secretary_name = secretaryUser ? secretaryUser.real_name : null;\n let importedCount = 0;\n // 使用事务包装批量写入操作,极大提升 SQLite 性能并保证数据一致性\n const runImport = db.transaction(()=>{\n for(let rowNumber = 2; rowNumber <= worksheet.rowCount; rowNumber++){\n const row = worksheet.getRow(rowNumber);\n console.log(`[Importer] Processing row: ${rowNumber}, Has Values: ${row.hasValues}`);\n if (!row.hasValues) continue;\n const getVal = (key)=>{\n const colIndex = headers[key];\n if (!colIndex) return undefined;\n const cell = row.getCell(colIndex);\n if (!cell || !cell.value) return undefined;\n // Handle formula objects\n if (typeof cell.value === \"object\" && cell.value !== null && cell.value.formula) {\n return cell.value.result;\n }\n return cell.value;\n };\n const getValText = (key)=>{\n const colIndex = headers[key];\n if (!colIndex) return \"\";\n const cell = row.getCell(colIndex);\n if (!cell) return \"\";\n return cell.text ? cell.text.trim() : \"\";\n };\n const project_name = getValText(\"project_name\");\n // if (!project_name) continue; // 项目名称不能为空,略过空行\n // 1. 匹配经办人与部门\n const excelCreator = getValText(\"creator_name\");\n let creator_id = user.id; // 默认当前管理员\n let creator_name = excelCreator || user.real_name;\n let department_id = null;\n let department_name = null;\n if (excelCreator) {\n const matchedUser = findUserFuzzy(excelCreator, userMap, allUsers);\n if (matchedUser) {\n creator_id = matchedUser.id;\n creator_name = matchedUser.real_name;\n department_id = matchedUser.department_id;\n department_name = deptIdToNameMap.get(department_id) || null;\n }\n }\n // 如果经办人没有匹配到,看 Excel 中是否填了“所属部门”\n if (!department_id) {\n const excelDept = getValText(\"department_name\");\n if (excelDept && deptMap.has(excelDept)) {\n department_id = deptMap.get(excelDept);\n department_name = excelDept;\n }\n }\n // 2. 匹配或自动创建合作单位\n let partner_name = getValText(\"partner_name\");\n let partner_id = null;\n if (!partner_name) {\n partner_name = \"历史导入合作单位\";\n }\n if (partnerMap.has(partner_name)) {\n partner_id = partnerMap.get(partner_name);\n } else {\n // 数据库没有,动态插入合作单位作为种子数据\n const pResult = db.prepare(\"INSERT INTO partners (name, is_deleted) VALUES (?, 0)\").run(partner_name);\n partner_id = pResult.lastInsertRowid;\n partnerMap.set(partner_name, partner_id);\n }\n // 3. 匹配项目负责人(部门主管)\n const excelLeader = getValText(\"project_leader\");\n let project_leader = excelLeader || null;\n let matchedLeaderUser = null;\n if (excelLeader) {\n const matchedLeader = findUserFuzzy(excelLeader, userMap, allUsers);\n if (matchedLeader) {\n project_leader = matchedLeader.real_name;\n matchedLeaderUser = matchedLeader;\n }\n }\n // 如果上面经办人没能定下部门例如经办人在库里不存在且Excel无部门\n // 但项目负责人(主管)匹配成功了,则以项目负责人的部门作为合同的归属部门,这样主管就可以看得到了!\n if (!department_id && matchedLeaderUser && matchedLeaderUser.department_id) {\n department_id = matchedLeaderUser.department_id;\n department_name = deptIdToNameMap.get(department_id) || null;\n }\n // 如果还是没有,回退到当前登录账号(管理员)的部门\n if (!department_id) {\n department_id = user.department_id || null;\n department_name = deptIdToNameMap.get(department_id) || null;\n }\n // 4. 收付款类型\n const excelPayment = getValText(\"payment_type\");\n let payment_type = \"receive\";\n if (excelPayment.includes(\"付\") || excelPayment.toLowerCase().includes(\"pay\")) {\n payment_type = \"pay\";\n }\n // 5. 合同金额与预估利润\n const contract_amount = parseNum(getVal(\"contract_amount\")) || 0;\n // 如果是付款,预估利润强置为 null否则允许解析为空或数字\n let estimated_profit = null;\n if (payment_type !== \"pay\") {\n estimated_profit = parseNum(getVal(\"estimated_profit\"));\n }\n // 6. 日期格式解析\n const created_at_val = parseDate(getValText(\"created_at\"));\n const sign_date = parseDate(getValText(\"sign_date\"));\n const created_at = created_at_val || sign_date || new Date().toISOString().substring(0, 10);\n const approval_time = sign_date || created_at || new Date().toISOString().substring(0, 10);\n // 7. 匹配部门初审主管作为初审人\n let supervisor_id = null;\n let supervisor_name = null;\n if (matchedLeaderUser) {\n supervisor_id = matchedLeaderUser.id;\n supervisor_name = matchedLeaderUser.real_name;\n } else if (department_id) {\n const matchedSupervisor = allUsers.find((u)=>u.department_id === department_id && u.role === \"supervisor\");\n if (matchedSupervisor) {\n supervisor_id = matchedSupervisor.id;\n supervisor_name = matchedSupervisor.real_name;\n }\n }\n // 如果上面没配出主管,但是项目负责人匹配出来的正是一个主管,则直接用他\n if (!supervisor_name && matchedLeaderUser && matchedLeaderUser.role === \"supervisor\") {\n supervisor_id = matchedLeaderUser.id;\n supervisor_name = matchedLeaderUser.real_name;\n }\n if (!supervisor_name) {\n const anySupervisor = allUsers.find((u)=>u.role === \"supervisor\");\n if (anySupervisor) {\n supervisor_id = anySupervisor.id;\n supervisor_name = anySupervisor.real_name;\n }\n }\n // 8. 审核意见(默认为 '无'\n const supervisor_opinion = getValText(\"supervisor_opinion\") || \"无\";\n const finance_opinion = getValText(\"finance_opinion\") || \"无\";\n const secretary_opinion = getValText(\"secretary_opinion\") || \"无\";\n const contract_content = getValText(\"contract_content\") || null;\n const contract_years = getValText(\"contract_years\") || null; // 留空即可\n // 9. 写入数据库并设为终审通过状态\n db.prepare(`\n INSERT INTO contracts (\n project_name, partner_id, partner_name, contract_content, contract_years,\n contract_amount, estimated_profit, payment_type, sign_date,\n creator_id, creator_name, department_id, department_name, project_leader,\n status,\n supervisor_opinion, supervisor_approved, supervisor_id, supervisor_name, supervisor_time,\n finance_opinion, finance_approved, finance_id, finance_name, finance_time,\n secretary_opinion, secretary_approved, secretary_id, secretary_name, secretary_time,\n created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'approved', ?, 1, ?, ?, ?, ?, 1, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?)\n `).run(project_name, partner_id, partner_name, contract_content, contract_years, contract_amount, estimated_profit, payment_type, sign_date, creator_id, creator_name, department_id, department_name, project_leader, supervisor_opinion, supervisor_id, supervisor_name, null, finance_opinion, finance_id, finance_name, null, secretary_opinion, secretary_id, secretary_name, null, created_at, created_at);\n importedCount++;\n }\n return importedCount;\n });\n const totalImported = runImport();\n console.log(`[Contract Import] Successfully imported ${totalImported} rows.`);\n return Response.json({\n success: true,\n message: `成功导入了 ${totalImported} 条合同数据。`,\n count: totalImported\n });\n } catch (error) {\n console.error(\"导入合同数据失败:\", error);\n return Response.json({\n error: `导入失败: ${error.message || \"服务器内部错误\"}`\n }, {\n status: 500\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9zcmMvYXBwL2FwaS9jb250cmFjdHMvaW1wb3J0L3JvdXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQU8sTUFBTUEsVUFBVSxnQkFBZ0I7QUFDVjtBQUN1RTtBQUN0RTtBQUNOO0FBRXhCLDRDQUE0QztBQUM1QyxNQUFNUSxXQUFXLENBQUNDO0lBQ2hCLElBQUlBLFFBQVEsUUFBUUEsUUFBUUMsYUFBYUQsUUFBUSxJQUFJLE9BQU87SUFDNUQsSUFBSSxPQUFPQSxRQUFRLFVBQVUsT0FBT0E7SUFDcEMsTUFBTUUsVUFBVUMsT0FBT0gsS0FBS0ksT0FBTyxDQUFDLFlBQVk7SUFDaEQsTUFBTUMsTUFBTUMsV0FBV0o7SUFDdkIsT0FBT0ssTUFBTUYsT0FBTyxPQUFPQTtBQUM3QjtBQUVBLDRFQUE0RTtBQUM1RSxNQUFNRyxnQkFBZ0IsQ0FBQ0MsTUFBTUMsU0FBU0M7SUFDcEMsSUFBSSxDQUFDRixNQUFNLE9BQU87SUFDbEIsTUFBTUcsY0FBY0gsS0FBS0ksSUFBSTtJQUU3QixZQUFZO0lBQ1osSUFBSUgsUUFBUUksR0FBRyxDQUFDRixjQUFjO1FBQzVCLE9BQU9GLFFBQVFLLEdBQUcsQ0FBQ0g7SUFDckI7SUFFQSwwQkFBMEI7SUFDMUIsMEJBQTBCO0lBQzFCLElBQUlBLFlBQVlJLE1BQU0sS0FBSyxHQUFHO1FBQzVCLEtBQUssTUFBTUMsS0FBS04sU0FBVTtZQUN4QixJQUFJTSxFQUFFQyxTQUFTLENBQUNGLE1BQU0sS0FBSyxHQUFHO2dCQUM1QixJQUFJRyxhQUFhO2dCQUNqQixJQUFJRixFQUFFQyxTQUFTLENBQUMsRUFBRSxLQUFLTixXQUFXLENBQUMsRUFBRSxFQUFFTztnQkFDdkMsSUFBSUYsRUFBRUMsU0FBUyxDQUFDLEVBQUUsS0FBS04sV0FBVyxDQUFDLEVBQUUsRUFBRU87Z0JBQ3ZDLElBQUlGLEVBQUVDLFNBQVMsQ0FBQyxFQUFFLEtBQUtOLFdBQVcsQ0FBQyxFQUFFLEVBQUVPO2dCQUN2QyxJQUFJQSxjQUFjLEdBQUc7b0JB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cUMsWUFDQXhDLGNBQ0F5QyxlQUNBeEMsaUJBQ0FDLGdCQUVBUSxvQkFDQTZDLGVBQ0FDLGlCQUNBLE1BRUE3QyxpQkFDQU0sWUFDQUMsY0FDQSxNQUVBTixtQkFDQVEsY0FDQUMsZ0JBQ0EsTUFFQXRCLFlBQ0FBO2dCQUdGdUI7WUFDRjtZQUNBLE9BQU9BO1FBQ1Q7UUFFQSxNQUFNcUMsZ0JBQWdCcEM7UUFDdEJLLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHdDQUF3QyxFQUFFOEIsY0FBYyxNQUFNLENBQUM7UUFFNUUsT0FBTzlGLFNBQVNDLElBQUksQ0FBQztZQUNuQjhGLFNBQVM7WUFDVEMsU0FBUyxDQUFDLE1BQU0sRUFBRUYsY0FBYyxPQUFPLENBQUM7WUFDeENHLE9BQU9IO1FBQ1Q7SUFFRixFQUFFLE9BQU81RixPQUFPO1FBQ2Q2RCxRQUFRN0QsS0FBSyxDQUFDLGFBQWFBO1FBQzNCLE9BQU9GLFNBQVNDLElBQUksQ0FDbEI7WUFBRUMsT0FBTyxDQUFDLE1BQU0sRUFBRUEsTUFBTThGLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFBQyxHQUMvQztZQUFFN0YsUUFBUTtRQUFJO0lBRWxCO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jb250cmFjdC1hcHByb3ZhbC1zeXN0ZW0vLi9zcmMvYXBwL2FwaS9jb250cmFjdHMvaW1wb3J0L3JvdXRlLmpzP2E2YTciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGR5bmFtaWMgPSBcImZvcmNlLWR5bmFtaWNcIjtcbmltcG9ydCBnZXREYiBmcm9tICdAL2xpYi9kYic7XG5pbXBvcnQgeyBnZXRVc2VyRnJvbVJlcXVlc3QsIHVuYXV0aG9yaXplZFJlc3BvbnNlLCBmb3JiaWRkZW5SZXNwb25zZSwgY2hlY2tSb2xlIH0gZnJvbSAnQC9saWIvYXV0aCc7XG5pbXBvcnQgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vLyBIZWxwZXIgdG8gcGFyc2UgbnVtZXJpYyB2YWx1ZXMgZnJvbSBFeGNlbFxuY29uc3QgcGFyc2VOdW0gPSAodmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJykgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbDtcbiAgY29uc3QgY2xlYW5lZCA9IFN0cmluZyh2YWwpLnJlcGxhY2UoL1vCpSQsXFxzXS9nLCAnJyk7XG4gIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQoY2xlYW5lZCk7XG4gIHJldHVybiBpc05hTihudW0pID8gbnVsbCA6IG51bTtcbn07XG5cbi8vIEhlbHBlciB0byBmdXp6eSBtYXRjaCBDaGluZXNlIG5hbWVzIChoYW5kbGVzIHNvdW5kLWFsaWtlL2hvbW9waG9uZSB0eXBvcylcbmNvbnN0IGZpbmRVc2VyRnV6enkgPSAobmFtZSwgdXNlck1hcCwgYWxsVXNlcnMpID0+IHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2xlYW5lZE5hbWUgPSBuYW1lLnRyaW0oKTtcbiAgXG4gIC8vIDEuIOWwneivleeyvuehruWMuemFjVxuICBpZiAodXNlck1hcC5oYXMoY2xlYW5lZE5hbWUpKSB7XG4gICAgcmV0dXJuIHVzZXJNYXAuZ2V0KGNsZWFuZWROYW1lKTtcbiAgfVxuICBcbiAgLy8gMi4g5bCd6K+V5qih57OK5Yy56YWN77yI5aaCIOS5lOaWsOaZkyDljLnphY0g5LmU5qyj5pmT77yJXG4gIC8vIOS4ieWtl+Wnk+WQje+8muWmguaenOWnk+WSjOWQjeWMuemFjTLkuKrlrZfvvIzljbPlj6/orqTkuLrlkIzkuIDkurpcbiAgaWYgKGNsZWFuZWROYW1lLmxlbmd0aCA9PT0gMykge1xuICAgIGZvciAoY29uc3QgdSBvZiBhbGxVc2Vycykge1xuICAgICAgaWYgKHUucmVhbF9uYW1lLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBsZXQgbWF0Y2hDb3VudCA9IDA7XG4gICAgICAgIGlmICh1LnJlYWxfbmFtZVswXSA9PT0gY2xlYW5lZE5hbWVbMF0pIG1hdGNoQ291bnQrKztcbiAgICAgICAgaWYgKHUucmVhbF9uYW1lWzFdID09PSBjbGVhbmVkTmFtZVsxXSkgbWF0Y2hDb3VudCsrO1xuICAgICAgICBpZiAodS5yZWFsX25hbWVbMl0gPT09IGNsZWFuZWROYW1lWzJdKSBtYXRjaENvdW50Kys7XG4gICAgICAgIGlmIChtYXRjaENvdW50ID49IDIpIHtcbiAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGVhbmVkTmFtZS5sZW5ndGggPT09IDIpIHtcbiAgICAvLyDkuozlrZflp5PlkI3vvJrlpoLmnpzlp5PvvIjnrKzkuIDkuKrlrZfvvInnm7jlkIzvvIzljbPlj6/kvZzkuLrlgJnpgInljLnphY1cbiAgICBmb3IgKGNvbnN0IHUgb2YgYWxsVXNlcnMpIHtcbiAgICAgIGlmICh1LnJlYWxfbmFtZS5sZW5ndGggPT09IDIgJiYgdS5yZWFsX25hbWVbMF0gPT09IGNsZWFuZWROYW1lWzBdKSB7XG4gICAgICAgIHJldHVybiB1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vLyBIZWxwZXIgdG8gcGFyc2UgZGF0ZXMgZnJvbSBFeGNlbCAoZml4ZXMgMTk3MC0wMS0wMSBFeGNlbCBzZXJpYWwgZGF0ZSBudW1iZXIgaXNzdWUpXG5jb25zdCBwYXJzZURhdGUgPSAodmFsKSA9PiB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHZhbC50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCk7XG4gIH1cbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgXG4gIGNvbnN0IHN0clZhbCA9IFN0cmluZyh2YWwpLnRyaW0oKTtcblxuICAvLyAxLiDpkojlr7kgWVlZWU1NREQgKDjkvY3mlbDlrZcpIOagvOW8j+eahOWkhOeQhlxuICBpZiAoL15cXGR7OH0kLy50ZXN0KHN0clZhbCkpIHtcbiAgICBjb25zdCB5ZWFyID0gc3RyVmFsLnN1YnN0cmluZygwLCA0KTtcbiAgICBjb25zdCBtb250aCA9IHN0clZhbC5zdWJzdHJpbmcoNCwgNik7XG4gICAgY29uc3QgZGF5ID0gc3RyVmFsLnN1YnN0cmluZyg2LCA4KTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgfVxuICBcbiAgLy8gMi4g5aaC5p6c5piv5pWw5a2X5LiU5Zyo5ZCI55CG6IyD5Zu05YaF77yM5Luj6KGoIEV4Y2VsIOW6j+WIl+aXpeacn+aVsO+8iDQwMDAwIC0gNjAwMDAg5LmL6Ze05Li66L+R5Y2B5bm05pel5pyf77yJXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiB2YWwgPiAwICYmIHZhbCA8IDEwMDAwMCkge1xuICAgIGNvbnN0IGV4Y2VsRXBvY2ggPSBuZXcgRGF0ZShEYXRlLlVUQygxODk5LCAxMSwgMzApKTtcbiAgICBjb25zdCBtc1BlckRheSA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV4Y2VsRXBvY2guZ2V0VGltZSgpICsgdmFsICogbXNQZXJEYXkpO1xuICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gMy4g6ZKI5a+55Lit5paH5bi46KeB5pel5pyf5a2X56ym5Liy5qC85byP77yI5aaC4oCcMjAyM+W5tDEw5pyIMjTml6XigJ3vvInov5vooYzmraPliJnmj5Dlj5bvvIzpmLLmraIgSlMg5Y6f55SfIERhdGUg6Kej5p6Q5oql6ZSZXG4gIGNvbnN0IG1hdGNoID0gc3RyVmFsLm1hdGNoKC8oXFxkezR9KVstL+W5tC4gXVxccyooXFxkezEsMn0pWy0v5pyILiBdXFxzKihcXGR7MSwyfSlb5pelXFxzXSovKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgeWVhciA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbMl0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBtYXRjaFszXS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG4gIFxuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsKTtcbiAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCk7XG4gIH1cbiAgcmV0dXJuIHN0clZhbDtcbn07XG5cbi8vIFBPU1QgL2FwaS9jb250cmFjdHMvaW1wb3J0IC0g5a+85YWl5Y6G5Y+y5bey6YCa6L+H5ZCI5ZCMIEV4Y2VsXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gUE9TVChyZXF1ZXN0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXNlciA9IGdldFVzZXJGcm9tUmVxdWVzdChyZXF1ZXN0KTtcbiAgICBpZiAoIXVzZXIpIHJldHVybiB1bmF1dGhvcml6ZWRSZXNwb25zZSgpO1xuICAgIGlmICghY2hlY2tSb2xlKHVzZXIsIFsnYWRtaW4nXSkpIHJldHVybiBmb3JiaWRkZW5SZXNwb25zZSgpO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBhd2FpdCByZXF1ZXN0LmZvcm1EYXRhKCk7XG4gICAgY29uc3QgZmlsZSA9IGZvcm1EYXRhLmdldCgnZmlsZScpO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgIHsgZXJyb3I6ICfor7fpgInmi6nopoHkuIrkvKDnmoQgRXhjZWwg5paH5Lu2JyB9LFxuICAgICAgICB7IHN0YXR1czogNDAwIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAgIGF3YWl0IHdvcmtib29rLnhsc3gubG9hZChCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcikpO1xuICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLndvcmtzaGVldHNbMF07XG5cbiAgICBpZiAoIXdvcmtzaGVldCkge1xuICAgICAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgICAgIHsgZXJyb3I6ICdFeGNlbCDlt6XkvZzooajkuLrnqbonIH0sXG4gICAgICAgIHsgc3RhdHVzOiA0MDAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGF3YWl0IGdldERiKCk7XG5cbiAgICAvLyDpooTlhYjojrflj5blhajph4/nlKjmiLfnlKjkuo7ljLnphY3nu4/lip7kurrlkozpobnnm67otJ/otKPkurpcbiAgICBjb25zdCBhbGxVc2VycyA9IGRiLnByZXBhcmUoJ1NFTEVDVCBpZCwgdXNlcm5hbWUsIHJlYWxfbmFtZSwgcm9sZSwgZGVwYXJ0bWVudF9pZCBGUk9NIHVzZXJzJykuYWxsKCk7XG4gICAgY29uc3QgdXNlck1hcCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHUgb2YgYWxsVXNlcnMpIHtcbiAgICAgIHVzZXJNYXAuc2V0KHUucmVhbF9uYW1lLCB1KTtcbiAgICB9XG5cbiAgICAvLyDpooTlhYjojrflj5blhajph4/pg6jpl6jlkI3np7DlkoxJROaYoOWwhFxuICAgIGNvbnN0IGFsbERlcHRzID0gZGIucHJlcGFyZSgnU0VMRUNUIGlkLCBuYW1lIEZST00gZGVwYXJ0bWVudHMnKS5hbGwoKTtcbiAgICBjb25zdCBkZXB0TWFwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlcHRJZFRvTmFtZU1hcCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGQgb2YgYWxsRGVwdHMpIHtcbiAgICAgIGRlcHRNYXAuc2V0KGQubmFtZSwgZC5pZCk7XG4gICAgICBkZXB0SWRUb05hbWVNYXAuc2V0KGQuaWQsIGQubmFtZSk7XG4gICAgfVxuXG4gICAgLy8g6aKE5YWI6I635Y+W5ZCI5L2c5LyZ5Ly05YiX6KGoXG4gICAgY29uc3QgYWxsUGFydG5lcnMgPSBkYi5wcmVwYXJlKCdTRUxFQ1QgaWQsIG5hbWUgRlJPTSBwYXJ0bmVycyBXSEVSRSBpc19kZWxldGVkID0gMCcpLmFsbCgpO1xuICAgIGNvbnN0IHBhcnRuZXJNYXAgPSBuZXcgTWFwKCk7XG4gICAgZm9yIChjb25zdCBwIG9mIGFsbFBhcnRuZXJzKSB7XG4gICAgICBwYXJ0bmVyTWFwLnNldChwLm5hbWUsIHAuaWQpO1xuICAgIH1cblxuICAgIC8vIOino+aekOihqOWktOWIl+e0ouW8lVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KDEpO1xuICAgIGhlYWRlclJvdy5lYWNoQ2VsbCgoY2VsbCwgY29sTnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gY2VsbC50ZXh0ID8gY2VsbC50ZXh0LnRyaW0oKSA6ICcnO1xuICAgICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgICBpZiAodGV4dC5pbmNsdWRlcygn5Yib5bu65pe26Ze0JykgfHwgdGV4dC5pbmNsdWRlcygn57uP5Yqe5pel5pyfJykpIGhlYWRlcnMuY3JlYXRlZF9hdCA9IGNvbE51bWJlcjtcbiAgICAgIGVsc2UgaWYgKHRleHQuaW5jbHVkZXMoJ+e7j+WKnuS6uicpIHx8IHRleHQuaW5jbHVkZXMoJ+WIm+W7uuS6uicpKSBoZWFkZXJzLmNyZWF0b3JfbmFtZSA9IGNvbE51bWJlcjtcbiAgICAgIGVsc2UgaWYgKHRleHQuaW5jbHVkZXMoJ+aJgOWxnumDqOmXqCcpKSBoZWFkZXJzLmRlcGFydG1lbnRfbmFtZSA9IGNvbE51bWJlcjtcbiAgICAgIGVsc2UgaWYgKHRleHQuaW5jbHVkZXMoJ+mhueebrui0n+i0o+S6uicpIHx8IHRleHQuaW5jbHVkZXMoJ+i0n+i0o+S6uicpKSBoZWFkZXJzLnByb2plY3RfbGVhZGVyID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn562+6K6iJykgfHwgdGV4dC5pbmNsdWRlcygn562+572yJykgfHwgdGV4dC5pbmNsdWRlcygn562+5a2XJykgfHwgdGV4dC5pbmNsdWRlcygn562+56ugJykpIGhlYWRlcnMuc2lnbl9kYXRlID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn6aG555uu5ZCN56ewJykgfHwgdGV4dC5pbmNsdWRlcygn5ZCI5ZCM5ZCN56ewJykpIGhlYWRlcnMucHJvamVjdF9uYW1lID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn5ZCI5L2c5Y2V5L2NJykgfHwgdGV4dC5pbmNsdWRlcygn5ZCI5L2c5LyB5LiaJykpIGhlYWRlcnMucGFydG5lcl9uYW1lID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn6aG555uu5YaF5a65JykgfHwgdGV4dC5pbmNsdWRlcygn5ZCI5ZCM5YaF5a65JykpIGhlYWRlcnMuY29udHJhY3RfY29udGVudCA9IGNvbE51bWJlcjtcbiAgICAgIGVsc2UgaWYgKHRleHQuaW5jbHVkZXMoJ+WQiOWQjOaAu+mHkeminScpIHx8IHRleHQuaW5jbHVkZXMoJ+WQiOWQjOmHkeminScpIHx8IHRleHQuaW5jbHVkZXMoJ+mHkeminScpKSBoZWFkZXJzLmNvbnRyYWN0X2Ftb3VudCA9IGNvbE51bWJlcjtcbiAgICAgIGVsc2UgaWYgKHRleHQuaW5jbHVkZXMoJ+mihOS8sOWIqea2picpIHx8IHRleHQuaW5jbHVkZXMoJ+WIqea2picpKSBoZWFkZXJzLmVzdGltYXRlZF9wcm9maXQgPSBjb2xOdW1iZXI7XG4gICAgICBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCfmlLbmrL4v5LuY5qy+JykgfHwgdGV4dC5pbmNsdWRlcygn57G75Z6LJykpIGhlYWRlcnMucGF5bWVudF90eXBlID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn5Yid5a6h5oSP6KeBJykgfHwgdGV4dC5pbmNsdWRlcygn5Li7566h5oSP6KeBJykpIGhlYWRlcnMuc3VwZXJ2aXNvcl9vcGluaW9uID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn6LSi5Yqh6YOo5oSP6KeBJykgfHwgdGV4dC5pbmNsdWRlcygn6LSi5Yqh5oSP6KeBJykpIGhlYWRlcnMuZmluYW5jZV9vcGluaW9uID0gY29sTnVtYmVyO1xuICAgICAgZWxzZSBpZiAodGV4dC5pbmNsdWRlcygn57uI5a6h5oSP6KeBJykgfHwgdGV4dC5pbmNsdWRlcygn56eY5Lmm6ZW/5oSP6KeBJykpIGhlYWRlcnMuc2VjcmV0YXJ5X29waW5pb24gPSBjb2xOdW1iZXI7XG4gICAgICBlbHNlIGlmICh0ZXh0LmluY2x1ZGVzKCflkIjlkIzmnJ/pmZAnKSB8fCB0ZXh0LmluY2x1ZGVzKCflkIjkvZzmnJ/pmZAnKSkgaGVhZGVycy5jb250cmFjdF95ZWFycyA9IGNvbE51bWJlcjtcbiAgICB9KTtcblxuICAgIC8vIOm7mOiupOWuoeaguOS6uuWRmO+8iOi0ouWKoeWSjOenmOS5pumVv++8iVxuICAgIGNvbnN0IGZpbmFuY2VVc2VyID0gYWxsVXNlcnMuZmluZCh1ID0+IHUucm9sZSA9PT0gJ2ZpbmFuY2UnKTtcbiAgICBjb25zdCBmaW5hbmNlX2lkID0gZmluYW5jZVVzZXIgPyBmaW5hbmNlVXNlci5pZCA6IG51bGw7XG4gICAgY29uc3QgZmluYW5jZV9uYW1lID0gZmluYW5jZVVzZXIgPyBmaW5hbmNlVXNlci5yZWFsX25hbWUgOiBudWxsO1xuXG4gICAgY29uc3Qgc2VjcmV0YXJ5VXNlciA9IGFsbFVzZXJzLmZpbmQodSA9PiB1LnJvbGUgPT09ICdzZWNyZXRhcnknKTtcbiAgICBjb25zdCBzZWNyZXRhcnlfaWQgPSBzZWNyZXRhcnlVc2VyID8gc2VjcmV0YXJ5VXNlci5pZCA6IG51bGw7XG4gICAgY29uc3Qgc2VjcmV0YXJ5X25hbWUgPSBzZWNyZXRhcnlVc2VyID8gc2VjcmV0YXJ5VXNlci5yZWFsX25hbWUgOiBudWxsO1xuXG4gICAgbGV0IGltcG9ydGVkQ291bnQgPSAwO1xuXG4gICAgLy8g5L2/55So5LqL5Yqh5YyF6KOF5om56YeP5YaZ5YWl5pON5L2c77yM5p6B5aSn5o+Q5Y2HIFNRTGl0ZSDmgKfog73lubbkv53or4HmlbDmja7kuIDoh7TmgKdcbiAgICBjb25zdCBydW5JbXBvcnQgPSBkYi50cmFuc2FjdGlvbigoKSA9PiB7XG4gICAgICBmb3IgKGxldCByb3dOdW1iZXIgPSAyOyByb3dOdW1iZXIgPD0gd29ya3NoZWV0LnJvd0NvdW50OyByb3dOdW1iZXIrKykge1xuICAgICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KHJvd051bWJlcik7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbSW1wb3J0ZXJdIFByb2Nlc3Npbmcgcm93OiAke3Jvd051bWJlcn0sIEhhcyBWYWx1ZXM6ICR7cm93Lmhhc1ZhbHVlc31gKTtcbiAgICAgICAgaWYgKCFyb3cuaGFzVmFsdWVzKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBnZXRWYWwgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgaWYgKCFjb2xJbmRleCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENlbGwoY29sSW5kZXgpO1xuICAgICAgICAgIGlmICghY2VsbCB8fCAhY2VsbC52YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAgIC8vIEhhbmRsZSBmb3JtdWxhIG9iamVjdHNcbiAgICAgICAgICBpZiAodHlwZW9mIGNlbGwudmFsdWUgPT09ICdvYmplY3QnICYmIGNlbGwudmFsdWUgIT09IG51bGwgJiYgY2VsbC52YWx1ZS5mb3JtdWxhKSB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbC52YWx1ZS5yZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsLnZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGdldFZhbFRleHQgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBoZWFkZXJzW2tleV07XG4gICAgICAgICAgaWYgKCFjb2xJbmRleCkgcmV0dXJuICcnO1xuICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChjb2xJbmRleCk7XG4gICAgICAgICAgaWYgKCFjZWxsKSByZXR1cm4gJyc7XG4gICAgICAgICAgcmV0dXJuIGNlbGwudGV4dCA/IGNlbGwudGV4dC50cmltKCkgOiAnJztcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0X25hbWUgPSBnZXRWYWxUZXh0KCdwcm9qZWN0X25hbWUnKTtcbiAgICAgICAgLy8gaWYgKCFwcm9qZWN0X25hbWUpIGNvbnRpbnVlOyAvLyDpobnnm67lkI3np7DkuI3og73kuLrnqbrvvIznlaXov4fnqbrooYxcblxuICAgICAgICAvLyAxLiDljLnphY3nu4/lip7kurrkuI7pg6jpl6hcbiAgICAgICAgY29uc3QgZXhjZWxDcmVhdG9yID0gZ2V0VmFsVGV4dCgnY3JlYXRvcl9uYW1lJyk7XG4gICAgICAgIGxldCBjcmVhdG9yX2lkID0gdXNlci5pZDsgLy8g6buY6K6k5b2T5YmN566h55CG5ZGYXG4gICAgICAgIGxldCBjcmVhdG9yX25hbWUgPSBleGNlbENyZWF0b3IgfHwgdXNlci5yZWFsX25hbWU7XG4gICAgICAgIGxldCBkZXBhcnRtZW50X2lkID0gbnVsbDtcbiAgICAgICAgbGV0IGRlcGFydG1lbnRfbmFtZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGV4Y2VsQ3JlYXRvcikge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZWRVc2VyID0gZmluZFVzZXJGdXp6eShleGNlbENyZWF0b3IsIHVzZXJNYXAsIGFsbFVzZXJzKTtcbiAgICAgICAgICBpZiAobWF0Y2hlZFVzZXIpIHtcbiAgICAgICAgICAgIGNyZWF0b3JfaWQgPSBtYXRjaGVkVXNlci5pZDtcbiAgICAgICAgICAgIGNyZWF0b3JfbmFtZSA9IG1hdGNoZWRVc2VyLnJlYWxfbmFtZTtcbiAgICAgICAgICAgIGRlcGFydG1lbnRfaWQgPSBtYXRjaGVkVXNlci5kZXBhcnRtZW50X2lkO1xuICAgICAgICAgICAgZGVwYXJ0bWVudF9uYW1lID0gZGVwdElkVG9OYW1lTWFwLmdldChkZXBhcnRtZW50X2lkKSB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWmguaenOe7j+WKnuS6uuayoeacieWMuemFjeWIsO+8jOeciyBFeGNlbCDkuK3mmK/lkKbloavkuobigJzmiYDlsZ7pg6jpl6jigJ1cbiAgICAgICAgaWYgKCFkZXBhcnRtZW50X2lkKSB7XG4gICAgICAgICAgY29uc3QgZXhjZWxEZXB0ID0gZ2V0VmFsVGV4dCgnZGVwYXJ0bWVudF9uYW1lJyk7XG4gICAgICAgICAgaWYgKGV4Y2VsRGVwdCAmJiBkZXB0TWFwLmhhcyhleGNlbERlcHQpKSB7XG4gICAgICAgICAgICBkZXBhcnRtZW50X2lkID0gZGVwdE1hcC5nZXQoZXhjZWxEZXB0KTtcbiAgICAgICAgICAgIGRlcGFydG1lbnRfbmFtZSA9IGV4Y2VsRGVwdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiDljLnphY3miJboh6rliqjliJvlu7rlkIjkvZzljZXkvY1cbiAgICAgICAgbGV0IHBhcnRuZXJfbmFtZSA9IGdldFZhbFRleHQoJ3BhcnRuZXJfbmFtZScpO1xuICAgICAgICBsZXQgcGFydG5lcl9pZCA9IG51bGw7XG4gICAgICAgIGlmICghcGFydG5lcl9uYW1lKSB7XG4gICAgICAgICAgcGFydG5lcl9uYW1lID0gJ+WOhuWPsuWvvOWFpeWQiOS9nOWNleS9jSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRuZXJNYXAuaGFzKHBhcnRuZXJfbmFtZSkpIHtcbiAgICAgICAgICBwYXJ0bmVyX2lkID0gcGFydG5lck1hcC5nZXQocGFydG5lcl9uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDmlbDmja7lupPmsqHmnInvvIzliqjmgIHmj5LlhaXlkIjkvZzljZXkvY3kvZzkuLrnp43lrZDmlbDmja5cbiAgICAgICAgICBjb25zdCBwUmVzdWx0ID0gZGIucHJlcGFyZShcbiAgICAgICAgICAgICdJTlNFUlQgSU5UTyBwYXJ0bmVycyAobmFtZSwgaXNfZGVsZXRlZCkgVkFMVUVTICg/LCAwKSdcbiAgICAgICAgICApLnJ1bihwYXJ0bmVyX25hbWUpO1xuICAgICAgICAgIHBhcnRuZXJfaWQgPSBwUmVzdWx0Lmxhc3RJbnNlcnRSb3dpZDtcbiAgICAgICAgICBwYXJ0bmVyTWFwLnNldChwYXJ0bmVyX25hbWUsIHBhcnRuZXJfaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4g5Yy56YWN6aG555uu6LSf6LSj5Lq677yI6YOo6Zeo5Li7566h77yJXG4gICAgICAgIGNvbnN0IGV4Y2VsTGVhZGVyID0gZ2V0VmFsVGV4dCgncHJvamVjdF9sZWFkZXInKTtcbiAgICAgICAgbGV0IHByb2plY3RfbGVhZGVyID0gZXhjZWxMZWFkZXIgfHwgbnVsbDtcbiAgICAgICAgbGV0IG1hdGNoZWRMZWFkZXJVc2VyID0gbnVsbDtcbiAgICAgICAgaWYgKGV4Y2VsTGVhZGVyKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlZExlYWRlciA9IGZpbmRVc2VyRnV6enkoZXhjZWxMZWFkZXIsIHVzZXJNYXAsIGFsbFVzZXJzKTtcbiAgICAgICAgICBpZiAobWF0Y2hlZExlYWRlcikge1xuICAgICAgICAgICAgcHJvamVjdF9sZWFkZXIgPSBtYXRjaGVkTGVhZGVyLnJlYWxfbmFtZTtcbiAgICAgICAgICAgIG1hdGNoZWRMZWFkZXJVc2VyID0gbWF0Y2hlZExlYWRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDlpoLmnpzkuIrpnaLnu4/lip7kurrmsqHog73lrprkuIvpg6jpl6jvvIjkvovlpoLnu4/lip7kurrlnKjlupPph4zkuI3lrZjlnKjkuJRFeGNlbOaXoOmDqOmXqO+8ie+8jFxuICAgICAgICAvLyDkvYbpobnnm67otJ/otKPkurrvvIjkuLvnrqHvvInljLnphY3miJDlip/kuobvvIzliJnku6Xpobnnm67otJ/otKPkurrnmoTpg6jpl6jkvZzkuLrlkIjlkIznmoTlvZLlsZ7pg6jpl6jvvIzov5nmoLfkuLvnrqHlsLHlj6/ku6XnnIvlvpfliLDkuobvvIFcbiAgICAgICAgaWYgKCFkZXBhcnRtZW50X2lkICYmIG1hdGNoZWRMZWFkZXJVc2VyICYmIG1hdGNoZWRMZWFkZXJVc2VyLmRlcGFydG1lbnRfaWQpIHtcbiAgICAgICAgICBkZXBhcnRtZW50X2lkID0gbWF0Y2hlZExlYWRlclVzZXIuZGVwYXJ0bWVudF9pZDtcbiAgICAgICAgICBkZXBhcnRtZW50X25hbWUgPSBkZXB0SWRUb05hbWVNYXAuZ2V0KGRlcGFydG1lbnRfaWQpIHx8IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDlpoLmnpzov5jmmK/msqHmnInvvIzlm57pgIDliLDlvZPliY3nmbvlvZXotKblj7fvvIjnrqHnkIblkZjvvInnmoTpg6jpl6hcbiAgICAgICAgaWYgKCFkZXBhcnRtZW50X2lkKSB7XG4gICAgICAgICAgZGVwYXJ0bWVudF9pZCA9IHVzZXIuZGVwYXJ0bWVudF9pZCB8fCBudWxsO1xuICAgICAgICAgIGRlcGFydG1lbnRfbmFtZSA9IGRlcHRJZFRvTmFtZU1hcC5nZXQoZGVwYXJ0bWVudF9pZCkgfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuIOaUtuS7mOasvuexu+Wei1xuICAgICAgICBjb25zdCBleGNlbFBheW1lbnQgPSBnZXRWYWxUZXh0KCdwYXltZW50X3R5cGUnKTtcbiAgICAgICAgbGV0IHBheW1lbnRfdHlwZSA9ICdyZWNlaXZlJztcbiAgICAgICAgaWYgKGV4Y2VsUGF5bWVudC5pbmNsdWRlcygn5LuYJykgfHwgZXhjZWxQYXltZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3BheScpKSB7XG4gICAgICAgICAgcGF5bWVudF90eXBlID0gJ3BheSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA1LiDlkIjlkIzph5Hpop3kuI7pooTkvLDliKnmtqZcbiAgICAgICAgY29uc3QgY29udHJhY3RfYW1vdW50ID0gcGFyc2VOdW0oZ2V0VmFsKCdjb250cmFjdF9hbW91bnQnKSkgfHwgMDtcbiAgICAgICAgLy8g5aaC5p6c5piv5LuY5qy+77yM6aKE5Lyw5Yip5ram5by6572u5Li6IG51bGzvvIzlkKbliJnlhYHorrjop6PmnpDkuLrnqbrmiJbmlbDlrZdcbiAgICAgICAgbGV0IGVzdGltYXRlZF9wcm9maXQgPSBudWxsO1xuICAgICAgICBpZiAocGF5bWVudF90eXBlICE9PSAncGF5Jykge1xuICAgICAgICAgIGVzdGltYXRlZF9wcm9maXQgPSBwYXJzZU51bShnZXRWYWwoJ2VzdGltYXRlZF9wcm9maXQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiDml6XmnJ/moLzlvI/op6PmnpBcbiAgICAgICAgY29uc3QgY3JlYXRlZF9hdF92YWwgPSBwYXJzZURhdGUoZ2V0VmFsVGV4dCgnY3JlYXRlZF9hdCcpKTtcbiAgICAgICAgY29uc3Qgc2lnbl9kYXRlID0gcGFyc2VEYXRlKGdldFZhbFRleHQoJ3NpZ25fZGF0ZScpKTtcbiAgICAgICAgY29uc3QgY3JlYXRlZF9hdCA9IGNyZWF0ZWRfYXRfdmFsIHx8IHNpZ25fZGF0ZSB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgY29uc3QgYXBwcm92YWxfdGltZSA9IHNpZ25fZGF0ZSB8fCBjcmVhdGVkX2F0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xuXG4gICAgICAgIC8vIDcuIOWMuemFjemDqOmXqOWIneWuoeS4u+euoeS9nOS4uuWIneWuoeS6ulxuICAgICAgICBsZXQgc3VwZXJ2aXNvcl9pZCA9IG51bGw7XG4gICAgICAgIGxldCBzdXBlcnZpc29yX25hbWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChtYXRjaGVkTGVhZGVyVXNlcikge1xuICAgICAgICAgICAgc3VwZXJ2aXNvcl9pZCA9IG1hdGNoZWRMZWFkZXJVc2VyLmlkO1xuICAgICAgICAgICAgc3VwZXJ2aXNvcl9uYW1lID0gbWF0Y2hlZExlYWRlclVzZXIucmVhbF9uYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGFydG1lbnRfaWQpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkU3VwZXJ2aXNvciA9IGFsbFVzZXJzLmZpbmQodSA9PiB1LmRlcGFydG1lbnRfaWQgPT09IGRlcGFydG1lbnRfaWQgJiYgdS5yb2xlID09PSAnc3VwZXJ2aXNvcicpO1xuICAgICAgICAgIGlmIChtYXRjaGVkU3VwZXJ2aXNvcikge1xuICAgICAgICAgICAgc3VwZXJ2aXNvcl9pZCA9IG1hdGNoZWRTdXBlcnZpc29yLmlkO1xuICAgICAgICAgICAgc3VwZXJ2aXNvcl9uYW1lID0gbWF0Y2hlZFN1cGVydmlzb3IucmVhbF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDlpoLmnpzkuIrpnaLmsqHphY3lh7rkuLvnrqHvvIzkvYbmmK/pobnnm67otJ/otKPkurrljLnphY3lh7rmnaXnmoTmraPmmK/kuIDkuKrkuLvnrqHvvIzliJnnm7TmjqXnlKjku5ZcbiAgICAgICAgaWYgKCFzdXBlcnZpc29yX25hbWUgJiYgbWF0Y2hlZExlYWRlclVzZXIgJiYgbWF0Y2hlZExlYWRlclVzZXIucm9sZSA9PT0gJ3N1cGVydmlzb3InKSB7XG4gICAgICAgICAgc3VwZXJ2aXNvcl9pZCA9IG1hdGNoZWRMZWFkZXJVc2VyLmlkO1xuICAgICAgICAgIHN1cGVydmlzb3JfbmFtZSA9IG1hdGNoZWRMZWFkZXJVc2VyLnJlYWxfbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN1cGVydmlzb3JfbmFtZSkge1xuICAgICAgICAgIGNvbnN0IGFueVN1cGVydmlzb3IgPSBhbGxVc2Vycy5maW5kKHUgPT4gdS5yb2xlID09PSAnc3VwZXJ2aXNvcicpO1xuICAgICAgICAgIGlmIChhbnlTdXBlcnZpc29yKSB7XG4gICAgICAgICAgICBzdXBlcnZpc29yX2lkID0gYW55U3VwZXJ2aXNvci5pZDtcbiAgICAgICAgICAgIHN1cGVydmlzb3JfbmFtZSA9IGFueVN1cGVydmlzb3IucmVhbF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDguIOWuoeaguOaEj+inge+8iOm7mOiupOS4uiAn5pegJ++8iVxuICAgICAgICBjb25zdCBzdXBlcnZpc29yX29waW5pb24gPSBnZXRWYWxUZXh0KCdzdXBlcnZpc29yX29waW5pb24nKSB8fCAn5pegJztcbiAgICAgICAgY29uc3QgZmluYW5jZV9vcGluaW9uID0gZ2V0VmFsVGV4dCgnZmluYW5jZV9vcGluaW9uJykgfHwgJ+aXoCc7XG4gICAgICAgIGNvbnN0IHNlY3JldGFyeV9vcGluaW9uID0gZ2V0VmFsVGV4dCgnc2VjcmV0YXJ5X29waW5pb24nKSB8fCAn5pegJztcblxuICAgICAgICBjb25zdCBjb250cmFjdF9jb250ZW50ID0gZ2V0VmFsVGV4dCgnY29udHJhY3RfY29udGVudCcpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0X3llYXJzID0gZ2V0VmFsVGV4dCgnY29udHJhY3RfeWVhcnMnKSB8fCBudWxsOyAvLyDnlZnnqbrljbPlj69cblxuICAgICAgICAvLyA5LiDlhpnlhaXmlbDmja7lupPlubborr7kuLrnu4jlrqHpgJrov4fnirbmgIFcbiAgICAgICAgZGIucHJlcGFyZShgXG4gICAgICAgICAgSU5TRVJUIElOVE8gY29udHJhY3RzIChcbiAgICAgICAgICAgIHByb2plY3RfbmFtZSwgcGFydG5lcl9pZCwgcGFydG5lcl9uYW1lLCBjb250cmFjdF9jb250ZW50LCBjb250cmFjdF95ZWFycyxcbiAgICAgICAgICAgIGNvbnRyYWN0X2Ftb3VudCwgZXN0aW1hdGVkX3Byb2ZpdCwgcGF5bWVudF90eXBlLCBzaWduX2RhdGUsXG4gICAgICAgICAgICBjcmVhdG9yX2lkLCBjcmVhdG9yX25hbWUsIGRlcGFydG1lbnRfaWQsIGRlcGFydG1lbnRfbmFtZSwgcHJvamVjdF9sZWFkZXIsXG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdXBlcnZpc29yX29waW5pb24sIHN1cGVydmlzb3JfYXBwcm92ZWQsIHN1cGVydmlzb3JfaWQsIHN1cGVydmlzb3JfbmFtZSwgc3VwZXJ2aXNvcl90aW1lLFxuICAgICAgICAgICAgZmluYW5jZV9vcGluaW9uLCBmaW5hbmNlX2FwcHJvdmVkLCBmaW5hbmNlX2lkLCBmaW5hbmNlX25hbWUsIGZpbmFuY2VfdGltZSxcbiAgICAgICAgICAgIHNlY3JldGFyeV9vcGluaW9uLCBzZWNyZXRhcnlfYXBwcm92ZWQsIHNlY3JldGFyeV9pZCwgc2VjcmV0YXJ5X25hbWUsIHNlY3JldGFyeV90aW1lLFxuICAgICAgICAgICAgY3JlYXRlZF9hdCwgdXBkYXRlZF9hdFxuICAgICAgICAgICkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCAnYXBwcm92ZWQnLCA/LCAxLCA/LCA/LCA/LCA/LCAxLCA/LCA/LCA/LCA/LCAxLCA/LCA/LCA/LCA/LCA/KVxuICAgICAgICBgKS5ydW4oXG4gICAgICAgICAgcHJvamVjdF9uYW1lLFxuICAgICAgICAgIHBhcnRuZXJfaWQsXG4gICAgICAgICAgcGFydG5lcl9uYW1lLFxuICAgICAgICAgIGNvbnRyYWN0X2NvbnRlbnQsXG4gICAgICAgICAgY29udHJhY3RfeWVhcnMsXG4gICAgICAgICAgY29udHJhY3RfYW1vdW50LFxuICAgICAgICAgIGVzdGltYXRlZF9wcm9maXQsXG4gICAgICAgICAgcGF5bWVudF90eXBlLFxuICAgICAgICAgIHNpZ25fZGF0ZSxcbiAgICAgICAgICBjcmVhdG9yX2lkLFxuICAgICAgICAgIGNyZWF0b3JfbmFtZSxcbiAgICAgICAgICBkZXBhcnRtZW50X2lkLFxuICAgICAgICAgIGRlcGFydG1lbnRfbmFtZSxcbiAgICAgICAgICBwcm9qZWN0X2xlYWRlcixcbiAgICAgICAgICBcbiAgICAgICAgICBzdXBlcnZpc29yX29waW5pb24sXG4gICAgICAgICAgc3VwZXJ2aXNvcl9pZCxcbiAgICAgICAgICBzdXBlcnZpc29yX25hbWUsXG4gICAgICAgICAgbnVsbCwgLy8gc3VwZXJ2aXNvcl90aW1lXG4gICAgICAgICAgXG4gICAgICAgICAgZmluYW5jZV9vcGluaW9uLFxuICAgICAgICAgIGZpbmFuY2VfaWQsXG4gICAgICAgICAgZmluYW5jZV9uYW1lLFxuICAgICAgICAgIG51bGwsIC8vIGZpbmFuY2VfdGltZVxuICAgICAgICAgIFxuICAgICAgICAgIHNlY3JldGFyeV9vcGluaW9uLFxuICAgICAgICAgIHNlY3JldGFyeV9pZCxcbiAgICAgICAgICBzZWNyZXRhcnlfbmFtZSxcbiAgICAgICAgICBudWxsLCAvLyBzZWNyZXRhcnlfdGltZSxcbiAgICAgICAgICBcbiAgICAgICAgICBjcmVhdGVkX2F0LFxuICAgICAgICAgIGNyZWF0ZWRfYXRcbiAgICAgICAgKTtcblxuICAgICAgICBpbXBvcnRlZENvdW50Kys7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW1wb3J0ZWRDb3VudDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvdGFsSW1wb3J0ZWQgPSBydW5JbXBvcnQoKTtcbiAgICBjb25zb2xlLmxvZyhgW0NvbnRyYWN0IEltcG9ydF0gU3VjY2Vzc2Z1bGx5IGltcG9ydGVkICR7dG90YWxJbXBvcnRlZH0gcm93cy5gKTtcblxuICAgIHJldHVybiBSZXNwb25zZS5qc29uKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBg5oiQ5Yqf5a+85YWl5LqGICR7dG90YWxJbXBvcnRlZH0g5p2h5ZCI5ZCM5pWw5o2u44CCYCxcbiAgICAgIGNvdW50OiB0b3RhbEltcG9ydGVkXG4gICAgfSk7XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCflr7zlhaXlkIjlkIzmlbDmja7lpLHotKU6JywgZXJyb3IpO1xuICAgIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgICAgeyBlcnJvcjogYOWvvOWFpeWksei0pTogJHtlcnJvci5tZXNzYWdlIHx8ICfmnI3liqHlmajlhoXpg6jplJnor68nfWAgfSxcbiAgICAgIHsgc3RhdHVzOiA1MDAgfVxuICAgICk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJkeW5hbWljIiwiZ2V0RGIiLCJnZXRVc2VyRnJvbVJlcXVlc3QiLCJ1bmF1dGhvcml6ZWRSZXNwb25zZSIsImZvcmJpZGRlblJlc3BvbnNlIiwiY2hlY2tSb2xlIiwiRXhjZWxKUyIsInBhdGgiLCJwYXJzZU51bSIsInZhbCIsInVuZGVmaW5lZCIsImNsZWFuZWQiLCJTdHJpbmciLCJyZXBsYWNlIiwibnVtIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiZmluZFVzZXJGdXp6eSIsIm5hbWUiLCJ1c2VyTWFwIiwiYWxsVXNlcnMiLCJjbGVhbmVkTmFtZSIsInRyaW0iLCJoYXMiLCJnZXQiLCJsZW5ndGgiLCJ1IiwicmVhbF9uYW1lIiwibWF0Y2hDb3VudCIsInBhcnNlRGF0ZSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInN1YnN0cmluZyIsInN0clZhbCIsInRlc3QiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJleGNlbEVwb2NoIiwiVVRDIiwibXNQZXJEYXkiLCJkYXRlIiwiZ2V0VGltZSIsIm1hdGNoIiwicGFkU3RhcnQiLCJQT1NUIiwicmVxdWVzdCIsInVzZXIiLCJmb3JtRGF0YSIsImZpbGUiLCJSZXNwb25zZSIsImpzb24iLCJlcnJvciIsInN0YXR1cyIsImFycmF5QnVmZmVyIiwid29ya2Jvb2siLCJXb3JrYm9vayIsInhsc3giLCJsb2FkIiwiQnVmZmVyIiwiZnJvbSIsIndvcmtzaGVldCIsIndvcmtzaGVldHMiLCJkYiIsInByZXBhcmUiLCJhbGwiLCJNYXAiLCJzZXQiLCJhbGxEZXB0cyIsImRlcHRNYXAiLCJkZXB0SWRUb05hbWVNYXAiLCJkIiwiaWQiLCJhbGxQYXJ0bmVycyIsInBhcnRuZXJNYXAiLCJwIiwiaGVhZGVycyIsImhlYWRlclJvdyIsImdldFJvdyIsImVhY2hDZWxsIiwiY2VsbCIsImNvbE51bWJlciIsInRleHQiLCJpbmNsdWRlcyIsImNyZWF0ZWRfYXQiLCJjcmVhdG9yX25hbWUiLCJkZXBhcnRtZW50X25hbWUiLCJwcm9qZWN0X2xlYWRlciIsInNpZ25fZGF0ZSIsInByb2plY3RfbmFtZSIsInBhcnRuZXJfbmFtZSIsImNvbnRyYWN0X2NvbnRlbnQiLCJjb250cmFjdF9hbW91bnQiLCJlc3RpbWF0ZWRfcHJvZml0IiwicGF5bWVudF90eXBlIiwic3VwZXJ2aXNvcl9vcGluaW9uIiwiZmluYW5jZV9vcGluaW9uIiwic2VjcmV0YXJ5X29waW5pb24iLCJjb250cmFjdF95ZWFycyIsImZpbmFuY2VVc2VyIiwiZmluZCIsInJvbGUiLCJmaW5hbmNlX2lkIiwiZmluYW5jZV9uYW1lIiwic2VjcmV0YXJ5VXNlciIsInNlY3JldGFyeV9pZCIsInNlY3JldGFyeV9uYW1lIiwiaW1wb3J0ZWRDb3VudCIsInJ1bkltcG9ydCIsInRyYW5zYWN0aW9uIiwicm93TnVtYmVyIiwicm93Q291bnQiLCJyb3ciLCJjb25zb2xlIiwibG9nIiwiaGFzVmFsdWVzIiwiZ2V0VmFsIiwia2V5IiwiY29sSW5kZXgiLCJnZXRDZWxsIiwidmFsdWUiLCJmb3JtdWxhIiwicmVzdWx0IiwiZ2V0VmFsVGV4dCIsImV4Y2VsQ3JlYXRvciIsImNyZWF0b3JfaWQiLCJkZXBhcnRtZW50X2lkIiwibWF0Y2hlZFVzZXIiLCJleGNlbERlcHQiLCJwYXJ0bmVyX2lkIiwicFJlc3VsdCIsInJ1biIsImxhc3RJbnNlcnRSb3dpZCIsImV4Y2VsTGVhZGVyIiwibWF0Y2hlZExlYWRlclVzZXIiLCJtYXRjaGVkTGVhZGVyIiwiZXhjZWxQYXltZW50IiwidG9Mb3dlckNhc2UiLCJjcmVhdGVkX2F0X3ZhbCIsImFwcHJvdmFsX3RpbWUiLCJzdXBlcnZpc29yX2lkIiwic3VwZXJ2aXNvcl9uYW1lIiwibWF0Y2hlZFN1cGVydmlzb3IiLCJhbnlTdXBlcnZpc29yIiwidG90YWxJbXBvcnRlZCIsInN1Y2Nlc3MiLCJtZXNzYWdlIiwiY291bnQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./src/app/api/contracts/import/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","vendor-chunks/exceljs","vendor-chunks/jszip","vendor-chunks/bluebird","vendor-chunks/unzipper","vendor-chunks/@fast-csv","vendor-chunks/pako","vendor-chunks/readable-stream","vendor-chunks/fstream","vendor-chunks/lazystream","vendor-chunks/archiver-utils","vendor-chunks/duplexer2","vendor-chunks/compress-commons","vendor-chunks/archiver","vendor-chunks/tar-stream","vendor-chunks/readdir-glob","vendor-chunks/graceful-fs","vendor-chunks/zip-stream","vendor-chunks/xmlchars","vendor-chunks/glob","vendor-chunks/dayjs","vendor-chunks/crc32-stream","vendor-chunks/inherits","vendor-chunks/fs.realpath","vendor-chunks/buffer-indexof-polyfill","vendor-chunks/bl","vendor-chunks/binary","vendor-chunks/async","vendor-chunks/wrappy","vendor-chunks/util-deprecate","vendor-chunks/traverse","vendor-chunks/tmp","vendor-chunks/string_decoder","vendor-chunks/saxes","vendor-chunks/process-nextick-args","vendor-chunks/path-is-absolute","vendor-chunks/once","vendor-chunks/normalize-path","vendor-chunks/mkdirp","vendor-chunks/minimatch","vendor-chunks/lodash.uniq","vendor-chunks/lodash.union","vendor-chunks/lodash.isundefined","vendor-chunks/lodash.isnil","vendor-chunks/lodash.isfunction","vendor-chunks/lodash.isequal","vendor-chunks/lodash.groupby","vendor-chunks/lodash.flatten","vendor-chunks/lodash.escaperegexp","vendor-chunks/lodash.difference","vendor-chunks/lodash.defaults","vendor-chunks/listenercount","vendor-chunks/lie","vendor-chunks/isarray","vendor-chunks/inflight","vendor-chunks/immediate","vendor-chunks/fs-constants","vendor-chunks/fast-csv","vendor-chunks/end-of-stream","vendor-chunks/crc-32","vendor-chunks/core-util-is","vendor-chunks/concat-map","vendor-chunks/chainsaw","vendor-chunks/buffers","vendor-chunks/buffer-crc32","vendor-chunks/brace-expansion","vendor-chunks/big-integer","vendor-chunks/balanced-match"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fcontracts%2Fimport%2Froute&page=%2Fapi%2Fcontracts%2Fimport%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fcontracts%2Fimport%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__;
})();