├── 01-Login
├── .dockerignore
├── .browserslistrc
├── auth_config.json.example
├── exec.ps1
├── public
│ ├── logo.png
│ └── favicon.ico
├── exec.sh
├── vite.config.js
├── src
│ ├── shims-vue.d.ts
│ ├── components
│ │ ├── Error.vue
│ │ ├── Hero.vue
│ │ ├── HomeContent.vue
│ │ └── NavBar.vue
│ ├── views
│ │ ├── Home.vue
│ │ └── Profile.vue
│ ├── router
│ │ └── index.ts
│ ├── App.vue
│ ├── main.ts
│ └── assets
│ │ └── loading.svg
├── web-server.js
├── Dockerfile
├── package.json
├── tsconfig.json
├── index.html
├── loading.svg
├── README.md
└── package-lock.json
├── 02-Calling-an-API
├── .dockerignore
├── .browserslistrc
├── exec.ps1
├── public
│ ├── logo.png
│ └── favicon.ico
├── exec.sh
├── auth_config.json.example
├── src
│ ├── shims-vue.d.ts
│ ├── components
│ │ ├── Error.vue
│ │ ├── Hero.vue
│ │ ├── HomeContent.vue
│ │ └── NavBar.vue
│ ├── views
│ │ ├── Home.vue
│ │ ├── Profile.vue
│ │ └── ExternalApi.vue
│ ├── App.vue
│ ├── router
│ │ └── index.ts
│ ├── main.ts
│ └── assets
│ │ └── loading.svg
├── vite.config.js
├── Dockerfile
├── tsconfig.json
├── package.json
├── web-server.js
├── index.html
├── loading.svg
└── README.md
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── Feature Request.yml
│ └── Bug Report.yml
├── dependabot.yml
├── workflows
│ └── semgrep.yml
└── stale.yml
├── .gitignore
├── netlify.toml
├── LICENSE
├── README.md
└── .circleci
└── config.yml
/01-Login/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .git
3 |
--------------------------------------------------------------------------------
/02-Calling-an-API/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .git
3 |
--------------------------------------------------------------------------------
/01-Login/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @auth0-samples/project-dx-sdks-engineer-codeowner
2 |
--------------------------------------------------------------------------------
/02-Calling-an-API/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not ie <= 8
4 |
--------------------------------------------------------------------------------
/01-Login/auth_config.json.example:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "{DOMAIN}",
3 | "clientId": "{CLIENT_ID}"
4 | }
--------------------------------------------------------------------------------
/01-Login/exec.ps1:
--------------------------------------------------------------------------------
1 | docker build --rm -t auth0-vue-01-login .
2 | docker run -p 3000:3000 --pid=host auth0-vue-01-login
--------------------------------------------------------------------------------
/01-Login/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/auth0-samples/auth0-vue-samples/HEAD/01-Login/public/logo.png
--------------------------------------------------------------------------------
/01-Login/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/auth0-samples/auth0-vue-samples/HEAD/01-Login/public/favicon.ico
--------------------------------------------------------------------------------
/02-Calling-an-API/exec.ps1:
--------------------------------------------------------------------------------
1 | docker build --rm -t auth0-vue-02-api .
2 | docker run -p 3000:3000 --pid=host auth0-vue-02-api
--------------------------------------------------------------------------------
/02-Calling-an-API/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/auth0-samples/auth0-vue-samples/HEAD/02-Calling-an-API/public/logo.png
--------------------------------------------------------------------------------
/01-Login/exec.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | docker build -t auth0-vue-01-login .
4 | docker run -p 3000:3000 --init auth0-vue-01-login
--------------------------------------------------------------------------------
/02-Calling-an-API/exec.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | docker build -t auth0-vue-02-api .
4 | docker run -p 3000:3000 --init auth0-vue-02-api
--------------------------------------------------------------------------------
/02-Calling-an-API/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/auth0-samples/auth0-vue-samples/HEAD/02-Calling-an-API/public/favicon.ico
--------------------------------------------------------------------------------
/02-Calling-an-API/auth_config.json.example:
--------------------------------------------------------------------------------
1 | {
2 | "domain": "{DOMAIN}",
3 | "clientId": "{CLIENT_ID}",
4 | "authorizationParams": {
5 | "audience": "{API_IDENTIFIER}"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/01-Login/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [vue()]
7 | })
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log
5 | yarn-error.log
6 | test/unit/coverage
7 | test/e2e/reports
8 | selenium-debug.log
9 | auth0-variables.js
10 | .env
11 | auth_config.json
--------------------------------------------------------------------------------
/01-Login/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | declare module '*.vue' {
3 | import type { DefineComponent } from 'vue';
4 | const component: DefineComponent<{}, {}, any>;
5 | export default component;
6 | }
7 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | declare module '*.vue' {
3 | import type { DefineComponent } from 'vue';
4 | const component: DefineComponent<{}, {}, any>;
5 | export default component;
6 | }
7 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: 🤔 Help & Questions
4 | url: https://community.auth0.com
5 | about: Ask general support or usage questions in the Auth0 Community forums.
6 |
--------------------------------------------------------------------------------
/02-Calling-an-API/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import vue from '@vitejs/plugin-vue'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | server: {
7 | proxy: {
8 | '/api': 'http://localhost:3001',
9 | }
10 | },
11 | plugins: [vue()]
12 | })
--------------------------------------------------------------------------------
/01-Login/web-server.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-console */
2 | const express = require("express");
3 | const { join } = require("path");
4 | const morgan = require("morgan");
5 | const app = express();
6 |
7 | app.use(morgan("dev"));
8 | app.use(express.static(join(__dirname, "dist")));
9 |
10 | app.use((_, res) => {
11 | res.sendFile(join(__dirname, "dist", "index.html"));
12 | });
13 |
14 | app.listen(3000, () => console.log("Listening on port 3000"));
15 |
--------------------------------------------------------------------------------
/01-Login/src/components/Error.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{msg}}
4 |
5 | ×
6 |
7 |
8 |
9 |
10 |
20 |
21 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/components/Error.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{msg}}
4 |
5 | ×
6 |
7 |
8 |
9 |
10 |
20 |
21 |
--------------------------------------------------------------------------------
/01-Login/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
21 |
22 |
27 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | base = "01-Login"
3 | command = """if [ -z "${AUTH0_DOMAIN}" ] || [ -z "${AUTH0_CLIENT_ID}" ]; then
4 | echo "Error: One or both environment variables (AUTH0_DOMAIN, AUTH0_CLIENT_ID) are not set or are empty."
5 | exit 1
6 | fi
7 | printf '{\"domain\":\"%s\", \"clientId\":\"%s\"}' "${AUTH0_DOMAIN}" "${AUTH0_CLIENT_ID}" > auth_config.json
8 | cat auth_config.json
9 | npm install
10 | npm run build
11 | """
12 | publish = "dist"
13 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/views/Home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
21 |
22 |
27 |
--------------------------------------------------------------------------------
/01-Login/src/components/Hero.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Vue.js Sample Project
5 |
6 | This is a sample application that demonstrates an authentication flow for an SPA, using
7 | Vue.js
10 |
11 |
12 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/components/Hero.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Vue.js Sample Project
5 |
6 | This is a sample application that demonstrates an authentication flow for an SPA, using
7 | Vue.js
10 |
11 |
12 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 |
4 | - package-ecosystem: "npm"
5 | directory: "/01-Login"
6 | schedule:
7 | interval: "daily"
8 | ignore:
9 | - dependency-name: "*"
10 | update-types: ["version-update:semver-major", "version-update:semver-patch"]
11 |
12 | - package-ecosystem: "npm"
13 | directory: "/02-Calling-an-API"
14 | schedule:
15 | interval: "daily"
16 | ignore:
17 | - dependency-name: "*"
18 | update-types: ["version-update:semver-major", "version-update:semver-patch"]
19 |
--------------------------------------------------------------------------------
/.github/workflows/semgrep.yml:
--------------------------------------------------------------------------------
1 | name: Semgrep
2 |
3 | on:
4 | pull_request: {}
5 |
6 | push:
7 | branches: ["master", "main"]
8 |
9 | schedule:
10 | - cron: '30 0 1,15 * *'
11 |
12 | jobs:
13 | semgrep:
14 | name: Scan
15 | runs-on: ubuntu-latest
16 | container:
17 | image: returntocorp/semgrep
18 | # Skip any PR created by dependabot to avoid permission issues
19 | if: (github.actor != 'dependabot[bot]')
20 | steps:
21 | - uses: actions/checkout@v3
22 |
23 | - run: semgrep ci
24 | env:
25 | SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
26 |
--------------------------------------------------------------------------------
/01-Login/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16-alpine as build
2 |
3 | RUN apk update && apk upgrade && \
4 | apk add --no-cache bash git openssh
5 |
6 | RUN mkdir /app
7 |
8 | WORKDIR /app
9 |
10 | COPY package.json .
11 |
12 | RUN npm install
13 |
14 | COPY . .
15 |
16 | RUN npm run build
17 |
18 | # ---------------
19 |
20 | FROM node:16-alpine
21 |
22 | RUN mkdir -p /app/dist
23 |
24 | WORKDIR /app
25 |
26 | COPY --from=build /app/dist ./dist
27 | COPY --from=build /app/package.json .
28 | COPY --from=build /app/web-server.js .
29 |
30 | ENV NODE_ENV production
31 |
32 | RUN npm install --production
33 |
34 | EXPOSE 3000
35 |
36 | CMD ["node", "web-server.js"]
37 |
--------------------------------------------------------------------------------
/02-Calling-an-API/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16-alpine as build
2 |
3 | RUN apk update && apk upgrade && \
4 | apk add --no-cache bash git openssh
5 |
6 | RUN mkdir /app
7 |
8 | WORKDIR /app
9 |
10 | COPY package.json .
11 |
12 | RUN npm install
13 |
14 | COPY . .
15 |
16 | RUN npm run build
17 |
18 | # ---------------
19 |
20 | FROM node:16-alpine
21 |
22 | RUN mkdir -p /app/dist
23 |
24 | WORKDIR /app
25 |
26 | COPY --from=build /app/dist ./dist
27 | COPY --from=build /app/package.json .
28 | COPY --from=build /app/auth_config.json .
29 | COPY --from=build /app/web-server.js .
30 |
31 | ENV NODE_ENV production
32 |
33 | RUN npm install --production
34 |
35 | EXPOSE 3000
36 |
37 | CMD ["node", "web-server.js"]
38 |
--------------------------------------------------------------------------------
/01-Login/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter as createVueRouter, createWebHashHistory, Router } from "vue-router";
2 | import Home from "../views/Home.vue";
3 | import Profile from "../views/Profile.vue";
4 | import { createAuthGuard } from "@auth0/auth0-vue";
5 | import { App } from 'vue';
6 |
7 | export function createRouter(app: App): Router {
8 | return createVueRouter({
9 | routes: [
10 | {
11 | path: "/",
12 | name: "home",
13 | component: Home
14 | },
15 | {
16 | path: "/profile",
17 | name: "profile",
18 | component: Profile,
19 | beforeEnter: createAuthGuard(app)
20 | }
21 | ],
22 | history: createWebHashHistory()
23 | })
24 | }
25 |
--------------------------------------------------------------------------------
/01-Login/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 | Sample project provided by
14 | Auth0
15 |
16 |
17 |
18 |
19 |
20 |
31 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 | Sample project provided by
14 | Auth0
15 |
16 |
17 |
18 |
19 |
20 |
31 |
--------------------------------------------------------------------------------
/01-Login/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "01-login",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vite",
7 | "build": "vite build"
8 | },
9 | "dependencies": {
10 | "@auth0/auth0-vue": "^2.3.0",
11 | "@fortawesome/fontawesome-svg-core": "^6.5.0",
12 | "@fortawesome/free-solid-svg-icons": "^6.5.0",
13 | "@fortawesome/vue-fontawesome": "^3.0.1",
14 | "@highlightjs/vue-plugin": "^2.1.0",
15 | "express": "^4.18.1",
16 | "highlight.js": "^11.9.0",
17 | "morgan": "^1.10.0",
18 | "vue": "^3.3.4",
19 | "vue-router": "^4.2.1"
20 | },
21 | "devDependencies": {
22 | "@vitejs/plugin-vue": "^1.6.1",
23 | "@vue/compiler-sfc": "^3.3.4",
24 | "typescript": "^4.9.3",
25 | "vite": "^2.9.16"
26 | },
27 | "prettier": {
28 | "singleQuote": false,
29 | "semi": true
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/01-Login/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "esnext",
5 | "strict": true,
6 | "jsx": "preserve",
7 | "importHelpers": true,
8 | "moduleResolution": "node",
9 | "skipLibCheck": true,
10 | "esModuleInterop": true,
11 | "allowSyntheticDefaultImports": true,
12 | "sourceMap": true,
13 | "baseUrl": ".",
14 | "types": [
15 | "webpack-env"
16 | ],
17 | "paths": {
18 | "@/*": [
19 | "src/*"
20 | ]
21 | },
22 | "lib": [
23 | "esnext",
24 | "dom",
25 | "dom.iterable",
26 | "scripthost"
27 | ],
28 | "resolveJsonModule": true
29 | },
30 | "include": [
31 | "src/**/*.ts",
32 | "src/**/*.tsx",
33 | "src/**/*.vue",
34 | "tests/**/*.ts",
35 | "tests/**/*.tsx"
36 | ],
37 | "exclude": [
38 | "node_modules"
39 | ]
40 | }
--------------------------------------------------------------------------------
/02-Calling-an-API/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "esnext",
5 | "strict": true,
6 | "jsx": "preserve",
7 | "importHelpers": true,
8 | "moduleResolution": "node",
9 | "skipLibCheck": true,
10 | "esModuleInterop": true,
11 | "allowSyntheticDefaultImports": true,
12 | "sourceMap": true,
13 | "baseUrl": ".",
14 | "types": [
15 | "webpack-env"
16 | ],
17 | "paths": {
18 | "@/*": [
19 | "src/*"
20 | ]
21 | },
22 | "lib": [
23 | "esnext",
24 | "dom",
25 | "dom.iterable",
26 | "scripthost"
27 | ],
28 | "resolveJsonModule": true
29 | },
30 | "include": [
31 | "src/**/*.ts",
32 | "src/**/*.tsx",
33 | "src/**/*.vue",
34 | "tests/**/*.ts",
35 | "tests/**/*.tsx"
36 | ],
37 | "exclude": [
38 | "node_modules"
39 | ]
40 | }
--------------------------------------------------------------------------------
/02-Calling-an-API/src/router/index.ts:
--------------------------------------------------------------------------------
1 | import { createRouter as createVueRouter, createWebHashHistory, Router } from "vue-router";
2 | import Home from "../views/Home.vue";
3 | import Profile from "../views/Profile.vue";
4 | import ExternalApi from "../views/ExternalApi.vue";
5 | import { createAuthGuard } from "@auth0/auth0-vue";
6 | import { App } from 'vue';
7 |
8 | export function createRouter(app: App): Router {
9 | return createVueRouter({
10 | routes: [
11 | {
12 | path: "/",
13 | name: "home",
14 | component: Home
15 | },
16 | {
17 | path: "/profile",
18 | name: "profile",
19 | component: Profile,
20 | beforeEnter: createAuthGuard(app)
21 | },
22 | {
23 | path: "/external-api",
24 | name: "external-api",
25 | component: ExternalApi,
26 | beforeEnter: createAuthGuard(app)
27 | }
28 | ],
29 | history: createWebHashHistory()
30 | })
31 | }
32 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/views/Profile.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
36 |
37 |
--------------------------------------------------------------------------------
/01-Login/src/views/Profile.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
37 |
38 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Configuration for probot-stale - https://github.com/probot/stale
2 |
3 | # Number of days of inactivity before an Issue or Pull Request becomes stale
4 | daysUntilStale: 90
5 |
6 | # Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
7 | daysUntilClose: 7
8 |
9 | # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
10 | exemptLabels: []
11 |
12 | # Set to true to ignore issues with an assignee (defaults to false)
13 | exemptAssignees: true
14 |
15 | # Label to use when marking as stale
16 | staleLabel: closed:stale
17 |
18 | # Comment to post when marking as stale. Set to `false` to disable
19 | markComment: >
20 | This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you have not received a response for our team (apologies for the delay) and this is still a blocker, please reply with additional information or just a ping. Thank you for your contribution! 🙇♂️
--------------------------------------------------------------------------------
/02-Calling-an-API/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "02-calling-an-api",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vite",
7 | "build": "vite build",
8 | "serve:backend": "node web-server.js",
9 | "serve:client": "vite"
10 | },
11 | "dependencies": {
12 | "@auth0/auth0-vue": "^2.3.0",
13 | "@fortawesome/fontawesome-svg-core": "^6.5.0",
14 | "@fortawesome/free-solid-svg-icons": "^6.5.0",
15 | "@fortawesome/vue-fontawesome": "^3.0.1",
16 | "@highlightjs/vue-plugin": "^2.1.1",
17 | "cors": "^2.8.5",
18 | "express": "^4.18.2",
19 | "express-oauth2-jwt-bearer": "^1.6.0",
20 | "helmet": "^6.2.0",
21 | "highlight.js": "^11.9.0",
22 | "morgan": "^1.10.0",
23 | "vue": "^3.3.4",
24 | "vue-router": "^4.2.1"
25 | },
26 | "devDependencies": {
27 | "@vitejs/plugin-vue": "^1.6.1",
28 | "@vue/compiler-sfc": "^3.3.4",
29 | "npm-run-all": "^4.1.5",
30 | "typescript": "^4.9.3",
31 | "vite": "^2.9.16"
32 | },
33 | "prettier": {
34 | "singleQuote": false,
35 | "semi": true
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2017 Auth0 Samples
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/01-Login/src/main.ts:
--------------------------------------------------------------------------------
1 | import App from "./App.vue";
2 | import { createApp } from "vue";
3 | import { createRouter } from "./router";
4 | import { createAuth0 } from "@auth0/auth0-vue";
5 | import { library } from "@fortawesome/fontawesome-svg-core";
6 | import { faLink, faUser, faPowerOff } from "@fortawesome/free-solid-svg-icons";
7 | import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
8 | import authConfig from "../auth_config.json";
9 | import hljs from 'highlight.js/lib/core';
10 | import json from 'highlight.js/lib/languages/json';
11 | import hljsVuePlugin from "@highlightjs/vue-plugin";
12 | import "highlight.js/styles/github.css";
13 |
14 | hljs.registerLanguage('json', json);
15 |
16 | const app = createApp(App);
17 |
18 | library.add(faLink, faUser, faPowerOff);
19 |
20 | app
21 | .use(hljsVuePlugin)
22 | .use(createRouter(app))
23 | .use(
24 | createAuth0({
25 | domain: authConfig.domain,
26 | clientId: authConfig.clientId,
27 | authorizationParams: {
28 | redirect_uri: window.location.origin,
29 | }
30 | })
31 | )
32 | .component("font-awesome-icon", FontAwesomeIcon)
33 | .mount("#app");
34 |
--------------------------------------------------------------------------------
/02-Calling-an-API/web-server.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const morgan = require("morgan");
3 | const cors = require("cors");
4 | const { auth } = require("express-oauth2-jwt-bearer");
5 | const { join } = require("path");
6 | const authConfig = require("./auth_config.json");
7 |
8 | const app = express();
9 |
10 | if (!authConfig.domain || !authConfig.authorizationParams.audience) {
11 | throw "Please make sure that auth_config.json is in place and populated";
12 | }
13 |
14 | app.use(morgan("dev"));
15 | app.use(cors());
16 | app.use(express.static(join(__dirname, "dist")));
17 |
18 | const checkJwt = auth({
19 | audience: authConfig.authorizationParams.audience,
20 | issuerBaseURL: `https://${authConfig.domain}`,
21 | });
22 |
23 | app.get("/api/external", checkJwt, (req, res) => {
24 | res.send({
25 | msg: "Your access token was successfully validated!"
26 | });
27 | });
28 |
29 | if (process.env.NODE_ENV === "production") {
30 | app.use((_, res) => {
31 | res.sendFile(join(__dirname, "dist", "index.html"));
32 | });
33 | }
34 | const port = process.env.NODE_ENV === "production" ? 3000 : 3001;
35 | app.listen(port, () => console.log(`Server listening on port ${port}`));
--------------------------------------------------------------------------------
/02-Calling-an-API/src/main.ts:
--------------------------------------------------------------------------------
1 | import App from "./App.vue";
2 | import { createApp } from "vue";
3 | import { createRouter } from "./router";
4 | import { createAuth0 } from "@auth0/auth0-vue";
5 | import { library } from "@fortawesome/fontawesome-svg-core";
6 | import { faLink, faUser, faPowerOff } from "@fortawesome/free-solid-svg-icons";
7 | import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
8 | import authConfig from "../auth_config.json";
9 | import hljs from 'highlight.js/lib/core';
10 | import json from 'highlight.js/lib/languages/json';
11 | import hljsVuePlugin from "@highlightjs/vue-plugin";
12 | import "highlight.js/styles/github.css";
13 |
14 | hljs.registerLanguage('json', json);
15 |
16 | const app = createApp(App);
17 |
18 | library.add(faLink, faUser, faPowerOff);
19 |
20 | app
21 | .use(hljsVuePlugin)
22 | .use(createRouter(app))
23 | .use(
24 | createAuth0({
25 | domain: authConfig.domain,
26 | clientId: authConfig.clientId,
27 | authorizationParams: {
28 | redirect_uri: window.location.origin,
29 | audience: authConfig.authorizationParams.audience,
30 | }
31 | })
32 | )
33 | .component("font-awesome-icon", FontAwesomeIcon)
34 | .mount("#app");
35 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/views/ExternalApi.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
External API
5 |
6 | Call an external API by clicking the button below. This will call the
7 | external API using an access token, and the API will validate it using
8 | the API's audience value.
9 |
10 |
11 |
Call API
12 |
13 |
14 |
15 |
16 |
Result
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/01-Login/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 01-login
9 |
10 |
16 |
20 |
21 |
22 |
23 | We're sorry but 01-login doesn't work properly without JavaScript
25 | enabled. Please enable it to continue.
27 |
28 |
29 |
30 |
35 |
40 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/02-Calling-an-API/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 02 - Calling an API
9 |
10 |
16 |
20 |
21 |
22 |
23 | We're sorry but 02 - Calling an API doesn't work properly without JavaScript
25 | enabled. Please enable it to continue.
27 |
28 |
29 |
30 |
31 |
36 |
41 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/01-Login/loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/02-Calling-an-API/loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/01-Login/src/assets/loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Feature Request.yml:
--------------------------------------------------------------------------------
1 | name: 🧩 Feature request
2 | description: Suggest an idea or a feature for this sample
3 | labels: ["feature request"]
4 |
5 | body:
6 | - type: checkboxes
7 | id: checklist
8 | attributes:
9 | label: Checklist
10 | options:
11 | - label: I have looked into the Readme ([Login](https://github.com/auth0-samples/auth0-vue-samples/tree/master/01-Login#readme)/[Calling an API](https://github.com/auth0-samples/auth0-vue-samples/tree/master/02-Calling-an-API#readme)) and have not found a suitable solution or answer.
12 | required: true
13 | - label: I have searched the [issues](https://github.com/auth0-samples/auth0-vue-samples/issues) and have not found a suitable solution or answer.
14 | required: true
15 | - label: I have searched the [Auth0 Community](https://community.auth0.com) forums and have not found a suitable solution or answer.
16 | required: true
17 | - label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md).
18 | required: true
19 |
20 | - type: textarea
21 | id: description
22 | attributes:
23 | label: Describe the problem you'd like to have solved
24 | description: A clear and concise description of what the problem is.
25 | validations:
26 | required: true
27 |
28 | - type: textarea
29 | id: ideal-solution
30 | attributes:
31 | label: Describe the ideal solution
32 | description: A clear and concise description of what you want to happen.
33 | validations:
34 | required: true
35 |
36 | - type: textarea
37 | id: alternatives-and-workarounds
38 | attributes:
39 | label: Alternatives and current workarounds
40 | description: A clear and concise description of any alternatives you've considered or any workarounds that are currently in place.
41 | validations:
42 | required: false
43 |
44 | - type: textarea
45 | id: additional-context
46 | attributes:
47 | label: Additional context
48 | description: Add any other context or screenshots about the feature request here.
49 | validations:
50 | required: false
51 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/assets/loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/01-Login/src/components/HomeContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
What can I do next?
4 |
5 |
6 |
7 |
12 |
Auth0 supports social providers as Facebook, Twitter, Instagram and 100+, Enterprise providers as Microsoft Office 365, Google Apps, Azure, and more. You can also use any OAuth2 Authorization Server.
13 |
14 |
15 |
16 |
17 |
18 |
23 |
Add an extra layer of security by enabling Multi-factor Authentication, requiring your users to provide more than one piece of identifying information. Push notifications, authenticator apps, SMS, and DUO Security are supported.
24 |
25 |
26 |
27 |
28 |
29 |
34 |
Auth0 can detect anomalies and stop malicious attempts to access your application. Anomaly detection can alert you and your users of suspicious activity, as well as block further login attempts.
35 |
36 |
37 |
38 |
39 |
40 |
45 |
Rules are JavaScript functions that execute when a user authenticates to your application. They run once the authentication process is complete, and you can use them to customize and extend Auth0's capabilities.
46 |
47 |
48 |
49 |
50 |
51 |
56 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/components/HomeContent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
What can I do next?
4 |
5 |
6 |
7 |
12 |
Auth0 supports social providers as Facebook, Twitter, Instagram and 100+, Enterprise providers as Microsoft Office 365, Google Apps, Azure, and more. You can also use any OAuth2 Authorization Server.
13 |
14 |
15 |
16 |
17 |
18 |
23 |
Add an extra layer of security by enabling Multi-factor Authentication, requiring your users to provide more than one piece of identifying information. Push notifications, authenticator apps, SMS, and DUO Security are supported.
24 |
25 |
26 |
27 |
28 |
29 |
34 |
Auth0 can detect anomalies and stop malicious attempts to access your application. Anomaly detection can alert you and your users of suspicious activity, as well as block further login attempts.
35 |
36 |
37 |
38 |
39 |
40 |
45 |
Rules are JavaScript functions that execute when a user authenticates to your application. They run once the authentication process is complete, and you can use them to customize and extend Auth0's capabilities.
46 |
47 |
48 |
49 |
50 |
51 |
56 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Auth0 Vue.js Samples
2 |
3 | [](https://circleci.com/gh/auth0-samples/auth0-vue-samples)
4 |
5 | This is the sample code for the [Auth0 Vue.js Quickstart](https://auth0.com/docs/quickstart/spa/vuejs) using [@auth0/auth0-vue](https://github.com/auth0/auth0-vue).
6 |
7 | There are two sample applications:
8 |
9 | - [01 - Login](./01-Login) — demonstrates logging in and viewing profile information
10 | - [02 - Calling an API](./02-Calling-an-API) — demonstrates how to call a third-party API using access tokens
11 |
12 | ## What is Auth0?
13 |
14 | Auth0 helps you to:
15 |
16 | - Add authentication with [multiple authentication sources](https://auth0.com/docs/connections), either social like **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce, among others**, or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS or any SAML Identity Provider**.
17 | - Add authentication through more traditional **[username/password databases](https://auth0.com/docs/connections/database)**.
18 | - Add support for **[linking different user accounts](https://auth0.com/docs/users/user-account-linking)** with the same user.
19 | - Support for generating signed [Json Web Tokens](https://auth0.com/docs/security/tokens/json-web-tokens) to call your APIs and **flow the user identity** securely.
20 | - Analytics of how, when and where users are logging in.
21 | - Pull data from other sources and add it to the user profile, through [JavaScript rules](https://auth0.com/docs/rules).
22 |
23 | ## Create a Free Auth0 Account
24 |
25 | 1. Go to [Auth0](https://auth0.com/signup) and click Sign Up.
26 | 2. Use Google, GitHub or Microsoft Account to login.
27 |
28 | ## Issue Reporting
29 |
30 | If you have found a bug or if you have a feature request, please report them at this repository issues section. Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues.
31 |
32 | ## Author
33 |
34 | [Auth0](https://auth0.com)
35 |
36 | ## Deploy to Netlify
37 | You can deploy this example as a site on your own to explore and experiment with, by clicking this button.
38 | After deploy, install Auth0 by Okta extension in Netlify and follow the steps to create an App.
39 |
40 |
41 |
42 | ## License
43 |
44 | This project is licensed under the MIT license. See the [LICENSE](./LICENSE) file for more info.
45 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/Bug Report.yml:
--------------------------------------------------------------------------------
1 | name: 🐞 Report a bug
2 | description: Have you found a bug or issue? Create a bug report for this sample
3 |
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: |
8 | **Please do not report security vulnerabilities here**. The [Responsible Disclosure Program](https://auth0.com/responsible-disclosure-policy) details the procedure for disclosing security issues.
9 |
10 | - type: checkboxes
11 | id: checklist
12 | attributes:
13 | label: Checklist
14 | options:
15 | - label: I have looked into the Readme ([Login](https://github.com/auth0-samples/auth0-vue-samples/tree/master/01-Login#readme)/[Calling an API](https://github.com/auth0-samples/auth0-vue-samples/tree/master/02-Calling-an-API#readme)) and have not found a suitable solution or answer.
16 | required: true
17 | - label: I have searched the [issues](https://github.com/auth0-samples/auth0-vue-samples/issues) and have not found a suitable solution or answer.
18 | required: true
19 | - label: I have searched the [Auth0 Community](https://community.auth0.com) forums and have not found a suitable solution or answer.
20 | required: true
21 | - label: I agree to the terms within the [Auth0 Code of Conduct](https://github.com/auth0/open-source-template/blob/master/CODE-OF-CONDUCT.md).
22 | required: true
23 |
24 | - type: textarea
25 | id: description
26 | attributes:
27 | label: Description
28 | description: Provide a clear and concise description of the issue, including what you expected to happen.
29 | validations:
30 | required: true
31 |
32 | - type: textarea
33 | id: reproduction
34 | attributes:
35 | label: Reproduction
36 | description: Detail the steps taken to reproduce this error, and whether this issue can be reproduced consistently or if it is intermittent.
37 | placeholder: |
38 | 1. Step 1...
39 | 2. Step 2...
40 | 3. ...
41 | validations:
42 | required: true
43 |
44 | - type: textarea
45 | id: additional-context
46 | attributes:
47 | label: Additional context
48 | description: Any other relevant information you think would be useful.
49 | validations:
50 | required: false
51 |
52 | - type: dropdown
53 | id: environment-sample
54 | attributes:
55 | label: Sample
56 | multiple: false
57 | options:
58 | - Login
59 | - Calling an API
60 | validations:
61 | required: true
62 |
63 | - type: dropdown
64 | id: environment-browser
65 | attributes:
66 | label: Which browsers have you tested in?
67 | multiple: true
68 | options:
69 | - Chrome
70 | - Edge
71 | - Safari
72 | - Firefox
73 | - Opera
74 | - Other
75 | validations:
76 | required: true
77 |
--------------------------------------------------------------------------------
/01-Login/README.md:
--------------------------------------------------------------------------------
1 | # Scenario #1 - Logging In and Gated Content
2 |
3 | This sample demonstrates:
4 |
5 | - Logging in to Auth0 using Redirect Mode
6 | - Accessing profile information that has been provided in the ID token
7 | - Gated content. The `/profile` route is not accessible without having first logged in
8 |
9 | ## Project setup
10 |
11 | ```bash
12 | npm install
13 | ```
14 |
15 | ### Configuration
16 |
17 | The project needs to be configured with your Auth0 domain and client ID in order for the authentication flow to work.
18 |
19 | To do this, first copy `auth_config.json.example` into a new file in the same folder called `auth_config.json`, and replace the values within with your own Auth0 application credentials:
20 |
21 | ```json
22 | {
23 | "domain": "",
24 | "clientId": ""
25 | }
26 | ```
27 |
28 | ### Compiles and hot-reloads for development
29 |
30 | ```bash
31 | npm run serve
32 | ```
33 |
34 | ## Deployment
35 |
36 | ### Compiles and minifies for production
37 |
38 | ```bash
39 | npm run build
40 | ```
41 |
42 | ### Docker build
43 |
44 | To build and run the Docker image, run `exec.sh`, or `exec.ps1` on Windows.
45 |
46 | ### Lints and fixes files
47 |
48 | ```bash
49 | npm run lint
50 | ```
51 |
52 | ## What is Auth0?
53 |
54 | Auth0 helps you to:
55 |
56 | - Add authentication with [multiple authentication sources](https://docs.auth0.com/identityproviders), either social like **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce, among others**, or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS or any SAML Identity Provider**.
57 | - Add authentication through more traditional **[username/password databases](https://docs.auth0.com/mysql-connection-tutorial)**.
58 | - Add support for **[linking different user accounts](https://docs.auth0.com/link-accounts)** with the same user.
59 | - Support for generating signed [Json Web Tokens](https://docs.auth0.com/jwt) to call your APIs and **flow the user identity** securely.
60 | - Analytics of how, when and where users are logging in.
61 | - Pull data from other sources and add it to the user profile, through [JavaScript rules](https://docs.auth0.com/rules).
62 |
63 | ## Create a Free Auth0 Account
64 |
65 | 1. Go to [Auth0](https://auth0.com/signup) and click Sign Up.
66 | 2. Use Google, GitHub or Microsoft Account to login.
67 |
68 | ## Issue Reporting
69 |
70 | If you have found a bug or if you have a feature request, please report them at this repository issues section. Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues.
71 |
72 | ## Author
73 |
74 | [Auth0](https://auth0.com)
75 |
76 | ## License
77 |
78 | This project is licensed under the MIT license. See the [LICENSE](../LICENSE) file for more info.
79 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # Environment variables to be defined in the build configuration:
2 | # AUTH0_TEST_CLIENT_ID = Client id to use in test
3 | # AUTH0_TEST_DOMAIN = Domain to use in test
4 | # AUTH0_TEST_AUDIENCE = API Audience to use in test
5 |
6 | # Common logic
7 | defaults: &defaults
8 | steps:
9 | - attach_workspace:
10 | at: ~/
11 | - run:
12 | name: Replace Auth0 test credentials
13 | command: |
14 | echo "{ \"domain\": \"$AUTH0_TEST_DOMAIN\", \"clientId\": \"$AUTH0_TEST_CLIENT_ID\", \"authorizationParams\": { \"audience\": \"$AUTH0_TEST_AUDIENCE\" } }" > $AUTH0_CFG
15 |
16 | - run:
17 | name: Build pull request
18 | command: |
19 | docker build -t $CIRCLE_JOB ./$SAMPLE_PATH
20 | docker run -d -p 3000:3000 --name $CIRCLE_SHA1 $CIRCLE_JOB
21 | - run:
22 | name: Wait for app to be available
23 | command: |
24 | sleep 10
25 | docker run --network host --rm appropriate/curl --retry 8 --retry-connrefused -v localhost:3000
26 | - run:
27 | name: Run tests
28 | command: |
29 | docker create --network host --name tester codeceptjs/codeceptjs codeceptjs run-multiple --all --steps --verbose
30 | docker cp $(pwd)/lock_login_spa_test.js tester:/tests/lock_login_test.js
31 | docker cp $(pwd)/codecept.conf.js tester:/tests/codecept.conf.js
32 | docker start -i tester
33 | working_directory: scripts
34 | - run:
35 | name: Copy app container logs
36 | command: |
37 | mkdir -p /tmp/out
38 | docker logs $CIRCLE_SHA1 > /tmp/out/app_logs.log
39 | docker cp tester:/tests/out /tmp/
40 | when: on_fail
41 | - store_artifacts:
42 | path: /tmp/out
43 |
44 | # Jobs and Workflows
45 | version: 2.1
46 | parameters:
47 | machine_image:
48 | type: string
49 | default: ubuntu-2004:202201-02
50 | jobs:
51 | checkout:
52 | machine:
53 | image: << pipeline.parameters.machine_image >>
54 | steps:
55 | - checkout
56 | - run: git clone https://github.com/auth0-samples/spa-quickstarts-tests scripts
57 | - persist_to_workspace:
58 | root: ~/
59 | paths:
60 | - project
61 | - scripts
62 | login:
63 | machine:
64 | image: << pipeline.parameters.machine_image >>
65 | environment:
66 | - AUTH0_CFG: 01-Login/auth_config.json
67 | - SAMPLE_PATH: 01-Login
68 | <<: *defaults
69 |
70 | api:
71 | machine:
72 | image: << pipeline.parameters.machine_image >>
73 | environment:
74 | - AUTH0_CFG: 02-Calling-an-API/auth_config.json
75 | - SAMPLE_PATH: 02-Calling-an-API
76 | <<: *defaults
77 |
78 | workflows:
79 | version: 2
80 | quickstarts_login:
81 | jobs:
82 | - checkout:
83 | context: Quickstart SPA Test
84 | - login:
85 | context: Quickstart SPA Test
86 | requires:
87 | - checkout
88 |
89 | - api:
90 | context: Quickstart SPA Test
91 | requires:
92 | - checkout
93 |
--------------------------------------------------------------------------------
/02-Calling-an-API/README.md:
--------------------------------------------------------------------------------
1 | # Scenario #2 - Calling an External API
2 |
3 | For this scenario, an API endpoint `/api/external` has been included in the Express server that requires a bearer token to be supplied as a bearer token in the `Authorization` header (as provided during the authentication flow). This uses the [`express-oauth2-jwt-bearer`](https://github.com/auth0/node-oauth2-jwt-bearer) middleware to validate the token against the identifier of your API as set up in the Auth0 dashboard, as well as checking that the signature is valid.
4 |
5 | ## Project setup
6 |
7 | ```bash
8 | npm install
9 | ```
10 |
11 | ### Configuration
12 |
13 | The project needs to be configured with your Auth0 domain and client ID in order for the authentication flow to work. When calling an external API, ensure to also set the `audience` to the value of your Auth0 API identifier.
14 |
15 | To do this, first copy `auth_config.sample.json` into a new file in the same folder called `auth_config.json`, and replace the values within with your own Auth0 application credentials:
16 |
17 | ```json
18 | {
19 | "domain": "",
20 | "clientId": "",
21 | "audience": ""
22 | }
23 | ```
24 |
25 | ### Running in development
26 |
27 | This compiles and serves the Vue app, and starts the backend API server on port 3001:
28 |
29 | ```bash
30 | npm run serve
31 | ```
32 |
33 | ## Deployment
34 |
35 | ### Compiles and minifies for production
36 |
37 | ```bash
38 | npm run build
39 | ```
40 |
41 | ### Docker build
42 |
43 | To build the Docker image run `exec.sh`, or `exec.ps1` on Windows.
44 |
45 | ### Lints and fixes files
46 |
47 | ```bash
48 | npm run lint
49 | ```
50 |
51 | ## What is Auth0?
52 |
53 | Auth0 helps you to:
54 |
55 | - Add authentication with [multiple authentication sources](https://docs.auth0.com/identityproviders), either social like **Google, Facebook, Microsoft Account, LinkedIn, GitHub, Twitter, Box, Salesforce, among others**, or enterprise identity systems like **Windows Azure AD, Google Apps, Active Directory, ADFS or any SAML Identity Provider**.
56 | - Add authentication through more traditional **[username/password databases](https://docs.auth0.com/mysql-connection-tutorial)**.
57 | - Add support for **[linking different user accounts](https://docs.auth0.com/link-accounts)** with the same user.
58 | - Support for generating signed [Json Web Tokens](https://docs.auth0.com/jwt) to call your APIs and **flow the user identity** securely.
59 | - Analytics of how, when and where users are logging in.
60 | - Pull data from other sources and add it to the user profile, through [JavaScript rules](https://docs.auth0.com/rules).
61 |
62 | ## Create a Free Auth0 Account
63 |
64 | 1. Go to [Auth0](https://auth0.com/signup) and click Sign Up.
65 | 2. Use Google, GitHub or Microsoft Account to login.
66 |
67 | ## Issue Reporting
68 |
69 | If you have found a bug or if you have a feature request, please report them at this repository issues section. Please do not report security vulnerabilities on the public GitHub issue tracker. The [Responsible Disclosure Program](https://auth0.com/whitehat) details the procedure for disclosing security issues.
70 |
71 | ## Author
72 |
73 | [Auth0](https://auth0.com)
74 |
75 | ## License
76 |
77 | This project is licensed under the MIT license. See the [LICENSE](../LICENSE) file for more info.
--------------------------------------------------------------------------------
/01-Login/src/components/NavBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
26 | Login
31 |
32 |
33 |
34 |
40 |
46 |
47 |
56 |
57 |
58 |
59 |
62 |
63 |
68 |
69 |
70 |
76 | {{ user.name }}
77 |
78 |
79 |
80 |
81 | Profile
82 |
83 |
84 |
85 |
86 | Log out
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
121 |
122 |
128 |
--------------------------------------------------------------------------------
/02-Calling-an-API/src/components/NavBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | Home
22 |
23 |
24 |
25 | External API
26 |
27 |
28 |
29 |
30 | Login
35 |
36 |
37 |
38 |
44 |
50 |
51 |
60 |
61 |
62 |
63 |
66 |
67 |
72 |
73 |
74 |
80 | {{ user.name }}
81 |
82 |
83 |
84 |
85 | Profile
86 |
87 |
88 |
89 |
90 | Log out
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
125 |
126 |
132 |
--------------------------------------------------------------------------------
/01-Login/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "01-login",
3 | "version": "0.1.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "01-login",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "@auth0/auth0-vue": "^2.3.0",
12 | "@fortawesome/fontawesome-svg-core": "^6.5.0",
13 | "@fortawesome/free-solid-svg-icons": "^6.5.0",
14 | "@fortawesome/vue-fontawesome": "^3.0.1",
15 | "@highlightjs/vue-plugin": "^2.1.0",
16 | "express": "^4.18.1",
17 | "highlight.js": "^11.9.0",
18 | "morgan": "^1.10.0",
19 | "vue": "^3.3.4",
20 | "vue-router": "^4.2.1"
21 | },
22 | "devDependencies": {
23 | "@vitejs/plugin-vue": "^1.6.1",
24 | "@vue/compiler-sfc": "^3.3.4",
25 | "typescript": "^4.9.3",
26 | "vite": "^2.9.16"
27 | }
28 | },
29 | "node_modules/@auth0/auth0-spa-js": {
30 | "version": "2.1.1",
31 | "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-2.1.1.tgz",
32 | "integrity": "sha512-21qEf5Bjouy76CWd1gQgf/tT6iD513YFYaK0+3OF1nbwLtPFpxm5Ln94M7SCVFKfe5jbchWuEcIb1HLer3r6RA=="
33 | },
34 | "node_modules/@auth0/auth0-vue": {
35 | "version": "2.3.0",
36 | "resolved": "https://registry.npmjs.org/@auth0/auth0-vue/-/auth0-vue-2.3.0.tgz",
37 | "integrity": "sha512-qg+Cmoem/MOpXfR4cdBdvvqukzzjh3mIO7hcBlmjJdjORiSKvHhCmgO4FVx0IVeFPpI4RLGvD1uR7DWT31h1bg==",
38 | "dependencies": {
39 | "@auth0/auth0-spa-js": "^2.1.1",
40 | "vue": "^3.2.41"
41 | },
42 | "peerDependencies": {
43 | "vue-router": "^4.0.12"
44 | },
45 | "peerDependenciesMeta": {
46 | "vue-router": {
47 | "optional": true
48 | }
49 | }
50 | },
51 | "node_modules/@babel/parser": {
52 | "version": "7.21.9",
53 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz",
54 | "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==",
55 | "bin": {
56 | "parser": "bin/babel-parser.js"
57 | },
58 | "engines": {
59 | "node": ">=6.0.0"
60 | }
61 | },
62 | "node_modules/@esbuild/linux-loong64": {
63 | "version": "0.14.54",
64 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
65 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
66 | "cpu": [
67 | "loong64"
68 | ],
69 | "dev": true,
70 | "optional": true,
71 | "os": [
72 | "linux"
73 | ],
74 | "engines": {
75 | "node": ">=12"
76 | }
77 | },
78 | "node_modules/@fortawesome/fontawesome-common-types": {
79 | "version": "6.5.0",
80 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.0.tgz",
81 | "integrity": "sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog==",
82 | "hasInstallScript": true,
83 | "engines": {
84 | "node": ">=6"
85 | }
86 | },
87 | "node_modules/@fortawesome/fontawesome-svg-core": {
88 | "version": "6.5.0",
89 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.0.tgz",
90 | "integrity": "sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA==",
91 | "hasInstallScript": true,
92 | "dependencies": {
93 | "@fortawesome/fontawesome-common-types": "6.5.0"
94 | },
95 | "engines": {
96 | "node": ">=6"
97 | }
98 | },
99 | "node_modules/@fortawesome/free-solid-svg-icons": {
100 | "version": "6.5.0",
101 | "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.0.tgz",
102 | "integrity": "sha512-6ZPq8mme67Q7O9Fbp2O+Z7mPZbcWTsRv555JLftLaTodiV0Wq+99YgMhyQ8O6mgNQfComqS9OEvqs7M8ySA92g==",
103 | "hasInstallScript": true,
104 | "dependencies": {
105 | "@fortawesome/fontawesome-common-types": "6.5.0"
106 | },
107 | "engines": {
108 | "node": ">=6"
109 | }
110 | },
111 | "node_modules/@fortawesome/vue-fontawesome": {
112 | "version": "3.0.2",
113 | "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz",
114 | "integrity": "sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==",
115 | "peerDependencies": {
116 | "@fortawesome/fontawesome-svg-core": "~1 || ~6",
117 | "vue": ">= 3.0.0 < 4"
118 | }
119 | },
120 | "node_modules/@highlightjs/vue-plugin": {
121 | "version": "2.1.0",
122 | "resolved": "https://registry.npmjs.org/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz",
123 | "integrity": "sha512-E+bmk4ncca+hBEYRV2a+1aIzIV0VSY/e5ArjpuSN9IO7wBJrzUE2u4ESCwrbQD7sAy+jWQjkV5qCCWgc+pu7CQ==",
124 | "peerDependencies": {
125 | "highlight.js": "^11.0.1",
126 | "vue": "^3"
127 | }
128 | },
129 | "node_modules/@jridgewell/sourcemap-codec": {
130 | "version": "1.4.15",
131 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
132 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
133 | },
134 | "node_modules/@vitejs/plugin-vue": {
135 | "version": "1.10.2",
136 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz",
137 | "integrity": "sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==",
138 | "dev": true,
139 | "engines": {
140 | "node": ">=12.0.0"
141 | },
142 | "peerDependencies": {
143 | "vite": "^2.5.10"
144 | }
145 | },
146 | "node_modules/@vue/compiler-core": {
147 | "version": "3.3.4",
148 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
149 | "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
150 | "dependencies": {
151 | "@babel/parser": "^7.21.3",
152 | "@vue/shared": "3.3.4",
153 | "estree-walker": "^2.0.2",
154 | "source-map-js": "^1.0.2"
155 | }
156 | },
157 | "node_modules/@vue/compiler-dom": {
158 | "version": "3.3.4",
159 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
160 | "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
161 | "dependencies": {
162 | "@vue/compiler-core": "3.3.4",
163 | "@vue/shared": "3.3.4"
164 | }
165 | },
166 | "node_modules/@vue/compiler-sfc": {
167 | "version": "3.3.4",
168 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
169 | "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
170 | "dependencies": {
171 | "@babel/parser": "^7.20.15",
172 | "@vue/compiler-core": "3.3.4",
173 | "@vue/compiler-dom": "3.3.4",
174 | "@vue/compiler-ssr": "3.3.4",
175 | "@vue/reactivity-transform": "3.3.4",
176 | "@vue/shared": "3.3.4",
177 | "estree-walker": "^2.0.2",
178 | "magic-string": "^0.30.0",
179 | "postcss": "^8.1.10",
180 | "source-map-js": "^1.0.2"
181 | }
182 | },
183 | "node_modules/@vue/compiler-ssr": {
184 | "version": "3.3.4",
185 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
186 | "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
187 | "dependencies": {
188 | "@vue/compiler-dom": "3.3.4",
189 | "@vue/shared": "3.3.4"
190 | }
191 | },
192 | "node_modules/@vue/devtools-api": {
193 | "version": "6.5.0",
194 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
195 | "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
196 | },
197 | "node_modules/@vue/reactivity": {
198 | "version": "3.3.4",
199 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
200 | "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
201 | "dependencies": {
202 | "@vue/shared": "3.3.4"
203 | }
204 | },
205 | "node_modules/@vue/reactivity-transform": {
206 | "version": "3.3.4",
207 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
208 | "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
209 | "dependencies": {
210 | "@babel/parser": "^7.20.15",
211 | "@vue/compiler-core": "3.3.4",
212 | "@vue/shared": "3.3.4",
213 | "estree-walker": "^2.0.2",
214 | "magic-string": "^0.30.0"
215 | }
216 | },
217 | "node_modules/@vue/runtime-core": {
218 | "version": "3.3.4",
219 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
220 | "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
221 | "dependencies": {
222 | "@vue/reactivity": "3.3.4",
223 | "@vue/shared": "3.3.4"
224 | }
225 | },
226 | "node_modules/@vue/runtime-dom": {
227 | "version": "3.3.4",
228 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
229 | "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
230 | "dependencies": {
231 | "@vue/runtime-core": "3.3.4",
232 | "@vue/shared": "3.3.4",
233 | "csstype": "^3.1.1"
234 | }
235 | },
236 | "node_modules/@vue/server-renderer": {
237 | "version": "3.3.4",
238 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
239 | "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
240 | "dependencies": {
241 | "@vue/compiler-ssr": "3.3.4",
242 | "@vue/shared": "3.3.4"
243 | },
244 | "peerDependencies": {
245 | "vue": "3.3.4"
246 | }
247 | },
248 | "node_modules/@vue/shared": {
249 | "version": "3.3.4",
250 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
251 | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
252 | },
253 | "node_modules/accepts": {
254 | "version": "1.3.8",
255 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
256 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
257 | "dependencies": {
258 | "mime-types": "~2.1.34",
259 | "negotiator": "0.6.3"
260 | },
261 | "engines": {
262 | "node": ">= 0.6"
263 | }
264 | },
265 | "node_modules/array-flatten": {
266 | "version": "1.1.1",
267 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
268 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
269 | },
270 | "node_modules/basic-auth": {
271 | "version": "2.0.1",
272 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
273 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
274 | "dependencies": {
275 | "safe-buffer": "5.1.2"
276 | },
277 | "engines": {
278 | "node": ">= 0.8"
279 | }
280 | },
281 | "node_modules/basic-auth/node_modules/safe-buffer": {
282 | "version": "5.1.2",
283 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
284 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
285 | },
286 | "node_modules/body-parser": {
287 | "version": "1.20.1",
288 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
289 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
290 | "dependencies": {
291 | "bytes": "3.1.2",
292 | "content-type": "~1.0.4",
293 | "debug": "2.6.9",
294 | "depd": "2.0.0",
295 | "destroy": "1.2.0",
296 | "http-errors": "2.0.0",
297 | "iconv-lite": "0.4.24",
298 | "on-finished": "2.4.1",
299 | "qs": "6.11.0",
300 | "raw-body": "2.5.1",
301 | "type-is": "~1.6.18",
302 | "unpipe": "1.0.0"
303 | },
304 | "engines": {
305 | "node": ">= 0.8",
306 | "npm": "1.2.8000 || >= 1.4.16"
307 | }
308 | },
309 | "node_modules/bytes": {
310 | "version": "3.1.2",
311 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
312 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
313 | "engines": {
314 | "node": ">= 0.8"
315 | }
316 | },
317 | "node_modules/call-bind": {
318 | "version": "1.0.2",
319 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
320 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
321 | "dependencies": {
322 | "function-bind": "^1.1.1",
323 | "get-intrinsic": "^1.0.2"
324 | },
325 | "funding": {
326 | "url": "https://github.com/sponsors/ljharb"
327 | }
328 | },
329 | "node_modules/content-disposition": {
330 | "version": "0.5.4",
331 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
332 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
333 | "dependencies": {
334 | "safe-buffer": "5.2.1"
335 | },
336 | "engines": {
337 | "node": ">= 0.6"
338 | }
339 | },
340 | "node_modules/content-type": {
341 | "version": "1.0.4",
342 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
343 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
344 | "engines": {
345 | "node": ">= 0.6"
346 | }
347 | },
348 | "node_modules/cookie": {
349 | "version": "0.5.0",
350 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
351 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
352 | "engines": {
353 | "node": ">= 0.6"
354 | }
355 | },
356 | "node_modules/cookie-signature": {
357 | "version": "1.0.6",
358 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
359 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
360 | },
361 | "node_modules/csstype": {
362 | "version": "3.1.2",
363 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
364 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
365 | },
366 | "node_modules/debug": {
367 | "version": "2.6.9",
368 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
369 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
370 | "dependencies": {
371 | "ms": "2.0.0"
372 | }
373 | },
374 | "node_modules/depd": {
375 | "version": "2.0.0",
376 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
377 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
378 | "engines": {
379 | "node": ">= 0.8"
380 | }
381 | },
382 | "node_modules/destroy": {
383 | "version": "1.2.0",
384 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
385 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
386 | "engines": {
387 | "node": ">= 0.8",
388 | "npm": "1.2.8000 || >= 1.4.16"
389 | }
390 | },
391 | "node_modules/ee-first": {
392 | "version": "1.1.1",
393 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
394 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
395 | },
396 | "node_modules/encodeurl": {
397 | "version": "1.0.2",
398 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
399 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
400 | "engines": {
401 | "node": ">= 0.8"
402 | }
403 | },
404 | "node_modules/esbuild": {
405 | "version": "0.14.54",
406 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
407 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
408 | "dev": true,
409 | "hasInstallScript": true,
410 | "bin": {
411 | "esbuild": "bin/esbuild"
412 | },
413 | "engines": {
414 | "node": ">=12"
415 | },
416 | "optionalDependencies": {
417 | "@esbuild/linux-loong64": "0.14.54",
418 | "esbuild-android-64": "0.14.54",
419 | "esbuild-android-arm64": "0.14.54",
420 | "esbuild-darwin-64": "0.14.54",
421 | "esbuild-darwin-arm64": "0.14.54",
422 | "esbuild-freebsd-64": "0.14.54",
423 | "esbuild-freebsd-arm64": "0.14.54",
424 | "esbuild-linux-32": "0.14.54",
425 | "esbuild-linux-64": "0.14.54",
426 | "esbuild-linux-arm": "0.14.54",
427 | "esbuild-linux-arm64": "0.14.54",
428 | "esbuild-linux-mips64le": "0.14.54",
429 | "esbuild-linux-ppc64le": "0.14.54",
430 | "esbuild-linux-riscv64": "0.14.54",
431 | "esbuild-linux-s390x": "0.14.54",
432 | "esbuild-netbsd-64": "0.14.54",
433 | "esbuild-openbsd-64": "0.14.54",
434 | "esbuild-sunos-64": "0.14.54",
435 | "esbuild-windows-32": "0.14.54",
436 | "esbuild-windows-64": "0.14.54",
437 | "esbuild-windows-arm64": "0.14.54"
438 | }
439 | },
440 | "node_modules/esbuild-android-64": {
441 | "version": "0.14.54",
442 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
443 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
444 | "cpu": [
445 | "x64"
446 | ],
447 | "dev": true,
448 | "optional": true,
449 | "os": [
450 | "android"
451 | ],
452 | "engines": {
453 | "node": ">=12"
454 | }
455 | },
456 | "node_modules/esbuild-android-arm64": {
457 | "version": "0.14.54",
458 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
459 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
460 | "cpu": [
461 | "arm64"
462 | ],
463 | "dev": true,
464 | "optional": true,
465 | "os": [
466 | "android"
467 | ],
468 | "engines": {
469 | "node": ">=12"
470 | }
471 | },
472 | "node_modules/esbuild-darwin-64": {
473 | "version": "0.14.54",
474 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
475 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
476 | "cpu": [
477 | "x64"
478 | ],
479 | "dev": true,
480 | "optional": true,
481 | "os": [
482 | "darwin"
483 | ],
484 | "engines": {
485 | "node": ">=12"
486 | }
487 | },
488 | "node_modules/esbuild-darwin-arm64": {
489 | "version": "0.14.54",
490 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
491 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
492 | "cpu": [
493 | "arm64"
494 | ],
495 | "dev": true,
496 | "optional": true,
497 | "os": [
498 | "darwin"
499 | ],
500 | "engines": {
501 | "node": ">=12"
502 | }
503 | },
504 | "node_modules/esbuild-freebsd-64": {
505 | "version": "0.14.54",
506 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
507 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
508 | "cpu": [
509 | "x64"
510 | ],
511 | "dev": true,
512 | "optional": true,
513 | "os": [
514 | "freebsd"
515 | ],
516 | "engines": {
517 | "node": ">=12"
518 | }
519 | },
520 | "node_modules/esbuild-freebsd-arm64": {
521 | "version": "0.14.54",
522 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
523 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
524 | "cpu": [
525 | "arm64"
526 | ],
527 | "dev": true,
528 | "optional": true,
529 | "os": [
530 | "freebsd"
531 | ],
532 | "engines": {
533 | "node": ">=12"
534 | }
535 | },
536 | "node_modules/esbuild-linux-32": {
537 | "version": "0.14.54",
538 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
539 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
540 | "cpu": [
541 | "ia32"
542 | ],
543 | "dev": true,
544 | "optional": true,
545 | "os": [
546 | "linux"
547 | ],
548 | "engines": {
549 | "node": ">=12"
550 | }
551 | },
552 | "node_modules/esbuild-linux-64": {
553 | "version": "0.14.54",
554 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
555 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
556 | "cpu": [
557 | "x64"
558 | ],
559 | "dev": true,
560 | "optional": true,
561 | "os": [
562 | "linux"
563 | ],
564 | "engines": {
565 | "node": ">=12"
566 | }
567 | },
568 | "node_modules/esbuild-linux-arm": {
569 | "version": "0.14.54",
570 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
571 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
572 | "cpu": [
573 | "arm"
574 | ],
575 | "dev": true,
576 | "optional": true,
577 | "os": [
578 | "linux"
579 | ],
580 | "engines": {
581 | "node": ">=12"
582 | }
583 | },
584 | "node_modules/esbuild-linux-arm64": {
585 | "version": "0.14.54",
586 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
587 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
588 | "cpu": [
589 | "arm64"
590 | ],
591 | "dev": true,
592 | "optional": true,
593 | "os": [
594 | "linux"
595 | ],
596 | "engines": {
597 | "node": ">=12"
598 | }
599 | },
600 | "node_modules/esbuild-linux-mips64le": {
601 | "version": "0.14.54",
602 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
603 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
604 | "cpu": [
605 | "mips64el"
606 | ],
607 | "dev": true,
608 | "optional": true,
609 | "os": [
610 | "linux"
611 | ],
612 | "engines": {
613 | "node": ">=12"
614 | }
615 | },
616 | "node_modules/esbuild-linux-ppc64le": {
617 | "version": "0.14.54",
618 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
619 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
620 | "cpu": [
621 | "ppc64"
622 | ],
623 | "dev": true,
624 | "optional": true,
625 | "os": [
626 | "linux"
627 | ],
628 | "engines": {
629 | "node": ">=12"
630 | }
631 | },
632 | "node_modules/esbuild-linux-riscv64": {
633 | "version": "0.14.54",
634 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
635 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
636 | "cpu": [
637 | "riscv64"
638 | ],
639 | "dev": true,
640 | "optional": true,
641 | "os": [
642 | "linux"
643 | ],
644 | "engines": {
645 | "node": ">=12"
646 | }
647 | },
648 | "node_modules/esbuild-linux-s390x": {
649 | "version": "0.14.54",
650 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
651 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
652 | "cpu": [
653 | "s390x"
654 | ],
655 | "dev": true,
656 | "optional": true,
657 | "os": [
658 | "linux"
659 | ],
660 | "engines": {
661 | "node": ">=12"
662 | }
663 | },
664 | "node_modules/esbuild-netbsd-64": {
665 | "version": "0.14.54",
666 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
667 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
668 | "cpu": [
669 | "x64"
670 | ],
671 | "dev": true,
672 | "optional": true,
673 | "os": [
674 | "netbsd"
675 | ],
676 | "engines": {
677 | "node": ">=12"
678 | }
679 | },
680 | "node_modules/esbuild-openbsd-64": {
681 | "version": "0.14.54",
682 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
683 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
684 | "cpu": [
685 | "x64"
686 | ],
687 | "dev": true,
688 | "optional": true,
689 | "os": [
690 | "openbsd"
691 | ],
692 | "engines": {
693 | "node": ">=12"
694 | }
695 | },
696 | "node_modules/esbuild-sunos-64": {
697 | "version": "0.14.54",
698 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
699 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
700 | "cpu": [
701 | "x64"
702 | ],
703 | "dev": true,
704 | "optional": true,
705 | "os": [
706 | "sunos"
707 | ],
708 | "engines": {
709 | "node": ">=12"
710 | }
711 | },
712 | "node_modules/esbuild-windows-32": {
713 | "version": "0.14.54",
714 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
715 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
716 | "cpu": [
717 | "ia32"
718 | ],
719 | "dev": true,
720 | "optional": true,
721 | "os": [
722 | "win32"
723 | ],
724 | "engines": {
725 | "node": ">=12"
726 | }
727 | },
728 | "node_modules/esbuild-windows-64": {
729 | "version": "0.14.54",
730 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
731 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
732 | "cpu": [
733 | "x64"
734 | ],
735 | "dev": true,
736 | "optional": true,
737 | "os": [
738 | "win32"
739 | ],
740 | "engines": {
741 | "node": ">=12"
742 | }
743 | },
744 | "node_modules/esbuild-windows-arm64": {
745 | "version": "0.14.54",
746 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
747 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
748 | "cpu": [
749 | "arm64"
750 | ],
751 | "dev": true,
752 | "optional": true,
753 | "os": [
754 | "win32"
755 | ],
756 | "engines": {
757 | "node": ">=12"
758 | }
759 | },
760 | "node_modules/escape-html": {
761 | "version": "1.0.3",
762 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
763 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
764 | },
765 | "node_modules/estree-walker": {
766 | "version": "2.0.2",
767 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
768 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
769 | },
770 | "node_modules/etag": {
771 | "version": "1.8.1",
772 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
773 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
774 | "engines": {
775 | "node": ">= 0.6"
776 | }
777 | },
778 | "node_modules/express": {
779 | "version": "4.18.2",
780 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
781 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
782 | "dependencies": {
783 | "accepts": "~1.3.8",
784 | "array-flatten": "1.1.1",
785 | "body-parser": "1.20.1",
786 | "content-disposition": "0.5.4",
787 | "content-type": "~1.0.4",
788 | "cookie": "0.5.0",
789 | "cookie-signature": "1.0.6",
790 | "debug": "2.6.9",
791 | "depd": "2.0.0",
792 | "encodeurl": "~1.0.2",
793 | "escape-html": "~1.0.3",
794 | "etag": "~1.8.1",
795 | "finalhandler": "1.2.0",
796 | "fresh": "0.5.2",
797 | "http-errors": "2.0.0",
798 | "merge-descriptors": "1.0.1",
799 | "methods": "~1.1.2",
800 | "on-finished": "2.4.1",
801 | "parseurl": "~1.3.3",
802 | "path-to-regexp": "0.1.7",
803 | "proxy-addr": "~2.0.7",
804 | "qs": "6.11.0",
805 | "range-parser": "~1.2.1",
806 | "safe-buffer": "5.2.1",
807 | "send": "0.18.0",
808 | "serve-static": "1.15.0",
809 | "setprototypeof": "1.2.0",
810 | "statuses": "2.0.1",
811 | "type-is": "~1.6.18",
812 | "utils-merge": "1.0.1",
813 | "vary": "~1.1.2"
814 | },
815 | "engines": {
816 | "node": ">= 0.10.0"
817 | }
818 | },
819 | "node_modules/finalhandler": {
820 | "version": "1.2.0",
821 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
822 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
823 | "dependencies": {
824 | "debug": "2.6.9",
825 | "encodeurl": "~1.0.2",
826 | "escape-html": "~1.0.3",
827 | "on-finished": "2.4.1",
828 | "parseurl": "~1.3.3",
829 | "statuses": "2.0.1",
830 | "unpipe": "~1.0.0"
831 | },
832 | "engines": {
833 | "node": ">= 0.8"
834 | }
835 | },
836 | "node_modules/forwarded": {
837 | "version": "0.2.0",
838 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
839 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
840 | "engines": {
841 | "node": ">= 0.6"
842 | }
843 | },
844 | "node_modules/fresh": {
845 | "version": "0.5.2",
846 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
847 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
848 | "engines": {
849 | "node": ">= 0.6"
850 | }
851 | },
852 | "node_modules/fsevents": {
853 | "version": "2.3.2",
854 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
855 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
856 | "dev": true,
857 | "hasInstallScript": true,
858 | "optional": true,
859 | "os": [
860 | "darwin"
861 | ],
862 | "engines": {
863 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
864 | }
865 | },
866 | "node_modules/function-bind": {
867 | "version": "1.1.1",
868 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
869 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
870 | },
871 | "node_modules/get-intrinsic": {
872 | "version": "1.1.3",
873 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
874 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
875 | "dependencies": {
876 | "function-bind": "^1.1.1",
877 | "has": "^1.0.3",
878 | "has-symbols": "^1.0.3"
879 | },
880 | "funding": {
881 | "url": "https://github.com/sponsors/ljharb"
882 | }
883 | },
884 | "node_modules/has": {
885 | "version": "1.0.3",
886 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
887 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
888 | "dependencies": {
889 | "function-bind": "^1.1.1"
890 | },
891 | "engines": {
892 | "node": ">= 0.4.0"
893 | }
894 | },
895 | "node_modules/has-symbols": {
896 | "version": "1.0.3",
897 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
898 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
899 | "engines": {
900 | "node": ">= 0.4"
901 | },
902 | "funding": {
903 | "url": "https://github.com/sponsors/ljharb"
904 | }
905 | },
906 | "node_modules/highlight.js": {
907 | "version": "11.9.0",
908 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
909 | "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
910 | "engines": {
911 | "node": ">=12.0.0"
912 | }
913 | },
914 | "node_modules/http-errors": {
915 | "version": "2.0.0",
916 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
917 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
918 | "dependencies": {
919 | "depd": "2.0.0",
920 | "inherits": "2.0.4",
921 | "setprototypeof": "1.2.0",
922 | "statuses": "2.0.1",
923 | "toidentifier": "1.0.1"
924 | },
925 | "engines": {
926 | "node": ">= 0.8"
927 | }
928 | },
929 | "node_modules/iconv-lite": {
930 | "version": "0.4.24",
931 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
932 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
933 | "dependencies": {
934 | "safer-buffer": ">= 2.1.2 < 3"
935 | },
936 | "engines": {
937 | "node": ">=0.10.0"
938 | }
939 | },
940 | "node_modules/inherits": {
941 | "version": "2.0.4",
942 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
943 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
944 | },
945 | "node_modules/ipaddr.js": {
946 | "version": "1.9.1",
947 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
948 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
949 | "engines": {
950 | "node": ">= 0.10"
951 | }
952 | },
953 | "node_modules/is-core-module": {
954 | "version": "2.11.0",
955 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
956 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
957 | "dev": true,
958 | "dependencies": {
959 | "has": "^1.0.3"
960 | },
961 | "funding": {
962 | "url": "https://github.com/sponsors/ljharb"
963 | }
964 | },
965 | "node_modules/magic-string": {
966 | "version": "0.30.0",
967 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
968 | "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
969 | "dependencies": {
970 | "@jridgewell/sourcemap-codec": "^1.4.13"
971 | },
972 | "engines": {
973 | "node": ">=12"
974 | }
975 | },
976 | "node_modules/media-typer": {
977 | "version": "0.3.0",
978 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
979 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
980 | "engines": {
981 | "node": ">= 0.6"
982 | }
983 | },
984 | "node_modules/merge-descriptors": {
985 | "version": "1.0.1",
986 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
987 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
988 | },
989 | "node_modules/methods": {
990 | "version": "1.1.2",
991 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
992 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
993 | "engines": {
994 | "node": ">= 0.6"
995 | }
996 | },
997 | "node_modules/mime": {
998 | "version": "1.6.0",
999 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1000 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1001 | "bin": {
1002 | "mime": "cli.js"
1003 | },
1004 | "engines": {
1005 | "node": ">=4"
1006 | }
1007 | },
1008 | "node_modules/mime-db": {
1009 | "version": "1.52.0",
1010 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1011 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1012 | "engines": {
1013 | "node": ">= 0.6"
1014 | }
1015 | },
1016 | "node_modules/mime-types": {
1017 | "version": "2.1.35",
1018 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1019 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1020 | "dependencies": {
1021 | "mime-db": "1.52.0"
1022 | },
1023 | "engines": {
1024 | "node": ">= 0.6"
1025 | }
1026 | },
1027 | "node_modules/morgan": {
1028 | "version": "1.10.0",
1029 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
1030 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
1031 | "dependencies": {
1032 | "basic-auth": "~2.0.1",
1033 | "debug": "2.6.9",
1034 | "depd": "~2.0.0",
1035 | "on-finished": "~2.3.0",
1036 | "on-headers": "~1.0.2"
1037 | },
1038 | "engines": {
1039 | "node": ">= 0.8.0"
1040 | }
1041 | },
1042 | "node_modules/morgan/node_modules/on-finished": {
1043 | "version": "2.3.0",
1044 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1045 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
1046 | "dependencies": {
1047 | "ee-first": "1.1.1"
1048 | },
1049 | "engines": {
1050 | "node": ">= 0.8"
1051 | }
1052 | },
1053 | "node_modules/ms": {
1054 | "version": "2.0.0",
1055 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1056 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1057 | },
1058 | "node_modules/nanoid": {
1059 | "version": "3.3.6",
1060 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
1061 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
1062 | "funding": [
1063 | {
1064 | "type": "github",
1065 | "url": "https://github.com/sponsors/ai"
1066 | }
1067 | ],
1068 | "bin": {
1069 | "nanoid": "bin/nanoid.cjs"
1070 | },
1071 | "engines": {
1072 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1073 | }
1074 | },
1075 | "node_modules/negotiator": {
1076 | "version": "0.6.3",
1077 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1078 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1079 | "engines": {
1080 | "node": ">= 0.6"
1081 | }
1082 | },
1083 | "node_modules/object-inspect": {
1084 | "version": "1.12.2",
1085 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
1086 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
1087 | "funding": {
1088 | "url": "https://github.com/sponsors/ljharb"
1089 | }
1090 | },
1091 | "node_modules/on-finished": {
1092 | "version": "2.4.1",
1093 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1094 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1095 | "dependencies": {
1096 | "ee-first": "1.1.1"
1097 | },
1098 | "engines": {
1099 | "node": ">= 0.8"
1100 | }
1101 | },
1102 | "node_modules/on-headers": {
1103 | "version": "1.0.2",
1104 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1105 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
1106 | "engines": {
1107 | "node": ">= 0.8"
1108 | }
1109 | },
1110 | "node_modules/parseurl": {
1111 | "version": "1.3.3",
1112 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1113 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1114 | "engines": {
1115 | "node": ">= 0.8"
1116 | }
1117 | },
1118 | "node_modules/path-parse": {
1119 | "version": "1.0.7",
1120 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1121 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1122 | "dev": true
1123 | },
1124 | "node_modules/path-to-regexp": {
1125 | "version": "0.1.7",
1126 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1127 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1128 | },
1129 | "node_modules/picocolors": {
1130 | "version": "1.0.0",
1131 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1132 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1133 | },
1134 | "node_modules/postcss": {
1135 | "version": "8.4.31",
1136 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1137 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1138 | "funding": [
1139 | {
1140 | "type": "opencollective",
1141 | "url": "https://opencollective.com/postcss/"
1142 | },
1143 | {
1144 | "type": "tidelift",
1145 | "url": "https://tidelift.com/funding/github/npm/postcss"
1146 | },
1147 | {
1148 | "type": "github",
1149 | "url": "https://github.com/sponsors/ai"
1150 | }
1151 | ],
1152 | "dependencies": {
1153 | "nanoid": "^3.3.6",
1154 | "picocolors": "^1.0.0",
1155 | "source-map-js": "^1.0.2"
1156 | },
1157 | "engines": {
1158 | "node": "^10 || ^12 || >=14"
1159 | }
1160 | },
1161 | "node_modules/proxy-addr": {
1162 | "version": "2.0.7",
1163 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1164 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1165 | "dependencies": {
1166 | "forwarded": "0.2.0",
1167 | "ipaddr.js": "1.9.1"
1168 | },
1169 | "engines": {
1170 | "node": ">= 0.10"
1171 | }
1172 | },
1173 | "node_modules/qs": {
1174 | "version": "6.11.0",
1175 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1176 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1177 | "dependencies": {
1178 | "side-channel": "^1.0.4"
1179 | },
1180 | "engines": {
1181 | "node": ">=0.6"
1182 | },
1183 | "funding": {
1184 | "url": "https://github.com/sponsors/ljharb"
1185 | }
1186 | },
1187 | "node_modules/range-parser": {
1188 | "version": "1.2.1",
1189 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1190 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1191 | "engines": {
1192 | "node": ">= 0.6"
1193 | }
1194 | },
1195 | "node_modules/raw-body": {
1196 | "version": "2.5.1",
1197 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1198 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1199 | "dependencies": {
1200 | "bytes": "3.1.2",
1201 | "http-errors": "2.0.0",
1202 | "iconv-lite": "0.4.24",
1203 | "unpipe": "1.0.0"
1204 | },
1205 | "engines": {
1206 | "node": ">= 0.8"
1207 | }
1208 | },
1209 | "node_modules/resolve": {
1210 | "version": "1.22.1",
1211 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
1212 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
1213 | "dev": true,
1214 | "dependencies": {
1215 | "is-core-module": "^2.9.0",
1216 | "path-parse": "^1.0.7",
1217 | "supports-preserve-symlinks-flag": "^1.0.0"
1218 | },
1219 | "bin": {
1220 | "resolve": "bin/resolve"
1221 | },
1222 | "funding": {
1223 | "url": "https://github.com/sponsors/ljharb"
1224 | }
1225 | },
1226 | "node_modules/rollup": {
1227 | "version": "2.77.3",
1228 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz",
1229 | "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
1230 | "dev": true,
1231 | "bin": {
1232 | "rollup": "dist/bin/rollup"
1233 | },
1234 | "engines": {
1235 | "node": ">=10.0.0"
1236 | },
1237 | "optionalDependencies": {
1238 | "fsevents": "~2.3.2"
1239 | }
1240 | },
1241 | "node_modules/safe-buffer": {
1242 | "version": "5.2.1",
1243 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1244 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1245 | "funding": [
1246 | {
1247 | "type": "github",
1248 | "url": "https://github.com/sponsors/feross"
1249 | },
1250 | {
1251 | "type": "patreon",
1252 | "url": "https://www.patreon.com/feross"
1253 | },
1254 | {
1255 | "type": "consulting",
1256 | "url": "https://feross.org/support"
1257 | }
1258 | ]
1259 | },
1260 | "node_modules/safer-buffer": {
1261 | "version": "2.1.2",
1262 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1263 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1264 | },
1265 | "node_modules/send": {
1266 | "version": "0.18.0",
1267 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1268 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1269 | "dependencies": {
1270 | "debug": "2.6.9",
1271 | "depd": "2.0.0",
1272 | "destroy": "1.2.0",
1273 | "encodeurl": "~1.0.2",
1274 | "escape-html": "~1.0.3",
1275 | "etag": "~1.8.1",
1276 | "fresh": "0.5.2",
1277 | "http-errors": "2.0.0",
1278 | "mime": "1.6.0",
1279 | "ms": "2.1.3",
1280 | "on-finished": "2.4.1",
1281 | "range-parser": "~1.2.1",
1282 | "statuses": "2.0.1"
1283 | },
1284 | "engines": {
1285 | "node": ">= 0.8.0"
1286 | }
1287 | },
1288 | "node_modules/send/node_modules/ms": {
1289 | "version": "2.1.3",
1290 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1291 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1292 | },
1293 | "node_modules/serve-static": {
1294 | "version": "1.15.0",
1295 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1296 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1297 | "dependencies": {
1298 | "encodeurl": "~1.0.2",
1299 | "escape-html": "~1.0.3",
1300 | "parseurl": "~1.3.3",
1301 | "send": "0.18.0"
1302 | },
1303 | "engines": {
1304 | "node": ">= 0.8.0"
1305 | }
1306 | },
1307 | "node_modules/setprototypeof": {
1308 | "version": "1.2.0",
1309 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1310 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1311 | },
1312 | "node_modules/side-channel": {
1313 | "version": "1.0.4",
1314 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1315 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1316 | "dependencies": {
1317 | "call-bind": "^1.0.0",
1318 | "get-intrinsic": "^1.0.2",
1319 | "object-inspect": "^1.9.0"
1320 | },
1321 | "funding": {
1322 | "url": "https://github.com/sponsors/ljharb"
1323 | }
1324 | },
1325 | "node_modules/source-map-js": {
1326 | "version": "1.0.2",
1327 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1328 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1329 | "engines": {
1330 | "node": ">=0.10.0"
1331 | }
1332 | },
1333 | "node_modules/statuses": {
1334 | "version": "2.0.1",
1335 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1336 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1337 | "engines": {
1338 | "node": ">= 0.8"
1339 | }
1340 | },
1341 | "node_modules/supports-preserve-symlinks-flag": {
1342 | "version": "1.0.0",
1343 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1344 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1345 | "dev": true,
1346 | "engines": {
1347 | "node": ">= 0.4"
1348 | },
1349 | "funding": {
1350 | "url": "https://github.com/sponsors/ljharb"
1351 | }
1352 | },
1353 | "node_modules/toidentifier": {
1354 | "version": "1.0.1",
1355 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1356 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1357 | "engines": {
1358 | "node": ">=0.6"
1359 | }
1360 | },
1361 | "node_modules/type-is": {
1362 | "version": "1.6.18",
1363 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1364 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1365 | "dependencies": {
1366 | "media-typer": "0.3.0",
1367 | "mime-types": "~2.1.24"
1368 | },
1369 | "engines": {
1370 | "node": ">= 0.6"
1371 | }
1372 | },
1373 | "node_modules/typescript": {
1374 | "version": "4.9.3",
1375 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
1376 | "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
1377 | "dev": true,
1378 | "bin": {
1379 | "tsc": "bin/tsc",
1380 | "tsserver": "bin/tsserver"
1381 | },
1382 | "engines": {
1383 | "node": ">=4.2.0"
1384 | }
1385 | },
1386 | "node_modules/unpipe": {
1387 | "version": "1.0.0",
1388 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1389 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1390 | "engines": {
1391 | "node": ">= 0.8"
1392 | }
1393 | },
1394 | "node_modules/utils-merge": {
1395 | "version": "1.0.1",
1396 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1397 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1398 | "engines": {
1399 | "node": ">= 0.4.0"
1400 | }
1401 | },
1402 | "node_modules/vary": {
1403 | "version": "1.1.2",
1404 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1405 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1406 | "engines": {
1407 | "node": ">= 0.8"
1408 | }
1409 | },
1410 | "node_modules/vite": {
1411 | "version": "2.9.16",
1412 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz",
1413 | "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==",
1414 | "dev": true,
1415 | "dependencies": {
1416 | "esbuild": "^0.14.27",
1417 | "postcss": "^8.4.13",
1418 | "resolve": "^1.22.0",
1419 | "rollup": ">=2.59.0 <2.78.0"
1420 | },
1421 | "bin": {
1422 | "vite": "bin/vite.js"
1423 | },
1424 | "engines": {
1425 | "node": ">=12.2.0"
1426 | },
1427 | "optionalDependencies": {
1428 | "fsevents": "~2.3.2"
1429 | },
1430 | "peerDependencies": {
1431 | "less": "*",
1432 | "sass": "*",
1433 | "stylus": "*"
1434 | },
1435 | "peerDependenciesMeta": {
1436 | "less": {
1437 | "optional": true
1438 | },
1439 | "sass": {
1440 | "optional": true
1441 | },
1442 | "stylus": {
1443 | "optional": true
1444 | }
1445 | }
1446 | },
1447 | "node_modules/vue": {
1448 | "version": "3.3.4",
1449 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
1450 | "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
1451 | "dependencies": {
1452 | "@vue/compiler-dom": "3.3.4",
1453 | "@vue/compiler-sfc": "3.3.4",
1454 | "@vue/runtime-dom": "3.3.4",
1455 | "@vue/server-renderer": "3.3.4",
1456 | "@vue/shared": "3.3.4"
1457 | }
1458 | },
1459 | "node_modules/vue-router": {
1460 | "version": "4.2.1",
1461 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.1.tgz",
1462 | "integrity": "sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw==",
1463 | "dependencies": {
1464 | "@vue/devtools-api": "^6.5.0"
1465 | },
1466 | "funding": {
1467 | "url": "https://github.com/sponsors/posva"
1468 | },
1469 | "peerDependencies": {
1470 | "vue": "^3.2.0"
1471 | }
1472 | }
1473 | },
1474 | "dependencies": {
1475 | "@auth0/auth0-spa-js": {
1476 | "version": "2.1.1",
1477 | "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-2.1.1.tgz",
1478 | "integrity": "sha512-21qEf5Bjouy76CWd1gQgf/tT6iD513YFYaK0+3OF1nbwLtPFpxm5Ln94M7SCVFKfe5jbchWuEcIb1HLer3r6RA=="
1479 | },
1480 | "@auth0/auth0-vue": {
1481 | "version": "2.3.0",
1482 | "resolved": "https://registry.npmjs.org/@auth0/auth0-vue/-/auth0-vue-2.3.0.tgz",
1483 | "integrity": "sha512-qg+Cmoem/MOpXfR4cdBdvvqukzzjh3mIO7hcBlmjJdjORiSKvHhCmgO4FVx0IVeFPpI4RLGvD1uR7DWT31h1bg==",
1484 | "requires": {
1485 | "@auth0/auth0-spa-js": "^2.1.1",
1486 | "vue": "^3.2.41"
1487 | }
1488 | },
1489 | "@babel/parser": {
1490 | "version": "7.21.9",
1491 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz",
1492 | "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g=="
1493 | },
1494 | "@esbuild/linux-loong64": {
1495 | "version": "0.14.54",
1496 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
1497 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
1498 | "dev": true,
1499 | "optional": true
1500 | },
1501 | "@fortawesome/fontawesome-common-types": {
1502 | "version": "6.5.0",
1503 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.0.tgz",
1504 | "integrity": "sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog=="
1505 | },
1506 | "@fortawesome/fontawesome-svg-core": {
1507 | "version": "6.5.0",
1508 | "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.0.tgz",
1509 | "integrity": "sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA==",
1510 | "requires": {
1511 | "@fortawesome/fontawesome-common-types": "6.5.0"
1512 | }
1513 | },
1514 | "@fortawesome/free-solid-svg-icons": {
1515 | "version": "6.5.0",
1516 | "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.0.tgz",
1517 | "integrity": "sha512-6ZPq8mme67Q7O9Fbp2O+Z7mPZbcWTsRv555JLftLaTodiV0Wq+99YgMhyQ8O6mgNQfComqS9OEvqs7M8ySA92g==",
1518 | "requires": {
1519 | "@fortawesome/fontawesome-common-types": "6.5.0"
1520 | }
1521 | },
1522 | "@fortawesome/vue-fontawesome": {
1523 | "version": "3.0.2",
1524 | "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz",
1525 | "integrity": "sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==",
1526 | "requires": {}
1527 | },
1528 | "@highlightjs/vue-plugin": {
1529 | "version": "2.1.0",
1530 | "resolved": "https://registry.npmjs.org/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz",
1531 | "integrity": "sha512-E+bmk4ncca+hBEYRV2a+1aIzIV0VSY/e5ArjpuSN9IO7wBJrzUE2u4ESCwrbQD7sAy+jWQjkV5qCCWgc+pu7CQ==",
1532 | "requires": {}
1533 | },
1534 | "@jridgewell/sourcemap-codec": {
1535 | "version": "1.4.15",
1536 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
1537 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
1538 | },
1539 | "@vitejs/plugin-vue": {
1540 | "version": "1.10.2",
1541 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz",
1542 | "integrity": "sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==",
1543 | "dev": true,
1544 | "requires": {}
1545 | },
1546 | "@vue/compiler-core": {
1547 | "version": "3.3.4",
1548 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
1549 | "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
1550 | "requires": {
1551 | "@babel/parser": "^7.21.3",
1552 | "@vue/shared": "3.3.4",
1553 | "estree-walker": "^2.0.2",
1554 | "source-map-js": "^1.0.2"
1555 | }
1556 | },
1557 | "@vue/compiler-dom": {
1558 | "version": "3.3.4",
1559 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
1560 | "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
1561 | "requires": {
1562 | "@vue/compiler-core": "3.3.4",
1563 | "@vue/shared": "3.3.4"
1564 | }
1565 | },
1566 | "@vue/compiler-sfc": {
1567 | "version": "3.3.4",
1568 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
1569 | "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
1570 | "requires": {
1571 | "@babel/parser": "^7.20.15",
1572 | "@vue/compiler-core": "3.3.4",
1573 | "@vue/compiler-dom": "3.3.4",
1574 | "@vue/compiler-ssr": "3.3.4",
1575 | "@vue/reactivity-transform": "3.3.4",
1576 | "@vue/shared": "3.3.4",
1577 | "estree-walker": "^2.0.2",
1578 | "magic-string": "^0.30.0",
1579 | "postcss": "^8.1.10",
1580 | "source-map-js": "^1.0.2"
1581 | }
1582 | },
1583 | "@vue/compiler-ssr": {
1584 | "version": "3.3.4",
1585 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
1586 | "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
1587 | "requires": {
1588 | "@vue/compiler-dom": "3.3.4",
1589 | "@vue/shared": "3.3.4"
1590 | }
1591 | },
1592 | "@vue/devtools-api": {
1593 | "version": "6.5.0",
1594 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
1595 | "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
1596 | },
1597 | "@vue/reactivity": {
1598 | "version": "3.3.4",
1599 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
1600 | "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
1601 | "requires": {
1602 | "@vue/shared": "3.3.4"
1603 | }
1604 | },
1605 | "@vue/reactivity-transform": {
1606 | "version": "3.3.4",
1607 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
1608 | "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
1609 | "requires": {
1610 | "@babel/parser": "^7.20.15",
1611 | "@vue/compiler-core": "3.3.4",
1612 | "@vue/shared": "3.3.4",
1613 | "estree-walker": "^2.0.2",
1614 | "magic-string": "^0.30.0"
1615 | }
1616 | },
1617 | "@vue/runtime-core": {
1618 | "version": "3.3.4",
1619 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
1620 | "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
1621 | "requires": {
1622 | "@vue/reactivity": "3.3.4",
1623 | "@vue/shared": "3.3.4"
1624 | }
1625 | },
1626 | "@vue/runtime-dom": {
1627 | "version": "3.3.4",
1628 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
1629 | "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
1630 | "requires": {
1631 | "@vue/runtime-core": "3.3.4",
1632 | "@vue/shared": "3.3.4",
1633 | "csstype": "^3.1.1"
1634 | }
1635 | },
1636 | "@vue/server-renderer": {
1637 | "version": "3.3.4",
1638 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
1639 | "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
1640 | "requires": {
1641 | "@vue/compiler-ssr": "3.3.4",
1642 | "@vue/shared": "3.3.4"
1643 | }
1644 | },
1645 | "@vue/shared": {
1646 | "version": "3.3.4",
1647 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
1648 | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
1649 | },
1650 | "accepts": {
1651 | "version": "1.3.8",
1652 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
1653 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
1654 | "requires": {
1655 | "mime-types": "~2.1.34",
1656 | "negotiator": "0.6.3"
1657 | }
1658 | },
1659 | "array-flatten": {
1660 | "version": "1.1.1",
1661 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1662 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
1663 | },
1664 | "basic-auth": {
1665 | "version": "2.0.1",
1666 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
1667 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
1668 | "requires": {
1669 | "safe-buffer": "5.1.2"
1670 | },
1671 | "dependencies": {
1672 | "safe-buffer": {
1673 | "version": "5.1.2",
1674 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1675 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1676 | }
1677 | }
1678 | },
1679 | "body-parser": {
1680 | "version": "1.20.1",
1681 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
1682 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
1683 | "requires": {
1684 | "bytes": "3.1.2",
1685 | "content-type": "~1.0.4",
1686 | "debug": "2.6.9",
1687 | "depd": "2.0.0",
1688 | "destroy": "1.2.0",
1689 | "http-errors": "2.0.0",
1690 | "iconv-lite": "0.4.24",
1691 | "on-finished": "2.4.1",
1692 | "qs": "6.11.0",
1693 | "raw-body": "2.5.1",
1694 | "type-is": "~1.6.18",
1695 | "unpipe": "1.0.0"
1696 | }
1697 | },
1698 | "bytes": {
1699 | "version": "3.1.2",
1700 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
1701 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
1702 | },
1703 | "call-bind": {
1704 | "version": "1.0.2",
1705 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1706 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1707 | "requires": {
1708 | "function-bind": "^1.1.1",
1709 | "get-intrinsic": "^1.0.2"
1710 | }
1711 | },
1712 | "content-disposition": {
1713 | "version": "0.5.4",
1714 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
1715 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
1716 | "requires": {
1717 | "safe-buffer": "5.2.1"
1718 | }
1719 | },
1720 | "content-type": {
1721 | "version": "1.0.4",
1722 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
1723 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
1724 | },
1725 | "cookie": {
1726 | "version": "0.5.0",
1727 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
1728 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
1729 | },
1730 | "cookie-signature": {
1731 | "version": "1.0.6",
1732 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
1733 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
1734 | },
1735 | "csstype": {
1736 | "version": "3.1.2",
1737 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
1738 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
1739 | },
1740 | "debug": {
1741 | "version": "2.6.9",
1742 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1743 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1744 | "requires": {
1745 | "ms": "2.0.0"
1746 | }
1747 | },
1748 | "depd": {
1749 | "version": "2.0.0",
1750 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1751 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1752 | },
1753 | "destroy": {
1754 | "version": "1.2.0",
1755 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
1756 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
1757 | },
1758 | "ee-first": {
1759 | "version": "1.1.1",
1760 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
1761 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
1762 | },
1763 | "encodeurl": {
1764 | "version": "1.0.2",
1765 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
1766 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
1767 | },
1768 | "esbuild": {
1769 | "version": "0.14.54",
1770 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz",
1771 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
1772 | "dev": true,
1773 | "requires": {
1774 | "@esbuild/linux-loong64": "0.14.54",
1775 | "esbuild-android-64": "0.14.54",
1776 | "esbuild-android-arm64": "0.14.54",
1777 | "esbuild-darwin-64": "0.14.54",
1778 | "esbuild-darwin-arm64": "0.14.54",
1779 | "esbuild-freebsd-64": "0.14.54",
1780 | "esbuild-freebsd-arm64": "0.14.54",
1781 | "esbuild-linux-32": "0.14.54",
1782 | "esbuild-linux-64": "0.14.54",
1783 | "esbuild-linux-arm": "0.14.54",
1784 | "esbuild-linux-arm64": "0.14.54",
1785 | "esbuild-linux-mips64le": "0.14.54",
1786 | "esbuild-linux-ppc64le": "0.14.54",
1787 | "esbuild-linux-riscv64": "0.14.54",
1788 | "esbuild-linux-s390x": "0.14.54",
1789 | "esbuild-netbsd-64": "0.14.54",
1790 | "esbuild-openbsd-64": "0.14.54",
1791 | "esbuild-sunos-64": "0.14.54",
1792 | "esbuild-windows-32": "0.14.54",
1793 | "esbuild-windows-64": "0.14.54",
1794 | "esbuild-windows-arm64": "0.14.54"
1795 | }
1796 | },
1797 | "esbuild-android-64": {
1798 | "version": "0.14.54",
1799 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
1800 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
1801 | "dev": true,
1802 | "optional": true
1803 | },
1804 | "esbuild-android-arm64": {
1805 | "version": "0.14.54",
1806 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
1807 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
1808 | "dev": true,
1809 | "optional": true
1810 | },
1811 | "esbuild-darwin-64": {
1812 | "version": "0.14.54",
1813 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
1814 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
1815 | "dev": true,
1816 | "optional": true
1817 | },
1818 | "esbuild-darwin-arm64": {
1819 | "version": "0.14.54",
1820 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
1821 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
1822 | "dev": true,
1823 | "optional": true
1824 | },
1825 | "esbuild-freebsd-64": {
1826 | "version": "0.14.54",
1827 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
1828 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
1829 | "dev": true,
1830 | "optional": true
1831 | },
1832 | "esbuild-freebsd-arm64": {
1833 | "version": "0.14.54",
1834 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
1835 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
1836 | "dev": true,
1837 | "optional": true
1838 | },
1839 | "esbuild-linux-32": {
1840 | "version": "0.14.54",
1841 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
1842 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
1843 | "dev": true,
1844 | "optional": true
1845 | },
1846 | "esbuild-linux-64": {
1847 | "version": "0.14.54",
1848 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
1849 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
1850 | "dev": true,
1851 | "optional": true
1852 | },
1853 | "esbuild-linux-arm": {
1854 | "version": "0.14.54",
1855 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
1856 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
1857 | "dev": true,
1858 | "optional": true
1859 | },
1860 | "esbuild-linux-arm64": {
1861 | "version": "0.14.54",
1862 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
1863 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
1864 | "dev": true,
1865 | "optional": true
1866 | },
1867 | "esbuild-linux-mips64le": {
1868 | "version": "0.14.54",
1869 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
1870 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
1871 | "dev": true,
1872 | "optional": true
1873 | },
1874 | "esbuild-linux-ppc64le": {
1875 | "version": "0.14.54",
1876 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
1877 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
1878 | "dev": true,
1879 | "optional": true
1880 | },
1881 | "esbuild-linux-riscv64": {
1882 | "version": "0.14.54",
1883 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
1884 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
1885 | "dev": true,
1886 | "optional": true
1887 | },
1888 | "esbuild-linux-s390x": {
1889 | "version": "0.14.54",
1890 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
1891 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
1892 | "dev": true,
1893 | "optional": true
1894 | },
1895 | "esbuild-netbsd-64": {
1896 | "version": "0.14.54",
1897 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
1898 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
1899 | "dev": true,
1900 | "optional": true
1901 | },
1902 | "esbuild-openbsd-64": {
1903 | "version": "0.14.54",
1904 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
1905 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
1906 | "dev": true,
1907 | "optional": true
1908 | },
1909 | "esbuild-sunos-64": {
1910 | "version": "0.14.54",
1911 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
1912 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
1913 | "dev": true,
1914 | "optional": true
1915 | },
1916 | "esbuild-windows-32": {
1917 | "version": "0.14.54",
1918 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
1919 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
1920 | "dev": true,
1921 | "optional": true
1922 | },
1923 | "esbuild-windows-64": {
1924 | "version": "0.14.54",
1925 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
1926 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
1927 | "dev": true,
1928 | "optional": true
1929 | },
1930 | "esbuild-windows-arm64": {
1931 | "version": "0.14.54",
1932 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
1933 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
1934 | "dev": true,
1935 | "optional": true
1936 | },
1937 | "escape-html": {
1938 | "version": "1.0.3",
1939 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1940 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1941 | },
1942 | "estree-walker": {
1943 | "version": "2.0.2",
1944 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1945 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
1946 | },
1947 | "etag": {
1948 | "version": "1.8.1",
1949 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1950 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
1951 | },
1952 | "express": {
1953 | "version": "4.18.2",
1954 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
1955 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
1956 | "requires": {
1957 | "accepts": "~1.3.8",
1958 | "array-flatten": "1.1.1",
1959 | "body-parser": "1.20.1",
1960 | "content-disposition": "0.5.4",
1961 | "content-type": "~1.0.4",
1962 | "cookie": "0.5.0",
1963 | "cookie-signature": "1.0.6",
1964 | "debug": "2.6.9",
1965 | "depd": "2.0.0",
1966 | "encodeurl": "~1.0.2",
1967 | "escape-html": "~1.0.3",
1968 | "etag": "~1.8.1",
1969 | "finalhandler": "1.2.0",
1970 | "fresh": "0.5.2",
1971 | "http-errors": "2.0.0",
1972 | "merge-descriptors": "1.0.1",
1973 | "methods": "~1.1.2",
1974 | "on-finished": "2.4.1",
1975 | "parseurl": "~1.3.3",
1976 | "path-to-regexp": "0.1.7",
1977 | "proxy-addr": "~2.0.7",
1978 | "qs": "6.11.0",
1979 | "range-parser": "~1.2.1",
1980 | "safe-buffer": "5.2.1",
1981 | "send": "0.18.0",
1982 | "serve-static": "1.15.0",
1983 | "setprototypeof": "1.2.0",
1984 | "statuses": "2.0.1",
1985 | "type-is": "~1.6.18",
1986 | "utils-merge": "1.0.1",
1987 | "vary": "~1.1.2"
1988 | }
1989 | },
1990 | "finalhandler": {
1991 | "version": "1.2.0",
1992 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
1993 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
1994 | "requires": {
1995 | "debug": "2.6.9",
1996 | "encodeurl": "~1.0.2",
1997 | "escape-html": "~1.0.3",
1998 | "on-finished": "2.4.1",
1999 | "parseurl": "~1.3.3",
2000 | "statuses": "2.0.1",
2001 | "unpipe": "~1.0.0"
2002 | }
2003 | },
2004 | "forwarded": {
2005 | "version": "0.2.0",
2006 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
2007 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
2008 | },
2009 | "fresh": {
2010 | "version": "0.5.2",
2011 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
2012 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
2013 | },
2014 | "fsevents": {
2015 | "version": "2.3.2",
2016 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2017 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2018 | "dev": true,
2019 | "optional": true
2020 | },
2021 | "function-bind": {
2022 | "version": "1.1.1",
2023 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
2024 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
2025 | },
2026 | "get-intrinsic": {
2027 | "version": "1.1.3",
2028 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
2029 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
2030 | "requires": {
2031 | "function-bind": "^1.1.1",
2032 | "has": "^1.0.3",
2033 | "has-symbols": "^1.0.3"
2034 | }
2035 | },
2036 | "has": {
2037 | "version": "1.0.3",
2038 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
2039 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
2040 | "requires": {
2041 | "function-bind": "^1.1.1"
2042 | }
2043 | },
2044 | "has-symbols": {
2045 | "version": "1.0.3",
2046 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
2047 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
2048 | },
2049 | "highlight.js": {
2050 | "version": "11.9.0",
2051 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
2052 | "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw=="
2053 | },
2054 | "http-errors": {
2055 | "version": "2.0.0",
2056 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
2057 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
2058 | "requires": {
2059 | "depd": "2.0.0",
2060 | "inherits": "2.0.4",
2061 | "setprototypeof": "1.2.0",
2062 | "statuses": "2.0.1",
2063 | "toidentifier": "1.0.1"
2064 | }
2065 | },
2066 | "iconv-lite": {
2067 | "version": "0.4.24",
2068 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
2069 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
2070 | "requires": {
2071 | "safer-buffer": ">= 2.1.2 < 3"
2072 | }
2073 | },
2074 | "inherits": {
2075 | "version": "2.0.4",
2076 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2077 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
2078 | },
2079 | "ipaddr.js": {
2080 | "version": "1.9.1",
2081 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
2082 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
2083 | },
2084 | "is-core-module": {
2085 | "version": "2.11.0",
2086 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
2087 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
2088 | "dev": true,
2089 | "requires": {
2090 | "has": "^1.0.3"
2091 | }
2092 | },
2093 | "magic-string": {
2094 | "version": "0.30.0",
2095 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
2096 | "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
2097 | "requires": {
2098 | "@jridgewell/sourcemap-codec": "^1.4.13"
2099 | }
2100 | },
2101 | "media-typer": {
2102 | "version": "0.3.0",
2103 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
2104 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
2105 | },
2106 | "merge-descriptors": {
2107 | "version": "1.0.1",
2108 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
2109 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
2110 | },
2111 | "methods": {
2112 | "version": "1.1.2",
2113 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
2114 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
2115 | },
2116 | "mime": {
2117 | "version": "1.6.0",
2118 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
2119 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
2120 | },
2121 | "mime-db": {
2122 | "version": "1.52.0",
2123 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
2124 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
2125 | },
2126 | "mime-types": {
2127 | "version": "2.1.35",
2128 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
2129 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
2130 | "requires": {
2131 | "mime-db": "1.52.0"
2132 | }
2133 | },
2134 | "morgan": {
2135 | "version": "1.10.0",
2136 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
2137 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
2138 | "requires": {
2139 | "basic-auth": "~2.0.1",
2140 | "debug": "2.6.9",
2141 | "depd": "~2.0.0",
2142 | "on-finished": "~2.3.0",
2143 | "on-headers": "~1.0.2"
2144 | },
2145 | "dependencies": {
2146 | "on-finished": {
2147 | "version": "2.3.0",
2148 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2149 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
2150 | "requires": {
2151 | "ee-first": "1.1.1"
2152 | }
2153 | }
2154 | }
2155 | },
2156 | "ms": {
2157 | "version": "2.0.0",
2158 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2159 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
2160 | },
2161 | "nanoid": {
2162 | "version": "3.3.6",
2163 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
2164 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
2165 | },
2166 | "negotiator": {
2167 | "version": "0.6.3",
2168 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
2169 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
2170 | },
2171 | "object-inspect": {
2172 | "version": "1.12.2",
2173 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
2174 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
2175 | },
2176 | "on-finished": {
2177 | "version": "2.4.1",
2178 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
2179 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
2180 | "requires": {
2181 | "ee-first": "1.1.1"
2182 | }
2183 | },
2184 | "on-headers": {
2185 | "version": "1.0.2",
2186 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
2187 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
2188 | },
2189 | "parseurl": {
2190 | "version": "1.3.3",
2191 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
2192 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
2193 | },
2194 | "path-parse": {
2195 | "version": "1.0.7",
2196 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2197 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2198 | "dev": true
2199 | },
2200 | "path-to-regexp": {
2201 | "version": "0.1.7",
2202 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2203 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
2204 | },
2205 | "picocolors": {
2206 | "version": "1.0.0",
2207 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2208 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
2209 | },
2210 | "postcss": {
2211 | "version": "8.4.31",
2212 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
2213 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
2214 | "requires": {
2215 | "nanoid": "^3.3.6",
2216 | "picocolors": "^1.0.0",
2217 | "source-map-js": "^1.0.2"
2218 | }
2219 | },
2220 | "proxy-addr": {
2221 | "version": "2.0.7",
2222 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
2223 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
2224 | "requires": {
2225 | "forwarded": "0.2.0",
2226 | "ipaddr.js": "1.9.1"
2227 | }
2228 | },
2229 | "qs": {
2230 | "version": "6.11.0",
2231 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
2232 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
2233 | "requires": {
2234 | "side-channel": "^1.0.4"
2235 | }
2236 | },
2237 | "range-parser": {
2238 | "version": "1.2.1",
2239 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2240 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
2241 | },
2242 | "raw-body": {
2243 | "version": "2.5.1",
2244 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
2245 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
2246 | "requires": {
2247 | "bytes": "3.1.2",
2248 | "http-errors": "2.0.0",
2249 | "iconv-lite": "0.4.24",
2250 | "unpipe": "1.0.0"
2251 | }
2252 | },
2253 | "resolve": {
2254 | "version": "1.22.1",
2255 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
2256 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
2257 | "dev": true,
2258 | "requires": {
2259 | "is-core-module": "^2.9.0",
2260 | "path-parse": "^1.0.7",
2261 | "supports-preserve-symlinks-flag": "^1.0.0"
2262 | }
2263 | },
2264 | "rollup": {
2265 | "version": "2.77.3",
2266 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz",
2267 | "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
2268 | "dev": true,
2269 | "requires": {
2270 | "fsevents": "~2.3.2"
2271 | }
2272 | },
2273 | "safe-buffer": {
2274 | "version": "5.2.1",
2275 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2276 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
2277 | },
2278 | "safer-buffer": {
2279 | "version": "2.1.2",
2280 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2281 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2282 | },
2283 | "send": {
2284 | "version": "0.18.0",
2285 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
2286 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
2287 | "requires": {
2288 | "debug": "2.6.9",
2289 | "depd": "2.0.0",
2290 | "destroy": "1.2.0",
2291 | "encodeurl": "~1.0.2",
2292 | "escape-html": "~1.0.3",
2293 | "etag": "~1.8.1",
2294 | "fresh": "0.5.2",
2295 | "http-errors": "2.0.0",
2296 | "mime": "1.6.0",
2297 | "ms": "2.1.3",
2298 | "on-finished": "2.4.1",
2299 | "range-parser": "~1.2.1",
2300 | "statuses": "2.0.1"
2301 | },
2302 | "dependencies": {
2303 | "ms": {
2304 | "version": "2.1.3",
2305 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2306 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2307 | }
2308 | }
2309 | },
2310 | "serve-static": {
2311 | "version": "1.15.0",
2312 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
2313 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
2314 | "requires": {
2315 | "encodeurl": "~1.0.2",
2316 | "escape-html": "~1.0.3",
2317 | "parseurl": "~1.3.3",
2318 | "send": "0.18.0"
2319 | }
2320 | },
2321 | "setprototypeof": {
2322 | "version": "1.2.0",
2323 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2324 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2325 | },
2326 | "side-channel": {
2327 | "version": "1.0.4",
2328 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
2329 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
2330 | "requires": {
2331 | "call-bind": "^1.0.0",
2332 | "get-intrinsic": "^1.0.2",
2333 | "object-inspect": "^1.9.0"
2334 | }
2335 | },
2336 | "source-map-js": {
2337 | "version": "1.0.2",
2338 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
2339 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
2340 | },
2341 | "statuses": {
2342 | "version": "2.0.1",
2343 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2344 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
2345 | },
2346 | "supports-preserve-symlinks-flag": {
2347 | "version": "1.0.0",
2348 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2349 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2350 | "dev": true
2351 | },
2352 | "toidentifier": {
2353 | "version": "1.0.1",
2354 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2355 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
2356 | },
2357 | "type-is": {
2358 | "version": "1.6.18",
2359 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2360 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2361 | "requires": {
2362 | "media-typer": "0.3.0",
2363 | "mime-types": "~2.1.24"
2364 | }
2365 | },
2366 | "typescript": {
2367 | "version": "4.9.3",
2368 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
2369 | "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
2370 | "dev": true
2371 | },
2372 | "unpipe": {
2373 | "version": "1.0.0",
2374 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2375 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
2376 | },
2377 | "utils-merge": {
2378 | "version": "1.0.1",
2379 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2380 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
2381 | },
2382 | "vary": {
2383 | "version": "1.1.2",
2384 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2385 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
2386 | },
2387 | "vite": {
2388 | "version": "2.9.16",
2389 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz",
2390 | "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==",
2391 | "dev": true,
2392 | "requires": {
2393 | "esbuild": "^0.14.27",
2394 | "fsevents": "~2.3.2",
2395 | "postcss": "^8.4.13",
2396 | "resolve": "^1.22.0",
2397 | "rollup": ">=2.59.0 <2.78.0"
2398 | }
2399 | },
2400 | "vue": {
2401 | "version": "3.3.4",
2402 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
2403 | "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
2404 | "requires": {
2405 | "@vue/compiler-dom": "3.3.4",
2406 | "@vue/compiler-sfc": "3.3.4",
2407 | "@vue/runtime-dom": "3.3.4",
2408 | "@vue/server-renderer": "3.3.4",
2409 | "@vue/shared": "3.3.4"
2410 | }
2411 | },
2412 | "vue-router": {
2413 | "version": "4.2.1",
2414 | "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.1.tgz",
2415 | "integrity": "sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw==",
2416 | "requires": {
2417 | "@vue/devtools-api": "^6.5.0"
2418 | }
2419 | }
2420 | }
2421 | }
2422 |
--------------------------------------------------------------------------------