├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── docker-compose.yml ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.js ├── api │ └── transcribe.js ├── components │ ├── animatedBars.js │ ├── animatedBars.module.css │ ├── arrow.js │ ├── dialog.js │ ├── dialog.module.css │ ├── iconbutton.js │ ├── iconbutton.module.css │ ├── message.js │ ├── message.module.css │ ├── microphone.js │ ├── microphoneOff.js │ ├── pause.js │ ├── play.js │ ├── progress.js │ ├── progress.module.css │ └── settings.js ├── index.js ├── index.module.css └── lib │ ├── upload.js │ ├── useStorage.js │ └── utils.js ├── public ├── favicon.ico ├── logo192.png ├── logo512.png ├── manifest.json ├── robots.txt ├── screenshot.png ├── screenshot2.png └── screenshot3.png ├── server.js └── styles └── app.css /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | .next 11 | .env 12 | .vscode 13 | 14 | node_modules 15 | dist 16 | dist-ssr 17 | *.local 18 | 19 | _bin 20 | *.bu.css 21 | *.bu.jsx 22 | *.bu.js 23 | *.m4a.srt 24 | *.m4a.txt 25 | *.m4a.vtt 26 | public/uploads/*.m4a 27 | public/uploads/*.m4a.srt 28 | public/uploads/*.m4a.txt 29 | public/uploads/*.m4a.vtt 30 | 31 | *.pem 32 | *.crt 33 | 34 | # Editor directories and files 35 | .vscode/* 36 | !.vscode/extensions.json 37 | .idea 38 | .DS_Store 39 | *.suo 40 | *.ntvs* 41 | *.njsproj 42 | *.sln 43 | *.sw? 44 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nvidia/cuda:11.8.0-base-ubuntu22.04 2 | 3 | ENV DEBIAN_FRONTEND=noninteractive 4 | RUN apt update && apt -y install ffmpeg python3 python3-pip git 5 | RUN pip install git+https://github.com/openai/whisper.git 6 | RUN apt install curl -yq 7 | RUN curl -sL https://deb.nodesource.com/setup_19.x | bash - 8 | RUN apt install -yq nodejs 9 | WORKDIR /app 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022-present SuperShaneski 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | openai-whisper 2 | =========== 3 | 4 | This is a sample webapp implementation of [OpenAI Whisper](https://openai.com/blog/whisper/), an automatic speech recognition (ASR) system, using [Next.JS](https://nextjs.org/). 5 | 6 | It records audio data automatically and uploads the audio data to the server for transcribing/translating then sends back the result to the front end. 7 | It is also possible to playback the recorded audio to verify the output. 8 | 9 | > **Update:** If you want to use `Next 13` with experimental feature enabled (appDir), please check [openai-whisper-api](https://github.com/supershaneski/openai-whisper-api/) instead. Just set the flag to use whisper python module instead of whisper API. 10 | 11 | --- 12 | 13 | * Using `OpenAI` [Speech to Text API](https://platform.openai.com/docs/guides/speech-to-text), please check [openai-whisper-api](https://github.com/supershaneski/openai-whisper-api/) 14 | 15 | * If you are looking for voice-chat app using `Whisper`, please check [openai-whisper-talk](https://github.com/supershaneski/openai-whisper-talk/). 16 | 17 | * For `Nuxt.js` version, please check [openai-chatterbox](https://github.com/supershaneski/openai-chatterbox/). 18 | 19 | # Motivation 20 | 21 | It has been said that `Whisper` itself is [not designed to support ***real-time*** streaming tasks per se](https://github.com/openai/whisper/discussions/2) but it does not mean we cannot try, vain as it may be, lol. 22 | 23 | So this project is my attempt to make an ***almost real-time*** transcriber web application using openai `Whisper`. 24 | The efficacy of which depends on how fast the server can transcribe/translate the audio. 25 | 26 | I used `Next.js` so that I do not have to make separate backend and frontend apps. 27 | 28 | As for the backend, I used `exec` to execute shell command invoking `Whisper`. 29 | I have not yet find a way to `import` it as a `node.js` module. 30 | All examples with `import` seem to be using `python` server. 31 | 32 | ```javascript 33 | import { exec } from 'child_process' 34 | 35 | exec(`whisper './${filename}' --model tiny --language Japanese --task translate`, (err, stdout, stderr) => { 36 | if (err) { 37 | console.log(err) 38 | } else { 39 | console.log(stdout) 40 | console.log(stderr) 41 | } 42 | }) 43 | ``` 44 | 45 | Notice I am just using the `tiny` model to perform super fast transcribing task. 46 | This is all my system can handle otherwise it will come to a stand still. 47 | 48 | ## The App 49 | 50 |  51 | 52 | I changed the behavior of the app from previous version. 53 | Before, the app will record audio data continuously by some time interval, by default 5s. 54 | Right now, it will only start recording if it can detect sound. 55 | 56 | There is a threshold setting to eliminate background noise from triggering the audio capture. 57 | By default it is set to `-45dB` (0dB is the loudest sound). 58 | Adjust the variable `minDecibels` in `Settings` if you want to set it to lower or higher depending on your needs. 59 | 60 | In normal human conversation, it is said that we tend to pause, on average, around 2 seconds between each sentences. Keeping this in mind, if sound is not detected for more than 2 seconds, recording will stop and the audio data will be sent to the backend for transcribing. 61 | You can change this by editing the value of `maxPause`, by default set to `2500ms`. 62 | 63 |  64 | 65 | It is possible to play the uploaded audio and follow the text output since the time period is shown. 66 | 67 | As for the code itself, I used `class component` (I know, I know...) because I had a difficult time to access `state variables` using hooks when I was developing. 68 | 69 |  70 | 71 | Aside from `minDecibels` and `maxPause`, you can also change several `Whisper` options such as `language`, `model` and `task` from the `Settings` dialog. Please check [Whisper's github repository](https://github.com/openai/whisper) for the explanation on the options. 72 | 73 | There are still lots of things to do so this project is still a work in progress... 74 | 75 | # Setup 76 | 77 | First, you need to install [`Whisper`](https://github.com/openai/whisper) and its `Python` dependencies 78 | 79 | ```sh 80 | $ pip install git+https://github.com/openai/whisper.git 81 | ``` 82 | 83 | You also need `ffmpeg` installed on your system 84 | 85 | ```sh 86 | # macos 87 | $ brew install ffmpeg 88 | 89 | # windows using chocolatey 90 | $ choco install ffmpeg 91 | 92 | # windows using scoop 93 | $ scoop install ffmpeg 94 | ``` 95 | 96 | By this time, you can test `Whisper` using command line 97 | 98 | ```sh 99 | $ whisper myaudiofile.ogg --language Japanese --task translate 100 | ``` 101 | 102 | If that is successful, you can proceed to install this app. 103 | 104 | Clone the repository and install the dependencies 105 | 106 | ```sh 107 | $ git clone https://github.com/supershaneski/openai-whisper.git myproject 108 | 109 | $ cd myproject 110 | 111 | $ npm install 112 | 113 | $ npm run dev 114 | ``` 115 | 116 | Open your browser to `http://localhost:3006/` to load the application page. 117 | 118 | ## Using HTTPS 119 | 120 | You might want to run this app using `https` protocol. 121 | This is needed if you want to use a separate device for audio capture and use your machine as server. 122 | 123 | In order to do so, prepare the proper `certificate` and `key` files and edit `server.js` at the root directory. 124 | 125 | Then run 126 | 127 | ```sh 128 | $ node server.js 129 | ``` 130 | 131 | Now, open your browser to `https://localhost:3006/` to load the page. 132 | 133 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | services: 3 | node: 4 | build: . 5 | ports: 6 | - '3006:3006' 7 | volumes: 8 | - .:/app/. 9 | runtime: nvidia 10 | command: '/bin/sh -c "npm install && node server.js"' 11 | deploy: 12 | resources: 13 | reservations: 14 | devices: 15 | - driver: nvidia 16 | count: 1 17 | capabilities: [gpu] 18 | 19 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | const securityHeaders = [ 2 | { 3 | key: 'Strict-Transport-Security', 4 | value: 'max-age=63072000; includeSubDomains; preload' 5 | }, 6 | ] 7 | 8 | module.exports = { 9 | webpack: function(config) { 10 | config.resolve.fallback = { fs: false } 11 | config.module.rules.push({ 12 | test: /\.md$/, 13 | use: 'raw-loader', 14 | }) 15 | return config 16 | }, 17 | env: { 18 | siteTitle: 'openai Whisper - Sample WebApp', 19 | }, 20 | async headers() { 21 | return [ 22 | { 23 | source: '/:path*', 24 | headers: securityHeaders, 25 | } 26 | ] 27 | }, 28 | serverRuntimeConfig: { 29 | PROJECT_ROOT: __dirname, 30 | }, 31 | trailingSlash: true, 32 | exportPathMap: async function( 33 | defaultPathMap, 34 | { dev, dir, outDir, distDir, buildId } 35 | ) { 36 | return { 37 | '/': { page: '/' }, 38 | }; 39 | } 40 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-whisper", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "openai-whisper", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "multer": "^1.4.5-lts.1", 13 | "next": "^13.0.1", 14 | "next-connect": "^0.13.0", 15 | "react": "^18.2.0", 16 | "react-dom": "^18.2.0" 17 | } 18 | }, 19 | "node_modules/@next/env": { 20 | "version": "13.0.1", 21 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.1.tgz", 22 | "integrity": "sha512-gK60YoFae3s8qi5UgIzbvxOhsh5gKyEaiKH5+kLBUYXLlrPyWJR2xKBj2WqvHkO7wDX7/Hed3DAqjSpU4ijIvQ==" 23 | }, 24 | "node_modules/@next/swc-android-arm-eabi": { 25 | "version": "13.0.1", 26 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.1.tgz", 27 | "integrity": "sha512-M28QSbohZlNXNn//HY6lV2T3YaMzG58Jwr0YwOdVmOQv6i+7lu6xe3GqQu4kdqInqhLrBXnL+nabFuGTVSHtTg==", 28 | "cpu": [ 29 | "arm" 30 | ], 31 | "optional": true, 32 | "os": [ 33 | "android" 34 | ], 35 | "engines": { 36 | "node": ">= 10" 37 | } 38 | }, 39 | "node_modules/@next/swc-android-arm64": { 40 | "version": "13.0.1", 41 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.1.tgz", 42 | "integrity": "sha512-szmO/i6GoHcPXcbhUKhwBMETWHNXH3ITz9wfxwOOFBNKdDU8pjKsHL88lg28aOiQYZSU1sxu1v1p9KY5kJIZCg==", 43 | "cpu": [ 44 | "arm64" 45 | ], 46 | "optional": true, 47 | "os": [ 48 | "android" 49 | ], 50 | "engines": { 51 | "node": ">= 10" 52 | } 53 | }, 54 | "node_modules/@next/swc-darwin-arm64": { 55 | "version": "13.0.1", 56 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.1.tgz", 57 | "integrity": "sha512-O1RxCaiDNOjGZmdAp6SQoHUITt9aVDQXoR3lZ/TloI/NKRAyAV4u0KUUofK+KaZeHOmVTnPUaQuCyZSc3i1x5Q==", 58 | "cpu": [ 59 | "arm64" 60 | ], 61 | "optional": true, 62 | "os": [ 63 | "darwin" 64 | ], 65 | "engines": { 66 | "node": ">= 10" 67 | } 68 | }, 69 | "node_modules/@next/swc-darwin-x64": { 70 | "version": "13.0.1", 71 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.1.tgz", 72 | "integrity": "sha512-8E6BY/VO+QqQkthhoWgB8mJMw1NcN9Vhl2OwEwxv8jy2r3zjeU+WNRxz4y8RLbcY0R1h+vHlXuP0mLnuac84tQ==", 73 | "cpu": [ 74 | "x64" 75 | ], 76 | "optional": true, 77 | "os": [ 78 | "darwin" 79 | ], 80 | "engines": { 81 | "node": ">= 10" 82 | } 83 | }, 84 | "node_modules/@next/swc-freebsd-x64": { 85 | "version": "13.0.1", 86 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.1.tgz", 87 | "integrity": "sha512-ocwoOxm2KVwF50RyoAT+2RQPLlkyoF7sAqzMUVgj+S6+DTkY3iwH+Zpo0XAk2pnqT9qguOrKnEpq9EIx//+K7Q==", 88 | "cpu": [ 89 | "x64" 90 | ], 91 | "optional": true, 92 | "os": [ 93 | "freebsd" 94 | ], 95 | "engines": { 96 | "node": ">= 10" 97 | } 98 | }, 99 | "node_modules/@next/swc-linux-arm-gnueabihf": { 100 | "version": "13.0.1", 101 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.1.tgz", 102 | "integrity": "sha512-yO7e3zITfGol/N6lPQnmIRi0WyuILBMXrvH6EdmWzzqMDJFfTCII6l+B6gMO5WVDCTQUGQlQRNZ7sFqWR4I71g==", 103 | "cpu": [ 104 | "arm" 105 | ], 106 | "optional": true, 107 | "os": [ 108 | "linux" 109 | ], 110 | "engines": { 111 | "node": ">= 10" 112 | } 113 | }, 114 | "node_modules/@next/swc-linux-arm64-gnu": { 115 | "version": "13.0.1", 116 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.1.tgz", 117 | "integrity": "sha512-OEs6WDPDI8RyM8SjOqTDMqMBfOlU97VnW6ZMXUvzUTyH0K9c7NF+cn7UMu+I4tKFN0uJ9WQs/6TYaFBGkgoVVA==", 118 | "cpu": [ 119 | "arm64" 120 | ], 121 | "optional": true, 122 | "os": [ 123 | "linux" 124 | ], 125 | "engines": { 126 | "node": ">= 10" 127 | } 128 | }, 129 | "node_modules/@next/swc-linux-arm64-musl": { 130 | "version": "13.0.1", 131 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.1.tgz", 132 | "integrity": "sha512-y5ypFK0Y3urZSFoQxbtDqvKsBx026sz+Fm+xHlPWlGHNZrbs3Q812iONjcZTo09QwRMk5X86iMWBRxV18xMhaw==", 133 | "cpu": [ 134 | "arm64" 135 | ], 136 | "optional": true, 137 | "os": [ 138 | "linux" 139 | ], 140 | "engines": { 141 | "node": ">= 10" 142 | } 143 | }, 144 | "node_modules/@next/swc-linux-x64-gnu": { 145 | "version": "13.0.1", 146 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.1.tgz", 147 | "integrity": "sha512-XDIHEE6SU8VCF+dUVntD6PDv6RK31N0forx9kucZBYirbe8vCZ+Yx8hYgvtIaGrTcWtGxibxmND0pIuHDq8H5g==", 148 | "cpu": [ 149 | "x64" 150 | ], 151 | "optional": true, 152 | "os": [ 153 | "linux" 154 | ], 155 | "engines": { 156 | "node": ">= 10" 157 | } 158 | }, 159 | "node_modules/@next/swc-linux-x64-musl": { 160 | "version": "13.0.1", 161 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.1.tgz", 162 | "integrity": "sha512-yxIOuuz5EOx0F1FDtsyzaLgnDym0Ysxv8CWeJyDTKKmt9BVyITg6q/cD+RP9bEkT1TQi+PYXIMATSz675Q82xw==", 163 | "cpu": [ 164 | "x64" 165 | ], 166 | "optional": true, 167 | "os": [ 168 | "linux" 169 | ], 170 | "engines": { 171 | "node": ">= 10" 172 | } 173 | }, 174 | "node_modules/@next/swc-win32-arm64-msvc": { 175 | "version": "13.0.1", 176 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.1.tgz", 177 | "integrity": "sha512-+ucLe2qgQzP+FM94jD4ns6LDGyMFaX9k3lVHqu/tsQCy2giMymbport4y4p77mYcXEMlDaHMzlHgOQyHRniWFA==", 178 | "cpu": [ 179 | "arm64" 180 | ], 181 | "optional": true, 182 | "os": [ 183 | "win32" 184 | ], 185 | "engines": { 186 | "node": ">= 10" 187 | } 188 | }, 189 | "node_modules/@next/swc-win32-ia32-msvc": { 190 | "version": "13.0.1", 191 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.1.tgz", 192 | "integrity": "sha512-Krr/qGN7OB35oZuvMAZKoXDt2IapynIWLh5A5rz6AODb7f/ZJqyAuZSK12vOa2zKdobS36Qm4IlxxBqn9c00MA==", 193 | "cpu": [ 194 | "ia32" 195 | ], 196 | "optional": true, 197 | "os": [ 198 | "win32" 199 | ], 200 | "engines": { 201 | "node": ">= 10" 202 | } 203 | }, 204 | "node_modules/@next/swc-win32-x64-msvc": { 205 | "version": "13.0.1", 206 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.1.tgz", 207 | "integrity": "sha512-t/0G33t/6VGWZUGCOT7rG42qqvf/x+MrFp1CU+8CN6PrjSSL57R5bqkXfubV9t4eCEnUxVP+5Hn3MoEXEebtEw==", 208 | "cpu": [ 209 | "x64" 210 | ], 211 | "optional": true, 212 | "os": [ 213 | "win32" 214 | ], 215 | "engines": { 216 | "node": ">= 10" 217 | } 218 | }, 219 | "node_modules/@swc/helpers": { 220 | "version": "0.4.11", 221 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", 222 | "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", 223 | "dependencies": { 224 | "tslib": "^2.4.0" 225 | } 226 | }, 227 | "node_modules/append-field": { 228 | "version": "1.0.0", 229 | "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", 230 | "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" 231 | }, 232 | "node_modules/buffer-from": { 233 | "version": "1.1.2", 234 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 235 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 236 | }, 237 | "node_modules/busboy": { 238 | "version": "1.6.0", 239 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 240 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 241 | "dependencies": { 242 | "streamsearch": "^1.1.0" 243 | }, 244 | "engines": { 245 | "node": ">=10.16.0" 246 | } 247 | }, 248 | "node_modules/caniuse-lite": { 249 | "version": "1.0.30001427", 250 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz", 251 | "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ==", 252 | "funding": [ 253 | { 254 | "type": "opencollective", 255 | "url": "https://opencollective.com/browserslist" 256 | }, 257 | { 258 | "type": "tidelift", 259 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 260 | } 261 | ] 262 | }, 263 | "node_modules/client-only": { 264 | "version": "0.0.1", 265 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 266 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 267 | }, 268 | "node_modules/concat-stream": { 269 | "version": "1.6.2", 270 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 271 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 272 | "engines": [ 273 | "node >= 0.8" 274 | ], 275 | "dependencies": { 276 | "buffer-from": "^1.0.0", 277 | "inherits": "^2.0.3", 278 | "readable-stream": "^2.2.2", 279 | "typedarray": "^0.0.6" 280 | } 281 | }, 282 | "node_modules/core-util-is": { 283 | "version": "1.0.3", 284 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 285 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 286 | }, 287 | "node_modules/inherits": { 288 | "version": "2.0.4", 289 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 290 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 291 | }, 292 | "node_modules/isarray": { 293 | "version": "1.0.0", 294 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 295 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 296 | }, 297 | "node_modules/js-tokens": { 298 | "version": "4.0.0", 299 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 300 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 301 | }, 302 | "node_modules/loose-envify": { 303 | "version": "1.4.0", 304 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 305 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 306 | "dependencies": { 307 | "js-tokens": "^3.0.0 || ^4.0.0" 308 | }, 309 | "bin": { 310 | "loose-envify": "cli.js" 311 | } 312 | }, 313 | "node_modules/media-typer": { 314 | "version": "0.3.0", 315 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 316 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 317 | "engines": { 318 | "node": ">= 0.6" 319 | } 320 | }, 321 | "node_modules/mime-db": { 322 | "version": "1.52.0", 323 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 324 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 325 | "engines": { 326 | "node": ">= 0.6" 327 | } 328 | }, 329 | "node_modules/mime-types": { 330 | "version": "2.1.35", 331 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 332 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 333 | "dependencies": { 334 | "mime-db": "1.52.0" 335 | }, 336 | "engines": { 337 | "node": ">= 0.6" 338 | } 339 | }, 340 | "node_modules/minimist": { 341 | "version": "1.2.7", 342 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 343 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 344 | "funding": { 345 | "url": "https://github.com/sponsors/ljharb" 346 | } 347 | }, 348 | "node_modules/mkdirp": { 349 | "version": "0.5.6", 350 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 351 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 352 | "dependencies": { 353 | "minimist": "^1.2.6" 354 | }, 355 | "bin": { 356 | "mkdirp": "bin/cmd.js" 357 | } 358 | }, 359 | "node_modules/multer": { 360 | "version": "1.4.5-lts.1", 361 | "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", 362 | "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", 363 | "dependencies": { 364 | "append-field": "^1.0.0", 365 | "busboy": "^1.0.0", 366 | "concat-stream": "^1.5.2", 367 | "mkdirp": "^0.5.4", 368 | "object-assign": "^4.1.1", 369 | "type-is": "^1.6.4", 370 | "xtend": "^4.0.0" 371 | }, 372 | "engines": { 373 | "node": ">= 6.0.0" 374 | } 375 | }, 376 | "node_modules/nanoid": { 377 | "version": "3.3.4", 378 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 379 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 380 | "bin": { 381 | "nanoid": "bin/nanoid.cjs" 382 | }, 383 | "engines": { 384 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 385 | } 386 | }, 387 | "node_modules/next": { 388 | "version": "13.0.1", 389 | "resolved": "https://registry.npmjs.org/next/-/next-13.0.1.tgz", 390 | "integrity": "sha512-ErCNBPIeZMKFn6hX+ZBSlqZVgJIeitEqhGTuQUNmYXJ07/A71DZ7AJI8eyHYUdBb686LUpV1/oBdTq9RpzRVPg==", 391 | "dependencies": { 392 | "@next/env": "13.0.1", 393 | "@swc/helpers": "0.4.11", 394 | "caniuse-lite": "^1.0.30001406", 395 | "postcss": "8.4.14", 396 | "styled-jsx": "5.1.0", 397 | "use-sync-external-store": "1.2.0" 398 | }, 399 | "bin": { 400 | "next": "dist/bin/next" 401 | }, 402 | "engines": { 403 | "node": ">=14.6.0" 404 | }, 405 | "optionalDependencies": { 406 | "@next/swc-android-arm-eabi": "13.0.1", 407 | "@next/swc-android-arm64": "13.0.1", 408 | "@next/swc-darwin-arm64": "13.0.1", 409 | "@next/swc-darwin-x64": "13.0.1", 410 | "@next/swc-freebsd-x64": "13.0.1", 411 | "@next/swc-linux-arm-gnueabihf": "13.0.1", 412 | "@next/swc-linux-arm64-gnu": "13.0.1", 413 | "@next/swc-linux-arm64-musl": "13.0.1", 414 | "@next/swc-linux-x64-gnu": "13.0.1", 415 | "@next/swc-linux-x64-musl": "13.0.1", 416 | "@next/swc-win32-arm64-msvc": "13.0.1", 417 | "@next/swc-win32-ia32-msvc": "13.0.1", 418 | "@next/swc-win32-x64-msvc": "13.0.1" 419 | }, 420 | "peerDependencies": { 421 | "fibers": ">= 3.1.0", 422 | "node-sass": "^6.0.0 || ^7.0.0", 423 | "react": "^18.2.0", 424 | "react-dom": "^18.2.0", 425 | "sass": "^1.3.0" 426 | }, 427 | "peerDependenciesMeta": { 428 | "fibers": { 429 | "optional": true 430 | }, 431 | "node-sass": { 432 | "optional": true 433 | }, 434 | "sass": { 435 | "optional": true 436 | } 437 | } 438 | }, 439 | "node_modules/next-connect": { 440 | "version": "0.13.0", 441 | "resolved": "https://registry.npmjs.org/next-connect/-/next-connect-0.13.0.tgz", 442 | "integrity": "sha512-f2G4edY01XomjCECSrgOpb/zzQinJO6Whd8Zds0+rLUYhj5cLwkh6FVvZsQCSSbxSc4k9nCwNuk5NLIhvO1gUA==", 443 | "dependencies": { 444 | "trouter": "^3.2.0" 445 | } 446 | }, 447 | "node_modules/object-assign": { 448 | "version": "4.1.1", 449 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 450 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 451 | "engines": { 452 | "node": ">=0.10.0" 453 | } 454 | }, 455 | "node_modules/picocolors": { 456 | "version": "1.0.0", 457 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 458 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 459 | }, 460 | "node_modules/postcss": { 461 | "version": "8.4.14", 462 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 463 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 464 | "funding": [ 465 | { 466 | "type": "opencollective", 467 | "url": "https://opencollective.com/postcss/" 468 | }, 469 | { 470 | "type": "tidelift", 471 | "url": "https://tidelift.com/funding/github/npm/postcss" 472 | } 473 | ], 474 | "dependencies": { 475 | "nanoid": "^3.3.4", 476 | "picocolors": "^1.0.0", 477 | "source-map-js": "^1.0.2" 478 | }, 479 | "engines": { 480 | "node": "^10 || ^12 || >=14" 481 | } 482 | }, 483 | "node_modules/process-nextick-args": { 484 | "version": "2.0.1", 485 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 486 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 487 | }, 488 | "node_modules/react": { 489 | "version": "18.2.0", 490 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 491 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 492 | "dependencies": { 493 | "loose-envify": "^1.1.0" 494 | }, 495 | "engines": { 496 | "node": ">=0.10.0" 497 | } 498 | }, 499 | "node_modules/react-dom": { 500 | "version": "18.2.0", 501 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 502 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 503 | "dependencies": { 504 | "loose-envify": "^1.1.0", 505 | "scheduler": "^0.23.0" 506 | }, 507 | "peerDependencies": { 508 | "react": "^18.2.0" 509 | } 510 | }, 511 | "node_modules/readable-stream": { 512 | "version": "2.3.7", 513 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 514 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 515 | "dependencies": { 516 | "core-util-is": "~1.0.0", 517 | "inherits": "~2.0.3", 518 | "isarray": "~1.0.0", 519 | "process-nextick-args": "~2.0.0", 520 | "safe-buffer": "~5.1.1", 521 | "string_decoder": "~1.1.1", 522 | "util-deprecate": "~1.0.1" 523 | } 524 | }, 525 | "node_modules/regexparam": { 526 | "version": "1.3.0", 527 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", 528 | "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==", 529 | "engines": { 530 | "node": ">=6" 531 | } 532 | }, 533 | "node_modules/safe-buffer": { 534 | "version": "5.1.2", 535 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 536 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 537 | }, 538 | "node_modules/scheduler": { 539 | "version": "0.23.0", 540 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 541 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 542 | "dependencies": { 543 | "loose-envify": "^1.1.0" 544 | } 545 | }, 546 | "node_modules/source-map-js": { 547 | "version": "1.0.2", 548 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 549 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 550 | "engines": { 551 | "node": ">=0.10.0" 552 | } 553 | }, 554 | "node_modules/streamsearch": { 555 | "version": "1.1.0", 556 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 557 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 558 | "engines": { 559 | "node": ">=10.0.0" 560 | } 561 | }, 562 | "node_modules/string_decoder": { 563 | "version": "1.1.1", 564 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 565 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 566 | "dependencies": { 567 | "safe-buffer": "~5.1.0" 568 | } 569 | }, 570 | "node_modules/styled-jsx": { 571 | "version": "5.1.0", 572 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", 573 | "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", 574 | "dependencies": { 575 | "client-only": "0.0.1" 576 | }, 577 | "engines": { 578 | "node": ">= 12.0.0" 579 | }, 580 | "peerDependencies": { 581 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 582 | }, 583 | "peerDependenciesMeta": { 584 | "@babel/core": { 585 | "optional": true 586 | }, 587 | "babel-plugin-macros": { 588 | "optional": true 589 | } 590 | } 591 | }, 592 | "node_modules/trouter": { 593 | "version": "3.2.0", 594 | "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.2.0.tgz", 595 | "integrity": "sha512-rLLXbhTObLy2MBVjLC+jTnoIKw99n0GuJs9ov10J870vDw5qhTurPzsDrudNtBf5w/CZ9ctZy2p2IMmhGcel2w==", 596 | "dependencies": { 597 | "regexparam": "^1.3.0" 598 | }, 599 | "engines": { 600 | "node": ">=6" 601 | } 602 | }, 603 | "node_modules/tslib": { 604 | "version": "2.4.1", 605 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 606 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 607 | }, 608 | "node_modules/type-is": { 609 | "version": "1.6.18", 610 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 611 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 612 | "dependencies": { 613 | "media-typer": "0.3.0", 614 | "mime-types": "~2.1.24" 615 | }, 616 | "engines": { 617 | "node": ">= 0.6" 618 | } 619 | }, 620 | "node_modules/typedarray": { 621 | "version": "0.0.6", 622 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 623 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" 624 | }, 625 | "node_modules/use-sync-external-store": { 626 | "version": "1.2.0", 627 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", 628 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", 629 | "peerDependencies": { 630 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0" 631 | } 632 | }, 633 | "node_modules/util-deprecate": { 634 | "version": "1.0.2", 635 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 636 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 637 | }, 638 | "node_modules/xtend": { 639 | "version": "4.0.2", 640 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 641 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 642 | "engines": { 643 | "node": ">=0.4" 644 | } 645 | } 646 | }, 647 | "dependencies": { 648 | "@next/env": { 649 | "version": "13.0.1", 650 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.0.1.tgz", 651 | "integrity": "sha512-gK60YoFae3s8qi5UgIzbvxOhsh5gKyEaiKH5+kLBUYXLlrPyWJR2xKBj2WqvHkO7wDX7/Hed3DAqjSpU4ijIvQ==" 652 | }, 653 | "@next/swc-android-arm-eabi": { 654 | "version": "13.0.1", 655 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.1.tgz", 656 | "integrity": "sha512-M28QSbohZlNXNn//HY6lV2T3YaMzG58Jwr0YwOdVmOQv6i+7lu6xe3GqQu4kdqInqhLrBXnL+nabFuGTVSHtTg==", 657 | "optional": true 658 | }, 659 | "@next/swc-android-arm64": { 660 | "version": "13.0.1", 661 | "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.1.tgz", 662 | "integrity": "sha512-szmO/i6GoHcPXcbhUKhwBMETWHNXH3ITz9wfxwOOFBNKdDU8pjKsHL88lg28aOiQYZSU1sxu1v1p9KY5kJIZCg==", 663 | "optional": true 664 | }, 665 | "@next/swc-darwin-arm64": { 666 | "version": "13.0.1", 667 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.1.tgz", 668 | "integrity": "sha512-O1RxCaiDNOjGZmdAp6SQoHUITt9aVDQXoR3lZ/TloI/NKRAyAV4u0KUUofK+KaZeHOmVTnPUaQuCyZSc3i1x5Q==", 669 | "optional": true 670 | }, 671 | "@next/swc-darwin-x64": { 672 | "version": "13.0.1", 673 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.1.tgz", 674 | "integrity": "sha512-8E6BY/VO+QqQkthhoWgB8mJMw1NcN9Vhl2OwEwxv8jy2r3zjeU+WNRxz4y8RLbcY0R1h+vHlXuP0mLnuac84tQ==", 675 | "optional": true 676 | }, 677 | "@next/swc-freebsd-x64": { 678 | "version": "13.0.1", 679 | "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.1.tgz", 680 | "integrity": "sha512-ocwoOxm2KVwF50RyoAT+2RQPLlkyoF7sAqzMUVgj+S6+DTkY3iwH+Zpo0XAk2pnqT9qguOrKnEpq9EIx//+K7Q==", 681 | "optional": true 682 | }, 683 | "@next/swc-linux-arm-gnueabihf": { 684 | "version": "13.0.1", 685 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.1.tgz", 686 | "integrity": "sha512-yO7e3zITfGol/N6lPQnmIRi0WyuILBMXrvH6EdmWzzqMDJFfTCII6l+B6gMO5WVDCTQUGQlQRNZ7sFqWR4I71g==", 687 | "optional": true 688 | }, 689 | "@next/swc-linux-arm64-gnu": { 690 | "version": "13.0.1", 691 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.1.tgz", 692 | "integrity": "sha512-OEs6WDPDI8RyM8SjOqTDMqMBfOlU97VnW6ZMXUvzUTyH0K9c7NF+cn7UMu+I4tKFN0uJ9WQs/6TYaFBGkgoVVA==", 693 | "optional": true 694 | }, 695 | "@next/swc-linux-arm64-musl": { 696 | "version": "13.0.1", 697 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.1.tgz", 698 | "integrity": "sha512-y5ypFK0Y3urZSFoQxbtDqvKsBx026sz+Fm+xHlPWlGHNZrbs3Q812iONjcZTo09QwRMk5X86iMWBRxV18xMhaw==", 699 | "optional": true 700 | }, 701 | "@next/swc-linux-x64-gnu": { 702 | "version": "13.0.1", 703 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.1.tgz", 704 | "integrity": "sha512-XDIHEE6SU8VCF+dUVntD6PDv6RK31N0forx9kucZBYirbe8vCZ+Yx8hYgvtIaGrTcWtGxibxmND0pIuHDq8H5g==", 705 | "optional": true 706 | }, 707 | "@next/swc-linux-x64-musl": { 708 | "version": "13.0.1", 709 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.1.tgz", 710 | "integrity": "sha512-yxIOuuz5EOx0F1FDtsyzaLgnDym0Ysxv8CWeJyDTKKmt9BVyITg6q/cD+RP9bEkT1TQi+PYXIMATSz675Q82xw==", 711 | "optional": true 712 | }, 713 | "@next/swc-win32-arm64-msvc": { 714 | "version": "13.0.1", 715 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.1.tgz", 716 | "integrity": "sha512-+ucLe2qgQzP+FM94jD4ns6LDGyMFaX9k3lVHqu/tsQCy2giMymbport4y4p77mYcXEMlDaHMzlHgOQyHRniWFA==", 717 | "optional": true 718 | }, 719 | "@next/swc-win32-ia32-msvc": { 720 | "version": "13.0.1", 721 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.1.tgz", 722 | "integrity": "sha512-Krr/qGN7OB35oZuvMAZKoXDt2IapynIWLh5A5rz6AODb7f/ZJqyAuZSK12vOa2zKdobS36Qm4IlxxBqn9c00MA==", 723 | "optional": true 724 | }, 725 | "@next/swc-win32-x64-msvc": { 726 | "version": "13.0.1", 727 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.1.tgz", 728 | "integrity": "sha512-t/0G33t/6VGWZUGCOT7rG42qqvf/x+MrFp1CU+8CN6PrjSSL57R5bqkXfubV9t4eCEnUxVP+5Hn3MoEXEebtEw==", 729 | "optional": true 730 | }, 731 | "@swc/helpers": { 732 | "version": "0.4.11", 733 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", 734 | "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", 735 | "requires": { 736 | "tslib": "^2.4.0" 737 | } 738 | }, 739 | "append-field": { 740 | "version": "1.0.0", 741 | "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", 742 | "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" 743 | }, 744 | "buffer-from": { 745 | "version": "1.1.2", 746 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 747 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 748 | }, 749 | "busboy": { 750 | "version": "1.6.0", 751 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 752 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 753 | "requires": { 754 | "streamsearch": "^1.1.0" 755 | } 756 | }, 757 | "caniuse-lite": { 758 | "version": "1.0.30001427", 759 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001427.tgz", 760 | "integrity": "sha512-lfXQ73oB9c8DP5Suxaszm+Ta2sr/4tf8+381GkIm1MLj/YdLf+rEDyDSRCzeltuyTVGm+/s18gdZ0q+Wmp8VsQ==" 761 | }, 762 | "client-only": { 763 | "version": "0.0.1", 764 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 765 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 766 | }, 767 | "concat-stream": { 768 | "version": "1.6.2", 769 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 770 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 771 | "requires": { 772 | "buffer-from": "^1.0.0", 773 | "inherits": "^2.0.3", 774 | "readable-stream": "^2.2.2", 775 | "typedarray": "^0.0.6" 776 | } 777 | }, 778 | "core-util-is": { 779 | "version": "1.0.3", 780 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 781 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 782 | }, 783 | "inherits": { 784 | "version": "2.0.4", 785 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 786 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 787 | }, 788 | "isarray": { 789 | "version": "1.0.0", 790 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 791 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 792 | }, 793 | "js-tokens": { 794 | "version": "4.0.0", 795 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 796 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 797 | }, 798 | "loose-envify": { 799 | "version": "1.4.0", 800 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 801 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 802 | "requires": { 803 | "js-tokens": "^3.0.0 || ^4.0.0" 804 | } 805 | }, 806 | "media-typer": { 807 | "version": "0.3.0", 808 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 809 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 810 | }, 811 | "mime-db": { 812 | "version": "1.52.0", 813 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 814 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 815 | }, 816 | "mime-types": { 817 | "version": "2.1.35", 818 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 819 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 820 | "requires": { 821 | "mime-db": "1.52.0" 822 | } 823 | }, 824 | "minimist": { 825 | "version": "1.2.7", 826 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 827 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" 828 | }, 829 | "mkdirp": { 830 | "version": "0.5.6", 831 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 832 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 833 | "requires": { 834 | "minimist": "^1.2.6" 835 | } 836 | }, 837 | "multer": { 838 | "version": "1.4.5-lts.1", 839 | "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", 840 | "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", 841 | "requires": { 842 | "append-field": "^1.0.0", 843 | "busboy": "^1.0.0", 844 | "concat-stream": "^1.5.2", 845 | "mkdirp": "^0.5.4", 846 | "object-assign": "^4.1.1", 847 | "type-is": "^1.6.4", 848 | "xtend": "^4.0.0" 849 | } 850 | }, 851 | "nanoid": { 852 | "version": "3.3.4", 853 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 854 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" 855 | }, 856 | "next": { 857 | "version": "13.0.1", 858 | "resolved": "https://registry.npmjs.org/next/-/next-13.0.1.tgz", 859 | "integrity": "sha512-ErCNBPIeZMKFn6hX+ZBSlqZVgJIeitEqhGTuQUNmYXJ07/A71DZ7AJI8eyHYUdBb686LUpV1/oBdTq9RpzRVPg==", 860 | "requires": { 861 | "@next/env": "13.0.1", 862 | "@next/swc-android-arm-eabi": "13.0.1", 863 | "@next/swc-android-arm64": "13.0.1", 864 | "@next/swc-darwin-arm64": "13.0.1", 865 | "@next/swc-darwin-x64": "13.0.1", 866 | "@next/swc-freebsd-x64": "13.0.1", 867 | "@next/swc-linux-arm-gnueabihf": "13.0.1", 868 | "@next/swc-linux-arm64-gnu": "13.0.1", 869 | "@next/swc-linux-arm64-musl": "13.0.1", 870 | "@next/swc-linux-x64-gnu": "13.0.1", 871 | "@next/swc-linux-x64-musl": "13.0.1", 872 | "@next/swc-win32-arm64-msvc": "13.0.1", 873 | "@next/swc-win32-ia32-msvc": "13.0.1", 874 | "@next/swc-win32-x64-msvc": "13.0.1", 875 | "@swc/helpers": "0.4.11", 876 | "caniuse-lite": "^1.0.30001406", 877 | "postcss": "8.4.14", 878 | "styled-jsx": "5.1.0", 879 | "use-sync-external-store": "1.2.0" 880 | } 881 | }, 882 | "next-connect": { 883 | "version": "0.13.0", 884 | "resolved": "https://registry.npmjs.org/next-connect/-/next-connect-0.13.0.tgz", 885 | "integrity": "sha512-f2G4edY01XomjCECSrgOpb/zzQinJO6Whd8Zds0+rLUYhj5cLwkh6FVvZsQCSSbxSc4k9nCwNuk5NLIhvO1gUA==", 886 | "requires": { 887 | "trouter": "^3.2.0" 888 | } 889 | }, 890 | "object-assign": { 891 | "version": "4.1.1", 892 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 893 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 894 | }, 895 | "picocolors": { 896 | "version": "1.0.0", 897 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 898 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 899 | }, 900 | "postcss": { 901 | "version": "8.4.14", 902 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 903 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 904 | "requires": { 905 | "nanoid": "^3.3.4", 906 | "picocolors": "^1.0.0", 907 | "source-map-js": "^1.0.2" 908 | } 909 | }, 910 | "process-nextick-args": { 911 | "version": "2.0.1", 912 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 913 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 914 | }, 915 | "react": { 916 | "version": "18.2.0", 917 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 918 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 919 | "requires": { 920 | "loose-envify": "^1.1.0" 921 | } 922 | }, 923 | "react-dom": { 924 | "version": "18.2.0", 925 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 926 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 927 | "requires": { 928 | "loose-envify": "^1.1.0", 929 | "scheduler": "^0.23.0" 930 | } 931 | }, 932 | "readable-stream": { 933 | "version": "2.3.7", 934 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 935 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 936 | "requires": { 937 | "core-util-is": "~1.0.0", 938 | "inherits": "~2.0.3", 939 | "isarray": "~1.0.0", 940 | "process-nextick-args": "~2.0.0", 941 | "safe-buffer": "~5.1.1", 942 | "string_decoder": "~1.1.1", 943 | "util-deprecate": "~1.0.1" 944 | } 945 | }, 946 | "regexparam": { 947 | "version": "1.3.0", 948 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.3.0.tgz", 949 | "integrity": "sha512-6IQpFBv6e5vz1QAqI+V4k8P2e/3gRrqfCJ9FI+O1FLQTO+Uz6RXZEZOPmTJ6hlGj7gkERzY5BRCv09whKP96/g==" 950 | }, 951 | "safe-buffer": { 952 | "version": "5.1.2", 953 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 954 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 955 | }, 956 | "scheduler": { 957 | "version": "0.23.0", 958 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 959 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 960 | "requires": { 961 | "loose-envify": "^1.1.0" 962 | } 963 | }, 964 | "source-map-js": { 965 | "version": "1.0.2", 966 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 967 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 968 | }, 969 | "streamsearch": { 970 | "version": "1.1.0", 971 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 972 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" 973 | }, 974 | "string_decoder": { 975 | "version": "1.1.1", 976 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 977 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 978 | "requires": { 979 | "safe-buffer": "~5.1.0" 980 | } 981 | }, 982 | "styled-jsx": { 983 | "version": "5.1.0", 984 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.0.tgz", 985 | "integrity": "sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==", 986 | "requires": { 987 | "client-only": "0.0.1" 988 | } 989 | }, 990 | "trouter": { 991 | "version": "3.2.0", 992 | "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.2.0.tgz", 993 | "integrity": "sha512-rLLXbhTObLy2MBVjLC+jTnoIKw99n0GuJs9ov10J870vDw5qhTurPzsDrudNtBf5w/CZ9ctZy2p2IMmhGcel2w==", 994 | "requires": { 995 | "regexparam": "^1.3.0" 996 | } 997 | }, 998 | "tslib": { 999 | "version": "2.4.1", 1000 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 1001 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 1002 | }, 1003 | "type-is": { 1004 | "version": "1.6.18", 1005 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1006 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1007 | "requires": { 1008 | "media-typer": "0.3.0", 1009 | "mime-types": "~2.1.24" 1010 | } 1011 | }, 1012 | "typedarray": { 1013 | "version": "0.0.6", 1014 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1015 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" 1016 | }, 1017 | "use-sync-external-store": { 1018 | "version": "1.2.0", 1019 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", 1020 | "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", 1021 | "requires": {} 1022 | }, 1023 | "util-deprecate": { 1024 | "version": "1.0.2", 1025 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1026 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1027 | }, 1028 | "xtend": { 1029 | "version": "4.0.2", 1030 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1031 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 1032 | } 1033 | } 1034 | } 1035 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openai-whisper", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "pages/index.js", 6 | "scripts": { 7 | "dev": "next dev -p 3006", 8 | "build": "next build", 9 | "start": "next start", 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "multer": "^1.4.5-lts.1", 17 | "next": "^13.0.1", 18 | "next-connect": "^0.13.0", 19 | "react": "^18.2.0", 20 | "react-dom": "^18.2.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /pages/_app.js: -------------------------------------------------------------------------------- 1 | import App from 'next/app'; 2 | import Head from 'next/head'; 3 | import '../styles/app.css'; 4 | 5 | export default function MyApp({ Component, pageProps }) { 6 | 7 | const siteTitle = process.env.siteTitle 8 | const props = { 9 | ...pageProps 10 | } 11 | 12 | return ( 13 | <> 14 |
15 |89 | { duration } 90 | { text } 91 |
92 | ) 93 | }) } 94 |