NeahFront7/.next/server/app/api/rocket-chat/messages/route.js
2025-04-14 15:45:29 +02:00

206 lines
78 KiB
JavaScript

"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/rocket-chat/messages/route";
exports.ids = ["app/api/rocket-chat/messages/route"];
exports.modules = {
/***/ "./action-async-storage.external":
/*!*******************************************************************************!*\
!*** external "next/dist/client/components/action-async-storage.external.js" ***!
\*******************************************************************************/
/***/ ((module) => {
module.exports = require("next/dist/client/components/action-async-storage.external.js");
/***/ }),
/***/ "./request-async-storage.external":
/*!********************************************************************************!*\
!*** external "next/dist/client/components/request-async-storage.external.js" ***!
\********************************************************************************/
/***/ ((module) => {
module.exports = require("next/dist/client/components/request-async-storage.external.js");
/***/ }),
/***/ "./static-generation-async-storage.external":
/*!******************************************************************************************!*\
!*** external "next/dist/client/components/static-generation-async-storage.external.js" ***!
\******************************************************************************************/
/***/ ((module) => {
module.exports = require("next/dist/client/components/static-generation-async-storage.external.js");
/***/ }),
/***/ "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");
/***/ }),
/***/ "assert":
/*!*************************!*\
!*** external "assert" ***!
\*************************/
/***/ ((module) => {
module.exports = require("assert");
/***/ }),
/***/ "buffer":
/*!*************************!*\
!*** external "buffer" ***!
\*************************/
/***/ ((module) => {
module.exports = require("buffer");
/***/ }),
/***/ "crypto":
/*!*************************!*\
!*** external "crypto" ***!
\*************************/
/***/ ((module) => {
module.exports = require("crypto");
/***/ }),
/***/ "events":
/*!*************************!*\
!*** external "events" ***!
\*************************/
/***/ ((module) => {
module.exports = require("events");
/***/ }),
/***/ "http":
/*!***********************!*\
!*** external "http" ***!
\***********************/
/***/ ((module) => {
module.exports = require("http");
/***/ }),
/***/ "https":
/*!************************!*\
!*** external "https" ***!
\************************/
/***/ ((module) => {
module.exports = require("https");
/***/ }),
/***/ "querystring":
/*!******************************!*\
!*** external "querystring" ***!
\******************************/
/***/ ((module) => {
module.exports = require("querystring");
/***/ }),
/***/ "url":
/*!**********************!*\
!*** external "url" ***!
\**********************/
/***/ ((module) => {
module.exports = require("url");
/***/ }),
/***/ "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%2Frocket-chat%2Fmessages%2Froute&page=%2Fapi%2Frocket-chat%2Fmessages%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Frocket-chat%2Fmessages%2Froute.ts&appDir=%2Fhome%2Falma%2FNeahFront7%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2FNeahFront7&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%2Frocket-chat%2Fmessages%2Froute&page=%2Fapi%2Frocket-chat%2Fmessages%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Frocket-chat%2Fmessages%2Froute.ts&appDir=%2Fhome%2Falma%2FNeahFront7%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2FNeahFront7&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 _home_alma_NeahFront7_app_api_rocket_chat_messages_route_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/api/rocket-chat/messages/route.ts */ \"(rsc)/./app/api/rocket-chat/messages/route.ts\");\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/rocket-chat/messages/route\",\n pathname: \"/api/rocket-chat/messages\",\n filename: \"route\",\n bundlePath: \"app/api/rocket-chat/messages/route\"\n },\n resolvedPagePath: \"/home/alma/NeahFront7/app/api/rocket-chat/messages/route.ts\",\n nextConfigOutput,\n userland: _home_alma_NeahFront7_app_api_rocket_chat_messages_route_ts__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/rocket-chat/messages/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/bmFtZT1hcHAlMkZhcGklMkZyb2NrZXQtY2hhdCUyRm1lc3NhZ2VzJTJGcm91dGUmcGFnZT0lMkZhcGklMkZyb2NrZXQtY2hhdCUyRm1lc3NhZ2VzJTJGcm91dGUmYXBwUGF0aHM9JnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGYXBpJTJGcm9ja2V0LWNoYXQlMkZtZXNzYWdlcyUyRnJvdXRlLnRzJmFwcERpcj0lMkZob21lJTJGYWxtYSUyRk5lYWhGcm9udDclMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRmhvbWUlMkZhbG1hJTJGTmVhaEZyb250NyZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDVztBQUN4RjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0hBQW1CO0FBQzNDO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsWUFBWTtBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlFQUFpRTtBQUN6RTtBQUNBO0FBQ0EsV0FBVyw0RUFBVztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ3VIOztBQUV2SCIsInNvdXJjZXMiOlsid2VicGFjazovL25lYWgvPzY3ZTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiL2hvbWUvYWxtYS9OZWFoRnJvbnQ3L2FwcC9hcGkvcm9ja2V0LWNoYXQvbWVzc2FnZXMvcm91dGUudHNcIjtcbi8vIFdlIGluamVjdCB0aGUgbmV4dENvbmZpZ091dHB1dCBoZXJlIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIHRoZSByb3V0ZVxuLy8gbW9kdWxlLlxuY29uc3QgbmV4dENvbmZpZ091dHB1dCA9IFwiXCJcbmNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFJvdXRlUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLkFQUF9ST1VURSxcbiAgICAgICAgcGFnZTogXCIvYXBpL3JvY2tldC1jaGF0L21lc3NhZ2VzL3JvdXRlXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9hcGkvcm9ja2V0LWNoYXQvbWVzc2FnZXNcIixcbiAgICAgICAgZmlsZW5hbWU6IFwicm91dGVcIixcbiAgICAgICAgYnVuZGxlUGF0aDogXCJhcHAvYXBpL3JvY2tldC1jaGF0L21lc3NhZ2VzL3JvdXRlXCJcbiAgICB9LFxuICAgIHJlc29sdmVkUGFnZVBhdGg6IFwiL2hvbWUvYWxtYS9OZWFoRnJvbnQ3L2FwcC9hcGkvcm9ja2V0LWNoYXQvbWVzc2FnZXMvcm91dGUudHNcIixcbiAgICBuZXh0Q29uZmlnT3V0cHV0LFxuICAgIHVzZXJsYW5kXG59KTtcbi8vIFB1bGwgb3V0IHRoZSBleHBvcnRzIHRoYXQgd2UgbmVlZCB0byBleHBvc2UgZnJvbSB0aGUgbW9kdWxlLiBUaGlzIHNob3VsZFxuLy8gYmUgZWxpbWluYXRlZCB3aGVuIHdlJ3ZlIG1vdmVkIHRoZSBvdGhlciByb3V0ZXMgdG8gdGhlIG5ldyBmb3JtYXQuIFRoZXNlXG4vLyBhcmUgdXNlZCB0byBob29rIGludG8gdGhlIHJvdXRlLlxuY29uc3QgeyByZXF1ZXN0QXN5bmNTdG9yYWdlLCBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLCBzZXJ2ZXJIb29rcyB9ID0gcm91dGVNb2R1bGU7XG5jb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvYXBpL3JvY2tldC1jaGF0L21lc3NhZ2VzL3JvdXRlXCI7XG5mdW5jdGlvbiBwYXRjaEZldGNoKCkge1xuICAgIHJldHVybiBfcGF0Y2hGZXRjaCh7XG4gICAgICAgIHNlcnZlckhvb2tzLFxuICAgICAgICBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlXG4gICAgfSk7XG59XG5leHBvcnQgeyByb3V0ZU1vZHVsZSwgcmVxdWVzdEFzeW5jU3RvcmFnZSwgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSwgc2VydmVySG9va3MsIG9yaWdpbmFsUGF0aG5hbWUsIHBhdGNoRmV0Y2gsICB9O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcm91dGUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Frocket-chat%2Fmessages%2Froute&page=%2Fapi%2Frocket-chat%2Fmessages%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Frocket-chat%2Fmessages%2Froute.ts&appDir=%2Fhome%2Falma%2FNeahFront7%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2FNeahFront7&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n");
/***/ }),
/***/ "(rsc)/./app/api/auth/[...nextauth]/route.ts":
/*!*********************************************!*\
!*** ./app/api/auth/[...nextauth]/route.ts ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GET: () => (/* binding */ handler),\n/* harmony export */ POST: () => (/* binding */ handler),\n/* harmony export */ authOptions: () => (/* binding */ authOptions)\n/* harmony export */ });\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth */ \"(rsc)/./node_modules/next-auth/index.js\");\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_auth__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next-auth/providers/keycloak */ \"(rsc)/./node_modules/next-auth/providers/keycloak.js\");\n\n\nfunction getRequiredEnvVar(name) {\n const value = process.env[name];\n if (!value) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n return value;\n}\nconst authOptions = {\n providers: [\n (0,next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n clientId: getRequiredEnvVar(\"KEYCLOAK_CLIENT_ID\"),\n clientSecret: getRequiredEnvVar(\"KEYCLOAK_CLIENT_SECRET\"),\n issuer: getRequiredEnvVar(\"KEYCLOAK_ISSUER\"),\n profile (profile) {\n return {\n id: profile.sub,\n name: profile.name ?? profile.preferred_username,\n email: profile.email,\n first_name: profile.given_name ?? \"\",\n last_name: profile.family_name ?? \"\",\n username: profile.preferred_username ?? profile.email?.split(\"@\")[0] ?? \"\",\n role: profile.groups ?? []\n };\n }\n })\n ],\n session: {\n strategy: \"jwt\",\n maxAge: 30 * 24 * 60 * 60\n },\n callbacks: {\n async jwt ({ token, account, profile }) {\n if (account && profile) {\n token.accessToken = account.access_token;\n token.refreshToken = account.refresh_token;\n token.accessTokenExpires = account.expires_at * 1000;\n token.role = profile.groups ?? [];\n token.username = profile.preferred_username ?? profile.email?.split(\"@\")[0] ?? \"\";\n token.first_name = profile.given_name ?? \"\";\n token.last_name = profile.family_name ?? \"\";\n }\n // Return previous token if not expired\n if (Date.now() < token.accessTokenExpires) {\n return token;\n }\n try {\n const clientId = getRequiredEnvVar(\"KEYCLOAK_CLIENT_ID\");\n const clientSecret = getRequiredEnvVar(\"KEYCLOAK_CLIENT_SECRET\");\n const response = await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/token`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token: token.refreshToken\n })\n });\n const tokens = await response.json();\n if (!response.ok) {\n throw new Error(\"RefreshAccessTokenError\");\n }\n return {\n ...token,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? token.refreshToken,\n accessTokenExpires: Date.now() + tokens.expires_in * 1000\n };\n } catch (error) {\n return {\n ...token,\n error: \"RefreshAccessTokenError\"\n };\n }\n },\n async session ({ session, token }) {\n if (token.error) {\n throw new Error(\"RefreshAccessTokenError\");\n }\n session.accessToken = token.accessToken;\n session.user = {\n ...session.user,\n id: token.sub,\n first_name: token.first_name ?? \"\",\n last_name: token.last_name ?? \"\",\n username: token.username ?? \"\",\n role: token.role ?? []\n };\n return session;\n }\n },\n pages: {\n signIn: \"/signin\",\n error: \"/signin\"\n },\n debug: \"development\" === \"development\"\n};\nconst handler = next_auth__WEBPACK_IMPORTED_MODULE_0___default()(authOptions);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBc0Q7QUFDTTtBQTRCNUQsU0FBU0Usa0JBQWtCQyxJQUFZO0lBQ3JDLE1BQU1DLFFBQVFDLFFBQVFDLEdBQUcsQ0FBQ0gsS0FBSztJQUMvQixJQUFJLENBQUNDLE9BQU87UUFDVixNQUFNLElBQUlHLE1BQU0sQ0FBQyx1Q0FBdUMsRUFBRUosS0FBSyxDQUFDO0lBQ2xFO0lBQ0EsT0FBT0M7QUFDVDtBQUVPLE1BQU1JLGNBQStCO0lBQzFDQyxXQUFXO1FBQ1RSLHdFQUFnQkEsQ0FBQztZQUNmUyxVQUFVUixrQkFBa0I7WUFDNUJTLGNBQWNULGtCQUFrQjtZQUNoQ1UsUUFBUVYsa0JBQWtCO1lBQzFCVyxTQUFRQSxPQUFPO2dCQUNiLE9BQU87b0JBQ0xDLElBQUlELFFBQVFFLEdBQUc7b0JBQ2ZaLE1BQU1VLFFBQVFWLElBQUksSUFBSVUsUUFBUUcsa0JBQWtCO29CQUNoREMsT0FBT0osUUFBUUksS0FBSztvQkFDcEJDLFlBQVlMLFFBQVFNLFVBQVUsSUFBSTtvQkFDbENDLFdBQVdQLFFBQVFRLFdBQVcsSUFBSTtvQkFDbENDLFVBQVVULFFBQVFHLGtCQUFrQixJQUFJSCxRQUFRSSxLQUFLLEVBQUVNLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSTtvQkFDeEVDLE1BQU1YLFFBQVFZLE1BQU0sSUFBSSxFQUFFO2dCQUM1QjtZQUNGO1FBQ0Y7S0FDRDtJQUNEQyxTQUFTO1FBQ1BDLFVBQVU7UUFDVkMsUUFBUSxLQUFLLEtBQUssS0FBSztJQUN6QjtJQUNBQyxXQUFXO1FBQ1QsTUFBTUMsS0FBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRW5CLE9BQU8sRUFBRTtZQUNuQyxJQUFJbUIsV0FBV25CLFNBQVM7Z0JBQ3RCa0IsTUFBTUUsV0FBVyxHQUFHRCxRQUFRRSxZQUFZO2dCQUN4Q0gsTUFBTUksWUFBWSxHQUFHSCxRQUFRSSxhQUFhO2dCQUMxQ0wsTUFBTU0sa0JBQWtCLEdBQUdMLFFBQVFNLFVBQVUsR0FBSTtnQkFDakRQLE1BQU1QLElBQUksR0FBRyxRQUFpQkMsTUFBTSxJQUFJLEVBQUU7Z0JBQzFDTSxNQUFNVCxRQUFRLEdBQUcsUUFBaUJOLGtCQUFrQixJQUFJSCxRQUFRSSxLQUFLLEVBQUVNLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSTtnQkFDeEZRLE1BQU1iLFVBQVUsR0FBRyxRQUFpQkMsVUFBVSxJQUFJO2dCQUNsRFksTUFBTVgsU0FBUyxHQUFHLFFBQWlCQyxXQUFXLElBQUk7WUFDcEQ7WUFFQSx1Q0FBdUM7WUFDdkMsSUFBSWtCLEtBQUtDLEdBQUcsS0FBTVQsTUFBTU0sa0JBQWtCLEVBQWE7Z0JBQ3JELE9BQU9OO1lBQ1Q7WUFFQSxJQUFJO2dCQUNGLE1BQU1yQixXQUFXUixrQkFBa0I7Z0JBQ25DLE1BQU1TLGVBQWVULGtCQUFrQjtnQkFFdkMsTUFBTXVDLFdBQVcsTUFBTUMsTUFDckIsQ0FBQyxFQUFFckMsUUFBUUMsR0FBRyxDQUFDcUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFdEMsUUFBUUMsR0FBRyxDQUFDc0MsY0FBYyxDQUFDLDhCQUE4QixDQUFDLEVBQ3JHO29CQUNFQyxRQUFRO29CQUNSQyxTQUFTO3dCQUNQLGdCQUFnQjtvQkFDbEI7b0JBQ0FDLE1BQU0sSUFBSUMsZ0JBQWdCO3dCQUN4QkMsWUFBWTt3QkFDWkMsV0FBV3hDO3dCQUNYeUMsZUFBZXhDO3dCQUNmeUIsZUFBZUwsTUFBTUksWUFBWTtvQkFDbkM7Z0JBQ0Y7Z0JBR0YsTUFBTWlCLFNBQVMsTUFBTVgsU0FBU1ksSUFBSTtnQkFFbEMsSUFBSSxDQUFDWixTQUFTYSxFQUFFLEVBQUU7b0JBQ2hCLE1BQU0sSUFBSS9DLE1BQU07Z0JBQ2xCO2dCQUVBLE9BQU87b0JBQ0wsR0FBR3dCLEtBQUs7b0JBQ1JFLGFBQWFtQixPQUFPbEIsWUFBWTtvQkFDaENDLGNBQWNpQixPQUFPaEIsYUFBYSxJQUFJTCxNQUFNSSxZQUFZO29CQUN4REUsb0JBQW9CRSxLQUFLQyxHQUFHLEtBQUtZLE9BQU9HLFVBQVUsR0FBRztnQkFDdkQ7WUFDRixFQUFFLE9BQU9DLE9BQU87Z0JBQ2QsT0FBTztvQkFDTCxHQUFHekIsS0FBSztvQkFDUnlCLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGO1FBQ0EsTUFBTTlCLFNBQVEsRUFBRUEsT0FBTyxFQUFFSyxLQUFLLEVBQUU7WUFDOUIsSUFBSUEsTUFBTXlCLEtBQUssRUFBRTtnQkFDZixNQUFNLElBQUlqRCxNQUFNO1lBQ2xCO1lBRUFtQixRQUFRTyxXQUFXLEdBQUdGLE1BQU1FLFdBQVc7WUFDdkNQLFFBQVErQixJQUFJLEdBQUc7Z0JBQ2IsR0FBRy9CLFFBQVErQixJQUFJO2dCQUNmM0MsSUFBSWlCLE1BQU1oQixHQUFHO2dCQUNiRyxZQUFZYSxNQUFNYixVQUFVLElBQUk7Z0JBQ2hDRSxXQUFXVyxNQUFNWCxTQUFTLElBQUk7Z0JBQzlCRSxVQUFVUyxNQUFNVCxRQUFRLElBQUk7Z0JBQzVCRSxNQUFNTyxNQUFNUCxJQUFJLElBQUksRUFBRTtZQUN4QjtZQUVBLE9BQU9FO1FBQ1Q7SUFDRjtJQUNBZ0MsT0FBTztRQUNMQyxRQUFRO1FBQ1JILE9BQU87SUFDVDtJQUNBSSxPQUFPdkQsa0JBQXlCO0FBQ2xDLEVBQUU7QUFFRixNQUFNd0QsVUFBVTdELGdEQUFRQSxDQUFDUTtBQUNrQiIsInNvdXJjZXMiOlsid2VicGFjazovL25lYWgvLi9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZS50cz9jOGE0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBOZXh0QXV0aCwgeyBOZXh0QXV0aE9wdGlvbnMgfSBmcm9tIFwibmV4dC1hdXRoXCI7XG5pbXBvcnQgS2V5Y2xvYWtQcm92aWRlciBmcm9tIFwibmV4dC1hdXRoL3Byb3ZpZGVycy9rZXljbG9ha1wiO1xuXG5kZWNsYXJlIG1vZHVsZSBcIm5leHQtYXV0aFwiIHtcbiAgaW50ZXJmYWNlIFNlc3Npb24ge1xuICAgIHVzZXI6IHtcbiAgICAgIGlkOiBzdHJpbmc7XG4gICAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGVtYWlsPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGltYWdlPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgICBmaXJzdF9uYW1lOiBzdHJpbmc7XG4gICAgICBsYXN0X25hbWU6IHN0cmluZztcbiAgICAgIHJvbGU6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgfVxuXG4gIGludGVyZmFjZSBKV1Qge1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgYWNjZXNzVG9rZW5FeHBpcmVzOiBudW1iZXI7XG4gICAgcm9sZTogc3RyaW5nW107XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBmaXJzdF9uYW1lOiBzdHJpbmc7XG4gICAgbGFzdF9uYW1lOiBzdHJpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZWRFbnZWYXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZTogJHtuYW1lfWApO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGF1dGhPcHRpb25zOiBOZXh0QXV0aE9wdGlvbnMgPSB7XG4gIHByb3ZpZGVyczogW1xuICAgIEtleWNsb2FrUHJvdmlkZXIoe1xuICAgICAgY2xpZW50SWQ6IGdldFJlcXVpcmVkRW52VmFyKFwiS0VZQ0xPQUtfQ0xJRU5UX0lEXCIpLFxuICAgICAgY2xpZW50U2VjcmV0OiBnZXRSZXF1aXJlZEVudlZhcihcIktFWUNMT0FLX0NMSUVOVF9TRUNSRVRcIiksXG4gICAgICBpc3N1ZXI6IGdldFJlcXVpcmVkRW52VmFyKFwiS0VZQ0xPQUtfSVNTVUVSXCIpLFxuICAgICAgcHJvZmlsZShwcm9maWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHByb2ZpbGUuc3ViLFxuICAgICAgICAgIG5hbWU6IHByb2ZpbGUubmFtZSA/PyBwcm9maWxlLnByZWZlcnJlZF91c2VybmFtZSxcbiAgICAgICAgICBlbWFpbDogcHJvZmlsZS5lbWFpbCxcbiAgICAgICAgICBmaXJzdF9uYW1lOiBwcm9maWxlLmdpdmVuX25hbWUgPz8gJycsXG4gICAgICAgICAgbGFzdF9uYW1lOiBwcm9maWxlLmZhbWlseV9uYW1lID8/ICcnLFxuICAgICAgICAgIHVzZXJuYW1lOiBwcm9maWxlLnByZWZlcnJlZF91c2VybmFtZSA/PyBwcm9maWxlLmVtYWlsPy5zcGxpdCgnQCcpWzBdID8/ICcnLFxuICAgICAgICAgIHJvbGU6IHByb2ZpbGUuZ3JvdXBzID8/IFtdLFxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICBdLFxuICBzZXNzaW9uOiB7XG4gICAgc3RyYXRlZ3k6IFwiand0XCIsXG4gICAgbWF4QWdlOiAzMCAqIDI0ICogNjAgKiA2MCwgLy8gMzAgZGF5c1xuICB9LFxuICBjYWxsYmFja3M6IHtcbiAgICBhc3luYyBqd3QoeyB0b2tlbiwgYWNjb3VudCwgcHJvZmlsZSB9KSB7XG4gICAgICBpZiAoYWNjb3VudCAmJiBwcm9maWxlKSB7XG4gICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuID0gYWNjb3VudC5hY2Nlc3NfdG9rZW47XG4gICAgICAgIHRva2VuLnJlZnJlc2hUb2tlbiA9IGFjY291bnQucmVmcmVzaF90b2tlbjtcbiAgICAgICAgdG9rZW4uYWNjZXNzVG9rZW5FeHBpcmVzID0gYWNjb3VudC5leHBpcmVzX2F0ISAqIDEwMDA7XG4gICAgICAgIHRva2VuLnJvbGUgPSAocHJvZmlsZSBhcyBhbnkpLmdyb3VwcyA/PyBbXTtcbiAgICAgICAgdG9rZW4udXNlcm5hbWUgPSAocHJvZmlsZSBhcyBhbnkpLnByZWZlcnJlZF91c2VybmFtZSA/PyBwcm9maWxlLmVtYWlsPy5zcGxpdCgnQCcpWzBdID8/ICcnO1xuICAgICAgICB0b2tlbi5maXJzdF9uYW1lID0gKHByb2ZpbGUgYXMgYW55KS5naXZlbl9uYW1lID8/ICcnO1xuICAgICAgICB0b2tlbi5sYXN0X25hbWUgPSAocHJvZmlsZSBhcyBhbnkpLmZhbWlseV9uYW1lID8/ICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXR1cm4gcHJldmlvdXMgdG9rZW4gaWYgbm90IGV4cGlyZWRcbiAgICAgIGlmIChEYXRlLm5vdygpIDwgKHRva2VuLmFjY2Vzc1Rva2VuRXhwaXJlcyBhcyBudW1iZXIpKSB7XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xpZW50SWQgPSBnZXRSZXF1aXJlZEVudlZhcihcIktFWUNMT0FLX0NMSUVOVF9JRFwiKTtcbiAgICAgICAgY29uc3QgY2xpZW50U2VjcmV0ID0gZ2V0UmVxdWlyZWRFbnZWYXIoXCJLRVlDTE9BS19DTElFTlRfU0VDUkVUXCIpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgYCR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQkFTRV9VUkx9L3JlYWxtcy8ke3Byb2Nlc3MuZW52LktFWUNMT0FLX1JFQUxNfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgICAgZ3JhbnRfdHlwZTogXCJyZWZyZXNoX3Rva2VuXCIsXG4gICAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IGNsaWVudFNlY3JldCxcbiAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdG9rZW4ucmVmcmVzaFRva2VuIGFzIHN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZnJlc2hBY2Nlc3NUb2tlbkVycm9yXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc190b2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoX3Rva2VuID8/IHRva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXM6IERhdGUubm93KCkgKyB0b2tlbnMuZXhwaXJlc19pbiAqIDEwMDAsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRva2VuLFxuICAgICAgICAgIGVycm9yOiBcIlJlZnJlc2hBY2Nlc3NUb2tlbkVycm9yXCIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgaWYgKHRva2VuLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZnJlc2hBY2Nlc3NUb2tlbkVycm9yXCIpO1xuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmFjY2Vzc1Rva2VuID0gdG9rZW4uYWNjZXNzVG9rZW47XG4gICAgICBzZXNzaW9uLnVzZXIgPSB7XG4gICAgICAgIC4uLnNlc3Npb24udXNlcixcbiAgICAgICAgaWQ6IHRva2VuLnN1YiBhcyBzdHJpbmcsXG4gICAgICAgIGZpcnN0X25hbWU6IHRva2VuLmZpcnN0X25hbWUgPz8gJycsXG4gICAgICAgIGxhc3RfbmFtZTogdG9rZW4ubGFzdF9uYW1lID8/ICcnLFxuICAgICAgICB1c2VybmFtZTogdG9rZW4udXNlcm5hbWUgPz8gJycsXG4gICAgICAgIHJvbGU6IHRva2VuLnJvbGUgPz8gW10sXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICB9XG4gIH0sXG4gIHBhZ2VzOiB7XG4gICAgc2lnbkluOiAnL3NpZ25pbicsXG4gICAgZXJyb3I6ICcvc2lnbmluJyxcbiAgfSxcbiAgZGVidWc6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnLFxufTtcblxuY29uc3QgaGFuZGxlciA9IE5leHRBdXRoKGF1dGhPcHRpb25zKTtcbmV4cG9ydCB7IGhhbmRsZXIgYXMgR0VULCBoYW5kbGVyIGFzIFBPU1QgfTtcblxuIl0sIm5hbWVzIjpbIk5leHRBdXRoIiwiS2V5Y2xvYWtQcm92aWRlciIsImdldFJlcXVpcmVkRW52VmFyIiwibmFtZSIsInZhbHVlIiwicHJvY2VzcyIsImVudiIsIkVycm9yIiwiYXV0aE9wdGlvbnMiLCJwcm92aWRlcnMiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImlzc3VlciIsInByb2ZpbGUiLCJpZCIsInN1YiIsInByZWZlcnJlZF91c2VybmFtZSIsImVtYWlsIiwiZmlyc3RfbmFtZSIsImdpdmVuX25hbWUiLCJsYXN0X25hbWUiLCJmYW1pbHlfbmFtZSIsInVzZXJuYW1lIiwic3BsaXQiLCJyb2xlIiwiZ3JvdXBzIiwic2Vzc2lvbiIsInN0cmF0ZWd5IiwibWF4QWdlIiwiY2FsbGJhY2tzIiwiand0IiwidG9rZW4iLCJhY2NvdW50IiwiYWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiYWNjZXNzVG9rZW5FeHBpcmVzIiwiZXhwaXJlc19hdCIsIkRhdGUiLCJub3ciLCJyZXNwb25zZSIsImZldGNoIiwiS0VZQ0xPQUtfQkFTRV9VUkwiLCJLRVlDTE9BS19SRUFMTSIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiVVJMU2VhcmNoUGFyYW1zIiwiZ3JhbnRfdHlwZSIsImNsaWVudF9pZCIsImNsaWVudF9zZWNyZXQiLCJ0b2tlbnMiLCJqc29uIiwib2siLCJleHBpcmVzX2luIiwiZXJyb3IiLCJ1c2VyIiwicGFnZXMiLCJzaWduSW4iLCJkZWJ1ZyIsImhhbmRsZXIiLCJHRVQiLCJQT1NUIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./app/api/auth/[...nextauth]/route.ts\n");
/***/ }),
/***/ "(rsc)/./app/api/rocket-chat/messages/route.ts":
/*!***********************************************!*\
!*** ./app/api/rocket-chat/messages/route.ts ***!
\***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GET: () => (/* binding */ GET)\n/* harmony export */ });\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth */ \"(rsc)/./node_modules/next-auth/index.js\");\n/* harmony import */ var next_auth__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_auth__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/app/api/auth/[...nextauth]/route */ \"(rsc)/./app/api/auth/[...nextauth]/route.ts\");\n/* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/server */ \"(rsc)/./node_modules/next/dist/api/server.js\");\n\n\n\n// Helper function to get user token using admin credentials\nasync function getUserToken(baseUrl) {\n try {\n // Step 1: Use admin token to authenticate\n const adminHeaders = {\n \"X-Auth-Token\": process.env.ROCKET_CHAT_TOKEN,\n \"X-User-Id\": process.env.ROCKET_CHAT_USER_ID,\n \"Content-Type\": \"application/json\"\n };\n // Step 2: Create user token using admin credentials\n const createTokenResponse = await fetch(`${baseUrl}/api/v1/users.createToken`, {\n method: \"POST\",\n headers: adminHeaders\n });\n if (!createTokenResponse.ok) {\n console.error(\"Failed to create user token:\", createTokenResponse.status);\n return null;\n }\n const tokenData = await createTokenResponse.json();\n return {\n authToken: tokenData.data.authToken,\n userId: tokenData.data.userId\n };\n } catch (error) {\n console.error(\"Error getting user token:\", error);\n return null;\n }\n}\nasync function GET(request) {\n try {\n const session = await (0,next_auth__WEBPACK_IMPORTED_MODULE_0__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__.authOptions);\n if (!session?.user?.email) {\n console.error(\"No valid session or email found\");\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n const baseUrl = \"https://parole.slm-lab.net/channel/City\"?.split(\"/channel\")[0];\n if (!baseUrl) {\n console.error(\"Failed to get Rocket.Chat base URL\");\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Server configuration error\"\n }, {\n status: 500\n });\n }\n console.log(\"Using Rocket.Chat base URL:\", baseUrl);\n // Step 1: Use admin token to authenticate\n const adminHeaders = {\n \"X-Auth-Token\": process.env.ROCKET_CHAT_TOKEN,\n \"X-User-Id\": process.env.ROCKET_CHAT_USER_ID,\n \"Content-Type\": \"application/json\"\n };\n // Step 2: Get the current user's Rocket.Chat ID\n const username = session.user.email.split(\"@\")[0];\n if (!username) {\n console.error(\"No username found in session email\");\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n // Get all users to find the current user\n const usersResponse = await fetch(`${baseUrl}/api/v1/users.list`, {\n method: \"GET\",\n headers: adminHeaders\n });\n if (!usersResponse.ok) {\n console.error(\"Failed to get users list:\", usersResponse.status);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n const usersData = await usersResponse.json();\n console.log(\"Users list response:\", {\n success: usersData.success,\n count: usersData.count,\n usersCount: usersData.users?.length\n });\n // Find the current user in the list\n const currentUser = usersData.users.find((user)=>user.username === username || user.emails?.some((email)=>email.address === session.user.email));\n if (!currentUser) {\n console.error(\"User not found in users list\");\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n console.log(\"Found Rocket.Chat user:\", {\n username: currentUser.username,\n id: currentUser._id\n });\n // Step 3: Create a token for the current user\n const createTokenResponse = await fetch(`${baseUrl}/api/v1/users.createToken`, {\n method: \"POST\",\n headers: adminHeaders,\n body: JSON.stringify({\n userId: currentUser._id\n })\n });\n if (!createTokenResponse.ok) {\n console.error(\"Failed to create user token:\", createTokenResponse.status);\n const errorText = await createTokenResponse.text();\n console.error(\"Create token error details:\", errorText);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n const tokenData = await createTokenResponse.json();\n // Use the user's token for subsequent requests\n const userHeaders = {\n \"X-Auth-Token\": tokenData.data.authToken,\n \"X-User-Id\": currentUser._id,\n \"Content-Type\": \"application/json\"\n };\n // Step 4: Get user's subscriptions using user token\n const subscriptionsResponse = await fetch(`${baseUrl}/api/v1/subscriptions.get`, {\n method: \"GET\",\n headers: userHeaders\n });\n if (!subscriptionsResponse.ok) {\n console.error(\"Failed to get subscriptions:\", subscriptionsResponse.status);\n const errorText = await subscriptionsResponse.text();\n console.error(\"Subscriptions error details:\", errorText);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n const subscriptionsData = await subscriptionsResponse.json();\n if (!subscriptionsData.success || !Array.isArray(subscriptionsData.update)) {\n console.error(\"Invalid subscriptions response structure\");\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: []\n }, {\n status: 200\n });\n }\n // Filter subscriptions for the current user\n const userSubscriptions = subscriptionsData.update.filter((sub)=>{\n // Only include rooms with unread messages or alerts\n if (!(sub.unread > 0 || sub.alert)) {\n return false;\n }\n // Include all types of rooms the user is subscribed to\n return [\n \"d\",\n \"c\",\n \"p\"\n ].includes(sub.t);\n });\n console.log(\"Filtered user subscriptions:\", {\n userId: currentUser._id,\n username: currentUser.username,\n totalSubscriptions: userSubscriptions.length,\n subscriptionDetails: userSubscriptions.map((sub)=>({\n type: sub.t,\n name: sub.fname || sub.name,\n rid: sub.rid,\n alert: sub.alert,\n unread: sub.unread,\n userMentions: sub.userMentions\n }))\n });\n const messages = [];\n const processedRooms = new Set();\n const latestMessagePerRoom = {};\n // Step 5: Fetch messages using user token\n for (const subscription of userSubscriptions){\n try {\n // Determine the correct endpoint and parameters based on room type\n let endpoint;\n switch(subscription.t){\n case \"c\":\n endpoint = \"channels.messages\";\n break;\n case \"p\":\n endpoint = \"groups.messages\";\n break;\n case \"d\":\n endpoint = \"im.messages\";\n break;\n default:\n continue;\n }\n const queryParams = new URLSearchParams({\n roomId: subscription.rid,\n count: String(Math.max(subscription.unread, 5)) // Fetch at least the number of unread messages\n });\n const messagesResponse = await fetch(`${baseUrl}/api/v1/${endpoint}?${queryParams}`, {\n method: \"GET\",\n headers: userHeaders\n });\n if (!messagesResponse.ok) {\n console.error(`Failed to get messages for room ${subscription.name}:`, messagesResponse.status);\n continue;\n }\n const messageData = await messagesResponse.json();\n console.log(`Messages for room ${subscription.fname || subscription.name}:`, {\n success: messageData.success,\n count: messageData.count,\n hasMessages: messageData.messages?.length > 0\n });\n if (messageData.success && messageData.messages?.length > 0) {\n // Filter out system messages and join notifications for channels\n const validMessages = messageData.messages.filter((message)=>{\n // Skip messages sent by the current user\n if (message.u._id === currentUser._id) {\n return false;\n }\n // For channels, apply strict filtering\n if (subscription.t === \"c\") {\n if (!message.msg || // No message text\n message.t || // System message\n !message.u || // No user info\n message.msg.includes(\"has joined the channel\") || message.msg.includes(\"has left the channel\") || message.msg.includes(\"added\") || message.msg.includes(\"removed\")) {\n return false;\n }\n }\n return true;\n });\n // Only process the latest valid message from this room\n if (validMessages.length > 0) {\n // Get the latest message (they should already be sorted by timestamp)\n const latestMessage = validMessages[0];\n const messageUser = latestMessage.u || {};\n const username = messageUser.username || \"unknown\";\n // Skip if this is our own message (double-check)\n if (messageUser._id === currentUser._id) {\n continue;\n }\n // Get proper display names\n let roomDisplayName = subscription.fname || subscription.name;\n let userDisplayName = messageUser.name || username;\n // Handle call messages\n let messageText = latestMessage.msg || \"\";\n if (messageText.includes(\"started a call\")) {\n messageText = \"\\uD83D\\uDCDE Call received\";\n }\n // Format timestamp\n const timestamp = new Date(latestMessage.ts);\n const now = new Date();\n let formattedTime = \"\";\n if (isNaN(timestamp.getTime())) {\n formattedTime = \"Invalid Date\";\n } else if (timestamp.toDateString() === now.toDateString()) {\n formattedTime = timestamp.toLocaleTimeString(\"fr-FR\", {\n hour: \"2-digit\",\n minute: \"2-digit\"\n });\n } else {\n formattedTime = timestamp.toLocaleDateString(\"fr-FR\", {\n day: \"2-digit\",\n month: \"short\"\n });\n }\n // Create initials for the sender\n const initials = userDisplayName.split(\" \").map((n)=>n[0]).slice(0, 2).join(\"\").toUpperCase();\n const processedMessage = {\n id: latestMessage._id,\n text: messageText,\n timestamp: formattedTime,\n rawTimestamp: latestMessage.ts,\n roomName: roomDisplayName,\n roomType: subscription.t,\n sender: {\n _id: messageUser._id,\n username: username,\n name: userDisplayName,\n initials: initials,\n color: getAvatarColor(username)\n },\n isOwnMessage: messageUser._id === currentUser._id,\n room: {\n id: subscription.rid,\n type: subscription.t,\n name: roomDisplayName,\n isChannel: subscription.t === \"c\",\n isPrivateGroup: subscription.t === \"p\",\n isDirect: subscription.t === \"d\",\n link: `${baseUrl}/${subscription.t === \"d\" ? \"direct\" : subscription.t === \"p\" ? \"group\" : \"channel\"}/${subscription.name}`,\n unread: subscription.unread,\n alert: subscription.alert,\n userMentions: subscription.userMentions\n }\n };\n // Store this message if it's the latest for this room\n if (!latestMessagePerRoom[subscription.rid] || new Date(latestMessage.ts).getTime() > new Date(latestMessagePerRoom[subscription.rid].rawTimestamp).getTime()) {\n latestMessagePerRoom[subscription.rid] = processedMessage;\n }\n }\n }\n } catch (error) {\n console.error(`Error fetching messages for room ${subscription.name}:`, error);\n continue;\n }\n }\n // Convert the latest messages object to an array and sort by timestamp\n const sortedMessages = Object.values(latestMessagePerRoom).sort((a, b)=>{\n const dateA = new Date(a.rawTimestamp);\n const dateB = new Date(b.rawTimestamp);\n return dateB.getTime() - dateA.getTime();\n }).slice(0, 10);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: sortedMessages,\n total: Object.keys(latestMessagePerRoom).length,\n hasMore: Object.keys(latestMessagePerRoom).length > 10\n }, {\n status: 200\n });\n } catch (error) {\n console.error(\"Error in messages endpoint:\", error);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n messages: [],\n total: 0,\n hasMore: false\n }, {\n status: 200\n });\n }\n}\n// Helper function to generate consistent avatar colors\nfunction getAvatarColor(username) {\n const colors = [\n \"#FF7452\",\n \"#4CAF50\",\n \"#2196F3\",\n \"#9C27B0\",\n \"#FF9800\",\n \"#00BCD4\",\n \"#795548\",\n \"#607D8B\" // Blue Grey\n ];\n // Generate a consistent index based on username\n const index = username.split(\"\").reduce((acc, char)=>acc + char.charCodeAt(0), 0) % colors.length;\n return colors[index];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL3JvY2tldC1jaGF0L21lc3NhZ2VzL3JvdXRlLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTZDO0FBQ29CO0FBQ3RCO0FBRTNDLDREQUE0RDtBQUM1RCxlQUFlRyxhQUFhQyxPQUFlO0lBQ3pDLElBQUk7UUFDRiwwQ0FBMEM7UUFDMUMsTUFBTUMsZUFBZTtZQUNuQixnQkFBZ0JDLFFBQVFDLEdBQUcsQ0FBQ0MsaUJBQWlCO1lBQzdDLGFBQWFGLFFBQVFDLEdBQUcsQ0FBQ0UsbUJBQW1CO1lBQzVDLGdCQUFnQjtRQUNsQjtRQUVBLG9EQUFvRDtRQUNwRCxNQUFNQyxzQkFBc0IsTUFBTUMsTUFBTSxDQUFDLEVBQUVQLFFBQVEseUJBQXlCLENBQUMsRUFBRTtZQUM3RVEsUUFBUTtZQUNSQyxTQUFTUjtRQUNYO1FBRUEsSUFBSSxDQUFDSyxvQkFBb0JJLEVBQUUsRUFBRTtZQUMzQkMsUUFBUUMsS0FBSyxDQUFDLGdDQUFnQ04sb0JBQW9CTyxNQUFNO1lBQ3hFLE9BQU87UUFDVDtRQUVBLE1BQU1DLFlBQVksTUFBTVIsb0JBQW9CUyxJQUFJO1FBQ2hELE9BQU87WUFDTEMsV0FBV0YsVUFBVUcsSUFBSSxDQUFDRCxTQUFTO1lBQ25DRSxRQUFRSixVQUFVRyxJQUFJLENBQUNDLE1BQU07UUFDL0I7SUFDRixFQUFFLE9BQU9OLE9BQU87UUFDZEQsUUFBUUMsS0FBSyxDQUFDLDZCQUE2QkE7UUFDM0MsT0FBTztJQUNUO0FBQ0Y7QUFFTyxlQUFlTyxJQUFJQyxPQUFnQjtJQUN4QyxJQUFJO1FBQ0YsTUFBTUMsVUFBVSxNQUFNekIsMkRBQWdCQSxDQUFDQyxxRUFBV0E7UUFFbEQsSUFBSSxDQUFDd0IsU0FBU0MsTUFBTUMsT0FBTztZQUN6QlosUUFBUUMsS0FBSyxDQUFDO1lBQ2QsT0FBT2QscURBQVlBLENBQUNpQixJQUFJLENBQUM7Z0JBQUVTLFVBQVUsRUFBRTtZQUFDLEdBQUc7Z0JBQUVYLFFBQVE7WUFBSTtRQUMzRDtRQUVBLE1BQU1iLFVB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VUFBVyxZQUFZO0tBQ3hCO0lBRUQsZ0RBQWdEO0lBQ2hELE1BQU1DLFFBQVE1RyxTQUNYRixLQUFLLENBQUMsSUFDTitHLE1BQU0sQ0FBQyxDQUFDQyxLQUFLQyxPQUFTRCxNQUFNQyxLQUFLQyxVQUFVLENBQUMsSUFBSSxLQUFLTCxPQUFPcEcsTUFBTTtJQUVyRSxPQUFPb0csTUFBTSxDQUFDQyxNQUFNO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmVhaC8uL2FwcC9hcGkvcm9ja2V0LWNoYXQvbWVzc2FnZXMvcm91dGUudHM/NzU4MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRTZXJ2ZXJTZXNzaW9uIH0gZnJvbSBcIm5leHQtYXV0aFwiO1xuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiQC9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZVwiO1xuaW1wb3J0IHsgTmV4dFJlc3BvbnNlIH0gZnJvbSBcIm5leHQvc2VydmVyXCI7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdXNlciB0b2tlbiB1c2luZyBhZG1pbiBjcmVkZW50aWFsc1xuYXN5bmMgZnVuY3Rpb24gZ2V0VXNlclRva2VuKGJhc2VVcmw6IHN0cmluZykge1xuICB0cnkge1xuICAgIC8vIFN0ZXAgMTogVXNlIGFkbWluIHRva2VuIHRvIGF1dGhlbnRpY2F0ZVxuICAgIGNvbnN0IGFkbWluSGVhZGVycyA9IHtcbiAgICAgICdYLUF1dGgtVG9rZW4nOiBwcm9jZXNzLmVudi5ST0NLRVRfQ0hBVF9UT0tFTiEsXG4gICAgICAnWC1Vc2VyLUlkJzogcHJvY2Vzcy5lbnYuUk9DS0VUX0NIQVRfVVNFUl9JRCEsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfTtcblxuICAgIC8vIFN0ZXAgMjogQ3JlYXRlIHVzZXIgdG9rZW4gdXNpbmcgYWRtaW4gY3JlZGVudGlhbHNcbiAgICBjb25zdCBjcmVhdGVUb2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7YmFzZVVybH0vYXBpL3YxL3VzZXJzLmNyZWF0ZVRva2VuYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiBhZG1pbkhlYWRlcnNcbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlVG9rZW5SZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIHRva2VuOicsIGNyZWF0ZVRva2VuUmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuRGF0YSA9IGF3YWl0IGNyZWF0ZVRva2VuUmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhdXRoVG9rZW46IHRva2VuRGF0YS5kYXRhLmF1dGhUb2tlbixcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhLmRhdGEudXNlcklkXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIHVzZXIgdG9rZW46JywgZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBHRVQocmVxdWVzdDogUmVxdWVzdCkge1xuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBnZXRTZXJ2ZXJTZXNzaW9uKGF1dGhPcHRpb25zKTtcbiAgICBcbiAgICBpZiAoIXNlc3Npb24/LnVzZXI/LmVtYWlsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyB2YWxpZCBzZXNzaW9uIG9yIGVtYWlsIGZvdW5kJyk7XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBtZXNzYWdlczogW10gfSwgeyBzdGF0dXM6IDIwMCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfSUZSQU1FX1BBUk9MRV9VUkw/LnNwbGl0KCcvY2hhbm5lbCcpWzBdO1xuICAgIGlmICghYmFzZVVybCkge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBSb2NrZXQuQ2hhdCBiYXNlIFVSTCcpO1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgZXJyb3I6ICdTZXJ2ZXIgY29uZmlndXJhdGlvbiBlcnJvcicgfSwgeyBzdGF0dXM6IDUwMCB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVXNpbmcgUm9ja2V0LkNoYXQgYmFzZSBVUkw6JywgYmFzZVVybCk7XG5cbiAgICAvLyBTdGVwIDE6IFVzZSBhZG1pbiB0b2tlbiB0byBhdXRoZW50aWNhdGVcbiAgICBjb25zdCBhZG1pbkhlYWRlcnMgPSB7XG4gICAgICAnWC1BdXRoLVRva2VuJzogcHJvY2Vzcy5lbnYuUk9DS0VUX0NIQVRfVE9LRU4hLFxuICAgICAgJ1gtVXNlci1JZCc6IHByb2Nlc3MuZW52LlJPQ0tFVF9DSEFUX1VTRVJfSUQhLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH07XG5cbiAgICAvLyBTdGVwIDI6IEdldCB0aGUgY3VycmVudCB1c2VyJ3MgUm9ja2V0LkNoYXQgSURcbiAgICBjb25zdCB1c2VybmFtZSA9IHNlc3Npb24udXNlci5lbWFpbC5zcGxpdCgnQCcpWzBdO1xuICAgIGlmICghdXNlcm5hbWUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHVzZXJuYW1lIGZvdW5kIGluIHNlc3Npb24gZW1haWwnKTtcbiAgICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbih7IG1lc3NhZ2VzOiBbXSB9LCB7IHN0YXR1czogMjAwIH0pO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdXNlcnMgdG8gZmluZCB0aGUgY3VycmVudCB1c2VyXG4gICAgY29uc3QgdXNlcnNSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS92MS91c2Vycy5saXN0YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IGFkbWluSGVhZGVyc1xuICAgIH0pO1xuXG4gICAgaWYgKCF1c2Vyc1Jlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHVzZXJzIGxpc3Q6JywgdXNlcnNSZXNwb25zZS5zdGF0dXMpO1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZXM6IFtdIH0sIHsgc3RhdHVzOiAyMDAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcnNEYXRhID0gYXdhaXQgdXNlcnNSZXNwb25zZS5qc29uKCk7XG4gICAgY29uc29sZS5sb2coJ1VzZXJzIGxpc3QgcmVzcG9uc2U6Jywge1xuICAgICAgc3VjY2VzczogdXNlcnNEYXRhLnN1Y2Nlc3MsXG4gICAgICBjb3VudDogdXNlcnNEYXRhLmNvdW50LFxuICAgICAgdXNlcnNDb3VudDogdXNlcnNEYXRhLnVzZXJzPy5sZW5ndGhcbiAgICB9KTtcblxuICAgIC8vIEZpbmQgdGhlIGN1cnJlbnQgdXNlciBpbiB0aGUgbGlzdFxuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlcnNEYXRhLnVzZXJzLmZpbmQoKHVzZXI6IGFueSkgPT4gXG4gICAgICB1c2VyLnVzZXJuYW1lID09PSB1c2VybmFtZSB8fCB1c2VyLmVtYWlscz8uc29tZSgoZW1haWw6IGFueSkgPT4gZW1haWwuYWRkcmVzcyA9PT0gc2Vzc2lvbi51c2VyLmVtYWlsKVxuICAgICk7XG5cbiAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIG5vdCBmb3VuZCBpbiB1c2VycyBsaXN0Jyk7XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBtZXNzYWdlczogW10gfSwgeyBzdGF0dXM6IDIwMCB9KTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnRm91bmQgUm9ja2V0LkNoYXQgdXNlcjonLCB7XG4gICAgICB1c2VybmFtZTogY3VycmVudFVzZXIudXNlcm5hbWUsXG4gICAgICBpZDogY3VycmVudFVzZXIuX2lkXG4gICAgfSk7XG5cbiAgICAvLyBTdGVwIDM6IENyZWF0ZSBhIHRva2VuIGZvciB0aGUgY3VycmVudCB1c2VyXG4gICAgY29uc3QgY3JlYXRlVG9rZW5SZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS92MS91c2Vycy5jcmVhdGVUb2tlbmAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogYWRtaW5IZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB1c2VySWQ6IGN1cnJlbnRVc2VyLl9pZFxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlVG9rZW5SZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB1c2VyIHRva2VuOicsIGNyZWF0ZVRva2VuUmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IGNyZWF0ZVRva2VuUmVzcG9uc2UudGV4dCgpO1xuICAgICAgY29uc29sZS5lcnJvcignQ3JlYXRlIHRva2VuIGVycm9yIGRldGFpbHM6JywgZXJyb3JUZXh0KTtcbiAgICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbih7IG1lc3NhZ2VzOiBbXSB9LCB7IHN0YXR1czogMjAwIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRva2VuRGF0YSA9IGF3YWl0IGNyZWF0ZVRva2VuUmVzcG9uc2UuanNvbigpO1xuICAgIFxuICAgIC8vIFVzZSB0aGUgdXNlcidzIHRva2VuIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzXG4gICAgY29uc3QgdXNlckhlYWRlcnMgPSB7XG4gICAgICAnWC1BdXRoLVRva2VuJzogdG9rZW5EYXRhLmRhdGEuYXV0aFRva2VuLFxuICAgICAgJ1gtVXNlci1JZCc6IGN1cnJlbnRVc2VyLl9pZCxcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9O1xuXG4gICAgLy8gU3RlcCA0OiBHZXQgdXNlcidzIHN1YnNjcmlwdGlvbnMgdXNpbmcgdXNlciB0b2tlblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9L2FwaS92MS9zdWJzY3JpcHRpb25zLmdldGAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBoZWFkZXJzOiB1c2VySGVhZGVyc1xuICAgIH0pO1xuXG4gICAgaWYgKCFzdWJzY3JpcHRpb25zUmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgc3Vic2NyaXB0aW9uczonLCBzdWJzY3JpcHRpb25zUmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHN1YnNjcmlwdGlvbnNSZXNwb25zZS50ZXh0KCk7XG4gICAgICBjb25zb2xlLmVycm9yKCdTdWJzY3JpcHRpb25zIGVycm9yIGRldGFpbHM6JywgZXJyb3JUZXh0KTtcbiAgICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbih7IG1lc3NhZ2VzOiBbXSB9LCB7IHN0YXR1czogMjAwIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnNEYXRhID0gYXdhaXQgc3Vic2NyaXB0aW9uc1Jlc3BvbnNlLmpzb24oKTtcblxuICAgIGlmICghc3Vic2NyaXB0aW9uc0RhdGEuc3VjY2VzcyB8fCAhQXJyYXkuaXNBcnJheShzdWJzY3JpcHRpb25zRGF0YS51cGRhdGUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHN1YnNjcmlwdGlvbnMgcmVzcG9uc2Ugc3RydWN0dXJlJyk7XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oeyBtZXNzYWdlczogW10gfSwgeyBzdGF0dXM6IDIwMCB9KTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgc3Vic2NyaXB0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdXNlclxuICAgIGNvbnN0IHVzZXJTdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9uc0RhdGEudXBkYXRlLmZpbHRlcigoc3ViOiBhbnkpID0+IHtcbiAgICAgIC8vIE9ubHkgaW5jbHVkZSByb29tcyB3aXRoIHVucmVhZCBtZXNzYWdlcyBvciBhbGVydHNcbiAgICAgIGlmICghKHN1Yi51bnJlYWQgPiAwIHx8IHN1Yi5hbGVydCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSW5jbHVkZSBhbGwgdHlwZXMgb2Ygcm9vbXMgdGhlIHVzZXIgaXMgc3Vic2NyaWJlZCB0b1xuICAgICAgcmV0dXJuIFsnZCcsICdjJywgJ3AnXS5pbmNsdWRlcyhzdWIudCk7XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsdGVyZWQgdXNlciBzdWJzY3JpcHRpb25zOicsIHtcbiAgICAgIHVzZXJJZDogY3VycmVudFVzZXIuX2lkLFxuICAgICAgdXNlcm5hbWU6IGN1cnJlbnRVc2VyLnVzZXJuYW1lLFxuICAgICAgdG90YWxTdWJzY3JpcHRpb25zOiB1c2VyU3Vic2NyaXB0aW9ucy5sZW5ndGgsXG4gICAgICBzdWJzY3JpcHRpb25EZXRhaWxzOiB1c2VyU3Vic2NyaXB0aW9ucy5tYXAoKHN1YjogYW55KSA9PiAoe1xuICAgICAgICB0eXBlOiBzdWIudCxcbiAgICAgICAgbmFtZTogc3ViLmZuYW1lIHx8IHN1Yi5uYW1lLFxuICAgICAgICByaWQ6IHN1Yi5yaWQsXG4gICAgICAgIGFsZXJ0OiBzdWIuYWxlcnQsXG4gICAgICAgIHVucmVhZDogc3ViLnVucmVhZCxcbiAgICAgICAgdXNlck1lbnRpb25zOiBzdWIudXNlck1lbnRpb25zXG4gICAgICB9KSlcbiAgICB9KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHByb2Nlc3NlZFJvb21zID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IGxhdGVzdE1lc3NhZ2VQZXJSb29tOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgICAvLyBTdGVwIDU6IEZldGNoIG1lc3NhZ2VzIHVzaW5nIHVzZXIgdG9rZW5cbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB1c2VyU3Vic2NyaXB0aW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGVuZHBvaW50IGFuZCBwYXJhbWV0ZXJzIGJhc2VkIG9uIHJvb20gdHlwZVxuICAgICAgICBsZXQgZW5kcG9pbnQ7XG4gICAgICAgIHN3aXRjaCAoc3Vic2NyaXB0aW9uLnQpIHtcbiAgICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgICAgIGVuZHBvaW50ID0gJ2NoYW5uZWxzLm1lc3NhZ2VzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3AnOlxuICAgICAgICAgICAgZW5kcG9pbnQgPSAnZ3JvdXBzLm1lc3NhZ2VzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgZW5kcG9pbnQgPSAnaW0ubWVzc2FnZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICByb29tSWQ6IHN1YnNjcmlwdGlvbi5yaWQsXG4gICAgICAgICAgY291bnQ6IFN0cmluZyhNYXRoLm1heChzdWJzY3JpcHRpb24udW5yZWFkLCA1KSkgIC8vIEZldGNoIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgdW5yZWFkIG1lc3NhZ2VzXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgbWVzc2FnZXNSZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke2Jhc2VVcmx9L2FwaS92MS8ke2VuZHBvaW50fT8ke3F1ZXJ5UGFyYW1zfWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB1c2VySGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW1lc3NhZ2VzUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2V0IG1lc3NhZ2VzIGZvciByb29tICR7c3Vic2NyaXB0aW9uLm5hbWV9OmAsIG1lc3NhZ2VzUmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gYXdhaXQgbWVzc2FnZXNSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBNZXNzYWdlcyBmb3Igcm9vbSAke3N1YnNjcmlwdGlvbi5mbmFtZSB8fCBzdWJzY3JpcHRpb24ubmFtZX06YCwge1xuICAgICAgICAgIHN1Y2Nlc3M6IG1lc3NhZ2VEYXRhLnN1Y2Nlc3MsXG4gICAgICAgICAgY291bnQ6IG1lc3NhZ2VEYXRhLmNvdW50LFxuICAgICAgICAgIGhhc01lc3NhZ2VzOiBtZXNzYWdlRGF0YS5tZXNzYWdlcz8ubGVuZ3RoID4gMFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWVzc2FnZURhdGEuc3VjY2VzcyAmJiBtZXNzYWdlRGF0YS5tZXNzYWdlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZpbHRlciBvdXQgc3lzdGVtIG1lc3NhZ2VzIGFuZCBqb2luIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5uZWxzXG4gICAgICAgICAgY29uc3QgdmFsaWRNZXNzYWdlcyA9IG1lc3NhZ2VEYXRhLm1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBTa2lwIG1lc3NhZ2VzIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlclxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UudS5faWQgPT09IGN1cnJlbnRVc2VyLl9pZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvciBjaGFubmVscywgYXBwbHkgc3RyaWN0IGZpbHRlcmluZ1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbi50ID09PSAnYycpIHtcbiAgICAgICAgICAgICAgaWYgKCFtZXNzYWdlLm1zZyB8fCAvLyBObyBtZXNzYWdlIHRleHRcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UudCB8fCAvLyBTeXN0ZW0gbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgIW1lc3NhZ2UudSB8fCAvLyBObyB1c2VyIGluZm9cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubXNnLmluY2x1ZGVzKCdoYXMgam9pbmVkIHRoZSBjaGFubmVsJykgfHxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UubXNnLmluY2x1ZGVzKCdoYXMgbGVmdCB0aGUgY2hhbm5lbCcpIHx8XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlLm1zZy5pbmNsdWRlcygnYWRkZWQnKSB8fFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZS5tc2cuaW5jbHVkZXMoJ3JlbW92ZWQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgdGhlIGxhdGVzdCB2YWxpZCBtZXNzYWdlIGZyb20gdGhpcyByb29tXG4gICAgICAgICAgaWYgKHZhbGlkTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBsYXRlc3QgbWVzc2FnZSAodGhleSBzaG91bGQgYWxyZWFkeSBiZSBzb3J0ZWQgYnkgdGltZXN0YW1wKVxuICAgICAgICAgICAgY29uc3QgbGF0ZXN0TWVzc2FnZSA9IHZhbGlkTWVzc2FnZXNbMF07XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlVXNlciA9IGxhdGVzdE1lc3NhZ2UudSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lID0gbWVzc2FnZVVzZXIudXNlcm5hbWUgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTa2lwIGlmIHRoaXMgaXMgb3VyIG93biBtZXNzYWdlIChkb3VibGUtY2hlY2spXG4gICAgICAgICAgICBpZiAobWVzc2FnZVVzZXIuX2lkID09PSBjdXJyZW50VXNlci5faWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEdldCBwcm9wZXIgZGlzcGxheSBuYW1lc1xuICAgICAgICAgICAgbGV0IHJvb21EaXNwbGF5TmFtZSA9IHN1YnNjcmlwdGlvbi5mbmFtZSB8fCBzdWJzY3JpcHRpb24ubmFtZTtcbiAgICAgICAgICAgIGxldCB1c2VyRGlzcGxheU5hbWUgPSBtZXNzYWdlVXNlci5uYW1lIHx8IHVzZXJuYW1lO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBIYW5kbGUgY2FsbCBtZXNzYWdlc1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2VUZXh0ID0gbGF0ZXN0TWVzc2FnZS5tc2cgfHwgJyc7XG4gICAgICAgICAgICBpZiAobWVzc2FnZVRleHQuaW5jbHVkZXMoJ3N0YXJ0ZWQgYSBjYWxsJykpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSAn8J+TniBDYWxsIHJlY2VpdmVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9ybWF0IHRpbWVzdGFtcFxuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUobGF0ZXN0TWVzc2FnZS50cyk7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFRpbWUgPSAnJztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGlzTmFOKHRpbWVzdGFtcC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgIGZvcm1hdHRlZFRpbWUgPSAnSW52YWxpZCBEYXRlJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZXN0YW1wLnRvRGF0ZVN0cmluZygpID09PSBub3cudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgZm9ybWF0dGVkVGltZSA9IHRpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoJ2ZyLUZSJywgeyBcbiAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsIFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnIFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm1hdHRlZFRpbWUgPSB0aW1lc3RhbXAudG9Mb2NhbGVEYXRlU3RyaW5nKCdmci1GUicsIHtcbiAgICAgICAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBtb250aDogJ3Nob3J0J1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGluaXRpYWxzIGZvciB0aGUgc2VuZGVyXG4gICAgICAgICAgICBjb25zdCBpbml0aWFscyA9IHVzZXJEaXNwbGF5TmFtZVxuICAgICAgICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAgICAgICAubWFwKChuOiBzdHJpbmcpID0+IG5bMF0pXG4gICAgICAgICAgICAgIC5zbGljZSgwLCAyKVxuICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGlkOiBsYXRlc3RNZXNzYWdlLl9pZCxcbiAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZm9ybWF0dGVkVGltZSxcbiAgICAgICAgICAgICAgcmF3VGltZXN0YW1wOiBsYXRlc3RNZXNzYWdlLnRzLFxuICAgICAgICAgICAgICByb29tTmFtZTogcm9vbURpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICByb29tVHlwZTogc3Vic2NyaXB0aW9uLnQsXG4gICAgICAgICAgICAgIHNlbmRlcjoge1xuICAgICAgICAgICAgICAgIF9pZDogbWVzc2FnZVVzZXIuX2lkLFxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiB1c2VyRGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgICAgaW5pdGlhbHM6IGluaXRpYWxzLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBnZXRBdmF0YXJDb2xvcih1c2VybmFtZSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNPd25NZXNzYWdlOiBtZXNzYWdlVXNlci5faWQgPT09IGN1cnJlbnRVc2VyLl9pZCxcbiAgICAgICAgICAgICAgcm9vbToge1xuICAgICAgICAgICAgICAgIGlkOiBzdWJzY3JpcHRpb24ucmlkLFxuICAgICAgICAgICAgICAgIHR5cGU6IHN1YnNjcmlwdGlvbi50LFxuICAgICAgICAgICAgICAgIG5hbWU6IHJvb21EaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICBpc0NoYW5uZWw6IHN1YnNjcmlwdGlvbi50ID09PSAnYycsXG4gICAgICAgICAgICAgICAgaXNQcml2YXRlR3JvdXA6IHN1YnNjcmlwdGlvbi50ID09PSAncCcsXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Q6IHN1YnNjcmlwdGlvbi50ID09PSAnZCcsXG4gICAgICAgICAgICAgICAgbGluazogYCR7YmFzZVVybH0vJHtzdWJzY3JpcHRpb24udCA9PT0gJ2QnID8gJ2RpcmVjdCcgOiBzdWJzY3JpcHRpb24udCA9PT0gJ3AnID8gJ2dyb3VwJyA6ICdjaGFubmVsJ30vJHtzdWJzY3JpcHRpb24ubmFtZX1gLFxuICAgICAgICAgICAgICAgIHVucmVhZDogc3Vic2NyaXB0aW9uLnVucmVhZCxcbiAgICAgICAgICAgICAgICBhbGVydDogc3Vic2NyaXB0aW9uLmFsZXJ0LFxuICAgICAgICAgICAgICAgIHVzZXJNZW50aW9uczogc3Vic2NyaXB0aW9uLnVzZXJNZW50aW9uc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGlzIG1lc3NhZ2UgaWYgaXQncyB0aGUgbGF0ZXN0IGZvciB0aGlzIHJvb21cbiAgICAgICAgICAgIGlmICghbGF0ZXN0TWVzc2FnZVBlclJvb21bc3Vic2NyaXB0aW9uLnJpZF0gfHwgXG4gICAgICAgICAgICAgICAgbmV3IERhdGUobGF0ZXN0TWVzc2FnZS50cykuZ2V0VGltZSgpID4gbmV3IERhdGUobGF0ZXN0TWVzc2FnZVBlclJvb21bc3Vic2NyaXB0aW9uLnJpZF0ucmF3VGltZXN0YW1wKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgbGF0ZXN0TWVzc2FnZVBlclJvb21bc3Vic2NyaXB0aW9uLnJpZF0gPSBwcm9jZXNzZWRNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgbWVzc2FnZXMgZm9yIHJvb20gJHtzdWJzY3JpcHRpb24ubmFtZX06YCwgZXJyb3IpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHRoZSBsYXRlc3QgbWVzc2FnZXMgb2JqZWN0IHRvIGFuIGFycmF5IGFuZCBzb3J0IGJ5IHRpbWVzdGFtcFxuICAgIGNvbnN0IHNvcnRlZE1lc3NhZ2VzID0gT2JqZWN0LnZhbHVlcyhsYXRlc3RNZXNzYWdlUGVyUm9vbSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5yYXdUaW1lc3RhbXApO1xuICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIucmF3VGltZXN0YW1wKTtcbiAgICAgICAgcmV0dXJuIGRhdGVCLmdldFRpbWUoKSAtIGRhdGVBLmdldFRpbWUoKTtcbiAgICAgIH0pXG4gICAgICAuc2xpY2UoMCwgMTApO1xuXG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHtcbiAgICAgIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyxcbiAgICAgIHRvdGFsOiBPYmplY3Qua2V5cyhsYXRlc3RNZXNzYWdlUGVyUm9vbSkubGVuZ3RoLFxuICAgICAgaGFzTW9yZTogT2JqZWN0LmtleXMobGF0ZXN0TWVzc2FnZVBlclJvb20pLmxlbmd0aCA+IDEwXG4gICAgfSwgeyBzdGF0dXM6IDIwMCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBtZXNzYWdlcyBlbmRwb2ludDonLCBlcnJvcik7XG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgbWVzc2FnZXM6IFtdLCB0b3RhbDogMCwgaGFzTW9yZTogZmFsc2UgfSwgeyBzdGF0dXM6IDIwMCB9KTtcbiAgfVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY29uc2lzdGVudCBhdmF0YXIgY29sb3JzXG5mdW5jdGlvbiBnZXRBdmF0YXJDb2xvcih1c2VybmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29sb3JzID0gW1xuICAgICcjRkY3NDUyJywgLy8gQ29yYWxcbiAgICAnIzRDQUY1MCcsIC8vIEdyZWVuXG4gICAgJyMyMTk2RjMnLCAvLyBCbHVlXG4gICAgJyM5QzI3QjAnLCAvLyBQdXJwbGVcbiAgICAnI0ZGOTgwMCcsIC8vIE9yYW5nZVxuICAgICcjMDBCQ0Q0JywgLy8gQ3lhblxuICAgICcjNzk1NTQ4JywgLy8gQnJvd25cbiAgICAnIzYwN0Q4QicgIC8vIEJsdWUgR3JleVxuICBdO1xuICBcbiAgLy8gR2VuZXJhdGUgYSBjb25zaXN0ZW50IGluZGV4IGJhc2VkIG9uIHVzZXJuYW1lXG4gIGNvbnN0IGluZGV4ID0gdXNlcm5hbWVcbiAgICAuc3BsaXQoJycpXG4gICAgLnJlZHVjZSgoYWNjLCBjaGFyKSA9PiBhY2MgKyBjaGFyLmNoYXJDb2RlQXQoMCksIDApICUgY29sb3JzLmxlbmd0aDtcbiAgXG4gIHJldHVybiBjb2xvcnNbaW5kZXhdO1xufSAiXSwibmFtZXMiOlsiZ2V0U2VydmVyU2Vzc2lvbiIsImF1dGhPcHRpb25zIiwiTmV4dFJlc3BvbnNlIiwiZ2V0VXNlclRva2VuIiwiYmFzZVVybCIsImFkbWluSGVhZGVycyIsInByb2Nlc3MiLCJlbnYiLCJST0NLRVRfQ0hBVF9UT0tFTiIsIlJPQ0tFVF9DSEFUX1VTRVJfSUQiLCJjcmVhdGVUb2tlblJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwib2siLCJjb25zb2xlIiwiZXJyb3IiLCJzdGF0dXMiLCJ0b2tlbkRhdGEiLCJqc29uIiwiYXV0aFRva2VuIiwiZGF0YSIsInVzZXJJZCIsIkdFVCIsInJlcXVlc3QiLCJzZXNzaW9uIiwidXNlciIsImVtYWlsIiwibWVzc2FnZXMiLCJORVhUX1BVQkxJQ19JRlJBTUVfUEFST0xFX1VSTCIsInNwbGl0IiwibG9nIiwidXNlcm5hbWUiLCJ1c2Vyc1Jlc3BvbnNlIiwidXNlcnNEYXRhIiwic3VjY2VzcyIsImNvdW50IiwidXNlcnNDb3VudCIsInVzZXJzIiwibGVuZ3RoIiwiY3VycmVudFVzZXIiLCJmaW5kIiwiZW1haWxzIiwic29tZSIsImFkZHJlc3MiLCJpZCIsIl9pZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3JUZXh0IiwidGV4dCIsInVzZXJIZWFkZXJzIiwic3Vic2NyaXB0aW9uc1Jlc3BvbnNlIiwic3Vic2NyaXB0aW9uc0RhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJ1cGRhdGUiLCJ1c2VyU3Vic2NyaXB0aW9ucyIsImZpbHRlciIsInN1YiIsInVucmVhZCIsImFsZXJ0IiwiaW5jbHVkZXMiLCJ0IiwidG90YWxTdWJzY3JpcHRpb25zIiwic3Vic2NyaXB0aW9uRGV0YWlscyIsIm1hcCIsInR5cGUiLCJuYW1lIiwiZm5hbWUiLCJyaWQiLCJ1c2VyTWVudGlvbnMiLCJwcm9jZXNzZWRSb29tcyIsIlNldCIsImxhdGVzdE1lc3NhZ2VQZXJSb29tIiwic3Vic2NyaXB0aW9uIiwiZW5kcG9pbnQiLCJxdWVyeVBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInJvb21JZCIsIlN0cmluZyIsIk1hdGgiLCJtYXgiLCJtZXNzYWdlc1Jlc3BvbnNlIiwibWVzc2FnZURhdGEiLCJoYXNNZXNzYWdlcyIsInZhbGlkTWVzc2FnZXMiLCJtZXNzYWdlIiwidSIsIm1zZyIsImxhdGVzdE1lc3NhZ2UiLCJtZXNzYWdlVXNlciIsInJvb21EaXNwbGF5TmFtZSIsInVzZXJEaXNwbGF5TmFtZSIsIm1lc3NhZ2VUZXh0IiwidGltZXN0YW1wIiwiRGF0ZSIsInRzIiwibm93IiwiZm9ybWF0dGVkVGltZSIsImlzTmFOIiwiZ2V0VGltZSIsInRvRGF0ZVN0cmluZyIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJkYXkiLCJtb250aCIsImluaXRpYWxzIiwibiIsInNsaWNlIiwiam9pbiIsInRvVXBwZXJDYXNlIiwicHJvY2Vzc2VkTWVzc2FnZSIsInJhd1RpbWVzdGFtcCIsInJvb21OYW1lIiwicm9vbVR5cGUiLCJzZW5kZXIiLCJjb2xvciIsImdldEF2YXRhckNvbG9yIiwiaXNPd25NZXNzYWdlIiwicm9vbSIsImlzQ2hhbm5lbCIsImlzUHJpdmF0ZUdyb3VwIiwiaXNEaXJlY3QiLCJsaW5rIiwic29ydGVkTWVzc2FnZXMiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJkYXRlQSIsImRhdGVCIiwidG90YWwiLCJrZXlzIiwiaGFzTW9yZSIsImNvbG9ycyIsImluZGV4IiwicmVkdWNlIiwiYWNjIiwiY2hhciIsImNoYXJDb2RlQXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./app/api/rocket-chat/messages/route.ts\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/jose","vendor-chunks/next-auth","vendor-chunks/openid-client","vendor-chunks/@babel","vendor-chunks/oauth","vendor-chunks/preact","vendor-chunks/uuid","vendor-chunks/yallist","vendor-chunks/preact-render-to-string","vendor-chunks/cookie","vendor-chunks/oidc-token-hash","vendor-chunks/@panva"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Frocket-chat%2Fmessages%2Froute&page=%2Fapi%2Frocket-chat%2Fmessages%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Frocket-chat%2Fmessages%2Froute.ts&appDir=%2Fhome%2Falma%2FNeahFront7%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2Fhome%2Falma%2FNeahFront7&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
module.exports = __webpack_exports__;
})();