NeahFront7/.next/server/app/api/users/route.js
2025-04-10 18:14:28 +02:00

206 lines
60 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/users/route";
exports.ids = ["app/api/users/route"];
exports.modules = {
/***/ "../../client/components/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");
/***/ }),
/***/ "../../client/components/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");
/***/ }),
/***/ "../../client/components/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%2Fusers%2Froute&page=%2Fapi%2Fusers%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fusers%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&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%2Fusers%2Froute&page=%2Fapi%2Fusers%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fusers%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***!
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ patchFetch: () => (/* binding */ patchFetch),\n/* harmony export */ requestAsyncStorage: () => (/* binding */ requestAsyncStorage),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ serverHooks: () => (/* binding */ serverHooks),\n/* harmony export */ staticGenerationAsyncStorage: () => (/* binding */ staticGenerationAsyncStorage)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-route/module.compiled */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-route/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_route_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/server/lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n/* harmony import */ var next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_lib_patch_fetch__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _Users_alma_Downloads_neah_front_app_api_users_route_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./app/api/users/route.ts */ \"(rsc)/./app/api/users/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/users/route\",\n pathname: \"/api/users\",\n filename: \"route\",\n bundlePath: \"app/api/users/route\"\n },\n resolvedPagePath: \"/Users/alma/Downloads/neah/front/app/api/users/route.ts\",\n nextConfigOutput,\n userland: _Users_alma_Downloads_neah_front_app_api_users_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/users/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/bmFtZT1hcHAlMkZhcGklMkZ1c2VycyUyRnJvdXRlJnBhZ2U9JTJGYXBpJTJGdXNlcnMlMkZyb3V0ZSZhcHBQYXRocz0mcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcGklMkZ1c2VycyUyRnJvdXRlLnRzJmFwcERpcj0lMkZVc2VycyUyRmFsbWElMkZEb3dubG9hZHMlMkZuZWFoJTJGZnJvbnQlMkZhcHAmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZyb290RGlyPSUyRlVzZXJzJTJGYWxtYSUyRkRvd25sb2FkcyUyRm5lYWglMkZmcm9udCZpc0Rldj10cnVlJnRzY29uZmlnUGF0aD10c2NvbmZpZy5qc29uJmJhc2VQYXRoPSZhc3NldFByZWZpeD0mbmV4dENvbmZpZ091dHB1dD0mcHJlZmVycmVkUmVnaW9uPSZtaWRkbGV3YXJlQ29uZmlnPWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXNHO0FBQ3ZDO0FBQ2M7QUFDTztBQUNwRjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZ0hBQW1CO0FBQzNDO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsWUFBWTtBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxRQUFRLGlFQUFpRTtBQUN6RTtBQUNBO0FBQ0EsV0FBVyw0RUFBVztBQUN0QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ3VIOztBQUV2SCIsInNvdXJjZXMiOlsid2VicGFjazovL25lYWgvP2UyZWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwUm91dGVSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1yb3V0ZS9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBwYXRjaEZldGNoIGFzIF9wYXRjaEZldGNoIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL3BhdGNoLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB1c2VybGFuZCBmcm9tIFwiL1VzZXJzL2FsbWEvRG93bmxvYWRzL25lYWgvZnJvbnQvYXBwL2FwaS91c2Vycy9yb3V0ZS50c1wiO1xuLy8gV2UgaW5qZWN0IHRoZSBuZXh0Q29uZmlnT3V0cHV0IGhlcmUgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4gdGhlIHJvdXRlXG4vLyBtb2R1bGUuXG5jb25zdCBuZXh0Q29uZmlnT3V0cHV0ID0gXCJcIlxuY29uc3Qgcm91dGVNb2R1bGUgPSBuZXcgQXBwUm91dGVSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1JPVVRFLFxuICAgICAgICBwYWdlOiBcIi9hcGkvdXNlcnMvcm91dGVcIixcbiAgICAgICAgcGF0aG5hbWU6IFwiL2FwaS91c2Vyc1wiLFxuICAgICAgICBmaWxlbmFtZTogXCJyb3V0ZVwiLFxuICAgICAgICBidW5kbGVQYXRoOiBcImFwcC9hcGkvdXNlcnMvcm91dGVcIlxuICAgIH0sXG4gICAgcmVzb2x2ZWRQYWdlUGF0aDogXCIvVXNlcnMvYWxtYS9Eb3dubG9hZHMvbmVhaC9mcm9udC9hcHAvYXBpL3VzZXJzL3JvdXRlLnRzXCIsXG4gICAgbmV4dENvbmZpZ091dHB1dCxcbiAgICB1c2VybGFuZFxufSk7XG4vLyBQdWxsIG91dCB0aGUgZXhwb3J0cyB0aGF0IHdlIG5lZWQgdG8gZXhwb3NlIGZyb20gdGhlIG1vZHVsZS4gVGhpcyBzaG91bGRcbi8vIGJlIGVsaW1pbmF0ZWQgd2hlbiB3ZSd2ZSBtb3ZlZCB0aGUgb3RoZXIgcm91dGVzIHRvIHRoZSBuZXcgZm9ybWF0LiBUaGVzZVxuLy8gYXJlIHVzZWQgdG8gaG9vayBpbnRvIHRoZSByb3V0ZS5cbmNvbnN0IHsgcmVxdWVzdEFzeW5jU3RvcmFnZSwgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSwgc2VydmVySG9va3MgfSA9IHJvdXRlTW9kdWxlO1xuY29uc3Qgb3JpZ2luYWxQYXRobmFtZSA9IFwiL2FwaS91c2Vycy9yb3V0ZVwiO1xuZnVuY3Rpb24gcGF0Y2hGZXRjaCgpIHtcbiAgICByZXR1cm4gX3BhdGNoRmV0Y2goe1xuICAgICAgICBzZXJ2ZXJIb29rcyxcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZVxuICAgIH0pO1xufVxuZXhwb3J0IHsgcm91dGVNb2R1bGUsIHJlcXVlc3RBc3luY1N0b3JhZ2UsIHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UsIHNlcnZlckhvb2tzLCBvcmlnaW5hbFBhdGhuYW1lLCBwYXRjaEZldGNoLCAgfTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fusers%2Froute&page=%2Fapi%2Fusers%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fusers%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&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\nconst authOptions = {\n providers: [\n (0,next_auth_providers_keycloak__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n clientId: process.env.KEYCLOAK_CLIENT_ID,\n clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,\n issuer: process.env.KEYCLOAK_ISSUER\n })\n ],\n callbacks: {\n async jwt ({ token, account, profile }) {\n if (account) {\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 return token;\n }\n // Return previous token if not expired\n if (Date.now() < token.accessTokenExpires) {\n return token;\n }\n try {\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: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET,\n refresh_token: token.refreshToken\n })\n });\n const tokens = await response.json();\n if (!response.ok) throw tokens;\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 console.error(\"Error refreshing token:\", 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 events: {\n async signOut ({ token }) {\n if (token.refreshToken) {\n try {\n await fetch(`${process.env.KEYCLOAK_BASE_URL}/realms/${process.env.KEYCLOAK_REALM}/protocol/openid-connect/logout`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: new URLSearchParams({\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET,\n refresh_token: token.refreshToken\n })\n });\n } catch (error) {\n console.error(\"Error during logout:\", error);\n }\n }\n }\n }\n};\nconst handler = next_auth__WEBPACK_IMPORTED_MODULE_0___default()(authOptions);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL2F1dGgvWy4uLm5leHRhdXRoXS9yb3V0ZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBc0Q7QUFDTTtBQUVyRCxNQUFNRSxjQUErQjtJQUMxQ0MsV0FBVztRQUNURix3RUFBZ0JBLENBQUM7WUFDZkcsVUFBVUMsUUFBUUMsR0FBRyxDQUFDQyxrQkFBa0I7WUFDeENDLGNBQWNILFFBQVFDLEdBQUcsQ0FBQ0csc0JBQXNCO1lBQ2hEQyxRQUFRTCxRQUFRQyxHQUFHLENBQUNLLGVBQWU7UUFDckM7S0FDRDtJQUNEQyxXQUFXO1FBQ1QsTUFBTUMsS0FBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO1lBQ25DLElBQUlELFNBQVM7Z0JBQ1hELE1BQU1HLFdBQVcsR0FBR0YsUUFBUUcsWUFBWTtnQkFDeENKLE1BQU1LLFlBQVksR0FBR0osUUFBUUssYUFBYTtnQkFDMUNOLE1BQU1PLGtCQUFrQixHQUFHTixRQUFRTyxVQUFVLEdBQUk7Z0JBQ2pEUixNQUFNUyxJQUFJLEdBQUdQLFNBQVNRLFVBQVUsRUFBRTtnQkFDbEMsT0FBT1Y7WUFDVDtZQUVBLHVDQUF1QztZQUN2QyxJQUFJVyxLQUFLQyxHQUFHLEtBQU1aLE1BQU1PLGtCQUFrQixFQUFhO2dCQUNyRCxPQUFPUDtZQUNUO1lBRUEsSUFBSTtnQkFDRixNQUFNYSxXQUFXLE1BQU1DLE1BQ3JCLENBQUMsRUFBRXZCLFFBQVFDLEdBQUcsQ0FBQ3VCLGlCQUFpQixDQUFDLFFBQVEsRUFBRXhCLFFBQVFDLEdBQUcsQ0FBQ3dCLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNyRztvQkFDRUMsUUFBUTtvQkFDUkMsU0FBUzt3QkFDUCxnQkFBZ0I7b0JBQ2xCO29CQUNBQyxNQUFNLElBQUlDLGdCQUFnQjt3QkFDeEJDLFlBQVk7d0JBQ1pDLFdBQVcvQixRQUFRQyxHQUFHLENBQUNDLGtCQUFrQjt3QkFDekM4QixlQUFlaEMsUUFBUUMsR0FBRyxDQUFDRyxzQkFBc0I7d0JBQ2pEVyxlQUFlTixNQUFNSyxZQUFZO29CQUNuQztnQkFDRjtnQkFHRixNQUFNbUIsU0FBUyxNQUFNWCxTQUFTWSxJQUFJO2dCQUVsQyxJQUFJLENBQUNaLFNBQVNhLEVBQUUsRUFBRSxNQUFNRjtnQkFFeEIsT0FBTztvQkFDTCxHQUFHeEIsS0FBSztvQkFDUkcsYUFBYXFCLE9BQU9wQixZQUFZO29CQUNoQ0MsY0FBY21CLE9BQU9sQixhQUFhLElBQUlOLE1BQU1LLFlBQVk7b0JBQ3hERSxvQkFBb0JJLEtBQUtDLEdBQUcsS0FBS1ksT0FBT0csVUFBVSxHQUFHO2dCQUN2RDtZQUNGLEVBQUUsT0FBT0MsT0FBTztnQkFDZEMsUUFBUUQsS0FBSyxDQUFDLDJCQUEyQkE7Z0JBQ3pDLE9BQU87b0JBQUUsR0FBRzVCLEtBQUs7b0JBQUU0QixPQUFPO2dCQUEwQjtZQUN0RDtRQUNGO1FBRUEsTUFBTUUsU0FBUSxFQUFFQSxPQUFPLEVBQUU5QixLQUFLLEVBQUU7WUFDOUIsSUFBSUEsTUFBTTRCLEtBQUssRUFBRTtnQkFDZixNQUFNLElBQUlHLE1BQU07WUFDbEI7WUFFQUQsUUFBUTNCLFdBQVcsR0FBR0gsTUFBTUcsV0FBVztZQUN2QzJCLFFBQVFFLElBQUksR0FBRztnQkFDYixHQUFHRixRQUFRRSxJQUFJO2dCQUNmQyxJQUFJakMsTUFBTWtDLEdBQUc7Z0JBQ2JDLFlBQVluQyxNQUFNbUMsVUFBVTtnQkFDNUJDLFdBQVdwQyxNQUFNb0MsU0FBUztnQkFDMUJDLFVBQVVyQyxNQUFNcUMsUUFBUTtnQkFDeEI1QixNQUFNVCxNQUFNUyxJQUFJLElBQUksRUFBRTtZQUN4QjtZQUNBLE9BQU9xQjtRQUNUO0lBQ0Y7SUFDQVEsUUFBUTtRQUNOLE1BQU1DLFNBQVEsRUFBRXZDLEtBQUssRUFBRTtZQUNyQixJQUFJQSxNQUFNSyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUk7b0JBQ0YsTUFBTVMsTUFDSixDQUFDLEVBQUV2QixRQUFRQyxHQUFHLENBQUN1QixpQkFBaUIsQ0FBQyxRQUFRLEVBQUV4QixRQUFRQyxHQUFHLENBQUN3QixjQUFjLENBQUMsK0JBQStCLENBQUMsRUFDdEc7d0JBQ0VDLFFBQVE7d0JBQ1JDLFNBQVM7NEJBQ1AsZ0JBQWdCO3dCQUNsQjt3QkFDQUMsTUFBTSxJQUFJQyxnQkFBZ0I7NEJBQ3hCRSxXQUFXL0IsUUFBUUMsR0FBRyxDQUFDQyxrQkFBa0I7NEJBQ3pDOEIsZUFBZWhDLFFBQVFDLEdBQUcsQ0FBQ0csc0JBQXNCOzRCQUNqRFcsZUFBZU4sTUFBTUssWUFBWTt3QkFDbkM7b0JBQ0Y7Z0JBRUosRUFBRSxPQUFPdUIsT0FBTztvQkFDZEMsUUFBUUQsS0FBSyxDQUFDLHdCQUF3QkE7Z0JBQ3hDO1lBQ0Y7UUFDRjtJQUNGO0FBQ0YsRUFBRTtBQUVGLE1BQU1ZLFVBQVV0RCxnREFBUUEsQ0FBQ0U7QUFDa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZWFoLy4vYXBwL2FwaS9hdXRoL1suLi5uZXh0YXV0aF0vcm91dGUudHM/YzhhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTmV4dEF1dGgsIHsgTmV4dEF1dGhPcHRpb25zIH0gZnJvbSBcIm5leHQtYXV0aFwiO1xuaW1wb3J0IEtleWNsb2FrUHJvdmlkZXIgZnJvbSBcIm5leHQtYXV0aC9wcm92aWRlcnMva2V5Y2xvYWtcIjtcblxuZXhwb3J0IGNvbnN0IGF1dGhPcHRpb25zOiBOZXh0QXV0aE9wdGlvbnMgPSB7XG4gIHByb3ZpZGVyczogW1xuICAgIEtleWNsb2FrUHJvdmlkZXIoe1xuICAgICAgY2xpZW50SWQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9JRCEsXG4gICAgICBjbGllbnRTZWNyZXQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9TRUNSRVQhLFxuICAgICAgaXNzdWVyOiBwcm9jZXNzLmVudi5LRVlDTE9BS19JU1NVRVIhLFxuICAgIH0pLFxuICBdLFxuICBjYWxsYmFja3M6IHtcbiAgICBhc3luYyBqd3QoeyB0b2tlbiwgYWNjb3VudCwgcHJvZmlsZSB9KSB7XG4gICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbiA9IGFjY291bnQuYWNjZXNzX3Rva2VuO1xuICAgICAgICB0b2tlbi5yZWZyZXNoVG9rZW4gPSBhY2NvdW50LnJlZnJlc2hfdG9rZW47XG4gICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuRXhwaXJlcyA9IGFjY291bnQuZXhwaXJlc19hdCEgKiAxMDAwO1xuICAgICAgICB0b2tlbi5yb2xlID0gcHJvZmlsZT8uZ3JvdXBzIHx8IFtdO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG5cbiAgICAgIC8vIFJldHVybiBwcmV2aW91cyB0b2tlbiBpZiBub3QgZXhwaXJlZFxuICAgICAgaWYgKERhdGUubm93KCkgPCAodG9rZW4uYWNjZXNzVG9rZW5FeHBpcmVzIGFzIG51bWJlcikpIHtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICAgIGdyYW50X3R5cGU6IFwicmVmcmVzaF90b2tlblwiLFxuICAgICAgICAgICAgICBjbGllbnRfaWQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9JRCEsXG4gICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9TRUNSRVQhLFxuICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gYXMgc3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyB0b2tlbnM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc190b2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoX3Rva2VuID8/IHRva2VuLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZXM6IERhdGUubm93KCkgKyB0b2tlbnMuZXhwaXJlc19pbiAqIDEwMDAsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVmcmVzaGluZyB0b2tlbjpcIiwgZXJyb3IpO1xuICAgICAgICByZXR1cm4geyAuLi50b2tlbiwgZXJyb3I6IFwiUmVmcmVzaEFjY2Vzc1Rva2VuRXJyb3JcIiB9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgaWYgKHRva2VuLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJlZnJlc2hBY2Nlc3NUb2tlbkVycm9yXCIpO1xuICAgICAgfVxuXG4gICAgICBzZXNzaW9uLmFjY2Vzc1Rva2VuID0gdG9rZW4uYWNjZXNzVG9rZW4gYXMgc3RyaW5nO1xuICAgICAgc2Vzc2lvbi51c2VyID0ge1xuICAgICAgICAuLi5zZXNzaW9uLnVzZXIsXG4gICAgICAgIGlkOiB0b2tlbi5zdWIsXG4gICAgICAgIGZpcnN0X25hbWU6IHRva2VuLmZpcnN0X25hbWUsXG4gICAgICAgIGxhc3RfbmFtZTogdG9rZW4ubGFzdF9uYW1lLFxuICAgICAgICB1c2VybmFtZTogdG9rZW4udXNlcm5hbWUsXG4gICAgICAgIHJvbGU6IHRva2VuLnJvbGUgfHwgW10sXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgfSxcbiAgfSxcbiAgZXZlbnRzOiB7XG4gICAgYXN5bmMgc2lnbk91dCh7IHRva2VuIH0pIHtcbiAgICAgIGlmICh0b2tlbi5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmZXRjaChcbiAgICAgICAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvbG9nb3V0YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNsaWVudF9pZDogcHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQ0xJRU5UX0lEISxcbiAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfU0VDUkVUISxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbi5yZWZyZXNoVG9rZW4gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkdXJpbmcgbG9nb3V0OlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcblxuY29uc3QgaGFuZGxlciA9IE5leHRBdXRoKGF1dGhPcHRpb25zKTtcbmV4cG9ydCB7IGhhbmRsZXIgYXMgR0VULCBoYW5kbGVyIGFzIFBPU1QgfTtcbiJdLCJuYW1lcyI6WyJOZXh0QXV0aCIsIktleWNsb2FrUHJvdmlkZXIiLCJhdXRoT3B0aW9ucyIsInByb3ZpZGVycyIsImNsaWVudElkIiwicHJvY2VzcyIsImVudiIsIktFWUNMT0FLX0NMSUVOVF9JRCIsImNsaWVudFNlY3JldCIsIktFWUNMT0FLX0NMSUVOVF9TRUNSRVQiLCJpc3N1ZXIiLCJLRVlDTE9BS19JU1NVRVIiLCJjYWxsYmFja3MiLCJqd3QiLCJ0b2tlbiIsImFjY291bnQiLCJwcm9maWxlIiwiYWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJyZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiYWNjZXNzVG9rZW5FeHBpcmVzIiwiZXhwaXJlc19hdCIsInJvbGUiLCJncm91cHMiLCJEYXRlIiwibm93IiwicmVzcG9uc2UiLCJmZXRjaCIsIktFWUNMT0FLX0JBU0VfVVJMIiwiS0VZQ0xPQUtfUkVBTE0iLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIlVSTFNlYXJjaFBhcmFtcyIsImdyYW50X3R5cGUiLCJjbGllbnRfaWQiLCJjbGllbnRfc2VjcmV0IiwidG9rZW5zIiwianNvbiIsIm9rIiwiZXhwaXJlc19pbiIsImVycm9yIiwiY29uc29sZSIsInNlc3Npb24iLCJFcnJvciIsInVzZXIiLCJpZCIsInN1YiIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJ1c2VybmFtZSIsImV2ZW50cyIsInNpZ25PdXQiLCJoYW5kbGVyIiwiR0VUIiwiUE9TVCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./app/api/auth/[...nextauth]/route.ts\n");
/***/ }),
/***/ "(rsc)/./app/api/users/route.ts":
/*!********************************!*\
!*** ./app/api/users/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 */ POST: () => (/* binding */ POST)\n/* harmony export */ });\n/* harmony import */ var next_auth_next__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next-auth/next */ \"(rsc)/./node_modules/next-auth/next/index.js\");\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\nasync function GET() {\n const session = await (0,next_auth_next__WEBPACK_IMPORTED_MODULE_0__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__.authOptions);\n if (!session) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Non autoris\\xe9\"\n }, {\n status: 401\n });\n }\n console.log(\"Session:\", {\n accessToken: session.accessToken?.substring(0, 20) + \"...\",\n user: session.user\n });\n try {\n // Get client credentials token\n const tokenResponse = 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: \"client_credentials\",\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET\n })\n });\n const tokenData = await tokenResponse.json();\n console.log(\"Token response:\", {\n ok: tokenResponse.ok,\n status: tokenResponse.status,\n data: tokenData.access_token ? \"Token received\" : tokenData\n });\n if (!tokenResponse.ok) {\n console.error(\"Failed to get token:\", tokenData);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json([\n getCurrentUser(session)\n ]);\n }\n // Get users list with brief=false to get full user details\n const usersResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users?briefRepresentation=false`, {\n headers: {\n Authorization: `Bearer ${tokenData.access_token}`,\n \"Content-Type\": \"application/json\"\n }\n });\n if (!usersResponse.ok) {\n console.error(\"Failed to fetch users:\", await usersResponse.text());\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json([\n getCurrentUser(session)\n ]);\n }\n const users = await usersResponse.json();\n console.log(\"Raw users data:\", users.map((u)=>({\n id: u.id,\n username: u.username,\n realm: u.realm,\n serviceAccountClientId: u.serviceAccountClientId\n })));\n // Filter out service accounts and users from other realms\n const filteredUsers = users.filter((user)=>!user.serviceAccountClientId && // Remove service accounts\n (!user.realm || user.realm === process.env.KEYCLOAK_REALM // Only users from our realm\n ));\n console.log(\"Filtered users count:\", filteredUsers.length);\n // Fetch groups for each user\n const usersWithGroups = await Promise.all(filteredUsers.map(async (user)=>{\n try {\n const groupsResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${user.id}/groups`, {\n headers: {\n Authorization: `Bearer ${tokenData.access_token}`,\n \"Content-Type\": \"application/json\"\n }\n });\n let groups = [];\n if (groupsResponse.ok) {\n const groupsData = await groupsResponse.json();\n groups = groupsData.map((group)=>group.name);\n console.log(`Groups for user ${user.username}:`, groups);\n }\n return {\n id: user.id,\n username: user.username,\n firstName: user.firstName || \"\",\n lastName: user.lastName || \"\",\n email: user.email,\n createdTimestamp: user.createdTimestamp,\n roles: groups\n };\n } catch (error) {\n console.error(`Error fetching groups for user ${user.id}:`, error);\n return {\n id: user.id,\n username: user.username,\n firstName: user.firstName || \"\",\n lastName: user.lastName || \"\",\n email: user.email,\n createdTimestamp: user.createdTimestamp,\n roles: []\n };\n }\n }));\n console.log(\"Final users data:\", usersWithGroups.map((u)=>({\n username: u.username,\n roles: u.roles\n })));\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json(usersWithGroups);\n } catch (error) {\n console.error(\"Error:\", error);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json([\n getCurrentUser(session)\n ]);\n }\n}\n// Helper function to get current user data\nfunction getCurrentUser(session) {\n return {\n id: session.user.id,\n username: session.user.username,\n firstName: session.user.first_name,\n lastName: session.user.last_name,\n email: session.user.email,\n createdTimestamp: Date.now(),\n roles: session.user.role || []\n };\n}\nasync function POST(req) {\n const session = await (0,next_auth_next__WEBPACK_IMPORTED_MODULE_0__.getServerSession)(_app_api_auth_nextauth_route__WEBPACK_IMPORTED_MODULE_1__.authOptions);\n if (!session) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Non autoris\\xe9\"\n }, {\n status: 401\n });\n }\n try {\n const data = await req.json();\n console.log(\"Creating user:\", data);\n // First get an admin token using client credentials\n const tokenResponse = 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: \"client_credentials\",\n client_id: process.env.KEYCLOAK_CLIENT_ID,\n client_secret: process.env.KEYCLOAK_CLIENT_SECRET\n })\n });\n const tokenData = await tokenResponse.json();\n if (!tokenResponse.ok) {\n console.error(\"Failed to get admin token:\", tokenData);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Erreur d'authentification\"\n }, {\n status: 401\n });\n }\n // Format user data for Keycloak\n const keycloakUser = {\n username: data.username,\n enabled: true,\n emailVerified: true,\n firstName: data.firstName,\n lastName: data.lastName,\n email: data.email,\n groups: [\n data.realmRoles\n ]\n };\n // Create user in Keycloak using admin token\n const createResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${tokenData.access_token}`,\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(keycloakUser)\n });\n console.log(\"Keycloak create response:\", {\n status: createResponse.status,\n ok: createResponse.ok\n });\n if (!createResponse.ok) {\n const errorData = await createResponse.json();\n console.log(\"Keycloak error:\", errorData);\n if (errorData.errorMessage?.includes(\"User exists with same username\")) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Un utilisateur existe d\\xe9j\\xe0 avec ce nom d'utilisateur\"\n }, {\n status: 400\n });\n } else if (errorData.errorMessage?.includes(\"User exists with same email\")) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Un utilisateur existe d\\xe9j\\xe0 avec cet email\"\n }, {\n status: 400\n });\n }\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Erreur cr\\xe9ation utilisateur\",\n details: errorData\n }, {\n status: 400\n });\n }\n // Get the created user\n const userResponse = await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users?username=${data.username}`, {\n headers: {\n Authorization: `Bearer ${tokenData.access_token}`\n }\n });\n const users = await userResponse.json();\n const user = users[0];\n if (!user) {\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Utilisateur cr\\xe9\\xe9 mais impossible de le r\\xe9cup\\xe9rer\"\n }, {\n status: 500\n });\n }\n // Add user to group\n await fetch(`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${user.id}/groups/${data.realmRoles}`, {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${tokenData.access_token}`\n }\n });\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n success: true,\n user: {\n ...user,\n roles: [\n data.realmRoles\n ]\n }\n });\n } catch (error) {\n console.error(\"Error creating user:\", error);\n return next_server__WEBPACK_IMPORTED_MODULE_2__.NextResponse.json({\n error: \"Erreur serveur\",\n details: error\n }, {\n status: 500\n });\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9hcHAvYXBpL3VzZXJzL3JvdXRlLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWtEO0FBQ2U7QUFDdEI7QUFFcEMsZUFBZUc7SUFDcEIsTUFBTUMsVUFBVSxNQUFNSixnRUFBZ0JBLENBQUNDLHFFQUFXQTtJQUVsRCxJQUFJLENBQUNHLFNBQVM7UUFDWixPQUFPRixxREFBWUEsQ0FBQ0csSUFBSSxDQUFDO1lBQUVDLE9BQU87UUFBZSxHQUFHO1lBQUVDLFFBQVE7UUFBSTtJQUNwRTtJQUVBQyxRQUFRQyxHQUFHLENBQUMsWUFBWTtRQUN0QkMsYUFBYU4sUUFBUU0sV0FBVyxFQUFFQyxVQUFVLEdBQUcsTUFBTTtRQUNyREMsTUFBTVIsUUFBUVEsSUFBSTtJQUNwQjtJQUVBLElBQUk7UUFDRiwrQkFBK0I7UUFDL0IsTUFBTUMsZ0JBQWdCLE1BQU1DLE1BQzFCLENBQUMsRUFBRUMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUVGLFFBQVFDLEdBQUcsQ0FBQ0UsY0FBYyxDQUFDLDhCQUE4QixDQUFDLEVBQ3JHO1lBQ0VDLFFBQVE7WUFDUkMsU0FBUztnQkFDUCxnQkFBZ0I7WUFDbEI7WUFDQUMsTUFBTSxJQUFJQyxnQkFBZ0I7Z0JBQ3hCQyxZQUFZO2dCQUNaQyxXQUFXVCxRQUFRQyxHQUFHLENBQUNTLGtCQUFrQjtnQkFDekNDLGVBQWVYLFFBQVFDLEdBQUcsQ0FBQ1csc0JBQXNCO1lBQ25EO1FBQ0Y7UUFHRixNQUFNQyxZQUFZLE1BQU1mLGNBQWNSLElBQUk7UUFDMUNHLFFBQVFDLEdBQUcsQ0FBQyxtQkFBbUI7WUFDN0JvQixJQUFJaEIsY0FBY2dCLEVBQUU7WUFDcEJ0QixRQUFRTSxjQUFjTixNQUFNO1lBQzVCdUIsTUFBTUYsVUFBVUcsWUFBWSxHQUFHLG1CQUFtQkg7UUFDcEQ7UUFFQSxJQUFJLENBQUNmLGNBQWNnQixFQUFFLEVBQUU7WUFDckJyQixRQUFRRixLQUFLLENBQUMsd0JBQXdCc0I7WUFDdEMsT0FBTzFCLHFEQUFZQSxDQUFDRyxJQUFJLENBQUM7Z0JBQUMyQixlQUFlNUI7YUFBUztRQUNwRDtRQUVBLDJEQUEyRDtRQUMzRCxNQUFNNkIsZ0JBQWdCLE1BQU1uQixNQUMxQixDQUFDLEVBQUVDLFFBQVFDLEdBQUcsQ0FBQ0MsaUJBQWlCLENBQUMsY0FBYyxFQUFFRixRQUFRQyxHQUFHLENBQUNFLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUM3RztZQUNFRSxTQUFTO2dCQUNQYyxlQUFlLENBQUMsT0FBTyxFQUFFTixVQUFVRyxZQUFZLENBQUMsQ0FBQztnQkFDakQsZ0JBQWdCO1lBQ2xCO1FBQ0Y7UUFHRixJQUFJLENBQUNFLGNBQWNKLEVBQUUsRUFBRTtZQUNyQnJCLFFBQVFGLEtBQUssQ0FBQywwQkFBMEIsTUFBTTJCLGNBQWNFLElBQUk7WUFDaEUsT0FBT2pDLHFEQUFZQSxDQUFDRyxJQUFJLENBQUM7Z0JBQUMyQixlQUFlNUI7YUFBUztRQUNwRDtRQUVBLE1BQU1nQyxRQUFRLE1BQU1ILGNBQWM1QixJQUFJO1FBQ3RDRyxRQUFRQyxHQUFHLENBQUMsbUJBQW1CMkIsTUFBTUMsR0FBRyxDQUFDLENBQUNDLElBQVk7Z0JBQ3BEQyxJQUFJRCxFQUFFQyxFQUFFO2dCQUNSQyxVQUFVRixFQUFFRSxRQUFRO2dCQUNwQkMsT0FBT0gsRUFBRUcsS0FBSztnQkFDZEMsd0JBQXdCSixFQUFFSSxzQkFBc0I7WUFDbEQ7UUFFQSwwREFBMEQ7UUFDMUQsTUFBTUMsZ0JBQWdCUCxNQUFNUSxNQUFNLENBQUMsQ0FBQ2hDLE9BQ2xDLENBQUNBLEtBQUs4QixzQkFBc0IsSUFBSSwwQkFBMEI7WUFDekQsRUFBQzlCLEtBQUs2QixLQUFLLElBQUk3QixLQUFLNkIsS0FBSyxLQUFLMUIsUUFBUUMsR0FBRyxDQUFDRSxjQUFjLENBQUUsNEJBQTRCO1lBQS9CO1FBRzFEVixRQUFRQyxHQUFHLENBQUMseUJBQXlCa0MsY0FBY0UsTUFBTTtRQUV6RCw2QkFBNkI7UUFDN0IsTUFBTUMsa0JBQWtCLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ0wsY0FBY04sR0FBRyxDQUFDLE9BQU96QjtZQUNqRSxJQUFJO2dCQUNGLE1BQU1xQyxpQkFBaUIsTUFBTW5DLE1BQzNCLENBQUMsRUFBRUMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUVGLFFBQVFDLEdBQUcsQ0FBQ0UsY0FBYyxDQUFDLE9BQU8sRUFBRU4sS0FBSzJCLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFDckc7b0JBQ0VuQixTQUFTO3dCQUNQYyxlQUFlLENBQUMsT0FBTyxFQUFFTixVQUFVRyxZQUFZLENBQUMsQ0FBQzt3QkFDakQsZ0JBQWdCO29CQUNsQjtnQkFDRjtnQkFHRixJQUFJbUIsU0FBUyxFQUFFO2dCQUNmLElBQUlELGVBQWVwQixFQUFFLEVBQUU7b0JBQ3JCLE1BQU1zQixhQUFhLE1BQU1GLGVBQWU1QyxJQUFJO29CQUM1QzZDLFNBQVNDLFdBQVdkLEdBQUcsQ0FBQyxDQUFDZSxRQUFlQSxNQUFNQyxJQUFJO29CQUNsRDdDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFRyxLQUFLNEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFVTtnQkFDbkQ7Z0JBRUEsT0FBTztvQkFDTFgsSUFBSTNCLEtBQUsyQixFQUFFO29CQUNYQyxVQUFVNUIsS0FBSzRCLFFBQVE7b0JBQ3ZCYyxXQUFXMUMsS0FBSzBDLFNBQVMsSUFBSTtvQkFDN0JDLFVBQVUzQyxLQUFLMkMsUUFBUSxJQUFJO29CQUMzQkMsT0FBTzVDLEtBQUs0QyxLQUFLO29CQUNqQkMsa0JBQWtCN0MsS0FBSzZDLGdCQUFnQjtvQkFDdkNDLE9BQU9SO2dCQUNUO1lBQ0YsRUFBRSxPQUFPNUMsT0FBTztnQkFDZEUsUUFBUUYsS0FBSyxDQUFDLENBQUMsK0JBQStCLEVBQUVNLEtBQUsyQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVqQztnQkFDNUQsT0FBTztvQkFDTGlDLElBQUkzQixLQUFLMkIsRUFBRTtvQkFDWEMsVUFBVTVCLEtBQUs0QixRQUFRO29CQUN2QmMsV0FBVzFDLEtBQUswQyxTQUFTLElBQUk7b0JBQzdCQyxVQUFVM0MsS0FBSzJDLFFBQVEsSUFBSTtvQkFDM0JDLE9BQU81QyxLQUFLNEMsS0FBSztvQkFDakJDLGtCQUFrQjdDLEtBQUs2QyxnQkFBZ0I7b0JBQ3ZDQyxPQUFPLEVBQUU7Z0JBQ1g7WUFDRjtRQUNGO1FBRUFsRCxRQUFRQyxHQUFHLENBQUMscUJBQXFCcUMsZ0JBQWdCVCxHQUFHLENBQUNDLENBQUFBLElBQU07Z0JBQ3pERSxVQUFVRixFQUFFRSxRQUFRO2dCQUNwQmtCLE9BQU9wQixFQUFFb0IsS0FBSztZQUNoQjtRQUVBLE9BQU94RCxxREFBWUEsQ0FBQ0csSUFBSSxDQUFDeUM7SUFFM0IsRUFBRSxPQUFPeEMsT0FBTztRQUNkRSxRQUFRRixLQUFLLENBQUMsVUFBVUE7UUFDeEIsT0FBT0oscURBQVlBLENBQUNHLElBQUksQ0FBQztZQUFDMkIsZUFBZTVCO1NBQVM7SUFDcEQ7QUFDRjtBQUVBLDJDQUEyQztBQUMzQyxTQUFTNEIsZUFBZTVCLE9BQVk7SUFDbEMsT0FBTztRQUNMbUMsSUFBSW5DLFFBQVFRLElBQUksQ0FBQzJCLEVBQUU7UUFDbkJDLFVBQVVwQyxRQUFRUSxJQUFJLENBQUM0QixRQUFRO1FBQy9CYyxXQUFXbEQsUUFBUVEsSUFBSSxDQUFDK0MsVUFBVTtRQUNsQ0osVUFBVW5ELFFBQVFRLElBQUksQ0FBQ2dELFNBQVM7UUFDaENKLE9BQU9wRCxRQUFRUSxJQUFJLENBQUM0QyxLQUFLO1FBQ3pCQyxrQkFBa0JJLEtBQUtDLEdBQUc7UUFDMUJKLE9BQU90RCxRQUFRUSxJQUFJLENBQUNtRCxJQUFJLElBQUksRUFBRTtJQUNoQztBQUNGO0FBRU8sZUFBZUMsS0FBS0MsR0FBWTtJQUNyQyxNQUFNN0QsVUFBVSxNQUFNSixnRUFBZ0JBLENBQUNDLHFFQUFXQTtJQUVsRCxJQUFJLENBQUNHLFNBQVM7UUFDWixPQUFPRixxREFBWUEsQ0FBQ0csSUFBSSxDQUFDO1lBQUVDLE9BQU87UUFBZSxHQUFHO1lBQUVDLFFBQVE7UUFBSTtJQUNwRTtJQUVBLElBQUk7UUFDRixNQUFNdUIsT0FBTyxNQUFNbUMsSUFBSTVELElBQUk7UUFDM0JHLFFBQVFDLEdBQUcsQ0FBQyxrQkFBa0JxQjtRQUU5QixvREFBb0Q7UUFDcEQsTUFBTWpCLGdCQUFnQixNQUFNQyxNQUMxQixDQUFDLEVBQUVDLFFBQVFDLEdBQUcsQ0FBQ0MsaUJBQWlCLENBQUMsUUFBUSxFQUFFRixRQUFRQyxHQUFHLENBQUNFLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNyRztZQUNFQyxRQUFRO1lBQ1JDLFNBQVM7Z0JBQ1AsZ0JBQWdCO1lBQ2xCO1lBQ0FDLE1BQU0sSUFBSUMsZ0JBQWdCO2dCQUN4QkMsWUFBWTtnQkFDWkMsV0FBV1QsUUFBUUMsR0FBRyxDQUFDUyxrQkFBa0I7Z0JBQ3pDQyxlQUFlWCxRQUFRQyxHQUFHLENBQUNXLHNCQUFzQjtZQUNuRDtRQUNGO1FBR0YsTUFBTUMsWUFBWSxNQUFNZixjQUFjUixJQUFJO1FBRTFDLElBQUksQ0FBQ1EsY0FBY2dCLEVBQUUsRUFBRTtZQUNyQnJCLFFBQVFGLEtBQUssQ0FBQyw4QkFBOEJzQjtZQUM1QyxPQUFPMUIscURBQVlBLENBQUNHLElBQUksQ0FDdEI7Z0JBQUVDLE9BQU87WUFBNEIsR0FDckM7Z0JBQUVDLFFBQVE7WUFBSTtRQUVsQjtRQUVBLGdDQUFnQztRQUNoQyxNQUFNMkQsZUFBZTtZQUNuQjFCLFVBQVVWLEtBQUtVLFFBQVE7WUFDdkIyQixTQUFTO1lBQ1RDLGVBQWU7WUFDZmQsV0FBV3hCLEtBQUt3QixTQUFTO1lBQ3pCQyxVQUFVekIsS0FBS3lCLFFBQVE7WUFDdkJDLE9BQU8xQixLQUFLMEIsS0FBSztZQUNqQk4sUUFBUTtnQkFBQ3BCLEtBQUt1QyxVQUFVO2FBQUM7UUFDM0I7UUFFQSw0Q0FBNEM7UUFDNUMsTUFBTUMsaUJBQWlCLE1BQU14RCxNQUMzQixDQUFDLEVBQUVDLFFBQVFDLEdBQUcsQ0FBQ0MsaUJBQWlCLENBQUMsY0FBYyxFQUFFRixRQUFRQyxHQUFHLENBQUNFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFDbkY7WUFDRUMsUUFBUTtZQUNSQyxTQUFTO2dCQUNQYyxlQUFlLENBQUMsT0FBTyxFQUFFTixVQUFVRyxZQUFZLENBQUMsQ0FBQztnQkFDakQsZ0JBQWdCO1lBQ2xCO1lBQ0FWLE1BQU1rRCxLQUFLQyxTQUFTLENBQUNOO1FBQ3ZCO1FBR0YxRCxRQUFRQyxHQUFHLENBQUMsNkJBQTZCO1lBQ3ZDRixRQUFRK0QsZUFBZS9ELE1BQU07WUFDN0JzQixJQUFJeUMsZUFBZXpDLEVBQUU7UUFDdkI7UUFFQSxJQUFJLENBQUN5QyxlQUFlekMsRUFBRSxFQUFFO1lBQ3RCLE1BQU00QyxZQUFZLE1BQU1ILGVBQWVqRSxJQUFJO1lBQzNDRyxRQUFRQyxHQUFHLENBQUMsbUJBQW1CZ0U7WUFFL0IsSUFBSUEsVUFBVUMsWUFBWSxFQUFFQyxTQUFTLG1DQUFtQztnQkFDdEUsT0FBT3pFLHFEQUFZQSxDQUFDRyxJQUFJLENBQ3RCO29CQUFFQyxPQUFPO2dCQUF1RCxHQUNoRTtvQkFBRUMsUUFBUTtnQkFBSTtZQUVsQixPQUFPLElBQUlrRSxVQUFVQyxZQUFZLEVBQUVDLFNBQVMsZ0NBQWdDO2dCQUMxRSxPQUFPekUscURBQVlBLENBQUNHLElBQUksQ0FDdEI7b0JBQUVDLE9BQU87Z0JBQTRDLEdBQ3JEO29CQUFFQyxRQUFRO2dCQUFJO1lBRWxCO1lBQ0EsT0FBT0wscURBQVlBLENBQUNHLElBQUksQ0FDdEI7Z0JBQUVDLE9BQU87Z0JBQStCc0UsU0FBU0g7WUFBVSxHQUMzRDtnQkFBRWxFLFFBQVE7WUFBSTtRQUVsQjtRQUVBLHVCQUF1QjtRQUN2QixNQUFNc0UsZUFBZSxNQUFNL0QsTUFDekIsQ0FBQyxFQUFFQyxRQUFRQyxHQUFHLENBQUNDLGlCQUFpQixDQUFDLGNBQWMsRUFBRUYsUUFBUUMsR0FBRyxDQUFDRSxjQUFjLENBQUMsZ0JBQWdCLEVBQUVZLEtBQUtVLFFBQVEsQ0FBQyxDQUFDLEVBQzdHO1lBQ0VwQixTQUFTO2dCQUNQYyxlQUFlLENBQUMsT0FBTyxFQUFFTixVQUFVRyxZQUFZLENBQUMsQ0FBQztZQUNuRDtRQUNGO1FBR0YsTUFBTUssUUFBUSxNQUFNeUMsYUFBYXhFLElBQUk7UUFDckMsTUFBTU8sT0FBT3dCLEtBQUssQ0FBQyxFQUFFO1FBRXJCLElBQUksQ0FBQ3hCLE1BQU07WUFDVCxPQUFPVixxREFBWUEsQ0FBQ0csSUFBSSxDQUN0QjtnQkFBRUMsT0FBTztZQUFtRCxHQUM1RDtnQkFBRUMsUUFBUTtZQUFJO1FBRWxCO1FBRUEsb0JBQW9CO1FBQ3BCLE1BQU1PLE1BQ0osQ0FBQyxFQUFFQyxRQUFRQyxHQUFHLENBQUNDLGlCQUFpQixDQUFDLGNBQWMsRUFBRUYsUUFBUUMsR0FBRyxDQUFDRSxjQUFjLENBQUMsT0FBTyxFQUFFTixLQUFLMkIsRUFBRSxDQUFDLFFBQVEsRUFBRVQsS0FBS3VDLFVBQVUsQ0FBQyxDQUFDLEVBQ3hIO1lBQ0VsRCxRQUFRO1lBQ1JDLFNBQVM7Z0JBQ1BjLGVBQWUsQ0FBQyxPQUFPLEVBQUVOLFVBQVVHLFlBQVksQ0FBQyxDQUFDO1lBQ25EO1FBQ0Y7UUFHRixPQUFPN0IscURBQVlBLENBQUNHLElBQUksQ0FBQztZQUN2QnlFLFNBQVM7WUFDVGxFLE1BQU07Z0JBQ0osR0FBR0EsSUFBSTtnQkFDUDhDLE9BQU87b0JBQUM1QixLQUFLdUMsVUFBVTtpQkFBQztZQUMxQjtRQUNGO0lBRUYsRUFBRSxPQUFPL0QsT0FBTztRQUNkRSxRQUFRRixLQUFLLENBQUMsd0JBQXdCQTtRQUN0QyxPQUFPSixxREFBWUEsQ0FBQ0csSUFBSSxDQUN0QjtZQUFFQyxPQUFPO1lBQWtCc0UsU0FBU3RFO1FBQU0sR0FDMUM7WUFBRUMsUUFBUTtRQUFJO0lBRWxCO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZWFoLy4vYXBwL2FwaS91c2Vycy9yb3V0ZS50cz83ZmIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNlcnZlclNlc3Npb24gfSBmcm9tIFwibmV4dC1hdXRoL25leHRcIjtcbmltcG9ydCB7IGF1dGhPcHRpb25zIH0gZnJvbSBcIkAvYXBwL2FwaS9hdXRoL1suLi5uZXh0YXV0aF0vcm91dGVcIjtcbmltcG9ydCB7IE5leHRSZXNwb25zZSB9IGZyb20gXCJuZXh0L3NlcnZlclwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gR0VUKCkge1xuICBjb25zdCBzZXNzaW9uID0gYXdhaXQgZ2V0U2VydmVyU2Vzc2lvbihhdXRoT3B0aW9ucyk7XG5cbiAgaWYgKCFzZXNzaW9uKSB7XG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHsgZXJyb3I6IFwiTm9uIGF1dG9yaXPDqVwiIH0sIHsgc3RhdHVzOiA0MDEgfSk7XG4gIH1cblxuICBjb25zb2xlLmxvZyhcIlNlc3Npb246XCIsIHtcbiAgICBhY2Nlc3NUb2tlbjogc2Vzc2lvbi5hY2Nlc3NUb2tlbj8uc3Vic3RyaW5nKDAsIDIwKSArIFwiLi4uXCIsXG4gICAgdXNlcjogc2Vzc2lvbi51c2VyLFxuICB9KTtcblxuICB0cnkge1xuICAgIC8vIEdldCBjbGllbnQgY3JlZGVudGlhbHMgdG9rZW5cbiAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgJHtwcm9jZXNzLmVudi5LRVlDTE9BS19CQVNFX1VSTH0vcmVhbG1zLyR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfUkVBTE19L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L3Rva2VuYCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGdyYW50X3R5cGU6ICdjbGllbnRfY3JlZGVudGlhbHMnLFxuICAgICAgICAgIGNsaWVudF9pZDogcHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQ0xJRU5UX0lEISxcbiAgICAgICAgICBjbGllbnRfc2VjcmV0OiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfU0VDUkVUISxcbiAgICAgICAgfSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRva2VuRGF0YSA9IGF3YWl0IHRva2VuUmVzcG9uc2UuanNvbigpO1xuICAgIGNvbnNvbGUubG9nKFwiVG9rZW4gcmVzcG9uc2U6XCIsIHtcbiAgICAgIG9rOiB0b2tlblJlc3BvbnNlLm9rLFxuICAgICAgc3RhdHVzOiB0b2tlblJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGRhdGE6IHRva2VuRGF0YS5hY2Nlc3NfdG9rZW4gPyBcIlRva2VuIHJlY2VpdmVkXCIgOiB0b2tlbkRhdGEsXG4gICAgfSk7XG5cbiAgICBpZiAoIXRva2VuUmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHRva2VuOlwiLCB0b2tlbkRhdGEpO1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFtnZXRDdXJyZW50VXNlcihzZXNzaW9uKV0pO1xuICAgIH1cblxuICAgIC8vIEdldCB1c2VycyBsaXN0IHdpdGggYnJpZWY9ZmFsc2UgdG8gZ2V0IGZ1bGwgdXNlciBkZXRhaWxzXG4gICAgY29uc3QgdXNlcnNSZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgYCR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfQkFTRV9VUkx9L2FkbWluL3JlYWxtcy8ke3Byb2Nlc3MuZW52LktFWUNMT0FLX1JFQUxNfS91c2Vycz9icmllZlJlcHJlc2VudGF0aW9uPWZhbHNlYCxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbkRhdGEuYWNjZXNzX3Rva2VufWAsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCF1c2Vyc1Jlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIHVzZXJzOlwiLCBhd2FpdCB1c2Vyc1Jlc3BvbnNlLnRleHQoKSk7XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oW2dldEN1cnJlbnRVc2VyKHNlc3Npb24pXSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcnMgPSBhd2FpdCB1c2Vyc1Jlc3BvbnNlLmpzb24oKTtcbiAgICBjb25zb2xlLmxvZyhcIlJhdyB1c2VycyBkYXRhOlwiLCB1c2Vycy5tYXAoKHU6IGFueSkgPT4gKHtcbiAgICAgIGlkOiB1LmlkLFxuICAgICAgdXNlcm5hbWU6IHUudXNlcm5hbWUsXG4gICAgICByZWFsbTogdS5yZWFsbSxcbiAgICAgIHNlcnZpY2VBY2NvdW50Q2xpZW50SWQ6IHUuc2VydmljZUFjY291bnRDbGllbnRJZCxcbiAgICB9KSkpO1xuXG4gICAgLy8gRmlsdGVyIG91dCBzZXJ2aWNlIGFjY291bnRzIGFuZCB1c2VycyBmcm9tIG90aGVyIHJlYWxtc1xuICAgIGNvbnN0IGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gXG4gICAgICAhdXNlci5zZXJ2aWNlQWNjb3VudENsaWVudElkICYmIC8vIFJlbW92ZSBzZXJ2aWNlIGFjY291bnRzXG4gICAgICAoIXVzZXIucmVhbG0gfHwgdXNlci5yZWFsbSA9PT0gcHJvY2Vzcy5lbnYuS0VZQ0xPQUtfUkVBTE0pIC8vIE9ubHkgdXNlcnMgZnJvbSBvdXIgcmVhbG1cbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coXCJGaWx0ZXJlZCB1c2VycyBjb3VudDpcIiwgZmlsdGVyZWRVc2Vycy5sZW5ndGgpO1xuXG4gICAgLy8gRmV0Y2ggZ3JvdXBzIGZvciBlYWNoIHVzZXJcbiAgICBjb25zdCB1c2Vyc1dpdGhHcm91cHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWx0ZXJlZFVzZXJzLm1hcChhc3luYyAodXNlcjogYW55KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBncm91cHNSZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9hZG1pbi9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vdXNlcnMvJHt1c2VyLmlkfS9ncm91cHNgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VuRGF0YS5hY2Nlc3NfdG9rZW59YCxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBncm91cHMgPSBbXTtcbiAgICAgICAgaWYgKGdyb3Vwc1Jlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBzRGF0YSA9IGF3YWl0IGdyb3Vwc1Jlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICBncm91cHMgPSBncm91cHNEYXRhLm1hcCgoZ3JvdXA6IGFueSkgPT4gZ3JvdXAubmFtZSk7XG4gICAgICAgICAgY29uc29sZS5sb2coYEdyb3VwcyBmb3IgdXNlciAke3VzZXIudXNlcm5hbWV9OmAsIGdyb3Vwcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLnVzZXJuYW1lLFxuICAgICAgICAgIGZpcnN0TmFtZTogdXNlci5maXJzdE5hbWUgfHwgJycsXG4gICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWUgfHwgJycsXG4gICAgICAgICAgZW1haWw6IHVzZXIuZW1haWwsXG4gICAgICAgICAgY3JlYXRlZFRpbWVzdGFtcDogdXNlci5jcmVhdGVkVGltZXN0YW1wLFxuICAgICAgICAgIHJvbGVzOiBncm91cHMsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBmZXRjaGluZyBncm91cHMgZm9yIHVzZXIgJHt1c2VyLmlkfTpgLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUsXG4gICAgICAgICAgZmlyc3ROYW1lOiB1c2VyLmZpcnN0TmFtZSB8fCAnJyxcbiAgICAgICAgICBsYXN0TmFtZTogdXNlci5sYXN0TmFtZSB8fCAnJyxcbiAgICAgICAgICBlbWFpbDogdXNlci5lbWFpbCxcbiAgICAgICAgICBjcmVhdGVkVGltZXN0YW1wOiB1c2VyLmNyZWF0ZWRUaW1lc3RhbXAsXG4gICAgICAgICAgcm9sZXM6IFtdLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGNvbnNvbGUubG9nKFwiRmluYWwgdXNlcnMgZGF0YTpcIiwgdXNlcnNXaXRoR3JvdXBzLm1hcCh1ID0+ICh7XG4gICAgICB1c2VybmFtZTogdS51c2VybmFtZSxcbiAgICAgIHJvbGVzOiB1LnJvbGVzLFxuICAgIH0pKSk7XG5cbiAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24odXNlcnNXaXRoR3JvdXBzKTtcblxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbihbZ2V0Q3VycmVudFVzZXIoc2Vzc2lvbildKTtcbiAgfVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGN1cnJlbnQgdXNlciBkYXRhXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcihzZXNzaW9uOiBhbnkpIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogc2Vzc2lvbi51c2VyLmlkLFxuICAgIHVzZXJuYW1lOiBzZXNzaW9uLnVzZXIudXNlcm5hbWUsXG4gICAgZmlyc3ROYW1lOiBzZXNzaW9uLnVzZXIuZmlyc3RfbmFtZSxcbiAgICBsYXN0TmFtZTogc2Vzc2lvbi51c2VyLmxhc3RfbmFtZSxcbiAgICBlbWFpbDogc2Vzc2lvbi51c2VyLmVtYWlsLFxuICAgIGNyZWF0ZWRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgcm9sZXM6IHNlc3Npb24udXNlci5yb2xlIHx8IFtdLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gUE9TVChyZXE6IFJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGdldFNlcnZlclNlc3Npb24oYXV0aE9wdGlvbnMpO1xuXG4gIGlmICghc2Vzc2lvbikge1xuICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbih7IGVycm9yOiBcIk5vbiBhdXRvcmlzw6lcIiB9LCB7IHN0YXR1czogNDAxIH0pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxLmpzb24oKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIHVzZXI6XCIsIGRhdGEpO1xuXG4gICAgLy8gRmlyc3QgZ2V0IGFuIGFkbWluIHRva2VuIHVzaW5nIGNsaWVudCBjcmVkZW50aWFsc1xuICAgIGNvbnN0IHRva2VuUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgZ3JhbnRfdHlwZTogJ2NsaWVudF9jcmVkZW50aWFscycsXG4gICAgICAgICAgY2xpZW50X2lkOiBwcm9jZXNzLmVudi5LRVlDTE9BS19DTElFTlRfSUQhLFxuICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHByb2Nlc3MuZW52LktFWUNMT0FLX0NMSUVOVF9TRUNSRVQhLFxuICAgICAgICB9KSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdG9rZW5EYXRhID0gYXdhaXQgdG9rZW5SZXNwb25zZS5qc29uKCk7XG4gICAgXG4gICAgaWYgKCF0b2tlblJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGdldCBhZG1pbiB0b2tlbjpcIiwgdG9rZW5EYXRhKTtcbiAgICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbihcbiAgICAgICAgeyBlcnJvcjogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uXCIgfSxcbiAgICAgICAgeyBzdGF0dXM6IDQwMSB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZvcm1hdCB1c2VyIGRhdGEgZm9yIEtleWNsb2FrXG4gICAgY29uc3Qga2V5Y2xvYWtVc2VyID0ge1xuICAgICAgdXNlcm5hbWU6IGRhdGEudXNlcm5hbWUsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcbiAgICAgIGZpcnN0TmFtZTogZGF0YS5maXJzdE5hbWUsXG4gICAgICBsYXN0TmFtZTogZGF0YS5sYXN0TmFtZSxcbiAgICAgIGVtYWlsOiBkYXRhLmVtYWlsLFxuICAgICAgZ3JvdXBzOiBbZGF0YS5yZWFsbVJvbGVzXSwgLy8gVXNlIGdyb3VwcyBpbnN0ZWFkIG9mIHJvbGVzXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB1c2VyIGluIEtleWNsb2FrIHVzaW5nIGFkbWluIHRva2VuXG4gICAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9hZG1pbi9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vdXNlcnNgLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VuRGF0YS5hY2Nlc3NfdG9rZW59YCxcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoa2V5Y2xvYWtVc2VyKSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coXCJLZXljbG9hayBjcmVhdGUgcmVzcG9uc2U6XCIsIHtcbiAgICAgIHN0YXR1czogY3JlYXRlUmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgb2s6IGNyZWF0ZVJlc3BvbnNlLm9rXG4gICAgfSk7XG5cbiAgICBpZiAoIWNyZWF0ZVJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCBjcmVhdGVSZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zb2xlLmxvZyhcIktleWNsb2FrIGVycm9yOlwiLCBlcnJvckRhdGEpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3JEYXRhLmVycm9yTWVzc2FnZT8uaW5jbHVkZXMoXCJVc2VyIGV4aXN0cyB3aXRoIHNhbWUgdXNlcm5hbWVcIikpIHtcbiAgICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFxuICAgICAgICAgIHsgZXJyb3I6IFwiVW4gdXRpbGlzYXRldXIgZXhpc3RlIGTDqWrDoCBhdmVjIGNlIG5vbSBkJ3V0aWxpc2F0ZXVyXCIgfSxcbiAgICAgICAgICB7IHN0YXR1czogNDAwIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3JEYXRhLmVycm9yTWVzc2FnZT8uaW5jbHVkZXMoXCJVc2VyIGV4aXN0cyB3aXRoIHNhbWUgZW1haWxcIikpIHtcbiAgICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFxuICAgICAgICAgIHsgZXJyb3I6IFwiVW4gdXRpbGlzYXRldXIgZXhpc3RlIGTDqWrDoCBhdmVjIGNldCBlbWFpbFwiIH0sXG4gICAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oXG4gICAgICAgIHsgZXJyb3I6IFwiRXJyZXVyIGNyw6lhdGlvbiB1dGlsaXNhdGV1clwiLCBkZXRhaWxzOiBlcnJvckRhdGEgfSxcbiAgICAgICAgeyBzdGF0dXM6IDQwMCB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgY3JlYXRlZCB1c2VyXG4gICAgY29uc3QgdXNlclJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBgJHtwcm9jZXNzLmVudi5LRVlDTE9BS19CQVNFX1VSTH0vYWRtaW4vcmVhbG1zLyR7cHJvY2Vzcy5lbnYuS0VZQ0xPQUtfUkVBTE19L3VzZXJzP3VzZXJuYW1lPSR7ZGF0YS51c2VybmFtZX1gLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VuRGF0YS5hY2Nlc3NfdG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdXNlcnMgPSBhd2FpdCB1c2VyUmVzcG9uc2UuanNvbigpO1xuICAgIGNvbnN0IHVzZXIgPSB1c2Vyc1swXTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKFxuICAgICAgICB7IGVycm9yOiBcIlV0aWxpc2F0ZXVyIGNyw6nDqSBtYWlzIGltcG9zc2libGUgZGUgbGUgcsOpY3Vww6lyZXJcIiB9LFxuICAgICAgICB7IHN0YXR1czogNTAwIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHVzZXIgdG8gZ3JvdXBcbiAgICBhd2FpdCBmZXRjaChcbiAgICAgIGAke3Byb2Nlc3MuZW52LktFWUNMT0FLX0JBU0VfVVJMfS9hZG1pbi9yZWFsbXMvJHtwcm9jZXNzLmVudi5LRVlDTE9BS19SRUFMTX0vdXNlcnMvJHt1c2VyLmlkfS9ncm91cHMvJHtkYXRhLnJlYWxtUm9sZXN9YCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VuRGF0YS5hY2Nlc3NfdG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIE5leHRSZXNwb25zZS5qc29uKHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICB1c2VyOiB7XG4gICAgICAgIC4uLnVzZXIsXG4gICAgICAgIHJvbGVzOiBbZGF0YS5yZWFsbVJvbGVzXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgY3JlYXRpbmcgdXNlcjpcIiwgZXJyb3IpO1xuICAgIHJldHVybiBOZXh0UmVzcG9uc2UuanNvbihcbiAgICAgIHsgZXJyb3I6IFwiRXJyZXVyIHNlcnZldXJcIiwgZGV0YWlsczogZXJyb3IgfSxcbiAgICAgIHsgc3RhdHVzOiA1MDAgfVxuICAgICk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRTZXJ2ZXJTZXNzaW9uIiwiYXV0aE9wdGlvbnMiLCJOZXh0UmVzcG9uc2UiLCJHRVQiLCJzZXNzaW9uIiwianNvbiIsImVycm9yIiwic3RhdHVzIiwiY29uc29sZSIsImxvZyIsImFjY2Vzc1Rva2VuIiwic3Vic3RyaW5nIiwidXNlciIsInRva2VuUmVzcG9uc2UiLCJmZXRjaCIsInByb2Nlc3MiLCJlbnYiLCJLRVlDTE9BS19CQVNFX1VSTCIsIktFWUNMT0FLX1JFQUxNIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiS0VZQ0xPQUtfQ0xJRU5UX0lEIiwiY2xpZW50X3NlY3JldCIsIktFWUNMT0FLX0NMSUVOVF9TRUNSRVQiLCJ0b2tlbkRhdGEiLCJvayIsImRhdGEiLCJhY2Nlc3NfdG9rZW4iLCJnZXRDdXJyZW50VXNlciIsInVzZXJzUmVzcG9uc2UiLCJBdXRob3JpemF0aW9uIiwidGV4dCIsInVzZXJzIiwibWFwIiwidSIsImlkIiwidXNlcm5hbWUiLCJyZWFsbSIsInNlcnZpY2VBY2NvdW50Q2xpZW50SWQiLCJmaWx0ZXJlZFVzZXJzIiwiZmlsdGVyIiwibGVuZ3RoIiwidXNlcnNXaXRoR3JvdXBzIiwiUHJvbWlzZSIsImFsbCIsImdyb3Vwc1Jlc3BvbnNlIiwiZ3JvdXBzIiwiZ3JvdXBzRGF0YSIsImdyb3VwIiwibmFtZSIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJjcmVhdGVkVGltZXN0YW1wIiwicm9sZXMiLCJmaXJzdF9uYW1lIiwibGFzdF9uYW1lIiwiRGF0ZSIsIm5vdyIsInJvbGUiLCJQT1NUIiwicmVxIiwia2V5Y2xvYWtVc2VyIiwiZW5hYmxlZCIsImVtYWlsVmVyaWZpZWQiLCJyZWFsbVJvbGVzIiwiY3JlYXRlUmVzcG9uc2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZXJyb3JEYXRhIiwiZXJyb3JNZXNzYWdlIiwiaW5jbHVkZXMiLCJkZXRhaWxzIiwidXNlclJlc3BvbnNlIiwic3VjY2VzcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./app/api/users/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%2Fusers%2Froute&page=%2Fapi%2Fusers%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fusers%2Froute.ts&appDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront%2Fapp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=%2FUsers%2Falma%2FDownloads%2Fneah%2Ffront&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!")));
module.exports = __webpack_exports__;
})();