├── .vscode ├── extensions.json └── settings.json ├── README.md ├── backend ├── .gitignore ├── backend │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py ├── nextjs_auth │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── poetry.lock └── pyproject.toml └── frontend ├── .env ├── .eslintrc.json ├── .gitignore ├── README.md ├── next-auth.d.ts ├── next.config.js ├── package.json ├── pages ├── _app.tsx ├── _document.tsx ├── api │ ├── auth │ │ └── [...nextauth].ts │ └── hello.ts └── index.tsx ├── pnpm-lock.yaml ├── public ├── favicon.ico ├── next.svg ├── thirteen.svg └── vercel.svg ├── tsconfig.json └── yarn.lock /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "batisteo.vscode-django", 4 | "ms-python.python", 5 | "charliermarsh.ruff" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll": true 4 | }, 5 | "python.formatting.provider": "black" 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Django + NextAuth.js a.k.a. Auth.js 2 | 3 | Full TypeScript Next.js authentication using NextAuth.js in the frontend and Django Rest Framework as backend using JWT via username and password as credentials. 4 | 5 | References: 6 | 7 | - https://github.com/hillmark/next-auth-django 8 | - https://github.com/nextauthjs/next-auth/discussions/1350 9 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | Created by https://www.toptal.com/developers/gitignore/api/django 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=django 3 | 4 | ### Django ### 5 | *.log 6 | *.pot 7 | *.pyc 8 | __pycache__/ 9 | local_settings.py 10 | db.sqlite3 11 | db.sqlite3-journal 12 | media 13 | 14 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 15 | # in your Git repository. Update and uncomment the following line accordingly. 16 | # /staticfiles/ 17 | 18 | ### Django.Python Stack ### 19 | # Byte-compiled / optimized / DLL files 20 | *.py[cod] 21 | *$py.class 22 | 23 | # C extensions 24 | *.so 25 | 26 | # Distribution / packaging 27 | .Python 28 | build/ 29 | develop-eggs/ 30 | dist/ 31 | downloads/ 32 | eggs/ 33 | .eggs/ 34 | lib/ 35 | lib64/ 36 | parts/ 37 | sdist/ 38 | var/ 39 | wheels/ 40 | share/python-wheels/ 41 | *.egg-info/ 42 | .installed.cfg 43 | *.egg 44 | MANIFEST 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .nox/ 60 | .coverage 61 | .coverage.* 62 | .cache 63 | nosetests.xml 64 | coverage.xml 65 | *.cover 66 | *.py,cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | cover/ 70 | 71 | # Translations 72 | *.mo 73 | 74 | # Django stuff: 75 | 76 | # Flask stuff: 77 | instance/ 78 | .webassets-cache 79 | 80 | # Scrapy stuff: 81 | .scrapy 82 | 83 | # Sphinx documentation 84 | docs/_build/ 85 | 86 | # PyBuilder 87 | .pybuilder/ 88 | target/ 89 | 90 | # Jupyter Notebook 91 | .ipynb_checkpoints 92 | 93 | # IPython 94 | profile_default/ 95 | ipython_config.py 96 | 97 | # pyenv 98 | # For a library or package, you might want to ignore these files since the code is 99 | # intended to run in multiple environments; otherwise, check them in: 100 | # .python-version 101 | 102 | # pipenv 103 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 104 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 105 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 106 | # install all needed dependencies. 107 | #Pipfile.lock 108 | 109 | # poetry 110 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 111 | # This is especially recommended for binary packages to ensure reproducibility, and is more 112 | # commonly ignored for libraries. 113 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 114 | #poetry.lock 115 | 116 | # pdm 117 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 118 | #pdm.lock 119 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 120 | # in version control. 121 | # https://pdm.fming.dev/#use-with-ide 122 | .pdm.toml 123 | 124 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 125 | __pypackages__/ 126 | 127 | # Celery stuff 128 | celerybeat-schedule 129 | celerybeat.pid 130 | 131 | # SageMath parsed files 132 | *.sage.py 133 | 134 | # Environments 135 | .env 136 | .venv 137 | env/ 138 | venv/ 139 | ENV/ 140 | env.bak/ 141 | venv.bak/ 142 | 143 | # Spyder project settings 144 | .spyderproject 145 | .spyproject 146 | 147 | # Rope project settings 148 | .ropeproject 149 | 150 | # mkdocs documentation 151 | /site 152 | 153 | # mypy 154 | .mypy_cache/ 155 | .dmypy.json 156 | dmypy.json 157 | 158 | # Pyre type checker 159 | .pyre/ 160 | 161 | # pytype static type analyzer 162 | .pytype/ 163 | 164 | # Cython debug symbols 165 | cython_debug/ 166 | 167 | # PyCharm 168 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 169 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 170 | # and can be added to the global gitignore or merged into this file. For a more nuclear 171 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 172 | #.idea/ 173 | 174 | # End of https://www.toptal.com/developers/gitignore/api/django -------------------------------------------------------------------------------- /backend/backend/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/backend/__init__.py -------------------------------------------------------------------------------- /backend/backend/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for backend project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /backend/backend/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for backend project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.1.4. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.1/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = "django-insecure-*7&p5p3w+i!=7^p)-(7j32+0k@hwj4e!fr59+57z3(0%i2fs85" 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | "nextjs_auth.apps.NextjsAuthConfig", 35 | "django.contrib.admin", 36 | "django.contrib.auth", 37 | "django.contrib.contenttypes", 38 | "django.contrib.sessions", 39 | "django.contrib.messages", 40 | "django.contrib.staticfiles", 41 | ] 42 | 43 | MIDDLEWARE = [ 44 | "django.middleware.security.SecurityMiddleware", 45 | "django.contrib.sessions.middleware.SessionMiddleware", 46 | "django.middleware.common.CommonMiddleware", 47 | "django.middleware.csrf.CsrfViewMiddleware", 48 | "django.contrib.auth.middleware.AuthenticationMiddleware", 49 | "django.contrib.messages.middleware.MessageMiddleware", 50 | "django.middleware.clickjacking.XFrameOptionsMiddleware", 51 | ] 52 | 53 | ROOT_URLCONF = "backend.urls" 54 | 55 | TEMPLATES = [ 56 | { 57 | "BACKEND": "django.template.backends.django.DjangoTemplates", 58 | "DIRS": [], 59 | "APP_DIRS": True, 60 | "OPTIONS": { 61 | "context_processors": [ 62 | "django.template.context_processors.debug", 63 | "django.template.context_processors.request", 64 | "django.contrib.auth.context_processors.auth", 65 | "django.contrib.messages.context_processors.messages", 66 | ], 67 | }, 68 | }, 69 | ] 70 | 71 | WSGI_APPLICATION = "backend.wsgi.application" 72 | 73 | 74 | # Database 75 | # https://docs.djangoproject.com/en/4.1/ref/settings/#databases 76 | 77 | DATABASES = { 78 | "default": { 79 | "ENGINE": "django.db.backends.sqlite3", 80 | "NAME": BASE_DIR / "db.sqlite3", 81 | } 82 | } 83 | 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators 87 | 88 | AUTH_PASSWORD_VALIDATORS = [ 89 | { 90 | "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", 91 | }, 92 | { 93 | "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", 94 | }, 95 | { 96 | "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", 97 | }, 98 | { 99 | "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", 100 | }, 101 | ] 102 | 103 | 104 | # Internationalization 105 | # https://docs.djangoproject.com/en/4.1/topics/i18n/ 106 | 107 | LANGUAGE_CODE = "en-us" 108 | 109 | TIME_ZONE = "UTC" 110 | 111 | USE_I18N = True 112 | 113 | USE_TZ = True 114 | 115 | 116 | # Static files (CSS, JavaScript, Images) 117 | # https://docs.djangoproject.com/en/4.1/howto/static-files/ 118 | 119 | STATIC_URL = "static/" 120 | 121 | # Default primary key field type 122 | # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field 123 | 124 | DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" 125 | -------------------------------------------------------------------------------- /backend/backend/urls.py: -------------------------------------------------------------------------------- 1 | """backend URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/4.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import include, path 18 | 19 | urlpatterns = [ 20 | path("admin/", admin.site.urls), 21 | path("", include("nextjs_auth.urls")), 22 | ] 23 | -------------------------------------------------------------------------------- /backend/backend/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for backend project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /backend/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == "__main__": 22 | main() 23 | -------------------------------------------------------------------------------- /backend/nextjs_auth/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/nextjs_auth/__init__.py -------------------------------------------------------------------------------- /backend/nextjs_auth/admin.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/nextjs_auth/admin.py -------------------------------------------------------------------------------- /backend/nextjs_auth/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class NextjsAuthConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "nextjs_auth" 7 | -------------------------------------------------------------------------------- /backend/nextjs_auth/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/nextjs_auth/migrations/__init__.py -------------------------------------------------------------------------------- /backend/nextjs_auth/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/nextjs_auth/models.py -------------------------------------------------------------------------------- /backend/nextjs_auth/serializers.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import User, Group 2 | from rest_framework import serializers 3 | from rest_framework_simplejwt.serializers import TokenObtainPairSerializer 4 | 5 | 6 | class UserSerializer(serializers.HyperlinkedModelSerializer): 7 | class Meta: 8 | model = User 9 | fields = ["url", "username", "email", "groups"] 10 | 11 | 12 | class GroupSerializer(serializers.HyperlinkedModelSerializer): 13 | class Meta: 14 | model = Group 15 | fields = ["url", "name"] 16 | 17 | 18 | class ExampleTokenObtainPairSerializer(TokenObtainPairSerializer): 19 | """Customizes JWT default Serializer to add more information about user""" 20 | 21 | @classmethod 22 | def get_token(cls, user): 23 | token = super().get_token(user) 24 | token["username"] = user.username 25 | token["email"] = user.email 26 | token["is_superuser"] = user.is_superuser 27 | token["is_staff"] = user.is_staff 28 | return token 29 | -------------------------------------------------------------------------------- /backend/nextjs_auth/tests.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/backend/nextjs_auth/tests.py -------------------------------------------------------------------------------- /backend/nextjs_auth/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path 2 | from rest_framework import routers 3 | from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView 4 | from nextjs_auth import views 5 | from nextjs_auth.views import ExampleTokenObtainPairView 6 | 7 | router = routers.DefaultRouter() 8 | router.register(r"users", views.UserViewSet) 9 | router.register(r"groups", views.GroupViewSet) 10 | 11 | urlpatterns = [ 12 | path("api/", include(router.urls)), 13 | path("api-auth/", include("rest_framework.urls", namespace="rest_framework")), 14 | path("api/token/", ExampleTokenObtainPairView.as_view(), name="token_obtain_pair"), 15 | path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"), 16 | path("api/token/verify/", TokenVerifyView.as_view(), name="token_verify"), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/nextjs_auth/views.py: -------------------------------------------------------------------------------- 1 | # Create your views here. 2 | from django.contrib.auth.models import User, Group 3 | from rest_framework import viewsets 4 | from rest_framework import permissions 5 | from rest_framework_simplejwt.views import TokenObtainPairView 6 | 7 | from .serializers import ( 8 | UserSerializer, 9 | GroupSerializer, 10 | ExampleTokenObtainPairSerializer, 11 | ) 12 | 13 | 14 | class UserViewSet(viewsets.ModelViewSet): 15 | """ 16 | API endpoint that allows users to be viewed or edited. 17 | """ 18 | 19 | queryset = User.objects.all().order_by("-date_joined") 20 | serializer_class = UserSerializer 21 | permission_classes = [permissions.IsAuthenticated] 22 | 23 | 24 | class GroupViewSet(viewsets.ModelViewSet): 25 | """ 26 | API endpoint that allows groups to be viewed or edited. 27 | """ 28 | 29 | queryset = Group.objects.all() 30 | serializer_class = GroupSerializer 31 | permission_classes = [permissions.IsAuthenticated] 32 | 33 | 34 | class ExampleTokenObtainPairView(TokenObtainPairView): 35 | # Replace the serializer with your custom 36 | serializer_class = ExampleTokenObtainPairSerializer 37 | -------------------------------------------------------------------------------- /backend/poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "asgiref" 5 | version = "3.5.2" 6 | description = "ASGI specs, helper code, and adapters" 7 | category = "main" 8 | optional = false 9 | python-versions = ">=3.7" 10 | files = [ 11 | {file = "asgiref-3.5.2-py3-none-any.whl", hash = "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4"}, 12 | {file = "asgiref-3.5.2.tar.gz", hash = "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424"}, 13 | ] 14 | 15 | [package.extras] 16 | tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] 17 | 18 | [[package]] 19 | name = "black" 20 | version = "22.12.0" 21 | description = "The uncompromising code formatter." 22 | category = "dev" 23 | optional = false 24 | python-versions = ">=3.7" 25 | files = [ 26 | {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, 27 | {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, 28 | {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, 29 | {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, 30 | {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, 31 | {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, 32 | {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, 33 | {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, 34 | {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, 35 | {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, 36 | {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, 37 | {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, 38 | ] 39 | 40 | [package.dependencies] 41 | click = ">=8.0.0" 42 | mypy-extensions = ">=0.4.3" 43 | pathspec = ">=0.9.0" 44 | platformdirs = ">=2" 45 | tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} 46 | 47 | [package.extras] 48 | colorama = ["colorama (>=0.4.3)"] 49 | d = ["aiohttp (>=3.7.4)"] 50 | jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] 51 | uvloop = ["uvloop (>=0.15.2)"] 52 | 53 | [[package]] 54 | name = "click" 55 | version = "8.1.3" 56 | description = "Composable command line interface toolkit" 57 | category = "dev" 58 | optional = false 59 | python-versions = ">=3.7" 60 | files = [ 61 | {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, 62 | {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, 63 | ] 64 | 65 | [package.dependencies] 66 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 67 | 68 | [[package]] 69 | name = "colorama" 70 | version = "0.4.6" 71 | description = "Cross-platform colored terminal text." 72 | category = "dev" 73 | optional = false 74 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 75 | files = [ 76 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 77 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 78 | ] 79 | 80 | [[package]] 81 | name = "django" 82 | version = "4.1.4" 83 | description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." 84 | category = "main" 85 | optional = false 86 | python-versions = ">=3.8" 87 | files = [ 88 | {file = "Django-4.1.4-py3-none-any.whl", hash = "sha256:0b223bfa55511f950ff741983d408d78d772351284c75e9f77d2b830b6b4d148"}, 89 | {file = "Django-4.1.4.tar.gz", hash = "sha256:d38a4e108d2386cb9637da66a82dc8d0733caede4c83c4afdbda78af4214211b"}, 90 | ] 91 | 92 | [package.dependencies] 93 | asgiref = ">=3.5.2,<4" 94 | sqlparse = ">=0.2.2" 95 | tzdata = {version = "*", markers = "sys_platform == \"win32\""} 96 | 97 | [package.extras] 98 | argon2 = ["argon2-cffi (>=19.1.0)"] 99 | bcrypt = ["bcrypt"] 100 | 101 | [[package]] 102 | name = "django-cors-headers" 103 | version = "3.13.0" 104 | description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." 105 | category = "main" 106 | optional = false 107 | python-versions = ">=3.7" 108 | files = [ 109 | {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, 110 | {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, 111 | ] 112 | 113 | [package.dependencies] 114 | Django = ">=3.2" 115 | 116 | [[package]] 117 | name = "djangorestframework" 118 | version = "3.14.0" 119 | description = "Web APIs for Django, made easy." 120 | category = "main" 121 | optional = false 122 | python-versions = ">=3.6" 123 | files = [ 124 | {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"}, 125 | {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"}, 126 | ] 127 | 128 | [package.dependencies] 129 | django = ">=3.0" 130 | pytz = "*" 131 | 132 | [[package]] 133 | name = "djangorestframework-simplejwt" 134 | version = "5.2.2" 135 | description = "A minimal JSON Web Token authentication plugin for Django REST Framework" 136 | category = "main" 137 | optional = false 138 | python-versions = ">=3.7" 139 | files = [ 140 | {file = "djangorestframework_simplejwt-5.2.2-py3-none-any.whl", hash = "sha256:4c0d2e2513e12587d93501ac091781684a216c3ee614eb3b5a10586aef5ca845"}, 141 | {file = "djangorestframework_simplejwt-5.2.2.tar.gz", hash = "sha256:d27d4bcac2c6394f678dea8b4d0d511c6e18a7f2eb8aaeeb8a7de601aeb77c42"}, 142 | ] 143 | 144 | [package.dependencies] 145 | django = "*" 146 | djangorestframework = "*" 147 | pyjwt = ">=1.7.1,<3" 148 | 149 | [package.extras] 150 | crypto = ["cryptography (>=3.3.1)"] 151 | dev = ["Sphinx (>=1.6.5,<2)", "cryptography", "flake8", "ipython", "isort", "pep8", "pytest", "pytest-cov", "pytest-django", "pytest-watch", "pytest-xdist", "python-jose (==3.3.0)", "sphinx-rtd-theme (>=0.1.9)", "tox", "twine", "wheel"] 152 | doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"] 153 | lint = ["flake8", "isort", "pep8"] 154 | python-jose = ["python-jose (==3.3.0)"] 155 | test = ["cryptography", "pytest", "pytest-cov", "pytest-django", "pytest-xdist", "tox"] 156 | 157 | [[package]] 158 | name = "mypy-extensions" 159 | version = "0.4.3" 160 | description = "Experimental type system extensions for programs checked with the mypy typechecker." 161 | category = "dev" 162 | optional = false 163 | python-versions = "*" 164 | files = [ 165 | {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, 166 | {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, 167 | ] 168 | 169 | [[package]] 170 | name = "pathspec" 171 | version = "0.10.2" 172 | description = "Utility library for gitignore style pattern matching of file paths." 173 | category = "dev" 174 | optional = false 175 | python-versions = ">=3.7" 176 | files = [ 177 | {file = "pathspec-0.10.2-py3-none-any.whl", hash = "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5"}, 178 | {file = "pathspec-0.10.2.tar.gz", hash = "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0"}, 179 | ] 180 | 181 | [[package]] 182 | name = "platformdirs" 183 | version = "2.6.0" 184 | description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." 185 | category = "dev" 186 | optional = false 187 | python-versions = ">=3.7" 188 | files = [ 189 | {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"}, 190 | {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"}, 191 | ] 192 | 193 | [package.extras] 194 | docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"] 195 | test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] 196 | 197 | [[package]] 198 | name = "pyjwt" 199 | version = "2.6.0" 200 | description = "JSON Web Token implementation in Python" 201 | category = "main" 202 | optional = false 203 | python-versions = ">=3.7" 204 | files = [ 205 | {file = "PyJWT-2.6.0-py3-none-any.whl", hash = "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14"}, 206 | {file = "PyJWT-2.6.0.tar.gz", hash = "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd"}, 207 | ] 208 | 209 | [package.extras] 210 | crypto = ["cryptography (>=3.4.0)"] 211 | dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] 212 | docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] 213 | tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] 214 | 215 | [[package]] 216 | name = "pytz" 217 | version = "2022.6" 218 | description = "World timezone definitions, modern and historical" 219 | category = "main" 220 | optional = false 221 | python-versions = "*" 222 | files = [ 223 | {file = "pytz-2022.6-py2.py3-none-any.whl", hash = "sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427"}, 224 | {file = "pytz-2022.6.tar.gz", hash = "sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"}, 225 | ] 226 | 227 | [[package]] 228 | name = "ruff" 229 | version = "0.0.172" 230 | description = "An extremely fast Python linter, written in Rust." 231 | category = "dev" 232 | optional = false 233 | python-versions = ">=3.7" 234 | files = [ 235 | {file = "ruff-0.0.172-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:b1c74054a4779fcc1f00a674239a9d0fba90a76413db87f93c507691c746e377"}, 236 | {file = "ruff-0.0.172-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c50f162b9b224d162af45049d2266d4747ce7d1bbf4a75f91c333842ad634598"}, 237 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52d6eeadbe6f17cf5fe699122cd08572a6f3114c2045768bd457646d4bb1f3e0"}, 238 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d138f23f3d3a3a65b69755ad311e784f0e2856c879f44181a2386bc9a7cec34"}, 239 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac3e6d230fb9f0870d4f2c9897b2e7cf6da4e358a49411daffbf7aed5836bd6"}, 240 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f5bd294cf0111808ef92029af263f2d78a77b55c9b0465a99440e946c07e4fd3"}, 241 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8692cbf44a19a049d29284723f87faca504ec62ba8ac5f1032ef2eebbde2129"}, 242 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6d7b500cbb87c493d32312f090d2cbf2992afff429192c96fffaa5083ae3632"}, 243 | {file = "ruff-0.0.172-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2db6c70c0c46577330801cf5ae195d5cd38fdb69a8dda3d33249ce3b3bd4ee6"}, 244 | {file = "ruff-0.0.172-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2ebd1580b3d6cfacab3cb45c9f4b579ba2b0dea36d2ed06887dcc3a83080ad53"}, 245 | {file = "ruff-0.0.172-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aec0413c25fd35c673a162b48583122de192b26f075b4786eaf679c118a6c8fa"}, 246 | {file = "ruff-0.0.172-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7ffb1bbd9cc7fa13b3b6cade070fcd703efed5fb654c7c7efc8aa3443b0310bd"}, 247 | {file = "ruff-0.0.172-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d7ea41c33b8c97916af36f08d7f3c30bbdcf086fa8155361512dfa17fd6d41f9"}, 248 | {file = "ruff-0.0.172-py3-none-win32.whl", hash = "sha256:ab644c39ea790196f5911a34955766b4174275c86b654899511438c913fc9bf2"}, 249 | {file = "ruff-0.0.172-py3-none-win_amd64.whl", hash = "sha256:474fc9f567ff083a4844b01a9abcdfb8a85c92065ce3e3506c7e2d4bd3ac366f"}, 250 | {file = "ruff-0.0.172.tar.gz", hash = "sha256:425937e2c1d7a5ba8d83854065a108e62dad3e60e83ce2487bd79b156529f0b3"}, 251 | ] 252 | 253 | [[package]] 254 | name = "sqlparse" 255 | version = "0.4.3" 256 | description = "A non-validating SQL parser." 257 | category = "main" 258 | optional = false 259 | python-versions = ">=3.5" 260 | files = [ 261 | {file = "sqlparse-0.4.3-py3-none-any.whl", hash = "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34"}, 262 | {file = "sqlparse-0.4.3.tar.gz", hash = "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268"}, 263 | ] 264 | 265 | [[package]] 266 | name = "tomli" 267 | version = "2.0.1" 268 | description = "A lil' TOML parser" 269 | category = "dev" 270 | optional = false 271 | python-versions = ">=3.7" 272 | files = [ 273 | {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 274 | {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 275 | ] 276 | 277 | [[package]] 278 | name = "tzdata" 279 | version = "2022.7" 280 | description = "Provider of IANA time zone data" 281 | category = "main" 282 | optional = false 283 | python-versions = ">=2" 284 | files = [ 285 | {file = "tzdata-2022.7-py2.py3-none-any.whl", hash = "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d"}, 286 | {file = "tzdata-2022.7.tar.gz", hash = "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa"}, 287 | ] 288 | 289 | [metadata] 290 | lock-version = "2.0" 291 | python-versions = "^3.10" 292 | content-hash = "7ce29a879cf99544fde77faa76631b57c6ba7658a97efcca4045064c0ffd1306" 293 | -------------------------------------------------------------------------------- /backend/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "backend" 3 | version = "0.1.0" 4 | description = "Provide auth for Next.js" 5 | authors = ["Mujahid Anuar <17759705+mujahidfa@users.noreply.github.com>"] 6 | license = "MIT" 7 | readme = "README.md" 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.10" 11 | Django = "^4.1.4" 12 | djangorestframework = "^3.14.0" 13 | djangorestframework-simplejwt = "^5.2.2" 14 | django-cors-headers = "^3.13.0" 15 | 16 | [tool.poetry.group.dev.dependencies] 17 | black = "^22.12.0" 18 | ruff = "^0.0.172" 19 | 20 | [build-system] 21 | requires = ["poetry-core"] 22 | build-backend = "poetry.core.masonry.api" 23 | -------------------------------------------------------------------------------- /frontend/.env: -------------------------------------------------------------------------------- 1 | DJANGO_AUTH_BASE_URL=http://127.0.0.1:8000 -------------------------------------------------------------------------------- /frontend/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/babel", "next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | 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). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 16 | 17 | [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.ts`. 18 | 19 | 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. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | 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. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /frontend/next-auth.d.ts: -------------------------------------------------------------------------------- 1 | import type { User, UserObject } from "next-auth"; 2 | import type { Token } from "next-auth/jwt"; 3 | 4 | declare module "next-auth" { 5 | export interface UserObject { 6 | user_id: number; 7 | username: string; 8 | email: string; 9 | is_staff: boolean; 10 | is_superuser: boolean; 11 | } 12 | /** 13 | * The shape of the user object returned in the OAuth providers' `profile` callback, 14 | * or the second parameter of the `session` callback, when using a database. 15 | */ 16 | export interface User extends Token { 17 | exp: number; 18 | user: UserObject; 19 | } 20 | /** 21 | * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context 22 | */ 23 | export interface Session extends User { 24 | expires: string; 25 | } 26 | } 27 | 28 | declare module "next-auth/jwt" { 29 | export interface RefreshedToken { 30 | access: string; 31 | } 32 | export interface Token extends RefreshedToken { 33 | refresh: string; 34 | } 35 | /** 36 | * Returned by the `jwt` callback and `getToken`, when using JWT sessions 37 | */ 38 | export interface JWT extends User { 39 | iat: number; 40 | jti: string; 41 | } 42 | export interface DecodedJWT extends UserObject { 43 | token_type: string; 44 | exp: number; 45 | iat: number; 46 | jti: string; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /frontend/next.config.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | /** 4 | * @type {import('next').NextConfig} 5 | **/ 6 | const nextConfig = { 7 | reactStrictMode: true, 8 | }; 9 | 10 | module.exports = nextConfig; 11 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 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 | "@next/font": "^13.1.6", 13 | "@types/node": "^18.13.0", 14 | "@types/react": "^18.0.27", 15 | "@types/react-dom": "^18.0.10", 16 | "eslint": "^8.33.0", 17 | "eslint-config-next": "^13.1.6", 18 | "jwt-decode": "^3.1.2", 19 | "next": "^13.1.6", 20 | "next-auth": "^4.19.2", 21 | "react": "18.2.0", 22 | "react-dom": "18.2.0", 23 | "typescript": "^4.9.5" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /frontend/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { SessionProvider } from "next-auth/react"; 2 | import type { AppProps } from "next/app"; 3 | 4 | export default function App({ 5 | Component, 6 | pageProps: { session, ...pageProps }, 7 | }: AppProps) { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /frontend/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from 'next/document' 2 | 3 | export default function Document() { 4 | return ( 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /frontend/pages/api/auth/[...nextauth].ts: -------------------------------------------------------------------------------- 1 | import NextAuth from "next-auth"; 2 | import type { AuthOptions, User } from "next-auth"; 3 | import type { DecodedJWT, JWT, RefreshedToken, Token } from "next-auth/jwt"; 4 | import CredentialsProvider from "next-auth/providers/credentials"; 5 | 6 | import jwtDecode from "jwt-decode"; 7 | 8 | async function refreshAccessToken(token: JWT): Promise { 9 | try { 10 | const res = await fetch( 11 | `${process.env.DJANGO_AUTH_BASE_URL}/api/token/refresh/`, 12 | { 13 | method: "POST", 14 | body: JSON.stringify({ refresh: token.refresh }), 15 | headers: { "Content-Type": "application/json" }, 16 | } 17 | ); 18 | const refreshedToken: RefreshedToken = await res.json(); 19 | 20 | if (res.status !== 200) throw refreshedToken; 21 | 22 | const { exp }: DecodedJWT = jwtDecode(refreshedToken.access); 23 | 24 | return { 25 | ...token, 26 | ...refreshedToken, 27 | exp, 28 | }; 29 | } catch (error) { 30 | return { 31 | ...token, 32 | error: "RefreshAccessTokenError", 33 | }; 34 | } 35 | } 36 | 37 | export const authOptions: AuthOptions = { 38 | session: { strategy: "jwt" }, 39 | // https://next-auth.js.org/configuration/providers/oauth 40 | providers: [ 41 | CredentialsProvider({ 42 | // The name to display on the sign in form (e.g. 'Sign in with...') 43 | name: "Django Rest Framework", 44 | // The credentials is used to generate a suitable form on the sign in page. 45 | // You can specify whatever fields you are expecting to be submitted. 46 | // e.g. domain, username, password, 2FA token, etc. 47 | // You can pass any HTML attribute to the tag through the object. 48 | credentials: { 49 | username: { 50 | label: "Username", 51 | type: "username", 52 | placeholder: "username", 53 | }, 54 | password: { label: "Password", type: "password" }, 55 | }, 56 | async authorize(credentials) { 57 | // You need to provide your own logic here that takes the credentials 58 | // submitted and returns either a object representing a user or value 59 | // that is false/null if the credentials are invalid. 60 | // e.g. return { id: 1, name: 'J Smith', email: 'jsmith@example.com' } 61 | // You can also use the `req` object to obtain additional parameters 62 | // (i.e., the request IP address) 63 | try { 64 | const res = await fetch( 65 | `${process.env.DJANGO_AUTH_BASE_URL}/api/token/`, 66 | { 67 | method: "POST", 68 | body: JSON.stringify(credentials), 69 | headers: { "Content-Type": "application/json" }, 70 | } 71 | ); 72 | const token: Token = await res.json(); 73 | 74 | if (res.status !== 200) throw token; 75 | 76 | const { 77 | username, 78 | email, 79 | user_id, 80 | exp, 81 | is_superuser, 82 | is_staff, 83 | }: DecodedJWT = jwtDecode(token.access); 84 | 85 | return { 86 | ...token, 87 | exp, 88 | user: { 89 | username, 90 | email, 91 | user_id, 92 | is_staff, 93 | is_superuser, 94 | }, 95 | } as User; 96 | } catch (error) { 97 | return null; 98 | } 99 | }, 100 | }), 101 | ], 102 | callbacks: { 103 | async redirect({ url, baseUrl }) { 104 | return url.startsWith(baseUrl) 105 | ? Promise.resolve(url) 106 | : Promise.resolve(baseUrl); 107 | }, 108 | async jwt({ token, user, account }) { 109 | // initial signin 110 | if (user && account) { 111 | return user as JWT; 112 | } 113 | 114 | // Return previous token if the access token has not expired 115 | if (Date.now() < token.exp * 100) { 116 | return token; 117 | } 118 | 119 | // refresh token 120 | return (await refreshAccessToken(token)) as JWT; 121 | }, 122 | async session({ session, token }) { 123 | session.access = token.access; 124 | session.exp = token.exp; 125 | session.refresh = token.refresh; 126 | session.user = token.user; 127 | return session; 128 | }, 129 | }, 130 | }; 131 | 132 | export default NextAuth(authOptions); 133 | -------------------------------------------------------------------------------- /frontend/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /frontend/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { signIn, signOut, useSession } from "next-auth/react"; 2 | import Head from "next/head"; 3 | 4 | export default function Home() { 5 | const { data: session, status } = useSession(); 6 | 7 | return ( 8 | <> 9 | 10 | Django + NextAuth.js 11 | 15 | 16 | 17 | 18 |
19 | {status === "loading" ? ( 20 | "" 21 | ) : ( 22 | <> 23 | {session ? ( 24 | <> 25 |

Hello, you've logged in!

26 | { 29 | e.preventDefault(); 30 | signOut(); 31 | }} 32 | > 33 | Logout 34 | 35 | 36 | ) : ( 37 | <> 38 |

Access Denied

39 |

40 | { 43 | e.preventDefault(); 44 | signIn(); 45 | }} 46 | > 47 | You must be signed in to view this page 48 | 49 |

50 | 51 | )} 52 | 53 | )} 54 |
55 | 56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /frontend/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@next/font': ^13.1.6 5 | '@types/node': ^18.13.0 6 | '@types/react': ^18.0.27 7 | '@types/react-dom': ^18.0.10 8 | eslint: ^8.33.0 9 | eslint-config-next: ^13.1.6 10 | jwt-decode: ^3.1.2 11 | next: ^13.1.6 12 | next-auth: ^4.19.2 13 | react: 18.2.0 14 | react-dom: 18.2.0 15 | typescript: ^4.9.5 16 | 17 | dependencies: 18 | '@next/font': 13.1.6 19 | '@types/node': 18.13.0 20 | '@types/react': 18.0.27 21 | '@types/react-dom': 18.0.10 22 | eslint: 8.33.0 23 | eslint-config-next: 13.1.6_4vsywjlpuriuw3tl5oq6zy5a64 24 | jwt-decode: 3.1.2 25 | next: 13.1.6_biqbaboplfbrettd7655fr4n2y 26 | next-auth: 4.19.2_3vryta7zmbcsw4rrqf4axjqggm 27 | react: 18.2.0 28 | react-dom: 18.2.0_react@18.2.0 29 | typescript: 4.9.5 30 | 31 | packages: 32 | 33 | /@babel/runtime/7.20.13: 34 | resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} 35 | engines: {node: '>=6.9.0'} 36 | dependencies: 37 | regenerator-runtime: 0.13.11 38 | dev: false 39 | 40 | /@eslint/eslintrc/1.4.1: 41 | resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} 42 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 43 | dependencies: 44 | ajv: 6.12.6 45 | debug: 4.3.4 46 | espree: 9.4.1 47 | globals: 13.20.0 48 | ignore: 5.2.4 49 | import-fresh: 3.3.0 50 | js-yaml: 4.1.0 51 | minimatch: 3.1.2 52 | strip-json-comments: 3.1.1 53 | transitivePeerDependencies: 54 | - supports-color 55 | dev: false 56 | 57 | /@humanwhocodes/config-array/0.11.8: 58 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 59 | engines: {node: '>=10.10.0'} 60 | dependencies: 61 | '@humanwhocodes/object-schema': 1.2.1 62 | debug: 4.3.4 63 | minimatch: 3.1.2 64 | transitivePeerDependencies: 65 | - supports-color 66 | dev: false 67 | 68 | /@humanwhocodes/module-importer/1.0.1: 69 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 70 | engines: {node: '>=12.22'} 71 | dev: false 72 | 73 | /@humanwhocodes/object-schema/1.2.1: 74 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 75 | dev: false 76 | 77 | /@next/env/13.1.6: 78 | resolution: {integrity: sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==} 79 | dev: false 80 | 81 | /@next/eslint-plugin-next/13.1.6: 82 | resolution: {integrity: sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==} 83 | dependencies: 84 | glob: 7.1.7 85 | dev: false 86 | 87 | /@next/font/13.1.6: 88 | resolution: {integrity: sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==} 89 | dev: false 90 | 91 | /@next/swc-android-arm-eabi/13.1.6: 92 | resolution: {integrity: sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==} 93 | engines: {node: '>= 10'} 94 | cpu: [arm] 95 | os: [android] 96 | requiresBuild: true 97 | dev: false 98 | optional: true 99 | 100 | /@next/swc-android-arm64/13.1.6: 101 | resolution: {integrity: sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==} 102 | engines: {node: '>= 10'} 103 | cpu: [arm64] 104 | os: [android] 105 | requiresBuild: true 106 | dev: false 107 | optional: true 108 | 109 | /@next/swc-darwin-arm64/13.1.6: 110 | resolution: {integrity: sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==} 111 | engines: {node: '>= 10'} 112 | cpu: [arm64] 113 | os: [darwin] 114 | requiresBuild: true 115 | dev: false 116 | optional: true 117 | 118 | /@next/swc-darwin-x64/13.1.6: 119 | resolution: {integrity: sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==} 120 | engines: {node: '>= 10'} 121 | cpu: [x64] 122 | os: [darwin] 123 | requiresBuild: true 124 | dev: false 125 | optional: true 126 | 127 | /@next/swc-freebsd-x64/13.1.6: 128 | resolution: {integrity: sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==} 129 | engines: {node: '>= 10'} 130 | cpu: [x64] 131 | os: [freebsd] 132 | requiresBuild: true 133 | dev: false 134 | optional: true 135 | 136 | /@next/swc-linux-arm-gnueabihf/13.1.6: 137 | resolution: {integrity: sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==} 138 | engines: {node: '>= 10'} 139 | cpu: [arm] 140 | os: [linux] 141 | requiresBuild: true 142 | dev: false 143 | optional: true 144 | 145 | /@next/swc-linux-arm64-gnu/13.1.6: 146 | resolution: {integrity: sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==} 147 | engines: {node: '>= 10'} 148 | cpu: [arm64] 149 | os: [linux] 150 | requiresBuild: true 151 | dev: false 152 | optional: true 153 | 154 | /@next/swc-linux-arm64-musl/13.1.6: 155 | resolution: {integrity: sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==} 156 | engines: {node: '>= 10'} 157 | cpu: [arm64] 158 | os: [linux] 159 | requiresBuild: true 160 | dev: false 161 | optional: true 162 | 163 | /@next/swc-linux-x64-gnu/13.1.6: 164 | resolution: {integrity: sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==} 165 | engines: {node: '>= 10'} 166 | cpu: [x64] 167 | os: [linux] 168 | requiresBuild: true 169 | dev: false 170 | optional: true 171 | 172 | /@next/swc-linux-x64-musl/13.1.6: 173 | resolution: {integrity: sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==} 174 | engines: {node: '>= 10'} 175 | cpu: [x64] 176 | os: [linux] 177 | requiresBuild: true 178 | dev: false 179 | optional: true 180 | 181 | /@next/swc-win32-arm64-msvc/13.1.6: 182 | resolution: {integrity: sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==} 183 | engines: {node: '>= 10'} 184 | cpu: [arm64] 185 | os: [win32] 186 | requiresBuild: true 187 | dev: false 188 | optional: true 189 | 190 | /@next/swc-win32-ia32-msvc/13.1.6: 191 | resolution: {integrity: sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==} 192 | engines: {node: '>= 10'} 193 | cpu: [ia32] 194 | os: [win32] 195 | requiresBuild: true 196 | dev: false 197 | optional: true 198 | 199 | /@next/swc-win32-x64-msvc/13.1.6: 200 | resolution: {integrity: sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==} 201 | engines: {node: '>= 10'} 202 | cpu: [x64] 203 | os: [win32] 204 | requiresBuild: true 205 | dev: false 206 | optional: true 207 | 208 | /@nodelib/fs.scandir/2.1.5: 209 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 210 | engines: {node: '>= 8'} 211 | dependencies: 212 | '@nodelib/fs.stat': 2.0.5 213 | run-parallel: 1.2.0 214 | dev: false 215 | 216 | /@nodelib/fs.stat/2.0.5: 217 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 218 | engines: {node: '>= 8'} 219 | dev: false 220 | 221 | /@nodelib/fs.walk/1.2.8: 222 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 223 | engines: {node: '>= 8'} 224 | dependencies: 225 | '@nodelib/fs.scandir': 2.1.5 226 | fastq: 1.15.0 227 | dev: false 228 | 229 | /@panva/hkdf/1.0.2: 230 | resolution: {integrity: sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==} 231 | dev: false 232 | 233 | /@pkgr/utils/2.3.1: 234 | resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} 235 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 236 | dependencies: 237 | cross-spawn: 7.0.3 238 | is-glob: 4.0.3 239 | open: 8.4.1 240 | picocolors: 1.0.0 241 | tiny-glob: 0.2.9 242 | tslib: 2.5.0 243 | dev: false 244 | 245 | /@rushstack/eslint-patch/1.2.0: 246 | resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} 247 | dev: false 248 | 249 | /@swc/helpers/0.4.14: 250 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} 251 | dependencies: 252 | tslib: 2.5.0 253 | dev: false 254 | 255 | /@types/json5/0.0.29: 256 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 257 | dev: false 258 | 259 | /@types/node/18.13.0: 260 | resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} 261 | dev: false 262 | 263 | /@types/prop-types/15.7.5: 264 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 265 | dev: false 266 | 267 | /@types/react-dom/18.0.10: 268 | resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} 269 | dependencies: 270 | '@types/react': 18.0.27 271 | dev: false 272 | 273 | /@types/react/18.0.27: 274 | resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==} 275 | dependencies: 276 | '@types/prop-types': 15.7.5 277 | '@types/scheduler': 0.16.2 278 | csstype: 3.1.1 279 | dev: false 280 | 281 | /@types/scheduler/0.16.2: 282 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 283 | dev: false 284 | 285 | /@typescript-eslint/parser/5.51.0_4vsywjlpuriuw3tl5oq6zy5a64: 286 | resolution: {integrity: sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==} 287 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 288 | peerDependencies: 289 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 290 | typescript: '*' 291 | peerDependenciesMeta: 292 | typescript: 293 | optional: true 294 | dependencies: 295 | '@typescript-eslint/scope-manager': 5.51.0 296 | '@typescript-eslint/types': 5.51.0 297 | '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 298 | debug: 4.3.4 299 | eslint: 8.33.0 300 | typescript: 4.9.5 301 | transitivePeerDependencies: 302 | - supports-color 303 | dev: false 304 | 305 | /@typescript-eslint/scope-manager/5.51.0: 306 | resolution: {integrity: sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==} 307 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 308 | dependencies: 309 | '@typescript-eslint/types': 5.51.0 310 | '@typescript-eslint/visitor-keys': 5.51.0 311 | dev: false 312 | 313 | /@typescript-eslint/types/5.51.0: 314 | resolution: {integrity: sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==} 315 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 316 | dev: false 317 | 318 | /@typescript-eslint/typescript-estree/5.51.0_typescript@4.9.5: 319 | resolution: {integrity: sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==} 320 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 321 | peerDependencies: 322 | typescript: '*' 323 | peerDependenciesMeta: 324 | typescript: 325 | optional: true 326 | dependencies: 327 | '@typescript-eslint/types': 5.51.0 328 | '@typescript-eslint/visitor-keys': 5.51.0 329 | debug: 4.3.4 330 | globby: 11.1.0 331 | is-glob: 4.0.3 332 | semver: 7.3.8 333 | tsutils: 3.21.0_typescript@4.9.5 334 | typescript: 4.9.5 335 | transitivePeerDependencies: 336 | - supports-color 337 | dev: false 338 | 339 | /@typescript-eslint/visitor-keys/5.51.0: 340 | resolution: {integrity: sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==} 341 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 342 | dependencies: 343 | '@typescript-eslint/types': 5.51.0 344 | eslint-visitor-keys: 3.3.0 345 | dev: false 346 | 347 | /acorn-jsx/5.3.2_acorn@8.8.2: 348 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 349 | peerDependencies: 350 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 351 | dependencies: 352 | acorn: 8.8.2 353 | dev: false 354 | 355 | /acorn/8.8.2: 356 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 357 | engines: {node: '>=0.4.0'} 358 | hasBin: true 359 | dev: false 360 | 361 | /ajv/6.12.6: 362 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 363 | dependencies: 364 | fast-deep-equal: 3.1.3 365 | fast-json-stable-stringify: 2.1.0 366 | json-schema-traverse: 0.4.1 367 | uri-js: 4.4.1 368 | dev: false 369 | 370 | /ansi-regex/5.0.1: 371 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 372 | engines: {node: '>=8'} 373 | dev: false 374 | 375 | /ansi-styles/4.3.0: 376 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 377 | engines: {node: '>=8'} 378 | dependencies: 379 | color-convert: 2.0.1 380 | dev: false 381 | 382 | /argparse/2.0.1: 383 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 384 | dev: false 385 | 386 | /aria-query/5.1.3: 387 | resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} 388 | dependencies: 389 | deep-equal: 2.2.0 390 | dev: false 391 | 392 | /array-includes/3.1.6: 393 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 394 | engines: {node: '>= 0.4'} 395 | dependencies: 396 | call-bind: 1.0.2 397 | define-properties: 1.1.4 398 | es-abstract: 1.21.1 399 | get-intrinsic: 1.2.0 400 | is-string: 1.0.7 401 | dev: false 402 | 403 | /array-union/2.1.0: 404 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 405 | engines: {node: '>=8'} 406 | dev: false 407 | 408 | /array.prototype.flat/1.3.1: 409 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} 410 | engines: {node: '>= 0.4'} 411 | dependencies: 412 | call-bind: 1.0.2 413 | define-properties: 1.1.4 414 | es-abstract: 1.21.1 415 | es-shim-unscopables: 1.0.0 416 | dev: false 417 | 418 | /array.prototype.flatmap/1.3.1: 419 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 420 | engines: {node: '>= 0.4'} 421 | dependencies: 422 | call-bind: 1.0.2 423 | define-properties: 1.1.4 424 | es-abstract: 1.21.1 425 | es-shim-unscopables: 1.0.0 426 | dev: false 427 | 428 | /array.prototype.tosorted/1.1.1: 429 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} 430 | dependencies: 431 | call-bind: 1.0.2 432 | define-properties: 1.1.4 433 | es-abstract: 1.21.1 434 | es-shim-unscopables: 1.0.0 435 | get-intrinsic: 1.2.0 436 | dev: false 437 | 438 | /ast-types-flow/0.0.7: 439 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} 440 | dev: false 441 | 442 | /available-typed-arrays/1.0.5: 443 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 444 | engines: {node: '>= 0.4'} 445 | dev: false 446 | 447 | /axe-core/4.6.3: 448 | resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} 449 | engines: {node: '>=4'} 450 | dev: false 451 | 452 | /axobject-query/3.1.1: 453 | resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} 454 | dependencies: 455 | deep-equal: 2.2.0 456 | dev: false 457 | 458 | /balanced-match/1.0.2: 459 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 460 | dev: false 461 | 462 | /brace-expansion/1.1.11: 463 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 464 | dependencies: 465 | balanced-match: 1.0.2 466 | concat-map: 0.0.1 467 | dev: false 468 | 469 | /braces/3.0.2: 470 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 471 | engines: {node: '>=8'} 472 | dependencies: 473 | fill-range: 7.0.1 474 | dev: false 475 | 476 | /call-bind/1.0.2: 477 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 478 | dependencies: 479 | function-bind: 1.1.1 480 | get-intrinsic: 1.2.0 481 | dev: false 482 | 483 | /callsites/3.1.0: 484 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 485 | engines: {node: '>=6'} 486 | dev: false 487 | 488 | /caniuse-lite/1.0.30001451: 489 | resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==} 490 | dev: false 491 | 492 | /chalk/4.1.2: 493 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 494 | engines: {node: '>=10'} 495 | dependencies: 496 | ansi-styles: 4.3.0 497 | supports-color: 7.2.0 498 | dev: false 499 | 500 | /client-only/0.0.1: 501 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 502 | dev: false 503 | 504 | /color-convert/2.0.1: 505 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 506 | engines: {node: '>=7.0.0'} 507 | dependencies: 508 | color-name: 1.1.4 509 | dev: false 510 | 511 | /color-name/1.1.4: 512 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 513 | dev: false 514 | 515 | /concat-map/0.0.1: 516 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 517 | dev: false 518 | 519 | /cookie/0.5.0: 520 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 521 | engines: {node: '>= 0.6'} 522 | dev: false 523 | 524 | /cross-spawn/7.0.3: 525 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 526 | engines: {node: '>= 8'} 527 | dependencies: 528 | path-key: 3.1.1 529 | shebang-command: 2.0.0 530 | which: 2.0.2 531 | dev: false 532 | 533 | /csstype/3.1.1: 534 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} 535 | dev: false 536 | 537 | /damerau-levenshtein/1.0.8: 538 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 539 | dev: false 540 | 541 | /debug/3.2.7: 542 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 543 | peerDependencies: 544 | supports-color: '*' 545 | peerDependenciesMeta: 546 | supports-color: 547 | optional: true 548 | dependencies: 549 | ms: 2.1.3 550 | dev: false 551 | 552 | /debug/4.3.4: 553 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 554 | engines: {node: '>=6.0'} 555 | peerDependencies: 556 | supports-color: '*' 557 | peerDependenciesMeta: 558 | supports-color: 559 | optional: true 560 | dependencies: 561 | ms: 2.1.2 562 | dev: false 563 | 564 | /deep-equal/2.2.0: 565 | resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} 566 | dependencies: 567 | call-bind: 1.0.2 568 | es-get-iterator: 1.1.3 569 | get-intrinsic: 1.2.0 570 | is-arguments: 1.1.1 571 | is-array-buffer: 3.0.1 572 | is-date-object: 1.0.5 573 | is-regex: 1.1.4 574 | is-shared-array-buffer: 1.0.2 575 | isarray: 2.0.5 576 | object-is: 1.1.5 577 | object-keys: 1.1.1 578 | object.assign: 4.1.4 579 | regexp.prototype.flags: 1.4.3 580 | side-channel: 1.0.4 581 | which-boxed-primitive: 1.0.2 582 | which-collection: 1.0.1 583 | which-typed-array: 1.1.9 584 | dev: false 585 | 586 | /deep-is/0.1.4: 587 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 588 | dev: false 589 | 590 | /define-lazy-prop/2.0.0: 591 | resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} 592 | engines: {node: '>=8'} 593 | dev: false 594 | 595 | /define-properties/1.1.4: 596 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} 597 | engines: {node: '>= 0.4'} 598 | dependencies: 599 | has-property-descriptors: 1.0.0 600 | object-keys: 1.1.1 601 | dev: false 602 | 603 | /dir-glob/3.0.1: 604 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 605 | engines: {node: '>=8'} 606 | dependencies: 607 | path-type: 4.0.0 608 | dev: false 609 | 610 | /doctrine/2.1.0: 611 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 612 | engines: {node: '>=0.10.0'} 613 | dependencies: 614 | esutils: 2.0.3 615 | dev: false 616 | 617 | /doctrine/3.0.0: 618 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 619 | engines: {node: '>=6.0.0'} 620 | dependencies: 621 | esutils: 2.0.3 622 | dev: false 623 | 624 | /emoji-regex/9.2.2: 625 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 626 | dev: false 627 | 628 | /enhanced-resolve/5.12.0: 629 | resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} 630 | engines: {node: '>=10.13.0'} 631 | dependencies: 632 | graceful-fs: 4.2.10 633 | tapable: 2.2.1 634 | dev: false 635 | 636 | /es-abstract/1.21.1: 637 | resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} 638 | engines: {node: '>= 0.4'} 639 | dependencies: 640 | available-typed-arrays: 1.0.5 641 | call-bind: 1.0.2 642 | es-set-tostringtag: 2.0.1 643 | es-to-primitive: 1.2.1 644 | function-bind: 1.1.1 645 | function.prototype.name: 1.1.5 646 | get-intrinsic: 1.2.0 647 | get-symbol-description: 1.0.0 648 | globalthis: 1.0.3 649 | gopd: 1.0.1 650 | has: 1.0.3 651 | has-property-descriptors: 1.0.0 652 | has-proto: 1.0.1 653 | has-symbols: 1.0.3 654 | internal-slot: 1.0.4 655 | is-array-buffer: 3.0.1 656 | is-callable: 1.2.7 657 | is-negative-zero: 2.0.2 658 | is-regex: 1.1.4 659 | is-shared-array-buffer: 1.0.2 660 | is-string: 1.0.7 661 | is-typed-array: 1.1.10 662 | is-weakref: 1.0.2 663 | object-inspect: 1.12.3 664 | object-keys: 1.1.1 665 | object.assign: 4.1.4 666 | regexp.prototype.flags: 1.4.3 667 | safe-regex-test: 1.0.0 668 | string.prototype.trimend: 1.0.6 669 | string.prototype.trimstart: 1.0.6 670 | typed-array-length: 1.0.4 671 | unbox-primitive: 1.0.2 672 | which-typed-array: 1.1.9 673 | dev: false 674 | 675 | /es-get-iterator/1.1.3: 676 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} 677 | dependencies: 678 | call-bind: 1.0.2 679 | get-intrinsic: 1.2.0 680 | has-symbols: 1.0.3 681 | is-arguments: 1.1.1 682 | is-map: 2.0.2 683 | is-set: 2.0.2 684 | is-string: 1.0.7 685 | isarray: 2.0.5 686 | stop-iteration-iterator: 1.0.0 687 | dev: false 688 | 689 | /es-set-tostringtag/2.0.1: 690 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 691 | engines: {node: '>= 0.4'} 692 | dependencies: 693 | get-intrinsic: 1.2.0 694 | has: 1.0.3 695 | has-tostringtag: 1.0.0 696 | dev: false 697 | 698 | /es-shim-unscopables/1.0.0: 699 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 700 | dependencies: 701 | has: 1.0.3 702 | dev: false 703 | 704 | /es-to-primitive/1.2.1: 705 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 706 | engines: {node: '>= 0.4'} 707 | dependencies: 708 | is-callable: 1.2.7 709 | is-date-object: 1.0.5 710 | is-symbol: 1.0.4 711 | dev: false 712 | 713 | /escape-string-regexp/4.0.0: 714 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 715 | engines: {node: '>=10'} 716 | dev: false 717 | 718 | /eslint-config-next/13.1.6_4vsywjlpuriuw3tl5oq6zy5a64: 719 | resolution: {integrity: sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==} 720 | peerDependencies: 721 | eslint: ^7.23.0 || ^8.0.0 722 | typescript: '>=3.3.1' 723 | peerDependenciesMeta: 724 | typescript: 725 | optional: true 726 | dependencies: 727 | '@next/eslint-plugin-next': 13.1.6 728 | '@rushstack/eslint-patch': 1.2.0 729 | '@typescript-eslint/parser': 5.51.0_4vsywjlpuriuw3tl5oq6zy5a64 730 | eslint: 8.33.0 731 | eslint-import-resolver-node: 0.3.7 732 | eslint-import-resolver-typescript: 3.5.3_ohdts44xlqyeyrlje4qnefqeay 733 | eslint-plugin-import: 2.27.5_kuqv7qxblf6fgldep4hddd7xwa 734 | eslint-plugin-jsx-a11y: 6.7.1_eslint@8.33.0 735 | eslint-plugin-react: 7.32.2_eslint@8.33.0 736 | eslint-plugin-react-hooks: 4.6.0_eslint@8.33.0 737 | typescript: 4.9.5 738 | transitivePeerDependencies: 739 | - eslint-import-resolver-webpack 740 | - supports-color 741 | dev: false 742 | 743 | /eslint-import-resolver-node/0.3.7: 744 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} 745 | dependencies: 746 | debug: 3.2.7 747 | is-core-module: 2.11.0 748 | resolve: 1.22.1 749 | transitivePeerDependencies: 750 | - supports-color 751 | dev: false 752 | 753 | /eslint-import-resolver-typescript/3.5.3_ohdts44xlqyeyrlje4qnefqeay: 754 | resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} 755 | engines: {node: ^14.18.0 || >=16.0.0} 756 | peerDependencies: 757 | eslint: '*' 758 | eslint-plugin-import: '*' 759 | dependencies: 760 | debug: 4.3.4 761 | enhanced-resolve: 5.12.0 762 | eslint: 8.33.0 763 | eslint-plugin-import: 2.27.5_kuqv7qxblf6fgldep4hddd7xwa 764 | get-tsconfig: 4.4.0 765 | globby: 13.1.3 766 | is-core-module: 2.11.0 767 | is-glob: 4.0.3 768 | synckit: 0.8.5 769 | transitivePeerDependencies: 770 | - supports-color 771 | dev: false 772 | 773 | /eslint-module-utils/2.7.4_wj7ubv6viehxm3sdjw6f37lxha: 774 | resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} 775 | engines: {node: '>=4'} 776 | peerDependencies: 777 | '@typescript-eslint/parser': '*' 778 | eslint: '*' 779 | eslint-import-resolver-node: '*' 780 | eslint-import-resolver-typescript: '*' 781 | eslint-import-resolver-webpack: '*' 782 | peerDependenciesMeta: 783 | '@typescript-eslint/parser': 784 | optional: true 785 | eslint: 786 | optional: true 787 | eslint-import-resolver-node: 788 | optional: true 789 | eslint-import-resolver-typescript: 790 | optional: true 791 | eslint-import-resolver-webpack: 792 | optional: true 793 | dependencies: 794 | '@typescript-eslint/parser': 5.51.0_4vsywjlpuriuw3tl5oq6zy5a64 795 | debug: 3.2.7 796 | eslint: 8.33.0 797 | eslint-import-resolver-node: 0.3.7 798 | eslint-import-resolver-typescript: 3.5.3_ohdts44xlqyeyrlje4qnefqeay 799 | transitivePeerDependencies: 800 | - supports-color 801 | dev: false 802 | 803 | /eslint-plugin-import/2.27.5_kuqv7qxblf6fgldep4hddd7xwa: 804 | resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} 805 | engines: {node: '>=4'} 806 | peerDependencies: 807 | '@typescript-eslint/parser': '*' 808 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 809 | peerDependenciesMeta: 810 | '@typescript-eslint/parser': 811 | optional: true 812 | dependencies: 813 | '@typescript-eslint/parser': 5.51.0_4vsywjlpuriuw3tl5oq6zy5a64 814 | array-includes: 3.1.6 815 | array.prototype.flat: 1.3.1 816 | array.prototype.flatmap: 1.3.1 817 | debug: 3.2.7 818 | doctrine: 2.1.0 819 | eslint: 8.33.0 820 | eslint-import-resolver-node: 0.3.7 821 | eslint-module-utils: 2.7.4_wj7ubv6viehxm3sdjw6f37lxha 822 | has: 1.0.3 823 | is-core-module: 2.11.0 824 | is-glob: 4.0.3 825 | minimatch: 3.1.2 826 | object.values: 1.1.6 827 | resolve: 1.22.1 828 | semver: 6.3.0 829 | tsconfig-paths: 3.14.1 830 | transitivePeerDependencies: 831 | - eslint-import-resolver-typescript 832 | - eslint-import-resolver-webpack 833 | - supports-color 834 | dev: false 835 | 836 | /eslint-plugin-jsx-a11y/6.7.1_eslint@8.33.0: 837 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} 838 | engines: {node: '>=4.0'} 839 | peerDependencies: 840 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 841 | dependencies: 842 | '@babel/runtime': 7.20.13 843 | aria-query: 5.1.3 844 | array-includes: 3.1.6 845 | array.prototype.flatmap: 1.3.1 846 | ast-types-flow: 0.0.7 847 | axe-core: 4.6.3 848 | axobject-query: 3.1.1 849 | damerau-levenshtein: 1.0.8 850 | emoji-regex: 9.2.2 851 | eslint: 8.33.0 852 | has: 1.0.3 853 | jsx-ast-utils: 3.3.3 854 | language-tags: 1.0.5 855 | minimatch: 3.1.2 856 | object.entries: 1.1.6 857 | object.fromentries: 2.0.6 858 | semver: 6.3.0 859 | dev: false 860 | 861 | /eslint-plugin-react-hooks/4.6.0_eslint@8.33.0: 862 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 863 | engines: {node: '>=10'} 864 | peerDependencies: 865 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 866 | dependencies: 867 | eslint: 8.33.0 868 | dev: false 869 | 870 | /eslint-plugin-react/7.32.2_eslint@8.33.0: 871 | resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} 872 | engines: {node: '>=4'} 873 | peerDependencies: 874 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 875 | dependencies: 876 | array-includes: 3.1.6 877 | array.prototype.flatmap: 1.3.1 878 | array.prototype.tosorted: 1.1.1 879 | doctrine: 2.1.0 880 | eslint: 8.33.0 881 | estraverse: 5.3.0 882 | jsx-ast-utils: 3.3.3 883 | minimatch: 3.1.2 884 | object.entries: 1.1.6 885 | object.fromentries: 2.0.6 886 | object.hasown: 1.1.2 887 | object.values: 1.1.6 888 | prop-types: 15.8.1 889 | resolve: 2.0.0-next.4 890 | semver: 6.3.0 891 | string.prototype.matchall: 4.0.8 892 | dev: false 893 | 894 | /eslint-scope/7.1.1: 895 | resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} 896 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 897 | dependencies: 898 | esrecurse: 4.3.0 899 | estraverse: 5.3.0 900 | dev: false 901 | 902 | /eslint-utils/3.0.0_eslint@8.33.0: 903 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 904 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 905 | peerDependencies: 906 | eslint: '>=5' 907 | dependencies: 908 | eslint: 8.33.0 909 | eslint-visitor-keys: 2.1.0 910 | dev: false 911 | 912 | /eslint-visitor-keys/2.1.0: 913 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 914 | engines: {node: '>=10'} 915 | dev: false 916 | 917 | /eslint-visitor-keys/3.3.0: 918 | resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} 919 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 920 | dev: false 921 | 922 | /eslint/8.33.0: 923 | resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==} 924 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 925 | hasBin: true 926 | dependencies: 927 | '@eslint/eslintrc': 1.4.1 928 | '@humanwhocodes/config-array': 0.11.8 929 | '@humanwhocodes/module-importer': 1.0.1 930 | '@nodelib/fs.walk': 1.2.8 931 | ajv: 6.12.6 932 | chalk: 4.1.2 933 | cross-spawn: 7.0.3 934 | debug: 4.3.4 935 | doctrine: 3.0.0 936 | escape-string-regexp: 4.0.0 937 | eslint-scope: 7.1.1 938 | eslint-utils: 3.0.0_eslint@8.33.0 939 | eslint-visitor-keys: 3.3.0 940 | espree: 9.4.1 941 | esquery: 1.4.0 942 | esutils: 2.0.3 943 | fast-deep-equal: 3.1.3 944 | file-entry-cache: 6.0.1 945 | find-up: 5.0.0 946 | glob-parent: 6.0.2 947 | globals: 13.20.0 948 | grapheme-splitter: 1.0.4 949 | ignore: 5.2.4 950 | import-fresh: 3.3.0 951 | imurmurhash: 0.1.4 952 | is-glob: 4.0.3 953 | is-path-inside: 3.0.3 954 | js-sdsl: 4.3.0 955 | js-yaml: 4.1.0 956 | json-stable-stringify-without-jsonify: 1.0.1 957 | levn: 0.4.1 958 | lodash.merge: 4.6.2 959 | minimatch: 3.1.2 960 | natural-compare: 1.4.0 961 | optionator: 0.9.1 962 | regexpp: 3.2.0 963 | strip-ansi: 6.0.1 964 | strip-json-comments: 3.1.1 965 | text-table: 0.2.0 966 | transitivePeerDependencies: 967 | - supports-color 968 | dev: false 969 | 970 | /espree/9.4.1: 971 | resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} 972 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 973 | dependencies: 974 | acorn: 8.8.2 975 | acorn-jsx: 5.3.2_acorn@8.8.2 976 | eslint-visitor-keys: 3.3.0 977 | dev: false 978 | 979 | /esquery/1.4.0: 980 | resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} 981 | engines: {node: '>=0.10'} 982 | dependencies: 983 | estraverse: 5.3.0 984 | dev: false 985 | 986 | /esrecurse/4.3.0: 987 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 988 | engines: {node: '>=4.0'} 989 | dependencies: 990 | estraverse: 5.3.0 991 | dev: false 992 | 993 | /estraverse/5.3.0: 994 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 995 | engines: {node: '>=4.0'} 996 | dev: false 997 | 998 | /esutils/2.0.3: 999 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1000 | engines: {node: '>=0.10.0'} 1001 | dev: false 1002 | 1003 | /fast-deep-equal/3.1.3: 1004 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1005 | dev: false 1006 | 1007 | /fast-glob/3.2.12: 1008 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1009 | engines: {node: '>=8.6.0'} 1010 | dependencies: 1011 | '@nodelib/fs.stat': 2.0.5 1012 | '@nodelib/fs.walk': 1.2.8 1013 | glob-parent: 5.1.2 1014 | merge2: 1.4.1 1015 | micromatch: 4.0.5 1016 | dev: false 1017 | 1018 | /fast-json-stable-stringify/2.1.0: 1019 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1020 | dev: false 1021 | 1022 | /fast-levenshtein/2.0.6: 1023 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1024 | dev: false 1025 | 1026 | /fastq/1.15.0: 1027 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1028 | dependencies: 1029 | reusify: 1.0.4 1030 | dev: false 1031 | 1032 | /file-entry-cache/6.0.1: 1033 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1034 | engines: {node: ^10.12.0 || >=12.0.0} 1035 | dependencies: 1036 | flat-cache: 3.0.4 1037 | dev: false 1038 | 1039 | /fill-range/7.0.1: 1040 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1041 | engines: {node: '>=8'} 1042 | dependencies: 1043 | to-regex-range: 5.0.1 1044 | dev: false 1045 | 1046 | /find-up/5.0.0: 1047 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1048 | engines: {node: '>=10'} 1049 | dependencies: 1050 | locate-path: 6.0.0 1051 | path-exists: 4.0.0 1052 | dev: false 1053 | 1054 | /flat-cache/3.0.4: 1055 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1056 | engines: {node: ^10.12.0 || >=12.0.0} 1057 | dependencies: 1058 | flatted: 3.2.7 1059 | rimraf: 3.0.2 1060 | dev: false 1061 | 1062 | /flatted/3.2.7: 1063 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1064 | dev: false 1065 | 1066 | /for-each/0.3.3: 1067 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1068 | dependencies: 1069 | is-callable: 1.2.7 1070 | dev: false 1071 | 1072 | /fs.realpath/1.0.0: 1073 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1074 | dev: false 1075 | 1076 | /function-bind/1.1.1: 1077 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1078 | dev: false 1079 | 1080 | /function.prototype.name/1.1.5: 1081 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1082 | engines: {node: '>= 0.4'} 1083 | dependencies: 1084 | call-bind: 1.0.2 1085 | define-properties: 1.1.4 1086 | es-abstract: 1.21.1 1087 | functions-have-names: 1.2.3 1088 | dev: false 1089 | 1090 | /functions-have-names/1.2.3: 1091 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1092 | dev: false 1093 | 1094 | /get-intrinsic/1.2.0: 1095 | resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} 1096 | dependencies: 1097 | function-bind: 1.1.1 1098 | has: 1.0.3 1099 | has-symbols: 1.0.3 1100 | dev: false 1101 | 1102 | /get-symbol-description/1.0.0: 1103 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1104 | engines: {node: '>= 0.4'} 1105 | dependencies: 1106 | call-bind: 1.0.2 1107 | get-intrinsic: 1.2.0 1108 | dev: false 1109 | 1110 | /get-tsconfig/4.4.0: 1111 | resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} 1112 | dev: false 1113 | 1114 | /glob-parent/5.1.2: 1115 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1116 | engines: {node: '>= 6'} 1117 | dependencies: 1118 | is-glob: 4.0.3 1119 | dev: false 1120 | 1121 | /glob-parent/6.0.2: 1122 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1123 | engines: {node: '>=10.13.0'} 1124 | dependencies: 1125 | is-glob: 4.0.3 1126 | dev: false 1127 | 1128 | /glob/7.1.7: 1129 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} 1130 | dependencies: 1131 | fs.realpath: 1.0.0 1132 | inflight: 1.0.6 1133 | inherits: 2.0.4 1134 | minimatch: 3.1.2 1135 | once: 1.4.0 1136 | path-is-absolute: 1.0.1 1137 | dev: false 1138 | 1139 | /glob/7.2.3: 1140 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1141 | dependencies: 1142 | fs.realpath: 1.0.0 1143 | inflight: 1.0.6 1144 | inherits: 2.0.4 1145 | minimatch: 3.1.2 1146 | once: 1.4.0 1147 | path-is-absolute: 1.0.1 1148 | dev: false 1149 | 1150 | /globals/13.20.0: 1151 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1152 | engines: {node: '>=8'} 1153 | dependencies: 1154 | type-fest: 0.20.2 1155 | dev: false 1156 | 1157 | /globalthis/1.0.3: 1158 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1159 | engines: {node: '>= 0.4'} 1160 | dependencies: 1161 | define-properties: 1.1.4 1162 | dev: false 1163 | 1164 | /globalyzer/0.1.0: 1165 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1166 | dev: false 1167 | 1168 | /globby/11.1.0: 1169 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1170 | engines: {node: '>=10'} 1171 | dependencies: 1172 | array-union: 2.1.0 1173 | dir-glob: 3.0.1 1174 | fast-glob: 3.2.12 1175 | ignore: 5.2.4 1176 | merge2: 1.4.1 1177 | slash: 3.0.0 1178 | dev: false 1179 | 1180 | /globby/13.1.3: 1181 | resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} 1182 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1183 | dependencies: 1184 | dir-glob: 3.0.1 1185 | fast-glob: 3.2.12 1186 | ignore: 5.2.4 1187 | merge2: 1.4.1 1188 | slash: 4.0.0 1189 | dev: false 1190 | 1191 | /globrex/0.1.2: 1192 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1193 | dev: false 1194 | 1195 | /gopd/1.0.1: 1196 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1197 | dependencies: 1198 | get-intrinsic: 1.2.0 1199 | dev: false 1200 | 1201 | /graceful-fs/4.2.10: 1202 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 1203 | dev: false 1204 | 1205 | /grapheme-splitter/1.0.4: 1206 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1207 | dev: false 1208 | 1209 | /has-bigints/1.0.2: 1210 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1211 | dev: false 1212 | 1213 | /has-flag/4.0.0: 1214 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1215 | engines: {node: '>=8'} 1216 | dev: false 1217 | 1218 | /has-property-descriptors/1.0.0: 1219 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1220 | dependencies: 1221 | get-intrinsic: 1.2.0 1222 | dev: false 1223 | 1224 | /has-proto/1.0.1: 1225 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1226 | engines: {node: '>= 0.4'} 1227 | dev: false 1228 | 1229 | /has-symbols/1.0.3: 1230 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1231 | engines: {node: '>= 0.4'} 1232 | dev: false 1233 | 1234 | /has-tostringtag/1.0.0: 1235 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1236 | engines: {node: '>= 0.4'} 1237 | dependencies: 1238 | has-symbols: 1.0.3 1239 | dev: false 1240 | 1241 | /has/1.0.3: 1242 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1243 | engines: {node: '>= 0.4.0'} 1244 | dependencies: 1245 | function-bind: 1.1.1 1246 | dev: false 1247 | 1248 | /ignore/5.2.4: 1249 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1250 | engines: {node: '>= 4'} 1251 | dev: false 1252 | 1253 | /import-fresh/3.3.0: 1254 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1255 | engines: {node: '>=6'} 1256 | dependencies: 1257 | parent-module: 1.0.1 1258 | resolve-from: 4.0.0 1259 | dev: false 1260 | 1261 | /imurmurhash/0.1.4: 1262 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1263 | engines: {node: '>=0.8.19'} 1264 | dev: false 1265 | 1266 | /inflight/1.0.6: 1267 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1268 | dependencies: 1269 | once: 1.4.0 1270 | wrappy: 1.0.2 1271 | dev: false 1272 | 1273 | /inherits/2.0.4: 1274 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1275 | dev: false 1276 | 1277 | /internal-slot/1.0.4: 1278 | resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} 1279 | engines: {node: '>= 0.4'} 1280 | dependencies: 1281 | get-intrinsic: 1.2.0 1282 | has: 1.0.3 1283 | side-channel: 1.0.4 1284 | dev: false 1285 | 1286 | /is-arguments/1.1.1: 1287 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 1288 | engines: {node: '>= 0.4'} 1289 | dependencies: 1290 | call-bind: 1.0.2 1291 | has-tostringtag: 1.0.0 1292 | dev: false 1293 | 1294 | /is-array-buffer/3.0.1: 1295 | resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} 1296 | dependencies: 1297 | call-bind: 1.0.2 1298 | get-intrinsic: 1.2.0 1299 | is-typed-array: 1.1.10 1300 | dev: false 1301 | 1302 | /is-bigint/1.0.4: 1303 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1304 | dependencies: 1305 | has-bigints: 1.0.2 1306 | dev: false 1307 | 1308 | /is-boolean-object/1.1.2: 1309 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1310 | engines: {node: '>= 0.4'} 1311 | dependencies: 1312 | call-bind: 1.0.2 1313 | has-tostringtag: 1.0.0 1314 | dev: false 1315 | 1316 | /is-callable/1.2.7: 1317 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1318 | engines: {node: '>= 0.4'} 1319 | dev: false 1320 | 1321 | /is-core-module/2.11.0: 1322 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 1323 | dependencies: 1324 | has: 1.0.3 1325 | dev: false 1326 | 1327 | /is-date-object/1.0.5: 1328 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1329 | engines: {node: '>= 0.4'} 1330 | dependencies: 1331 | has-tostringtag: 1.0.0 1332 | dev: false 1333 | 1334 | /is-docker/2.2.1: 1335 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1336 | engines: {node: '>=8'} 1337 | hasBin: true 1338 | dev: false 1339 | 1340 | /is-extglob/2.1.1: 1341 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1342 | engines: {node: '>=0.10.0'} 1343 | dev: false 1344 | 1345 | /is-glob/4.0.3: 1346 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1347 | engines: {node: '>=0.10.0'} 1348 | dependencies: 1349 | is-extglob: 2.1.1 1350 | dev: false 1351 | 1352 | /is-map/2.0.2: 1353 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 1354 | dev: false 1355 | 1356 | /is-negative-zero/2.0.2: 1357 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1358 | engines: {node: '>= 0.4'} 1359 | dev: false 1360 | 1361 | /is-number-object/1.0.7: 1362 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1363 | engines: {node: '>= 0.4'} 1364 | dependencies: 1365 | has-tostringtag: 1.0.0 1366 | dev: false 1367 | 1368 | /is-number/7.0.0: 1369 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1370 | engines: {node: '>=0.12.0'} 1371 | dev: false 1372 | 1373 | /is-path-inside/3.0.3: 1374 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1375 | engines: {node: '>=8'} 1376 | dev: false 1377 | 1378 | /is-regex/1.1.4: 1379 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1380 | engines: {node: '>= 0.4'} 1381 | dependencies: 1382 | call-bind: 1.0.2 1383 | has-tostringtag: 1.0.0 1384 | dev: false 1385 | 1386 | /is-set/2.0.2: 1387 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 1388 | dev: false 1389 | 1390 | /is-shared-array-buffer/1.0.2: 1391 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1392 | dependencies: 1393 | call-bind: 1.0.2 1394 | dev: false 1395 | 1396 | /is-string/1.0.7: 1397 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1398 | engines: {node: '>= 0.4'} 1399 | dependencies: 1400 | has-tostringtag: 1.0.0 1401 | dev: false 1402 | 1403 | /is-symbol/1.0.4: 1404 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1405 | engines: {node: '>= 0.4'} 1406 | dependencies: 1407 | has-symbols: 1.0.3 1408 | dev: false 1409 | 1410 | /is-typed-array/1.1.10: 1411 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1412 | engines: {node: '>= 0.4'} 1413 | dependencies: 1414 | available-typed-arrays: 1.0.5 1415 | call-bind: 1.0.2 1416 | for-each: 0.3.3 1417 | gopd: 1.0.1 1418 | has-tostringtag: 1.0.0 1419 | dev: false 1420 | 1421 | /is-weakmap/2.0.1: 1422 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 1423 | dev: false 1424 | 1425 | /is-weakref/1.0.2: 1426 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1427 | dependencies: 1428 | call-bind: 1.0.2 1429 | dev: false 1430 | 1431 | /is-weakset/2.0.2: 1432 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 1433 | dependencies: 1434 | call-bind: 1.0.2 1435 | get-intrinsic: 1.2.0 1436 | dev: false 1437 | 1438 | /is-wsl/2.2.0: 1439 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1440 | engines: {node: '>=8'} 1441 | dependencies: 1442 | is-docker: 2.2.1 1443 | dev: false 1444 | 1445 | /isarray/2.0.5: 1446 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1447 | dev: false 1448 | 1449 | /isexe/2.0.0: 1450 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1451 | dev: false 1452 | 1453 | /jose/4.11.4: 1454 | resolution: {integrity: sha512-94FdcR8felat4vaTJyL/WVdtlWLlsnLMZP8v+A0Vru18K3bQ22vn7TtpVh3JlgBFNIlYOUlGqwp/MjRPOnIyCQ==} 1455 | dev: false 1456 | 1457 | /js-sdsl/4.3.0: 1458 | resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} 1459 | dev: false 1460 | 1461 | /js-tokens/4.0.0: 1462 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1463 | dev: false 1464 | 1465 | /js-yaml/4.1.0: 1466 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1467 | hasBin: true 1468 | dependencies: 1469 | argparse: 2.0.1 1470 | dev: false 1471 | 1472 | /json-schema-traverse/0.4.1: 1473 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1474 | dev: false 1475 | 1476 | /json-stable-stringify-without-jsonify/1.0.1: 1477 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1478 | dev: false 1479 | 1480 | /json5/1.0.2: 1481 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1482 | hasBin: true 1483 | dependencies: 1484 | minimist: 1.2.7 1485 | dev: false 1486 | 1487 | /jsx-ast-utils/3.3.3: 1488 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} 1489 | engines: {node: '>=4.0'} 1490 | dependencies: 1491 | array-includes: 3.1.6 1492 | object.assign: 4.1.4 1493 | dev: false 1494 | 1495 | /jwt-decode/3.1.2: 1496 | resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} 1497 | dev: false 1498 | 1499 | /language-subtag-registry/0.3.22: 1500 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} 1501 | dev: false 1502 | 1503 | /language-tags/1.0.5: 1504 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} 1505 | dependencies: 1506 | language-subtag-registry: 0.3.22 1507 | dev: false 1508 | 1509 | /levn/0.4.1: 1510 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1511 | engines: {node: '>= 0.8.0'} 1512 | dependencies: 1513 | prelude-ls: 1.2.1 1514 | type-check: 0.4.0 1515 | dev: false 1516 | 1517 | /locate-path/6.0.0: 1518 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1519 | engines: {node: '>=10'} 1520 | dependencies: 1521 | p-locate: 5.0.0 1522 | dev: false 1523 | 1524 | /lodash.merge/4.6.2: 1525 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1526 | dev: false 1527 | 1528 | /loose-envify/1.4.0: 1529 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1530 | hasBin: true 1531 | dependencies: 1532 | js-tokens: 4.0.0 1533 | dev: false 1534 | 1535 | /lru-cache/6.0.0: 1536 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1537 | engines: {node: '>=10'} 1538 | dependencies: 1539 | yallist: 4.0.0 1540 | dev: false 1541 | 1542 | /merge2/1.4.1: 1543 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1544 | engines: {node: '>= 8'} 1545 | dev: false 1546 | 1547 | /micromatch/4.0.5: 1548 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1549 | engines: {node: '>=8.6'} 1550 | dependencies: 1551 | braces: 3.0.2 1552 | picomatch: 2.3.1 1553 | dev: false 1554 | 1555 | /minimatch/3.1.2: 1556 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1557 | dependencies: 1558 | brace-expansion: 1.1.11 1559 | dev: false 1560 | 1561 | /minimist/1.2.7: 1562 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} 1563 | dev: false 1564 | 1565 | /ms/2.1.2: 1566 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1567 | dev: false 1568 | 1569 | /ms/2.1.3: 1570 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1571 | dev: false 1572 | 1573 | /nanoid/3.3.4: 1574 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1575 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1576 | hasBin: true 1577 | dev: false 1578 | 1579 | /natural-compare/1.4.0: 1580 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1581 | dev: false 1582 | 1583 | /next-auth/4.19.2_3vryta7zmbcsw4rrqf4axjqggm: 1584 | resolution: {integrity: sha512-6V2YG3IJQVhgCAH7mvT3yopTW92gMdUrcwGX7NQ0dCreT/+axGua/JmVdarjec0C/oJukKpIYRgjMlV+L5ZQOQ==} 1585 | peerDependencies: 1586 | next: ^12.2.5 || ^13 1587 | nodemailer: ^6.6.5 1588 | react: ^17.0.2 || ^18 1589 | react-dom: ^17.0.2 || ^18 1590 | peerDependenciesMeta: 1591 | nodemailer: 1592 | optional: true 1593 | dependencies: 1594 | '@babel/runtime': 7.20.13 1595 | '@panva/hkdf': 1.0.2 1596 | cookie: 0.5.0 1597 | jose: 4.11.4 1598 | next: 13.1.6_biqbaboplfbrettd7655fr4n2y 1599 | oauth: 0.9.15 1600 | openid-client: 5.4.0 1601 | preact: 10.12.0 1602 | preact-render-to-string: 5.2.6_preact@10.12.0 1603 | react: 18.2.0 1604 | react-dom: 18.2.0_react@18.2.0 1605 | uuid: 8.3.2 1606 | dev: false 1607 | 1608 | /next/13.1.6_biqbaboplfbrettd7655fr4n2y: 1609 | resolution: {integrity: sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==} 1610 | engines: {node: '>=14.6.0'} 1611 | hasBin: true 1612 | peerDependencies: 1613 | fibers: '>= 3.1.0' 1614 | node-sass: ^6.0.0 || ^7.0.0 1615 | react: ^18.2.0 1616 | react-dom: ^18.2.0 1617 | sass: ^1.3.0 1618 | peerDependenciesMeta: 1619 | fibers: 1620 | optional: true 1621 | node-sass: 1622 | optional: true 1623 | sass: 1624 | optional: true 1625 | dependencies: 1626 | '@next/env': 13.1.6 1627 | '@swc/helpers': 0.4.14 1628 | caniuse-lite: 1.0.30001451 1629 | postcss: 8.4.14 1630 | react: 18.2.0 1631 | react-dom: 18.2.0_react@18.2.0 1632 | styled-jsx: 5.1.1_react@18.2.0 1633 | optionalDependencies: 1634 | '@next/swc-android-arm-eabi': 13.1.6 1635 | '@next/swc-android-arm64': 13.1.6 1636 | '@next/swc-darwin-arm64': 13.1.6 1637 | '@next/swc-darwin-x64': 13.1.6 1638 | '@next/swc-freebsd-x64': 13.1.6 1639 | '@next/swc-linux-arm-gnueabihf': 13.1.6 1640 | '@next/swc-linux-arm64-gnu': 13.1.6 1641 | '@next/swc-linux-arm64-musl': 13.1.6 1642 | '@next/swc-linux-x64-gnu': 13.1.6 1643 | '@next/swc-linux-x64-musl': 13.1.6 1644 | '@next/swc-win32-arm64-msvc': 13.1.6 1645 | '@next/swc-win32-ia32-msvc': 13.1.6 1646 | '@next/swc-win32-x64-msvc': 13.1.6 1647 | transitivePeerDependencies: 1648 | - '@babel/core' 1649 | - babel-plugin-macros 1650 | dev: false 1651 | 1652 | /oauth/0.9.15: 1653 | resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} 1654 | dev: false 1655 | 1656 | /object-assign/4.1.1: 1657 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1658 | engines: {node: '>=0.10.0'} 1659 | dev: false 1660 | 1661 | /object-hash/2.2.0: 1662 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} 1663 | engines: {node: '>= 6'} 1664 | dev: false 1665 | 1666 | /object-inspect/1.12.3: 1667 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1668 | dev: false 1669 | 1670 | /object-is/1.1.5: 1671 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} 1672 | engines: {node: '>= 0.4'} 1673 | dependencies: 1674 | call-bind: 1.0.2 1675 | define-properties: 1.1.4 1676 | dev: false 1677 | 1678 | /object-keys/1.1.1: 1679 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1680 | engines: {node: '>= 0.4'} 1681 | dev: false 1682 | 1683 | /object.assign/4.1.4: 1684 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1685 | engines: {node: '>= 0.4'} 1686 | dependencies: 1687 | call-bind: 1.0.2 1688 | define-properties: 1.1.4 1689 | has-symbols: 1.0.3 1690 | object-keys: 1.1.1 1691 | dev: false 1692 | 1693 | /object.entries/1.1.6: 1694 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} 1695 | engines: {node: '>= 0.4'} 1696 | dependencies: 1697 | call-bind: 1.0.2 1698 | define-properties: 1.1.4 1699 | es-abstract: 1.21.1 1700 | dev: false 1701 | 1702 | /object.fromentries/2.0.6: 1703 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 1704 | engines: {node: '>= 0.4'} 1705 | dependencies: 1706 | call-bind: 1.0.2 1707 | define-properties: 1.1.4 1708 | es-abstract: 1.21.1 1709 | dev: false 1710 | 1711 | /object.hasown/1.1.2: 1712 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} 1713 | dependencies: 1714 | define-properties: 1.1.4 1715 | es-abstract: 1.21.1 1716 | dev: false 1717 | 1718 | /object.values/1.1.6: 1719 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 1720 | engines: {node: '>= 0.4'} 1721 | dependencies: 1722 | call-bind: 1.0.2 1723 | define-properties: 1.1.4 1724 | es-abstract: 1.21.1 1725 | dev: false 1726 | 1727 | /oidc-token-hash/5.0.1: 1728 | resolution: {integrity: sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==} 1729 | engines: {node: ^10.13.0 || >=12.0.0} 1730 | dev: false 1731 | 1732 | /once/1.4.0: 1733 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1734 | dependencies: 1735 | wrappy: 1.0.2 1736 | dev: false 1737 | 1738 | /open/8.4.1: 1739 | resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} 1740 | engines: {node: '>=12'} 1741 | dependencies: 1742 | define-lazy-prop: 2.0.0 1743 | is-docker: 2.2.1 1744 | is-wsl: 2.2.0 1745 | dev: false 1746 | 1747 | /openid-client/5.4.0: 1748 | resolution: {integrity: sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==} 1749 | dependencies: 1750 | jose: 4.11.4 1751 | lru-cache: 6.0.0 1752 | object-hash: 2.2.0 1753 | oidc-token-hash: 5.0.1 1754 | dev: false 1755 | 1756 | /optionator/0.9.1: 1757 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1758 | engines: {node: '>= 0.8.0'} 1759 | dependencies: 1760 | deep-is: 0.1.4 1761 | fast-levenshtein: 2.0.6 1762 | levn: 0.4.1 1763 | prelude-ls: 1.2.1 1764 | type-check: 0.4.0 1765 | word-wrap: 1.2.3 1766 | dev: false 1767 | 1768 | /p-limit/3.1.0: 1769 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1770 | engines: {node: '>=10'} 1771 | dependencies: 1772 | yocto-queue: 0.1.0 1773 | dev: false 1774 | 1775 | /p-locate/5.0.0: 1776 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1777 | engines: {node: '>=10'} 1778 | dependencies: 1779 | p-limit: 3.1.0 1780 | dev: false 1781 | 1782 | /parent-module/1.0.1: 1783 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1784 | engines: {node: '>=6'} 1785 | dependencies: 1786 | callsites: 3.1.0 1787 | dev: false 1788 | 1789 | /path-exists/4.0.0: 1790 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1791 | engines: {node: '>=8'} 1792 | dev: false 1793 | 1794 | /path-is-absolute/1.0.1: 1795 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1796 | engines: {node: '>=0.10.0'} 1797 | dev: false 1798 | 1799 | /path-key/3.1.1: 1800 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1801 | engines: {node: '>=8'} 1802 | dev: false 1803 | 1804 | /path-parse/1.0.7: 1805 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1806 | dev: false 1807 | 1808 | /path-type/4.0.0: 1809 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1810 | engines: {node: '>=8'} 1811 | dev: false 1812 | 1813 | /picocolors/1.0.0: 1814 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1815 | dev: false 1816 | 1817 | /picomatch/2.3.1: 1818 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1819 | engines: {node: '>=8.6'} 1820 | dev: false 1821 | 1822 | /postcss/8.4.14: 1823 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 1824 | engines: {node: ^10 || ^12 || >=14} 1825 | dependencies: 1826 | nanoid: 3.3.4 1827 | picocolors: 1.0.0 1828 | source-map-js: 1.0.2 1829 | dev: false 1830 | 1831 | /preact-render-to-string/5.2.6_preact@10.12.0: 1832 | resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} 1833 | peerDependencies: 1834 | preact: '>=10' 1835 | dependencies: 1836 | preact: 10.12.0 1837 | pretty-format: 3.8.0 1838 | dev: false 1839 | 1840 | /preact/10.12.0: 1841 | resolution: {integrity: sha512-+w8ix+huD8CNZemheC53IPjMUFk921i02o30u0K6h53spMX41y/QhVDnG/nU2k42/69tvqWmVsgNLIiwRAcmxg==} 1842 | dev: false 1843 | 1844 | /prelude-ls/1.2.1: 1845 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1846 | engines: {node: '>= 0.8.0'} 1847 | dev: false 1848 | 1849 | /pretty-format/3.8.0: 1850 | resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} 1851 | dev: false 1852 | 1853 | /prop-types/15.8.1: 1854 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1855 | dependencies: 1856 | loose-envify: 1.4.0 1857 | object-assign: 4.1.1 1858 | react-is: 16.13.1 1859 | dev: false 1860 | 1861 | /punycode/2.3.0: 1862 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1863 | engines: {node: '>=6'} 1864 | dev: false 1865 | 1866 | /queue-microtask/1.2.3: 1867 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1868 | dev: false 1869 | 1870 | /react-dom/18.2.0_react@18.2.0: 1871 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1872 | peerDependencies: 1873 | react: ^18.2.0 1874 | dependencies: 1875 | loose-envify: 1.4.0 1876 | react: 18.2.0 1877 | scheduler: 0.23.0 1878 | dev: false 1879 | 1880 | /react-is/16.13.1: 1881 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1882 | dev: false 1883 | 1884 | /react/18.2.0: 1885 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1886 | engines: {node: '>=0.10.0'} 1887 | dependencies: 1888 | loose-envify: 1.4.0 1889 | dev: false 1890 | 1891 | /regenerator-runtime/0.13.11: 1892 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 1893 | dev: false 1894 | 1895 | /regexp.prototype.flags/1.4.3: 1896 | resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} 1897 | engines: {node: '>= 0.4'} 1898 | dependencies: 1899 | call-bind: 1.0.2 1900 | define-properties: 1.1.4 1901 | functions-have-names: 1.2.3 1902 | dev: false 1903 | 1904 | /regexpp/3.2.0: 1905 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1906 | engines: {node: '>=8'} 1907 | dev: false 1908 | 1909 | /resolve-from/4.0.0: 1910 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1911 | engines: {node: '>=4'} 1912 | dev: false 1913 | 1914 | /resolve/1.22.1: 1915 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1916 | hasBin: true 1917 | dependencies: 1918 | is-core-module: 2.11.0 1919 | path-parse: 1.0.7 1920 | supports-preserve-symlinks-flag: 1.0.0 1921 | dev: false 1922 | 1923 | /resolve/2.0.0-next.4: 1924 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 1925 | hasBin: true 1926 | dependencies: 1927 | is-core-module: 2.11.0 1928 | path-parse: 1.0.7 1929 | supports-preserve-symlinks-flag: 1.0.0 1930 | dev: false 1931 | 1932 | /reusify/1.0.4: 1933 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1934 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1935 | dev: false 1936 | 1937 | /rimraf/3.0.2: 1938 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1939 | hasBin: true 1940 | dependencies: 1941 | glob: 7.2.3 1942 | dev: false 1943 | 1944 | /run-parallel/1.2.0: 1945 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1946 | dependencies: 1947 | queue-microtask: 1.2.3 1948 | dev: false 1949 | 1950 | /safe-regex-test/1.0.0: 1951 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 1952 | dependencies: 1953 | call-bind: 1.0.2 1954 | get-intrinsic: 1.2.0 1955 | is-regex: 1.1.4 1956 | dev: false 1957 | 1958 | /scheduler/0.23.0: 1959 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1960 | dependencies: 1961 | loose-envify: 1.4.0 1962 | dev: false 1963 | 1964 | /semver/6.3.0: 1965 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1966 | hasBin: true 1967 | dev: false 1968 | 1969 | /semver/7.3.8: 1970 | resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 1971 | engines: {node: '>=10'} 1972 | hasBin: true 1973 | dependencies: 1974 | lru-cache: 6.0.0 1975 | dev: false 1976 | 1977 | /shebang-command/2.0.0: 1978 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1979 | engines: {node: '>=8'} 1980 | dependencies: 1981 | shebang-regex: 3.0.0 1982 | dev: false 1983 | 1984 | /shebang-regex/3.0.0: 1985 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1986 | engines: {node: '>=8'} 1987 | dev: false 1988 | 1989 | /side-channel/1.0.4: 1990 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1991 | dependencies: 1992 | call-bind: 1.0.2 1993 | get-intrinsic: 1.2.0 1994 | object-inspect: 1.12.3 1995 | dev: false 1996 | 1997 | /slash/3.0.0: 1998 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1999 | engines: {node: '>=8'} 2000 | dev: false 2001 | 2002 | /slash/4.0.0: 2003 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} 2004 | engines: {node: '>=12'} 2005 | dev: false 2006 | 2007 | /source-map-js/1.0.2: 2008 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2009 | engines: {node: '>=0.10.0'} 2010 | dev: false 2011 | 2012 | /stop-iteration-iterator/1.0.0: 2013 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} 2014 | engines: {node: '>= 0.4'} 2015 | dependencies: 2016 | internal-slot: 1.0.4 2017 | dev: false 2018 | 2019 | /string.prototype.matchall/4.0.8: 2020 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} 2021 | dependencies: 2022 | call-bind: 1.0.2 2023 | define-properties: 1.1.4 2024 | es-abstract: 1.21.1 2025 | get-intrinsic: 1.2.0 2026 | has-symbols: 1.0.3 2027 | internal-slot: 1.0.4 2028 | regexp.prototype.flags: 1.4.3 2029 | side-channel: 1.0.4 2030 | dev: false 2031 | 2032 | /string.prototype.trimend/1.0.6: 2033 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 2034 | dependencies: 2035 | call-bind: 1.0.2 2036 | define-properties: 1.1.4 2037 | es-abstract: 1.21.1 2038 | dev: false 2039 | 2040 | /string.prototype.trimstart/1.0.6: 2041 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 2042 | dependencies: 2043 | call-bind: 1.0.2 2044 | define-properties: 1.1.4 2045 | es-abstract: 1.21.1 2046 | dev: false 2047 | 2048 | /strip-ansi/6.0.1: 2049 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2050 | engines: {node: '>=8'} 2051 | dependencies: 2052 | ansi-regex: 5.0.1 2053 | dev: false 2054 | 2055 | /strip-bom/3.0.0: 2056 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2057 | engines: {node: '>=4'} 2058 | dev: false 2059 | 2060 | /strip-json-comments/3.1.1: 2061 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2062 | engines: {node: '>=8'} 2063 | dev: false 2064 | 2065 | /styled-jsx/5.1.1_react@18.2.0: 2066 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 2067 | engines: {node: '>= 12.0.0'} 2068 | peerDependencies: 2069 | '@babel/core': '*' 2070 | babel-plugin-macros: '*' 2071 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 2072 | peerDependenciesMeta: 2073 | '@babel/core': 2074 | optional: true 2075 | babel-plugin-macros: 2076 | optional: true 2077 | dependencies: 2078 | client-only: 0.0.1 2079 | react: 18.2.0 2080 | dev: false 2081 | 2082 | /supports-color/7.2.0: 2083 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2084 | engines: {node: '>=8'} 2085 | dependencies: 2086 | has-flag: 4.0.0 2087 | dev: false 2088 | 2089 | /supports-preserve-symlinks-flag/1.0.0: 2090 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2091 | engines: {node: '>= 0.4'} 2092 | dev: false 2093 | 2094 | /synckit/0.8.5: 2095 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} 2096 | engines: {node: ^14.18.0 || >=16.0.0} 2097 | dependencies: 2098 | '@pkgr/utils': 2.3.1 2099 | tslib: 2.5.0 2100 | dev: false 2101 | 2102 | /tapable/2.2.1: 2103 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 2104 | engines: {node: '>=6'} 2105 | dev: false 2106 | 2107 | /text-table/0.2.0: 2108 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2109 | dev: false 2110 | 2111 | /tiny-glob/0.2.9: 2112 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2113 | dependencies: 2114 | globalyzer: 0.1.0 2115 | globrex: 0.1.2 2116 | dev: false 2117 | 2118 | /to-regex-range/5.0.1: 2119 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2120 | engines: {node: '>=8.0'} 2121 | dependencies: 2122 | is-number: 7.0.0 2123 | dev: false 2124 | 2125 | /tsconfig-paths/3.14.1: 2126 | resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} 2127 | dependencies: 2128 | '@types/json5': 0.0.29 2129 | json5: 1.0.2 2130 | minimist: 1.2.7 2131 | strip-bom: 3.0.0 2132 | dev: false 2133 | 2134 | /tslib/1.14.1: 2135 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2136 | dev: false 2137 | 2138 | /tslib/2.5.0: 2139 | resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} 2140 | dev: false 2141 | 2142 | /tsutils/3.21.0_typescript@4.9.5: 2143 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2144 | engines: {node: '>= 6'} 2145 | peerDependencies: 2146 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2147 | dependencies: 2148 | tslib: 1.14.1 2149 | typescript: 4.9.5 2150 | dev: false 2151 | 2152 | /type-check/0.4.0: 2153 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2154 | engines: {node: '>= 0.8.0'} 2155 | dependencies: 2156 | prelude-ls: 1.2.1 2157 | dev: false 2158 | 2159 | /type-fest/0.20.2: 2160 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2161 | engines: {node: '>=10'} 2162 | dev: false 2163 | 2164 | /typed-array-length/1.0.4: 2165 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 2166 | dependencies: 2167 | call-bind: 1.0.2 2168 | for-each: 0.3.3 2169 | is-typed-array: 1.1.10 2170 | dev: false 2171 | 2172 | /typescript/4.9.5: 2173 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 2174 | engines: {node: '>=4.2.0'} 2175 | hasBin: true 2176 | dev: false 2177 | 2178 | /unbox-primitive/1.0.2: 2179 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2180 | dependencies: 2181 | call-bind: 1.0.2 2182 | has-bigints: 1.0.2 2183 | has-symbols: 1.0.3 2184 | which-boxed-primitive: 1.0.2 2185 | dev: false 2186 | 2187 | /uri-js/4.4.1: 2188 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2189 | dependencies: 2190 | punycode: 2.3.0 2191 | dev: false 2192 | 2193 | /uuid/8.3.2: 2194 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 2195 | hasBin: true 2196 | dev: false 2197 | 2198 | /which-boxed-primitive/1.0.2: 2199 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2200 | dependencies: 2201 | is-bigint: 1.0.4 2202 | is-boolean-object: 1.1.2 2203 | is-number-object: 1.0.7 2204 | is-string: 1.0.7 2205 | is-symbol: 1.0.4 2206 | dev: false 2207 | 2208 | /which-collection/1.0.1: 2209 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 2210 | dependencies: 2211 | is-map: 2.0.2 2212 | is-set: 2.0.2 2213 | is-weakmap: 2.0.1 2214 | is-weakset: 2.0.2 2215 | dev: false 2216 | 2217 | /which-typed-array/1.1.9: 2218 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 2219 | engines: {node: '>= 0.4'} 2220 | dependencies: 2221 | available-typed-arrays: 1.0.5 2222 | call-bind: 1.0.2 2223 | for-each: 0.3.3 2224 | gopd: 1.0.1 2225 | has-tostringtag: 1.0.0 2226 | is-typed-array: 1.1.10 2227 | dev: false 2228 | 2229 | /which/2.0.2: 2230 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2231 | engines: {node: '>= 8'} 2232 | hasBin: true 2233 | dependencies: 2234 | isexe: 2.0.0 2235 | dev: false 2236 | 2237 | /word-wrap/1.2.3: 2238 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2239 | engines: {node: '>=0.10.0'} 2240 | dev: false 2241 | 2242 | /wrappy/1.0.2: 2243 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2244 | dev: false 2245 | 2246 | /yallist/4.0.0: 2247 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2248 | dev: false 2249 | 2250 | /yocto-queue/0.1.0: 2251 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2252 | engines: {node: '>=10'} 2253 | dev: false 2254 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mujahidfa/django_nextjs_auth/8f1ef54b8e4e2ed8655089acd22ba7038063d236/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/public/thirteen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | --------------------------------------------------------------------------------