├── .eslintrc ├── .gitignore ├── .next ├── build-manifest.json ├── cache │ └── webpack │ │ ├── client-development │ │ ├── 0.pack │ │ ├── 1.pack │ │ ├── 10.pack │ │ ├── 11.pack │ │ ├── 12.pack │ │ ├── 13.pack │ │ ├── 14.pack │ │ ├── 15.pack │ │ ├── 16.pack │ │ ├── 17.pack │ │ ├── 18.pack │ │ ├── 19.pack │ │ ├── 2.pack │ │ ├── 20.pack │ │ ├── 21.pack │ │ ├── 22.pack │ │ ├── 23.pack │ │ ├── 24.pack │ │ ├── 25.pack │ │ ├── 26.pack │ │ ├── 27.pack │ │ ├── 28.pack │ │ ├── 29.pack │ │ ├── 3.pack │ │ ├── 30.pack │ │ ├── 31.pack │ │ ├── 32.pack │ │ ├── 33.pack │ │ ├── 4.pack │ │ ├── 5.pack │ │ ├── 6.pack │ │ ├── 7.pack │ │ ├── 8.pack │ │ ├── 9.pack │ │ ├── index.pack │ │ └── index.pack.old │ │ └── server-development │ │ ├── 0.pack │ │ ├── 1.pack │ │ ├── 10.pack │ │ ├── 11.pack │ │ ├── 12.pack │ │ ├── 13.pack │ │ ├── 14.pack │ │ ├── 15.pack │ │ ├── 2.pack │ │ ├── 3.pack │ │ ├── 4.pack │ │ ├── 5.pack │ │ ├── 6.pack │ │ ├── 7.pack │ │ ├── 8.pack │ │ ├── 9.pack │ │ ├── index.pack │ │ └── index.pack.old ├── react-loadable-manifest.json ├── server │ ├── pages-manifest.json │ ├── pages │ │ ├── _app.js │ │ ├── _document.js │ │ ├── _error.js │ │ ├── api │ │ │ ├── logout.js │ │ │ ├── protectedRoute.js │ │ │ └── refresh_token.js │ │ ├── index.js │ │ └── protected.js │ └── webpack-runtime.js └── static │ ├── chunks │ ├── amp.js │ ├── main.js │ ├── node_modules_next_dist_client_dev_noop_js.js │ ├── pages │ │ ├── _app.js │ │ ├── _error.js │ │ ├── index.js │ │ └── protected.js │ ├── polyfills.js │ ├── react-refresh.js │ └── webpack.js │ ├── development │ ├── _buildManifest.js │ └── _ssgManifest.js │ └── webpack │ ├── 0c207ab87360709d683d.webpack.hot-update.json │ ├── 3883b3dfd5b830605b3b.webpack.hot-update.json │ ├── webpack.0c207ab87360709d683d.hot-update.js │ └── webpack.3883b3dfd5b830605b3b.hot-update.js ├── README.md ├── functions ├── auth.js ├── checkAuthClient.js └── initPrisma.js ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.js ├── api │ ├── logout.js │ ├── middleware │ │ └── checkAuthServer.js │ ├── protectedRoute.js │ ├── refresh_token.js │ ├── signIn.js │ └── signup.js ├── index.js └── protected.js ├── prisma ├── migrations │ ├── 20210730153856_initial │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── public ├── favicon.ico └── vercel.svg ├── store └── index.js └── styles └── global.css /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next", "next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Keep environment variables out of version control 3 | .env 4 | ./prisma/migrations 5 | -------------------------------------------------------------------------------- /.next/build-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "polyfillFiles": [ 3 | "static/chunks/polyfills.js" 4 | ], 5 | "devFiles": [ 6 | "static/chunks/react-refresh.js" 7 | ], 8 | "ampDevFiles": [ 9 | "static/chunks/webpack.js", 10 | "static/chunks/amp.js" 11 | ], 12 | "lowPriorityFiles": [ 13 | "static/development/_buildManifest.js", 14 | "static/development/_ssgManifest.js" 15 | ], 16 | "pages": { 17 | "/": [ 18 | "static/chunks/webpack.js", 19 | "static/chunks/main.js", 20 | "static/chunks/pages/index.js" 21 | ], 22 | "/_app": [ 23 | "static/chunks/webpack.js", 24 | "static/chunks/main.js", 25 | "static/chunks/pages/_app.js" 26 | ], 27 | "/_error": [ 28 | "static/chunks/webpack.js", 29 | "static/chunks/main.js", 30 | "static/chunks/pages/_error.js" 31 | ], 32 | "/protected": [ 33 | "static/chunks/webpack.js", 34 | "static/chunks/main.js", 35 | "static/chunks/pages/protected.js" 36 | ] 37 | }, 38 | "ampFirstPages": [] 39 | } -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/0.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/0.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/1.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/1.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/10.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/10.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/11.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/11.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/12.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/12.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/13.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/13.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/14.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/14.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/15.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/15.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/16.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/16.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/17.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/17.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/18.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/18.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/19.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/19.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/2.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/2.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/20.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/20.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/21.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/21.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/22.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/22.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/23.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/23.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/24.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/24.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/25.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/25.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/26.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/26.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/27.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/27.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/28.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/28.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/29.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/29.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/3.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/3.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/30.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/30.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/31.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/31.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/32.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/32.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/33.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/33.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/4.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/4.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/5.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/5.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/6.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/6.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/7.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/7.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/8.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/8.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/9.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/9.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/index.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/index.pack -------------------------------------------------------------------------------- /.next/cache/webpack/client-development/index.pack.old: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/client-development/index.pack.old -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/0.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/0.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/1.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/1.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/10.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/10.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/11.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/11.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/12.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/12.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/13.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/13.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/14.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/14.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/15.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/15.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/2.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/2.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/3.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/3.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/4.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/4.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/5.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/5.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/6.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/6.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/7.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/7.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/8.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/8.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/9.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/9.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/index.pack: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/index.pack -------------------------------------------------------------------------------- /.next/cache/webpack/server-development/index.pack.old: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/.next/cache/webpack/server-development/index.pack.old -------------------------------------------------------------------------------- /.next/react-loadable-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "..\\node_modules\\next\\dist\\client\\next-dev.js -> ./dev/noop": { 3 | "id": "./node_modules/next/dist/client/dev/noop.js", 4 | "files": [ 5 | "static/chunks/node_modules_next_dist_client_dev_noop_js.js" 6 | ] 7 | } 8 | } -------------------------------------------------------------------------------- /.next/server/pages-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/_app": "pages/_app.js", 3 | "/_error": "pages/_error.js", 4 | "/_document": "pages/_document.js", 5 | "/": "pages/index.js", 6 | "/protected": "pages/protected.js" 7 | } -------------------------------------------------------------------------------- /.next/server/pages/_app.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/_app"; 4 | exports.ids = ["pages/_app"]; 5 | exports.modules = { 6 | 7 | /***/ "./functions/auth.js": 8 | /*!***************************!*\ 9 | !*** ./functions/auth.js ***! 10 | \***************************/ 11 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 12 | 13 | "use strict"; 14 | __webpack_require__.r(__webpack_exports__); 15 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 16 | /* harmony export */ "refreshToken": function() { return /* binding */ refreshToken; }, 17 | /* harmony export */ "createAccessToken": function() { return /* binding */ createAccessToken; }, 18 | /* harmony export */ "createRefreshToken": function() { return /* binding */ createRefreshToken; }, 19 | /* harmony export */ "sendRefreshToken": function() { return /* binding */ sendRefreshToken; } 20 | /* harmony export */ }); 21 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ "jsonwebtoken"); 22 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__); 23 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cookie */ "cookie"); 24 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cookie__WEBPACK_IMPORTED_MODULE_1__); 25 | /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./store/index.js"); 26 | 27 | 28 | 29 | const refreshToken = () => { 30 | return fetch('/api/refresh_token', { 31 | method: "POST", 32 | credentials: "include" 33 | }).then(res => res.json()).then(data => { 34 | return data; 35 | }); 36 | }; 37 | const createAccessToken = user => { 38 | return (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.sign)({ 39 | userId: user.id 40 | }, process.env.ACCESS_TOKEN_SECRET, { 41 | expiresIn: '15m' 42 | }); 43 | }; 44 | const createRefreshToken = user => { 45 | return (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.sign)({ 46 | userId: user.id 47 | }, process.env.REFRESH_TOKEN_SECRET, { 48 | expiresIn: "7d" 49 | }); 50 | }; 51 | const sendRefreshToken = (res, token) => { 52 | res.setHeader('Set-Cookie', cookie__WEBPACK_IMPORTED_MODULE_1___default().serialize('refreshToken', token, { 53 | httpOnly: true, 54 | maxAge: 60 * 60 * 24 * 7, 55 | path: '/' 56 | })); 57 | }; 58 | 59 | /***/ }), 60 | 61 | /***/ "./pages/_app.js": 62 | /*!***********************!*\ 63 | !*** ./pages/_app.js ***! 64 | \***********************/ 65 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 66 | 67 | "use strict"; 68 | __webpack_require__.r(__webpack_exports__); 69 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime"); 70 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__); 71 | /* harmony import */ var _styles_global_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/global.css */ "./styles/global.css"); 72 | /* harmony import */ var _styles_global_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_global_css__WEBPACK_IMPORTED_MODULE_1__); 73 | /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); 74 | /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); 75 | /* harmony import */ var _functions_auth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../functions/auth */ "./functions/auth.js"); 76 | /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store */ "./store/index.js"); 77 | 78 | var _jsxFileName = "D:\\Code\\Prisma\\test\\pages\\_app.js"; 79 | 80 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 81 | 82 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 83 | 84 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 85 | 86 | 87 | 88 | 89 | 90 | 91 | function MyApp({ 92 | Component, 93 | pageProps 94 | }) { 95 | const store = (0,_store__WEBPACK_IMPORTED_MODULE_4__.useStore)(); 96 | const { 97 | 0: loading, 98 | 1: setLoading 99 | } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(true); 100 | (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => { 101 | //initial funciton 102 | (0,_functions_auth__WEBPACK_IMPORTED_MODULE_3__.refreshToken)().then(data => { 103 | if (data.ok) { 104 | store.setAccessToken(data.accessToken); 105 | store.setUser(data.user); 106 | } 107 | 108 | setLoading(false); 109 | }); //starts silent refreshes 110 | 111 | setInterval(() => { 112 | (0,_functions_auth__WEBPACK_IMPORTED_MODULE_3__.refreshToken)().then(data => { 113 | if (data.ok) { 114 | store.setAccessToken(data.accessToken); 115 | store.setUser(data.user); 116 | } 117 | }); 118 | }, 600000); 119 | }, []); 120 | if (loading) return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", { 121 | children: "Loading...." 122 | }, void 0, false, { 123 | fileName: _jsxFileName, 124 | lineNumber: 31, 125 | columnNumber: 22 126 | }, this); 127 | return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Component, _objectSpread({}, pageProps), void 0, false, { 128 | fileName: _jsxFileName, 129 | lineNumber: 33, 130 | columnNumber: 10 131 | }, this); 132 | } 133 | 134 | /* harmony default export */ __webpack_exports__["default"] = (MyApp); 135 | 136 | /***/ }), 137 | 138 | /***/ "./store/index.js": 139 | /*!************************!*\ 140 | !*** ./store/index.js ***! 141 | \************************/ 142 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 143 | 144 | "use strict"; 145 | __webpack_require__.r(__webpack_exports__); 146 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 147 | /* harmony export */ "useStore": function() { return /* binding */ useStore; } 148 | /* harmony export */ }); 149 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ "zustand"); 150 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zustand__WEBPACK_IMPORTED_MODULE_0__); 151 | 152 | const useStore = zustand__WEBPACK_IMPORTED_MODULE_0___default()(set => ({ 153 | accessToken: null, 154 | user: {}, 155 | setAccessToken: input => set(state => ({ 156 | accessToken: input 157 | })), 158 | removeAccessToken: () => set({ 159 | accessToken: null 160 | }), 161 | setUser: input => set(state => ({ 162 | user: input 163 | })), 164 | removeUser: () => set({ 165 | user: null 166 | }) 167 | })); 168 | 169 | /***/ }), 170 | 171 | /***/ "./styles/global.css": 172 | /*!***************************!*\ 173 | !*** ./styles/global.css ***! 174 | \***************************/ 175 | /***/ (function() { 176 | 177 | 178 | 179 | /***/ }), 180 | 181 | /***/ "cookie": 182 | /*!*************************!*\ 183 | !*** external "cookie" ***! 184 | \*************************/ 185 | /***/ (function(module) { 186 | 187 | "use strict"; 188 | module.exports = require("cookie");; 189 | 190 | /***/ }), 191 | 192 | /***/ "jsonwebtoken": 193 | /*!*******************************!*\ 194 | !*** external "jsonwebtoken" ***! 195 | \*******************************/ 196 | /***/ (function(module) { 197 | 198 | "use strict"; 199 | module.exports = require("jsonwebtoken");; 200 | 201 | /***/ }), 202 | 203 | /***/ "react": 204 | /*!************************!*\ 205 | !*** external "react" ***! 206 | \************************/ 207 | /***/ (function(module) { 208 | 209 | "use strict"; 210 | module.exports = require("react");; 211 | 212 | /***/ }), 213 | 214 | /***/ "react/jsx-dev-runtime": 215 | /*!****************************************!*\ 216 | !*** external "react/jsx-dev-runtime" ***! 217 | \****************************************/ 218 | /***/ (function(module) { 219 | 220 | "use strict"; 221 | module.exports = require("react/jsx-dev-runtime");; 222 | 223 | /***/ }), 224 | 225 | /***/ "zustand": 226 | /*!**************************!*\ 227 | !*** external "zustand" ***! 228 | \**************************/ 229 | /***/ (function(module) { 230 | 231 | "use strict"; 232 | module.exports = require("zustand");; 233 | 234 | /***/ }) 235 | 236 | }; 237 | ; 238 | 239 | // load runtime 240 | var __webpack_require__ = require("../webpack-runtime.js"); 241 | __webpack_require__.C(exports); 242 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 243 | var __webpack_exports__ = (__webpack_exec__("./pages/_app.js")); 244 | module.exports = __webpack_exports__; 245 | 246 | })(); 247 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9mdW5jdGlvbnMvYXV0aC5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9wYWdlcy9fYXBwLmpzIiwid2VicGFjazovL3ByaXNtbmV4dC8uL3N0b3JlL2luZGV4LmpzIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImNvb2tpZVwiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImpzb253ZWJ0b2tlblwiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L2V4dGVybmFsIFwicmVhY3QvanN4LWRldi1ydW50aW1lXCIiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L2V4dGVybmFsIFwienVzdGFuZFwiIl0sIm5hbWVzIjpbInJlZnJlc2hUb2tlbiIsImZldGNoIiwibWV0aG9kIiwiY3JlZGVudGlhbHMiLCJ0aGVuIiwicmVzIiwianNvbiIsImRhdGEiLCJjcmVhdGVBY2Nlc3NUb2tlbiIsInVzZXIiLCJzaWduIiwidXNlcklkIiwiaWQiLCJwcm9jZXNzIiwiZW52IiwiQUNDRVNTX1RPS0VOX1NFQ1JFVCIsImV4cGlyZXNJbiIsImNyZWF0ZVJlZnJlc2hUb2tlbiIsIlJFRlJFU0hfVE9LRU5fU0VDUkVUIiwic2VuZFJlZnJlc2hUb2tlbiIsInRva2VuIiwic2V0SGVhZGVyIiwiY29va2llIiwiaHR0cE9ubHkiLCJtYXhBZ2UiLCJwYXRoIiwiTXlBcHAiLCJDb21wb25lbnQiLCJwYWdlUHJvcHMiLCJzdG9yZSIsInVzZVN0b3JlIiwibG9hZGluZyIsInNldExvYWRpbmciLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIm9rIiwic2V0QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsInNldFVzZXIiLCJzZXRJbnRlcnZhbCIsImNyZWF0ZSIsInNldCIsImlucHV0Iiwic3RhdGUiLCJyZW1vdmVBY2Nlc3NUb2tlbiIsInJlbW92ZVVzZXIiXSwibWFw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VSw4Q0FBTSxDQUFDQyxHQUFHLEtBQUs7QUFDbkNKLGFBQVcsRUFBRSxJQURzQjtBQUVuQzVCLE1BQUksRUFBQyxFQUY4QjtBQUduQzJCLGdCQUFjLEVBQUdNLEtBQUQsSUFBV0QsR0FBRyxDQUFFRSxLQUFELEtBQVk7QUFBRU4sZUFBVyxFQUFFSztBQUFmLEdBQVosQ0FBRCxDQUhLO0FBSW5DRSxtQkFBaUIsRUFBRSxNQUFNSCxHQUFHLENBQUM7QUFBRUosZUFBVyxFQUFFO0FBQWYsR0FBRCxDQUpPO0FBS25DQyxTQUFPLEVBQUdJLEtBQUQsSUFBV0QsR0FBRyxDQUFFRSxLQUFELEtBQVk7QUFBRWxDLFFBQUksRUFBQ2lDO0FBQVAsR0FBWixDQUFELENBTFk7QUFNbkNHLFlBQVUsRUFBRSxNQUFNSixHQUFHLENBQUM7QUFBQ2hDLFFBQUksRUFBQztBQUFOLEdBQUQ7QUFOYyxDQUFMLENBQUosQ0FBdkIsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRlAsb0M7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEsbUM7Ozs7Ozs7Ozs7O0FDQUEsbUQ7Ozs7Ozs7Ozs7O0FDQUEscUMiLCJmaWxlIjoicGFnZXMvX2FwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2lnbn0gZnJvbSAnanNvbndlYnRva2VuJ1xyXG5pbXBvcnQgY29va2llIGZyb20gJ2Nvb2tpZSdcclxuaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tIFwiLi4vc3RvcmVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCByZWZyZXNoVG9rZW4gPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gZmV0Y2goJy9hcGkvcmVmcmVzaF90b2tlbicsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIlxyXG4gICAgfSkudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcclxuICAgIC50aGVuKGRhdGEgPT4ge3JldHVybiBkYXRhfSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjY2Vzc1Rva2VuID0gKHVzZXIpID0+IHtcclxuICAgIHJldHVybiBzaWduKHsgdXNlcklkOiB1c2VyLmlkIH0sIHByb2Nlc3MuZW52LkFDQ0VTU19UT0tFTl9TRUNSRVQsIHtcclxuICAgICAgZXhwaXJlc0luOiAnMTVtJ1xyXG4gICAgfSk7XHJcbiAgfTtcclxuICBcclxuICBleHBvcnQgY29uc3QgY3JlYXRlUmVmcmVzaFRva2VuID0gKHVzZXIpID0+IHtcclxuICAgIHJldHVybiBzaWduKFxyXG4gICAgICAgIHsgdXNlcklkOiB1c2VyLmlkIH0scHJvY2Vzcy5lbnYuUkVGUkVTSF9UT0tFTl9TRUNSRVQse1xyXG4gICAgICAgICAgICBleHBpcmVzSW46IFwiN2RcIlxyXG4gICAgICAgIH1cclxuICAgICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2VuZFJlZnJlc2hUb2tlbiA9IChyZXMsdG9rZW4pID0+IHtcclxuICAgIHJlcy5zZXRIZWFkZXIoJ1NldC1Db29raWUnLGNvb2tpZS5zZXJpYWxpemUoJ3JlZnJlc2hUb2tlbicsdG9rZW4sIHtcclxuICAgICAgICBodHRwT25seTogdHJ1ZSxcclxuICAgICAgICBtYXhBZ2U6IDYwICogNjAgKiAyNCAqIDcsXHJcbiAgICAgICAgcGF0aDogJy8nXHJcbiAgICB9KSlcclxufTsiLCJpbXBvcnQgJy4uL3N0eWxlcy9nbG9iYWwuY3NzJ1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtyZWZyZXNoVG9rZW59IGZyb20gJy4uL2Z1bmN0aW9ucy9hdXRoJ1xuaW1wb3J0IHt1c2VTdG9yZX0gZnJvbSAnLi4vc3RvcmUnXG5cbmZ1bmN0aW9uIE15QXBwKHsgQ29tcG9uZW50LCBwYWdlUHJvcHMgfSkge1xuICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKClcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcbiAgXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy9pbml0aWFsIGZ1bmNpdG9uXG4gICAgcmVmcmVzaFRva2VuKCkudGhlbihkYXRhID0+IHtcbiAgICAgIGlmKGRhdGEub2spIHtcbiAgICAgICAgc3RvcmUuc2V0QWNjZXNzVG9rZW4oZGF0YS5hY2Nlc3NUb2tlbilcbiAgICAgICAgc3RvcmUuc2V0VXNlcihkYXRhLnVzZXIpXG4gICAgICB9XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH0pXG5cbiAgICAvL3N0YXJ0cyBzaWxlbnQgcmVmcmVzaGVzXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgcmVmcmVzaFRva2VuKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgaWYoZGF0YS5vaykge1xuICAgICAgICAgIHN0b3JlLnNldEFjY2Vzc1Rva2VuKGRhdGEuYWNjZXNzVG9rZW4pXG4gICAgICAgICAgc3RvcmUuc2V0VXNlcihkYXRhLnVzZXIpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSw2MDAwMDApXG4gIH0sW10pXG5cbiAgaWYobG9hZGluZykgcmV0dXJuIDxkaXY+TG9hZGluZy4uLi48L2Rpdj5cblxuICByZXR1cm4gPENvbXBvbmVudCB7Li4ucGFnZVByb3BzfSAvPlxuICBcbn1cbmV4cG9ydCBkZWZhdWx0IE15QXBwXG4iLCJpbXBvcnQgY3JlYXRlIGZyb20gJ3p1c3RhbmQnXHJcblxyXG5leHBvcnQgY29uc3QgdXNlU3RvcmUgPSBjcmVhdGUoc2V0ID0+ICh7XHJcbiAgICBhY2Nlc3NUb2tlbjogbnVsbCxcclxuICAgIHVzZXI6e30sXHJcbiAgICBzZXRBY2Nlc3NUb2tlbjogKGlucHV0KSA9PiBzZXQoKHN0YXRlKSA9PiAoeyBhY2Nlc3NUb2tlbjogaW5wdXQgfSkpLFxyXG4gICAgcmVtb3ZlQWNjZXNzVG9rZW46ICgpID0+IHNldCh7IGFjY2Vzc1Rva2VuOiBudWxsIH0pLFxyXG4gICAgc2V0VXNlcjogKGlucHV0KSA9PiBzZXQoKHN0YXRlKSA9PiAoeyB1c2VyOmlucHV0IH0pKSxcclxuICAgIHJlbW92ZVVzZXI6ICgpID0+IHNldCh7dXNlcjpudWxsfSlcclxufSkpXHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvb2tpZVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwianNvbndlYnRva2VuXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QvanN4LWRldi1ydW50aW1lXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ6dXN0YW5kXCIpOzsiXSwic291cmNlUm9vdCI6IiJ9 -------------------------------------------------------------------------------- /.next/server/pages/_error.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/_error"; 4 | exports.ids = ["pages/_error"]; 5 | exports.modules = { 6 | 7 | /***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": 8 | /*!**********************************************************************!*\ 9 | !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***! 10 | \**********************************************************************/ 11 | /***/ (function(module) { 12 | 13 | function _interopRequireDefault(obj) { 14 | return obj && obj.__esModule ? obj : { 15 | "default": obj 16 | }; 17 | } 18 | 19 | module.exports = _interopRequireDefault; 20 | 21 | /***/ }), 22 | 23 | /***/ "./node_modules/next/dist/pages/_error.js": 24 | /*!************************************************!*\ 25 | !*** ./node_modules/next/dist/pages/_error.js ***! 26 | \************************************************/ 27 | /***/ (function(__unused_webpack_module, exports, __webpack_require__) { 28 | 29 | "use strict"; 30 | 31 | 32 | var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 33 | 34 | exports.__esModule = true; 35 | exports.default = void 0; 36 | 37 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "react")); 38 | 39 | var _head = _interopRequireDefault(__webpack_require__(/*! ../next-server/lib/head */ "../next-server/lib/head")); 40 | 41 | const statusCodes = { 42 | 400: 'Bad Request', 43 | 404: 'This page could not be found', 44 | 405: 'Method Not Allowed', 45 | 500: 'Internal Server Error' 46 | }; 47 | 48 | function _getInitialProps({ 49 | res, 50 | err 51 | }) { 52 | const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404; 53 | return { 54 | statusCode 55 | }; 56 | } 57 | /** 58 | * `Error` component used for handling errors. 59 | */ 60 | 61 | 62 | class Error extends _react.default.Component { 63 | render() { 64 | const { 65 | statusCode 66 | } = this.props; 67 | const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred'; 68 | return /*#__PURE__*/_react.default.createElement("div", { 69 | style: styles.error 70 | }, /*#__PURE__*/_react.default.createElement(_head.default, null, /*#__PURE__*/_react.default.createElement("title", null, statusCode ? `${statusCode}: ${title}` : 'Application error: a client-side exception has occurred')), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("style", { 71 | dangerouslySetInnerHTML: { 72 | __html: 'body { margin: 0 }' 73 | } 74 | }), statusCode ? /*#__PURE__*/_react.default.createElement("h1", { 75 | style: styles.h1 76 | }, statusCode) : null, /*#__PURE__*/_react.default.createElement("div", { 77 | style: styles.desc 78 | }, /*#__PURE__*/_react.default.createElement("h2", { 79 | style: styles.h2 80 | }, this.props.title || statusCode ? title : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Application error: a client-side exception has occurred (", /*#__PURE__*/_react.default.createElement("a", { 81 | href: "https://nextjs.org/docs/messages/client-side-exception-occurred" 82 | }, "developer guidance"), ")"), ".")))); 83 | } 84 | 85 | } 86 | 87 | exports.default = Error; 88 | Error.displayName = 'ErrorPage'; 89 | Error.getInitialProps = _getInitialProps; 90 | Error.origGetInitialProps = _getInitialProps; 91 | const styles = { 92 | error: { 93 | color: '#000', 94 | background: '#fff', 95 | fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", Avenir, "Helvetica Neue", "Lucida Grande", sans-serif', 96 | height: '100vh', 97 | textAlign: 'center', 98 | display: 'flex', 99 | flexDirection: 'column', 100 | alignItems: 'center', 101 | justifyContent: 'center' 102 | }, 103 | desc: { 104 | display: 'inline-block', 105 | textAlign: 'left', 106 | lineHeight: '49px', 107 | height: '49px', 108 | verticalAlign: 'middle' 109 | }, 110 | h1: { 111 | display: 'inline-block', 112 | borderRight: '1px solid rgba(0, 0, 0,.3)', 113 | margin: 0, 114 | marginRight: '20px', 115 | padding: '10px 23px 10px 0', 116 | fontSize: '24px', 117 | fontWeight: 500, 118 | verticalAlign: 'top' 119 | }, 120 | h2: { 121 | fontSize: '14px', 122 | fontWeight: 'normal', 123 | lineHeight: 'inherit', 124 | margin: 0, 125 | padding: 0 126 | } 127 | }; 128 | 129 | /***/ }), 130 | 131 | /***/ "../next-server/lib/head": 132 | /*!****************************************************!*\ 133 | !*** external "next/dist/next-server/lib/head.js" ***! 134 | \****************************************************/ 135 | /***/ (function(module) { 136 | 137 | "use strict"; 138 | module.exports = require("next/dist/next-server/lib/head.js");; 139 | 140 | /***/ }), 141 | 142 | /***/ "react": 143 | /*!************************!*\ 144 | !*** external "react" ***! 145 | \************************/ 146 | /***/ (function(module) { 147 | 148 | "use strict"; 149 | module.exports = require("react");; 150 | 151 | /***/ }) 152 | 153 | }; 154 | ; 155 | 156 | // load runtime 157 | var __webpack_require__ = require("../webpack-runtime.js"); 158 | __webpack_require__.C(exports); 159 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 160 | var __webpack_exports__ = (__webpack_exec__("./node_modules/next/dist/pages/_error.js")); 161 | module.exports = __webpack_exports__; 162 | 163 | })(); 164 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0Ly4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9wYWdlcy9fZXJyb3IuanMiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L2V4dGVybmFsIFwibmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9oZWFkLmpzXCIiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L2V4dGVybmFsIFwicmVhY3RcIiJdLCJuYW1lcyI6WyJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImV4cG9ydHMiLCJfcmVhY3QiLCJfaGVhZCIsInN0YXR1c0NvZGVzIiwiX2dldEluaXRpYWxQcm9wcyIsInJlcyIsImVyciIsInN0YXR1c0NvZGUiLCJFcnJvciIsImRlZmF1bHQiLCJDb21wb25lbnQiLCJyZW5kZXIiLCJwcm9wcyIsInRpdGxlIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwic3R5bGVzIiwiZXJyb3IiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImgxIiwiZGVzYyIsImgyIiwiRnJhZ21lbnQiLCJocmVmIiwiZGlzcGxheU5hbWUiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwibGluZUhlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJib3JkZXJSaWdodCIsIm1hcmdpbiIsIm1hcmdpblJpZ2h0IiwicGFkZGluZyIsImZvbnRTaXplIiwiZm9udFdlaWdodCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3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QWlCQyxjQUFVLEVBQUMsUUFBNUI7QUFBcUNQLGNBQVUsRUFBQyxTQUFoRDtBQUEwREcsVUFBTSxFQUFDLENBQWpFO0FBQW1FRSxXQUFPLEVBQUM7QUFBM0U7QUFBM2pCLENBQWIsQzs7Ozs7Ozs7Ozs7QUNGMXhDLCtEOzs7Ozs7Ozs7OztBQ0FBLG1DIiwiZmlsZSI6InBhZ2VzL19lcnJvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7dmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQ9cmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO2V4cG9ydHMuX19lc01vZHVsZT10cnVlO2V4cG9ydHMuZGVmYXVsdD12b2lkIDA7dmFyIF9yZWFjdD1faW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7dmFyIF9oZWFkPV9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL25leHQtc2VydmVyL2xpYi9oZWFkXCIpKTtjb25zdCBzdGF0dXNDb2Rlcz17NDAwOidCYWQgUmVxdWVzdCcsNDA0OidUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kJyw0MDU6J01ldGhvZCBOb3QgQWxsb3dlZCcsNTAwOidJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InfTtmdW5jdGlvbiBfZ2V0SW5pdGlhbFByb3BzKHtyZXMsZXJyfSl7Y29uc3Qgc3RhdHVzQ29kZT1yZXMmJnJlcy5zdGF0dXNDb2RlP3Jlcy5zdGF0dXNDb2RlOmVycj9lcnIuc3RhdHVzQ29kZTo0MDQ7cmV0dXJue3N0YXR1c0NvZGV9O30vKipcbiAqIGBFcnJvcmAgY29tcG9uZW50IHVzZWQgZm9yIGhhbmRsaW5nIGVycm9ycy5cbiAqL2NsYXNzIEVycm9yIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50e3JlbmRlcigpe2NvbnN0e3N0YXR1c0NvZGV9PXRoaXMucHJvcHM7Y29uc3QgdGl0bGU9dGhpcy5wcm9wcy50aXRsZXx8c3RhdHVzQ29kZXNbc3RhdHVzQ29kZV18fCdBbiB1bmV4cGVjdGVkIGVycm9yIGhhcyBvY2N1cnJlZCc7cmV0dXJuLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6c3R5bGVzLmVycm9yfSwvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfaGVhZC5kZWZhdWx0LG51bGwsLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0aXRsZVwiLG51bGwsc3RhdHVzQ29kZT9gJHtzdGF0dXNDb2RlfTogJHt0aXRsZX1gOidBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkJykpLC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsbnVsbCwvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6J2JvZHkgeyBtYXJnaW46IDAgfSd9fSksc3RhdHVzQ29kZT8vKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImgxXCIse3N0eWxlOnN0eWxlcy5oMX0sc3RhdHVzQ29kZSk6bnVsbCwvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLHtzdHlsZTpzdHlsZXMuZGVzY30sLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLHtzdHlsZTpzdHlsZXMuaDJ9LHRoaXMucHJvcHMudGl0bGV8fHN0YXR1c0NvZGU/dGl0bGU6LyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQsbnVsbCxcIkFwcGxpY2F0aW9uIGVycm9yOiBhIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKFwiLC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYVwiLHtocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvY2xpZW50LXNpZGUtZXhjZXB0aW9uLW9jY3VycmVkXCJ9LFwiZGV2ZWxvcGVyIGd1aWRhbmNlXCIpLFwiKVwiKSxcIi5cIikpKSk7fX1leHBvcnRzLmRlZmF1bHQ9RXJyb3I7RXJyb3IuZGlzcGxheU5hbWU9J0Vycm9yUGFnZSc7RXJyb3IuZ2V0SW5pdGlhbFByb3BzPV9nZXRJbml0aWFsUHJvcHM7RXJyb3Iub3JpZ0dldEluaXRpYWxQcm9wcz1fZ2V0SW5pdGlhbFByb3BzO2NvbnN0IHN0eWxlcz17ZXJyb3I6e2NvbG9yOicjMDAwJyxiYWNrZ3JvdW5kOicjZmZmJyxmb250RmFtaWx5OictYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFJvYm90bywgXCJTZWdvZSBVSVwiLCBcIkZpcmEgU2Fuc1wiLCBBdmVuaXIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWYnLGhlaWdodDonMTAwdmgnLHRleHRBbGlnbjonY2VudGVyJyxkaXNwbGF5OidmbGV4JyxmbGV4RGlyZWN0aW9uOidjb2x1bW4nLGFsaWduSXRlbXM6J2NlbnRlcicsanVzdGlmeUNvbnRlbnQ6J2NlbnRlcid9LGRlc2M6e2Rpc3BsYXk6J2lubGluZS1ibG9jaycsdGV4dEFsaWduOidsZWZ0JyxsaW5lSGVpZ2h0Oic0OXB4JyxoZWlnaHQ6JzQ5cHgnLHZlcnRpY2FsQWxpZ246J21pZGRsZSd9LGgxOntkaXNwbGF5OidpbmxpbmUtYmxvY2snLGJvcmRlclJpZ2h0OicxcHggc29saWQgcmdiYSgwLCAwLCAwLC4zKScsbWFyZ2luOjAsbWFyZ2luUmlnaHQ6JzIwcHgnLHBhZGRpbmc6JzEwcHggMjNweCAxMHB4IDAnLGZvbnRTaXplOicyNHB4Jyxmb250V2VpZ2h0OjUwMCx2ZXJ0aWNhbEFsaWduOid0b3AnfSxoMjp7Zm9udFNpemU6JzE0cHgnLGZvbnRXZWlnaHQ6J25vcm1hbCcsbGluZUhlaWdodDonaW5oZXJpdCcsbWFyZ2luOjAscGFkZGluZzowfX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1fZXJyb3IuanMubWFwIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9oZWFkLmpzXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTs7Il0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /.next/server/pages/api/logout.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/api/logout"; 4 | exports.ids = ["pages/api/logout"]; 5 | exports.modules = { 6 | 7 | /***/ "./pages/api/logout.js": 8 | /*!*****************************!*\ 9 | !*** ./pages/api/logout.js ***! 10 | \*****************************/ 11 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 12 | 13 | "use strict"; 14 | __webpack_require__.r(__webpack_exports__); 15 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cookie */ "cookie"); 16 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(cookie__WEBPACK_IMPORTED_MODULE_0__); 17 | 18 | /* harmony default export */ __webpack_exports__["default"] = ((req, res) => { 19 | if (req.method === 'POST') { 20 | //deletes refresh token 21 | res.setHeader('Set-Cookie', cookie__WEBPACK_IMPORTED_MODULE_0___default().serialize('refreshToken', '', { 22 | httpOnly: true, 23 | maxAge: 0, 24 | path: '/' 25 | })); 26 | res.status(200).send(); 27 | } 28 | }); 29 | 30 | /***/ }), 31 | 32 | /***/ "cookie": 33 | /*!*************************!*\ 34 | !*** external "cookie" ***! 35 | \*************************/ 36 | /***/ (function(module) { 37 | 38 | "use strict"; 39 | module.exports = require("cookie");; 40 | 41 | /***/ }) 42 | 43 | }; 44 | ; 45 | 46 | // load runtime 47 | var __webpack_require__ = require("../../webpack-runtime.js"); 48 | __webpack_require__.C(exports); 49 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 50 | var __webpack_exports__ = (__webpack_exec__("./pages/api/logout.js")); 51 | module.exports = __webpack_exports__; 52 | 53 | })(); 54 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9wYWdlcy9hcGkvbG9nb3V0LmpzIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImNvb2tpZVwiIl0sIm5hbWVzIjpbInJlcSIsInJlcyIsIm1ldGhvZCIsInNldEhlYWRlciIsImNvb2tpZSIsImh0dHBPbmx5IiwibWF4QWdlIiwicGF0aCIsInN0YXR1cyIsInNlbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLCtEQUFlLENBQUNBLEdBQUQsRUFBTUMsR0FBTixLQUFjO0FBQ3pCLE1BQUdELEdBQUcsQ0FBQ0UsTUFBSixLQUFlLE1BQWxCLEVBQTBCO0FBQ3RCO0FBQ0FELE9BQUcsQ0FBQ0UsU0FBSixDQUFjLFlBQWQsRUFBMkJDLHVEQUFBLENBQWlCLGNBQWpCLEVBQWdDLEVBQWhDLEVBQW9DO0FBQzNEQyxjQUFRLEVBQUUsSUFEaUQ7QUFFM0RDLFlBQU0sRUFBRSxDQUZtRDtBQUczREMsVUFBSSxFQUFFO0FBSHFELEtBQXBDLENBQTNCO0FBS0FOLE9BQUcsQ0FBQ08sTUFBSixDQUFXLEdBQVgsRUFBZ0JDLElBQWhCO0FBQ0g7QUFDSixDQVZELEU7Ozs7Ozs7Ozs7O0FDREEsb0MiLCJmaWxlIjoicGFnZXMvYXBpL2xvZ291dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb29raWUgZnJvbSAnY29va2llJ1xyXG5leHBvcnQgZGVmYXVsdCAocmVxLCByZXMpID0+IHtcclxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdQT1NUJykge1xyXG4gICAgICAgIC8vZGVsZXRlcyByZWZyZXNoIHRva2VuXHJcbiAgICAgICAgcmVzLnNldEhlYWRlcignU2V0LUNvb2tpZScsY29va2llLnNlcmlhbGl6ZSgncmVmcmVzaFRva2VuJywnJywge1xyXG4gICAgICAgICAgICBodHRwT25seTogdHJ1ZSxcclxuICAgICAgICAgICAgbWF4QWdlOiAwLFxyXG4gICAgICAgICAgICBwYXRoOiAnLydcclxuICAgICAgICB9KSlcclxuICAgICAgICByZXMuc3RhdHVzKDIwMCkuc2VuZCgpXHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb29raWVcIik7OyJdLCJzb3VyY2VSb290IjoiIn0= -------------------------------------------------------------------------------- /.next/server/pages/api/protectedRoute.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/api/protectedRoute"; 4 | exports.ids = ["pages/api/protectedRoute"]; 5 | exports.modules = { 6 | 7 | /***/ "./pages/api/middleware/checkAuthServer.js": 8 | /*!*************************************************!*\ 9 | !*** ./pages/api/middleware/checkAuthServer.js ***! 10 | \*************************************************/ 11 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 12 | 13 | "use strict"; 14 | __webpack_require__.r(__webpack_exports__); 15 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ "jsonwebtoken"); 16 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__); 17 | 18 | 19 | const checkAuth = handler => { 20 | return async (req, res) => { 21 | try { 22 | const authorization = req.headers["authorization"]; 23 | if (!authorization) throw new Error("not authenticated"); 24 | const token = authorization.split(" ")[1]; 25 | (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.verify)(token, process.env.ACCESS_TOKEN_SECRET); 26 | return handler(req, res); 27 | } catch (e) { 28 | console.log(e); 29 | res.status(401).send(); 30 | } 31 | }; 32 | }; 33 | 34 | /* harmony default export */ __webpack_exports__["default"] = (checkAuth); 35 | 36 | /***/ }), 37 | 38 | /***/ "./pages/api/protectedRoute.js": 39 | /*!*************************************!*\ 40 | !*** ./pages/api/protectedRoute.js ***! 41 | \*************************************/ 42 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 43 | 44 | "use strict"; 45 | __webpack_require__.r(__webpack_exports__); 46 | /* harmony import */ var _middleware_checkAuthServer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./middleware/checkAuthServer */ "./pages/api/middleware/checkAuthServer.js"); 47 | 48 | 49 | const protectedRoute = async (req, res) => { 50 | if (req.method === 'GET') { 51 | //secret data 52 | res.send('Hey, keep it in secret!'); 53 | } 54 | }; //authentication middleware 55 | 56 | 57 | /* harmony default export */ __webpack_exports__["default"] = ((0,_middleware_checkAuthServer__WEBPACK_IMPORTED_MODULE_0__.default)(protectedRoute)); 58 | 59 | /***/ }), 60 | 61 | /***/ "jsonwebtoken": 62 | /*!*******************************!*\ 63 | !*** external "jsonwebtoken" ***! 64 | \*******************************/ 65 | /***/ (function(module) { 66 | 67 | "use strict"; 68 | module.exports = require("jsonwebtoken");; 69 | 70 | /***/ }) 71 | 72 | }; 73 | ; 74 | 75 | // load runtime 76 | var __webpack_require__ = require("../../webpack-runtime.js"); 77 | __webpack_require__.C(exports); 78 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 79 | var __webpack_exports__ = (__webpack_exec__("./pages/api/protectedRoute.js")); 80 | module.exports = __webpack_exports__; 81 | 82 | })(); 83 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9wYWdlcy9hcGkvbWlkZGxld2FyZS9jaGVja0F1dGhTZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0Ly4vcGFnZXMvYXBpL3Byb3RlY3RlZFJvdXRlLmpzIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImpzb253ZWJ0b2tlblwiIl0sIm5hbWVzIjpbImNoZWNrQXV0aCIsImhhbmRsZXIiLCJyZXEiLCJyZXMiLCJhdXRob3JpemF0aW9uIiwiaGVhZGVycyIsIkVycm9yIiwidG9rZW4iLCJzcGxpdCIsInZlcmlmeSIsInByb2Nlc3MiLCJlbnYiLCJBQ0NFU1NfVE9LRU5fU0VDUkVUIiwiZSIsImNvbnNvbGUiLCJsb2ciLCJzdGF0dXMiLCJzZW5kIiwicHJvdGVjdGVkUm91dGUiLCJtZXRob2QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUlDLE9BQUQsSUFBYTtBQUMzQixTQUFPLE9BQU9DLEdBQVAsRUFBWUMsR0FBWixLQUFvQjtBQUN2QixRQUFJO0FBQ0EsWUFBTUMsYUFBYSxHQUFHRixHQUFHLENBQUNHLE9BQUosQ0FBWSxlQUFaLENBQXRCO0FBQ0EsVUFBSSxDQUFDRCxhQUFMLEVBQW9CLE1BQU0sSUFBSUUsS0FBSixDQUFVLG1CQUFWLENBQU47QUFFcEIsWUFBTUMsS0FBSyxHQUFHSCxhQUFhLENBQUNJLEtBQWQsQ0FBb0IsR0FBcEIsRUFBeUIsQ0FBekIsQ0FBZDtBQUNBQywwREFBTSxDQUFDRixLQUFELEVBQVFHLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxtQkFBcEIsQ0FBTjtBQUVBLGFBQU9YLE9BQU8sQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLENBQWQ7QUFDSCxLQVJELENBUUUsT0FBT1UsQ0FBUCxFQUFVO0FBQ1JDLGFBQU8sQ0FBQ0MsR0FBUixDQUFZRixDQUFaO0FBQ0FWLFNBQUcsQ0FBQ2EsTUFBSixDQUFXLEdBQVgsRUFBZ0JDLElBQWhCO0FBQ0g7QUFDSixHQWJEO0FBY0gsQ0FmRDs7QUFpQkEsK0RBQWVqQixTQUFmLEU7Ozs7Ozs7Ozs7Ozs7QUNuQkE7O0FBRUEsTUFBTWtCLGNBQWMsR0FBRyxPQUFPaEIsR0FBUCxFQUFZQyxHQUFaLEtBQW9CO0FBQ3ZDLE1BQUdELEdBQUcsQ0FBQ2lCLE1BQUosS0FBZSxLQUFsQixFQUF5QjtBQUNyQjtBQUNBaEIsT0FBRyxDQUFDYyxJQUFKLENBQVMseUJBQVQ7QUFDSDtBQUNKLENBTEQsQyxDQVFBOzs7QUFDQSwrREFBZWpCLG9FQUFTLENBQUNrQixjQUFELENBQXhCLEU7Ozs7Ozs7Ozs7O0FDWEEsMEMiLCJmaWxlIjoicGFnZXMvYXBpL3Byb3RlY3RlZFJvdXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmVyaWZ5IH0gZnJvbSAnanNvbndlYnRva2VuJ1xyXG5cclxuY29uc3QgY2hlY2tBdXRoID0gKGhhbmRsZXIpID0+IHtcclxuICAgIHJldHVybiBhc3luYyAocmVxLCByZXMpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uID0gcmVxLmhlYWRlcnNbXCJhdXRob3JpemF0aW9uXCJdXHJcbiAgICAgICAgICAgIGlmICghYXV0aG9yaXphdGlvbikgdGhyb3cgbmV3IEVycm9yKFwibm90IGF1dGhlbnRpY2F0ZWRcIilcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYXV0aG9yaXphdGlvbi5zcGxpdChcIiBcIilbMV1cclxuICAgICAgICAgICAgdmVyaWZ5KHRva2VuLCBwcm9jZXNzLmVudi5BQ0NFU1NfVE9LRU5fU0VDUkVUKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVyKHJlcSwgcmVzKVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZSlcclxuICAgICAgICAgICAgcmVzLnN0YXR1cyg0MDEpLnNlbmQoKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2hlY2tBdXRoIiwiaW1wb3J0IGNoZWNrQXV0aCBmcm9tICcuL21pZGRsZXdhcmUvY2hlY2tBdXRoU2VydmVyJ1xyXG5cclxuY29uc3QgcHJvdGVjdGVkUm91dGUgPSBhc3luYyAocmVxLCByZXMpID0+IHtcclxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdHRVQnKSB7XHJcbiAgICAgICAgLy9zZWNyZXQgZGF0YVxyXG4gICAgICAgIHJlcy5zZW5kKCdIZXksIGtlZXAgaXQgaW4gc2VjcmV0IScpXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vL2F1dGhlbnRpY2F0aW9uIG1pZGRsZXdhcmVcclxuZXhwb3J0IGRlZmF1bHQgY2hlY2tBdXRoKHByb3RlY3RlZFJvdXRlKSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImpzb253ZWJ0b2tlblwiKTs7Il0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /.next/server/pages/api/refresh_token.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/api/refresh_token"; 4 | exports.ids = ["pages/api/refresh_token"]; 5 | exports.modules = { 6 | 7 | /***/ "./functions/auth.js": 8 | /*!***************************!*\ 9 | !*** ./functions/auth.js ***! 10 | \***************************/ 11 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 12 | 13 | "use strict"; 14 | __webpack_require__.r(__webpack_exports__); 15 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 16 | /* harmony export */ "refreshToken": function() { return /* binding */ refreshToken; }, 17 | /* harmony export */ "createAccessToken": function() { return /* binding */ createAccessToken; }, 18 | /* harmony export */ "createRefreshToken": function() { return /* binding */ createRefreshToken; }, 19 | /* harmony export */ "sendRefreshToken": function() { return /* binding */ sendRefreshToken; } 20 | /* harmony export */ }); 21 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ "jsonwebtoken"); 22 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__); 23 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cookie */ "cookie"); 24 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cookie__WEBPACK_IMPORTED_MODULE_1__); 25 | /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./store/index.js"); 26 | 27 | 28 | 29 | const refreshToken = () => { 30 | return fetch('/api/refresh_token', { 31 | method: "POST", 32 | credentials: "include" 33 | }).then(res => res.json()).then(data => { 34 | return data; 35 | }); 36 | }; 37 | const createAccessToken = user => { 38 | return (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.sign)({ 39 | userId: user.id 40 | }, process.env.ACCESS_TOKEN_SECRET, { 41 | expiresIn: '15m' 42 | }); 43 | }; 44 | const createRefreshToken = user => { 45 | return (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.sign)({ 46 | userId: user.id 47 | }, process.env.REFRESH_TOKEN_SECRET, { 48 | expiresIn: "7d" 49 | }); 50 | }; 51 | const sendRefreshToken = (res, token) => { 52 | res.setHeader('Set-Cookie', cookie__WEBPACK_IMPORTED_MODULE_1___default().serialize('refreshToken', token, { 53 | httpOnly: true, 54 | maxAge: 60 * 60 * 24 * 7, 55 | path: '/' 56 | })); 57 | }; 58 | 59 | /***/ }), 60 | 61 | /***/ "./functions/initPrisma.js": 62 | /*!*********************************!*\ 63 | !*** ./functions/initPrisma.js ***! 64 | \*********************************/ 65 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 66 | 67 | "use strict"; 68 | __webpack_require__.r(__webpack_exports__); 69 | /* harmony import */ var _prisma_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @prisma/client */ "@prisma/client"); 70 | /* harmony import */ var _prisma_client__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_prisma_client__WEBPACK_IMPORTED_MODULE_0__); 71 | 72 | const Prisma = new _prisma_client__WEBPACK_IMPORTED_MODULE_0__.PrismaClient(); 73 | /* harmony default export */ __webpack_exports__["default"] = (Prisma); 74 | 75 | /***/ }), 76 | 77 | /***/ "./pages/api/refresh_token.js": 78 | /*!************************************!*\ 79 | !*** ./pages/api/refresh_token.js ***! 80 | \************************************/ 81 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 82 | 83 | "use strict"; 84 | __webpack_require__.r(__webpack_exports__); 85 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 86 | /* harmony export */ "default": function() { return /* binding */ refresh_token; } 87 | /* harmony export */ }); 88 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonwebtoken */ "jsonwebtoken"); 89 | /* harmony import */ var jsonwebtoken__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__); 90 | /* harmony import */ var _functions_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../functions/auth */ "./functions/auth.js"); 91 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! cookie */ "cookie"); 92 | /* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(cookie__WEBPACK_IMPORTED_MODULE_2__); 93 | /* harmony import */ var _functions_initPrisma__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../functions/initPrisma */ "./functions/initPrisma.js"); 94 | 95 | 96 | 97 | 98 | async function refresh_token(req, res) { 99 | if (req.method === 'POST') { 100 | if (!req.headers.cookie) return res.send({ 101 | ok: false, 102 | accessToken: '' 103 | }); 104 | const getToken = cookie__WEBPACK_IMPORTED_MODULE_2___default().parse(req.headers.cookie); 105 | const token = getToken.refreshToken; 106 | if (!token) return res.send({ 107 | ok: false, 108 | accessToken: '' 109 | }); 110 | let payload = null; 111 | 112 | try { 113 | payload = (0,jsonwebtoken__WEBPACK_IMPORTED_MODULE_0__.verify)(token, process.env.REFRESH_TOKEN_SECRET); 114 | const user = await _functions_initPrisma__WEBPACK_IMPORTED_MODULE_3__.default.user.findUnique({ 115 | where: { 116 | id: payload.userId 117 | }, 118 | select: { 119 | id: true, 120 | firstName: true, 121 | secondName: true, 122 | email: true 123 | } 124 | }); 125 | if (!user) return res.send({ 126 | ok: false, 127 | accessToken: '' 128 | }); 129 | (0,_functions_auth__WEBPACK_IMPORTED_MODULE_1__.sendRefreshToken)(res, (0,_functions_auth__WEBPACK_IMPORTED_MODULE_1__.createRefreshToken)(user)); 130 | const accessToken = (0,_functions_auth__WEBPACK_IMPORTED_MODULE_1__.createAccessToken)(user); 131 | return res.send({ 132 | ok: true, 133 | accessToken, 134 | user 135 | }); 136 | } catch (e) { 137 | console.log(e); 138 | return res.send({ 139 | ok: false, 140 | accessToken: '' 141 | }); 142 | } 143 | } else { 144 | res.status(500).send(); 145 | } 146 | } 147 | 148 | /***/ }), 149 | 150 | /***/ "./store/index.js": 151 | /*!************************!*\ 152 | !*** ./store/index.js ***! 153 | \************************/ 154 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 155 | 156 | "use strict"; 157 | __webpack_require__.r(__webpack_exports__); 158 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 159 | /* harmony export */ "useStore": function() { return /* binding */ useStore; } 160 | /* harmony export */ }); 161 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ "zustand"); 162 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zustand__WEBPACK_IMPORTED_MODULE_0__); 163 | 164 | const useStore = zustand__WEBPACK_IMPORTED_MODULE_0___default()(set => ({ 165 | accessToken: null, 166 | user: {}, 167 | setAccessToken: input => set(state => ({ 168 | accessToken: input 169 | })), 170 | removeAccessToken: () => set({ 171 | accessToken: null 172 | }), 173 | setUser: input => set(state => ({ 174 | user: input 175 | })), 176 | removeUser: () => set({ 177 | user: null 178 | }) 179 | })); 180 | 181 | /***/ }), 182 | 183 | /***/ "@prisma/client": 184 | /*!*********************************!*\ 185 | !*** external "@prisma/client" ***! 186 | \*********************************/ 187 | /***/ (function(module) { 188 | 189 | "use strict"; 190 | module.exports = require("@prisma/client");; 191 | 192 | /***/ }), 193 | 194 | /***/ "cookie": 195 | /*!*************************!*\ 196 | !*** external "cookie" ***! 197 | \*************************/ 198 | /***/ (function(module) { 199 | 200 | "use strict"; 201 | module.exports = require("cookie");; 202 | 203 | /***/ }), 204 | 205 | /***/ "jsonwebtoken": 206 | /*!*******************************!*\ 207 | !*** external "jsonwebtoken" ***! 208 | \*******************************/ 209 | /***/ (function(module) { 210 | 211 | "use strict"; 212 | module.exports = require("jsonwebtoken");; 213 | 214 | /***/ }), 215 | 216 | /***/ "zustand": 217 | /*!**************************!*\ 218 | !*** external "zustand" ***! 219 | \**************************/ 220 | /***/ (function(module) { 221 | 222 | "use strict"; 223 | module.exports = require("zustand");; 224 | 225 | /***/ }) 226 | 227 | }; 228 | ; 229 | 230 | // load runtime 231 | var __webpack_require__ = require("../../webpack-runtime.js"); 232 | __webpack_require__.C(exports); 233 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 234 | var __webpack_exports__ = (__webpack_exec__("./pages/api/refresh_token.js")); 235 | module.exports = __webpack_exports__; 236 | 237 | })(); 238 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9mdW5jdGlvbnMvYXV0aC5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9mdW5jdGlvbnMvaW5pdFByaXNtYS5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9wYWdlcy9hcGkvcmVmcmVzaF90b2tlbi5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9zdG9yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvZXh0ZXJuYWwgXCJAcHJpc21hL2NsaWVudFwiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImNvb2tpZVwiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcImpzb253ZWJ0b2tlblwiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcInp1c3RhbmRcIiJdLCJuYW1lcyI6WyJyZWZyZXNoVG9rZW4iLCJmZXRjaCIsIm1ldGhvZCIsImNyZWRlbnRpYWxzIiwidGhlbiIsInJlcyIsImpzb24iLCJkYXRhIiwiY3JlYXRlQWNjZXNzVG9rZW4iLCJ1c2VyIiwic2lnbiIsInVzZXJJZCIsImlkIiwicHJvY2VzcyIsImVudiIsIkFDQ0VTU19UT0tFTl9TRUNSRVQiLCJleHBpcmVzSW4iLCJjcmVhdGVSZWZyZXNoVG9rZW4iLCJSRUZSRVNIX1RPS0VOX1NFQ1JFVCIsInNlbmRSZWZyZXNoVG9rZW4iLCJ0b2tlbiIsInNldEhlYWRlciIsImNvb2tpZSIsImh0dHBPbmx5IiwibWF4QWdlIiwicGF0aCIsIlByaXNtYSIsIlByaXNtYUNsaWVudCIsInJlZnJlc2hfdG9rZW4iLCJyZXEiLCJoZWFkZXJzIiwic2VuZCIsIm9rIiwiYWNjZXNzVG9rZW4iLCJnZXRUb2tlbiIsInBheWxvYWQiLCJ2ZXJpZnkiLCJ3aGVyZSIsInNlbGVjdCIsImZpcnN0TmFtZSIsInNlY29uZE5hbWUiLCJlbWFpbCIsImUiLCJjb25zb2xlIiwibG9nIiwic3RhdHVzIiwidXNlU3RvcmUiLCJjcmVhdGUiLCJzZXQiLCJzZXRBY2Nlc3NUb2tlbiIsImlucHV0Iiwic3RhdGUiLCJyZW1vdmVBY2Nlc3NUb2tlbiIsInNldFVzZXIiLCJyZW1vdmVVc2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBRU8sTUFBTUEsWUFBWSxHQUFHLE1BQU07QUFDOUIsU0FBT0MsS0FBSyxDQUFDLG9CQUFELEVBQXVCO0FBQy9CQyxVQUFNLEVBQUUsTUFEdUI7QUFFL0JDLGVBQVcsRUFBRTtBQUZrQixHQUF2QixDQUFMLENBR0pDLElBSEksQ0FHQ0MsR0FBRyxJQUFJQSxHQUFHLENBQUNDLElBQUosRUFIUixFQUlORixJQUpNLENBSURHLElBQUksSUFBSTtBQUFDLFdBQU9BLElBQVA7QUFBWSxHQUpwQixDQUFQO0FBS0gsQ0FOTTtBQVFBLE1BQU1DLGlCQUFpQixHQUFJQyxJQUFELElBQVU7QUFDdkMsU0FBT0Msa0RBQUksQ0FBQztBQUFFQyxVQUFNLEVBQUVGLElBQUksQ0FBQ0c7QUFBZixHQUFELEVBQXNCQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsbUJBQWxDLEVBQXVEO0FBQ2hFQyxhQUFTLEVBQUU7QUFEcUQsR0FBdkQsQ0FBWDtBQUdELENBSkk7QUFNRSxNQUFNQyxrQkFBa0IsR0FBSVIsSUFBRCxJQUFVO0FBQzFDLFNBQU9DLGtEQUFJLENBQ1A7QUFBRUMsVUFBTSxFQUFFRixJQUFJLENBQUNHO0FBQWYsR0FETyxFQUNhQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUksb0JBRHpCLEVBQzhDO0FBQ2pERixhQUFTLEVBQUU7QUFEc0MsR0FEOUMsQ0FBWDtBQUtILENBTlE7QUFRRixNQUFNRyxnQkFBZ0IsR0FBRyxDQUFDZCxHQUFELEVBQUtlLEtBQUwsS0FBZTtBQUMzQ2YsS0FBRyxDQUFDZ0IsU0FBSixDQUFjLFlBQWQsRUFBMkJDLHVEQUFBLENBQWlCLGNBQWpCLEVBQWdDRixLQUFoQyxFQUF1QztBQUM5REcsWUFBUSxFQUFFLElBRG9EO0FBRTlEQyxVQUFNLEVBQUUsS0FB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TyxFQUFHSCxLQUFELElBQVdGLEdBQUcsQ0FBRUcsS0FBRCxLQUFZO0FBQUUxQyxRQUFJLEVBQUN5QztBQUFQLEdBQVosQ0FBRCxDQUxZO0FBTW5DSSxZQUFVLEVBQUUsTUFBTU4sR0FBRyxDQUFDO0FBQUN2QyxRQUFJLEVBQUM7QUFBTixHQUFEO0FBTmMsQ0FBTCxDQUFKLENBQXZCLEM7Ozs7Ozs7Ozs7O0FDRlAsNEM7Ozs7Ozs7Ozs7O0FDQUEsb0M7Ozs7Ozs7Ozs7O0FDQUEsMEM7Ozs7Ozs7Ozs7O0FDQUEscUMiLCJmaWxlIjoicGFnZXMvYXBpL3JlZnJlc2hfdG9rZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3NpZ259IGZyb20gJ2pzb253ZWJ0b2tlbidcclxuaW1wb3J0IGNvb2tpZSBmcm9tICdjb29raWUnXHJcbmltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSBcIi4uL3N0b3JlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgcmVmcmVzaFRva2VuID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIGZldGNoKCcvYXBpL3JlZnJlc2hfdG9rZW4nLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCJcclxuICAgIH0pLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpXHJcbiAgICAudGhlbihkYXRhID0+IHtyZXR1cm4gZGF0YX0pXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVBY2Nlc3NUb2tlbiA9ICh1c2VyKSA9PiB7XHJcbiAgICByZXR1cm4gc2lnbih7IHVzZXJJZDogdXNlci5pZCB9LCBwcm9jZXNzLmVudi5BQ0NFU1NfVE9LRU5fU0VDUkVULCB7XHJcbiAgICAgIGV4cGlyZXNJbjogJzE1bSdcclxuICAgIH0pO1xyXG4gIH07XHJcbiAgXHJcbiAgZXhwb3J0IGNvbnN0IGNyZWF0ZVJlZnJlc2hUb2tlbiA9ICh1c2VyKSA9PiB7XHJcbiAgICByZXR1cm4gc2lnbihcclxuICAgICAgICB7IHVzZXJJZDogdXNlci5pZCB9LHByb2Nlc3MuZW52LlJFRlJFU0hfVE9LRU5fU0VDUkVULHtcclxuICAgICAgICAgICAgZXhwaXJlc0luOiBcIjdkXCJcclxuICAgICAgICB9XHJcbiAgICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlbmRSZWZyZXNoVG9rZW4gPSAocmVzLHRva2VuKSA9PiB7XHJcbiAgICByZXMuc2V0SGVhZGVyKCdTZXQtQ29va2llJyxjb29raWUuc2VyaWFsaXplKCdyZWZyZXNoVG9rZW4nLHRva2VuLCB7XHJcbiAgICAgICAgaHR0cE9ubHk6IHRydWUsXHJcbiAgICAgICAgbWF4QWdlOiA2MCAqIDYwICogMjQgKiA3LFxyXG4gICAgICAgIHBhdGg6ICcvJ1xyXG4gICAgfSkpXHJcbn07IiwiaW1wb3J0IHsgUHJpc21hQ2xpZW50IH0gZnJvbSAnQHByaXNtYS9jbGllbnQnXHJcbmNvbnN0IFByaXNtYSA9IG5ldyBQcmlzbWFDbGllbnQoKVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJpc21hIiwiaW1wb3J0IHsgdmVyaWZ5IH0gZnJvbSAnanNvbndlYnRva2VuJ1xyXG5pbXBvcnQge2NyZWF0ZUFjY2Vzc1Rva2VuLCBzZW5kUmVmcmVzaFRva2VuLCBjcmVhdGVSZWZyZXNoVG9rZW59IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9hdXRoJ1xyXG5pbXBvcnQgY29va2llIGZyb20gJ2Nvb2tpZSdcclxuaW1wb3J0IFByaXNtYSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvaW5pdFByaXNtYSdcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiByZWZyZXNoX3Rva2VuKHJlcSwgcmVzKSB7XHJcbiAgICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XHJcbiAgICAgICAgaWYoIXJlcS5oZWFkZXJzLmNvb2tpZSkgcmV0dXJuIHJlcy5zZW5kKHtvazogZmFsc2UsYWNjZXNzVG9rZW46ICcnfSlcclxuICAgICAgICBjb25zdCBnZXRUb2tlbiA9IGNvb2tpZS5wYXJzZShyZXEuaGVhZGVycy5jb29raWUpXHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSBnZXRUb2tlbi5yZWZyZXNoVG9rZW5cclxuXHJcbiAgICAgICAgaWYoIXRva2VuKSByZXR1cm4gcmVzLnNlbmQoe29rOiBmYWxzZSxhY2Nlc3NUb2tlbjogJyd9KVxyXG4gICAgICAgIGxldCBwYXlsb2FkID0gbnVsbFxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwYXlsb2FkID0gdmVyaWZ5KHRva2VuLCBwcm9jZXNzLmVudi5SRUZSRVNIX1RPS0VOX1NFQ1JFVClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBQcmlzbWEudXNlci5maW5kVW5pcXVlKHtcclxuICAgICAgICAgICAgICAgIHdoZXJlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHBheWxvYWQudXNlcklkXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZE5hbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGlmICghdXNlcikgcmV0dXJuIHJlcy5zZW5kKHtvazogZmFsc2UsYWNjZXNzVG9rZW46ICcnfSlcclxuXHJcbiAgICAgICAgICAgIHNlbmRSZWZyZXNoVG9rZW4ocmVzLCBjcmVhdGVSZWZyZXNoVG9rZW4odXNlcikpO1xyXG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGNyZWF0ZUFjY2Vzc1Rva2VuKHVzZXIpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzLnNlbmQoeyBvazogdHJ1ZSwgYWNjZXNzVG9rZW4sdXNlciB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuc2VuZCh7b2s6IGZhbHNlLGFjY2Vzc1Rva2VuOiAnJ30pXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5zZW5kKClcclxuICAgIH1cclxuICB9IiwiaW1wb3J0IGNyZWF0ZSBmcm9tICd6dXN0YW5kJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHVzZVN0b3JlID0gY3JlYXRlKHNldCA9PiAoe1xyXG4gICAgYWNjZXNzVG9rZW46IG51bGwsXHJcbiAgICB1c2VyOnt9LFxyXG4gICAgc2V0QWNjZXNzVG9rZW46IChpbnB1dCkgPT4gc2V0KChzdGF0ZSkgPT4gKHsgYWNjZXNzVG9rZW46IGlucHV0IH0pKSxcclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuOiAoKSA9PiBzZXQoeyBhY2Nlc3NUb2tlbjogbnVsbCB9KSxcclxuICAgIHNldFVzZXI6IChpbnB1dCkgPT4gc2V0KChzdGF0ZSkgPT4gKHsgdXNlcjppbnB1dCB9KSksXHJcbiAgICByZW1vdmVVc2VyOiAoKSA9PiBzZXQoe3VzZXI6bnVsbH0pXHJcbn0pKVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAcHJpc21hL2NsaWVudFwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29va2llXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJqc29ud2VidG9rZW5cIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInp1c3RhbmRcIik7OyJdLCJzb3VyY2VSb290IjoiIn0= -------------------------------------------------------------------------------- /.next/server/pages/protected.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var exports = {}; 3 | exports.id = "pages/protected"; 4 | exports.ids = ["pages/protected"]; 5 | exports.modules = { 6 | 7 | /***/ "./functions/checkAuthClient.js": 8 | /*!**************************************!*\ 9 | !*** ./functions/checkAuthClient.js ***! 10 | \**************************************/ 11 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 12 | 13 | "use strict"; 14 | __webpack_require__.r(__webpack_exports__); 15 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime"); 16 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__); 17 | /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./store/index.js"); 18 | /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/router */ "next/router"); 19 | /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_router__WEBPACK_IMPORTED_MODULE_2__); 20 | 21 | var _jsxFileName = "D:\\Code\\Prisma\\test\\functions\\checkAuthClient.js"; 22 | 23 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 24 | 25 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 26 | 27 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 28 | 29 | 30 | 31 | 32 | const withAuth = Component => { 33 | const Auth = props => { 34 | const store = (0,_store__WEBPACK_IMPORTED_MODULE_1__.useStore)(); 35 | const router = (0,next_router__WEBPACK_IMPORTED_MODULE_2__.useRouter)(); 36 | 37 | if (store.accessToken !== null) { 38 | return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Component, _objectSpread({}, props), void 0, false, { 39 | fileName: _jsxFileName, 40 | lineNumber: 10, 41 | columnNumber: 17 42 | }, undefined); 43 | } else { 44 | router.replace("/"); 45 | return null; 46 | } 47 | }; 48 | 49 | return Auth; 50 | }; 51 | 52 | /* harmony default export */ __webpack_exports__["default"] = (withAuth); 53 | 54 | /***/ }), 55 | 56 | /***/ "./pages/protected.js": 57 | /*!****************************!*\ 58 | !*** ./pages/protected.js ***! 59 | \****************************/ 60 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 61 | 62 | "use strict"; 63 | __webpack_require__.r(__webpack_exports__); 64 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ "react/jsx-dev-runtime"); 65 | /* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__); 66 | /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./store/index.js"); 67 | /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); 68 | /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); 69 | /* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! swr */ "swr"); 70 | /* harmony import */ var swr__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(swr__WEBPACK_IMPORTED_MODULE_3__); 71 | /* harmony import */ var _functions_checkAuthClient__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../functions/checkAuthClient */ "./functions/checkAuthClient.js"); 72 | /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! axios */ "axios"); 73 | /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_5__); 74 | 75 | var _jsxFileName = "D:\\Code\\Prisma\\test\\pages\\protected.js"; 76 | 77 | 78 | 79 | 80 | 81 | 82 | function Protected() { 83 | const store = (0,_store__WEBPACK_IMPORTED_MODULE_1__.useStore)(); 84 | const { 85 | 0: secret, 86 | 1: setSecret 87 | } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null); 88 | const { 89 | 0: isError, 90 | 1: setError 91 | } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(null); 92 | const { 93 | 0: loading, 94 | 1: setLoading 95 | } = (0,react__WEBPACK_IMPORTED_MODULE_2__.useState)(true); 96 | 97 | const fetcher = async () => { 98 | return await axios__WEBPACK_IMPORTED_MODULE_5___default().get('/api/protectedRoute', { 99 | headers: { 100 | authorization: `Bearer ${store.accessToken}` 101 | } 102 | }); 103 | }; 104 | 105 | const { 106 | data, 107 | error 108 | } = swr__WEBPACK_IMPORTED_MODULE_3___default()('/api/', fetcher); 109 | (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(() => { 110 | if (data) setSecret(data.data); 111 | if (error) setError(error); 112 | setLoading(false); 113 | }, [data, error]); 114 | 115 | if (loading) { 116 | return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", { 117 | children: "Loading..." 118 | }, void 0, false, { 119 | fileName: _jsxFileName, 120 | lineNumber: 30, 121 | columnNumber: 17 122 | }, this); 123 | } else { 124 | if (isError) { 125 | return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", { 126 | children: "YO! YOU ARE NOT AUTHENTICATED,GET AWAY FROM HERE!!!" 127 | }, void 0, false, { 128 | fileName: _jsxFileName, 129 | lineNumber: 34, 130 | columnNumber: 17 131 | }, this); 132 | } else { 133 | return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)("div", { 134 | children: ["Welcome to protected Page, ", secret] 135 | }, void 0, true, { 136 | fileName: _jsxFileName, 137 | lineNumber: 38, 138 | columnNumber: 17 139 | }, this); 140 | } 141 | } 142 | } 143 | 144 | /* harmony default export */ __webpack_exports__["default"] = ((0,_functions_checkAuthClient__WEBPACK_IMPORTED_MODULE_4__.default)(Protected)); 145 | 146 | /***/ }), 147 | 148 | /***/ "./store/index.js": 149 | /*!************************!*\ 150 | !*** ./store/index.js ***! 151 | \************************/ 152 | /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 153 | 154 | "use strict"; 155 | __webpack_require__.r(__webpack_exports__); 156 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { 157 | /* harmony export */ "useStore": function() { return /* binding */ useStore; } 158 | /* harmony export */ }); 159 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ "zustand"); 160 | /* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(zustand__WEBPACK_IMPORTED_MODULE_0__); 161 | 162 | const useStore = zustand__WEBPACK_IMPORTED_MODULE_0___default()(set => ({ 163 | accessToken: null, 164 | user: {}, 165 | setAccessToken: input => set(state => ({ 166 | accessToken: input 167 | })), 168 | removeAccessToken: () => set({ 169 | accessToken: null 170 | }), 171 | setUser: input => set(state => ({ 172 | user: input 173 | })), 174 | removeUser: () => set({ 175 | user: null 176 | }) 177 | })); 178 | 179 | /***/ }), 180 | 181 | /***/ "axios": 182 | /*!************************!*\ 183 | !*** external "axios" ***! 184 | \************************/ 185 | /***/ (function(module) { 186 | 187 | "use strict"; 188 | module.exports = require("axios");; 189 | 190 | /***/ }), 191 | 192 | /***/ "next/router": 193 | /*!******************************!*\ 194 | !*** external "next/router" ***! 195 | \******************************/ 196 | /***/ (function(module) { 197 | 198 | "use strict"; 199 | module.exports = require("next/router");; 200 | 201 | /***/ }), 202 | 203 | /***/ "react": 204 | /*!************************!*\ 205 | !*** external "react" ***! 206 | \************************/ 207 | /***/ (function(module) { 208 | 209 | "use strict"; 210 | module.exports = require("react");; 211 | 212 | /***/ }), 213 | 214 | /***/ "react/jsx-dev-runtime": 215 | /*!****************************************!*\ 216 | !*** external "react/jsx-dev-runtime" ***! 217 | \****************************************/ 218 | /***/ (function(module) { 219 | 220 | "use strict"; 221 | module.exports = require("react/jsx-dev-runtime");; 222 | 223 | /***/ }), 224 | 225 | /***/ "swr": 226 | /*!**********************!*\ 227 | !*** external "swr" ***! 228 | \**********************/ 229 | /***/ (function(module) { 230 | 231 | "use strict"; 232 | module.exports = require("swr");; 233 | 234 | /***/ }), 235 | 236 | /***/ "zustand": 237 | /*!**************************!*\ 238 | !*** external "zustand" ***! 239 | \**************************/ 240 | /***/ (function(module) { 241 | 242 | "use strict"; 243 | module.exports = require("zustand");; 244 | 245 | /***/ }) 246 | 247 | }; 248 | ; 249 | 250 | // load runtime 251 | var __webpack_require__ = require("../webpack-runtime.js"); 252 | __webpack_require__.C(exports); 253 | var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 254 | var __webpack_exports__ = (__webpack_exec__("./pages/protected.js")); 255 | module.exports = __webpack_exports__; 256 | 257 | })(); 258 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9mdW5jdGlvbnMvY2hlY2tBdXRoQ2xpZW50LmpzIiwid2VicGFjazovL3ByaXNtbmV4dC8uL3BhZ2VzL3Byb3RlY3RlZC5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvLi9zdG9yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9wcmlzbW5leHQvZXh0ZXJuYWwgXCJheGlvc1wiIiwid2VicGFjazovL3ByaXNtbmV4dC9leHRlcm5hbCBcIm5leHQvcm91dGVyXCIiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9wcmlzbW5leHQvZXh0ZXJuYWwgXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly9wcmlzbW5leHQvZXh0ZXJuYWwgXCJzd3JcIiIsIndlYnBhY2s6Ly9wcmlzbW5leHQvZXh0ZXJuYWwgXCJ6dXN0YW5kXCIiXSwibmFtZXMiOlsid2l0aEF1dGgiLCJDb21wb25lbnQiLCJBdXRoIiwicHJvcHMiLCJzdG9yZSIsInVzZVN0b3JlIiwicm91dGVyIiwidXNlUm91dGVyIiwiYWNjZXNzVG9rZW4iLCJyZXBsYWNlIiwiUHJvdGVjdGVkIiwic2VjcmV0Iiwic2V0U2VjcmV0IiwidXNlU3RhdGUiLCJpc0Vycm9yIiwic2V0RXJyb3IiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsImZldGNoZXIiLCJheGlvcyIsImhlYWRlcnMiLCJhdXRob3JpemF0aW9uIiwiZGF0YSIsImVycm9yIiwidXNlU1dSIiwidXNlRWZmZWN0IiwiY2hlY2tBdXRoQ2xpZW50IiwiY3JlYXRlIiwic2V0IiwidXNlciIsInNldEFjY2Vzc1Rva2VuIiwiaW5wdXQiLCJzdGF0ZSIsInJlbW92ZUFjY2Vzc1Rva2VuIiwic2V0VXNlciIsInJlbW92ZVVzZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLE1BQU1BLFFBQVEsR0FBR0MsU0FB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QixDOzs7Ozs7Ozs7OztBQ0ZQLG1DOzs7Ozs7Ozs7OztBQ0FBLHlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLG1EOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLHFDIiwiZmlsZSI6InBhZ2VzL3Byb3RlY3RlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSBcIi4uL3N0b3JlXCI7XHJcbmltcG9ydCB7dXNlUm91dGVyfSBmcm9tICduZXh0L3JvdXRlcidcclxuXHJcbmNvbnN0IHdpdGhBdXRoID0gQ29tcG9uZW50ID0+IHtcclxuICAgIGNvbnN0IEF1dGggPSAocHJvcHMpID0+IHtcclxuICAgICAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKClcclxuICAgICAgICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxyXG4gICAgICAgIGlmKHN0b3JlLmFjY2Vzc1Rva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvdXRlci5yZXBsYWNlKFwiL1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBBdXRoO1xyXG4gIH07XHJcbiAgXHJcbiAgZXhwb3J0IGRlZmF1bHQgd2l0aEF1dGg7IiwiaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICcuLi9zdG9yZSdcclxuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCdcclxuaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXHJcbmltcG9ydCBjaGVja0F1dGhDbGllbnQgZnJvbSAnLi4vZnVuY3Rpb25zL2NoZWNrQXV0aENsaWVudCdcclxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xyXG5cclxuZnVuY3Rpb24gUHJvdGVjdGVkKCkge1xyXG4gICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAgICBjb25zdCBbc2VjcmV0LCBzZXRTZWNyZXRdID0gdXNlU3RhdGUobnVsbClcclxuICAgIGNvbnN0IFtpc0Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKVxyXG4gICAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSlcclxuICAgIFxyXG4gICAgY29uc3QgZmV0Y2hlciA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgYXhpb3MuZ2V0KCcvYXBpL3Byb3RlY3RlZFJvdXRlJywge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c3RvcmUuYWNjZXNzVG9rZW59YFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvJywgZmV0Y2hlcilcclxuICAgIFxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZihkYXRhKSBzZXRTZWNyZXQoZGF0YS5kYXRhKVxyXG4gICAgICAgIGlmIChlcnJvcikgc2V0RXJyb3IoZXJyb3IpXHJcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcclxuICAgIH0sW2RhdGEsZXJyb3JdKVxyXG5cclxuICAgIGlmKGxvYWRpbmcpIHtcclxuICAgICAgICByZXR1cm4gKDxkaXY+TG9hZGluZy4uLjwvZGl2PilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYoaXNFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgPGRpdj5ZTyEgWU9VIEFSRSBOT1QgQVVUSEVOVElDQVRFRCxHRVQgQVdBWSBGUk9NIEhFUkUhISE8L2Rpdj5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFdlbGNvbWUgdG8gcHJvdGVjdGVkIFBhZ2UsIHtzZWNyZXR9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2hlY2tBdXRoQ2xpZW50KFByb3RlY3RlZClcclxuIiwiaW1wb3J0IGNyZWF0ZSBmcm9tICd6dXN0YW5kJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHVzZVN0b3JlID0gY3JlYXRlKHNldCA9PiAoe1xyXG4gICAgYWNjZXNzVG9rZW46IG51bGwsXHJcbiAgICB1c2VyOnt9LFxyXG4gICAgc2V0QWNjZXNzVG9rZW46IChpbnB1dCkgPT4gc2V0KChzdGF0ZSkgPT4gKHsgYWNjZXNzVG9rZW46IGlucHV0IH0pKSxcclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuOiAoKSA9PiBzZXQoeyBhY2Nlc3NUb2tlbjogbnVsbCB9KSxcclxuICAgIHNldFVzZXI6IChpbnB1dCkgPT4gc2V0KChzdGF0ZSkgPT4gKHsgdXNlcjppbnB1dCB9KSksXHJcbiAgICByZW1vdmVVc2VyOiAoKSA9PiBzZXQoe3VzZXI6bnVsbH0pXHJcbn0pKVxyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJheGlvc1wiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9yb3V0ZXJcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtZGV2LXJ1bnRpbWVcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN3clwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwienVzdGFuZFwiKTs7Il0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /.next/server/webpack-runtime.js: -------------------------------------------------------------------------------- 1 | /******/ (function() { // webpackBootstrap 2 | /******/ "use strict"; 3 | /******/ var __webpack_modules__ = ({}); 4 | /************************************************************************/ 5 | /******/ // The module cache 6 | /******/ var __webpack_module_cache__ = {}; 7 | /******/ 8 | /******/ // The require function 9 | /******/ function __webpack_require__(moduleId) { 10 | /******/ // Check if module is in cache 11 | /******/ var cachedModule = __webpack_module_cache__[moduleId]; 12 | /******/ if (cachedModule !== undefined) { 13 | /******/ return cachedModule.exports; 14 | /******/ } 15 | /******/ // Create a new module (and put it into the cache) 16 | /******/ var module = __webpack_module_cache__[moduleId] = { 17 | /******/ // no module.id needed 18 | /******/ // no module.loaded needed 19 | /******/ exports: {} 20 | /******/ }; 21 | /******/ 22 | /******/ // Execute the module function 23 | /******/ var threw = true; 24 | /******/ try { 25 | /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 26 | /******/ threw = false; 27 | /******/ } finally { 28 | /******/ if(threw) delete __webpack_module_cache__[moduleId]; 29 | /******/ } 30 | /******/ 31 | /******/ // Return the exports of the module 32 | /******/ return module.exports; 33 | /******/ } 34 | /******/ 35 | /******/ // expose the modules object (__webpack_modules__) 36 | /******/ __webpack_require__.m = __webpack_modules__; 37 | /******/ 38 | /************************************************************************/ 39 | /******/ /* webpack/runtime/compat get default export */ 40 | /******/ !function() { 41 | /******/ // getDefaultExport function for compatibility with non-harmony modules 42 | /******/ __webpack_require__.n = function(module) { 43 | /******/ var getter = module && module.__esModule ? 44 | /******/ function() { return module['default']; } : 45 | /******/ function() { return module; }; 46 | /******/ __webpack_require__.d(getter, { a: getter }); 47 | /******/ return getter; 48 | /******/ }; 49 | /******/ }(); 50 | /******/ 51 | /******/ /* webpack/runtime/define property getters */ 52 | /******/ !function() { 53 | /******/ // define getter functions for harmony exports 54 | /******/ __webpack_require__.d = function(exports, definition) { 55 | /******/ for(var key in definition) { 56 | /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 57 | /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 58 | /******/ } 59 | /******/ } 60 | /******/ }; 61 | /******/ }(); 62 | /******/ 63 | /******/ /* webpack/runtime/ensure chunk */ 64 | /******/ !function() { 65 | /******/ __webpack_require__.f = {}; 66 | /******/ // This file contains only the entry chunk. 67 | /******/ // The chunk loading function for additional chunks 68 | /******/ __webpack_require__.e = function(chunkId) { 69 | /******/ return Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) { 70 | /******/ __webpack_require__.f[key](chunkId, promises); 71 | /******/ return promises; 72 | /******/ }, [])); 73 | /******/ }; 74 | /******/ }(); 75 | /******/ 76 | /******/ /* webpack/runtime/get javascript chunk filename */ 77 | /******/ !function() { 78 | /******/ // This function allow to reference async chunks and sibling chunks for the entrypoint 79 | /******/ __webpack_require__.u = function(chunkId) { 80 | /******/ // return url for filenames based on template 81 | /******/ return undefined; 82 | /******/ }; 83 | /******/ }(); 84 | /******/ 85 | /******/ /* webpack/runtime/hasOwnProperty shorthand */ 86 | /******/ !function() { 87 | /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 88 | /******/ }(); 89 | /******/ 90 | /******/ /* webpack/runtime/make namespace object */ 91 | /******/ !function() { 92 | /******/ // define __esModule on exports 93 | /******/ __webpack_require__.r = function(exports) { 94 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 95 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 96 | /******/ } 97 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); 98 | /******/ }; 99 | /******/ }(); 100 | /******/ 101 | /******/ /* webpack/runtime/startup entrypoint */ 102 | /******/ !function() { 103 | /******/ __webpack_require__.X = function(result, chunkIds, fn) { 104 | /******/ // arguments: chunkIds, moduleId are deprecated 105 | /******/ var moduleId = chunkIds; 106 | /******/ if(!fn) chunkIds = result, fn = function() { return __webpack_require__(__webpack_require__.s = moduleId); }; 107 | /******/ chunkIds.map(__webpack_require__.e, __webpack_require__) 108 | /******/ var r = fn(); 109 | /******/ return r === undefined ? result : r; 110 | /******/ } 111 | /******/ }(); 112 | /******/ 113 | /******/ /* webpack/runtime/require chunk loading */ 114 | /******/ !function() { 115 | /******/ // no baseURI 116 | /******/ 117 | /******/ // object to store loaded chunks 118 | /******/ // "1" means "loaded", otherwise not loaded yet 119 | /******/ var installedChunks = { 120 | /******/ "webpack-runtime": 1 121 | /******/ }; 122 | /******/ 123 | /******/ // no on chunks loaded 124 | /******/ 125 | /******/ var installChunk = function(chunk) { 126 | /******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime; 127 | /******/ for(var moduleId in moreModules) { 128 | /******/ if(__webpack_require__.o(moreModules, moduleId)) { 129 | /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 130 | /******/ } 131 | /******/ } 132 | /******/ if(runtime) runtime(__webpack_require__); 133 | /******/ for(var i = 0; i < chunkIds.length; i++) 134 | /******/ installedChunks[chunkIds[i]] = 1; 135 | /******/ 136 | /******/ }; 137 | /******/ 138 | /******/ // require() chunk loading for javascript 139 | /******/ __webpack_require__.f.require = function(chunkId, promises) { 140 | /******/ // "1" is the signal for "already loaded" 141 | /******/ if(!installedChunks[chunkId]) { 142 | /******/ if("webpack-runtime" != chunkId) { 143 | /******/ installChunk(require("./" + __webpack_require__.u(chunkId))); 144 | /******/ } else installedChunks[chunkId] = 1; 145 | /******/ } 146 | /******/ }; 147 | /******/ 148 | /******/ module.exports = __webpack_require__; 149 | /******/ __webpack_require__.C = installChunk; 150 | /******/ 151 | /******/ // no HMR 152 | /******/ 153 | /******/ // no HMR manifest 154 | /******/ }(); 155 | /******/ 156 | /************************************************************************/ 157 | /******/ 158 | /******/ 159 | /******/ })() 160 | ; 161 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wcmlzbW5leHQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3ByaXNtbmV4dC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L3dlYnBhY2svcnVudGltZS9lbnN1cmUgY2h1bmsiLCJ3ZWJwYWNrOi8vcHJpc21uZXh0L3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9wcmlzbW5leHQvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9wcmlzbW5leHQvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9wcmlzbW5leHQvd2VicGFjay9ydW50aW1lL3N0YXJ0dXAgZW50cnlwb2ludCIsIndlYnBhY2s6Ly9wcmlzbW5leHQvd2VicGFjay9ydW50aW1lL3JlcXVpcmUgY2h1bmsgbG9hZGluZyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0EsRUFBRTtVQUNGO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOztVQUVBO1VBQ0E7Ozs7O1dDL0JBO1dBQ0E7V0FDQTtXQUNBLGNBQWMsMEJBQTBCLEVBQUU7V0FDMUMsY0FBYyxlQUFlO1dBQzdCLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxFQUFFO1dBQ0YsRTs7Ozs7V0NSQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLEU7Ozs7O1dDSkEsNkNBQTZDLHdEQUF3RCxFOzs7OztXQ0FyRztXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7Ozs7V0NOQTtXQUNBO1dBQ0E7V0FDQSw2Q0FBNkMsOERBQThEO1dBQzNHO1dBQ0E7V0FDQTtXQUNBLEM7Ozs7O1dDUEE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7V0FFQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsZUFBZSxxQkFBcUI7V0FDcEM7O1dBRUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7O1dBRUE7V0FDQTs7V0FFQTs7V0FFQSxrQiIsImZpbGUiOiJ3ZWJwYWNrLXJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdHZhciB0aHJldyA9IHRydWU7XG5cdHRyeSB7XG5cdFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdFx0dGhyZXcgPSBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblx0XHRpZih0aHJldykgZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmYgPSB7fTtcbi8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay5cbi8vIFRoZSBjaHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoT2JqZWN0LmtleXMoX193ZWJwYWNrX3JlcXVpcmVfXy5mKS5yZWR1Y2UoZnVuY3Rpb24ocHJvbWlzZXMsIGtleSkge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rcyBhbmQgc2libGluZyBjaHVua3MgZm9yIHRoZSBlbnRyeXBvaW50XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSBmdW5jdGlvbihjaHVua0lkKSB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLlggPSBmdW5jdGlvbihyZXN1bHQsIGNodW5rSWRzLCBmbikge1xuXHQvLyBhcmd1bWVudHM6IGNodW5rSWRzLCBtb2R1bGVJZCBhcmUgZGVwcmVjYXRlZFxuXHR2YXIgbW9kdWxlSWQgPSBjaHVua0lkcztcblx0aWYoIWZuKSBjaHVua0lkcyA9IHJlc3VsdCwgZm4gPSBmdW5jdGlvbigpIHsgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gbW9kdWxlSWQpOyB9O1xuXHRjaHVua0lkcy5tYXAoX193ZWJwYWNrX3JlcXVpcmVfXy5lLCBfX3dlYnBhY2tfcmVxdWlyZV9fKVxuXHR2YXIgciA9IGZuKCk7XG5cdHJldHVybiByID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiByO1xufSIsIi8vIG5vIGJhc2VVUklcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBjaHVua3Ncbi8vIFwiMVwiIG1lYW5zIFwibG9hZGVkXCIsIG90aGVyd2lzZSBub3QgbG9hZGVkIHlldFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJ3ZWJwYWNrLXJ1bnRpbWVcIjogMVxufTtcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG52YXIgaW5zdGFsbENodW5rID0gZnVuY3Rpb24oY2h1bmspIHtcblx0dmFyIG1vcmVNb2R1bGVzID0gY2h1bmsubW9kdWxlcywgY2h1bmtJZHMgPSBjaHVuay5pZHMsIHJ1bnRpbWUgPSBjaHVuay5ydW50aW1lO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBjaHVua0lkcy5sZW5ndGg7IGkrKylcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHNbaV1dID0gMTtcblxufTtcblxuLy8gcmVxdWlyZSgpIGNodW5rIGxvYWRpbmcgZm9yIGphdmFzY3JpcHRcbl9fd2VicGFja19yZXF1aXJlX18uZi5yZXF1aXJlID0gZnVuY3Rpb24oY2h1bmtJZCwgcHJvbWlzZXMpIHtcblx0Ly8gXCIxXCIgaXMgdGhlIHNpZ25hbCBmb3IgXCJhbHJlYWR5IGxvYWRlZFwiXG5cdGlmKCFpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcblx0XHRpZihcIndlYnBhY2stcnVudGltZVwiICE9IGNodW5rSWQpIHtcblx0XHRcdGluc3RhbGxDaHVuayhyZXF1aXJlKFwiLi9cIiArIF9fd2VicGFja19yZXF1aXJlX18udShjaHVua0lkKSkpO1xuXHRcdH0gZWxzZSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAxO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX187XG5fX3dlYnBhY2tfcmVxdWlyZV9fLkMgPSBpbnN0YWxsQ2h1bms7XG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3QiXSwic291cmNlUm9vdCI6IiJ9 -------------------------------------------------------------------------------- /.next/static/chunks/node_modules_next_dist_client_dev_noop_js.js: -------------------------------------------------------------------------------- 1 | (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["node_modules_next_dist_client_dev_noop_js"],{ 2 | 3 | /***/ "./node_modules/next/dist/client/dev/noop.js": 4 | /*!***************************************************!*\ 5 | !*** ./node_modules/next/dist/client/dev/noop.js ***! 6 | \***************************************************/ 7 | /***/ (function(module, __unused_webpack_exports, __webpack_require__) { 8 | 9 | "use strict"; 10 | /* module decorator */ module = __webpack_require__.nmd(module); 11 | 12 | 13 | ; 14 | var _a, _b; 15 | // Legacy CSS implementations will `eval` browser code in a Node.js context 16 | // to extract CSS. For backwards compatibility, we need to check we're in a 17 | // browser context before continuing. 18 | if (typeof self !== 'undefined' && 19 | // AMP / No-JS mode does not inject these helpers: 20 | '$RefreshHelpers$' in self) { 21 | var currentExports = module.__proto__.exports; 22 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 23 | // This cannot happen in MainTemplate because the exports mismatch between 24 | // templating and execution. 25 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 26 | // A module can be accepted automatically based on its exports, e.g. when 27 | // it is a Refresh Boundary. 28 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 29 | // Save the previous exports on update so we can compare the boundary 30 | // signatures. 31 | module.hot.dispose(function (data) { 32 | data.prevExports = currentExports; 33 | }); 34 | // Unconditionally accept an update to this module, we'll check if it's 35 | // still a Refresh Boundary later. 36 | module.hot.accept(); 37 | // This field is set when the previous version of this module was a 38 | // Refresh Boundary, letting us know we need to check for invalidation or 39 | // enqueue an update. 40 | if (prevExports !== null) { 41 | // A boundary can become ineligible if its exports are incompatible 42 | // with the previous exports. 43 | // 44 | // For example, if you add/remove/change exports, we'll want to 45 | // re-execute the importing modules, and force those components to 46 | // re-render. Similarly, if you convert a class component to a 47 | // function, we want to invalidate the boundary. 48 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 49 | module.hot.invalidate(); 50 | } 51 | else { 52 | self.$RefreshHelpers$.scheduleUpdate(); 53 | } 54 | } 55 | } 56 | else { 57 | // Since we just executed the code for the module, it's possible that the 58 | // new exports made it ineligible for being a boundary. 59 | // We only care about the case when we were _previously_ a boundary, 60 | // because we already accepted this update (accidental side effect). 61 | var isNoLongerABoundary = prevExports !== null; 62 | if (isNoLongerABoundary) { 63 | module.hot.invalidate(); 64 | } 65 | } 66 | } 67 | 68 | 69 | /***/ }) 70 | 71 | }]); 72 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L25vb3AuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFhIiwiZmlsZSI6InN0YXRpYy9jaHVua3Mvbm9kZV9tb2R1bGVzX25leHRfZGlzdF9jbGllbnRfZGV2X25vb3BfanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vb3AuanMubWFwIl0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /.next/static/chunks/pages/_error.js: -------------------------------------------------------------------------------- 1 | (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["pages/_error"],{ 2 | 3 | /***/ "./node_modules/@babel/runtime/helpers/defineProperty.js": 4 | /*!***************************************************************!*\ 5 | !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***! 6 | \***************************************************************/ 7 | /***/ (function(module) { 8 | 9 | function _defineProperty(obj, key, value) { 10 | if (key in obj) { 11 | Object.defineProperty(obj, key, { 12 | value: value, 13 | enumerable: true, 14 | configurable: true, 15 | writable: true 16 | }); 17 | } else { 18 | obj[key] = value; 19 | } 20 | 21 | return obj; 22 | } 23 | 24 | module.exports = _defineProperty; 25 | 26 | /***/ }), 27 | 28 | /***/ "./node_modules/next/dist/next-server/lib/amp-context.js": 29 | /*!***************************************************************!*\ 30 | !*** ./node_modules/next/dist/next-server/lib/amp-context.js ***! 31 | \***************************************************************/ 32 | /***/ (function(module, exports, __webpack_require__) { 33 | 34 | "use strict"; 35 | /* module decorator */ module = __webpack_require__.nmd(module); 36 | 37 | 38 | exports.__esModule = true; 39 | exports.AmpStateContext = void 0; 40 | 41 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 42 | 43 | function _interopRequireDefault(obj) { 44 | return obj && obj.__esModule ? obj : { 45 | "default": obj 46 | }; 47 | } 48 | 49 | var AmpStateContext = /*#__PURE__*/_react["default"].createContext({}); 50 | 51 | exports.AmpStateContext = AmpStateContext; 52 | 53 | if (true) { 54 | AmpStateContext.displayName = 'AmpStateContext'; 55 | } 56 | 57 | ; 58 | var _a, _b; 59 | // Legacy CSS implementations will `eval` browser code in a Node.js context 60 | // to extract CSS. For backwards compatibility, we need to check we're in a 61 | // browser context before continuing. 62 | if (typeof self !== 'undefined' && 63 | // AMP / No-JS mode does not inject these helpers: 64 | '$RefreshHelpers$' in self) { 65 | var currentExports = module.__proto__.exports; 66 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 67 | // This cannot happen in MainTemplate because the exports mismatch between 68 | // templating and execution. 69 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 70 | // A module can be accepted automatically based on its exports, e.g. when 71 | // it is a Refresh Boundary. 72 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 73 | // Save the previous exports on update so we can compare the boundary 74 | // signatures. 75 | module.hot.dispose(function (data) { 76 | data.prevExports = currentExports; 77 | }); 78 | // Unconditionally accept an update to this module, we'll check if it's 79 | // still a Refresh Boundary later. 80 | module.hot.accept(); 81 | // This field is set when the previous version of this module was a 82 | // Refresh Boundary, letting us know we need to check for invalidation or 83 | // enqueue an update. 84 | if (prevExports !== null) { 85 | // A boundary can become ineligible if its exports are incompatible 86 | // with the previous exports. 87 | // 88 | // For example, if you add/remove/change exports, we'll want to 89 | // re-execute the importing modules, and force those components to 90 | // re-render. Similarly, if you convert a class component to a 91 | // function, we want to invalidate the boundary. 92 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 93 | module.hot.invalidate(); 94 | } 95 | else { 96 | self.$RefreshHelpers$.scheduleUpdate(); 97 | } 98 | } 99 | } 100 | else { 101 | // Since we just executed the code for the module, it's possible that the 102 | // new exports made it ineligible for being a boundary. 103 | // We only care about the case when we were _previously_ a boundary, 104 | // because we already accepted this update (accidental side effect). 105 | var isNoLongerABoundary = prevExports !== null; 106 | if (isNoLongerABoundary) { 107 | module.hot.invalidate(); 108 | } 109 | } 110 | } 111 | 112 | 113 | /***/ }), 114 | 115 | /***/ "./node_modules/next/dist/next-server/lib/amp.js": 116 | /*!*******************************************************!*\ 117 | !*** ./node_modules/next/dist/next-server/lib/amp.js ***! 118 | \*******************************************************/ 119 | /***/ (function(module, exports, __webpack_require__) { 120 | 121 | "use strict"; 122 | /* module decorator */ module = __webpack_require__.nmd(module); 123 | 124 | 125 | var _s = $RefreshSig$(); 126 | 127 | exports.__esModule = true; 128 | exports.isInAmpMode = isInAmpMode; 129 | exports.useAmp = useAmp; 130 | 131 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 132 | 133 | var _ampContext = __webpack_require__(/*! ./amp-context */ "./node_modules/next/dist/next-server/lib/amp-context.js"); 134 | 135 | function _interopRequireDefault(obj) { 136 | return obj && obj.__esModule ? obj : { 137 | "default": obj 138 | }; 139 | } 140 | 141 | function isInAmpMode() { 142 | var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, 143 | _ref$ampFirst = _ref.ampFirst, 144 | ampFirst = _ref$ampFirst === void 0 ? false : _ref$ampFirst, 145 | _ref$hybrid = _ref.hybrid, 146 | hybrid = _ref$hybrid === void 0 ? false : _ref$hybrid, 147 | _ref$hasQuery = _ref.hasQuery, 148 | hasQuery = _ref$hasQuery === void 0 ? false : _ref$hasQuery; 149 | 150 | return ampFirst || hybrid && hasQuery; 151 | } 152 | 153 | function useAmp() { 154 | _s(); 155 | 156 | // Don't assign the context value to a variable to save bytes 157 | return isInAmpMode(_react["default"].useContext(_ampContext.AmpStateContext)); 158 | } 159 | 160 | _s(useAmp, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); 161 | 162 | ; 163 | var _a, _b; 164 | // Legacy CSS implementations will `eval` browser code in a Node.js context 165 | // to extract CSS. For backwards compatibility, we need to check we're in a 166 | // browser context before continuing. 167 | if (typeof self !== 'undefined' && 168 | // AMP / No-JS mode does not inject these helpers: 169 | '$RefreshHelpers$' in self) { 170 | var currentExports = module.__proto__.exports; 171 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 172 | // This cannot happen in MainTemplate because the exports mismatch between 173 | // templating and execution. 174 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 175 | // A module can be accepted automatically based on its exports, e.g. when 176 | // it is a Refresh Boundary. 177 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 178 | // Save the previous exports on update so we can compare the boundary 179 | // signatures. 180 | module.hot.dispose(function (data) { 181 | data.prevExports = currentExports; 182 | }); 183 | // Unconditionally accept an update to this module, we'll check if it's 184 | // still a Refresh Boundary later. 185 | module.hot.accept(); 186 | // This field is set when the previous version of this module was a 187 | // Refresh Boundary, letting us know we need to check for invalidation or 188 | // enqueue an update. 189 | if (prevExports !== null) { 190 | // A boundary can become ineligible if its exports are incompatible 191 | // with the previous exports. 192 | // 193 | // For example, if you add/remove/change exports, we'll want to 194 | // re-execute the importing modules, and force those components to 195 | // re-render. Similarly, if you convert a class component to a 196 | // function, we want to invalidate the boundary. 197 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 198 | module.hot.invalidate(); 199 | } 200 | else { 201 | self.$RefreshHelpers$.scheduleUpdate(); 202 | } 203 | } 204 | } 205 | else { 206 | // Since we just executed the code for the module, it's possible that the 207 | // new exports made it ineligible for being a boundary. 208 | // We only care about the case when we were _previously_ a boundary, 209 | // because we already accepted this update (accidental side effect). 210 | var isNoLongerABoundary = prevExports !== null; 211 | if (isNoLongerABoundary) { 212 | module.hot.invalidate(); 213 | } 214 | } 215 | } 216 | 217 | 218 | /***/ }), 219 | 220 | /***/ "./node_modules/next/dist/next-server/lib/head.js": 221 | /*!********************************************************!*\ 222 | !*** ./node_modules/next/dist/next-server/lib/head.js ***! 223 | \********************************************************/ 224 | /***/ (function(module, exports, __webpack_require__) { 225 | 226 | "use strict"; 227 | /* module decorator */ module = __webpack_require__.nmd(module); 228 | 229 | 230 | var _defineProperty = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"); 231 | 232 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 233 | 234 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 235 | 236 | exports.__esModule = true; 237 | exports.defaultHead = defaultHead; 238 | exports.default = void 0; 239 | 240 | var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 241 | 242 | var _sideEffect = _interopRequireDefault(__webpack_require__(/*! ./side-effect */ "./node_modules/next/dist/next-server/lib/side-effect.js")); 243 | 244 | var _ampContext = __webpack_require__(/*! ./amp-context */ "./node_modules/next/dist/next-server/lib/amp-context.js"); 245 | 246 | var _headManagerContext = __webpack_require__(/*! ./head-manager-context */ "./node_modules/next/dist/next-server/lib/head-manager-context.js"); 247 | 248 | var _amp = __webpack_require__(/*! ./amp */ "./node_modules/next/dist/next-server/lib/amp.js"); 249 | 250 | function _interopRequireDefault(obj) { 251 | return obj && obj.__esModule ? obj : { 252 | "default": obj 253 | }; 254 | } 255 | 256 | function _getRequireWildcardCache() { 257 | if (typeof WeakMap !== "function") return null; 258 | var cache = new WeakMap(); 259 | 260 | _getRequireWildcardCache = function _getRequireWildcardCache() { 261 | return cache; 262 | }; 263 | 264 | return cache; 265 | } 266 | 267 | function _interopRequireWildcard(obj) { 268 | if (obj && obj.__esModule) { 269 | return obj; 270 | } 271 | 272 | if (obj === null || typeof obj !== "object" && typeof obj !== "function") { 273 | return { 274 | "default": obj 275 | }; 276 | } 277 | 278 | var cache = _getRequireWildcardCache(); 279 | 280 | if (cache && cache.has(obj)) { 281 | return cache.get(obj); 282 | } 283 | 284 | var newObj = {}; 285 | var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; 286 | 287 | for (var key in obj) { 288 | if (Object.prototype.hasOwnProperty.call(obj, key)) { 289 | var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; 290 | 291 | if (desc && (desc.get || desc.set)) { 292 | Object.defineProperty(newObj, key, desc); 293 | } else { 294 | newObj[key] = obj[key]; 295 | } 296 | } 297 | } 298 | 299 | newObj["default"] = obj; 300 | 301 | if (cache) { 302 | cache.set(obj, newObj); 303 | } 304 | 305 | return newObj; 306 | } 307 | 308 | function defaultHead() { 309 | var inAmpMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; 310 | var head = [/*#__PURE__*/_react["default"].createElement("meta", { 311 | charSet: "utf-8" 312 | })]; 313 | 314 | if (!inAmpMode) { 315 | head.push( /*#__PURE__*/_react["default"].createElement("meta", { 316 | name: "viewport", 317 | content: "width=device-width" 318 | })); 319 | } 320 | 321 | return head; 322 | } 323 | 324 | function onlyReactElement(list, child) { 325 | // React children can be "string" or "number" in this case we ignore them for backwards compat 326 | if (typeof child === 'string' || typeof child === 'number') { 327 | return list; 328 | } // Adds support for React.Fragment 329 | 330 | 331 | if (child.type === _react["default"].Fragment) { 332 | return list.concat(_react["default"].Children.toArray(child.props.children).reduce(function (fragmentList, fragmentChild) { 333 | if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') { 334 | return fragmentList; 335 | } 336 | 337 | return fragmentList.concat(fragmentChild); 338 | }, [])); 339 | } 340 | 341 | return list.concat(child); 342 | } 343 | 344 | var METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp']; 345 | /* 346 | returns a function for filtering head child elements 347 | which shouldn't be duplicated, like 348 | Also adds support for deduplicated `key` properties 349 | */ 350 | 351 | function unique() { 352 | var keys = new Set(); 353 | var tags = new Set(); 354 | var metaTypes = new Set(); 355 | var metaCategories = {}; 356 | return function (h) { 357 | var isUnique = true; 358 | var hasKey = false; 359 | 360 | if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) { 361 | hasKey = true; 362 | var key = h.key.slice(h.key.indexOf('$') + 1); 363 | 364 | if (keys.has(key)) { 365 | isUnique = false; 366 | } else { 367 | keys.add(key); 368 | } 369 | } // eslint-disable-next-line default-case 370 | 371 | 372 | switch (h.type) { 373 | case 'title': 374 | case 'base': 375 | if (tags.has(h.type)) { 376 | isUnique = false; 377 | } else { 378 | tags.add(h.type); 379 | } 380 | 381 | break; 382 | 383 | case 'meta': 384 | for (var i = 0, len = METATYPES.length; i < len; i++) { 385 | var metatype = METATYPES[i]; 386 | if (!h.props.hasOwnProperty(metatype)) continue; 387 | 388 | if (metatype === 'charSet') { 389 | if (metaTypes.has(metatype)) { 390 | isUnique = false; 391 | } else { 392 | metaTypes.add(metatype); 393 | } 394 | } else { 395 | var category = h.props[metatype]; 396 | var categories = metaCategories[metatype] || new Set(); 397 | 398 | if ((metatype !== 'name' || !hasKey) && categories.has(category)) { 399 | isUnique = false; 400 | } else { 401 | categories.add(category); 402 | metaCategories[metatype] = categories; 403 | } 404 | } 405 | } 406 | 407 | break; 408 | } 409 | 410 | return isUnique; 411 | }; 412 | } 413 | /** 414 | * 415 | * @param headElements List of multiple <Head> instances 416 | */ 417 | 418 | 419 | function reduceComponents(headElements, props) { 420 | return headElements.reduce(function (list, headElement) { 421 | var headElementChildren = _react["default"].Children.toArray(headElement.props.children); 422 | 423 | return list.concat(headElementChildren); 424 | }, []).reduce(onlyReactElement, []).reverse().concat(defaultHead(props.inAmpMode)).filter(unique()).reverse().map(function (c, i) { 425 | var key = c.key || i; 426 | 427 | if (false) { var newProps; } 428 | 429 | return /*#__PURE__*/_react["default"].cloneElement(c, { 430 | key: key 431 | }); 432 | }); 433 | } 434 | /** 435 | * This component injects elements to `<head>` of your page. 436 | * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once. 437 | */ 438 | 439 | 440 | function Head(_ref) { 441 | var children = _ref.children; 442 | var ampState = (0, _react.useContext)(_ampContext.AmpStateContext); 443 | var headManager = (0, _react.useContext)(_headManagerContext.HeadManagerContext); 444 | return /*#__PURE__*/_react["default"].createElement(_sideEffect["default"], { 445 | reduceComponentsToState: reduceComponents, 446 | headManager: headManager, 447 | inAmpMode: (0, _amp.isInAmpMode)(ampState) 448 | }, children); 449 | } 450 | 451 | _c = Head; 452 | var _default = Head; 453 | exports.default = _default; 454 | 455 | var _c; 456 | 457 | $RefreshReg$(_c, "Head"); 458 | 459 | ; 460 | var _a, _b; 461 | // Legacy CSS implementations will `eval` browser code in a Node.js context 462 | // to extract CSS. For backwards compatibility, we need to check we're in a 463 | // browser context before continuing. 464 | if (typeof self !== 'undefined' && 465 | // AMP / No-JS mode does not inject these helpers: 466 | '$RefreshHelpers$' in self) { 467 | var currentExports = module.__proto__.exports; 468 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 469 | // This cannot happen in MainTemplate because the exports mismatch between 470 | // templating and execution. 471 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 472 | // A module can be accepted automatically based on its exports, e.g. when 473 | // it is a Refresh Boundary. 474 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 475 | // Save the previous exports on update so we can compare the boundary 476 | // signatures. 477 | module.hot.dispose(function (data) { 478 | data.prevExports = currentExports; 479 | }); 480 | // Unconditionally accept an update to this module, we'll check if it's 481 | // still a Refresh Boundary later. 482 | module.hot.accept(); 483 | // This field is set when the previous version of this module was a 484 | // Refresh Boundary, letting us know we need to check for invalidation or 485 | // enqueue an update. 486 | if (prevExports !== null) { 487 | // A boundary can become ineligible if its exports are incompatible 488 | // with the previous exports. 489 | // 490 | // For example, if you add/remove/change exports, we'll want to 491 | // re-execute the importing modules, and force those components to 492 | // re-render. Similarly, if you convert a class component to a 493 | // function, we want to invalidate the boundary. 494 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 495 | module.hot.invalidate(); 496 | } 497 | else { 498 | self.$RefreshHelpers$.scheduleUpdate(); 499 | } 500 | } 501 | } 502 | else { 503 | // Since we just executed the code for the module, it's possible that the 504 | // new exports made it ineligible for being a boundary. 505 | // We only care about the case when we were _previously_ a boundary, 506 | // because we already accepted this update (accidental side effect). 507 | var isNoLongerABoundary = prevExports !== null; 508 | if (isNoLongerABoundary) { 509 | module.hot.invalidate(); 510 | } 511 | } 512 | } 513 | 514 | 515 | /***/ }), 516 | 517 | /***/ "./node_modules/next/dist/next-server/lib/side-effect.js": 518 | /*!***************************************************************!*\ 519 | !*** ./node_modules/next/dist/next-server/lib/side-effect.js ***! 520 | \***************************************************************/ 521 | /***/ (function(module, exports, __webpack_require__) { 522 | 523 | "use strict"; 524 | /* module decorator */ module = __webpack_require__.nmd(module); 525 | 526 | 527 | var _toConsumableArray = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"); 528 | 529 | var _classCallCheck = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); 530 | 531 | var _createClass = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); 532 | 533 | var _assertThisInitialized = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js"); 534 | 535 | var _inherits = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"); 536 | 537 | var _possibleConstructorReturn = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); 538 | 539 | var _getPrototypeOf = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js"); 540 | 541 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } 542 | 543 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } 544 | 545 | exports.__esModule = true; 546 | exports.default = void 0; 547 | 548 | var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 549 | 550 | var isServer = false; 551 | 552 | var _default = /*#__PURE__*/function (_react$Component) { 553 | _inherits(_default, _react$Component); 554 | 555 | var _super = _createSuper(_default); 556 | 557 | function _default(props) { 558 | var _this; 559 | 560 | _classCallCheck(this, _default); 561 | 562 | _this = _super.call(this, props); 563 | _this._hasHeadManager = void 0; 564 | 565 | _this.emitChange = function () { 566 | if (_this._hasHeadManager) { 567 | _this.props.headManager.updateHead(_this.props.reduceComponentsToState(_toConsumableArray(_this.props.headManager.mountedInstances), _this.props)); 568 | } 569 | }; 570 | 571 | _this._hasHeadManager = _this.props.headManager && _this.props.headManager.mountedInstances; 572 | 573 | if (isServer && _this._hasHeadManager) { 574 | _this.props.headManager.mountedInstances.add(_assertThisInitialized(_this)); 575 | 576 | _this.emitChange(); 577 | } 578 | 579 | return _this; 580 | } 581 | 582 | _createClass(_default, [{ 583 | key: "componentDidMount", 584 | value: function componentDidMount() { 585 | if (this._hasHeadManager) { 586 | this.props.headManager.mountedInstances.add(this); 587 | } 588 | 589 | this.emitChange(); 590 | } 591 | }, { 592 | key: "componentDidUpdate", 593 | value: function componentDidUpdate() { 594 | this.emitChange(); 595 | } 596 | }, { 597 | key: "componentWillUnmount", 598 | value: function componentWillUnmount() { 599 | if (this._hasHeadManager) { 600 | this.props.headManager.mountedInstances["delete"](this); 601 | } 602 | 603 | this.emitChange(); 604 | } 605 | }, { 606 | key: "render", 607 | value: function render() { 608 | return null; 609 | } 610 | }]); 611 | 612 | return _default; 613 | }(_react.Component); 614 | 615 | exports.default = _default; 616 | 617 | ; 618 | var _a, _b; 619 | // Legacy CSS implementations will `eval` browser code in a Node.js context 620 | // to extract CSS. For backwards compatibility, we need to check we're in a 621 | // browser context before continuing. 622 | if (typeof self !== 'undefined' && 623 | // AMP / No-JS mode does not inject these helpers: 624 | '$RefreshHelpers$' in self) { 625 | var currentExports = module.__proto__.exports; 626 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 627 | // This cannot happen in MainTemplate because the exports mismatch between 628 | // templating and execution. 629 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 630 | // A module can be accepted automatically based on its exports, e.g. when 631 | // it is a Refresh Boundary. 632 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 633 | // Save the previous exports on update so we can compare the boundary 634 | // signatures. 635 | module.hot.dispose(function (data) { 636 | data.prevExports = currentExports; 637 | }); 638 | // Unconditionally accept an update to this module, we'll check if it's 639 | // still a Refresh Boundary later. 640 | module.hot.accept(); 641 | // This field is set when the previous version of this module was a 642 | // Refresh Boundary, letting us know we need to check for invalidation or 643 | // enqueue an update. 644 | if (prevExports !== null) { 645 | // A boundary can become ineligible if its exports are incompatible 646 | // with the previous exports. 647 | // 648 | // For example, if you add/remove/change exports, we'll want to 649 | // re-execute the importing modules, and force those components to 650 | // re-render. Similarly, if you convert a class component to a 651 | // function, we want to invalidate the boundary. 652 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 653 | module.hot.invalidate(); 654 | } 655 | else { 656 | self.$RefreshHelpers$.scheduleUpdate(); 657 | } 658 | } 659 | } 660 | else { 661 | // Since we just executed the code for the module, it's possible that the 662 | // new exports made it ineligible for being a boundary. 663 | // We only care about the case when we were _previously_ a boundary, 664 | // because we already accepted this update (accidental side effect). 665 | var isNoLongerABoundary = prevExports !== null; 666 | if (isNoLongerABoundary) { 667 | module.hot.invalidate(); 668 | } 669 | } 670 | } 671 | 672 | 673 | /***/ }), 674 | 675 | /***/ "./node_modules/next/dist/pages/_error.js": 676 | /*!************************************************!*\ 677 | !*** ./node_modules/next/dist/pages/_error.js ***! 678 | \************************************************/ 679 | /***/ (function(module, exports, __webpack_require__) { 680 | 681 | "use strict"; 682 | /* module decorator */ module = __webpack_require__.nmd(module); 683 | 684 | 685 | var _classCallCheck = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); 686 | 687 | var _createClass = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); 688 | 689 | var _inherits = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"); 690 | 691 | var _possibleConstructorReturn = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/possibleConstructorReturn */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js"); 692 | 693 | var _getPrototypeOf = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/getPrototypeOf */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js"); 694 | 695 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } 696 | 697 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } 698 | 699 | var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js"); 700 | 701 | exports.__esModule = true; 702 | exports.default = void 0; 703 | 704 | var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 705 | 706 | var _head = _interopRequireDefault(__webpack_require__(/*! ../next-server/lib/head */ "./node_modules/next/dist/next-server/lib/head.js")); 707 | 708 | var statusCodes = { 709 | 400: 'Bad Request', 710 | 404: 'This page could not be found', 711 | 405: 'Method Not Allowed', 712 | 500: 'Internal Server Error' 713 | }; 714 | 715 | function _getInitialProps(_ref) { 716 | var res = _ref.res, 717 | err = _ref.err; 718 | var statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404; 719 | return { 720 | statusCode: statusCode 721 | }; 722 | } 723 | /** 724 | * `Error` component used for handling errors. 725 | */ 726 | 727 | 728 | var Error = /*#__PURE__*/function (_react$default$Compon) { 729 | _inherits(Error, _react$default$Compon); 730 | 731 | var _super = _createSuper(Error); 732 | 733 | function Error() { 734 | _classCallCheck(this, Error); 735 | 736 | return _super.apply(this, arguments); 737 | } 738 | 739 | _createClass(Error, [{ 740 | key: "render", 741 | value: function render() { 742 | var statusCode = this.props.statusCode; 743 | var title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred'; 744 | return /*#__PURE__*/_react["default"].createElement("div", { 745 | style: styles.error 746 | }, /*#__PURE__*/_react["default"].createElement(_head["default"], null, /*#__PURE__*/_react["default"].createElement("title", null, statusCode ? "".concat(statusCode, ": ").concat(title) : 'Application error: a client-side exception has occurred')), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("style", { 747 | dangerouslySetInnerHTML: { 748 | __html: 'body { margin: 0 }' 749 | } 750 | }), statusCode ? /*#__PURE__*/_react["default"].createElement("h1", { 751 | style: styles.h1 752 | }, statusCode) : null, /*#__PURE__*/_react["default"].createElement("div", { 753 | style: styles.desc 754 | }, /*#__PURE__*/_react["default"].createElement("h2", { 755 | style: styles.h2 756 | }, this.props.title || statusCode ? title : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Application error: a client-side exception has occurred (", /*#__PURE__*/_react["default"].createElement("a", { 757 | href: "https://nextjs.org/docs/messages/client-side-exception-occurred" 758 | }, "developer guidance"), ")"), ".")))); 759 | } 760 | }]); 761 | 762 | return Error; 763 | }(_react["default"].Component); 764 | 765 | exports.default = Error; 766 | Error.displayName = 'ErrorPage'; 767 | Error.getInitialProps = _getInitialProps; 768 | Error.origGetInitialProps = _getInitialProps; 769 | var styles = { 770 | error: { 771 | color: '#000', 772 | background: '#fff', 773 | fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", Avenir, "Helvetica Neue", "Lucida Grande", sans-serif', 774 | height: '100vh', 775 | textAlign: 'center', 776 | display: 'flex', 777 | flexDirection: 'column', 778 | alignItems: 'center', 779 | justifyContent: 'center' 780 | }, 781 | desc: { 782 | display: 'inline-block', 783 | textAlign: 'left', 784 | lineHeight: '49px', 785 | height: '49px', 786 | verticalAlign: 'middle' 787 | }, 788 | h1: { 789 | display: 'inline-block', 790 | borderRight: '1px solid rgba(0, 0, 0,.3)', 791 | margin: 0, 792 | marginRight: '20px', 793 | padding: '10px 23px 10px 0', 794 | fontSize: '24px', 795 | fontWeight: 500, 796 | verticalAlign: 'top' 797 | }, 798 | h2: { 799 | fontSize: '14px', 800 | fontWeight: 'normal', 801 | lineHeight: 'inherit', 802 | margin: 0, 803 | padding: 0 804 | } 805 | }; 806 | 807 | ; 808 | var _a, _b; 809 | // Legacy CSS implementations will `eval` browser code in a Node.js context 810 | // to extract CSS. For backwards compatibility, we need to check we're in a 811 | // browser context before continuing. 812 | if (typeof self !== 'undefined' && 813 | // AMP / No-JS mode does not inject these helpers: 814 | '$RefreshHelpers$' in self) { 815 | var currentExports = module.__proto__.exports; 816 | var prevExports = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevExports) !== null && _b !== void 0 ? _b : null; 817 | // This cannot happen in MainTemplate because the exports mismatch between 818 | // templating and execution. 819 | self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id); 820 | // A module can be accepted automatically based on its exports, e.g. when 821 | // it is a Refresh Boundary. 822 | if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) { 823 | // Save the previous exports on update so we can compare the boundary 824 | // signatures. 825 | module.hot.dispose(function (data) { 826 | data.prevExports = currentExports; 827 | }); 828 | // Unconditionally accept an update to this module, we'll check if it's 829 | // still a Refresh Boundary later. 830 | module.hot.accept(); 831 | // This field is set when the previous version of this module was a 832 | // Refresh Boundary, letting us know we need to check for invalidation or 833 | // enqueue an update. 834 | if (prevExports !== null) { 835 | // A boundary can become ineligible if its exports are incompatible 836 | // with the previous exports. 837 | // 838 | // For example, if you add/remove/change exports, we'll want to 839 | // re-execute the importing modules, and force those components to 840 | // re-render. Similarly, if you convert a class component to a 841 | // function, we want to invalidate the boundary. 842 | if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) { 843 | module.hot.invalidate(); 844 | } 845 | else { 846 | self.$RefreshHelpers$.scheduleUpdate(); 847 | } 848 | } 849 | } 850 | else { 851 | // Since we just executed the code for the module, it's possible that the 852 | // new exports made it ineligible for being a boundary. 853 | // We only care about the case when we were _previously_ a boundary, 854 | // because we already accepted this update (accidental side effect). 855 | var isNoLongerABoundary = prevExports !== null; 856 | if (isNoLongerABoundary) { 857 | module.hot.invalidate(); 858 | } 859 | } 860 | } 861 | 862 | 863 | /***/ }), 864 | 865 | /***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F_error&absolutePagePath=next%2Fdist%2Fpages%2F_error!": 866 | /*!************************************************************************************************************************************************!*\ 867 | !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F_error&absolutePagePath=next%2Fdist%2Fpages%2F_error! ***! 868 | \************************************************************************************************************************************************/ 869 | /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { 870 | 871 | 872 | (window.__NEXT_P = window.__NEXT_P || []).push([ 873 | "/_error", 874 | function () { 875 | return __webpack_require__(/*! next/dist/pages/_error */ "./node_modules/next/dist/pages/_error.js"); 876 | } 877 | ]); 878 | 879 | 880 | /***/ }) 881 | 882 | }, 883 | /******/ function(__webpack_require__) { // webpackRuntimeModules 884 | /******/ // runtime can't be in strict mode because a global variable is assign and maybe created. 885 | /******/ 886 | /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } 887 | /******/ __webpack_require__.O(0, ["pages/_app","main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?page=%2F_error&absolutePagePath=next%2Fdist%2Fpages%2F_error!"); }); 888 | /******/ var __webpack_exports__ = __webpack_require__.O(); 889 | /******/ _N_E = __webpack_exports__; 890 | /******/ } 891 | ]); 892 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL2FtcC1jb250ZXh0LmpzIiwid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtc2VydmVyL2xpYi9hbXAuanMiLCJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL2hlYWQuanMiLCJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1zZXJ2ZXIvbGliL3NpZGUtZWZmZWN0LmpzIiwid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcyIsIndlYnBhY2s6Ly9fTl9FLz9iZTQ1Il0sIm5hbWVzIjpbImV4cG9ydHMiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIm9iaiIsIl9fZXNNb2R1bGUiLCJBbXBTdGF0ZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZGlzcGxheU5hbWUiLCJpc0luQW1wTW9kZSIsInVzZUFtcCIsIl9hbXBDb250ZXh0IiwiYW1wRmlyc3QiLCJoeWJyaWQiLCJoYXNRdWVyeSIsInVzZUNvbnRleHQiLCJkZWZhdWx0SGVhZCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3NpZGVFZmZlY3QiLCJfaGVhZE1hbmFnZXJDb250ZXh0IiwiX2FtcCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImluQW1wTW9kZSIsImhlYWQiLCJjcmVhdGVFbGVtZW50IiwiY2hhclNldCIsInB1c2giLCJuYW1lIiwiY29udGVudCIsIm9ubHlSZWFjdEVsZW1lbnQiLCJsaXN0IiwiY2hpbGQiLCJ0eXBlIiwiRnJhZ21lbnQiLCJjb25jYXQiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJwcm9wcyIsImNoaWxkcmVuIiwicmVkdWNlIiwiZnJhZ21lbnRMaXN0IiwiZnJhZ21lbnRDaGlsZCIsIk1FVEFUWVBFUyIsInVuaXF1ZSIsImtleXMiLCJTZXQiLCJ0YWdzIiwibWV0YVR5cGVzIiwibWV0YUNhdGVnb3JpZXMiLCJoIiwiaXNVbmlxdWUiLCJoYXNLZXkiLCJpbmRleE9mIiwic2xpY2UiLCJhZGQiLCJpIiwibGVuIiwibGVuZ3RoIiwibWV0YXR5cGUiLCJjYXRlZ29yeSIsImNhdGVnb3JpZXMiLCJyZWR1Y2VDb21wb25lbnRzIiwiaGVhZEVsZW1lbnRzIiwiaGVhZEVsZW1lbnQiLCJoZWFkRWxlbWVudENoaWxkcmVuIiwicmV2ZXJzZSIsImZpbHRlciIsIm1hcCIsImMiLCJjbG9uZUVsZW1lbnQiLCJIZWFkIiwiYW1wU3RhdGUiLCJoZWFkTWFuYWdlciIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiX2RlZmF1bHQiLCJpc1NlcnZlciIsIl9oYXNIZWFkTWFuYWdlciIsImVtaXRDaGFuZ2UiLCJ1cGRhdGVIZWFkIiwibW91bnRlZEluc3RhbmNlcyIsIkNvbXBvbmVudCIsIl9oZWFkIiwic3RhdHVzQ29kZXMiLCJfZ2V0SW5pdGlhbFByb3BzIiwicmVzIiwiZXJyIiwic3RhdHVzQ29kZSIsIkVycm9yIiwidGl0bGUiLCJzdHlsZSIsInN0eWxlcyIsImVycm9yIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJoMSIsImgyIiwiaHJlZiIsImdldEluaXRpYWxQcm9wcyIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJjb2xvciIsImJhY2tncm91bmQiLCJmb250RmFtaWx5IiwiaGVpZ2h0IiwidGV4dEFsaWduIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJsaW5lSGVpZ2h0IiwidmVydGljYWxBbGlnbiIsImJvcmRlclJpZ2h0IiwibWFyZ2luIiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJmb250V2VpZ2h0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7OztBQ2ZhOztBQUFBQSxrQkFBQSxHQUFtQixJQUFuQjtBQUF3QkEsdUJBQUEsR0FBd0IsS0FBSyxDQUE3Qjs7QUFBK0IsSUFBSUMsTUFBTSxHQUFDQyxzQkFBc0IsQ0FBQ0MsbUJBQU8sQ0FBQyw0Q0FBRCxDQUFSLENBQWpDOztBQUFvRCxTQUFTRCxzQkFBVCxDQUFnQ0UsR0FBaEMsRUFBb0M7QUFBQyxTQUFPQSxHQUFHLElBQUVBLEdBQUcsQ0FBQ0MsVUFBVCxHQUFvQkQsR0FBcEIsR0FBd0I7QUFBQyxlQUFRQTtBQUFULEdBQS9CO0FBQThDOztBQUFBLElBQU1FLGVBQWUsR0FBQyxhQUFhTCxNQUFNLFdBQU4sQ0FBZU0sYUFBZixDQUE2QixFQUE3QixDQUFuQzs7QUFBb0VQLHVCQUFBLEdBQXdCTSxlQUF4Qjs7QUFBd0MsVUFBdUM7QUFBQ0EsaUJBQWUsQ0FBQ0UsV0FBaEIsR0FBNEIsaUJBQTVCO0FBQStDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FqWTs7OztBQUFBUixrQkFBQSxHQUFtQixJQUFuQjtBQUF3QkEsbUJBQUEsR0FBb0JTLFdBQXBCO0FBQWdDVCxjQUFBLEdBQWVVLE1BQWY7O0FBQXNC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SSxFQUFDO0FBQUNxRixXQUFPLEVBQUMsY0FBVDtBQUF3QkQsYUFBUyxFQUFDLE1BQWxDO0FBQXlDSyxjQUFVLEVBQUMsTUFBcEQ7QUFBMkROLFVBQU0sRUFBQyxNQUFsRTtBQUF5RU8saUJBQWEsRUFBQztBQUF2RixHQUF4UztBQUF5WWYsSUFBRSxFQUFDO0FBQUNVLFdBQU8sRUFBQyxjQUFUO0FBQXdCTSxlQUFXLEVBQUMsNEJBQXBDO0FBQWlFQyxVQUFNLEVBQUMsQ0FBeEU7QUFBMEVDLGVBQVcsRUFBQyxNQUF0RjtBQUE2RkMsV0FBTyxFQUFDLGtCQUFyRztBQUF3SEMsWUFBUSxFQUFDLE1BQWpJO0FBQXdJQyxjQUFVLEVBQUMsR0FBbko7QUFBdUpOLGlCQUFhLEVBQUM7QUFBckssR0FBNVk7QUFBd2pCZCxJQUFFLEVBQUM7QUFBQ21CLFlBQVEsRUFBQyxNQUFWO0FBQWlCQyxjQUFVLEVBQUMsUUFBNUI7QUFBcUNQLGNBQVUsRUFBQyxTQUFoRDtBQUEwREcsVUFBTSxFQUFDLENBQWpFO0FBQW1FRSxXQUFPLEVBQUM7QUFBM0U7QUFBM2pCLENBQWI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNEMXhDO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyx3RUFBd0I7QUFDL0M7QUFDQSIsImZpbGUiOiJzdGF0aWMvY2h1bmtzL3BhZ2VzL19lcnJvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eTsiLCJcInVzZSBzdHJpY3RcIjtleHBvcnRzLl9fZXNNb2R1bGU9dHJ1ZTtleHBvcnRzLkFtcFN0YXRlQ29udGV4dD12b2lkIDA7dmFyIF9yZWFjdD1faW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmope3JldHVybiBvYmomJm9iai5fX2VzTW9kdWxlP29iajp7ZGVmYXVsdDpvYmp9O31jb25zdCBBbXBTdGF0ZUNvbnRleHQ9LyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoe30pO2V4cG9ydHMuQW1wU3RhdGVDb250ZXh0PUFtcFN0YXRlQ29udGV4dDtpZihwcm9jZXNzLmVudi5OT0RFX0VOViE9PSdwcm9kdWN0aW9uJyl7QW1wU3RhdGVDb250ZXh0LmRpc3BsYXlOYW1lPSdBbXBTdGF0ZUNvbnRleHQnO31cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFtcC1jb250ZXh0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO2V4cG9ydHMuX19lc01vZHVsZT10cnVlO2V4cG9ydHMuaXNJbkFtcE1vZGU9aXNJbkFtcE1vZGU7ZXhwb3J0cy51c2VBbXA9dXNlQW1wO3ZhciBfcmVhY3Q9X2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO3ZhciBfYW1wQ29udGV4dD1yZXF1aXJlKFwiLi9hbXAtY29udGV4dFwiKTtmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iail7cmV0dXJuIG9iaiYmb2JqLl9fZXNNb2R1bGU/b2JqOntkZWZhdWx0Om9ian07fWZ1bmN0aW9uIGlzSW5BbXBNb2RlKHthbXBGaXJzdD1mYWxzZSxoeWJyaWQ9ZmFsc2UsaGFzUXVlcnk9ZmFsc2V9PXt9KXtyZXR1cm4gYW1wRmlyc3R8fGh5YnJpZCYmaGFzUXVlcnk7fWZ1bmN0aW9uIHVzZUFtcCgpey8vIERvbid0IGFzc2lnbiB0aGUgY29udGV4dCB2YWx1ZSB0byBhIHZhcmlhYmxlIHRvIHNhdmUgYnl0ZXNcbnJldHVybiBpc0luQW1wTW9kZShfcmVhY3QuZGVmYXVsdC51c2VDb250ZXh0KF9hbXBDb250ZXh0LkFtcFN0YXRlQ29udGV4dCkpO31cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFtcC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtleHBvcnRzLl9fZXNNb2R1bGU9dHJ1ZTtleHBvcnRzLmRlZmF1bHRIZWFkPWRlZmF1bHRIZWFkO2V4cG9ydHMuZGVmYXVsdD12b2lkIDA7dmFyIF9yZWFjdD1faW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwicmVhY3RcIikpO3ZhciBfc2lkZUVmZmVjdD1faW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NpZGUtZWZmZWN0XCIpKTt2YXIgX2FtcENvbnRleHQ9cmVxdWlyZShcIi4vYW1wLWNvbnRleHRcIik7dmFyIF9oZWFkTWFuYWdlckNvbnRleHQ9cmVxdWlyZShcIi4vaGVhZC1tYW5hZ2VyLWNvbnRleHRcIik7dmFyIF9hbXA9cmVxdWlyZShcIi4vYW1wXCIpO2Z1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKXtyZXR1cm4gb2JqJiZvYmouX19lc01vZHVsZT9vYmo6e2RlZmF1bHQ6b2JqfTt9ZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCl7aWYodHlwZW9mIFdlYWtNYXAhPT1cImZ1bmN0aW9uXCIpcmV0dXJuIG51bGw7dmFyIGNhY2hlPW5ldyBXZWFrTWFwKCk7X2dldFJlcXVpcmVXaWxkY2FyZENhY2hlPWZ1bmN0aW9uKCl7cmV0dXJuIGNhY2hlO307cmV0dXJuIGNhY2hlO31mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmope2lmKG9iaiYmb2JqLl9fZXNNb2R1bGUpe3JldHVybiBvYmo7fWlmKG9iaj09PW51bGx8fHR5cGVvZiBvYmohPT1cIm9iamVjdFwiJiZ0eXBlb2Ygb2JqIT09XCJmdW5jdGlvblwiKXtyZXR1cm57ZGVmYXVsdDpvYmp9O312YXIgY2FjaGU9X2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7aWYoY2FjaGUmJmNhY2hlLmhhcyhvYmopKXtyZXR1cm4gY2FjaGUuZ2V0KG9iaik7fXZhciBuZXdPYmo9e307dmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvcj1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBrZXkgaW4gb2JqKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLGtleSkpe3ZhciBkZXNjPWhhc1Byb3BlcnR5RGVzY3JpcHRvcj9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaixrZXkpOm51bGw7aWYoZGVzYyYmKGRlc2MuZ2V0fHxkZXNjLnNldCkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosa2V5LGRlc2MpO31lbHNle25ld09ialtrZXldPW9ialtrZXldO319fW5ld09iai5kZWZhdWx0PW9iajtpZihjYWNoZSl7Y2FjaGUuc2V0KG9iaixuZXdPYmopO31yZXR1cm4gbmV3T2JqO31mdW5jdGlvbiBkZWZhdWx0SGVhZChpbkFtcE1vZGU9ZmFsc2Upe2NvbnN0IGhlYWQ9Wy8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibWV0YVwiLHtjaGFyU2V0OlwidXRmLThcIn0pXTtpZighaW5BbXBNb2RlKXtoZWFkLnB1c2goLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIse25hbWU6XCJ2aWV3cG9ydFwiLGNvbnRlbnQ6XCJ3aWR0aD1kZXZpY2Utd2lkdGhcIn0pKTt9cmV0dXJuIGhlYWQ7fWZ1bmN0aW9uIG9ubHlSZWFjdEVsZW1lbnQobGlzdCxjaGlsZCl7Ly8gUmVhY3QgY2hpbGRyZW4gY2FuIGJlIFwic3RyaW5nXCIgb3IgXCJudW1iZXJcIiBpbiB0aGlzIGNhc2Ugd2UgaWdub3JlIHRoZW0gZm9yIGJhY2t3YXJkcyBjb21wYXRcbmlmKHR5cGVvZiBjaGlsZD09PSdzdHJpbmcnfHx0eXBlb2YgY2hpbGQ9PT0nbnVtYmVyJyl7cmV0dXJuIGxpc3Q7fS8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbmlmKGNoaWxkLnR5cGU9PT1fcmVhY3QuZGVmYXVsdC5GcmFnbWVudCl7cmV0dXJuIGxpc3QuY29uY2F0KF9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGQucHJvcHMuY2hpbGRyZW4pLnJlZHVjZSgoZnJhZ21lbnRMaXN0LGZyYWdtZW50Q2hpbGQpPT57aWYodHlwZW9mIGZyYWdtZW50Q2hpbGQ9PT0nc3RyaW5nJ3x8dHlwZW9mIGZyYWdtZW50Q2hpbGQ9PT0nbnVtYmVyJyl7cmV0dXJuIGZyYWdtZW50TGlzdDt9cmV0dXJuIGZyYWdtZW50TGlzdC5jb25jYXQoZnJhZ21lbnRDaGlsZCk7fSxbXSkpO31yZXR1cm4gbGlzdC5jb25jYXQoY2hpbGQpO31jb25zdCBNRVRBVFlQRVM9WyduYW1lJywnaHR0cEVxdWl2JywnY2hhclNldCcsJ2l0ZW1Qcm9wJ107LypcbiByZXR1cm5zIGEgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBoZWFkIGNoaWxkIGVsZW1lbnRzXG4gd2hpY2ggc2hvdWxkbid0IGJlIGR1cGxpY2F0ZWQsIGxpa2UgPHRpdGxlLz5cbiBBbHNvIGFkZHMgc3VwcG9ydCBmb3IgZGVkdXBsaWNhdGVkIGBrZXlgIHByb3BlcnRpZXNcbiovZnVuY3Rpb24gdW5pcXVlKCl7Y29uc3Qga2V5cz1uZXcgU2V0KCk7Y29uc3QgdGFncz1uZXcgU2V0KCk7Y29uc3QgbWV0YVR5cGVzPW5ldyBTZXQoKTtjb25zdCBtZXRhQ2F0ZWdvcmllcz17fTtyZXR1cm4gaD0+e2xldCBpc1VuaXF1ZT10cnVlO2xldCBoYXNLZXk9ZmFsc2U7aWYoaC5rZXkmJnR5cGVvZiBoLmtleSE9PSdudW1iZXInJiZoLmtleS5pbmRleE9mKCckJyk+MCl7aGFzS2V5PXRydWU7Y29uc3Qga2V5PWgua2V5LnNsaWNlKGgua2V5LmluZGV4T2YoJyQnKSsxKTtpZihrZXlzLmhhcyhrZXkpKXtpc1VuaXF1ZT1mYWxzZTt9ZWxzZXtrZXlzLmFkZChrZXkpO319Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuc3dpdGNoKGgudHlwZSl7Y2FzZSd0aXRsZSc6Y2FzZSdiYXNlJzppZih0YWdzLmhhcyhoLnR5cGUpKXtpc1VuaXF1ZT1mYWxzZTt9ZWxzZXt0YWdzLmFkZChoLnR5cGUpO31icmVhaztjYXNlJ21ldGEnOmZvcihsZXQgaT0wLGxlbj1NRVRBVFlQRVMubGVuZ3RoO2k8bGVuO2krKyl7Y29uc3QgbWV0YXR5cGU9TUVUQVRZUEVTW2ldO2lmKCFoLnByb3BzLmhhc093blByb3BlcnR5KG1ldGF0eXBlKSljb250aW51ZTtpZihtZXRhdHlwZT09PSdjaGFyU2V0Jyl7aWYobWV0YVR5cGVzLmhhcyhtZXRhdHlwZSkpe2lzVW5pcXVlPWZhbHNlO31lbHNle21ldGFUeXBlcy5hZGQobWV0YXR5cGUpO319ZWxzZXtjb25zdCBjYXRlZ29yeT1oLnByb3BzW21ldGF0eXBlXTtjb25zdCBjYXRlZ29yaWVzPW1ldGFDYXRlZ29yaWVzW21ldGF0eXBlXXx8bmV3IFNldCgpO2lmKChtZXRhdHlwZSE9PSduYW1lJ3x8IWhhc0tleSkmJmNhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSl7aXNVbmlxdWU9ZmFsc2U7fWVsc2V7Y2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpO21ldGFDYXRlZ29yaWVzW21ldGF0eXBlXT1jYXRlZ29yaWVzO319fWJyZWFrO31yZXR1cm4gaXNVbmlxdWU7fTt9LyoqXG4gKlxuICogQHBhcmFtIGhlYWRFbGVtZW50cyBMaXN0IG9mIG11bHRpcGxlIDxIZWFkPiBpbnN0YW5jZXNcbiAqL2Z1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHMoaGVhZEVsZW1lbnRzLHByb3BzKXtyZXR1cm4gaGVhZEVsZW1lbnRzLnJlZHVjZSgobGlzdCxoZWFkRWxlbWVudCk9Pntjb25zdCBoZWFkRWxlbWVudENoaWxkcmVuPV9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoaGVhZEVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO3JldHVybiBsaXN0LmNvbmNhdChoZWFkRWxlbWVudENoaWxkcmVuKTt9LFtdKS5yZWR1Y2Uob25seVJlYWN0RWxlbWVudCxbXSkucmV2ZXJzZSgpLmNvbmNhdChkZWZhdWx0SGVhZChwcm9wcy5pbkFtcE1vZGUpKS5maWx0ZXIodW5pcXVlKCkpLnJldmVyc2UoKS5tYXAoKGMsaSk9Pntjb25zdCBrZXk9Yy5rZXl8fGk7aWYocHJvY2Vzcy5lbnYuTk9ERV9FTlYhPT0nZGV2ZWxvcG1lbnQnJiZwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JWkVfRk9OVFMmJiFwcm9wcy5pbkFtcE1vZGUpe2lmKGMudHlwZT09PSdsaW5rJyYmYy5wcm9wc1snaHJlZiddJiYvLyBUT0RPKHByYXRlZWtiaEApOiBSZXBsYWNlIHRoaXMgd2l0aCBjb25zdCBmcm9tIGBjb25zdGFudHNgIHdoZW4gdGhlIHRyZWUgc2hha2luZyB3b3Jrcy5cblsnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MnLCdodHRwczovL3VzZS50eXBla2l0Lm5ldC8nXS5zb21lKHVybD0+Yy5wcm9wc1snaHJlZiddLnN0YXJ0c1dpdGgodXJsKSkpe2NvbnN0IG5ld1Byb3BzPXsuLi4oYy5wcm9wc3x8e30pfTtuZXdQcm9wc1snZGF0YS1ocmVmJ109bmV3UHJvcHNbJ2hyZWYnXTtuZXdQcm9wc1snaHJlZiddPXVuZGVmaW5lZDsvLyBBZGQgdGhpcyBhdHRyaWJ1dGUgdG8gbWFrZSBpdCBlYXN5IHRvIGlkZW50aWZ5IG9wdGltaXplZCB0YWdzXG5uZXdQcm9wc1snZGF0YS1vcHRpbWl6ZWQtZm9udHMnXT10cnVlO3JldHVybi8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jbG9uZUVsZW1lbnQoYyxuZXdQcm9wcyk7fX1yZXR1cm4vKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY2xvbmVFbGVtZW50KGMse2tleX0pO30pO30vKipcbiAqIFRoaXMgY29tcG9uZW50IGluamVjdHMgZWxlbWVudHMgdG8gYDxoZWFkPmAgb2YgeW91ciBwYWdlLlxuICogVG8gYXZvaWQgZHVwbGljYXRlZCBgdGFnc2AgaW4gYDxoZWFkPmAgeW91IGNhbiB1c2UgdGhlIGBrZXlgIHByb3BlcnR5LCB3aGljaCB3aWxsIG1ha2Ugc3VyZSBldmVyeSB0YWcgaXMgb25seSByZW5kZXJlZCBvbmNlLlxuICovZnVuY3Rpb24gSGVhZCh7Y2hpbGRyZW59KXtjb25zdCBhbXBTdGF0ZT0oMCxfcmVhY3QudXNlQ29udGV4dCkoX2FtcENvbnRleHQuQW1wU3RhdGVDb250ZXh0KTtjb25zdCBoZWFkTWFuYWdlcj0oMCxfcmVhY3QudXNlQ29udGV4dCkoX2hlYWRNYW5hZ2VyQ29udGV4dC5IZWFkTWFuYWdlckNvbnRleHQpO3JldHVybi8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9zaWRlRWZmZWN0LmRlZmF1bHQse3JlZHVjZUNvbXBvbmVudHNUb1N0YXRlOnJlZHVjZUNvbXBvbmVudHMsaGVhZE1hbmFnZXI6aGVhZE1hbmFnZXIsaW5BbXBNb2RlOigwLF9hbXAuaXNJbkFtcE1vZGUpKGFtcFN0YXRlKX0sY2hpbGRyZW4pO312YXIgX2RlZmF1bHQ9SGVhZDtleHBvcnRzLmRlZmF1bHQ9X2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWFkLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO2V4cG9ydHMuX19lc01vZHVsZT10cnVlO2V4cG9ydHMuZGVmYXVsdD12b2lkIDA7dmFyIF9yZWFjdD1yZXF1aXJlKFwicmVhY3RcIik7Y29uc3QgaXNTZXJ2ZXI9dHlwZW9mIHdpbmRvdz09PSd1bmRlZmluZWQnO2NsYXNzIF9kZWZhdWx0IGV4dGVuZHMgX3JlYWN0LkNvbXBvbmVudHtjb25zdHJ1Y3Rvcihwcm9wcyl7c3VwZXIocHJvcHMpO3RoaXMuX2hhc0hlYWRNYW5hZ2VyPXZvaWQgMDt0aGlzLmVtaXRDaGFuZ2U9KCk9PntpZih0aGlzLl9oYXNIZWFkTWFuYWdlcil7dGhpcy5wcm9wcy5oZWFkTWFuYWdlci51cGRhdGVIZWFkKHRoaXMucHJvcHMucmVkdWNlQ29tcG9uZW50c1RvU3RhdGUoWy4uLnRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlc10sdGhpcy5wcm9wcykpO319O3RoaXMuX2hhc0hlYWRNYW5hZ2VyPXRoaXMucHJvcHMuaGVhZE1hbmFnZXImJnRoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcztpZihpc1NlcnZlciYmdGhpcy5faGFzSGVhZE1hbmFnZXIpe3RoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcy5hZGQodGhpcyk7dGhpcy5lbWl0Q2hhbmdlKCk7fX1jb21wb25lbnREaWRNb3VudCgpe2lmKHRoaXMuX2hhc0hlYWRNYW5hZ2VyKXt0aGlzLnByb3BzLmhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMuYWRkKHRoaXMpO310aGlzLmVtaXRDaGFuZ2UoKTt9Y29tcG9uZW50RGlkVXBkYXRlKCl7dGhpcy5lbWl0Q2hhbmdlKCk7fWNvbXBvbmVudFdpbGxVbm1vdW50KCl7aWYodGhpcy5faGFzSGVhZE1hbmFnZXIpe3RoaXMucHJvcHMuaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcy5kZWxldGUodGhpcyk7fXRoaXMuZW1pdENoYW5nZSgpO31yZW5kZXIoKXtyZXR1cm4gbnVsbDt9fWV4cG9ydHMuZGVmYXVsdD1fZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZGUtZWZmZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO3ZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0PXJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtleHBvcnRzLl9fZXNNb2R1bGU9dHJ1ZTtleHBvcnRzLmRlZmF1bHQ9dm9pZCAwO3ZhciBfcmVhY3Q9X2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO3ZhciBfaGVhZD1faW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9uZXh0LXNlcnZlci9saWIvaGVhZFwiKSk7Y29uc3Qgc3RhdHVzQ29kZXM9ezQwMDonQmFkIFJlcXVlc3QnLDQwNDonVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZCcsNDA1OidNZXRob2QgTm90IEFsbG93ZWQnLDUwMDonSW50ZXJuYWwgU2VydmVyIEVycm9yJ307ZnVuY3Rpb24gX2dldEluaXRpYWxQcm9wcyh7cmVzLGVycn0pe2NvbnN0IHN0YXR1c0NvZGU9cmVzJiZyZXMuc3RhdHVzQ29kZT9yZXMuc3RhdHVzQ29kZTplcnI/ZXJyLnN0YXR1c0NvZGU6NDA0O3JldHVybntzdGF0dXNDb2RlfTt9LyoqXG4gKiBgRXJyb3JgIGNvbXBvbmVudCB1c2VkIGZvciBoYW5kbGluZyBlcnJvcnMuXG4gKi9jbGFzcyBFcnJvciBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudHtyZW5kZXIoKXtjb25zdHtzdGF0dXNDb2RlfT10aGlzLnByb3BzO2NvbnN0IHRpdGxlPXRoaXMucHJvcHMudGl0bGV8fHN0YXR1c0NvZGVzW3N0YXR1c0NvZGVdfHwnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWQnO3JldHVybi8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse3N0eWxlOnN0eWxlcy5lcnJvcn0sLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoX2hlYWQuZGVmYXVsdCxudWxsLC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIixudWxsLHN0YXR1c0NvZGU/YCR7c3RhdHVzQ29kZX06ICR7dGl0bGV9YDonQXBwbGljYXRpb24gZXJyb3I6IGEgY2xpZW50LXNpZGUgZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCcpKSwvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLG51bGwsLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOidib2R5IHsgbWFyZ2luOiAwIH0nfX0pLHN0YXR1c0NvZGU/LyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMVwiLHtzdHlsZTpzdHlsZXMuaDF9LHN0YXR1c0NvZGUpOm51bGwsLyojX19QVVJFX18qL19yZWFjdC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7c3R5bGU6c3R5bGVzLmRlc2N9LC8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDJcIix7c3R5bGU6c3R5bGVzLmgyfSx0aGlzLnByb3BzLnRpdGxlfHxzdGF0dXNDb2RlP3RpdGxlOi8qI19fUFVSRV9fKi9fcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9yZWFjdC5kZWZhdWx0LkZyYWdtZW50LG51bGwsXCJBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkIChcIiwvKiNfX1BVUkVfXyovX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImFcIix7aHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2NsaWVudC1zaWRlLWV4Y2VwdGlvbi1vY2N1cnJlZFwifSxcImRldmVsb3BlciBndWlkYW5jZVwiKSxcIilcIiksXCIuXCIpKSkpO319ZXhwb3J0cy5kZWZhdWx0PUVycm9yO0Vycm9yLmRpc3BsYXlOYW1lPSdFcnJvclBhZ2UnO0Vycm9yLmdldEluaXRpYWxQcm9wcz1fZ2V0SW5pdGlhbFByb3BzO0Vycm9yLm9yaWdHZXRJbml0aWFsUHJvcHM9X2dldEluaXRpYWxQcm9wcztjb25zdCBzdHlsZXM9e2Vycm9yOntjb2xvcjonIzAwMCcsYmFja2dyb3VuZDonI2ZmZicsZm9udEZhbWlseTonLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBSb2JvdG8sIFwiU2Vnb2UgVUlcIiwgXCJGaXJhIFNhbnNcIiwgQXZlbmlyLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmJyxoZWlnaHQ6JzEwMHZoJyx0ZXh0QWxpZ246J2NlbnRlcicsZGlzcGxheTonZmxleCcsZmxleERpcmVjdGlvbjonY29sdW1uJyxhbGlnbkl0ZW1zOidjZW50ZXInLGp1c3RpZnlDb250ZW50OidjZW50ZXInfSxkZXNjOntkaXNwbGF5OidpbmxpbmUtYmxvY2snLHRleHRBbGlnbjonbGVmdCcsbGluZUhlaWdodDonNDlweCcsaGVpZ2h0Oic0OXB4Jyx2ZXJ0aWNhbEFsaWduOidtaWRkbGUnfSxoMTp7ZGlzcGxheTonaW5saW5lLWJsb2NrJyxib3JkZXJSaWdodDonMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwuMyknLG1hcmdpbjowLG1hcmdpblJpZ2h0OicyMHB4JyxwYWRkaW5nOicxMHB4IDIzcHggMTBweCAwJyxmb250U2l6ZTonMjRweCcsZm9udFdlaWdodDo1MDAsdmVydGljYWxBbGlnbjondG9wJ30saDI6e2ZvbnRTaXplOicxNHB4Jyxmb250V2VpZ2h0Oidub3JtYWwnLGxpbmVIZWlnaHQ6J2luaGVyaXQnLG1hcmdpbjowLHBhZGRpbmc6MH19O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2Vycm9yLmpzLm1hcCIsIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvX2Vycm9yXCIsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKFwibmV4dC9kaXN0L3BhZ2VzL19lcnJvclwiKTtcbiAgICAgIH1cbiAgICBdKTtcbiAgIl0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /.next/static/development/_buildManifest.js: -------------------------------------------------------------------------------- 1 | self.__BUILD_MANIFEST = {__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":["static\u002Fchunks\u002Fpages\u002Findex.js"],"/_error":["static\u002Fchunks\u002Fpages\u002F_error.js"],"/protected":["static\u002Fchunks\u002Fpages\u002Fprotected.js"],sortedPages:["\u002F","\u002F_app","\u002F_error","\u002Fprotected"]};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() -------------------------------------------------------------------------------- /.next/static/development/_ssgManifest.js: -------------------------------------------------------------------------------- 1 | self.__SSG_MANIFEST=new Set;self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() -------------------------------------------------------------------------------- /.next/static/webpack/0c207ab87360709d683d.webpack.hot-update.json: -------------------------------------------------------------------------------- 1 | {"c":["webpack"],"r":[],"m":[]} -------------------------------------------------------------------------------- /.next/static/webpack/3883b3dfd5b830605b3b.webpack.hot-update.json: -------------------------------------------------------------------------------- 1 | {"c":["webpack"],"r":[],"m":[]} -------------------------------------------------------------------------------- /.next/static/webpack/webpack.0c207ab87360709d683d.hot-update.js: -------------------------------------------------------------------------------- 1 | self["webpackHotUpdate_N_E"]("webpack",{}, 2 | /******/ function(__webpack_require__) { // webpackRuntimeModules 3 | /******/ "use strict"; 4 | /******/ 5 | /******/ /* webpack/runtime/getFullHash */ 6 | /******/ !function() { 7 | /******/ __webpack_require__.h = function() { return "978df0283ceab4ae77f7"; } 8 | /******/ }(); 9 | /******/ 10 | /******/ } 11 | ); 12 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FL3dlYnBhY2svcnVudGltZS9nZXRGdWxsSGFzaCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7VUFBQSxvQ0FBb0MsK0JBQStCLEUiLCJmaWxlIjoic3RhdGljL3dlYnBhY2svd2VicGFjay4wYzIwN2FiODczNjA3MDlkNjgzZC5ob3QtdXBkYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiX193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBcIjk3OGRmMDI4M2NlYWI0YWU3N2Y3XCI7IH0iXSwic291cmNlUm9vdCI6IiJ9 -------------------------------------------------------------------------------- /.next/static/webpack/webpack.3883b3dfd5b830605b3b.hot-update.js: -------------------------------------------------------------------------------- 1 | self["webpackHotUpdate_N_E"]("webpack",{}, 2 | /******/ function(__webpack_require__) { // webpackRuntimeModules 3 | /******/ "use strict"; 4 | /******/ 5 | /******/ /* webpack/runtime/getFullHash */ 6 | /******/ !function() { 7 | /******/ __webpack_require__.h = function() { return "0c207ab87360709d683d"; } 8 | /******/ }(); 9 | /******/ 10 | /******/ /* webpack/runtime/compat */ 11 | /******/ 12 | /******/ 13 | /******/ // noop fns to prevent runtime errors during initialization 14 | /******/ if (typeof self !== "undefined") { 15 | /******/ self.$RefreshReg$ = function () {}; 16 | /******/ self.$RefreshSig$ = function () { 17 | /******/ return function (type) { 18 | /******/ return type; 19 | /******/ }; 20 | /******/ }; 21 | /******/ }} 22 | ); 23 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FL3dlYnBhY2svcnVudGltZS9nZXRGdWxsSGFzaCIsIndlYnBhY2s6Ly9fTl9FL3dlYnBhY2svcnVudGltZS9jb21wYXQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O1VBQUEsb0NBQW9DLCtCQUErQixFOzs7Ozs7U0NFbkU7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBLEMiLCJmaWxlIjoic3RhdGljL3dlYnBhY2svd2VicGFjay4zODgzYjNkZmQ1YjgzMDYwNWIzYi5ob3QtdXBkYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiX193ZWJwYWNrX3JlcXVpcmVfXy5oID0gZnVuY3Rpb24oKSB7IHJldHVybiBcIjBjMjA3YWI4NzM2MDcwOWQ2ODNkXCI7IH0iLCJcblxuLy8gbm9vcCBmbnMgdG8gcHJldmVudCBydW50aW1lIGVycm9ycyBkdXJpbmcgaW5pdGlhbGl6YXRpb25cbmlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRzZWxmLiRSZWZyZXNoUmVnJCA9IGZ1bmN0aW9uICgpIHt9O1xuXHRzZWxmLiRSZWZyZXNoU2lnJCA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKHR5cGUpIHtcblx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH07XG5cdH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ== -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | https://dev.to/antonm7/nextjs-auth-with-prisma-and-refresh-tokens-jwt-5he1 2 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 3 | 4 | ## Getting Started 5 | 6 | First, run the development server: 7 | 8 | ```bash 9 | npm run dev 10 | # or 11 | yarn dev 12 | ``` 13 | 14 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 15 | 16 | You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. 17 | 18 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. 19 | 20 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 21 | 22 | ## Learn More 23 | 24 | To learn more about Next.js, take a look at the following resources: 25 | 26 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 27 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 28 | 29 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 30 | 31 | ## Deploy on Vercel 32 | 33 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 34 | 35 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 36 | -------------------------------------------------------------------------------- /functions/auth.js: -------------------------------------------------------------------------------- 1 | import {sign} from 'jsonwebtoken' 2 | import cookie from 'cookie' 3 | import { useStore } from "../store"; 4 | 5 | export const refreshToken = () => { 6 | return fetch('/api/refresh_token', { 7 | method: "POST", 8 | credentials: "include" 9 | }).then(res => res.json()) 10 | .then(data => {return data}) 11 | } 12 | 13 | export const createAccessToken = (user) => { 14 | return sign({ userId: user.id }, process.env.ACCESS_TOKEN_SECRET, { 15 | expiresIn: '15m' 16 | }); 17 | }; 18 | 19 | export const createRefreshToken = (user) => { 20 | return sign( 21 | { userId: user.id },process.env.REFRESH_TOKEN_SECRET,{ 22 | expiresIn: "7d" 23 | } 24 | ); 25 | }; 26 | 27 | export const sendRefreshToken = (res,token) => { 28 | res.setHeader('Set-Cookie',cookie.serialize('refreshToken',token, { 29 | httpOnly: true, 30 | maxAge: 60 * 60 * 24 * 7, 31 | path: '/' 32 | })) 33 | }; -------------------------------------------------------------------------------- /functions/checkAuthClient.js: -------------------------------------------------------------------------------- 1 | import { useStore } from "../store"; 2 | import {useRouter} from 'next/router' 3 | 4 | const withAuth = Component => { 5 | const Auth = (props) => { 6 | const store = useStore() 7 | const router = useRouter() 8 | if(store.accessToken !== null) { 9 | return ( 10 | <Component {...props} /> 11 | ); 12 | } else { 13 | router.replace("/"); 14 | return null; 15 | } 16 | }; 17 | return Auth; 18 | }; 19 | 20 | export default withAuth; -------------------------------------------------------------------------------- /functions/initPrisma.js: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from '@prisma/client' 2 | const Prisma = new PrismaClient() 3 | 4 | export default Prisma -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | reactStrictMode: true, 3 | } 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "prismnext", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@auth0/nextjs-auth0": "^1.5.0", 13 | "@prisma/client": "^2.28.0", 14 | "axios": "^0.21.1", 15 | "bcrypt": "^5.0.1", 16 | "cookie": "^0.4.1", 17 | "cookie-parser": "^1.4.5", 18 | "express": "^4.17.1", 19 | "firebase": "^8.8.1", 20 | "firebase-admin": "^9.11.0", 21 | "jsonwebtoken": "^8.5.1", 22 | "next": "11.0.1", 23 | "next-auth": "^3.27.3", 24 | "react": "17.0.2", 25 | "react-dom": "17.0.2", 26 | "superjson": "^1.7.4", 27 | "swr": "^0.5.6", 28 | "zustand": "^3.5.7" 29 | }, 30 | "devDependencies": { 31 | "eslint": "7.31.0", 32 | "eslint-config-next": "11.0.1", 33 | "prisma": "^2.28.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /pages/_app.js: -------------------------------------------------------------------------------- 1 | import '../styles/global.css' 2 | import { useEffect, useState } from 'react' 3 | import {refreshToken} from '../functions/auth' 4 | import {useStore} from '../store' 5 | 6 | function MyApp({ Component, pageProps }) { 7 | const store = useStore() 8 | const [loading, setLoading] = useState(true) 9 | 10 | useEffect(() => { 11 | //initial funciton 12 | refreshToken().then(data => { 13 | if(data.ok) { 14 | store.setAccessToken(data.accessToken) 15 | store.setUser(data.user) 16 | } 17 | setLoading(false) 18 | }) 19 | 20 | //starts silent refreshes 21 | setInterval(() => { 22 | refreshToken().then(data => { 23 | if(data.ok) { 24 | store.setAccessToken(data.accessToken) 25 | store.setUser(data.user) 26 | } 27 | }) 28 | },600000) 29 | },[]) 30 | 31 | if(loading) return <div>Loading....</div> 32 | 33 | return <Component {...pageProps} /> 34 | 35 | } 36 | export default MyApp 37 | -------------------------------------------------------------------------------- /pages/api/logout.js: -------------------------------------------------------------------------------- 1 | import cookie from 'cookie' 2 | export default (req, res) => { 3 | if(req.method === 'POST') { 4 | //deletes refresh token 5 | res.setHeader('Set-Cookie',cookie.serialize('refreshToken','', { 6 | httpOnly: true, 7 | maxAge: 0, 8 | path: '/' 9 | })) 10 | res.status(200).send() 11 | } 12 | } -------------------------------------------------------------------------------- /pages/api/middleware/checkAuthServer.js: -------------------------------------------------------------------------------- 1 | import { verify } from 'jsonwebtoken' 2 | 3 | const checkAuth = (handler) => { 4 | return async (req, res) => { 5 | try { 6 | const authorization = req.headers["authorization"] 7 | if (!authorization) throw new Error("not authenticated") 8 | 9 | const token = authorization.split(" ")[1] 10 | verify(token, process.env.ACCESS_TOKEN_SECRET); 11 | 12 | return handler(req, res) 13 | } catch (e) { 14 | console.log(e) 15 | res.status(401).send() 16 | } 17 | } 18 | } 19 | 20 | export default checkAuth -------------------------------------------------------------------------------- /pages/api/protectedRoute.js: -------------------------------------------------------------------------------- 1 | import checkAuth from './middleware/checkAuthServer' 2 | 3 | const protectedRoute = async (req, res) => { 4 | if(req.method === 'GET') { 5 | //secret data 6 | res.send('Hey, keep it in secret!') 7 | } 8 | } 9 | 10 | 11 | //authentication middleware 12 | export default checkAuth(protectedRoute) -------------------------------------------------------------------------------- /pages/api/refresh_token.js: -------------------------------------------------------------------------------- 1 | import { verify } from 'jsonwebtoken' 2 | import {createAccessToken, sendRefreshToken, createRefreshToken} from '../../functions/auth' 3 | import cookie from 'cookie' 4 | import Prisma from '../../functions/initPrisma' 5 | 6 | 7 | export default async function refresh_token(req, res) { 8 | if (req.method === 'POST') { 9 | if(!req.headers.cookie) return res.send({ok: false,accessToken: ''}) 10 | const getToken = cookie.parse(req.headers.cookie) 11 | const token = getToken.refreshToken 12 | 13 | if(!token) return res.send({ok: false,accessToken: ''}) 14 | let payload = null 15 | 16 | try { 17 | payload = verify(token, process.env.REFRESH_TOKEN_SECRET) 18 | 19 | const user = await Prisma.user.findUnique({ 20 | where: { 21 | id: payload.userId 22 | }, 23 | select: { 24 | id: true, 25 | firstName: true, 26 | secondName: true, 27 | email: true 28 | } 29 | }) 30 | 31 | if (!user) return res.send({ok: false,accessToken: ''}) 32 | 33 | sendRefreshToken(res, createRefreshToken(user)); 34 | const accessToken = createAccessToken(user) 35 | 36 | return res.send({ ok: true, accessToken,user }); 37 | } catch (e) { 38 | console.log(e) 39 | return res.send({ok: false,accessToken: ''}) 40 | } 41 | 42 | } else { 43 | res.status(500).send() 44 | } 45 | } -------------------------------------------------------------------------------- /pages/api/signIn.js: -------------------------------------------------------------------------------- 1 | import Prisma from '../../functions/initPrisma' 2 | import {createAccessToken, createRefreshToken, sendRefreshToken} from '../../functions/auth' 3 | 4 | 5 | export default async (req, res) => { 6 | if(req.method === 'POST') { 7 | const {email, password} = JSON.parse(req.body) 8 | const user = await Prisma.user.findUnique({ 9 | where: { 10 | email 11 | } 12 | }) 13 | 14 | const userForTheClient = { 15 | id:user.id, 16 | firstName:user.firstName, 17 | secondName:user.secondName, 18 | email:user.email 19 | } 20 | 21 | if(user.password === password) { 22 | const token = createRefreshToken(user) 23 | sendRefreshToken(res,token) 24 | const accessToken = createAccessToken(user) 25 | res.send({user:userForTheClient,accessToken}) 26 | } else { 27 | res.status(404).send() 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /pages/api/signup.js: -------------------------------------------------------------------------------- 1 | import { createAccessToken, createRefreshToken, sendRefreshToken } from '../../functions/auth' 2 | import Prisma from '../../functions/initPrisma' 3 | 4 | export default async (req, res) => { 5 | const {email, firstName, secondName, password} = JSON.parse(req.body) 6 | 7 | //checking if someone have used the email 8 | const checkIfExist = await Prisma.user.findUnique({ 9 | where: { 10 | email 11 | } 12 | }) 13 | 14 | if(checkIfExist) return res.status(409).send() 15 | 16 | const user = await Prisma.user.create({ 17 | data: { 18 | email, 19 | firstName, 20 | secondName, 21 | password 22 | } 23 | }) 24 | 25 | const token = createRefreshToken(user) 26 | sendRefreshToken(res,token) 27 | 28 | const accessToken = createAccessToken(user) 29 | res.send({user,accessToken}) 30 | } -------------------------------------------------------------------------------- /pages/index.js: -------------------------------------------------------------------------------- 1 | import { useStore } from '../store' 2 | import { useEffect, useState } from 'react' 3 | import Link from 'next/link' 4 | 5 | export default function Index() { 6 | const [firstName, setFirstName] = useState('') 7 | const [secondName, setSecondName] = useState('') 8 | const [email, setEmail] = useState('') 9 | const [password, setPassword] = useState('') 10 | const [loginPassword, setLoginPassword] = useState('') 11 | const [loginEmail, setLoginEmail] = useState('') 12 | const [auth, setAuth] = useState(false) 13 | 14 | const store = useStore() 15 | 16 | useEffect(() => { 17 | if(store.accessToken !== null) { 18 | setAuth(true) 19 | } 20 | else { 21 | setAuth(false) 22 | } 23 | },[store.accessToken]) 24 | 25 | 26 | function signup() { 27 | fetch('/api/signup',{ 28 | method:'POST', 29 | body:JSON.stringify({ 30 | email, 31 | firstName, 32 | secondName, 33 | password 34 | }) 35 | }).then(res => { 36 | if(res.status === 409) throw new Error('Please use other email') 37 | return res.json() 38 | }).then(data => { 39 | store.setAccessToken(data.accessToken) 40 | store.setUser(data.user) 41 | }) 42 | .catch(e => { 43 | return console.log(e) 44 | }) 45 | } 46 | 47 | function signIn() { 48 | fetch('/api/signIn', { 49 | method: 'POST', 50 | body: JSON.stringify({ 51 | email: loginEmail, 52 | password:loginPassword 53 | }) 54 | }).then(res => res.json()) 55 | .then(data => { 56 | store.setAccessToken(data.accessToken) 57 | store.setUser(data.user) 58 | }) 59 | } 60 | 61 | function logOut() { 62 | fetch('/api/logout', { 63 | method:'POST', 64 | credentials: 'include' 65 | }).then(() => { 66 | store.setAccessToken(null) 67 | store.setUser(null) 68 | 69 | }) 70 | } 71 | 72 | return ( 73 | <div> 74 | {auth === true ? 75 | <div> 76 | Hello {store.user.firstName}, you are authenticated so you can visit <Link href="/protected"> protected page</Link> 77 | <button onClick={() => logOut()}>Logout</button> 78 | </div> 79 | : 80 | <div className="margin"> 81 | <div className="margin"> 82 | <h1>Register</h1> 83 | <input onChange={e => setFirstName(e.target.value)} placeholder="First Name"></input> 84 | <input onChange={e => setSecondName(e.target.value)} placeholder="Second Name"></input> 85 | <input onChange={e => setEmail(e.target.value)} placeholder="email"></input> 86 | <input onChange={e => setPassword(e.target.value)} placeholder="password" type="password"></input> 87 | <button onClick={() => signup()}>SignUp</button> 88 | </div> 89 | <div className="margin"> 90 | <h1>Login</h1> 91 | <input onChange={e => setLoginEmail(e.target.value)} placeholder="Email"></input> 92 | <input onChange={e => setLoginPassword(e.target.value)} placeholder="Password" type="password"></input> 93 | <button onClick={() => signIn()}>Sign In</button> 94 | </div> 95 | </div> 96 | } 97 | </div> 98 | ) 99 | } -------------------------------------------------------------------------------- /pages/protected.js: -------------------------------------------------------------------------------- 1 | import { useStore } from '../store' 2 | import {useEffect, useState} from 'react' 3 | import useSWR from 'swr' 4 | import checkAuthClient from '../functions/checkAuthClient' 5 | import axios from 'axios' 6 | 7 | function Protected() { 8 | const store = useStore() 9 | const [secret, setSecret] = useState(null) 10 | const [isError, setError] = useState(null) 11 | const [loading, setLoading] = useState(true) 12 | 13 | const fetcher = async () => { 14 | return await axios.get('/api/protectedRoute', { 15 | headers: { 16 | authorization: `Bearer ${store.accessToken}` 17 | } 18 | }) 19 | } 20 | 21 | const { data, error } = useSWR('/api/', fetcher) 22 | 23 | useEffect(() => { 24 | if(data) setSecret(data.data) 25 | if (error) setError(error) 26 | setLoading(false) 27 | },[data,error]) 28 | 29 | if(loading) { 30 | return (<div>Loading...</div>) 31 | } else { 32 | if(isError) { 33 | return ( 34 | <div>YO! YOU ARE NOT AUTHENTICATED,GET AWAY FROM HERE!!!</div> 35 | ) 36 | } else { 37 | return ( 38 | <div> 39 | Welcome to protected Page, {secret} 40 | </div> 41 | ) 42 | } 43 | } 44 | } 45 | 46 | export default checkAuthClient(Protected) 47 | -------------------------------------------------------------------------------- /prisma/migrations/20210730153856_initial/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "users" ( 3 | "id" SERIAL NOT NULL, 4 | "firstName" TEXT, 5 | "secondName" TEXT, 6 | "email" TEXT, 7 | "password" TEXT NOT NULL, 8 | "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 9 | "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 10 | 11 | PRIMARY KEY ("id") 12 | ); 13 | 14 | -- CreateTable 15 | CREATE TABLE "Post" ( 16 | "id" SERIAL NOT NULL, 17 | "userId" INTEGER NOT NULL, 18 | 19 | PRIMARY KEY ("id") 20 | ); 21 | 22 | -- CreateIndex 23 | CREATE UNIQUE INDEX "users.email_unique" ON "users"("email"); 24 | 25 | -- AddForeignKey 26 | ALTER TABLE "Post" ADD FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; 27 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | datasource db { 2 | provider = "postgresql" 3 | url = "postgresql://postgres:123@localhost:5432/sample_db" 4 | } 5 | 6 | generator client { 7 | provider = "prisma-client-js" 8 | } 9 | 10 | model User { 11 | id Int @id @default(autoincrement()) 12 | firstName String? 13 | secondName String? 14 | email String? @unique 15 | password String 16 | createdAt DateTime @default(now()) @map(name: "created_at") 17 | updatedAt DateTime @default(now()) @map(name: "updated_at") 18 | @@map(name: "users") 19 | } 20 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/antonm7/nextjs-prisma-auth/48eaae26981c28e61af4d3e8791ba22d9cf519d1/public/favicon.ico -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | <svg width="283" height="64" viewBox="0 0 283 64" fill="none" 2 | xmlns="http://www.w3.org/2000/svg"> 3 | <path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/> 4 | </svg> -------------------------------------------------------------------------------- /store/index.js: -------------------------------------------------------------------------------- 1 | import create from 'zustand' 2 | 3 | export const useStore = create(set => ({ 4 | accessToken: null, 5 | user:{}, 6 | setAccessToken: (input) => set((state) => ({ accessToken: input })), 7 | removeAccessToken: () => set({ accessToken: null }), 8 | setUser: (input) => set((state) => ({ user:input })), 9 | removeUser: () => set({user:null}) 10 | })) 11 | -------------------------------------------------------------------------------- /styles/global.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | } 5 | 6 | .margin { 7 | margin: 1rem; 8 | } --------------------------------------------------------------------------------