├── .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 |
--------------------------------------------------------------------------------