"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 = "pages/api/auth/verify"; exports.ids = ["pages/api/auth/verify"]; exports.modules = { /***/ "(api-node)/./lib/database.js": /*!*************************!*\ !*** ./lib/database.js ***! \*************************/ /***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ db: () => (/* binding */ db)\n/* harmony export */ });\n/* harmony import */ var _neondatabase_serverless__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @neondatabase/serverless */ \"@neondatabase/serverless\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_neondatabase_serverless__WEBPACK_IMPORTED_MODULE_0__]);\n_neondatabase_serverless__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n// Get the database URL from environment variables\nconst sql = (0,_neondatabase_serverless__WEBPACK_IMPORTED_MODULE_0__.neon)(process.env.POSTGRES_URL);\n// Database adapter that works with Neon\nclass DatabaseAdapter {\n async query(sqlString, params = []) {\n try {\n // For Neon, we need to use tagged template literals\n // This is a simplified approach - in production you'd want more robust parameter handling\n let result;\n if (params.length === 0) {\n // No parameters\n result = await sql`${sql.unsafe(sqlString)}`;\n } else {\n // With parameters - this is a simplified approach\n // In production, you'd want proper parameter escaping\n const escapedParams = params.map((param)=>typeof param === 'string' ? `'${param.replace(/'/g, \"''\")}'` : param);\n let query = sqlString;\n for(let i = 0; i < escapedParams.length; i++){\n query = query.replace(`$${i + 1}`, escapedParams[i]);\n }\n result = await sql`${sql.unsafe(query)}`;\n }\n return {\n rows: Array.isArray(result) ? result : [\n result\n ],\n rowCount: Array.isArray(result) ? result.length : 1\n };\n } catch (error) {\n console.error('Database query error:', error);\n throw error;\n }\n }\n async raw(sqlString, params = []) {\n return await this.query(sqlString, params);\n }\n}\nconst db = new DatabaseAdapter();\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL2xpYi9kYXRhYmFzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFnRDtBQUVoRCxrREFBa0Q7QUFDbEQsTUFBTUMsTUFBTUQsOERBQUlBLENBQUNFLFFBQVFDLEdBQUcsQ0FBQ0MsWUFBWTtBQUV6Qyx3Q0FBd0M7QUFDeEMsTUFBTUM7SUFDSixNQUFNQyxNQUFNQyxTQUFTLEVBQUVDLFNBQVMsRUFBRSxFQUFFO1FBQ2xDLElBQUk7WUFDRixvREFBb0Q7WUFDcEQsMEZBQTBGO1lBQzFGLElBQUlDO1lBRUosSUFBSUQsT0FBT0UsTUFBTSxLQUFLLEdBQUc7Z0JBQ3ZCLGdCQUFnQjtnQkFDaEJELFNBQVMsTUFBTVIsR0FBRyxDQUFDLEVBQUVBLElBQUlVLE1BQU0sQ0FBQ0osV0FBVyxDQUFDO1lBQzlDLE9BQU87Z0JBQ0wsa0RBQWtEO2dCQUNsRCxzREFBc0Q7Z0JBQ3RELE1BQU1LLGdCQUFnQkosT0FBT0ssR0FBRyxDQUFDQyxDQUFBQSxRQUMvQixPQUFPQSxVQUFVLFdBQVcsQ0FBQyxDQUFDLEVBQUVBLE1BQU1DLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEdBQUdEO2dCQUdqRSxJQUFJUixRQUFRQztnQkFDWixJQUFLLElBQUlTLElBQUksR0FBR0EsSUFBSUosY0FBY0YsTUFBTSxFQUFFTSxJQUFLO29CQUM3Q1YsUUFBUUEsTUFBTVMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFQyxJQUFJLEdBQUcsRUFBRUosYUFBYSxDQUFDSSxFQUFFO2dCQUNyRDtnQkFFQVAsU0FBUyxNQUFNUixHQUFHLENBQUMsRUFBRUEsSUFBSVUsTUFBTSxDQUFDTCxPQUFPLENBQUM7WUFDMUM7WUFFQSxPQUFPO2dCQUNMVyxNQUFNQyxNQUFNQyxPQUFPLENBQUNWLFVBQVVBLFNBQVM7b0JBQUNBO2lCQUFPO2dCQUMvQ1csVUFBVUYsTUFBTUMsT0FBTyxDQUFDVixVQUFVQSxPQUFPQyxNQUFNLEdBQUc7WUFDcEQ7UUFDRixFQUFFLE9BQU9XLE9BQU87WUFDZEMsUUFBUUQsS0FBSyxDQUFDLHlCQUF5QkE7WUFDdkMsTUFBTUE7UUFDUjtJQUNGO0lBRUEsTUFBTUUsSUFBSWhCLFNBQVMsRUFBRUMsU0FBUyxFQUFFLEVBQUU7UUFDaEMsT0FBTyxNQUFNLElBQUksQ0FBQ0YsS0FBSyxDQUFDQyxXQUFXQztJQUNyQztBQUNGO0FBRU8sTUFBTWdCLEtBQUssSUFBSW5CLGtCQUFrQiIsInNvdXJjZXMiOlsiL1VzZXJzL3JzdGlsbHcvRG9jdW1lbnRzL3RjZy12YXVsdC9saWIvZGF0YWJhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbmVvbiB9IGZyb20gJ0BuZW9uZGF0YWJhc2Uvc2VydmVybGVzcyc7XG5cbi8vIEdldCB0aGUgZGF0YWJhc2UgVVJMIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG5jb25zdCBzcWwgPSBuZW9uKHByb2Nlc3MuZW52LlBPU1RHUkVTX1VSTCk7XG5cbi8vIERhdGFiYXNlIGFkYXB0ZXIgdGhhdCB3b3JrcyB3aXRoIE5lb25cbmNsYXNzIERhdGFiYXNlQWRhcHRlciB7XG4gIGFzeW5jIHF1ZXJ5KHNxbFN0cmluZywgcGFyYW1zID0gW10pIHtcbiAgICB0cnkge1xuICAgICAgLy8gRm9yIE5lb24sIHdlIG5lZWQgdG8gdXNlIHRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsc1xuICAgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgYXBwcm9hY2ggLSBpbiBwcm9kdWN0aW9uIHlvdSdkIHdhbnQgbW9yZSByb2J1c3QgcGFyYW1ldGVyIGhhbmRsaW5nXG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgXG4gICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBObyBwYXJhbWV0ZXJzXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHNxbGAke3NxbC51bnNhZmUoc3FsU3RyaW5nKX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2l0aCBwYXJhbWV0ZXJzIC0gdGhpcyBpcyBhIHNpbXBsaWZpZWQgYXBwcm9hY2hcbiAgICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgeW91J2Qgd2FudCBwcm9wZXIgcGFyYW1ldGVyIGVzY2FwaW5nXG4gICAgICAgIGNvbnN0IGVzY2FwZWRQYXJhbXMgPSBwYXJhbXMubWFwKHBhcmFtID0+IFxuICAgICAgICAgIHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycgPyBgJyR7cGFyYW0ucmVwbGFjZSgvJy9nLCBcIicnXCIpfSdgIDogcGFyYW1cbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIGxldCBxdWVyeSA9IHNxbFN0cmluZztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlc2NhcGVkUGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKGAkJHtpICsgMX1gLCBlc2NhcGVkUGFyYW1zW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgc3FsYCR7c3FsLnVuc2FmZShxdWVyeSl9YDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93czogQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogW3Jlc3VsdF0sXG4gICAgICAgIHJvd0NvdW50OiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQubGVuZ3RoIDogMVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRGF0YWJhc2UgcXVlcnkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmF3KHNxbFN0cmluZywgcGFyYW1zID0gW10pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5xdWVyeShzcWxTdHJpbmcsIHBhcmFtcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRiID0gbmV3IERhdGFiYXNlQWRhcHRlcigpOyAiXSwibmFtZXMiOlsibmVvbiIsInNxbCIsInByb2Nlc3MiLCJlbnYiLCJQT1NUR1JFU19VUkwiLCJEYXRhYmFzZUFkYXB0ZXIiLCJxdWVyeSIsInNxbFN0cmluZyIsInBhcmFtcyIsInJlc3VsdCIsImxlbmd0aCIsInVuc2FmZSIsImVzY2FwZWRQYXJhbXMiLCJtYXAiLCJwYXJhbSIsInJlcGxhY2UiLCJpIiwicm93cyIsIkFycmF5IiwiaXNBcnJheSIsInJvd0NvdW50IiwiZXJyb3IiLCJjb25zb2xlIiwicmF3IiwiZGIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(api-node)/./lib/database.js\n"); /***/ }), /***/ "(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fauth%2Fverify&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fauth%2Fverify.js&middlewareConfigBase64=e30%3D!": /*!********************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fauth%2Fverify&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fauth%2Fverify.js&middlewareConfigBase64=e30%3D! ***! \********************************************************************************************************************************************************************************************************************************/ /***/ ((module, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ handler: () => (/* binding */ handler)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/api-utils */ \"(api-node)/./node_modules/next/dist/server/api-utils/index.js\");\n/* harmony import */ var next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/route-kind */ \"(api-node)/./node_modules/next/dist/server/route-kind.js\");\n/* harmony import */ var next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/route-modules/pages-api/module.compiled */ \"(api-node)/./node_modules/next/dist/server/route-modules/pages-api/module.compiled.js\");\n/* harmony import */ var next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/build/templates/helpers */ \"(api-node)/./node_modules/next/dist/build/templates/helpers.js\");\n/* harmony import */ var _pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/api/auth/verify.js */ \"(api-node)/./pages/api/auth/verify.js\");\n/* harmony import */ var next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/dist/server/lib/trace/tracer */ \"(api-node)/./node_modules/next/dist/server/lib/trace/tracer.js\");\n/* harmony import */ var next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! next/dist/server/lib/trace/constants */ \"(api-node)/./node_modules/next/dist/server/lib/trace/constants.js\");\n/* harmony import */ var next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__);\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__]);\n_pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\n\n\n// Import the userland code.\n\n\n\n// Re-export the handler (should be the default export).\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__.hoist)(_pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__, 'default'));\n// Re-export config.\nconst config = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_3__.hoist)(_pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__, 'config');\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_route_modules_pages_api_module_compiled__WEBPACK_IMPORTED_MODULE_2__.PagesAPIRouteModule({\n definition: {\n kind: next_dist_server_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.PAGES_API,\n page: \"/api/auth/verify\",\n pathname: \"/api/auth/verify\",\n // The following aren't used in production.\n bundlePath: '',\n filename: ''\n },\n userland: _pages_api_auth_verify_js__WEBPACK_IMPORTED_MODULE_4__,\n distDir: \".next\" || 0,\n projectDir: false || ''\n});\nasync function handler(req, res, ctx) {\n let srcPage = \"/api/auth/verify\";\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (false) {}\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage\n });\n if (!prepareResult) {\n res.statusCode = 400;\n res.end('Bad Request');\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n return;\n }\n const { query, params, prerenderManifest } = prepareResult;\n try {\n const method = req.method || 'GET';\n const tracer = (0,next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__.getTracer)();\n const activeSpan = tracer.getActiveScopeSpan();\n const onRequestError = routeModule.instrumentationOnRequestError.bind(routeModule);\n const invokeRouteModule = async (span)=>routeModule.render(req, res, {\n query: {\n ...query,\n ...params\n },\n params,\n allowedRevalidateHeaderKeys: undefined,\n multiZoneDraftMode: Boolean(\"false\"),\n trustHostHeader: undefined,\n // TODO: get this from from runtime env so manifest\n // doesn't need to load\n previewProps: prerenderManifest.preview,\n propagateError: false,\n dev: routeModule.isDev,\n page: \"/api/auth/verify\",\n projectDir: false || '',\n onError: (...args)=>onRequestError(req, ...args)\n }).finally(()=>{\n if (!span) return;\n span.setAttributes({\n 'http.status_code': res.statusCode,\n 'next.rsc': false\n });\n const rootSpanAttributes = tracer.getRootSpanAttributes();\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return;\n }\n if (rootSpanAttributes.get('next.span_type') !== next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__.BaseServerSpan.handleRequest) {\n console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);\n return;\n }\n const route = rootSpanAttributes.get('next.route');\n if (route) {\n const name = `${method} ${route}`;\n span.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name\n });\n span.updateName(name);\n } else {\n span.updateName(`${method} ${req.url}`);\n }\n });\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (activeSpan) {\n await invokeRouteModule(activeSpan);\n } else {\n await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(next_dist_server_lib_trace_constants__WEBPACK_IMPORTED_MODULE_6__.BaseServerSpan.handleRequest, {\n spanName: `${method} ${req.url}`,\n kind: next_dist_server_lib_trace_tracer__WEBPACK_IMPORTED_MODULE_5__.SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url\n }\n }, invokeRouteModule));\n }\n } catch (err) {\n // we re-throw in dev to show the error overlay\n if (routeModule.isDev) {\n throw err;\n }\n // this is technically an invariant as error handling\n // should be done inside of api-resolver onError\n (0,next_dist_server_api_utils__WEBPACK_IMPORTED_MODULE_0__.sendError)(res, 500, 'Internal Server Error');\n } finally{\n // We don't allow any waitUntil work in pages API routes currently\n // so if callback is present return with resolved promise since no\n // pending work\n ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());\n }\n}\n\n//# sourceMappingURL=pages-api.js.map\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtcm91dGUtbG9hZGVyL2luZGV4LmpzP2tpbmQ9UEFHRVNfQVBJJnBhZ2U9JTJGYXBpJTJGYXV0aCUyRnZlcmlmeSZwcmVmZXJyZWRSZWdpb249JmFic29sdXRlUGFnZVBhdGg9LiUyRnBhZ2VzJTJGYXBpJTJGYXV0aCUyRnZlcmlmeS5qcyZtaWRkbGV3YXJlQ29uZmlnQmFzZTY0PWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUQ7QUFDQztBQUN1QztBQUNyQztBQUMxRDtBQUN1RDtBQUNpQjtBQUNGO0FBQ3RFO0FBQ0EsaUVBQWUsd0VBQUssQ0FBQyxzREFBUSxZQUFZLEVBQUM7QUFDMUM7QUFDTyxlQUFlLHdFQUFLLENBQUMsc0RBQVE7QUFDcEM7QUFDQSx3QkFBd0IseUdBQW1CO0FBQzNDO0FBQ0EsY0FBYyxrRUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFlBQVk7QUFDWixhQUFhLE9BQW9DLElBQUksQ0FBRTtBQUN2RCxnQkFBZ0IsTUFBdUM7QUFDdkQsQ0FBQztBQUNNO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEtBQXFCLEVBQUUsRUFFMUI7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksbUNBQW1DO0FBQy9DO0FBQ0E7QUFDQSx1QkFBdUIsNEVBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsNkNBQTZDLFNBQTZDO0FBQzFGLDRDQUE0QyxPQUF3QztBQUNwRixpQ0FBaUMsU0FBb0M7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE1BQXVDO0FBQ25FO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsZ0ZBQWM7QUFDL0UsK0RBQStELHlDQUF5QztBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxRQUFRLEVBQUUsTUFBTTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGtCQUFrQjtBQUNsQix1Q0FBdUMsUUFBUSxFQUFFLFFBQVE7QUFDekQ7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsNkVBQTZFLGdGQUFjO0FBQzNGLGlDQUFpQyxRQUFRLEVBQUUsUUFBUTtBQUNuRCwwQkFBMEIsdUVBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxxRUFBUztBQUNqQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VuZEVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvYXBpLXV0aWxzXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBQYWdlc0FQSVJvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcm91dGUtbW9kdWxlcy9wYWdlcy1hcGkvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBob2lzdCB9IGZyb20gXCJuZXh0L2Rpc3QvYnVpbGQvdGVtcGxhdGVzL2hlbHBlcnNcIjtcbi8vIEltcG9ydCB0aGUgdXNlcmxhbmQgY29kZS5cbmltcG9ydCAqIGFzIHVzZXJsYW5kIGZyb20gXCIuL3BhZ2VzL2FwaS9hdXRoL3ZlcmlmeS5qc1wiO1xuaW1wb3J0IHsgZ2V0VHJhY2VyLCBTcGFuS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi90cmFjZS90cmFjZXJcIjtcbmltcG9ydCB7IEJhc2VTZXJ2ZXJTcGFuIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3RyYWNlL2NvbnN0YW50c1wiO1xuLy8gUmUtZXhwb3J0IHRoZSBoYW5kbGVyIChzaG91bGQgYmUgdGhlIGRlZmF1bHQgZXhwb3J0KS5cbmV4cG9ydCBkZWZhdWx0IGhvaXN0KHVzZXJsYW5kLCAnZGVmYXVsdCcpO1xuLy8gUmUtZXhwb3J0IGNvbmZpZy5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBob2lzdCh1c2VybGFuZCwgJ2NvbmZpZycpO1xuLy8gQ3JlYXRlIGFuZCBleHBvcnQgdGhlIHJvdXRlIG1vZHVsZSB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG5jb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBQYWdlc0FQSVJvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5QQUdFU19BUEksXG4gICAgICAgIHBhZ2U6IFwiL2FwaS9hdXRoL3ZlcmlmeVwiLFxuICAgICAgICBwYXRobmFtZTogXCIvYXBpL2F1dGgvdmVyaWZ5XCIsXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAgICAgICAgYnVuZGxlUGF0aDogJycsXG4gICAgICAgIGZpbGVuYW1lOiAnJ1xuICAgIH0sXG4gICAgdXNlcmxhbmQsXG4gICAgZGlzdERpcjogcHJvY2Vzcy5lbnYuX19ORVhUX1JFTEFUSVZFX0RJU1RfRElSIHx8ICcnLFxuICAgIHByb2plY3REaXI6IHByb2Nlc3MuZW52Ll9fTkVYVF9SRUxBVElWRV9QUk9KRUNUX0RJUiB8fCAnJ1xufSk7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihyZXEsIHJlcywgY3R4KSB7XG4gICAgbGV0IHNyY1BhZ2UgPSBcIi9hcGkvYXV0aC92ZXJpZnlcIjtcbiAgICAvLyB0dXJib3BhY2sgZG9lc24ndCBub3JtYWxpemUgYC9pbmRleGAgaW4gdGhlIHBhZ2UgbmFtZVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gdG8gcHJvY2VzcyBkeW5hbWljIHJvdXRlcyBwcm9wZXJseVxuICAgIC8vIFRPRE86IGZpeCB0dXJib3BhY2sgcHJvdmlkaW5nIGRpZmZlcmluZyB2YWx1ZSBmcm9tIHdlYnBhY2tcbiAgICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICAgIHNyY1BhZ2UgPSBzcmNQYWdlLnJlcGxhY2UoL1xcL2luZGV4JC8sICcnKSB8fCAnLyc7XG4gICAgfVxuICAgIGNvbnN0IHByZXBhcmVSZXN1bHQgPSBhd2FpdCByb3V0ZU1vZHVsZS5wcmVwYXJlKHJlcSwgcmVzLCB7XG4gICAgICAgIHNyY1BhZ2VcbiAgICB9KTtcbiAgICBpZiAoIXByZXBhcmVSZXN1bHQpIHtcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDA7XG4gICAgICAgIHJlcy5lbmQoJ0JhZCBSZXF1ZXN0Jyk7XG4gICAgICAgIGN0eC53YWl0VW50aWwgPT0gbnVsbCA/IHZvaWQgMCA6IGN0eC53YWl0VW50aWwuY2FsbChjdHgsIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHF1ZXJ5LCBwYXJhbXMsIHByZXJlbmRlck1hbmlmZXN0IH0gPSBwcmVwYXJlUmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICAgIGNvbnN0IHRyYWNlciA9IGdldFRyYWNlcigpO1xuICAgICAgICBjb25zdCBhY3RpdmVTcGFuID0gdHJhY2VyLmdldEFjdGl2ZVNjb3BlU3BhbigpO1xuICAgICAgICBjb25zdCBvblJlcXVlc3RFcnJvciA9IHJvdXRlTW9kdWxlLmluc3RydW1lbnRhdGlvbk9uUmVxdWVzdEVycm9yLmJpbmQocm91dGVNb2R1bGUpO1xuICAgICAgICBjb25zdCBpbnZva2VSb3V0ZU1vZHVsZSA9IGFzeW5jIChzcGFuKT0+cm91dGVNb2R1bGUucmVuZGVyKHJlcSwgcmVzLCB7XG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtc1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIGFsbG93ZWRSZXZhbGlkYXRlSGVhZGVyS2V5czogcHJvY2Vzcy5lbnYuX19ORVhUX0FMTE9XRURfUkVWQUxJREFURV9IRUFERVJTLFxuICAgICAgICAgICAgICAgIG11bHRpWm9uZURyYWZ0TW9kZTogQm9vbGVhbihwcm9jZXNzLmVudi5fX05FWFRfTVVMVElfWk9ORV9EUkFGVF9NT0RFKSxcbiAgICAgICAgICAgICAgICB0cnVzdEhvc3RIZWFkZXI6IHByb2Nlc3MuZW52Ll9fTkVYVF9UUlVTVF9IT1NUX0hFQURFUixcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgdGhpcyBmcm9tIGZyb20gcnVudGltZSBlbnYgc28gbWFuaWZlc3RcbiAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG5lZWQgdG8gbG9hZFxuICAgICAgICAgICAgICAgIHByZXZpZXdQcm9wczogcHJlcmVuZGVyTWFuaWZlc3QucHJldmlldyxcbiAgICAgICAgICAgICAgICBwcm9wYWdhdGVFcnJvcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGV2OiByb3V0ZU1vZHVsZS5pc0RldixcbiAgICAgICAgICAgICAgICBwYWdlOiBcIi9hcGkvYXV0aC92ZXJpZnlcIixcbiAgICAgICAgICAgICAgICBwcm9qZWN0RGlyOiBwcm9jZXNzLmVudi5fX05FWFRfUkVMQVRJVkVfUFJPSkVDVF9ESVIgfHwgJycsXG4gICAgICAgICAgICAgICAgb25FcnJvcjogKC4uLmFyZ3MpPT5vblJlcXVlc3RFcnJvcihyZXEsIC4uLmFyZ3MpXG4gICAgICAgICAgICB9KS5maW5hbGx5KCgpPT57XG4gICAgICAgICAgICAgICAgaWYgKCFzcGFuKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHAuc3RhdHVzX2NvZGUnOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgJ25leHQucnNjJzogZmFsc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290U3BhbkF0dHJpYnV0ZXMgPSB0cmFjZXIuZ2V0Um9vdFNwYW5BdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICAgICAgLy8gV2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGF0dHJpYnV0ZXMsIHByb2JhYmx5IE9URUwgaXMgbm90IGVuYWJsZWRcbiAgICAgICAgICAgICAgICBpZiAoIXJvb3RTcGFuQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb290U3BhbkF0dHJpYnV0ZXMuZ2V0KCduZXh0LnNwYW5fdHlwZScpICE9PSBCYXNlU2VydmVyU3Bhbi5oYW5kbGVSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVW5leHBlY3RlZCByb290IHNwYW4gdHlwZSAnJHtyb290U3BhbkF0dHJpYnV0ZXMuZ2V0KCduZXh0LnNwYW5fdHlwZScpfScuIFBsZWFzZSByZXBvcnQgdGhpcyBOZXh0LmpzIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qc2ApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gcm9vdFNwYW5BdHRyaWJ1dGVzLmdldCgnbmV4dC5yb3V0ZScpO1xuICAgICAgICAgICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gYCR7bWV0aG9kfSAke3JvdXRlfWA7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnbmV4dC5yb3V0ZSc6IHJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHAucm91dGUnOiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICduZXh0LnNwYW5fbmFtZSc6IG5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4udXBkYXRlTmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnVwZGF0ZU5hbWUoYCR7bWV0aG9kfSAke3JlcS51cmx9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vIFRPRE86IGFjdGl2ZVNwYW4gY29kZSBwYXRoIGlzIGZvciB3aGVuIHdyYXBwZWQgYnlcbiAgICAgICAgLy8gbmV4dC1zZXJ2ZXIgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGlzIGlzIG5vIGxvbmdlciB1c2VkXG4gICAgICAgIGlmIChhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICBhd2FpdCBpbnZva2VSb3V0ZU1vZHVsZShhY3RpdmVTcGFuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNlci53aXRoUHJvcGFnYXRlZENvbnRleHQocmVxLmhlYWRlcnMsICgpPT50cmFjZXIudHJhY2UoQmFzZVNlcnZlclNwYW4uaGFuZGxlUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgICAgICBzcGFuTmFtZTogYCR7bWV0aG9kfSAke3JlcS51cmx9YCxcbiAgICAgICAgICAgICAgICAgICAga2luZDogU3BhbktpbmQuU0VSVkVSLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnaHR0cC5tZXRob2QnOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaHR0cC50YXJnZXQnOiByZXEudXJsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBpbnZva2VSb3V0ZU1vZHVsZSkpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIHdlIHJlLXRocm93IGluIGRldiB0byBzaG93IHRoZSBlcnJvciBvdmVybGF5XG4gICAgICAgIGlmIChyb3V0ZU1vZHVsZS5pc0Rldikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gaW52YXJpYW50IGFzIGVycm9yIGhhbmRsaW5nXG4gICAgICAgIC8vIHNob3VsZCBiZSBkb25lIGluc2lkZSBvZiBhcGktcmVzb2x2ZXIgb25FcnJvclxuICAgICAgICBzZW5kRXJyb3IocmVzLCA1MDAsICdJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InKTtcbiAgICB9IGZpbmFsbHl7XG4gICAgICAgIC8vIFdlIGRvbid0IGFsbG93IGFueSB3YWl0VW50aWwgd29yayBpbiBwYWdlcyBBUEkgcm91dGVzIGN1cnJlbnRseVxuICAgICAgICAvLyBzbyBpZiBjYWxsYmFjayBpcyBwcmVzZW50IHJldHVybiB3aXRoIHJlc29sdmVkIHByb21pc2Ugc2luY2Ugbm9cbiAgICAgICAgLy8gcGVuZGluZyB3b3JrXG4gICAgICAgIGN0eC53YWl0VW50aWwgPT0gbnVsbCA/IHZvaWQgMCA6IGN0eC53YWl0VW50aWwuY2FsbChjdHgsIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2VzLWFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fauth%2Fverify&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fauth%2Fverify.js&middlewareConfigBase64=e30%3D!\n"); /***/ }), /***/ "(api-node)/./pages/api/auth-utils.js": /*!*********************************!*\ !*** ./pages/api/auth-utils.js ***! \*********************************/ /***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ generateToken: () => (/* binding */ generateToken),\n/* harmony export */ getUserById: () => (/* binding */ getUserById),\n/* harmony export */ hashPassword: () => (/* binding */ hashPassword),\n/* harmony export */ isAdmin: () => (/* binding */ isAdmin),\n/* harmony export */ verifyPassword: () => (/* binding */ verifyPassword),\n/* harmony export */ verifyToken: () => (/* binding */ verifyToken)\n/* harmony export */ });\n/* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ \"jsonwebtoken\");\n/* harmony import */ var _lib_database_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/database.js */ \"(api-node)/./lib/database.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_lib_database_js__WEBPACK_IMPORTED_MODULE_1__]);\n_lib_database_js__WEBPACK_IMPORTED_MODULE_1__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\nconst JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';\nasync function hashPassword(password) {\n const bcrypt = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! bcryptjs */ \"bcryptjs\"));\n return await bcrypt.hash(password, 12);\n}\nasync function verifyPassword(password, hashedPassword) {\n const bcrypt = await Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! bcryptjs */ \"bcryptjs\"));\n return await bcrypt.compare(password, hashedPassword);\n}\nfunction generateToken(user) {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.sign({\n userId: user.id,\n email: user.email,\n role: user.role\n }, JWT_SECRET, {\n expiresIn: '7d'\n });\n}\nfunction verifyToken(token) {\n try {\n return jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.verify(token, JWT_SECRET);\n } catch (error) {\n return null;\n }\n}\nasync function isAdmin(userId) {\n try {\n const result = await _lib_database_js__WEBPACK_IMPORTED_MODULE_1__.db.query(`\n SELECT role FROM users WHERE id = $1\n `, [\n userId\n ]);\n return result.rows[0]?.role === 'admin';\n } catch (error) {\n console.error('Error checking admin status:', error);\n return false;\n }\n}\nasync function getUserById(userId) {\n try {\n const result = await _lib_database_js__WEBPACK_IMPORTED_MODULE_1__.db.query(`\n SELECT id, email, role, created_at FROM users WHERE id = $1\n `, [\n userId\n ]);\n return result.rows[0];\n } catch (error) {\n console.error('Error getting user:', error);\n return null;\n }\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL3BhZ2VzL2FwaS9hdXRoLXV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ1k7QUFFM0MsTUFBTUUsYUFBYUMsUUFBUUMsR0FBRyxDQUFDRixVQUFVLElBQUk7QUFFdEMsZUFBZUcsYUFBYUMsUUFBUTtJQUN6QyxNQUFNQyxTQUFTLE1BQU0sZ0hBQWtCO0lBQ3ZDLE9BQU8sTUFBTUEsT0FBT0MsSUFBSSxDQUFDRixVQUFVO0FBQ3JDO0FBRU8sZUFBZUcsZUFBZUgsUUFBUSxFQUFFSSxjQUFjO0lBQzNELE1BQU1ILFNBQVMsTUFBTSxnSEFBa0I7SUFDdkMsT0FBTyxNQUFNQSxPQUFPSSxPQUFPLENBQUNMLFVBQVVJO0FBQ3hDO0FBRU8sU0FBU0UsY0FBY0MsSUFBSTtJQUNoQyxPQUFPYiw4Q0FBUSxDQUNiO1FBQ0VlLFFBQVFGLEtBQUtHLEVBQUU7UUFDZkMsT0FBT0osS0FBS0ksS0FBSztRQUNqQkMsTUFBTUwsS0FBS0ssSUFBSTtJQUNqQixHQUNBaEIsWUFDQTtRQUFFaUIsV0FBVztJQUFLO0FBRXRCO0FBRU8sU0FBU0MsWUFBWUMsS0FBSztJQUMvQixJQUFJO1FBQ0YsT0FBT3JCLGdEQUFVLENBQUNxQixPQUFPbkI7SUFDM0IsRUFBRSxPQUFPcUIsT0FBTztRQUNkLE9BQU87SUFDVDtBQUNGO0FBRU8sZUFBZUMsUUFBUVQsTUFBTTtJQUNsQyxJQUFJO1FBQ0YsTUFBTVUsU0FBUyxNQUFNeEIsZ0RBQUVBLENBQUN5QixLQUFLLENBQUMsQ0FBQzs7SUFFL0IsQ0FBQyxFQUFFO1lBQUNYO1NBQU87UUFDWCxPQUFPVSxPQUFPRSxJQUFJLENBQUMsRUFBRSxFQUFFVCxTQUFTO0lBQ2xDLEVBQUUsT0FBT0ssT0FBTztRQUNkSyxRQUFRTCxLQUFLLENBQUMsZ0NBQWdDQTtRQUM5QyxPQUFPO0lBQ1Q7QUFDRjtBQUVPLGVBQWVNLFlBQVlkLE1BQU07SUFDdEMsSUFBSTtRQUNGLE1BQU1VLFNBQVMsTUFBTXhCLGdEQUFFQSxDQUFDeUIsS0FBSyxDQUFDLENBQUM7O0lBRS9CLENBQUMsRUFBRTtZQUFDWDtTQUFPO1FBQ1gsT0FBT1UsT0FBT0UsSUFBSSxDQUFDLEVBQUU7SUFDdkIsRUFBRSxPQUFPSixPQUFPO1FBQ2RLLFFBQVFMLEtBQUssQ0FBQyx1QkFBdUJBO1FBQ3JDLE9BQU87SUFDVDtBQUNGIiwic291cmNlcyI6WyIvVXNlcnMvcnN0aWxsdy9Eb2N1bWVudHMvdGNnLXZhdWx0L3BhZ2VzL2FwaS9hdXRoLXV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCB7IGRiIH0gZnJvbSAnLi4vLi4vbGliL2RhdGFiYXNlLmpzJztcblxuY29uc3QgSldUX1NFQ1JFVCA9IHByb2Nlc3MuZW52LkpXVF9TRUNSRVQgfHwgJ3lvdXItc2VjcmV0LWtleSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNoUGFzc3dvcmQocGFzc3dvcmQpIHtcbiAgY29uc3QgYmNyeXB0ID0gYXdhaXQgaW1wb3J0KCdiY3J5cHRqcycpO1xuICByZXR1cm4gYXdhaXQgYmNyeXB0Lmhhc2gocGFzc3dvcmQsIDEyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVBhc3N3b3JkKHBhc3N3b3JkLCBoYXNoZWRQYXNzd29yZCkge1xuICBjb25zdCBiY3J5cHQgPSBhd2FpdCBpbXBvcnQoJ2JjcnlwdGpzJyk7XG4gIHJldHVybiBhd2FpdCBiY3J5cHQuY29tcGFyZShwYXNzd29yZCwgaGFzaGVkUGFzc3dvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUb2tlbih1c2VyKSB7XG4gIHJldHVybiBqd3Quc2lnbihcbiAgICB7IFxuICAgICAgdXNlcklkOiB1c2VyLmlkLCBcbiAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLCBcbiAgICAgIHJvbGU6IHVzZXIucm9sZSBcbiAgICB9LFxuICAgIEpXVF9TRUNSRVQsXG4gICAgeyBleHBpcmVzSW46ICc3ZCcgfVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VG9rZW4odG9rZW4pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gand0LnZlcmlmeSh0b2tlbiwgSldUX1NFQ1JFVCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzQWRtaW4odXNlcklkKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIucXVlcnkoYFxuICAgICAgU0VMRUNUIHJvbGUgRlJPTSB1c2VycyBXSEVSRSBpZCA9ICQxXG4gICAgYCwgW3VzZXJJZF0pO1xuICAgIHJldHVybiByZXN1bHQucm93c1swXT8ucm9sZSA9PT0gJ2FkbWluJztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjaGVja2luZyBhZG1pbiBzdGF0dXM6JywgZXJyb3IpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VXNlckJ5SWQodXNlcklkKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIucXVlcnkoYFxuICAgICAgU0VMRUNUIGlkLCBlbWFpbCwgcm9sZSwgY3JlYXRlZF9hdCBGUk9NIHVzZXJzIFdIRVJFIGlkID0gJDFcbiAgICBgLCBbdXNlcklkXSk7XG4gICAgcmV0dXJuIHJlc3VsdC5yb3dzWzBdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgdXNlcjonLCBlcnJvcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gIl0sIm5hbWVzIjpbImp3dCIsImRiIiwiSldUX1NFQ1JFVCIsInByb2Nlc3MiLCJlbnYiLCJoYXNoUGFzc3dvcmQiLCJwYXNzd29yZCIsImJjcnlwdCIsImhhc2giLCJ2ZXJpZnlQYXNzd29yZCIsImhhc2hlZFBhc3N3b3JkIiwiY29tcGFyZSIsImdlbmVyYXRlVG9rZW4iLCJ1c2VyIiwic2lnbiIsInVzZXJJZCIsImlkIiwiZW1haWwiLCJyb2xlIiwiZXhwaXJlc0luIiwidmVyaWZ5VG9rZW4iLCJ0b2tlbiIsInZlcmlmeSIsImVycm9yIiwiaXNBZG1pbiIsInJlc3VsdCIsInF1ZXJ5Iiwicm93cyIsImNvbnNvbGUiLCJnZXRVc2VyQnlJZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(api-node)/./pages/api/auth-utils.js\n"); /***/ }), /***/ "(api-node)/./pages/api/auth/verify.js": /*!**********************************!*\ !*** ./pages/api/auth/verify.js ***! \**********************************/ /***/ ((__webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.a(__webpack_module__, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ handler)\n/* harmony export */ });\n/* harmony import */ var _auth_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../auth-utils.js */ \"(api-node)/./pages/api/auth-utils.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_auth_utils_js__WEBPACK_IMPORTED_MODULE_0__]);\n_auth_utils_js__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\nasync function handler(req, res) {\n // Set CORS headers\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n // Handle preflight requests\n if (req.method === 'OPTIONS') {\n res.status(200).end();\n return;\n }\n if (req.method !== 'GET') {\n return res.status(405).json({\n error: 'Method not allowed'\n });\n }\n try {\n const authHeader = req.headers.authorization;\n if (!authHeader || !authHeader.startsWith('Bearer ')) {\n return res.status(401).json({\n error: 'No token provided'\n });\n }\n const token = authHeader.substring(7);\n const decoded = (0,_auth_utils_js__WEBPACK_IMPORTED_MODULE_0__.verifyToken)(token);\n if (!decoded) {\n return res.status(401).json({\n error: 'Invalid token'\n });\n }\n // Get user data\n const user = await (0,_auth_utils_js__WEBPACK_IMPORTED_MODULE_0__.getUserById)(decoded.userId);\n if (!user) {\n return res.status(401).json({\n error: 'User not found'\n });\n }\n res.status(200).json({\n success: true,\n user: {\n id: user.id,\n email: user.email,\n role: user.role,\n created_at: user.created_at\n }\n });\n } catch (error) {\n console.error('Token verification error:', error);\n res.status(500).json({\n error: 'Internal server error'\n });\n }\n}\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwaS1ub2RlKS8uL3BhZ2VzL2FwaS9hdXRoL3ZlcmlmeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE0RDtBQUU3QyxlQUFlRSxRQUFRQyxHQUFHLEVBQUVDLEdBQUc7SUFDNUMsbUJBQW1CO0lBQ25CQSxJQUFJQyxTQUFTLENBQUMsK0JBQStCO0lBQzdDRCxJQUFJQyxTQUFTLENBQUMsZ0NBQWdDO0lBQzlDRCxJQUFJQyxTQUFTLENBQUMsZ0NBQWdDO0lBRTlDLDRCQUE0QjtJQUM1QixJQUFJRixJQUFJRyxNQUFNLEtBQUssV0FBVztRQUM1QkYsSUFBSUcsTUFBTSxDQUFDLEtBQUtDLEdBQUc7UUFDbkI7SUFDRjtJQUVBLElBQUlMLElBQUlHLE1BQU0sS0FBSyxPQUFPO1FBQ3hCLE9BQU9GLElBQUlHLE1BQU0sQ0FBQyxLQUFLRSxJQUFJLENBQUM7WUFBRUMsT0FBTztRQUFxQjtJQUM1RDtJQUVBLElBQUk7UUFDRixNQUFNQyxhQUFhUixJQUFJUyxPQUFPLENBQUNDLGFBQWE7UUFFNUMsSUFBSSxDQUFDRixjQUFjLENBQUNBLFdBQVdHLFVBQVUsQ0FBQyxZQUFZO1lBQ3BELE9BQU9WLElBQUlHLE1BQU0sQ0FBQyxLQUFLRSxJQUFJLENBQUM7Z0JBQUVDLE9BQU87WUFBb0I7UUFDM0Q7UUFFQSxNQUFNSyxRQUFRSixXQUFXSyxTQUFTLENBQUM7UUFDbkMsTUFBTUMsVUFBVWpCLDJEQUFXQSxDQUFDZTtRQUU1QixJQUFJLENBQUNFLFNBQVM7WUFDWixPQUFPYixJQUFJRyxNQUFNLENBQUMsS0FBS0UsSUFBSSxDQUFDO2dCQUFFQyxPQUFPO1lBQWdCO1FBQ3ZEO1FBRUEsZ0JBQWdCO1FBQ2hCLE1BQU1RLE9BQU8sTUFBTWpCLDJEQUFXQSxDQUFDZ0IsUUFBUUUsTUFBTTtRQUU3QyxJQUFJLENBQUNELE1BQU07WUFDVCxPQUFPZCxJQUFJRyxNQUFNLENBQUMsS0FBS0UsSUFBSSxDQUFDO2dCQUFFQyxPQUFPO1lBQWlCO1FBQ3hEO1FBRUFOLElBQUlHLE1BQU0sQ0FBQyxLQUFLRSxJQUFJLENBQUM7WUFDbkJXLFNBQVM7WUFDVEYsTUFBTTtnQkFDSkcsSUFBSUgsS0FBS0csRUFBRTtnQkFDWEMsT0FBT0osS0FBS0ksS0FBSztnQkFDakJDLE1BQU1MLEtBQUtLLElBQUk7Z0JBQ2ZDLFlBQVlOLEtBQUtNLFVBQVU7WUFDN0I7UUFDRjtJQUVGLEVBQUUsT0FBT2QsT0FBTztRQUNkZSxRQUFRZixLQUFLLENBQUMsNkJBQTZCQTtRQUMzQ04sSUFBSUcsTUFBTSxDQUFDLEtBQUtFLElBQUksQ0FBQztZQUFFQyxPQUFPO1FBQXdCO0lBQ3hEO0FBQ0YiLCJzb3VyY2VzIjpbIi9Vc2Vycy9yc3RpbGx3L0RvY3VtZW50cy90Y2ctdmF1bHQvcGFnZXMvYXBpL2F1dGgvdmVyaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHZlcmlmeVRva2VuLCBnZXRVc2VyQnlJZCB9IGZyb20gJy4uL2F1dGgtdXRpbHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKHJlcSwgcmVzKSB7XG4gIC8vIFNldCBDT1JTIGhlYWRlcnNcbiAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcbiAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBPUFRJT05TJyk7XG4gIHJlcy5zZXRIZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnQ29udGVudC1UeXBlLCBBdXRob3JpemF0aW9uJyk7XG5cbiAgLy8gSGFuZGxlIHByZWZsaWdodCByZXF1ZXN0c1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgcmVzLnN0YXR1cygyMDApLmVuZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZXEubWV0aG9kICE9PSAnR0VUJykge1xuICAgIHJldHVybiByZXMuc3RhdHVzKDQwNSkuanNvbih7IGVycm9yOiAnTWV0aG9kIG5vdCBhbGxvd2VkJyB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgXG4gICAgaWYgKCFhdXRoSGVhZGVyIHx8ICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoJ0JlYXJlciAnKSkge1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5qc29uKHsgZXJyb3I6ICdObyB0b2tlbiBwcm92aWRlZCcgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhdXRoSGVhZGVyLnN1YnN0cmluZyg3KTtcbiAgICBjb25zdCBkZWNvZGVkID0gdmVyaWZ5VG9rZW4odG9rZW4pO1xuXG4gICAgaWYgKCFkZWNvZGVkKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLmpzb24oeyBlcnJvcjogJ0ludmFsaWQgdG9rZW4nIH0pO1xuICAgIH1cblxuICAgIC8vIEdldCB1c2VyIGRhdGFcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5SWQoZGVjb2RlZC51c2VySWQpO1xuICAgIFxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5qc29uKHsgZXJyb3I6ICdVc2VyIG5vdCBmb3VuZCcgfSk7XG4gICAgfVxuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgICByb2xlOiB1c2VyLnJvbGUsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IHVzZXIuY3JlYXRlZF9hdFxuICAgICAgfVxuICAgIH0pO1xuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignVG9rZW4gdmVyaWZpY2F0aW9uIGVycm9yOicsIGVycm9yKTtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyB9KTtcbiAgfVxufSAiXSwibmFtZXMiOlsidmVyaWZ5VG9rZW4iLCJnZXRVc2VyQnlJZCIsImhhbmRsZXIiLCJyZXEiLCJyZXMiLCJzZXRIZWFkZXIiLCJtZXRob2QiLCJzdGF0dXMiLCJlbmQiLCJqc29uIiwiZXJyb3IiLCJhdXRoSGVhZGVyIiwiaGVhZGVycyIsImF1dGhvcml6YXRpb24iLCJzdGFydHNXaXRoIiwidG9rZW4iLCJzdWJzdHJpbmciLCJkZWNvZGVkIiwidXNlciIsInVzZXJJZCIsInN1Y2Nlc3MiLCJpZCIsImVtYWlsIiwicm9sZSIsImNyZWF0ZWRfYXQiLCJjb25zb2xlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(api-node)/./pages/api/auth/verify.js\n"); /***/ }), /***/ "@neondatabase/serverless": /*!*******************************************!*\ !*** external "@neondatabase/serverless" ***! \*******************************************/ /***/ ((module) => { module.exports = import("@neondatabase/serverless");; /***/ }), /***/ "bcryptjs": /*!***************************!*\ !*** external "bcryptjs" ***! \***************************/ /***/ ((module) => { module.exports = import("bcryptjs");; /***/ }), /***/ "jsonwebtoken": /*!*******************************!*\ !*** external "jsonwebtoken" ***! \*******************************/ /***/ ((module) => { module.exports = require("jsonwebtoken"); /***/ }), /***/ "next/dist/compiled/next-server/pages-api.runtime.dev.js": /*!**************************************************************************!*\ !*** external "next/dist/compiled/next-server/pages-api.runtime.dev.js" ***! \**************************************************************************/ /***/ ((module) => { module.exports = require("next/dist/compiled/next-server/pages-api.runtime.dev.js"); /***/ }) }; ; // load runtime var __webpack_require__ = require("../../../webpack-api-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"], () => (__webpack_exec__("(api-node)/./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES_API&page=%2Fapi%2Fauth%2Fverify&preferredRegion=&absolutePagePath=.%2Fpages%2Fapi%2Fauth%2Fverify.js&middlewareConfigBase64=e30%3D!"))); module.exports = __webpack_exports__; })();