diff --git a/.gitignore b/.gitignore index e2f92125..d1821376 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ typings/ # dotenv environment variable files .env* +./docker/kratos/config/kratos.yml # Mac files .DS_Store @@ -82,3 +83,13 @@ docker/nginx/conf.d/server-override/* __pycache__ /.idea/ /venv* + +# CockroachDB certificates +docker/cockroach/certs/*.crt +docker/cockroach/certs/*.key +docker/kratos/cr_certs/*.crt +docker/kratos/cr_certs/*.key + +# Oathkeeper JWKS signing token +docker/kratos/oathkeeper/id_token.jwks.json +/docker/kratos/config/kratos.yml diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..6ec8e548 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +/package.json +/package-lock.json \ No newline at end of file diff --git a/README.md b/README.md index 8cd84d05..59c2e5df 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,160 @@ following Siacoin address: `fb6c9320bc7e01fbb9cd8d8c3caaa371386928793c736837832e634aaaa484650a3177d6714a` +### MongoDB Setup + +Mongo needs a couple of extra steps in order to start a secure cluster. + +- Open port 27017 on all nodes that will take part in the cluster. Ideally, you would only open the port for the other + nodes in the cluster. +- Manually run an initialisation `docker run` with extra environment variables that will initialise the admin user with + a password (example below). +- Manually add a `mgkey` file under `./docker/data/mongo` with the respective secret ( + see [Mongo's keyfile access control](https://docs.mongodb.com/manual/tutorial/enforce-keyfile-access-control-in-existing-replica-set/) + for details). +- During the initialisation run mentioned above, we need to make two extra steps within the container: + - Change the ownership of `mgkey` to `mongodb:mongodb` + - Change its permissions to 400 +- After these steps are done we can open a mongo shell on the master node and run `rs.add()` in order to add the new + node to the cluster. + +Example initialisation docker run command: + +``` +docker run \ + --rm \ + --name mg \ + -p 27017:27017 \ + -e MONGO_INITDB_ROOT_USERNAME= \ + -e MONGO_INITDB_ROOT_PASSWORD= \ + -v /home/user/skynet-webportal/docker/data/mongo/db:/data/db \ + -v /home/user/skynet-webportal/docker/data/mongo/mgkey:/data/mgkey \ + mongo --keyFile=/data/mgkey --replSet=skynet +``` + +Regular docker run command: + +``` +docker run \ + --rm \ + --name mg \ + -p 27017:27017 \ + -v /home/user/skynet-webportal/docker/data/mongo/db:/data/db \ + -v /home/user/skynet-webportal/docker/data/mongo/mgkey:/data/mgkey \ + mongo --keyFile=/data/mgkey --replSet=skynet +``` + +Cluster initialisation mongo command: + +``` +rs.initiate( + { + _id : "skynet", + members: [ + { _id : 0, host : "mongo:27017" } + ] + } +) +``` + +Add more nodes when they are ready: + +``` +rs.add("second.node.net:27017") +``` + +### Kratos & Oathkeeper Setup + +[Kratos](https://www.ory.sh/kratos) is our user management system of choice and +[Oathkeeper](https://www.ory.sh/oathkeeper) is the identity and access proxy. + +Most of the needed config is already under `docker/kratos`. The only two things that need to be changed are the config +for Kratos that might contain you email server password, and the JWKS Oathkeeper uses to sign its JWT tokens. + +Make sure to create your own`docker/kratos/config/kratos.yml` by copying the `kratos.yml.sample` in the same directory. +Also make sure to never add that file to source control because it will most probably contain your email password in +plain text! + +To override the JWKS you will need to directly edit +`docker/kratos/oathkeeper/id_token.jwks.json` and replace it with your generated key set. If you don't know how to +generate a key set you can use this code: + +```go +package main + +import ( + "encoding/json" + "log" + "os" + + "github.com/ory/hydra/jwk" +) + +func main() { + gen := jwk.RS256Generator{ + KeyLength: 2048, + } + jwks, err := gen.Generate("", "sig") + if err != nil { + log.Fatal(err) + } + jsonbuf, err := json.MarshalIndent(jwks, "", " ") + if err != nil { + log.Fatal("failed to generate JSON: %s", err) + } + os.Stdout.Write(jsonbuf) +} +``` + +While you can directly put the output of this programme into the file mentioned above, you can also remove the public +key from the set and change the `kid` of the private key to not include the prefix `private:`. + +### CockroachDB Setup + +Kratos uses CockroachDB to store its data. For that data to be shared across all nodes that comprise your portal cluster +setup, we need to set up a CockroachDB cluster, complete with secure communication. + +#### Generate the certificates for secure communication + +For a detailed walk-through, please check [this guide](https://www.cockroachlabs.com/docs/v20.2/secure-a-cluster.html) +out. + +Steps: + +1. Start a local cockroach docker instance: + `docker run -d -v ":/cockroach/cockroach-secure" --name=crdb cockroachdb/cockroach start --insecure` +1. Get a shall into that instance: `docker exec -it crdb /bin/bash` +1. Go to the directory we which we mapped to a local dir: `cd /cockroach/cockroach-secure` +1. Create the subdirectories in which to create certificates and keys: `mkdir certs my-safe-directory` +1. Create the CA (Certificate Authority) certificate and key + pair: `cockroach cert create-ca --certs-dir=certs --ca-key=my-safe-directory/ca.key` +1. Create a client certificate and key pair for the root + user: `cockroach cert create-client root --certs-dir=certs --ca-key=my-safe-directory/ca.key` +1. Create the certificate and key pair for your + nodes: `cockroach cert create-node cockroach mynode.siasky.net --certs-dir=certs --ca-key=my-safe-directory/ca.key`. + Don't forget the `cockroach` node name - it's needed by our docker-compose setup. If you want to create certificates + for more nodes, just delete the `node.*` files (after you've finished the next steps for this node!) and re-run the + above command with the new node name. +1. Put the contents of the `certs` folder under `docker/cockroach/certs/*` under your portal's root dir and store the + content of `my-safe-directory` somewhere safe. +1. Put _another copy_ of those certificates under `docker/kratos/cr_certs` and change permissions of the `*.key` files, + so they can be read by anyone (644). + +#### Configure your CockroachDB node + +There is some configuration that needs to be added to your `.env`file, namely: + +1. CR_NODE - the name of your node +1. CR_IP - the public IP of your node +1. CR_CLUSTER_NODES - a list of IPs and ports which make up your cluster, e.g. + `95.216.13.185:26257,147.135.37.21:26257,144.76.136.122:26257`. This will be the list of nodes that will make up your + cluster, so make sure those are accurate. + ## Contributing ### Testing Your Code -Before pushing your code you should verify that it will pass our online test -suite. +Before pushing your code, you should verify that it will pass our online test suite. **Cypress Tests** Verify the Cypress test suite by doing the following: diff --git a/docker-compose.accounts.yml b/docker-compose.accounts.yml new file mode 100644 index 00000000..22d24541 --- /dev/null +++ b/docker-compose.accounts.yml @@ -0,0 +1,167 @@ +version: "3.7" + +x-logging: &default-logging + driver: json-file + options: + max-size: "10m" + max-file: "3" + +services: + webapp: + build: + args: + WITH_ACCOUNTS: 1 # enable accounts frontend + + nginx: + environment: + - ACCOUNTS_ENABLED=1 + volumes: + - ./docker/accounts/nginx.account.conf:/etc/nginx/conf.extra.d/nginx.account.conf:ro + depends_on: + - accounts + + accounts: + build: + context: ./docker/accounts + dockerfile: Dockerfile + container_name: accounts + restart: unless-stopped + logging: *default-logging + env_file: + - .env + environment: + - SKYNET_DB_HOST=${SKYNET_DB_HOST} + - SKYNET_DB_PORT=${SKYNET_DB_PORT} + - SKYNET_DB_USER=${SKYNET_DB_USER} + - SKYNET_DB_PASS=${SKYNET_DB_PASS} + - COOKIE_DOMAIN=${COOKIE_DOMAIN} + - COOKIE_HASH_KEY=${COOKIE_HASH_KEY} + - COOKIE_ENC_KEY=${COOKIE_ENC_KEY} + - STRIPE_API_KEY=${STRIPE_API_KEY} + - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} + - SKYNET_ACCOUNTS_LOG_LEVEL=${SKYNET_ACCOUNTS_LOG_LEVEL} + - KRATOS_ADDR=${KRATOS_ADDR} + - OATHKEEPER_ADDR=${OATHKEEPER_ADDR} + expose: + - 3000 + networks: + shared: + ipv4_address: 10.10.10.70 + depends_on: + - mongo + - oathkeeper + + mongo: + image: mongo:4.4.1 + command: --keyFile=/data/mgkey --replSet=skynet + container_name: mongo + restart: unless-stopped + logging: *default-logging + volumes: + - ./docker/data/mongo/db:/data/db + - ./docker/data/mongo/mgkey:/data/mgkey:rw + networks: + shared: + ipv4_address: 10.10.10.71 + ports: + - "27017:27017" + + kratos-migrate: + image: oryd/kratos:v0.5.5-alpha.1 + container_name: kratos-migrate + restart: "no" + logging: *default-logging + environment: + - DSN=cockroach://root@cockroach:26257/defaultdb?max_conns=20&max_idle_conns=4&sslmode=verify-full&sslcert=/certs/node.crt&sslkey=/certs/node.key&sslrootcert=/certs/ca.crt + - SQA_OPT_OUT=true + volumes: + - ./docker/kratos/config:/etc/config/kratos + - ./docker/data/cockroach/sqlite:/var/lib/sqlite + - ./docker/kratos/cr_certs:/certs + command: -c /etc/config/kratos/kratos.yml migrate sql -e --yes + networks: + shared: + ipv4_address: 10.10.10.80 + depends_on: + - cockroach + + kratos: + image: oryd/kratos:v0.5.5-alpha.1 + container_name: kratos + restart: unless-stopped + logging: *default-logging + expose: + - 4433 # public + - 4434 # admin + environment: + - DSN=cockroach://root@cockroach:26257/defaultdb?max_conns=20&max_idle_conns=4&sslmode=verify-full&sslcert=/certs/node.crt&sslkey=/certs/node.key&sslrootcert=/certs/ca.crt + - LOG_LEVEL=trace + - SERVE_PUBLIC_BASE_URL=${SKYNET_DASHBOARD_URL}/.ory/kratos/public/ + - SQA_OPT_OUT=true + command: serve -c /etc/config/kratos/kratos.yml + volumes: + - ./docker/kratos/config:/etc/config/kratos + - ./docker/data/cockroach/sqlite:/var/lib/sqlite + - ./docker/kratos/cr_certs:/certs + networks: + shared: + ipv4_address: 10.10.10.81 + depends_on: + - kratos-migrate + + dashboard: + build: + context: ./packages/dashboard + dockerfile: Dockerfile + container_name: dashboard + restart: unless-stopped + logging: *default-logging + env_file: + - .env + environment: + - NEXT_PUBLIC_SKYNET_PORTAL_API=${SKYNET_PORTAL_API} + - NEXT_PUBLIC_SKYNET_DASHBOARD_URL=${SKYNET_DASHBOARD_URL} + - NEXT_PUBLIC_KRATOS_BROWSER_URL=${SKYNET_DASHBOARD_URL}/.ory/kratos/public + - NEXT_PUBLIC_KRATOS_PUBLIC_URL=${SKYNET_DASHBOARD_URL}/.ory/kratos/public + - NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY} + volumes: + - ./docker/data/dashboard/.next:/usr/app/.next + networks: + shared: + ipv4_address: 10.10.10.85 + expose: + - 3000 + + oathkeeper: + image: oryd/oathkeeper:v0.38 + container_name: oathkeeper + expose: + - 4455 + - 4456 + command: serve proxy -c "/etc/config/oathkeeper/oathkeeper.yml" + environment: + - LOG_LEVEL=debug + volumes: + - ./docker/kratos/oathkeeper:/etc/config/oathkeeper + restart: on-failure + networks: + shared: + ipv4_address: 10.10.10.83 + depends_on: + - kratos + + cockroach: + image: cockroachdb/cockroach:v20.2.3 + container_name: cockroach + env_file: + - .env + command: start --advertise-addr=${CR_IP} --join=${CR_CLUSTER_NODES} --certs-dir=/certs --listen-addr=0.0.0.0:26257 --http-addr=0.0.0.0:8080 + volumes: + - ./docker/data/cockroach/sqlite:/cockroach/cockroach-data + - ./docker/cockroach/certs:/certs + ports: + - "4080:8080" + - "26257:26257" + networks: + shared: + ipv4_address: 10.10.10.84 diff --git a/docker-compose.uploads.yml b/docker-compose.uploads.yml new file mode 100644 index 00000000..c7d3043a --- /dev/null +++ b/docker-compose.uploads.yml @@ -0,0 +1,12 @@ +version: "3.7" + +services: + nginx: + build: + context: ./docker/nginx + dockerfile: Dockerfile.bionic + args: + RESTY_ADD_PACKAGE_BUILDDEPS: git + RESTY_EVAL_PRE_CONFIGURE: git clone https://github.com/fdintino/nginx-upload-module /tmp/nginx-upload-module + RESTY_CONFIG_OPTIONS_MORE: --add-module=/tmp/nginx-upload-module + RESTY_EVAL_POST_MAKE: /usr/local/openresty/luajit/bin/luarocks install luasocket diff --git a/docker-compose.yml b/docker-compose.yml index 79dc437c..4fd2e795 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -166,18 +166,3 @@ services: depends_on: - handshake - handshake-api - - mongo: - image: mongo:4.4.1 - command: --keyFile=/data/mgkey --replSet=skynet - container_name: mongo - restart: unless-stopped - logging: *default-logging - volumes: - - ./docker/data/mongo/db:/data/db - - ./docker/data/mongo/mgkey:/data/mgkey:rw - networks: - shared: - ipv4_address: 10.10.10.70 - ports: - - "27017:27017" diff --git a/docker/accounts/Dockerfile b/docker/accounts/Dockerfile new file mode 100644 index 00000000..8be44370 --- /dev/null +++ b/docker/accounts/Dockerfile @@ -0,0 +1,20 @@ +FROM golang:1.15 +LABEL maintainer="NebulousLabs " + +ENV GOOS linux +ENV GOARCH amd64 + +WORKDIR /root + +RUN git clone --single-branch --branch main https://github.com/NebulousLabs/skynet-accounts.git && \ + cd skynet-accounts && \ + go mod download && \ + make release + +ENV SKYNET_DB_HOST="localhost" +ENV SKYNET_DB_PORT="27017" +ENV SKYNET_DB_USER="username" +ENV SKYNET_DB_PASS="password" +ENV SKYNET_ACCOUNTS_PORT=3000 + +ENTRYPOINT ["skynet-accounts"] diff --git a/docker/accounts/nginx.account.conf b/docker/accounts/nginx.account.conf new file mode 100644 index 00000000..f3705200 --- /dev/null +++ b/docker/accounts/nginx.account.conf @@ -0,0 +1,20 @@ +server { + listen 80; + listen [::]:80; + server_name account.*; + + location / { + proxy_redirect http://127.0.0.1/ https://$host/; + proxy_pass http://oathkeeper:4455; + } +} + +server { + listen 80; + listen [::]:80; + server_name secure.*; + + if ($host ~ secure.(.*)) { + return 301 $scheme://account.$1$request_uri; + } +} diff --git a/docker/cockroach/certs/README.md b/docker/cockroach/certs/README.md new file mode 100644 index 00000000..fd957133 --- /dev/null +++ b/docker/cockroach/certs/README.md @@ -0,0 +1,2 @@ +This directory needs to contain all certificates needed by this cockroachdb node. Those can be generated by the steps +outlined in the README in the root directory, under "Setting up CockroachDB". diff --git a/docker/handshake/Dockerfile b/docker/handshake/Dockerfile index 09525735..39ca14f2 100644 --- a/docker/handshake/Dockerfile +++ b/docker/handshake/Dockerfile @@ -1,8 +1,8 @@ -FROM node:15.8.0-alpine +FROM node:15.12.0-alpine WORKDIR /opt/hsd -RUN apk add --no-cache bash unbound-dev gmp-dev g++ gcc make python2 git +RUN apk update && apk add bash unbound-dev gmp-dev g++ gcc make python2 git RUN git clone https://github.com/handshake-org/hsd.git /opt/hsd RUN npm install --production diff --git a/docker/kratos/config/identity.schema.json b/docker/kratos/config/identity.schema.json new file mode 100644 index 00000000..781fc761 --- /dev/null +++ b/docker/kratos/config/identity.schema.json @@ -0,0 +1,31 @@ +{ + "$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Person", + "type": "object", + "properties": { + "traits": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "E-Mail", + "minLength": 3, + "ory.sh/kratos": { + "credentials": { + "password": { + "identifier": true + } + }, + "recovery": { + "via": "email" + } + } + } + }, + "required": ["email"], + "additionalProperties": true + } + } +} diff --git a/docker/kratos/config/kratos.yml.sample b/docker/kratos/config/kratos.yml.sample new file mode 100644 index 00000000..15442f0f --- /dev/null +++ b/docker/kratos/config/kratos.yml.sample @@ -0,0 +1,86 @@ +version: v0.5.5-alpha.1 + +dsn: memory + +serve: + public: + base_url: http://127.0.0.1/ + cors: + enabled: true + admin: + base_url: http://127.0.0.1/admin/ + +selfservice: + default_browser_return_url: http://127.0.0.1/ + whitelisted_return_urls: + - http://127.0.0.1/ + + methods: + password: + enabled: true + + flows: + error: + ui_url: http://127.0.0.1/error + + settings: + ui_url: http://127.0.0.1/settings + privileged_session_max_age: 15m + + recovery: + enabled: true + ui_url: http://127.0.0.1/recovery + + verification: + enabled: true + ui_url: http://127.0.0.1/verify + after: + default_browser_return_url: http://127.0.0.1/ + + logout: + after: + default_browser_return_url: http://127.0.0.1/auth/login + + login: + ui_url: http://127.0.0.1/auth/login + lifespan: 10m + + registration: + lifespan: 10m + ui_url: http://127.0.0.1/auth/registration + after: + password: + hooks: + - hook: session + +log: + level: debug + format: text + leak_sensitive_values: true + +password: + max_breaches: 100 + +secrets: + cookie: + - PLEASE-CHANGE-ME-I-AM-VERY-INSECURE + +session: + cookie: + domain: account.siasky.net + lifespan: "720h" + +hashers: + argon2: + parallelism: 1 + memory: 131072 + iterations: 2 + salt_length: 16 + key_length: 16 + +identity: + default_schema_url: file:///etc/config/kratos/identity.schema.json + +courier: + smtp: + connection_uri: smtps://test:test@mailslurper:1025/?skip_ssl_verify=true diff --git a/docker/kratos/config/oidc/identity.traits.schema.json b/docker/kratos/config/oidc/identity.traits.schema.json new file mode 100644 index 00000000..62de3d1b --- /dev/null +++ b/docker/kratos/config/oidc/identity.traits.schema.json @@ -0,0 +1,37 @@ +{ + "$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Person", + "type": "object", + "properties": { + "traits": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "E-Mail", + "minLength": 3, + "ory.sh/kratos": { + "credentials": { + "password": { + "identifier": true + } + }, + "verification": { + "via": "email" + }, + "recovery": { + "via": "email" + } + } + }, + "website": { + "type": "object" + } + }, + "required": ["website", "email"], + "additionalProperties": false + } + } +} diff --git a/docker/kratos/config/oidc/oidc.github.jsonnet b/docker/kratos/config/oidc/oidc.github.jsonnet new file mode 100644 index 00000000..06b92bf9 --- /dev/null +++ b/docker/kratos/config/oidc/oidc.github.jsonnet @@ -0,0 +1,17 @@ +local claims = { + email_verified: false +} + std.extVar('claims'); + +{ + identity: { + traits: { + // Allowing unverified email addresses enables account + // enumeration attacks, especially if the value is used for + // e.g. verification or as a password login identifier. + // + // Therefore we only return the email if it (a) exists and (b) is marked verified + // by GitHub. + [if "email" in claims && claims.email_verified then "email" else null]: claims.email, + }, + }, +} diff --git a/docker/kratos/cr_certs/README.md b/docker/kratos/cr_certs/README.md new file mode 100644 index 00000000..47c143eb --- /dev/null +++ b/docker/kratos/cr_certs/README.md @@ -0,0 +1,7 @@ +This directory needs to contain all certificates needed by this cockroachdb node. Those can be generated by the steps +outlined in the README in the root directory, under "Setting up CockroachDB". + +The only difference between the files here and those under +`docker/cockroach/certs` is that the files here need to be readable by anyone, while the files under `cockroach` need to +have their original access rights +(all *.key files should be 600 instead of 644 there). diff --git a/docker/kratos/oathkeeper/access-rules.yml b/docker/kratos/oathkeeper/access-rules.yml new file mode 100644 index 00000000..020b6a27 --- /dev/null +++ b/docker/kratos/oathkeeper/access-rules.yml @@ -0,0 +1,116 @@ +- id: "ory:kratos:public" + upstream: + preserve_host: true + url: "http://kratos:4433" + strip_path: /.ory/kratos/public + match: + url: "http://oathkeeper:4455/.ory/kratos/public/<**>" + methods: + - GET + - POST + - PUT + - DELETE + - PATCH + authenticators: + - handler: noop + authorizer: + handler: allow + mutators: + - handler: noop + +- id: "dashboard:anonymous" + upstream: + preserve_host: true + url: "http://dashboard:3000" + match: + url: "http://oathkeeper:4455/<{_next/*,auth/*,recovery,verify,error,favicon.ico}{/,}>" + methods: + - GET + authenticators: + - handler: anonymous + authorizer: + handler: allow + mutators: + - handler: noop + +- id: "dashboard:protected" + upstream: + preserve_host: true + url: "http://dashboard:3000" + match: + url: "http://oathkeeper:4455/<{,api/*,settings,uploads,downloads,payments}>" + methods: + - GET + - POST + - PUT + - DELETE + - PATCH + authenticators: + - handler: cookie_session + authorizer: + handler: allow + mutators: + - handler: id_token + - handler: header + config: + headers: + X-User: "{{ print .Subject }}" + errors: + - handler: redirect + config: + to: http://127.0.0.1/auth/login + +- id: "accounts:anonymous" + upstream: + preserve_host: true + url: "http://accounts:3000" + match: + url: "http://oathkeeper<{,:4455}>/<{stripe/prices,stripe/webhook}>" + methods: + - GET + - POST + authenticators: + - handler: anonymous + authorizer: + handler: allow + mutators: + - handler: noop + +- id: "accounts:public" + upstream: + preserve_host: true + url: "http://accounts:3000" + match: + url: "http://oathkeeper<{,:4455}>/<{user/limits}>" + methods: + - GET + authenticators: + - handler: cookie_session + - handler: noop + authorizer: + handler: allow + mutators: + - handler: id_token + +- id: "accounts:protected" + upstream: + preserve_host: true + url: "http://accounts:3000" + match: + url: "http://oathkeeper<{,:4455}>/<{login,logout,user,user/uploads,user/downloads,user/stats}>" + methods: + - GET + - POST + - PUT + - DELETE + - PATCH + authenticators: + - handler: cookie_session + authorizer: + handler: allow + mutators: + - handler: id_token + errors: + - handler: redirect + config: + to: http://127.0.0.1/auth/login diff --git a/docker/kratos/oathkeeper/oathkeeper.yml b/docker/kratos/oathkeeper/oathkeeper.yml new file mode 100644 index 00000000..6436c2ee --- /dev/null +++ b/docker/kratos/oathkeeper/oathkeeper.yml @@ -0,0 +1,94 @@ +log: + level: debug + format: json + +serve: + proxy: + cors: + enabled: true + allowed_origins: + - "*" + allowed_methods: + - POST + - GET + - PUT + - PATCH + - DELETE + allowed_headers: + - Authorization + - Content-Type + exposed_headers: + - Content-Type + allow_credentials: true + debug: true + +errors: + fallback: + - json + + handlers: + redirect: + enabled: true + config: + to: http://127.0.0.1/auth/login + when: + - error: + - unauthorized + - forbidden + request: + header: + accept: + - text/html + json: + enabled: true + config: + verbose: true + +access_rules: + matching_strategy: glob + repositories: + - file:///etc/config/oathkeeper/access-rules.yml + +authenticators: + anonymous: + enabled: true + config: + subject: guest + + cookie_session: + enabled: true + config: + check_session_url: http://kratos:4433/sessions/whoami + preserve_path: true + extra_from: "@this" + subject_from: "identity.id" + only: + - ory_kratos_session + + noop: + enabled: true + +authorizers: + allow: + enabled: true + +mutators: + noop: + enabled: true + + header: + enabled: true + config: + headers: + X-User: "{{ print .Subject }}" + + id_token: + enabled: true + config: + issuer_url: http://oathkeeper:4455/ + jwks_url: file:///etc/config/oathkeeper/id_token.jwks.json + ttl: 720h + claims: | + { + "session": {{ .Extra | toJson }} + } diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile index 71e45a70..bba36f7b 100644 --- a/docker/nginx/Dockerfile +++ b/docker/nginx/Dockerfile @@ -1,7 +1,7 @@ FROM openresty/openresty:1.19.3.1-2-bionic # RUN apt-get update -qq && apt-get install cron logrotate -qq -# RUN luarocks install luasocket +RUN luarocks install luasocket # CMD ["sh", "-c", "service cron start;", "/usr/local/openresty/bin/openresty -g daemon off;"] CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"] diff --git a/docker/nginx/Dockerfile.bionic b/docker/nginx/Dockerfile.bionic new file mode 100644 index 00000000..d51e4c8a --- /dev/null +++ b/docker/nginx/Dockerfile.bionic @@ -0,0 +1,185 @@ +# Dockerfile - Ubuntu Bionic +# https://github.com/openresty/docker-openresty + +ARG RESTY_IMAGE_BASE="ubuntu" +ARG RESTY_IMAGE_TAG="bionic" + +FROM ${RESTY_IMAGE_BASE}:${RESTY_IMAGE_TAG} + +LABEL maintainer="Evan Wies " + +# Docker Build Arguments +ARG RESTY_IMAGE_BASE="ubuntu" +ARG RESTY_IMAGE_TAG="bionic" +ARG RESTY_VERSION="1.19.3.1" +ARG RESTY_LUAROCKS_VERSION="3.5.0" +ARG RESTY_OPENSSL_VERSION="1.1.1i" +ARG RESTY_OPENSSL_PATCH_VERSION="1.1.1f" +ARG RESTY_OPENSSL_URL_BASE="https://www.openssl.org/source" +ARG RESTY_PCRE_VERSION="8.44" +ARG RESTY_J="1" +ARG RESTY_CONFIG_OPTIONS="\ + --with-compat \ + --with-file-aio \ + --with-http_addition_module \ + --with-http_auth_request_module \ + --with-http_dav_module \ + --with-http_flv_module \ + --with-http_geoip_module=dynamic \ + --with-http_gunzip_module \ + --with-http_gzip_static_module \ + --with-http_image_filter_module=dynamic \ + --with-http_mp4_module \ + --with-http_random_index_module \ + --with-http_realip_module \ + --with-http_secure_link_module \ + --with-http_slice_module \ + --with-http_ssl_module \ + --with-http_stub_status_module \ + --with-http_sub_module \ + --with-http_v2_module \ + --with-http_xslt_module=dynamic \ + --with-ipv6 \ + --with-mail \ + --with-mail_ssl_module \ + --with-md5-asm \ + --with-pcre-jit \ + --with-sha1-asm \ + --with-stream \ + --with-stream_ssl_module \ + --with-threads \ + " +ARG RESTY_CONFIG_OPTIONS_MORE="" +ARG RESTY_LUAJIT_OPTIONS="--with-luajit-xcflags='-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT'" + +ARG RESTY_ADD_PACKAGE_BUILDDEPS="" +ARG RESTY_ADD_PACKAGE_RUNDEPS="" +ARG RESTY_EVAL_PRE_CONFIGURE="" +ARG RESTY_EVAL_POST_MAKE="" + +# These are not intended to be user-specified +ARG _RESTY_CONFIG_DEPS="--with-pcre \ + --with-cc-opt='-DNGX_LUA_ABORT_AT_PANIC -I/usr/local/openresty/pcre/include -I/usr/local/openresty/openssl/include' \ + --with-ld-opt='-L/usr/local/openresty/pcre/lib -L/usr/local/openresty/openssl/lib -Wl,-rpath,/usr/local/openresty/pcre/lib:/usr/local/openresty/openssl/lib' \ + " + +LABEL resty_image_base="${RESTY_IMAGE_BASE}" +LABEL resty_image_tag="${RESTY_IMAGE_TAG}" +LABEL resty_version="${RESTY_VERSION}" +LABEL resty_luarocks_version="${RESTY_LUAROCKS_VERSION}" +LABEL resty_openssl_version="${RESTY_OPENSSL_VERSION}" +LABEL resty_openssl_patch_version="${RESTY_OPENSSL_PATCH_VERSION}" +LABEL resty_openssl_url_base="${RESTY_OPENSSL_URL_BASE}" +LABEL resty_pcre_version="${RESTY_PCRE_VERSION}" +LABEL resty_config_options="${RESTY_CONFIG_OPTIONS}" +LABEL resty_config_options_more="${RESTY_CONFIG_OPTIONS_MORE}" +LABEL resty_config_deps="${_RESTY_CONFIG_DEPS}" +LABEL resty_add_package_builddeps="${RESTY_ADD_PACKAGE_BUILDDEPS}" +LABEL resty_add_package_rundeps="${RESTY_ADD_PACKAGE_RUNDEPS}" +LABEL resty_eval_pre_configure="${RESTY_EVAL_PRE_CONFIGURE}" +LABEL resty_eval_post_make="${RESTY_EVAL_POST_MAKE}" + + +RUN DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + gettext-base \ + libgd-dev \ + libgeoip-dev \ + libncurses5-dev \ + libperl-dev \ + libreadline-dev \ + libxslt1-dev \ + make \ + perl \ + unzip \ + zlib1g-dev \ + ${RESTY_ADD_PACKAGE_BUILDDEPS} \ + ${RESTY_ADD_PACKAGE_RUNDEPS} \ + && cd /tmp \ + && if [ -n "${RESTY_EVAL_PRE_CONFIGURE}" ]; then eval $(echo ${RESTY_EVAL_PRE_CONFIGURE}); fi \ + && curl -fSL "${RESTY_OPENSSL_URL_BASE}/openssl-${RESTY_OPENSSL_VERSION}.tar.gz" -o openssl-${RESTY_OPENSSL_VERSION}.tar.gz \ + && tar xzf openssl-${RESTY_OPENSSL_VERSION}.tar.gz \ + && cd openssl-${RESTY_OPENSSL_VERSION} \ + && if [ $(echo ${RESTY_OPENSSL_VERSION} | cut -c 1-5) = "1.1.1" ] ; then \ + echo 'patching OpenSSL 1.1.1 for OpenResty' \ + && curl -s https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-${RESTY_OPENSSL_PATCH_VERSION}-sess_set_get_cb_yield.patch | patch -p1 ; \ + fi \ + && if [ $(echo ${RESTY_OPENSSL_VERSION} | cut -c 1-5) = "1.1.0" ] ; then \ + echo 'patching OpenSSL 1.1.0 for OpenResty' \ + && curl -s https://raw.githubusercontent.com/openresty/openresty/ed328977028c3ec3033bc25873ee360056e247cd/patches/openssl-1.1.0j-parallel_build_fix.patch | patch -p1 \ + && curl -s https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-${RESTY_OPENSSL_PATCH_VERSION}-sess_set_get_cb_yield.patch | patch -p1 ; \ + fi \ + && ./config \ + no-threads shared zlib -g \ + enable-ssl3 enable-ssl3-method \ + --prefix=/usr/local/openresty/openssl \ + --libdir=lib \ + -Wl,-rpath,/usr/local/openresty/openssl/lib \ + && make -j${RESTY_J} \ + && make -j${RESTY_J} install_sw \ + && cd /tmp \ + && curl -fSL https://ftp.pcre.org/pub/pcre/pcre-${RESTY_PCRE_VERSION}.tar.gz -o pcre-${RESTY_PCRE_VERSION}.tar.gz \ + && tar xzf pcre-${RESTY_PCRE_VERSION}.tar.gz \ + && cd /tmp/pcre-${RESTY_PCRE_VERSION} \ + && ./configure \ + --prefix=/usr/local/openresty/pcre \ + --disable-cpp \ + --enable-jit \ + --enable-utf \ + --enable-unicode-properties \ + && make -j${RESTY_J} \ + && make -j${RESTY_J} install \ + && cd /tmp \ + && curl -fSL https://openresty.org/download/openresty-${RESTY_VERSION}.tar.gz -o openresty-${RESTY_VERSION}.tar.gz \ + && tar xzf openresty-${RESTY_VERSION}.tar.gz \ + && cd /tmp/openresty-${RESTY_VERSION} \ + && eval ./configure -j${RESTY_J} ${_RESTY_CONFIG_DEPS} ${RESTY_CONFIG_OPTIONS} ${RESTY_CONFIG_OPTIONS_MORE} ${RESTY_LUAJIT_OPTIONS} \ + && make -j${RESTY_J} \ + && make -j${RESTY_J} install \ + && cd /tmp \ + && rm -rf \ + openssl-${RESTY_OPENSSL_VERSION}.tar.gz openssl-${RESTY_OPENSSL_VERSION} \ + pcre-${RESTY_PCRE_VERSION}.tar.gz pcre-${RESTY_PCRE_VERSION} \ + openresty-${RESTY_VERSION}.tar.gz openresty-${RESTY_VERSION} \ + && curl -fSL https://luarocks.github.io/luarocks/releases/luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz -o luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \ + && tar xzf luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \ + && cd luarocks-${RESTY_LUAROCKS_VERSION} \ + && ./configure \ + --prefix=/usr/local/openresty/luajit \ + --with-lua=/usr/local/openresty/luajit \ + --lua-suffix=jit-2.1.0-beta3 \ + --with-lua-include=/usr/local/openresty/luajit/include/luajit-2.1 \ + && make build \ + && make install \ + && cd /tmp \ + && if [ -n "${RESTY_EVAL_POST_MAKE}" ]; then eval $(echo ${RESTY_EVAL_POST_MAKE}); fi \ + && rm -rf luarocks-${RESTY_LUAROCKS_VERSION} luarocks-${RESTY_LUAROCKS_VERSION}.tar.gz \ + && if [ -n "${RESTY_ADD_PACKAGE_BUILDDEPS}" ]; then DEBIAN_FRONTEND=noninteractive apt-get remove -y --purge ${RESTY_ADD_PACKAGE_BUILDDEPS} ; fi \ + && DEBIAN_FRONTEND=noninteractive apt-get autoremove -y \ + && mkdir -p /var/run/openresty \ + && ln -sf /dev/stdout /usr/local/openresty/nginx/logs/access.log \ + && ln -sf /dev/stderr /usr/local/openresty/nginx/logs/error.log + +# Add additional binaries into PATH for convenience +ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin + +# Add LuaRocks paths +# If OpenResty changes, these may need updating: +# /usr/local/openresty/bin/resty -e 'print(package.path)' +# /usr/local/openresty/bin/resty -e 'print(package.cpath)' +ENV LUA_PATH="/usr/local/openresty/site/lualib/?.ljbc;/usr/local/openresty/site/lualib/?/init.ljbc;/usr/local/openresty/lualib/?.ljbc;/usr/local/openresty/lualib/?/init.ljbc;/usr/local/openresty/site/lualib/?.lua;/usr/local/openresty/site/lualib/?/init.lua;/usr/local/openresty/lualib/?.lua;/usr/local/openresty/lualib/?/init.lua;./?.lua;/usr/local/openresty/luajit/share/luajit-2.1.0-beta3/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/openresty/luajit/share/lua/5.1/?.lua;/usr/local/openresty/luajit/share/lua/5.1/?/init.lua" + +ENV LUA_CPATH="/usr/local/openresty/site/lualib/?.so;/usr/local/openresty/lualib/?.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/openresty/luajit/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so;/usr/local/openresty/luajit/lib/lua/5.1/?.so" + +# Copy nginx configuration files +COPY nginx.conf /usr/local/openresty/nginx/conf/nginx.conf +COPY nginx.vh.default.conf /etc/nginx/conf.d/default.conf + +CMD ["/usr/local/openresty/bin/openresty", "-g", "daemon off;"] + +# Use SIGQUIT instead of default SIGTERM to cleanly drain requests +# See https://github.com/openresty/docker-openresty/blob/master/README.md#tips--pitfalls +STOPSIGNAL SIGQUIT \ No newline at end of file diff --git a/docker/nginx/conf.d/client.conf b/docker/nginx/conf.d/client.conf index 4cd36189..4515bda9 100644 --- a/docker/nginx/conf.d/client.conf +++ b/docker/nginx/conf.d/client.conf @@ -24,8 +24,8 @@ limit_conn_zone $binary_remote_addr zone=downloads_by_ip:10m; limit_req_status 429; limit_conn_status 429; -# since we are proxying request to nginx from caddy, access logs will contain caddy's ip address -# as the request address so we need to use real_ip_header module to use ip address from +# since we are proxying request to nginx from caddy, access logs will contain caddy's ip address +# as the request address so we need to use real_ip_header module to use ip address from # X-Forwarded-For header as a real ip address of the request set_real_ip_from 10.0.0.0/8; set_real_ip_from 127.0.0.1/32; @@ -57,6 +57,7 @@ server { rewrite ^/portals /skynet/portals permanent; rewrite ^/stats /skynet/stats permanent; rewrite ^/skynet/blacklist /skynet/blocklist permanent; + rewrite ^/account/(.*) https://account.$domain.$tld/$1 permanent; location / { # This is only safe workaround to reroute based on some conditions @@ -113,11 +114,11 @@ server { local file_exists = io.open("/data/nginx/skynet/prevstats.lua") if file_exists then file_exists.close() - + -- because response data is chunked, we need to concat ngx.arg[1] until -- last chunk is received (when ngx.arg[2] is set to true) ngx.var.response_body = ngx.var.response_body .. ngx.arg[1] - + if ngx.arg[2] then local json = require('cjson') local prevstats = require('/data/nginx/skynet/prevstats') @@ -153,11 +154,11 @@ server { # variable definititions - we need to define a variable to be able to access it in lua by ngx.var.something set $skylink ''; # placeholder for the raw 46 bit skylink set $rest ''; # placeholder for the rest of the url that gets appended to skylink (path and args) - + # resolve handshake domain by requesting to /hnsres endpoint and assign correct values to $skylink and $rest access_by_lua_block { local json = require('cjson') - + -- match the request_uri and extract the hns domain and anything that is passed in the uri after it -- example: /hns/something/foo/bar?baz=1 matches: -- > hns_domain_name: something @@ -222,9 +223,6 @@ server { end } - # overwrite the Cache-Control header to only cache for 60s in case the domain gets updated - more_set_headers 'Cache-Control: public, max-age=60'; - # we proxy to another nginx location rather than directly to siad because we don't want to deal with caching here proxy_pass http://127.0.0.1/$skylink$rest; @@ -255,7 +253,7 @@ server { # and we are using it currently for caching registry resolutions from /hns calls location /skynet/registry/cached { internal; # internal endpoint only - access_log off; # do not log traffic + access_log off; # do not log traffic proxy_cache skynet; proxy_cache_key publickey=$arg_publickey&datakey=$arg_datakey; # cache based on publickey and datakey @@ -276,6 +274,40 @@ server { proxy_set_header User-Agent: Sia-Agent; proxy_read_timeout 600; # siad should timeout with 404 after 5 minutes proxy_pass http://siad/skynet/registry; + + access_by_lua_block { + -- this block runs only when accounts are enabled + if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + local res = ngx.location.capture("/accounts/user/limits", { copy_all_vars = true }) + if res.status == ngx.HTTP_OK then + local json = require('cjson') + local limits = json.decode(res.body) + if limits.registry > 0 then + ngx.sleep(limits.registry / 1000) + end + end + } + + # register the registry access in accounts service (cookies should contain jwt) + log_by_lua_block { + -- this block runs only when accounts are enabled + if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + if ngx.status == ngx.HTTP_OK or ngx.status == ngx.HTTP_NOT_FOUND then + local http = require("socket.http") + local headers = { Cookie = ngx.req.get_headers()["Cookie"] } + local method = ngx.req.get_method() == ngx.HTTP_GET and "read" or "write" + local ok, statusCode, headers, statusText = http.request { + url = "http://accounts:3000/track/registry/" .. method, + method = "POST", + headers = headers + } + if statusCode ~= ngx.HTTP_NO_CONTENT and statusCode ~= ngx.HTTP_UNAUTHORIZED then + ngx.log(ngx.ERR, "accounts endpoint /track/registry/" .. method .. " failed with error " .. statusCode) + end + end + } } location /skynet/skyfile { @@ -306,8 +338,37 @@ server { set $dir3 $3; } + # access_by_lua_block { + # -- this block runs only when accounts are enabled + # if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + # ngx.var.upload_limit_rate = 5 * 1024 * 1024 + # local res = ngx.location.capture("/accounts/user", { copy_all_vars = true }) + # if res.status == ngx.HTTP_OK then + # local json = require('cjson') + # local user = json.decode(res.body) + # ngx.var.upload_limit_rate = ngx.var.upload_limit_rate * (user.tier + 1) + # end + # } + # proxy this call to siad endpoint (make sure the ip is correct) proxy_pass http://siad/skynet/skyfile/$dir1/$dir2/$dir3$is_args$args; + + # register the upload in accounts service (cookies should contain jwt) + log_by_lua_block { + -- this block runs only when accounts are enabled + if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + local skylink = ngx.header["Skynet-Skylink"] + if skylink and ngx.status >= ngx.HTTP_OK and ngx.status < ngx.HTTP_SPECIAL_RESPONSE then + local http = require("socket.http") + local headers = { Cookie = ngx.req.get_headers()["Cookie"] } + local ok, statusCode, headers, statusText = http.request { url = "http://accounts:3000/track/upload/" .. skylink, method = "POST", headers = headers } + if statusCode ~= ngx.HTTP_NO_CONTENT and statusCode ~= ngx.HTTP_UNAUTHORIZED then + ngx.log(ngx.ERR, "accounts endpoint /track/upload/" .. skylink .. " failed with error " .. statusCode) + end + end + } } location ~ "^/(([a-zA-Z0-9-_]{46}|[a-z0-9]{55})(/.*)?)$" { @@ -322,12 +383,44 @@ server { } limit_conn downloads_by_ip 100; # ddos protection: max 100 downloads at a time - add_header Cache-Control "public, max-age=86400"; # allow consumer to cache response # we need to explicitly use set directive here because $1 will contain the skylink with # decoded whitespaces and set will re-encode it for us before passing it to proxy_pass set $skylink $1; + access_by_lua_block { + -- this block runs only when accounts are enabled + if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + local res = ngx.location.capture("/accounts/user/limits", { copy_all_vars = true }) + if res.status == ngx.HTTP_OK then + local json = require('cjson') + local limits = json.decode(res.body) + ngx.var.limit_rate = limits.download + end + } + + # register the download in accounts service (cookies should contain jwt) + log_by_lua_block { + -- this block runs only when accounts are enabled + if os.getenv("ACCOUNTS_ENABLED", "0") == "0" then return end + + local skylink = ngx.header["Skynet-Skylink"] + if skylink and ngx.status >= ngx.HTTP_OK and ngx.status < ngx.HTTP_SPECIAL_RESPONSE then + local http = require("socket.http") + local headers = { Cookie = ngx.req.get_headers()["Cookie"] } + local query = table.concat({ "status=" .. ngx.status, "bytes=" .. ngx.var.body_bytes_sent }, "&") + local ok, statusCode, headers, statusText = http.request { + url = "http://accounts:3000/track/download/" .. skylink .. "?" .. query, + method = "POST", + headers = headers + } + if statusCode ~= ngx.HTTP_NO_CONTENT and statusCode ~= ngx.HTTP_UNAUTHORIZED then + ngx.log(ngx.ERR, "accounts endpoint /track/download/" .. skylink .. " failed with error " .. statusCode) + end + end + } + proxy_read_timeout 600; proxy_set_header User-Agent: Sia-Agent; # proxy this call to siad /skynet/skylink/ endpoint (make sure the ip is correct) @@ -365,6 +458,14 @@ server { proxy_pass http://127.0.0.1/$uri?attachment=true&$args; } + location /accounts { + internal; # internal endpoint only + access_log off; # do not log traffic + + rewrite /accounts(.*) $1 break; # drop the /accounts prefix from uri + proxy_pass http://accounts:3000; + } + # include custom locations, specific to the server include /etc/nginx/conf.d/server-override/*; } diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf index 3a5b885e..4fcea569 100644 --- a/docker/nginx/nginx.conf +++ b/docker/nginx/nginx.conf @@ -26,6 +26,7 @@ worker_processes 1; #pid logs/nginx.pid; env SKYNET_PORTAL_API; # declare env variable to use it in config +env ACCOUNTS_ENABLED; # declare env variable to use it in config events { worker_connections 1024; @@ -67,4 +68,5 @@ http { header_filter_by_lua 'ngx.header["Skynet-Portal-Api"] = os.getenv("SKYNET_PORTAL_API")'; include /etc/nginx/conf.d/*.conf; + include /etc/nginx/conf.extra.d/*.conf; } diff --git a/docker/nginx/nginx.vh.default.conf b/docker/nginx/nginx.vh.default.conf new file mode 100644 index 00000000..d4aa8d5a --- /dev/null +++ b/docker/nginx/nginx.vh.default.conf @@ -0,0 +1,58 @@ +# nginx.vh.default.conf -- docker-openresty +# +# This file is installed to: +# `/etc/nginx/conf.d/default.conf` +# +# It tracks the `server` section of the upstream OpenResty's `nginx.conf`. +# +# This config (and any other configs in `etc/nginx/conf.d/`) is loaded by +# default by the `include` directive in `/usr/local/openresty/nginx/conf/nginx.conf`. +# +# See https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files +# + + +server { + listen 80; + server_name localhost; + + #charset koi8-r; + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/local/openresty/nginx/html; + index index.html index.htm; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/local/openresty/nginx/html; + } + + # proxy the PHP scripts to Apache listening on 127.0.0.1:80 + # + #location ~ \.php$ { + # proxy_pass http://127.0.0.1; + #} + + # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 + # + #location ~ \.php$ { + # root /usr/local/openresty/nginx/html; + # fastcgi_pass 127.0.0.1:9000; + # fastcgi_index index.php; + # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; + # include fastcgi_params; + #} + + # deny access to .htaccess files, if Apache's document root + # concurs with nginx's one + # + #location ~ /\.ht { + # deny all; + #} +} \ No newline at end of file diff --git a/package.json b/package.json index 06108e34..71155372 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,10 @@ "packages/*" ], "dependencies": { - "sharp": "^0.27.2" + "@tailwindcss/forms": "^0.2.1", + "autoprefixer": "^10.2.4", + "postcss": "^8.2.6", + "sharp": "^0.27.2", + "tailwindcss": "^2.0.4" } } diff --git a/packages/dashboard/.env b/packages/dashboard/.env new file mode 100644 index 00000000..bb640cd8 --- /dev/null +++ b/packages/dashboard/.env @@ -0,0 +1,4 @@ +NEXT_PUBLIC_SKYNET_PORTAL_API=https://siasky.net +NEXT_PUBLIC_SKYNET_DASHBOARD_URL=https://account.siasky.net +NEXT_PUBLIC_KRATOS_BROWSER_URL=https://account.siasky.net/.ory/kratos/public +NEXT_PUBLIC_KRATOS_PUBLIC_URL=https://account.siasky.net/.ory/kratos/public diff --git a/packages/dashboard/.gitignore b/packages/dashboard/.gitignore new file mode 100644 index 00000000..ea47d16a --- /dev/null +++ b/packages/dashboard/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env defaults +!.env + +# local env files +.env.local +.env.development.local +.env.test.local +.env.production.local + +# vercel +.vercel +.next diff --git a/packages/dashboard/.prettierignore b/packages/dashboard/.prettierignore new file mode 100644 index 00000000..571a2ec1 --- /dev/null +++ b/packages/dashboard/.prettierignore @@ -0,0 +1,3 @@ +.next +package.json +package-lock.json diff --git a/packages/dashboard/.prettierrc b/packages/dashboard/.prettierrc new file mode 100644 index 00000000..963354f2 --- /dev/null +++ b/packages/dashboard/.prettierrc @@ -0,0 +1,3 @@ +{ + "printWidth": 120 +} diff --git a/packages/dashboard/Dockerfile b/packages/dashboard/Dockerfile new file mode 100644 index 00000000..d5dd31eb --- /dev/null +++ b/packages/dashboard/Dockerfile @@ -0,0 +1,16 @@ +FROM node:15.12.0-alpine + +WORKDIR /usr/app + +COPY package.json . + +ENV NEXT_TELEMETRY_DISABLED 1 +RUN yarn --no-lockfile + +COPY public ./public +COPY src ./src +COPY styles ./styles +COPY postcss.config.js . +COPY tailwind.config.js . + +CMD ["sh", "-c", "env | grep -E 'NEXT_PUBLIC|KRATOS|STRIPE' > .env.local && yarn build && yarn start"] diff --git a/packages/dashboard/README.md b/packages/dashboard/README.md new file mode 100644 index 00000000..4b412a3c --- /dev/null +++ b/packages/dashboard/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/import?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json new file mode 100644 index 00000000..38f0fd0e --- /dev/null +++ b/packages/dashboard/package.json @@ -0,0 +1,43 @@ +{ + "name": "dashboard", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start" + }, + "dependencies": { + "@fontsource/metropolis": "^4.1.0", + "@ory/kratos-client": "^0.5.4-alpha.1", + "@stripe/react-stripe-js": "^1.4.0", + "@stripe/stripe-js": "^1.13.0", + "@tailwindcss/forms": "^0.2.1", + "autoprefixer": "^10.2.5", + "classnames": "^2.2.6", + "clipboardy": "^2.3.0", + "dayjs": "^1.10.4", + "express-jwt": "^6.0.0", + "fast-levenshtein": "^3.0.0", + "formik": "^2.2.6", + "http-status-codes": "^2.1.4", + "jwks-rsa": "^1.12.2", + "ky": "0.25.1", + "next": "^10.0.8", + "postcss": "^8.2.8", + "prettier": "^2.2.1", + "pretty-bytes": "^5.5.0", + "react": "17.0.1", + "react-dom": "17.0.1", + "skynet-js": "^3.0.0", + "square": "^9.0.0", + "stripe": "^8.137.0", + "superagent": "^6.1.0", + "swr": "^0.5.0", + "tailwindcss": "^2.0.3", + "yup": "^0.32.9" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.2.1" + } +} diff --git a/packages/dashboard/postcss.config.js b/packages/dashboard/postcss.config.js new file mode 100644 index 00000000..12a703d9 --- /dev/null +++ b/packages/dashboard/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/packages/dashboard/public/favicon.ico b/packages/dashboard/public/favicon.ico new file mode 100644 index 00000000..9229fbf7 Binary files /dev/null and b/packages/dashboard/public/favicon.ico differ diff --git a/packages/dashboard/src/components/Form/Message.js b/packages/dashboard/src/components/Form/Message.js new file mode 100644 index 00000000..e8ebb7e8 --- /dev/null +++ b/packages/dashboard/src/components/Form/Message.js @@ -0,0 +1,62 @@ +const types = { + error: { + backgroundColor: "bg-red-50", + titleColor: "text-red-800", + detailsColor: "text-red-700", + iconColor: "text-red-400", + icon: ( + + ), + }, + info: { + backgroundColor: "bg-blue-50", + titleColor: "text-blue-800", + detailsColor: "text-blue-700", + iconColor: "text-blue-400", + icon: ( + + ), + }, +}; + +export default function Message({ type = "info", title, items = [] }) { + const { backgroundColor, titleColor, detailsColor, iconColor, icon } = types[type]; + + return ( +
+
+
+ +
+
+ {title &&

{title}

} + {items.length > 0 && ( +
+
    1 ? "list-disc pl-5 space-y-1" : ""}`}> + {items.map((item, index) => ( +
  • {item}
  • + ))} +
+
+ )} +
+
+
+ ); +} diff --git a/packages/dashboard/src/components/Form/SelfServiceForm.js b/packages/dashboard/src/components/Form/SelfServiceForm.js new file mode 100644 index 00000000..e00f27ac --- /dev/null +++ b/packages/dashboard/src/components/Form/SelfServiceForm.js @@ -0,0 +1,104 @@ +import { useFormik, getIn, setIn } from "formik"; +import classnames from "classnames"; +import SelfServiceMessages from "./SelfServiceMessages"; + +export default function SelfServiceForm({ flow, config, fieldsConfig, title, button = "Submit" }) { + const fields = config.fields + .map((field) => ({ ...field, ...fieldsConfig[field.name] })) + .sort((a, b) => (a.position < b.position ? -1 : 1)); + const formik = useFormik({ + initialValues: fields.reduce((acc, field) => setIn(acc, field.name, field.value ?? ""), {}), + }); + + return ( +
+ {title &&

{title}

} +
+
+ {fields.map((field) => ( +
+ +
+ + + + + {field.checks && ( +
+
    + {field.checks.map((check, index) => ( +
  • +
    + + + + + +
    +
    +

    {check.label}

    +
    +
    +
    +
  • + ))} +
+
+ )} +
+
+ ))} + + + + + + {flow && } + +
+
+ ); +} diff --git a/packages/dashboard/src/components/Form/SelfServiceMessages.js b/packages/dashboard/src/components/Form/SelfServiceMessages.js new file mode 100644 index 00000000..9395e227 --- /dev/null +++ b/packages/dashboard/src/components/Form/SelfServiceMessages.js @@ -0,0 +1,45 @@ +import classnames from "classnames"; + +// const types = { +// error: { +// backgroundColor: "bg-red-50", +// titleColor: "text-red-800", +// detailsColor: "text-red-700", +// iconColor: "text-red-400", +// icon: ( +// +// ), +// }, +// info: { +// backgroundColor: "bg-blue-50", +// titleColor: "text-blue-800", +// detailsColor: "text-blue-700", +// iconColor: "text-blue-400", +// icon: ( +// +// ), +// }, +// }; + +export default function SelfServiceMessages({ messages = [] }) { + if (!messages) return null; // make sure we don't throw on invalid data + + return messages.map(({ text, type }) => ( +

+ {text} +

+ )); +} diff --git a/packages/dashboard/src/components/Layout.js b/packages/dashboard/src/components/Layout.js new file mode 100644 index 00000000..1d7fe6c2 --- /dev/null +++ b/packages/dashboard/src/components/Layout.js @@ -0,0 +1,327 @@ +import Link from "next/link"; +import { useRouter } from "next/router"; +import Head from "next/head"; +import ky from "ky/umd"; +import { useState } from "react"; +import config from "../../src/config"; + +export default function Layout({ title, children }) { + const [menuOpen, openMenu] = useState(false); + const [avatarDropdownOpen, openAvatarDropdown] = useState(false); + const router = useRouter(); + const handleSignOut = async (e) => { + e.preventDefault(); + + try { + await ky.post("/logout"); + + window.location = `${config.kratos.browser}/self-service/browser/flows/logout`; + } catch (error) { + console.log(error); // todo: handle errors with a message + } + }; + + return ( +
+ + Skynet - {title} + +
+ +
+
+

{title}

+
+
+
+ +
+
+ {children || ( +
+
+
+ )} +
+
+ +
+

© 2021 Skynet Labs Inc. All rights reserved.

+
+
+ ); +} diff --git a/packages/dashboard/src/components/Table.js b/packages/dashboard/src/components/Table.js new file mode 100644 index 00000000..e3ae6d5e --- /dev/null +++ b/packages/dashboard/src/components/Table.js @@ -0,0 +1,128 @@ +import { useEffect } from "react"; +import classnames from "classnames"; + +function Button({ children, disabled, className, ...props }) { + return ( + + ); +} + +export default function Table({ items, count, headers, actions, offset, setOffset, pageSize = 10 }) { + useEffect(() => { + if (offset < 0) setOffset(0); + else if (offset >= count && count > 0) setOffset(Math.floor(count / pageSize - 1) * pageSize); + else if (offset % pageSize) setOffset(offset - (offset % pageSize)); + }, [offset, pageSize, setOffset]); + + return ( +
+
+
+
+ + + + {headers.map(({ key, name }) => ( + + ))} + {actions.map(({ key, name }) => ( + + ))} + + + + {items && items.length ? ( + items.map((row, index) => ( + + {headers.map(({ key, formatter, href, nowrap = true }) => ( + + ))} + {actions.map(({ key, name, action }) => ( + + ))} + + )) + ) : ( + + + + )} + +
+ {name} + + {name} +
+ {(formatter ? ( + formatter(row, key) + ) : href ? ( + + {row[key]} + + ) : ( + row[key] + )) || <>—} + + + {name} + +
+ no entries +
+ {/* This example requires Tailwind CSS v2.0+ */} + +
+
+
+
+ ); +} diff --git a/packages/dashboard/src/config.js b/packages/dashboard/src/config.js new file mode 100644 index 00000000..326ec4e9 --- /dev/null +++ b/packages/dashboard/src/config.js @@ -0,0 +1,14 @@ +export default { + // https://github.com/ory/kratos-selfservice-ui-node#configuration + kratos: { + // The URL where ORY Kratos's Public API is located at. If this app and ORY Kratos are running in the same + // private network, this should be the private network address (e.g. kratos-public.svc.cluster.local) + public: process.env.NEXT_PUBLIC_KRATOS_PUBLIC_URL.replace(/\/+$/, ""), + // The URL where ORY Kratos's public API is located, when accessible from the public internet via ORY Oathkeeper. + // This could be for example http://kratos.my-app.com/. + browser: process.env.NEXT_PUBLIC_KRATOS_BROWSER_URL.replace(/\/+$/, ""), + }, + tiers: { + starter: { id: "starter", tier: 1, name: "Free", description: "Pin up to 100GB" }, + }, +}; diff --git a/packages/dashboard/src/pages/_app.js b/packages/dashboard/src/pages/_app.js new file mode 100644 index 00000000..5be206d2 --- /dev/null +++ b/packages/dashboard/src/pages/_app.js @@ -0,0 +1,21 @@ +import { Elements } from "@stripe/react-stripe-js"; +import { loadStripe } from "@stripe/stripe-js"; +import Head from "next/head"; +import "tailwindcss/tailwind.css"; +import "@fontsource/metropolis/all.css"; + +const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY); + +function MyApp({ Component, pageProps }) { + return ( + + + + Skynet + + + + ); +} + +export default MyApp; diff --git a/packages/dashboard/src/pages/api/accounts/login.js b/packages/dashboard/src/pages/api/accounts/login.js new file mode 100644 index 00000000..4890d52b --- /dev/null +++ b/packages/dashboard/src/pages/api/accounts/login.js @@ -0,0 +1,19 @@ +import superagent from "superagent"; + +export default async (req, res) => { + if (req.cookies.ory_kratos_session) { + try { + const { header } = await superagent + .post("http://oathkeeper:4455/login") + .set("cookie", `ory_kratos_session=${req.cookies.ory_kratos_session}`); + + res.setHeader("Set-Cookie", header["set-cookie"]); + res.redirect(req.query.return_to ?? "/"); + } catch (error) { + // credentials were correct but accounts service failed + res.redirect("/.ory/kratos/public/self-service/browser/flows/logout"); + } + } else { + res.redirect("/auth/login"); // redirect to login page if kratos session is missing + } +}; diff --git a/packages/dashboard/src/pages/api/square/cards.js b/packages/dashboard/src/pages/api/square/cards.js new file mode 100644 index 00000000..603da8f4 --- /dev/null +++ b/packages/dashboard/src/pages/api/square/cards.js @@ -0,0 +1,58 @@ +import { Client, Environment } from "square"; +import { StatusCodes } from "http-status-codes"; + +const client = new Client({ + environment: Environment.Sandbox, + accessToken: process.env.SQUARE_ACCESS_TOKEN, +}); + +const api = { + GET: async (req, res) => { + const user = "R7R0NY1Z8WT11D43564EEFKTYR"; // req.headers["x-user"]; + + try { + const { result: customerResult } = await client.customersApi.retrieveCustomer(user); + const { customer } = customerResult; + + res.json(customer.cards); + } catch (error) { + res.json([]); + } + }, + // POST: async (req, res) => { + // const user = req.headers["x-user"]; + // const card = { + // cardNonce: "YOUR_CARD_NONCE", + // cardholderName: "Amelia Earhart", + // billingAddress: {}, + // verificationToken: "verification_token0", + // }; + + // card.bodyBillingAddress.addressLine1 = "500 Electric Ave"; + // card.bodyBillingAddress.addressLine2 = "Suite 600"; + // card.bodyBillingAddress.addressLine3 = "address_line_38"; + // card.bodyBillingAddress.locality = "New York"; + // card.bodyBillingAddress.sublocality = "sublocality2"; + // card.bodyBillingAddress.administrativeDistrictLevel1 = "NY"; + // card.bodyBillingAddress.postalCode = "10003"; + // card.bodyBillingAddress.country = "US"; + + // try { + // const { result } = await client.customersApi.createCustomerCard(user, card); + + // res.status(StatusCodes.NO_CONTENT); + // } catch (error) { + // console.log(Object.keys(error)); + + // res.status(StatusCodes.BAD_REQUEST); + // } + // }, +}; + +export default (req, res) => { + if (req.method in api) { + api[req.method](req, res); + } else { + res.status(StatusCodes.NOT_FOUND); + } +}; diff --git a/packages/dashboard/src/pages/api/square/invoices.js b/packages/dashboard/src/pages/api/square/invoices.js new file mode 100644 index 00000000..1ad8471a --- /dev/null +++ b/packages/dashboard/src/pages/api/square/invoices.js @@ -0,0 +1,45 @@ +import { Client, Environment } from "square"; +import { StatusCodes } from "http-status-codes"; + +const client = new Client({ + environment: Environment.Sandbox, + accessToken: process.env.SQUARE_ACCESS_TOKEN, +}); + +const api = { + GET: async (req, res) => { + const user = "NBE7TRXZPGZXNBD64JB6DR5AGR"; // req.headers["x-user"]; + + try { + // get locations for invoices search query + const { result: locationsResponse } = await client.locationsApi.listLocations(); + const { locations } = locationsResponse; + + // create invoices serach query + const locationIds = locations.map(({ id }) => id); + const customerIds = [user]; + const filter = { locationIds, customerIds }; + const sort = { field: "INVOICE_SORT_DATE", order: "DESC" }; + const query = { filter, sort }; + + // query invoices with given search criteria + const { result: invoicesResponse } = await client.invoicesApi.searchInvoices({ query, limit: 10 }); + const { invoices } = invoicesResponse; + + res.json(invoices); + } catch (error) { + console.log(error); + console.log(error?.errors); + + res.json([]); // todo: error handling + } + }, +}; + +export default (req, res) => { + if (req.method in api) { + return api[req.method](req, res); + } + + return res.status(StatusCodes.NOT_FOUND); +}; diff --git a/packages/dashboard/src/pages/api/square/subscription.js b/packages/dashboard/src/pages/api/square/subscription.js new file mode 100644 index 00000000..5ece9e68 --- /dev/null +++ b/packages/dashboard/src/pages/api/square/subscription.js @@ -0,0 +1,46 @@ +import { Client, Environment } from "square"; +import { StatusCodes } from "http-status-codes"; + +const client = new Client({ + environment: Environment.Sandbox, + accessToken: process.env.SQUARE_ACCESS_TOKEN, +}); + +const api = { + GET: async (req, res) => { + try { + const user = "NBE7TRXZPGZXNBD64JB6DR5AGR"; // req.headers["x-user"]; + + // create subscriptions search query + const query = { filter: { customerIds: [user] } }; + + // query subscriptions with given search criteria + const { result: subscriptionsResponse } = await client.subscriptionsApi.searchSubscriptions({ query }); + const { subscriptions } = subscriptionsResponse; + + // get active subscription + const subscription = subscriptions.find(({ status }) => status === "ACTIVE"); + + if (!subscription) { + return res.status(StatusCodes.NO_CONTENT).end(); // no active subscription found + } + + console.log("....", subscription); + + return res.json(subscription); + } catch (error) { + console.log(error); + console.log(error?.errors); + + return res.status(StatusCodes.BAD_REQUEST).end(); // todo: error handling + } + }, +}; + +export default (req, res) => { + if (req.method in api) { + return api[req.method](req, res); + } + + return res.status(StatusCodes.NOT_FOUND).end(); +}; diff --git a/packages/dashboard/src/pages/api/square/subscription/cancel.js b/packages/dashboard/src/pages/api/square/subscription/cancel.js new file mode 100644 index 00000000..9b2f017c --- /dev/null +++ b/packages/dashboard/src/pages/api/square/subscription/cancel.js @@ -0,0 +1,55 @@ +import { Client, Environment } from "square"; +import { StatusCodes } from "http-status-codes"; + +const client = new Client({ + environment: Environment.Sandbox, + accessToken: process.env.SQUARE_ACCESS_TOKEN, +}); + +const cancelSubscription = async (id) => { + const { result: subscriptionsResponse } = await client.subscriptionsApi.cancelSubscription(id); + const { subscription } = subscriptionsResponse; + + return subscription; +}; + +const getActiveSubscription = async (customerId) => { + // create subscriptions search query + const query = { filter: { customerIds: [customerId] } }; + + // query subscriptions with given search criteria + const { result: subscriptionsResponse } = await client.subscriptionsApi.searchSubscriptions({ query }); + const { subscriptions } = subscriptionsResponse; + + // get active subscription with a set cancellation date + return subscriptions.find(({ status, canceledDate }) => status === "ACTIVE" && !canceledDate); +}; + +const api = { + POST: async (req, res) => { + try { + const user = "NBE7TRXZPGZXNBD64JB6DR5AGR"; // req.headers["x-user"]; + const subscription = await getActiveSubscription(user); + + if (!subscription) { + return res.status(StatusCodes.BAD_REQUEST).end(); // no active subscription found + } + + const canceledSubscription = await cancelSubscription(subscription.id); + + return res.json(canceledSubscription); + } catch (error) { + console.log(error.errors); + + return res.status(StatusCodes.BAD_REQUEST).end(); // todo: error handling + } + }, +}; + +export default (req, res) => { + if (req.method in api) { + return api[req.method](req, res); + } + + return res.status(StatusCodes.NOT_FOUND).end(); +}; diff --git a/packages/dashboard/src/pages/api/square/subscription/restore.js b/packages/dashboard/src/pages/api/square/subscription/restore.js new file mode 100644 index 00000000..8cac9dfc --- /dev/null +++ b/packages/dashboard/src/pages/api/square/subscription/restore.js @@ -0,0 +1,58 @@ +import { Client, Environment } from "square"; +import { StatusCodes } from "http-status-codes"; + +const client = new Client({ + environment: Environment.Sandbox, + accessToken: process.env.SQUARE_ACCESS_TOKEN, +}); + +const updateSubscription = async (id, body) => { + const { result: subscriptionsResponse } = await client.subscriptionsApi.updateSubscription(id, body); + const { subscription } = subscriptionsResponse; + + return subscription; +}; + +const getActiveCanceledSubscription = async (customerId) => { + // create subscriptions search query + const query = { filter: { customerIds: [customerId] } }; + + // query subscriptions with given search criteria + const { result: subscriptionsResponse } = await client.subscriptionsApi.searchSubscriptions({ query }); + const { subscriptions } = subscriptionsResponse; + + // get active subscription with a set cancellation date + return subscriptions.find(({ status, canceledDate }) => status === "ACTIVE" && canceledDate); +}; + +const api = { + POST: async (req, res) => { + try { + const user = "NBE7TRXZPGZXNBD64JB6DR5AGR"; // req.headers["x-user"]; + const subscription = await getActiveCanceledSubscription(user); + + if (!subscription) { + return res.status(StatusCodes.BAD_REQUEST).end(); // no active subscription with cancel date found + } + + // update the subscription setting empty canceledDate + const updatedSubscription = await updateSubscription(subscription.id, { + subscription: { ...subscription, canceledDate: "" }, + }); + + return res.json(updatedSubscription); + } catch (error) { + console.log(error.errors); + + return res.status(StatusCodes.BAD_REQUEST).end(); // todo: error handling + } + }, +}; + +export default (req, res) => { + if (req.method in api) { + return api[req.method](req, res); + } + + return res.status(StatusCodes.NOT_FOUND).end(); +}; diff --git a/packages/dashboard/src/pages/api/stripe/billing.js b/packages/dashboard/src/pages/api/stripe/billing.js new file mode 100644 index 00000000..0c855ec4 --- /dev/null +++ b/packages/dashboard/src/pages/api/stripe/billing.js @@ -0,0 +1,28 @@ +import ky from "ky/umd"; +import Stripe from "stripe"; +import { StatusCodes } from "http-status-codes"; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); + +const getStripeCustomer = (stripeCustomerId = null) => { + if (stripeCustomerId) { + return stripe.customers.retrieve(stripeCustomerId); + } + return stripe.customers.create(); +}; + +export default async (req, res) => { + try { + const authorization = req.headers.authorization; // authorization header from request + const { stripeCustomerId } = await ky("http://accounts:3000/user", { headers: { authorization } }).json(); + const customer = await getStripeCustomer(stripeCustomerId); + const session = await stripe.billingPortal.sessions.create({ + customer: customer.id, + return_url: `${process.env.SKYNET_DASHBOARD_URL}/payments`, + }); + + res.redirect(session.url); + } catch ({ message }) { + res.status(StatusCodes.BAD_REQUEST).json({ error: { message } }); + } +}; diff --git a/packages/dashboard/src/pages/api/stripe/checkout.js b/packages/dashboard/src/pages/api/stripe/checkout.js new file mode 100644 index 00000000..4ddf17a9 --- /dev/null +++ b/packages/dashboard/src/pages/api/stripe/checkout.js @@ -0,0 +1,59 @@ +import ky from "ky/umd"; +import Stripe from "stripe"; +import { StatusCodes } from "http-status-codes"; +import { isPaidTier } from "../../../services/tiers"; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); + +const getStripeCustomer = async (user, authorization) => { + if (user.stripeCustomerId) { + return stripe.customers.retrieve(user.stripeCustomerId); + } + + const customer = await stripe.customers.create(); + + // update user instance and include the customer id once created + await ky.put(`http://accounts:3000/user`, { headers: { authorization }, json: { stripeCustomerId: customer.id } }); + + return customer; +}; + +export default async (req, res) => { + if (req.method !== "POST") { + return res.status(StatusCodes.NOT_FOUND).end(); + } + + const { price } = req.body; + + if (!price) { + return res.status(StatusCodes.BAD_REQUEST).json({ error: { message: "Missing 'price' attribute" } }); + } + + try { + const authorization = req.headers.authorization; // authorization header from request + const user = await ky("http://accounts:3000/user", { headers: { authorization } }).json(); + + if (isPaidTier(user.tier)) { + const message = `Customer can have only one active subscription at a time, use Stripe Customer Portal to manage active subscription`; + + return res.status(StatusCodes.BAD_REQUEST).json({ error: { message } }); + } + + const customer = await getStripeCustomer(user, authorization); + const session = await stripe.checkout.sessions.create({ + mode: "subscription", + payment_method_types: ["card"], + line_items: [{ price, quantity: 1 }], + customer: customer.id, + client_reference_id: user.sub, + allow_promotion_codes: true, + success_url: `${process.env.SKYNET_DASHBOARD_URL}/payments?session_id={CHECKOUT_SESSION_ID}`, + cancel_url: `${process.env.SKYNET_DASHBOARD_URL}/payments`, + }); + + res.json({ sessionId: session.id }); + } catch (error) { + console.log(error); + res.status(StatusCodes.BAD_REQUEST).json({ error: { message: error.message } }); + } +}; diff --git a/packages/dashboard/src/pages/api/stripe/subscription.js b/packages/dashboard/src/pages/api/stripe/subscription.js new file mode 100644 index 00000000..3526d5ac --- /dev/null +++ b/packages/dashboard/src/pages/api/stripe/subscription.js @@ -0,0 +1,23 @@ +import ky from "ky/umd"; +import Stripe from "stripe"; +import { StatusCodes } from "http-status-codes"; + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); + +export default async (req, res) => { + try { + const authorization = req.headers.authorization; // authorization header from request + const { stripeCustomerId } = await ky("http://accounts:3000/user", { headers: { authorization } }).json(); + const stripeCustomer = await stripe.customers.retrieve(stripeCustomerId, { expand: ["subscriptions"] }); + const { subscriptions } = stripeCustomer; + + // todo: find a better way to get current subscription + if (subscriptions.total_count) { + return res.json(subscriptions.data[0]); + } + + res.status(StatusCodes.NO_CONTENT).end(); + } catch ({ message }) { + res.status(StatusCodes.BAD_REQUEST).json({ error: { message } }); + } +}; diff --git a/packages/dashboard/src/pages/api/stubs/stripe/prices.js b/packages/dashboard/src/pages/api/stubs/stripe/prices.js new file mode 100644 index 00000000..ebf013a3 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/stripe/prices.js @@ -0,0 +1,37 @@ +export default (req, res) => { + res.json([ + { + id: "price_1IReYFIzjULiPWN6DqN2DwjN", + name: "Skynet Extreme", + description: "Skynet Extreme description", + tier: 4, + price: 80, + currency: "usd", + stripe: "price_1IReYFIzjULiPWN6DqN2DwjN", + productId: "prod_J3m6IuVyh3XOc5", + livemode: false, + }, + { + id: "price_1IReY5IzjULiPWN6AxPytHEG", + name: "Skynet Pro", + description: "Skynet Pro description", + tier: 3, + price: 20, + currency: "usd", + stripe: "price_1IReY5IzjULiPWN6AxPytHEG", + productId: "prod_J3m6ioQg90kZj5", + livemode: false, + }, + { + id: "price_1IReXpIzjULiPWN66PvsxHL4", + name: "Skynet Plus", + description: "Skynet Plus description", + tier: 2, + price: 5, + currency: "usd", + stripe: "price_1IReXpIzjULiPWN66PvsxHL4", + productId: "prod_J3m6xMfDiz2LGE", + livemode: false, + }, + ]); +}; diff --git a/packages/dashboard/src/pages/api/stubs/user.js b/packages/dashboard/src/pages/api/stubs/user.js new file mode 100644 index 00000000..409bf333 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user.js @@ -0,0 +1,5 @@ +import user from "./user.json"; + +export default (req, res) => { + res.json(user); +}; diff --git a/packages/dashboard/src/pages/api/stubs/user.json b/packages/dashboard/src/pages/api/stubs/user.json new file mode 100644 index 00000000..f41dab0e --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user.json @@ -0,0 +1,12 @@ +{ + "firstName": "John", + "lastName": "Doe", + "email": "john@example.com", + "sub": "ab776d6d-f324-4fa7-4k21-7587d5215481", + "tier": 1, + "subscribedUntil": "0001-01-01T00:00:00Z", + "subscriptionStatus": "active", + "subscriptionCancelAt": "2021-04-21T00:00:00Z", + "subscriptionCancelAtPeriodEnd": true, + "stripeCustomerId": "cus_J0iYnAp6LRgsTI" +} diff --git a/packages/dashboard/src/pages/api/stubs/user/downloads.js b/packages/dashboard/src/pages/api/stubs/user/downloads.js new file mode 100644 index 00000000..c4a24c03 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/downloads.js @@ -0,0 +1,8 @@ +import items from "./downloads.json"; + +export default (req, res) => { + const offset = parseInt(req.query?.offset ?? 0, 10); + const pageSize = parseInt(req.query?.pageSize ?? 10, 10); + + res.json({ items: items.slice(offset, offset + pageSize), count: items.length, pageSize, offset }); +}; diff --git a/packages/dashboard/src/pages/api/stubs/user/downloads.json b/packages/dashboard/src/pages/api/stubs/user/downloads.json new file mode 100644 index 00000000..edf6ff0d --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/downloads.json @@ -0,0 +1,44 @@ +[ + { + "id": 1111, + "skylink": "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", + "name": "ugabuga.pdf", + "size": 123123, + "downloadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 2222, + "skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "name": "ugabuga.pdf", + "size": 8912739812, + "downloadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 3333, + "skylink": "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", + "name": "ugabuga.pdf", + "size": 123123, + "downloadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 4444, + "skylink": "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", + "name": "ugabuga.pdf", + "size": 83943, + "downloadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 5555, + "skylink": "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", + "name": "ugabuga.pdf", + "size": 3290489120, + "downloadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 6666, + "skylink": "CACqf4NlIMlA0CCCieYGjpViPGyfyJ4v1x3bmuCKZX8FKA", + "name": "ugabuga.pdf", + "size": 1290389, + "downloadedOn": "2020-04-02T08:02:17-05:00" + } +] diff --git a/packages/dashboard/src/pages/api/stubs/user/stats.js b/packages/dashboard/src/pages/api/stubs/user/stats.js new file mode 100644 index 00000000..81a65545 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/stats.js @@ -0,0 +1,5 @@ +import stats from "./stats.json"; + +export default (req, res) => { + res.json(stats); +}; diff --git a/packages/dashboard/src/pages/api/stubs/user/stats.json b/packages/dashboard/src/pages/api/stubs/user/stats.json new file mode 100644 index 00000000..29696ca2 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/stats.json @@ -0,0 +1,13 @@ +{ + "storageUsed": 809500672, + "numRegReads": 0, + "numRegWrites": 0, + "numUploads": 13, + "numDownloads": 78, + "totalUploadsSize": 618649028, + "totalDownloadsSize": 32307956843, + "bwUploads": 2810183680, + "bwDownloads": 32323934976, + "bwRegReads": 0, + "bwRegWrites": 0 +} diff --git a/packages/dashboard/src/pages/api/stubs/user/uploads.js b/packages/dashboard/src/pages/api/stubs/user/uploads.js new file mode 100644 index 00000000..ad8b3d20 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/uploads.js @@ -0,0 +1,8 @@ +import items from "./uploads.json"; + +export default (req, res) => { + const offset = parseInt(req.query?.offset ?? 0, 10); + const pageSize = parseInt(req.query?.pageSize ?? 10, 10); + + res.json({ items: items.slice(offset, offset + pageSize), count: items.length, pageSize, offset }); +}; diff --git a/packages/dashboard/src/pages/api/stubs/user/uploads.json b/packages/dashboard/src/pages/api/stubs/user/uploads.json new file mode 100644 index 00000000..efc42359 --- /dev/null +++ b/packages/dashboard/src/pages/api/stubs/user/uploads.json @@ -0,0 +1,44 @@ +[ + { + "id": 1111, + "skylink": "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", + "name": "ugabuga.pdf", + "size": 123123, + "uploadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 2222, + "skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "name": "ugabuga.pdf", + "size": 8912739812, + "uploadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 3333, + "skylink": "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", + "name": "ugabuga.pdf", + "size": 123123, + "uploadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 4444, + "skylink": "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", + "name": "ugabuga.pdf", + "size": 83943, + "uploadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 5555, + "skylink": "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", + "name": "ugabuga.pdf", + "size": 3290489120, + "uploadedOn": "2020-04-02T08:02:17-05:00" + }, + { + "id": 6666, + "skylink": "CACqf4NlIMlA0CCCieYGjpViPGyfyJ4v1x3bmuCKZX8FKA", + "name": "ugabuga.pdf", + "size": 1290389, + "uploadedOn": "2020-04-02T08:02:17-05:00" + } +] diff --git a/packages/dashboard/src/pages/auth/login.js b/packages/dashboard/src/pages/auth/login.js new file mode 100644 index 00000000..481f8d44 --- /dev/null +++ b/packages/dashboard/src/pages/auth/login.js @@ -0,0 +1,96 @@ +import Link from "next/link"; +import { Configuration, PublicApi } from "@ory/kratos-client"; +import config from "../../config"; +import SelfServiceForm from "../../components/Form/SelfServiceForm"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export async function getServerSideProps(context) { + const flow = context.query.flow; + const redirect = encodeURIComponent(`/api/accounts/login?return_to=${context.query.return_to ?? "/"}`); + + if (process.env.NODE_ENV === "development") { + return { props: { flow: require("../../../stubs/login.json") } }; + } + + // The flow is used to identify the login and registration flow and + // return data like the csrf_token and so on. + if (!flow || typeof flow !== "string") { + // No flow ID found in URL, initializing login flow. + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/login/browser?return_to=${redirect}`, + }, + }; + } + + try { + const { status, data } = await kratos.getSelfServiceLoginFlow(flow); + + if (status === 200) return { props: { flow: data } }; + + throw new Error(`Failed to retrieve flow ${flow} with code ${status}`); + } catch (error) { + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/login/browser?return_to=${redirect}`, + }, + }; + } +} + +const fieldsConfig = { + identifier: { + label: "Email address", + autoComplete: "email", + position: 0, + }, + password: { + label: "Password", + autoComplete: "current-password", + position: 1, + }, + csrf_token: { + position: 99, + }, +}; + +export default function Login({ flow }) { + return ( +
+
+ + + +

Sign in to your account

+

+ or{" "} + + sign up + {" "} + if you don't have one yet +

+
+ + + + +
+ ); +} diff --git a/packages/dashboard/src/pages/auth/registration.js b/packages/dashboard/src/pages/auth/registration.js new file mode 100644 index 00000000..33230c54 --- /dev/null +++ b/packages/dashboard/src/pages/auth/registration.js @@ -0,0 +1,113 @@ +import Link from "next/link"; +import { Configuration, PublicApi } from "@ory/kratos-client"; +import { getIn } from "formik"; +import config from "../../config"; +import levenshtein from "fast-levenshtein"; +import lcs from "../../services/longestCommonSequence"; +import SelfServiceForm from "../../components/Form/SelfServiceForm"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export async function getServerSideProps(context) { + const flow = context.query.flow; + const redirect = encodeURIComponent(`/api/accounts/login?return_to=${context.query.return_to ?? "/"}`); + + if (process.env.NODE_ENV === "development") { + return { props: { flow: require("../../../stubs/registration.json") } }; + } + + // The flow is used to identify the login and registration flow and + // return data like the csrf_token and so on. + if (!flow || typeof flow !== "string") { + // No flow ID found in URL, initializing registration flow. + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/registration/browser?return_to=${redirect}`, + }, + }; + } + + try { + const { status, data } = await kratos.getSelfServiceRegistrationFlow(flow); + + if (status === 200) return { props: { flow: data } }; + + throw new Error(`Failed to retrieve flow ${flow} with code ${status}`); + } catch (error) { + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/registration/browser?return_to=${redirect}`, + }, + }; + } +} + +const fieldsConfig = { + "traits.email": { + label: "Email address", + autoComplete: "email", + position: 0, + }, + password: { + label: "Password", + autoComplete: "new-password", + position: 1, + checks: [ + { + label: "At least 6 characters long", + validate: (values, field) => { + const value = getIn(values, field); + + return value && value.length > 5; + }, + }, + { + label: "Significantly different from the email", + validate: (values, field) => { + const value = getIn(values, field); + const email = getIn(values, "traits.email"); + + // levenshtein distance higher than 5 and longest common sequence shorter than half of the password + return value && email && levenshtein.get(value, email) > 5 && lcs(value, email).length / value.length <= 0.5; + }, + }, + ], + }, + csrf_token: { + position: 99, + }, +}; + +export default function Registration({ flow }) { + return ( +
+
+ + + +

Sign up for a new account

+

+ or{" "} + + sign in + {" "} + if you already have one +

+
+ + +
+ ); +} diff --git a/packages/dashboard/src/pages/downloads.js b/packages/dashboard/src/pages/downloads.js new file mode 100644 index 00000000..942efd11 --- /dev/null +++ b/packages/dashboard/src/pages/downloads.js @@ -0,0 +1,44 @@ +import dayjs from "dayjs"; +import prettyBytes from "pretty-bytes"; +import { useState } from "react"; +import Layout from "../components/Layout"; +import Table from "../components/Table"; +import authServerSideProps from "../services/authServerSideProps"; +import { SkynetClient } from "skynet-js"; +import useAccountsApi from "../services/useAccountsApi"; + +const skynetClient = new SkynetClient(process.env.NEXT_PUBLIC_SKYNET_PORTAL_API); +const apiPrefix = process.env.NODE_ENV === "development" ? "/api/stubs" : ""; +const getSkylinkLink = ({ skylink }) => skynetClient.getSkylinkUrl(skylink); +const getRelativeDate = ({ downloadedOn }) => dayjs(downloadedOn).format("YYYY-MM-DD HH:mm:ss"); +const headers = [ + { key: "name", name: "Name", nowrap: false, href: getSkylinkLink }, + { key: "skylink", name: "Skylink" }, + { key: "size", name: "Size", formatter: ({ size }) => prettyBytes(size) }, + { key: "downloadedOn", name: "Accessed on", formatter: getRelativeDate }, +]; +const actions = []; + +export const getServerSideProps = authServerSideProps(async (context, api) => { + const initialData = await api.get("user/downloads?pageSize=10&offset=0").json(); + + return { props: { initialData } }; +}); + +export default function Downloads({ initialData }) { + const [offset, setOffset] = useState(0); + const { data } = useAccountsApi(`${apiPrefix}/user/downloads?pageSize=10&offset=${offset}`, { + initialData: offset === 0 ? initialData : undefined, + revalidateOnMount: true, + }); + + // preload next page if it exists (based on the response from the current page query) + const nextPageOffset = data && data.offset + data.pageSize < data.count ? data.offset + data.pageSize : offset; + useAccountsApi(`${apiPrefix}/user/downloads?pageSize=10&offset=${nextPageOffset}`); + + return ( + + + + ); +} diff --git a/packages/dashboard/src/pages/error.js b/packages/dashboard/src/pages/error.js new file mode 100644 index 00000000..19a1e7b1 --- /dev/null +++ b/packages/dashboard/src/pages/error.js @@ -0,0 +1,68 @@ +import Link from "next/link"; +import { Configuration, PublicApi } from "@ory/kratos-client"; +import config from "../config"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export async function getServerSideProps(context) { + const error = context.query.error; + + // No error was send, redirecting back to home. + if (!error || typeof error !== "string") { + console.log("No error ID found in URL, redirecting to homepage."); + + return { redirect: { permanent: false, destination: "/" } }; + } + + try { + const { status, data } = await kratos.getSelfServiceError(error); + + if ("errors" in data) return { props: { errors: data.errors } }; + + throw new Error(`Expected error ${error} to contain "errors" but got ${JSON.stringify(data)}`); + } catch (error) { + return { redirect: { permanent: false, destination: "/" } }; + } +} + +export default function Error({ errors }) { + return ( +
+
+ + + +

An error occurred

+
+
+
+ {errors.map((error, index) => ( +
1 ? "mt-3 sm:mt-5" : ""} text-center`}> + +
+

{error.reason}

+
+
+ ))} +
+
+ +
+ ); +} diff --git a/packages/dashboard/src/pages/index.js b/packages/dashboard/src/pages/index.js new file mode 100644 index 00000000..696ece24 --- /dev/null +++ b/packages/dashboard/src/pages/index.js @@ -0,0 +1,276 @@ +import dayjs from "dayjs"; +import relativeTime from "dayjs/plugin/relativeTime"; +import prettyBytes from "pretty-bytes"; +import Link from "next/link"; +import Layout from "../components/Layout"; +import authServerSideProps from "../services/authServerSideProps"; +import { SkynetClient } from "skynet-js"; +import config from "../config"; +import useAccountsApi from "../services/useAccountsApi"; +import { isFreeTier } from "../services/tiers"; +import { write } from "clipboardy"; + +dayjs.extend(relativeTime); + +const skynetClient = new SkynetClient(process.env.NEXT_PUBLIC_SKYNET_PORTAL_API); +const apiPrefix = process.env.NODE_ENV === "development" ? "/api/stubs" : ""; + +export const getServerSideProps = authServerSideProps(async (context, api) => { + const stripe = await api.get("stripe/prices").json(); + const plans = [config.tiers.starter, ...stripe].sort((a, b) => a.tier - b.tier); + + return { props: { plans } }; +}); + +function SkylinkList({ items = [], timestamp }) { + return ( +
    + {items.slice(0, 3).map((item) => ( +
  • +
    +
    + + {item.name || "— file name not available —"} + + write(`sia://${item.skylink}`)} + > + sia://{item.skylink.substr(0, 5)}…{item.skylink.substr(-5)} + +
    +
    +
    +

    + + + + {prettyBytes(item.size)} +

    +
    +
    + + + + + {item[timestamp] && } +
    +
    +
    +
  • + ))} + + {!items.length && ( +
  • +
    +

    no entries yet

    +
    +
  • + )} +
+ ); +} + +export default function Home({ plans }) { + const { data: user } = useAccountsApi(`${apiPrefix}/user`); + const { data: stats } = useAccountsApi(`${apiPrefix}/user/stats`); + const { data: downloads } = useAccountsApi(`${apiPrefix}/user/downloads?pageSize=3&offset=0`); + const { data: uploads } = useAccountsApi(`${apiPrefix}/user/uploads?pageSize=3&offset=0`); + + const activePlan = plans.find(({ tier }) => (user ? user.tier === tier : isFreeTier(tier))); + + return ( + +
+
+
+
+
+
+ {/* Heroicon name: outline/users */} + +
+
+
Current plan
+
+
{activePlan.name}
+
+
+
+
+ +
+
+
+
+
+ + + +
+
+
Storage used
+
+
{prettyBytes(stats?.storageUsed ?? 0)}
+
+
+
+
+
+ +
+
+ {/*
+
+
+
+ + + +
+
+
Bandwidth used
+
+
{prettyBytes(stats?.bwDownloads ?? 0)}
+
+
+
+
+
+ +
+
*/} +
+ + {/* ============ */} + +
+
+

Recent downloads

+ + {/* This example requires Tailwind CSS v2.0+ */} +
+ +
+
+
+

Recent uploads

+ + {/* This example requires Tailwind CSS v2.0+ */} +
+ +
+
+
+
+
+ ); +} diff --git a/packages/dashboard/src/pages/payments.js b/packages/dashboard/src/pages/payments.js new file mode 100644 index 00000000..c36fe039 --- /dev/null +++ b/packages/dashboard/src/pages/payments.js @@ -0,0 +1,193 @@ +import dayjs from "dayjs"; +import Layout from "../components/Layout"; +import ky from "ky/umd"; +import { useEffect, useState } from "react"; +import authServerSideProps from "../services/authServerSideProps"; +import classnames from "classnames"; +import prettyBytes from "pretty-bytes"; +import config from "../config"; +import useAccountsApi from "../services/useAccountsApi"; +import { isFreeTier, isPaidTier } from "../services/tiers"; + +const apiPrefix = process.env.NODE_ENV === "development" ? "/api/stubs" : ""; + +const ActiveBadge = () => { + return ( + + active + + ); +}; + +export const getServerSideProps = authServerSideProps(async (context, api) => { + const [user, stats, stripe] = await Promise.all([ + api.get("user").json(), + api.get("user/stats").json(), + api.get("stripe/prices").json(), + ]); + const plans = [config.tiers.starter, ...stripe].sort((a, b) => a.tier - b.tier); + + return { props: { plans, user, stats } }; +}); + +export default function Payments({ plans, user: initialUserData, stats: initialStatsData }) { + const { data: user } = useAccountsApi(`${apiPrefix}/user`, { initialData: initialUserData }); + const { data: stats } = useAccountsApi(`${apiPrefix}/user/stats`, { initialData: initialStatsData }); + const [selectedPlan, setSelectedPlan] = useState(plans.find(({ tier }) => isFreeTier(tier))); + const activePlan = plans.find(({ tier }) => (user ? user.tier === tier : isFreeTier(tier))); + const handleSubscribe = async () => { + try { + const price = selectedPlan.stripe; + const { sessionId } = await ky.post("/api/stripe/checkout", { json: { price } }).json(); + const stripe = new Stripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY); + await stripe.redirectToCheckout({ sessionId }); + } catch (error) { + console.log(error); // todo: handle error + } + }; + + useEffect(() => { + if (activePlan && isPaidTier(activePlan.tier)) { + setSelectedPlan(activePlan); + } + }, [activePlan, selectedPlan, setSelectedPlan]); + + return ( + +
+
+
+
+
+
Current plan
+
{activePlan?.name || "—"}
+
+
+ +
+
+
Subscription status
+
+ {isFreeTier(activePlan?.tier) ? "—" : user?.subscriptionStatus} +
+
+ {user?.subscriptionCancelAtPeriodEnd && ( +
+
+ Your plan will be cancelled on {dayjs(user.subscriptionCancelAt).format("D MMM YYYY")}. +
+
+ )} +
+ +
+
+
Storage used
+
{prettyBytes(stats.storageUsed)}
+
+
+
+ +
+
+
+
+
+
+

+ Plan +

+
+
+
+ Pricing plans +
    + {plans.map((plan, index) => ( +
  • + +
  • + ))} +
+
+
+
+ {user && isPaidTier(user.tier) ? ( +
+ + Use Stripe Customer Portal to manage your active subscription, payment methods and view your + billing history + + + Stripe Customer Portal + +
+ ) : ( + + )} +
+
+ +
+
+
+
+ ); +} diff --git a/packages/dashboard/src/pages/plans.js b/packages/dashboard/src/pages/plans.js new file mode 100644 index 00000000..ee319e69 --- /dev/null +++ b/packages/dashboard/src/pages/plans.js @@ -0,0 +1,389 @@ +import Layout from "../components/Layout"; + +export default function Payments() { + return ( + + {/* This example requires Tailwind CSS v2.0+ */} +
+
+
+

+ Start using for free, then add a plan to improve the experience. Account plans unlock additional features. +

+
+ + +
+
+
+
+
+

Free

+

All the basics for starting a new business

+

+ no cost +

+ + Active + +
+
+

What's included

+
    +
  • + {/* Heroicon name: solid/check */} + + Potenti felis, in cras at at ligula nunc. +
  • +
  • + {/* Heroicon name: solid/check */} + + Orci neque eget pellentesque. +
  • +
+
+
+
+
+

Skynet Plus

+

All the basics for starting a new business

+

+ $5 + /mo +

+ + Buy Skynet Plus + +
+
+

What's included

+
    +
  • + {/* Heroicon name: solid/check */} + + Potenti felis, in cras at at ligula nunc. +
  • +
  • + {/* Heroicon name: solid/check */} + + Orci neque eget pellentesque. +
  • +
  • + {/* Heroicon name: solid/check */} + + Donec mauris sit in eu tincidunt etiam. +
  • +
+
+
+
+
+

Skynet Pro

+

All the basics for starting a new business

+

+ $20 + /mo +

+ + Buy Skynet Pro + +
+
+

What's included

+
    +
  • + {/* Heroicon name: solid/check */} + + Potenti felis, in cras at at ligula nunc. +
  • +
  • + {/* Heroicon name: solid/check */} + + Orci neque eget pellentesque. +
  • +
  • + {/* Heroicon name: solid/check */} + + Donec mauris sit in eu tincidunt etiam. +
  • +
  • + {/* Heroicon name: solid/check */} + + Faucibus volutpat magna. +
  • +
+
+
+
+
+

Skynet Extreme

+

All the basics for starting a new business

+

+ $80 + /mo +

+ + Buy Skynet Extreme + +
+
+

What's included

+
    +
  • + {/* Heroicon name: solid/check */} + + Potenti felis, in cras at at ligula nunc. +
  • +
  • + {/* Heroicon name: solid/check */} + + Orci neque eget pellentesque. +
  • +
  • + {/* Heroicon name: solid/check */} + + Donec mauris sit in eu tincidunt etiam. +
  • +
  • + {/* Heroicon name: solid/check */} + + Faucibus volutpat magna. +
  • +
  • + {/* Heroicon name: solid/check */} + + Id sed tellus in varius quisque. +
  • +
  • + {/* Heroicon name: solid/check */} + + Risus egestas faucibus. +
  • +
  • + {/* Heroicon name: solid/check */} + + Risus cursus ullamcorper. +
  • +
+
+
+
+
+
+
+ ); +} diff --git a/packages/dashboard/src/pages/recovery.js b/packages/dashboard/src/pages/recovery.js new file mode 100644 index 00000000..e64a4213 --- /dev/null +++ b/packages/dashboard/src/pages/recovery.js @@ -0,0 +1,95 @@ +import Link from "next/link"; +import { Configuration, PublicApi } from "@ory/kratos-client"; +import config from "../config"; +import SelfServiceForm from "../components/Form/SelfServiceForm"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export async function getServerSideProps(context) { + const flow = context.query.flow; + + if (process.env.NODE_ENV === "development") { + return { props: { flow: require("../../stubs/recovery.json") } }; + } + + // The flow is used to identify the login and registration flow and + // return data like the csrf_token and so on. + if (!flow || typeof flow !== "string") { + // No flow ID found in URL, initializing recovery flow. + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/recovery/browser`, + }, + }; + } + + try { + const { status, data } = await kratos.getSelfServiceRecoveryFlow(flow); + + if (status === 200) return { props: { flow: data } }; + + throw new Error(`Failed to retrieve flow ${flow} with code ${status}`); + } catch (error) { + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/recovery/browser`, + }, + }; + } +} + +const fieldsConfig = { + email: { + label: "Your email", + autoComplete: "email", + position: 0, + }, + csrf_token: { + position: 99, + }, +}; + +export default function Recovery({ flow }) { + return ( +
+
+ + + +

Recover your account

+

+ + sign in + {" "} + if you suddenly remembered your password +

+

+ or{" "} + + sign up + {" "} + for a new account +

+
+ + +
+ ); +} diff --git a/packages/dashboard/src/pages/settings.js b/packages/dashboard/src/pages/settings.js new file mode 100644 index 00000000..6f314ca5 --- /dev/null +++ b/packages/dashboard/src/pages/settings.js @@ -0,0 +1,83 @@ +import { Configuration, PublicApi } from "@ory/kratos-client"; +import Layout from "../components/Layout"; +import config from "../config"; +import SelfServiceForm from "../components/Form/SelfServiceForm"; +import authServerSideProps from "../services/authServerSideProps"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export const getServerSideProps = authServerSideProps(async (context) => { + const flow = context.query.flow; + + if (process.env.NODE_ENV === "development") { + return { props: { flow: require("../../stubs/settings.json") } }; + } + + // The flow is used to identify the login and registration flow and + // return data like the csrf_token and so on. + if (!flow || typeof flow !== "string") { + // No flow ID found in URL, initializing settings flow. + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/settings/browser`, + }, + }; + } + + try { + const { status, data } = await kratos.getSelfServiceSettingsFlow(flow, { + headers: { cookie: context.req.headers.cookie }, + }); + + console.log(flow, status, data); + + if (status === 200) return { props: { flow: data } }; + + throw new Error(`Failed to retrieve flow ${flow} with code ${status}`); + } catch (error) { + console.log(error); + + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/settings/browser`, + }, + }; + } +}); + +const fieldsConfig = { + "traits.email": { + label: "Email address", + autoComplete: "email", + position: 0, + }, + password: { + label: "Password", + autoComplete: "new-password", + position: 1, + }, + csrf_token: { + position: 99, + }, +}; + +export default function Settings({ flow }) { + const profileConfig = flow.methods.profile.config; + const passwordConfig = flow.methods.password.config; + + return ( + +
+ + +
+
+ ); +} diff --git a/packages/dashboard/src/pages/uploads.js b/packages/dashboard/src/pages/uploads.js new file mode 100644 index 00000000..d78288f7 --- /dev/null +++ b/packages/dashboard/src/pages/uploads.js @@ -0,0 +1,44 @@ +import dayjs from "dayjs"; +import prettyBytes from "pretty-bytes"; +import { useState } from "react"; +import Layout from "../components/Layout"; +import Table from "../components/Table"; +import authServerSideProps from "../services/authServerSideProps"; +import { SkynetClient } from "skynet-js"; +import useAccountsApi from "../services/useAccountsApi"; + +const skynetClient = new SkynetClient(process.env.NEXT_PUBLIC_SKYNET_PORTAL_API); +const apiPrefix = process.env.NODE_ENV === "development" ? "/api/stubs" : ""; +const getSkylinkLink = ({ skylink }) => skynetClient.getSkylinkUrl(skylink); +const getRelativeDate = ({ uploadedOn }) => dayjs(uploadedOn).format("YYYY-MM-DD HH:mm:ss"); +const headers = [ + { key: "name", name: "Name", nowrap: false, href: getSkylinkLink }, + { key: "skylink", name: "Skylink" }, + { key: "size", name: "Size", formatter: ({ size }) => prettyBytes(size) }, + { key: "uploadedOn", name: "Uploaded on", formatter: getRelativeDate }, +]; +const actions = []; + +export const getServerSideProps = authServerSideProps(async (context, api) => { + const initialData = await api.get("user/uploads?pageSize=10&offset=0").json(); + + return { props: { initialData } }; +}); + +export default function Uploads({ initialData }) { + const [offset, setOffset] = useState(0); + const { data } = useAccountsApi(`${apiPrefix}/user/uploads?pageSize=10&offset=${offset}`, { + initialData: offset === 0 ? initialData : undefined, + revalidateOnMount: true, + }); + + // preload next page if it exists (based on the response from the current page query) + const nextPageOffset = data && data.offset + data.pageSize < data.count ? data.offset + data.pageSize : offset; + useAccountsApi(`${apiPrefix}/user/uploads?pageSize=10&offset=${nextPageOffset}`); + + return ( + +
+ + ); +} diff --git a/packages/dashboard/src/pages/verify.js b/packages/dashboard/src/pages/verify.js new file mode 100644 index 00000000..adcde201 --- /dev/null +++ b/packages/dashboard/src/pages/verify.js @@ -0,0 +1,103 @@ +import Link from "next/link"; +import { Configuration, PublicApi } from "@ory/kratos-client"; +import config from "../config"; +import SelfServiceForm from "../components/Form/SelfServiceForm"; +import { useEffect } from "react"; + +const kratos = new PublicApi(new Configuration({ basePath: config.kratos.public })); + +export async function getServerSideProps(context) { + const flow = context.query.flow; + + // if (process.env.NODE_ENV === "development") { + // return { props: { flow: require("../../stubs/recovery.json") } }; + // } + + if (!flow || typeof flow !== "string") { + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/verification/browser`, + }, + }; + } + + try { + const { status, data } = await kratos.getSelfServiceVerificationFlow(flow); + + if (status === 200) return { props: { flow: data } }; + + throw new Error(`Failed to retrieve flow ${flow} with code ${status}`); + } catch (error) { + return { + redirect: { + permanent: false, + destination: `${config.kratos.browser}/self-service/verification/browser`, + }, + }; + } +} + +const fieldsConfig = { + email: { + label: "Your email", + autoComplete: "email", + position: 0, + }, + csrf_token: { + position: 99, + }, +}; + +export default function Verify({ flow }) { + const state = flow.state; + + useEffect(() => { + if (state === "passed_challenge") { + setTimeout(() => (window.location = "/"), 5000); + } + }, [state]); + + return ( +
+
+ + + +

+ {flow.state === "passed_challenge" ? "Verification successful!" : "Account verification"} +

+ + {flow.state === "passed_challenge" && ( + <> +

You will be redirected automatically

+

+ + go to dashboard + +

+ + )} +
+ + {flow.state !== "passed_challenge" && ( + + )} +
+ ); +} diff --git a/packages/dashboard/src/services/authServerSideProps.js b/packages/dashboard/src/services/authServerSideProps.js new file mode 100644 index 00000000..bc7bf43c --- /dev/null +++ b/packages/dashboard/src/services/authServerSideProps.js @@ -0,0 +1,27 @@ +import ky from "ky/umd"; + +const isProduction = process.env.NODE_ENV === "production"; + +export default function authServerSideProps(getServerSideProps) { + return function authenticate(context) { + if (isProduction && (!("ory_kratos_session" in context.req.cookies) || !("skynet-jwt" in context.req.cookies))) { + return { + redirect: { + permanent: false, + destination: `/api/accounts/login?return_to=${encodeURIComponent(context.resolvedUrl)}`, + }, + }; + } + + if (getServerSideProps) { + const api = ky.create({ + headers: { cookie: context.req.headers.cookie }, + prefixUrl: isProduction ? "http://oathkeeper:4455" : "http://localhost:3000/api/stubs", + }); + + return getServerSideProps(context, api); + } + + return { props: {} }; + }; +} diff --git a/packages/dashboard/src/services/longestCommonSequence.js b/packages/dashboard/src/services/longestCommonSequence.js new file mode 100644 index 00000000..5c5f5143 --- /dev/null +++ b/packages/dashboard/src/services/longestCommonSequence.js @@ -0,0 +1,65 @@ +// @source https://github.com/trekhleb/javascript-algorithms/blob/master/src/algorithms/sets/longest-common-subsequence/longestCommonSubsequence.js +// @license MIT https://github.com/trekhleb/javascript-algorithms/blob/master/LICENSE + +/** + * @param {string[]} set1 + * @param {string[]} set2 + * @return {string[]} + */ +export default function longestCommonSubsequence(set1, set2) { + // Init LCS matrix. + const lcsMatrix = Array(set2.length + 1) + .fill(null) + .map(() => Array(set1.length + 1).fill(null)); + + // Fill first row with zeros. + for (let columnIndex = 0; columnIndex <= set1.length; columnIndex += 1) { + lcsMatrix[0][columnIndex] = 0; + } + + // Fill first column with zeros. + for (let rowIndex = 0; rowIndex <= set2.length; rowIndex += 1) { + lcsMatrix[rowIndex][0] = 0; + } + + // Fill rest of the column that correspond to each of two strings. + for (let rowIndex = 1; rowIndex <= set2.length; rowIndex += 1) { + for (let columnIndex = 1; columnIndex <= set1.length; columnIndex += 1) { + if (set1[columnIndex - 1] === set2[rowIndex - 1]) { + lcsMatrix[rowIndex][columnIndex] = lcsMatrix[rowIndex - 1][columnIndex - 1] + 1; + } else { + lcsMatrix[rowIndex][columnIndex] = Math.max( + lcsMatrix[rowIndex - 1][columnIndex], + lcsMatrix[rowIndex][columnIndex - 1] + ); + } + } + } + + // Calculate LCS based on LCS matrix. + if (!lcsMatrix[set2.length][set1.length]) { + // If the length of largest common string is zero then return empty string. + return [""]; + } + + const longestSequence = []; + let columnIndex = set1.length; + let rowIndex = set2.length; + + while (columnIndex > 0 || rowIndex > 0) { + if (set1[columnIndex - 1] === set2[rowIndex - 1]) { + // Move by diagonal left-top. + longestSequence.unshift(set1[columnIndex - 1]); + columnIndex -= 1; + rowIndex -= 1; + } else if (lcsMatrix[rowIndex][columnIndex] === lcsMatrix[rowIndex][columnIndex - 1]) { + // Move left. + columnIndex -= 1; + } else { + // Move up. + rowIndex -= 1; + } + } + + return longestSequence; +} diff --git a/packages/dashboard/src/services/tiers.js b/packages/dashboard/src/services/tiers.js new file mode 100644 index 00000000..4e561e2b --- /dev/null +++ b/packages/dashboard/src/services/tiers.js @@ -0,0 +1,2 @@ +export const isFreeTier = (tier) => tier === 1; +export const isPaidTier = (tier) => tier > 1; diff --git a/packages/dashboard/src/services/useAccountsApi.js b/packages/dashboard/src/services/useAccountsApi.js new file mode 100644 index 00000000..169b12d9 --- /dev/null +++ b/packages/dashboard/src/services/useAccountsApi.js @@ -0,0 +1,15 @@ +import useSWR from "swr"; +import { StatusCodes } from "http-status-codes"; + +const fetcher = (url) => + fetch(url).then((res) => { + if (res.status === StatusCodes.UNAUTHORIZED) { + window.location.href = `/auth/login?return_to=${encodeURIComponent(window.location.href)}`; + } + + return res.json(); + }); + +export default function useAccountsApi(key, config) { + return useSWR(key, fetcher, config); +} diff --git a/packages/dashboard/stubs/login.json b/packages/dashboard/stubs/login.json new file mode 100644 index 00000000..bb136cd8 --- /dev/null +++ b/packages/dashboard/stubs/login.json @@ -0,0 +1,45 @@ +{ + "id": "bda73c77-1e21-4bfd-b85a-322fce2e4576", + "expires_at": "2020-01-28T13:48:04.690715Z", + "issued_at": "2020-01-28T13:38:04.690732Z", + "request_url": "http://127.0.0.1:4455/auth/browser/login", + "methods": { + "oidc": { + "method": "oidc", + "config": { + "action": "http://127.0.0.1:4455/.ory/kratos/public/auth/browser/methods/oidc/auth/bda73c77-1e21-4bfd-b85a-322fce2e4576", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "QJreyXtUD4oUSJfGNjA/+6ydsQyq0o/rfTL6QK86VadVFg6mwgX5x1QHVQ6uRqKxmwAcavQup3ILCSwl7ke97g==" + } + ] + } + }, + "password": { + "method": "password", + "config": { + "action": "http://127.0.0.1:4455/.ory/kratos/public/auth/browser/methods/password/login?request=bda73c77-1e21-4bfd-b85a-322fce2e4576", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "M1gAKA8fIhw4JOpQ/5m9mKARBAvKhzWkyhbxjtZNLG8m1NBHtk7UUXhrKJhn7yDSl4ypbZR7HT28LSfrlzDEJg==" + }, + { "name": "identifier", "type": "text", "required": true, "value": "asfdasdffads" }, + { "name": "password", "type": "password", "required": true } + ], + "errors": [ + { + "message": "The provided credentials are invalid. Check for spelling mistakes in your password or username, email address, or phone number." + } + ] + } + } + } +} diff --git a/packages/dashboard/stubs/recovery.json b/packages/dashboard/stubs/recovery.json new file mode 100644 index 00000000..28fde87a --- /dev/null +++ b/packages/dashboard/stubs/recovery.json @@ -0,0 +1,31 @@ +{ + "id": "01e21a99-8e69-41f9-b3ba-4967f714c8eb", + "type": "browser", + "expires_at": "2021-03-18T15:46:30.634635Z", + "issued_at": "2021-03-18T14:46:30.634635Z", + "request_url": "http://oathkeeper:4455/self-service/recovery/browser", + "messages": null, + "methods": { + "link": { + "method": "link", + "config": { + "action": "http://127.0.0.1:4455/.ory/kratos/public/self-service/recovery/methods/link?flow=01e21a99-8e69-41f9-b3ba-4967f714c8eb", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "XvPfLJzxmcTWnr2rmLzFcED9Ef1PIkqSBQgx5t0yu0WuIp2S6ll+B9cQ0ClIcLQ==" + }, + { + "name": "email", + "type": "email", + "required": true + } + ] + } + } + }, + "state": "choose_method" +} diff --git a/packages/dashboard/stubs/registration.json b/packages/dashboard/stubs/registration.json new file mode 100644 index 00000000..4fe796ae --- /dev/null +++ b/packages/dashboard/stubs/registration.json @@ -0,0 +1,58 @@ +{ + "id": "dbff7b96-8116-42c5-8624-f9fb28f1db15", + "expires_at": "2020-01-28T13:49:01.2274112Z", + "issued_at": "2020-01-28T13:39:01.2274261Z", + "request_url": "http://127.0.0.1:4455/auth/browser/registration", + "methods": { + "oidc": { + "method": "oidc", + "config": { + "action": "http://127.0.0.1:4455/.ory/kratos/public/auth/browser/methods/oidc/auth/dbff7b96-8116-42c5-8624-f9fb28f1db15", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "xwb6A6iHdsguYwkAM6m3jj196E7TcmiWpAavIRxuAgXSiipsEdaAhW4sy8ir3yrECuBFKI2OQA/SPXlEXRPqTA==" + } + ] + } + }, + "password": { + "method": "password", + "config": { + "errors": [ + { + "message": "The provided credentials are invalid. Check for spelling mistakes in your password or username, email address, or phone number." + } + ], + "action": "http://127.0.0.1:4455/.ory/kratos/public/auth/browser/methods/password/registration?request=dbff7b96-8116-42c5-8624-f9fb28f1db15", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "xLg4B9WnuC0Ue+j9ay5EQvleaJpOl0H9xJJ7W3+Bwv7RNOhobPZOYFQ0KjXzWNkIzsPF/BBraWSyqa0+Pvwqtw==" + }, + { + "name": "password", + "type": "password", + "required": true, + "errors": [{ "message": "password: Is required" }] + }, + { + "name": "traits.email", + "type": "text", + "value": "", + "errors": [ + { "message": "traits.email: String length must be greater than or equal to 3" }, + { "message": "traits.email: Does not match format 'email'" } + ] + } + ] + } + } + } +} diff --git a/packages/dashboard/stubs/settings.json b/packages/dashboard/stubs/settings.json new file mode 100644 index 00000000..c7502b31 --- /dev/null +++ b/packages/dashboard/stubs/settings.json @@ -0,0 +1,49 @@ +{ + "id": "e01f6bf9-845c-4c4b-a3ce-60691dd7a97c", + "type": "browser", + "expires_at": "2021-02-18T13:31:43.947193Z", + "issued_at": "2021-02-18T12:31:43.947193Z", + "request_url": "http://oathkeeper:4455/self-service/settings/browser", + "messages": null, + "methods": { + "password": { + "method": "password", + "config": { + "action": "https://account.siasky.xyz/.ory/kratos/public/self-service/settings/methods/password?flow=e01f6bf9-845c-4c4b-a3ce-60691dd7a97c", + "method": "POST", + "fields": [ + { "name": "password", "type": "password", "required": true }, + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "i33iydUBN6jqwrkHlLPZ3ap7Ah4uC0UrTadn7zKT0jyouDpr+DF0/1Hbkshye9t7IKwyzOcLt7i6oR/OoEVg+g==" + } + ] + } + }, + "profile": { + "method": "profile", + "config": { + "action": "https://account.siasky.xyz/.ory/kratos/public/self-service/settings/methods/profile?flow=e01f6bf9-845c-4c4b-a3ce-60691dd7a97c", + "method": "POST", + "fields": [ + { + "name": "csrf_token", + "type": "hidden", + "required": true, + "value": "i33iydUBN6jqwrkHlLPZ3ap7Ah4uC0UrTadn7zKT0jyouDpr+DF0/1Hbkshye9t7IKwyzOcLt7i6oR/OoEVg+g==" + }, + { "name": "traits.email", "type": "email", "value": "karol@nebulous.tech" } + ] + } + } + }, + "identity": { + "id": "ab776d6d-f324-4fa7-a728-7587d5215481", + "schema_id": "default", + "schema_url": "", + "traits": { "email": "karol@nebulous.tech" } + }, + "state": "show_form" +} diff --git a/packages/dashboard/styles/Home.module.css b/packages/dashboard/styles/Home.module.css new file mode 100644 index 00000000..80745811 --- /dev/null +++ b/packages/dashboard/styles/Home.module.css @@ -0,0 +1,122 @@ +.container { + min-height: 100vh; + padding: 0 0.5rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.main { + padding: 5rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + width: 100%; + height: 100px; + border-top: 1px solid #eaeaea; + display: flex; + justify-content: center; + align-items: center; +} + +.footer img { + margin-left: 0.5rem; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, + monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; + margin-top: 3rem; +} + +.card { + margin: 1rem; + flex-basis: 45%; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h3 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} diff --git a/packages/dashboard/styles/globals.css b/packages/dashboard/styles/globals.css new file mode 100644 index 00000000..e2e6d0f0 --- /dev/null +++ b/packages/dashboard/styles/globals.css @@ -0,0 +1,16 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, + Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} diff --git a/packages/dashboard/tailwind.config.js b/packages/dashboard/tailwind.config.js new file mode 100644 index 00000000..09477280 --- /dev/null +++ b/packages/dashboard/tailwind.config.js @@ -0,0 +1,18 @@ +module.exports = { + purge: ["./src/**/*.js"], + darkMode: false, // or 'media' or 'class' + theme: { + extend: { + fontFamily: { + sans: ["Metropolis", "Helvetica", "Arial", "Sans-Serif"], + }, + }, + }, + variants: { + extend: { + backgroundColor: ["disabled"], + textColor: ["disabled"], + }, + }, + plugins: [require("@tailwindcss/forms")], +}; diff --git a/packages/handshake-api/Dockerfile b/packages/handshake-api/Dockerfile index 1104cb21..4903f90f 100644 --- a/packages/handshake-api/Dockerfile +++ b/packages/handshake-api/Dockerfile @@ -1,4 +1,4 @@ -FROM node:15.8.0-alpine +FROM node:15.12.0-alpine WORKDIR /usr/app diff --git a/packages/health-check/Dockerfile b/packages/health-check/Dockerfile index 9ecc2f14..d543bbff 100644 --- a/packages/health-check/Dockerfile +++ b/packages/health-check/Dockerfile @@ -1,4 +1,4 @@ -FROM node:15.8.0-alpine +FROM node:15.12.0-alpine WORKDIR /usr/app diff --git a/packages/webapp/Dockerfile b/packages/webapp/Dockerfile index db09d2d7..a732c64d 100644 --- a/packages/webapp/Dockerfile +++ b/packages/webapp/Dockerfile @@ -1,15 +1,24 @@ -FROM node:15.8.0-alpine +FROM node:15.12.0-alpine -RUN apk add --no-cache autoconf automake libtool gcc make g++ zlib-dev file nasm util-linux +RUN apk update && apk add autoconf automake libtool gcc make g++ zlib-dev file nasm util-linux WORKDIR /usr/app +COPY package.json . + +ENV CYPRESS_INSTALL_BINARY 0 + +RUN yarn --no-lockfile + COPY src ./src COPY static ./static COPY gatsby-config.js . -COPY package.json . -ENV CYPRESS_INSTALL_BINARY 0 +ARG WITH_ACCOUNTS=0 + ENV GATSBY_TELEMETRY_DISABLED 1 -RUN yarn --no-lockfile -RUN yarn build +ENV GATSBY_WITH_ACCOUNTS $WITH_ACCOUNTS + +EXPOSE 9000 + +CMD [ "sh", "-c", "yarn build && yarn serve --host 0.0.0.0" ] diff --git a/packages/webapp/package.json b/packages/webapp/package.json index d90f8d64..c920b110 100644 --- a/packages/webapp/package.json +++ b/packages/webapp/package.json @@ -6,6 +6,7 @@ "dependencies": { "@fontsource/metropolis": "^4.2.1", "axios": "0.21.1", + "boolean": "^3.0.2", "bytes": "3.1.0", "classnames": "2.2.6", "gatsby": "^3.0.4", @@ -17,6 +18,7 @@ "gatsby-plugin-sass": "^4.0.2", "gatsby-source-filesystem": "^3.0.0", "http-status-codes": "2.1.4", + "js-cookie": "^2.2.1", "jsonp": "0.2.1", "node-sass": "5.0.0", "path-browserify": "1.0.1", diff --git a/packages/webapp/src/components/HomeTop/HomeTop.js b/packages/webapp/src/components/HomeTop/HomeTop.js index 42e53788..4d1590a3 100644 --- a/packages/webapp/src/components/HomeTop/HomeTop.js +++ b/packages/webapp/src/components/HomeTop/HomeTop.js @@ -1,4 +1,5 @@ import React from "react"; +import { boolean } from "boolean"; import logo from "../../images/logo.svg"; import "./HomeTop.scss"; import { Skynet, Deco1, Deco2 } from "../../svg"; @@ -15,6 +16,18 @@ export default function HomeTop() { The decentralized CDN and file sharing platform for devs. Skynet is the storage foundation for a Free Internet!

+ {boolean(process.env.GATSBY_WITH_ACCOUNTS) && ( +

+ + Sign up now! + {" "} + Already have an account? Go to your{" "} + + dashboard + +

+ )} + diff --git a/packages/webapp/src/components/HomeTop/HomeTop.scss b/packages/webapp/src/components/HomeTop/HomeTop.scss index 572292c3..046c636d 100644 --- a/packages/webapp/src/components/HomeTop/HomeTop.scss +++ b/packages/webapp/src/components/HomeTop/HomeTop.scss @@ -36,10 +36,22 @@ max-width: 560px; margin: 0 auto; + &.auth-links { + font-size: 18px; + + .link { + font-weight: bold; + } + } + @media (min-width: $largebp) { font-size: 24px; max-width: 670px; } + + & + p { + margin-top: 24px; + } } } diff --git a/scripts/crdb_backup.sh b/scripts/crdb_backup.sh new file mode 100644 index 00000000..a216d9db --- /dev/null +++ b/scripts/crdb_backup.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Get current working directory (pwd doesn't cut it) +cwd=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +# Set the environment: +set -o allexport +source $cwd/../.env +set +o allexport +# Check for AWS credentials: +if [[ $AWS_ACCESS_KEY_ID == "" || $AWS_SECRET_ACCESS_KEY == "" ]]; then + echo "Missing AWS credentials!" + exit 1 +fi +# Take the current datetime: +DT=`date +%Y-%m-%d` +# Create the backup: +docker exec cockroach \ + cockroach sql \ + --host cockroach:26257 \ + --certs-dir=/certs \ + --execute="BACKUP TO 's3://skynet-crdb-backups/backups/cockroach/$DT?AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID&AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY';" diff --git a/scripts/crdb_restore.sh b/scripts/crdb_restore.sh new file mode 100644 index 00000000..a316984f --- /dev/null +++ b/scripts/crdb_restore.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +BACKUP=$1 +if [[ $BACKUP == "" ]]; then + echo "No backup name given. It should look like '2020-01-29'." + exit 1 +fi + +# Get current working directory (pwd doesn't cut it) +cwd=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +# Set the environment: +set -o allexport +source $cwd/../.env +set +o allexport +# Check for AWS credentials: +if [[ $AWS_ACCESS_KEY_ID == "" || $AWS_SECRET_ACCESS_KEY == "" ]]; then + echo "Missing AWS credentials!" + exit 1 +fi +# Restore the backup: +docker exec cockroach \ + cockroach sql \ + --host cockroach:26257 \ + --certs-dir=/certs \ + --execute="RESTORE DATABASE defaultdb FROM 's3://skynet-crdb-backups/backups/cockroach/$DT?AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID&AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY';" diff --git a/scripts/mongo_backup.sh b/scripts/mongo_backup.sh new file mode 100644 index 00000000..9867bbc3 --- /dev/null +++ b/scripts/mongo_backup.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Get current working directory (pwd doesn't cut it) +cwd=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +# Set the environment: +set -o allexport +source $cwd/../.env +set +o allexport +# Check for AWS credentials: +if [[ $AWS_ACCESS_KEY_ID == "" || $AWS_SECRET_ACCESS_KEY == "" ]]; then + echo "Missing AWS credentials!" + exit 1 +fi +# Take the current datetime: +DT=`date +%Y-%m-%d` +# Check if a backup already exists: +totalFoundObjects=$(aws s3 ls s3://skynet-crdb-backups/backups/mongo/ --recursive --summarize | grep "$DT.tgz" | wc -l) +if [ "$totalFoundObjects" -eq "1" ]; then + echo "Backup already exists for today. Exiting." + exit 0 +fi +# Create the backup: +docker exec mongo \ + mongodump \ + -o /data/db/backups/$DT \ + mongodb://$SKYNET_DB_USER:$SKYNET_DB_PASS@$SKYNET_DB_HOST:$SKYNET_DB_PORT +# Compress the backup: +cd $cwd/../docker/data/mongo/db/backups/ && tar -czf $DT.tgz $DT && cd - +# Upload the backup to S3: +aws s3 cp $DT.tgz s3://skynet-crdb-backups/backups/mongo/ +# Clean up +rm -rf $DT.tgz $cwd/../docker/data/mongo/db/backups/$DT diff --git a/scripts/mongo_restore.sh b/scripts/mongo_restore.sh new file mode 100644 index 00000000..f9f4396c --- /dev/null +++ b/scripts/mongo_restore.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +BACKUP=$1 +if [[ $BACKUP == "" ]]; then + echo "No backup name given. It should look like '2020-01-29'." + exit 1 +fi + +# Get current working directory (pwd doesn't cut it) +cwd=$(cd -P -- "$(dirname -- "$0")" && pwd -P) +# Set the environment: +set -o allexport +source $cwd/../.env +set +o allexport +# Check for AWS credentials: +if [[ $AWS_ACCESS_KEY_ID == "" || $AWS_SECRET_ACCESS_KEY == "" ]]; then + echo "Missing AWS credentials!" + exit 1 +fi +# Check if the backup exists: +totalFoundObjects=$(aws s3 ls s3://skynet-crdb-backups/backups/mongo/ --recursive --summarize | grep "$DT.tgz" | wc -l) +if [ "$totalFoundObjects" -eq "0" ]; then + echo "This backup doesn't exist!" + exit 1 +fi +# Get the backup from S3: +aws s3 cp s3://skynet-crdb-backups/backups/mongo/$BACKUP.tgz $BACKUP.tgz +# Prepare a clean `to_restore` dir: +rm -rf $cwd/../docker/data/mongo/db/backups/to_restore +mkdir -p $cwd/../docker/data/mongo/db/backups/to_restore +# Decompress the backup: +tar -xzf $BACKUP.tgz -C $cwd/../docker/data/mongo/db/backups/to_restore +rm $BACKUP.tgz +# Restore the backup: +docker exec mongo \ + mongorestore \ + mongodb://$SKYNET_DB_USER:$SKYNET_DB_PASS@$SKYNET_DB_HOST:$SKYNET_DB_PORT \ + /data/db/backups/to_restore/$BACKUP +# Clean up: +rm -rf $cwd/../docker/data/mongo/db/backups/to_restore diff --git a/setup-scripts/README.md b/setup-scripts/README.md index 7d047421..c6407c61 100644 --- a/setup-scripts/README.md +++ b/setup-scripts/README.md @@ -19,6 +19,8 @@ You may want to fork this repository and replace ssh keys in - [handshake](https://handshake.org) ([github](https://github.com/handshake-org/hsd)): full handshake node - [handshake-api](https://github.com/NebulousLabs/skynet-webportal/tree/master/packages/handshake-api): simple API talking to the handshake node - [read more](https://github.com/NebulousLabs/skynet-webportal/blob/master/packages/handshake-api/README.md) - [webapp](https://github.com/NebulousLabs/skynet-webportal/tree/master/packages/webapp): portal frontend application - [read more](https://github.com/NebulousLabs/skynet-webportal/blob/master/packages/webapp/README.md) + - [kratos](https://www.ory.sh/kratos/): user account management system + - [oathkeeper](https://www.ory.sh/oathkeeper/): identity and access proxy - discord integration - [funds-checker](funds-checker.py): script that checks wallet balance and sends status messages to discord periodically - [health-checker](health-checker.py): script that monitors health-check service for server health issues and reports them to discord periodically @@ -83,10 +85,21 @@ At this point we have almost everything running, we just need to set up your wal - `CLOUDFLARE_AUTH_TOKEN` (optional) if using cloudflare as dns loadbalancer (need to change it in Caddyfile too) - `AWS_ACCESS_KEY_ID` (optional) if using route53 as a dns loadbalancer - `AWS_SECRET_ACCESS_KEY` (optional) if using route53 as a dns loadbalancer + - `PORTAL_NAME` (optional) e.g. `siasky.xyz` + - `DISCORD_BOT_TOKEN` (optional) if you're using Discord notifications for health checks and such + - `SKYNET_DB_USER` (optional) if using `accounts` this is the MongoDB username + - `SKYNET_DB_PASS` (optional) if using `accounts` this is the MongoDB password + - `SKYNET_DB_HOST` (optional) if using `accounts` this is the MongoDB address or container name + - `SKYNET_DB_PORT` (optional) if using `accounts` this is the MongoDB port + - `COOKIE_DOMAIN` (optional) if using `accounts` this is the domain to which your cookies will be issued + - `COOKIE_HASH_KEY` (optional) if using `accounts` hashing secret, at least 32 bytes + - `COOKIE_ENC_KEY` (optional) if using `accounts` encryption key, at least 32 bytes + 1. if you have a custom domain and you configured it in `DOMAIN_NAME`, edit `/home/user/skynet-webportal/docker/caddy/Caddyfile` and uncomment `import custom.domain` 1. only for siasky.net domain instances: edit `/home/user/skynet-webportal/docker/caddy/Caddyfile`, uncomment `import siasky.net` 1. `docker-compose up -d` to restart the services so they pick up new env variables 1. `docker exec caddy caddy reload --config /etc/caddy/Caddyfile` to reload Caddyfile configuration +1. add your custom Kratos configuration to `/home/user/skynet-webportal/docker/kratos/config/kratos.yml` (in particular, the credentials for your mail server should be here, rather than in your source control). For a starting point you can take `docker/kratos/config/kratos.yml.sample`. ## Subdomains diff --git a/setup-scripts/setup-docker-services.sh b/setup-scripts/setup-docker-services.sh index c9aecebd..44728e02 100755 --- a/setup-scripts/setup-docker-services.sh +++ b/setup-scripts/setup-docker-services.sh @@ -23,17 +23,27 @@ docker-compose --version # sanity check # Create dummy .env file for docker-compose usage with variables # * DOMAIN_NAME - the domain name your server is using ie. example.com # * SKYNET_PORTAL_API - absolute url to the portal api ie. https://example.com +# * SKYNET_DASHBOARD_URL - (optional) absolute url to the portal dashboard ie. https://account.example.com # * EMAIL_ADDRESS - this is the administrator contact email you need to supply for communication regarding SSL certification # * HSD_API_KEY - this is auto generated secure key for your handshake service integration -# * CLOUDFLARE_AUTH_TOKEN` - (optional) if using cloudflare as dns loadbalancer (need to change it in Caddyfile too) +# * CLOUDFLARE_AUTH_TOKEN - (optional) if using cloudflare as dns loadbalancer (need to change it in Caddyfile too) # * AWS_ACCESS_KEY_ID - (optional) if using route53 as a dns loadbalancer # * AWS_SECRET_ACCESS_KEY - (optional) if using route53 as a dns loadbalancer # * API_PORT - (optional) the port on which siad is listening, defaults to 9980 # * PORTAL_NAME - the name of the portal, required by the discord bot -# * DISCORD_BOT_TOKEN - required by the discord bot +# * DISCORD_BOT_TOKEN - (optional) only required if you're using the discord notifications integration +# * SKYNET_DB_USER - (optional) if using `accounts` this is the MongoDB username +# * SKYNET_DB_PASS - (optional) if using `accounts` this is the MongoDB password +# * SKYNET_DB_HOST - (optional) if using `accounts` this is the MongoDB address or container name +# * SKYNET_DB_PORT - (optional) if using `accounts` this is the MongoDB port +# * COOKIE_DOMAIN - (optional) if using `accounts` this is the domain to which your cookies will be issued +# * COOKIE_HASH_KEY - (optional) if using `accounts` hashing secret, at least 32 bytes +# * COOKIE_ENC_KEY - (optional) if using `accounts` encryption key, at least 32 bytes +# * CR_IP - (optional) if using `accounts` the public IP/domain of your server, e.g. `helsinki.siasky.net` +# * CR_CLUSTER_NODES - (optional) if using `accounts` the list of servers (with ports) which make up your CockroachDB cluster, e.g. `helsinki.siasky.net:26257,germany.siasky.net:26257,us-east.siasky.net:26257` if ! [ -f /home/user/skynet-webportal/.env ]; then HSD_API_KEY=$(openssl rand -base64 32) # generate safe random key for handshake - printf "DOMAIN_NAME=example.com\nSKYNET_PORTAL_API=https://example.com\nEMAIL_ADDRESS=email@example.com\nSIA_WALLET_PASSWORD=\nHSD_API_KEY=${HSD_API_KEY}\nCLOUDFLARE_AUTH_TOKEN=\nAWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nPORTAL_NAME=\nDISCORD_BOT_TOKEN=\n" > /home/user/skynet-webportal/.env + printf "DOMAIN_NAME=example.com\nSKYNET_PORTAL_API=https://example.com\nSKYNET_DASHBOARD_URL=https://account.example.com\nEMAIL_ADDRESS=email@example.com\nSIA_WALLET_PASSWORD=\nHSD_API_KEY=${HSD_API_KEY}\nCLOUDFLARE_AUTH_TOKEN=\nAWS_ACCESS_KEY_ID=\nAWS_SECRET_ACCESS_KEY=\nPORTAL_NAME=\nDISCORD_BOT_TOKEN=\n" > /home/user/skynet-webportal/.env fi # Start docker container with nginx and client diff --git a/setup-scripts/setup-server.sh b/setup-scripts/setup-server.sh index aaaa97f3..e9e865fe 100755 --- a/setup-scripts/setup-server.sh +++ b/setup-scripts/setup-server.sh @@ -14,7 +14,7 @@ mkdir -p /home/user/.ssh # Install apt packages sudo apt-get update -sudo apt-get -y install ufw tmux ranger htop nload gcc g++ make git vim unzip curl +sudo apt-get -y install ufw tmux ranger htop nload gcc g++ make git vim unzip curl awscli # Setup GIT credentials (so commands like git stash would work) git config --global user.email "devs@nebulous.tech" diff --git a/yarn.lock b/yarn.lock index 5b4f02f2..12920cd6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@apimatic/schema@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@apimatic/schema/-/schema-0.5.1.tgz#673aa4ddcf31311ba9dfbf0e514cb35ab3b3b9f9" + integrity sha512-ZtAtLOjDEqxot017qRGK+gvNbZv5tNNDmYiYOpBhFiZwulTZUHT9NwJG+V5nIhdEqIpy5E8ty1C4tTzangfNoQ== + dependencies: + lodash.flatten "^4.4.0" + "@ardatan/aggregate-error@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" @@ -80,33 +87,32 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.13.13", "@babel/core@^7.4.5", "@babel/core@^7.7.5": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.13.tgz#bc44c4a2be2288ec4ddf56b66fc718019c76ac29" - integrity sha512-1xEs9jZAyKIouOoCmpsgk/I26PoKyvzQ2ixdRpRzfbcp1fL+ozw7TUgdDgwonbTovqRaTfRh50IXuw4QrWO0GA== + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.14.tgz#8e46ebbaca460a63497c797e574038ab04ae6d06" + integrity sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA== dependencies: "@babel/code-frame" "^7.12.13" "@babel/generator" "^7.13.9" "@babel/helper-compilation-targets" "^7.13.13" - "@babel/helper-module-transforms" "^7.13.12" + "@babel/helper-module-transforms" "^7.13.14" "@babel/helpers" "^7.13.10" "@babel/parser" "^7.13.13" "@babel/template" "^7.12.13" "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.13" + "@babel/types" "^7.13.14" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" semver "^6.3.0" source-map "^0.5.0" "@babel/eslint-parser@^7.13.4": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.13.10.tgz#e272979914f36bb6cea144c14c32bb51632696dd" - integrity sha512-/I1HQ3jGPhIpeBFeI3wO9WwWOnBYpuR0pX0KlkdGcRQAVX9prB/FCS2HBpL7BiFbzhny1YCiBH8MTZD2jJa7Hg== + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz#f80fd23bdd839537221914cb5d17720a5ea6ba3a" + integrity sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA== dependencies: - eslint-scope "5.1.0" + eslint-scope "^5.1.0" eslint-visitor-keys "^1.3.0" semver "^6.3.0" @@ -222,10 +228,10 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz#600e58350490828d82282631a1422268e982ba96" - integrity sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ== +"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g== dependencies: "@babel/helper-module-imports" "^7.13.12" "@babel/helper-replace-supers" "^7.13.12" @@ -233,8 +239,8 @@ "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-validator-identifier" "^7.12.11" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -1056,9 +1062,9 @@ "@babel/plugin-transform-typescript" "^7.13.0" "@babel/register@^7.12.1": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.8.tgz#d9051dc6820cb4e86375cc0e2d55a4862b31184f" - integrity sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ== + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.14.tgz#bbfa8f4f027c2ebc432e8e69e078b632605f2d9b" + integrity sha512-iyw0hUwjh/fzN8qklVqZodbyWjEBOG0KdDnBOpv3zzIgK3NmuRXBmIXH39ZBdspkn8LTHvSboN+oYb4MT43+9Q== dependencies: find-cache-dir "^2.0.0" lodash "^4.17.19" @@ -1074,7 +1080,14 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": +"@babel/runtime@7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== @@ -1082,9 +1095,9 @@ regenerator-runtime "^0.13.4" "@babel/standalone@^7.12.6": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.13.13.tgz#9e2b5116a9e2ff2aae9497300e5be96e551ca827" - integrity sha512-gCM87jBWLgowuIypBas/R3AaepWUo0inqiNiBoNVtnnSpbSddYXcY8cDA7qqrAOFxWIvuaznjmV2g/UuizblQQ== + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.13.14.tgz#cd4f2a976e3d8ced69b8b0e280988435d655e567" + integrity sha512-ZhIZaufaCVMuGt9yLlNTO/ORtI6xNKIHK0D/uEdVUYmS8xROOPgDPZtYesmXBA+xlArlCj5s94g4Nz4g0m0ytA== "@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.12.7": version "7.12.13" @@ -1109,10 +1122,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.4.4": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.13.tgz#dcd8b815b38f537a3697ce84c8e3cc62197df96f" - integrity sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w== +"@babel/types@7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.4.4": + version "7.13.14" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" + integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ== dependencies: "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" @@ -1302,10 +1324,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@fontsource/metropolis@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@fontsource/metropolis/-/metropolis-4.2.1.tgz#49b69c0e3ff940bf2d94ee45627fa1fe3528f59f" - integrity sha512-PhXqIWHqD+HyTkZr1XT7irKhaObRmHLz+d0js/NuoI30md0X4LXMxkolCL5EbmSDXNXW36nT+A1HCKW71oyd6w== +"@fontsource/metropolis@^4.1.0", "@fontsource/metropolis@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@fontsource/metropolis/-/metropolis-4.2.4.tgz#4057d4e6a989a19665180561957d9599b5bd6f51" + integrity sha512-1k8EdiXM9a52SGthSdyWIUGCPQh+yuygjzFbiP+o+ad0ajIhUEd2yj9BA95JBtEOakKIfQ137K3f2CqkVTCbHQ== "@fontsource/sora@^4.2.2": version "4.2.2" @@ -1475,11 +1497,26 @@ is-promise "4.0.0" tslib "~2.0.1" +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/address@2.x.x": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== +"@hapi/boom@9.x.x": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.2.tgz#48bd41d67437164a2d636e3b5bc954f8c8dc5e38" + integrity sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q== + dependencies: + "@hapi/hoek" "9.x.x" + "@hapi/bourne@1.x.x": version "1.3.2" resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" @@ -1490,7 +1527,7 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== -"@hapi/hoek@^9.0.0": +"@hapi/hoek@9.x.x", "@hapi/hoek@^9.0.0": version "9.1.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== @@ -1934,6 +1971,38 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@next/env@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@next/env/-/env-10.1.2.tgz#04888eb7115a5b0633dc59e321e5c952917a39d5" + integrity sha512-G6kEq7dr7f+unVTUL74lIaB6njB73vEMVi7AhujaNnNZr6z8jQ43jCjNyawQsNyoNWsRo/9x6x9W72PbrGmy/w== + +"@next/polyfill-module@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.1.2.tgz#0cad99af18da0f90a63a25b60602ab46650017e6" + integrity sha512-9+xXb33HIPCrV0yM79blqwgLa+fkvm0gYs/wUDI0pPBCHkMpCZA/SWUeF/yKDY6qWO79H3B5pWTziLmzycQPWA== + +"@next/react-dev-overlay@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.1.2.tgz#e98edfdc7fbed4d0cb333594469c7fa62f96e6df" + integrity sha512-B81nhgkWr+MbDAXN9I38WIdhAKayfIzrnOXXF2MS4VgxyHBvYQQfmobNNE0XBByyDn0+Ww5s9xg3L6Shh9kWKA== + dependencies: + "@babel/code-frame" "7.12.11" + anser "1.4.9" + chalk "4.0.0" + classnames "2.2.6" + css.escape "1.5.1" + data-uri-to-buffer "3.0.1" + platform "1.3.6" + shell-quote "1.7.2" + source-map "0.8.0-beta.0" + stacktrace-parser "0.1.10" + strip-ansi "6.0.0" + +"@next/react-refresh-utils@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.1.2.tgz#1c60150bb3f004fb9dd02db387a952483e6e2e4c" + integrity sha512-SQvtCt6nNOkGKddidQehxtJKMkoapg/kbLy/HwrqU8WdVrVVAk8JQw/QjDHVEsdezRxspeNKbho4L+3jl4c9rw== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -1968,6 +2037,25 @@ mkdirp "^1.0.4" rimraf "^3.0.2" +"@opentelemetry/api@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae" + integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ== + dependencies: + "@opentelemetry/context-base" "^0.14.0" + +"@opentelemetry/context-base@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001" + integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw== + +"@ory/kratos-client@^0.5.4-alpha.1": + version "0.5.4-alpha.1" + resolved "https://registry.yarnpkg.com/@ory/kratos-client/-/kratos-client-0.5.4-alpha.1.tgz#6a87a90fd858fc4cb792253b109ea53884098107" + integrity sha512-koqwcEtEtGoHdX/WU3O4u6UmbMzbmbA06t5qIZv9S4YauxHZIVZM3VMws1ZK5ObgAMI6O5dCs4WYJrJq+QN48g== + dependencies: + axios "^0.19.2" + "@pmmmwh/react-refresh-webpack-plugin@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" @@ -2043,24 +2131,24 @@ escape-string-regexp "^4.0.0" "@sindresorhus/transliterate@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-0.1.1.tgz#779b31244781d3c898f185b61d58c89e7c782674" - integrity sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ== + version "0.1.2" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz#ffce368271d153550e87de81486004f2637425af" + integrity sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w== dependencies: escape-string-regexp "^2.0.0" lodash.deburr "^4.1.0" -"@storybook/addon-actions@6.2.0-rc.10", "@storybook/addon-actions@^6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.2.0-rc.10.tgz#e2f3a8125b6ff4cd92f0adec43a53e8750bd6bf7" - integrity sha512-M5JbYDsgV7povpW4nfx1MuwJC4peOjQiThHOvPB8kvMDJqmTom59EodcEcR9N2SIoTXV+MhkGIMU01plrvTDVw== +"@storybook/addon-actions@6.2.1", "@storybook/addon-actions@^6.2.0-rc.10": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.2.1.tgz#af5924969c691a4fe6ec9266ffefe02b95245063" + integrity sha512-pRzyJIcso+7FJ4Xv4lJZ/mppFgkdnJ3B/R6QPYl1Enwlxjk2CH2iDD+Hq85WFHGfg5cjtFm3fd9EbPXC09ReeA== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/theming" "6.2.1" core-js "^3.8.2" fast-deep-equal "^3.1.3" global "^4.4.0" @@ -2073,17 +2161,17 @@ util-deprecate "^1.0.2" uuid-browser "^3.1.0" -"@storybook/addon-backgrounds@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.2.0-rc.10.tgz#1b65f04aff678a5df7d037923efbe89fec2fcbe5" - integrity sha512-YXO6gm5kXP9zuS2XMfB0bHw3WmDbrX5gyonOEMsYIabPqwvN26LROkxSLTWEHRulf9wnCiLUpXhfDHzTnUqn9Q== +"@storybook/addon-backgrounds@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-6.2.1.tgz#3e04dcba3a202f42e2831a2e017bc90ddd2406b7" + integrity sha512-ZR9zPHpw0uR3u9Qfx4HG7YBTucTL+l3KZ1uEEIsyDIPrwNTPpzsryzvwS6/Syfo/ndZZP3CTdkYGTBtnt0ALXA== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/theming" "6.2.1" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" @@ -2091,24 +2179,24 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/addon-controls@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.2.0-rc.10.tgz#361256e025310e8f1d25d7168de6d211bde1fd39" - integrity sha512-QlPLzPhdyhlVctHju3819zkPBTd4TnFmaKd6JZgE3rvwdN/c0A7h4mdpv7u325E9Ki7Uga5sRzT8lDMQ7MwM0w== +"@storybook/addon-controls@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-6.2.1.tgz#1010c15e6df6b4d003ecf945e6e3b95fd03f56db" + integrity sha512-OX2t6R1azMpIZFBcXvxUa2R1TNLrCQMNE8l0BbSzXBI0iJbkh8b4giaPwHE/+DrkCmOv3LeEnEDlVFdUSV7cRQ== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/node-logger" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/node-logger" "6.2.1" + "@storybook/theming" "6.2.1" core-js "^3.8.2" ts-dedent "^2.0.0" -"@storybook/addon-docs@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.2.0-rc.10.tgz#40244b47762f03e98f141324065e4abedcf8a092" - integrity sha512-Q5cR8ngYnt8oZbc7a5kgwOTdbTTlWVYpaCiRTB21bbSN5d2BpJt6hfd60c+nNJmq5W8iQodAPjgSjOYpZAuaww== +"@storybook/addon-docs@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-6.2.1.tgz#fcfdfd56256f01d8d54710a09d1130292a3f8385" + integrity sha512-UIeUDEUDKRmAZW0ZlLMzp9f4iVP76QQOccDGHo7CoZEkj69nuR2g2kdoo0myOSzswq6f4yMgu6Hj4f+v+QCUEg== dependencies: "@babel/core" "^7.12.10" "@babel/generator" "^7.12.11" @@ -2119,19 +2207,19 @@ "@mdx-js/loader" "^1.6.22" "@mdx-js/mdx" "^1.6.22" "@mdx-js/react" "^1.6.22" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/builder-webpack4" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/builder-webpack4" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core" "6.2.1" + "@storybook/core-events" "6.2.1" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "6.2.0-rc.10" - "@storybook/postinstall" "6.2.0-rc.10" - "@storybook/source-loader" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/node-logger" "6.2.1" + "@storybook/postinstall" "6.2.1" + "@storybook/source-loader" "6.2.1" + "@storybook/theming" "6.2.1" acorn "^7.4.1" acorn-jsx "^5.3.1" acorn-walk "^7.2.0" @@ -2154,33 +2242,33 @@ util-deprecate "^1.0.2" "@storybook/addon-essentials@^6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.2.0-rc.10.tgz#64f5396fab940ddf79c3fdfadbec91c08ea799d6" - integrity sha512-Zq1TaVGoSJ9VPg1uw8VEV8OB5KQBOLafaCGuZv0P4nUO3sAAmdRnJ7F+WV3U8HvtkeQPFs/FDvQGpR4QrOjg5g== + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-6.2.1.tgz#6b8f5e7f10da431ef287e64df9e47ce6eb2fff78" + integrity sha512-jgz37V+FCIk3GKsVdvBf5Toz+yz/FPB1B85wFrkxNpJljdHC1XN5xd41AVFlkEsqzeaTLiHPpthHaPtjaQpbOw== dependencies: - "@storybook/addon-actions" "6.2.0-rc.10" - "@storybook/addon-backgrounds" "6.2.0-rc.10" - "@storybook/addon-controls" "6.2.0-rc.10" - "@storybook/addon-docs" "6.2.0-rc.10" - "@storybook/addon-toolbars" "6.2.0-rc.10" - "@storybook/addon-viewport" "6.2.0-rc.10" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/node-logger" "6.2.0-rc.10" + "@storybook/addon-actions" "6.2.1" + "@storybook/addon-backgrounds" "6.2.1" + "@storybook/addon-controls" "6.2.1" + "@storybook/addon-docs" "6.2.1" + "@storybook/addon-toolbars" "6.2.1" + "@storybook/addon-viewport" "6.2.1" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/node-logger" "6.2.1" core-js "^3.8.2" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" "@storybook/addon-links@^6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.2.0-rc.10.tgz#da30c573fcbee38f1fb8cf295c52e29b58ac651a" - integrity sha512-asVXg3gLYsI73YT5g+qxa2iayt+nlSSZtR1QHuys5q2sJorJ/++XVE8q238zbxvUgkWoYhhUFMSvj1UgvXMjxA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-6.2.1.tgz#64a9978b9eaec8a85de8b965d823cf5786c1a6ba" + integrity sha512-ZVAaNEVdQaL8+OLu6A7yfake0w8cn9YOZAnUcrIPalIVZ7MESy/vfxAE7lzYk17ngC9G+w5ELtzoD4WThTcCNg== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" "@storybook/csf" "0.0.1" - "@storybook/router" "6.2.0-rc.10" + "@storybook/router" "6.2.1" "@types/qs" "^6.9.5" core-js "^3.8.2" global "^4.4.0" @@ -2200,62 +2288,62 @@ postcss-loader "^4.2.0" style-loader "^1.3.0" -"@storybook/addon-toolbars@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.2.0-rc.10.tgz#0abde5ee37e86b89144d2e39e387d642bd6f62a3" - integrity sha512-lrp/q1aA1Fza9mWOXiiMW2vVZPhxk65XUPsknV5no0N+QqLcDxH59FKoen3Au7aEFYfqujN2LbbTeLW91lGE5Q== +"@storybook/addon-toolbars@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-6.2.1.tgz#c13121947ba87c53c1e5be91b41543e4b29bce83" + integrity sha512-OoHahYl/WcVPhYk8xULlvL34pKWOSZQWTt7kVAdbZqKCNB/T7yy6FkZ7jy56u25oz6bL12DVUeUN4kJn6XxFFA== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/components" "6.2.1" core-js "^3.8.2" -"@storybook/addon-viewport@6.2.0-rc.10", "@storybook/addon-viewport@^6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.2.0-rc.10.tgz#d9bd496b09a31aad13a60f97f9923e70faa2acfb" - integrity sha512-VzvGshUsyJhLkHhlktFwvO8dkUGxIvy1jEN5Wm1RTtJmBmwDsm7mFOPjScWsWdLZBTkX6iebPWmB73n/PcbOfA== +"@storybook/addon-viewport@6.2.1", "@storybook/addon-viewport@^6.2.0-rc.10": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-6.2.1.tgz#89a5fa43316e5a17341866b84556d321f15d0b1f" + integrity sha512-mdwMRBraYMCdamkBwzyReaOWD9CwHjQNJ4T3h3kLOMgK8BiKHJxNkXbVCuW7A1GemHK5Mfdu7Uf19quXKHf7+g== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/theming" "6.2.1" core-js "^3.8.2" global "^4.4.0" memoizerific "^1.11.3" prop-types "^15.7.2" regenerator-runtime "^0.13.7" -"@storybook/addons@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.2.0-rc.10.tgz#c6c0b7afe89365c27a7de1c3a1b4b17f9c3e4ca9" - integrity sha512-ouF/NnpivFbOvHJiSWSiKeKOLo3kSG4wYOCNt8LvCEHIKusdKz4XqNNGcIqct+Mu9OSLjcqG3oqenSUldKocKw== +"@storybook/addons@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.2.1.tgz#7f1c7042912b82023e4dfc08f31c4149d90800bd" + integrity sha512-HqrpqF+XMnqAJHhN6Te7YYR3Gjcj7Js9bO59jd5AQQ96PBoQ6k5I/tCmripvWVxdak4UfI2p4zn6x7Kkw5bHxA== dependencies: - "@storybook/api" "6.2.0-rc.10" - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/router" "6.2.0-rc.10" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/api" "6.2.1" + "@storybook/channels" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/router" "6.2.1" + "@storybook/theming" "6.2.1" core-js "^3.8.2" global "^4.4.0" regenerator-runtime "^0.13.7" -"@storybook/api@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.2.0-rc.10.tgz#7be374372ee41bfd0db941ba6341edd3c9390296" - integrity sha512-RI0yKxe9fgNi2UllgsZbfl/oXKesazmuLfr57Fgo9vmDSKlFhnxJ2GoImxGL9Xo0OnFKQYJ9o3klgUEdKUAYGg== +"@storybook/api@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.2.1.tgz#e76b6c31578089f0df06fd67486d9bc7d2eca4c1" + integrity sha512-W5H5FExLExCbj67OAQYRopeTdADuHOUgQiMoeoYSckdyWQl5DJb2l85yDlr0auZNYbjFHzJqEOs0Loch/NNlYA== dependencies: "@reach/router" "^1.3.4" - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/channels" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" "@storybook/csf" "0.0.1" - "@storybook/router" "6.2.0-rc.10" + "@storybook/router" "6.2.1" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/theming" "6.2.1" "@types/reach__router" "^1.3.7" core-js "^3.8.2" fast-deep-equal "^3.1.3" @@ -2269,10 +2357,10 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-webpack4@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.2.0-rc.10.tgz#c674ac2944b7ec68ab598af26ada04ad8ad8f148" - integrity sha512-x0skFPJxZWBOiIKYueJ7EbyKZe+mlFsPchvQ8yPURQlBz81n2T3Qwb/blTvlsVZ4giHhRC41uHQ1wQQPCF1MUg== +"@storybook/builder-webpack4@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack4/-/builder-webpack4-6.2.1.tgz#4401186f5ca9f922256b804609936870555c3b9b" + integrity sha512-cnGBqDwkSmjKP7hd7HuJHaUVm/ILxjQ1LpXNXzPkd0My+GaG+EPxlhs3TacB9tFHWgpxlHpowAbBsb7RsRei6A== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -2295,20 +2383,20 @@ "@babel/preset-env" "^7.12.11" "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/channel-postmessage" "6.2.0-rc.10" - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core-common" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/node-logger" "6.2.0-rc.10" - "@storybook/router" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/channel-postmessage" "6.2.1" + "@storybook/channels" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core-common" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/node-logger" "6.2.1" + "@storybook/router" "6.2.1" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.0-rc.10" - "@storybook/ui" "6.2.0-rc.10" + "@storybook/theming" "6.2.1" + "@storybook/ui" "6.2.1" "@types/node" "^14.0.10" "@types/webpack" "^4.41.26" autoprefixer "^9.8.6" @@ -2345,38 +2433,38 @@ webpack-hot-middleware "^2.25.0" webpack-virtual-modules "^0.2.2" -"@storybook/channel-postmessage@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.2.0-rc.10.tgz#e8b7f74d1584c0470f0e4369f16a29bce82fc2e5" - integrity sha512-iGeMqQavMntR/ZC3LVBMcSnDirV9/yBeg7o2UmpbB60Pt+yIf0HpRrgIi0PvY+o6b6YQrX41b57d3SshUe1sHA== +"@storybook/channel-postmessage@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.2.1.tgz#9bb22ef776c315ad09caf1a149fbe16496593821" + integrity sha512-6AXxq8QvUzO7OI4qENux2zFiK+n9pVDDRdazZPesWYaD11jrnh7IGMYwa9a3mbVWJchVwc6b74uWUOmvMhG0cQ== dependencies: - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/channels" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" core-js "^3.8.2" global "^4.4.0" qs "^6.10.0" telejson "^5.1.0" -"@storybook/channels@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.2.0-rc.10.tgz#764aa98157b45e0b3429ce29ae53c5b3959342e4" - integrity sha512-IffYpvWh/axzgSpvDX1/ivnRcTqhu+7DZ35dySRNjJZwwG/4C35lxazpkAdv4M62xbA2fq1ldW9vIjdFCYuwfQ== +"@storybook/channels@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.2.1.tgz#3b9f4164dddbb5a2b1628adfaeb0e7c1321d2a1b" + integrity sha512-p0QopD9JFIAYkDuVqqmpObcE4apnIZUG9bccRX2yNYCaNrRl3zalV4zDY/2TiwgoFOV2ydKPKdK2ZJcDY5JItg== dependencies: core-js "^3.8.2" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-api@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.2.0-rc.10.tgz#f4665150b6798f4969602dccc153664b578e5d6c" - integrity sha512-xtRADGf986Z/jraqtu9wpRNdn9oVTRt7+s6A2aj/FuFGmiQ1z4o7sM6AkQEck1NgJmYOqsxPyV0181QGQ30o/w== +"@storybook/client-api@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.2.1.tgz#21433c9b9baa019bd0bcdcf7f9f96e7e7058bfdf" + integrity sha512-ABl83n8F1F5fsjlxcpqWMYP9HDT7stkLKCIkN4zIC0uHWMHtWOYyJzJl166nv+nLjHiQdw+kimgA2jiKQfoF3Q== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/channel-postmessage" "6.2.0-rc.10" - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/channel-postmessage" "6.2.1" + "@storybook/channels" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" "@storybook/csf" "0.0.1" "@types/qs" "^6.9.5" "@types/webpack-env" "^1.16.0" @@ -2391,23 +2479,23 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-logger@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.2.0-rc.10.tgz#d8d89505c87bc3257fa5ca9b020d666f032de7b5" - integrity sha512-pA962KKjAj457qmSgKoyqvAPSwNFUMZCMk6imdu8AZ0LHY6qx8toEMQvWTeY3DC/AqjZnfu15z4UR5Fe2tlQNA== +"@storybook/client-logger@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.2.1.tgz#6fb8b39309cdaf6fd431bfe0fe11e4454afc910e" + integrity sha512-VDdSaM9MRiiFQF545GFgNJNb6hMC+JHjiV0cfJ3adrs021JE/J3d6Nc8Kn/XcpcX2cFrQsbffrOGaCAWAIllNg== dependencies: core-js "^3.8.2" global "^4.4.0" -"@storybook/components@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.2.0-rc.10.tgz#da2107ce25438ac4d1ab74697086e4777dc88a42" - integrity sha512-i6oOwCZgJ5flA80MAhz4Bfrbp+fvufeFeGD7qG57reT1Vt1Aptto+sCmXWx8u/tEQ1ckuMNv0jpcXV6rka++Hg== +"@storybook/components@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.2.1.tgz#da664c075844be49637c8d0b153f5a30cad68f20" + integrity sha512-pptXdgifINkc8K0yp55lOlqQywAyAwkuQVXAhbSGZriLn2kT6ei0GElJaEftcGlciOAUvi9H0rvcIvCAlxiPRQ== dependencies: "@popperjs/core" "^2.6.0" - "@storybook/client-logger" "6.2.0-rc.10" + "@storybook/client-logger" "6.2.1" "@storybook/csf" "0.0.1" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/theming" "6.2.1" "@types/color-convert" "^2.0.0" "@types/overlayscrollbars" "^1.12.0" "@types/react-syntax-highlighter" "11.0.5" @@ -2427,19 +2515,20 @@ react-textarea-autosize "^8.3.0" regenerator-runtime "^0.13.7" ts-dedent "^2.0.0" + util-deprecate "^1.0.2" -"@storybook/core-client@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.2.0-rc.10.tgz#1c8a31a7830f705ed3b64bfd0cd3ffa46e9277ed" - integrity sha512-EZrjF8Oz8DGGZwuWk8vuFm1XzS2lzBaHqYYzoLbt0vdbDMJaJPo/DHp9xOBBwgNj8KGp3WbjYzpxsRJru21I1A== +"@storybook/core-client@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-6.2.1.tgz#4431e14b577f0dc52d2f4622e2c7fad9420edfec" + integrity sha512-RaHszy6H2aAFqQrF3bwJTDpkTZC7yjVpQm5yK07SQqVz5qKAWmuzeXeNTgUcLo3k54i/GQXf8Knu7Q6M3vs54A== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/channel-postmessage" "6.2.0-rc.10" - "@storybook/client-api" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/channel-postmessage" "6.2.1" + "@storybook/client-api" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/core-events" "6.2.1" "@storybook/csf" "0.0.1" - "@storybook/ui" "6.2.0-rc.10" + "@storybook/ui" "6.2.1" ansi-to-html "^0.6.11" core-js "^3.8.2" global "^4.4.0" @@ -2450,10 +2539,10 @@ unfetch "^4.2.0" util-deprecate "^1.0.2" -"@storybook/core-common@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.2.0-rc.10.tgz#a78861e2b41fd8beaf490381946b2609d3c039ab" - integrity sha512-SP7NQO5HPoCKTNftIWDD2LNNr9QPuw5Zojpvcba+mSmJKmmUAXVg8rMvNrDq3756tmxfQ/qK+2jBudvXUc4Afg== +"@storybook/core-common@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-6.2.1.tgz#2f308ff3b434042938469955626434dac12c22a6" + integrity sha512-rr+zKt6GGpknsRQy/krt7fKMZH5Y3o5b6wldtlb65Gl2E8rVdlIP/bvrfOQ2n0je35Z68auIU9il1/xz8f4z8w== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-proposal-class-properties" "^7.12.1" @@ -2476,7 +2565,7 @@ "@babel/preset-react" "^7.12.10" "@babel/preset-typescript" "^7.12.7" "@babel/register" "^7.12.1" - "@storybook/node-logger" "6.2.0-rc.10" + "@storybook/node-logger" "6.2.1" "@storybook/semver" "^7.3.2" "@types/glob-base" "^0.3.0" "@types/micromatch" "^4.0.1" @@ -2504,29 +2593,29 @@ util-deprecate "^1.0.2" webpack "4" -"@storybook/core-events@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.2.0-rc.10.tgz#a6d91fc1caa216e6f4581f87525dc0cbbab03d66" - integrity sha512-DDSjaXwhXZwjW3NhTeKIlmH2cZIfQNXRacgWJSRBPQEO9K/RsjC5oWH3gtIM2f2fSMoE4Han4TENIqhnSRzHIg== +"@storybook/core-events@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.2.1.tgz#54e41fde06e07d4518e18857bc0ecf0f8d9c79c2" + integrity sha512-zZyVkCOQX52n0++/2ui3os6G7CSS0APqG+AlOhu8vF1O+NOknkYSTDPVncFcoWCHnWsS9ANcMwkRRGCocFKD6g== dependencies: core-js "^3.8.2" -"@storybook/core-server@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.2.0-rc.10.tgz#86ab012e97a6078cb3c6f24ca6e1a17913f79268" - integrity sha512-UOxoSnIW1+JQQJljNurVdujI0x/TqJIUE6+FX31PcCSNkc7n3VS7uq8mJl7mi8EWpvabYLXtiR+5CTyufQQeHw== +"@storybook/core-server@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-6.2.1.tgz#3d3c88de0f886842a60a789a98feb75091993f11" + integrity sha512-GT0jSqa7d7rfkopetK0gbJR68DChLyiU3+avtLkp2lPCiokPS226KshmvJbAwVeNrEgts4afgQzAkxx26/se/Q== dependencies: "@babel/core" "^7.12.10" "@babel/plugin-transform-template-literals" "^7.12.1" "@babel/preset-react" "^7.12.10" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/builder-webpack4" "6.2.0-rc.10" - "@storybook/core-client" "6.2.0-rc.10" - "@storybook/core-common" "6.2.0-rc.10" - "@storybook/node-logger" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/builder-webpack4" "6.2.1" + "@storybook/core-client" "6.2.1" + "@storybook/core-common" "6.2.1" + "@storybook/node-logger" "6.2.1" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.0-rc.10" - "@storybook/ui" "6.2.0-rc.10" + "@storybook/theming" "6.2.1" + "@storybook/ui" "6.2.1" "@types/node" "^14.0.10" "@types/node-fetch" "^2.5.7" "@types/pretty-hrtime" "^1.0.0" @@ -2570,13 +2659,13 @@ webpack-dev-middleware "^3.7.3" webpack-virtual-modules "^0.2.2" -"@storybook/core@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.2.0-rc.10.tgz#b044006341ce14cf7aab73e6fbdb457514639e6b" - integrity sha512-TzwyZOt2led/9pf3hOp6IoOEoa+w2YU0dtOzCiFx9PPx7Ib3ps2tGKAyhtfzw0n/5ph3KEUoVBItmHNSFdSuxA== +"@storybook/core@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.2.1.tgz#846f25edfb4cb6ef7a7370a39b5c461bf72102e5" + integrity sha512-Q13btg+NggY1BoUHIAmNx6P+C3bPwV6LM+nEfNcTO4emfjCrF8j7vIpN+aRzMl+PGSU/QO+fteqp/+S9jc8HBw== dependencies: - "@storybook/core-client" "6.2.0-rc.10" - "@storybook/core-server" "6.2.0-rc.10" + "@storybook/core-client" "6.2.1" + "@storybook/core-server" "6.2.1" "@storybook/csf@0.0.1": version "0.0.1" @@ -2585,10 +2674,10 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.2.0-rc.10.tgz#6a2d5893c0b0630f736a5d2359d497322aa43479" - integrity sha512-Zju38apfSyqjI1r7/HQqKDCSDnlbxEimtwoNxp0sn1l8GxZTH6dqtedefGEiwY7sNxCDuIgyXMRPEVUN7zuNug== +"@storybook/node-logger@6.2.1", "@storybook/node-logger@^6.1.14": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.2.1.tgz#80afe89a3f85e2329c46d530f4690a13d30c7c29" + integrity sha512-PuyLORwbvs6uB6dzbY+Uvs/LUW94yD5sbarNGIg866lIzhNT6nZOCRkiEgo7+RD1/mcMz0Lho0kh5Hob2Y5mqQ== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.1.0" @@ -2596,36 +2685,25 @@ npmlog "^4.1.2" pretty-hrtime "^1.0.3" -"@storybook/node-logger@^6.1.14": - version "6.1.21" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.1.21.tgz#bcf882209697acfe4fc60bc224676400bce260ed" - integrity sha512-wQZZw4n1PG3kGOsczWCBC6+8RagYkrGYDqsVOpUcs5shGbPg5beCXDuzP4nxz2IlsoP9ZtTSaX741H791OIOjA== - dependencies: - "@types/npmlog" "^4.1.2" - chalk "^4.0.0" - core-js "^3.0.1" - npmlog "^4.1.2" - pretty-hrtime "^1.0.3" - -"@storybook/postinstall@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.2.0-rc.10.tgz#fc15f2c866e002391c683bcaee245d2586401691" - integrity sha512-Svl4kuxRpLZLSZMoTrb0iWbtzAiVBdMGESjazCkUNEq7j25QFlRSGh6pUxv5EDHOYGW4Ii1rnswM58z4D4xYTg== +"@storybook/postinstall@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-6.2.1.tgz#71c276cf658ab42b1fd67f965330941c6e47786a" + integrity sha512-NpATQ8qt09/+0FdWpUJ/G/R0SKO9yPcMrOSoub4Knmhr+aBgIoGfQxDl0pwEzvHw6Ookt0eM4k++7wNO8hCa4A== dependencies: core-js "^3.8.2" "@storybook/react@^6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.2.0-rc.10.tgz#c0bcd92cd28f8ea1f8fb4e3117e917ba7b174ee2" - integrity sha512-XhnKy5SnJg/5+V11rPao6y+xds5BoMUvsWmXnCxeu5zjmPyVYWPkp7rZhWiASngHhv92LVOPXbvw60L2pqLMmA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.2.1.tgz#d07d5dc3b48823527a6a632189008d4a2c9399be" + integrity sha512-k9muo4BqItVnCNx45uQAUP9gQOtEBMQljrUD+UesTxZ11gfWPE4QeUHryJJUsA3ojKtUN8VAQawwHp/5cSFDFw== dependencies: "@babel/preset-flow" "^7.12.1" "@babel/preset-react" "^7.12.10" "@pmmmwh/react-refresh-webpack-plugin" "^0.4.3" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/core" "6.2.0-rc.10" - "@storybook/core-common" "6.2.0-rc.10" - "@storybook/node-logger" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/core" "6.2.1" + "@storybook/core-common" "6.2.1" + "@storybook/node-logger" "6.2.1" "@storybook/semver" "^7.3.2" "@types/webpack-env" "^1.16.0" babel-plugin-add-react-displayname "^0.0.5" @@ -2643,13 +2721,13 @@ ts-dedent "^2.0.0" webpack "4" -"@storybook/router@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.2.0-rc.10.tgz#6e1496ee46353d830fde603cb3ea43f56ae01fb0" - integrity sha512-G2T30gwlwVsvRk/oB8j/ex6DP2cxy2yRBNXok9vgl0r8WNFpiZyUKBXHsUPCD+skMchPaBgh/k/pKExdKgtqHQ== +"@storybook/router@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.2.1.tgz#45a40a13c0cbae54ac4034e3d461d0e9a3f80bcb" + integrity sha512-gG4c7NB/z/8zaJjkMFPA4jzENFPg+eywzHK6deuja3iXiEHLd/O0nqwQh1jzxOXLNMWjrCrGm/TTOrz8LbO5Lw== dependencies: "@reach/router" "^1.3.4" - "@storybook/client-logger" "6.2.0-rc.10" + "@storybook/client-logger" "6.2.1" "@types/reach__router" "^1.3.7" core-js "^3.8.2" fast-deep-equal "^3.1.3" @@ -2667,13 +2745,13 @@ core-js "^3.6.5" find-up "^4.1.0" -"@storybook/source-loader@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.2.0-rc.10.tgz#4580159beaf26b4ae2e40f326f3225da02fa2a3d" - integrity sha512-0fbj4VszlGof/A+AzO6knOU4eiaPCpX1bBMfbUPmH0FroiOtU8M6oUZPBpbtPzIH0QkxO9X6X4DDxweZQa6fPA== +"@storybook/source-loader@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/source-loader/-/source-loader-6.2.1.tgz#547d9dd0590987ba427a2e0fb8bbbf5567165b88" + integrity sha512-amK+jAi1UqU6T2QMUnx7o1lMBA0ex2FsoPtzMQR3n758VDw22pd3Fs9GiCsRLAYeTLH9dVoH8FwB3MstpAEhuw== dependencies: - "@storybook/addons" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/client-logger" "6.2.1" "@storybook/csf" "0.0.1" core-js "^3.8.2" estraverse "^5.2.0" @@ -2683,15 +2761,15 @@ prettier "~2.2.1" regenerator-runtime "^0.13.7" -"@storybook/theming@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.2.0-rc.10.tgz#bce4e1f4a3fde12a7da22f7c8822dc009ff7ae20" - integrity sha512-kUYbQPsYGuEKNHM8XjruufXUStaMuy6KjTPt/Ohi3NojcybOsStJ8ZqtJh8EPBBb9MPaTPJ4L7scXKcuUKZ6yQ== +"@storybook/theming@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.2.1.tgz#ad0ebc0a22560b775eca691b5e72c9db235eaf07" + integrity sha512-4sX3Qy6mgYlWpJcJx3AmMfzXhj/o/lVpux9MdhNDRFkDU958k7NhoSdny3ahg59C9t7yQ4chakZynKLgnVkFTA== dependencies: "@emotion/core" "^10.1.1" "@emotion/is-prop-valid" "^0.8.6" "@emotion/styled" "^10.0.27" - "@storybook/client-logger" "6.2.0-rc.10" + "@storybook/client-logger" "6.2.1" core-js "^3.8.2" deep-object-diff "^1.1.0" emotion-theming "^10.0.27" @@ -2701,21 +2779,21 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/ui@6.2.0-rc.10": - version "6.2.0-rc.10" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.2.0-rc.10.tgz#7716aabaf5ff1cdc61d9a8df7a174d922bb91bd7" - integrity sha512-4pmk3EScIleOhJAGxf2JXULQAoETzwW66sUh0E0Ie449qHIpkK+qbxr3VxtwA+E14KksxMvlR74sr7dt44jmQw== +"@storybook/ui@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.2.1.tgz#ea2567dc14240a67b14a9bec9bc672c01d6e1430" + integrity sha512-RUK1feL5XWftXzOxuKvsv8Y6fsznQpOuROgTFhzAJtusyhcqOKMr74BOLX5Ldkb6Le0OVA65nGwxannhzG2dMA== dependencies: "@emotion/core" "^10.1.1" - "@storybook/addons" "6.2.0-rc.10" - "@storybook/api" "6.2.0-rc.10" - "@storybook/channels" "6.2.0-rc.10" - "@storybook/client-logger" "6.2.0-rc.10" - "@storybook/components" "6.2.0-rc.10" - "@storybook/core-events" "6.2.0-rc.10" - "@storybook/router" "6.2.0-rc.10" + "@storybook/addons" "6.2.1" + "@storybook/api" "6.2.1" + "@storybook/channels" "6.2.1" + "@storybook/client-logger" "6.2.1" + "@storybook/components" "6.2.1" + "@storybook/core-events" "6.2.1" + "@storybook/router" "6.2.1" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.2.0-rc.10" + "@storybook/theming" "6.2.1" "@types/markdown-to-jsx" "^6.11.3" copy-to-clipboard "^3.3.1" core-js "^3.8.2" @@ -2736,6 +2814,18 @@ resolve-from "^5.0.0" store2 "^2.12.0" +"@stripe/react-stripe-js@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.4.0.tgz#a67e72202297fc409dc2c8c4f3fb98e0b61fa06d" + integrity sha512-Pz5QmG8PgJ3pi8gOWxlngk+ns63p2L1Ds192fn55ykZNRKfGz3G6sfssUVThHn/NAt2Hp1eCEsy/hvlKnXJI6g== + dependencies: + prop-types "^15.7.2" + +"@stripe/stripe-js@^1.13.0": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.13.2.tgz#bb2f561085b5dd091355df871d432b8e1fd467f6" + integrity sha512-fycUk7ECukNc31lD5apcrUgdRC1BfiIacs+CpacoCjOgo3ablolnWCvDQWMmVWtODYa8bBv2dlBla+Edc5OvZg== + "@svgr/babel-plugin-add-jsx-attribute@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" @@ -2853,11 +2943,33 @@ dependencies: defer-to-connect "^2.0.0" +"@tailwindcss/forms@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.2.1.tgz#3244b185854fae1a7cbe8d2456314d8b2d98cf43" + integrity sha512-czfvEdY+J2Ogfd6RUSr/ZSUmDxTujr34M++YLnp2cCPC3oJ4kFvFMaRXA6cEXKw7F1hJuapdjXRjsXIEXGgORg== + dependencies: + mini-svg-data-uri "^1.2.3" + +"@tailwindcss/typography@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.4.0.tgz#b80974ad6af93df7b06e1981cb4d79698b6ad5c7" + integrity sha512-3BfOYT5MYNEq81Ism3L2qu/HRP2Q5vWqZtZRQqQrthHuaTK9qpuPfbMT5WATjAM5J1OePKBaI5pLoX4S1JGNMQ== + dependencies: + lodash.castarray "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + "@tokenizer/token@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3" integrity sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w== +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "@trysound/sax@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.1.1.tgz#3348564048e7a2d7398c935d466c0414ebb6a669" @@ -2880,6 +2992,14 @@ resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== +"@types/body-parser@*": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" + integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/braces@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb" @@ -2922,6 +3042,13 @@ resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6" integrity sha1-zR6FU2M60xhcPy8jns/10mQ+krY= +"@types/connect@*": + version "3.4.34" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" + integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== + dependencies: + "@types/node" "*" + "@types/cookie@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" @@ -2951,9 +3078,9 @@ "@types/estree" "*" "@types/eslint@*", "@types/eslint@^7.2.6": - version "7.2.7" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.7.tgz#f7ef1cf0dceab0ae6f9a976a0a9af14ab1baca26" - integrity sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q== + version "7.2.8" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.8.tgz#45cd802380fcc352e5680e1781d43c50916f12ee" + integrity sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2973,6 +3100,40 @@ resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== +"@types/express-jwt@0.0.42": + version "0.0.42" + resolved "https://registry.yarnpkg.com/@types/express-jwt/-/express-jwt-0.0.42.tgz#4f04e1fadf9d18725950dc041808a4a4adf7f5ae" + integrity sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag== + dependencies: + "@types/express" "*" + "@types/express-unless" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.19" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz#00acfc1632e729acac4f1530e9e16f6dd1508a1d" + integrity sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-unless@*": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@types/express-unless/-/express-unless-0.5.1.tgz#4f440b905e42bbf53382b8207bc337dc5ff9fd1f" + integrity sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw== + dependencies: + "@types/express" "*" + +"@types/express@*": + version "4.17.11" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" + integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/get-port@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-3.2.0.tgz#f9e0a11443cc21336470185eae3dfba4495d29bc" @@ -3085,7 +3246,7 @@ dependencies: "@types/node" "*" -"@types/lodash@^4.14.92": +"@types/lodash@^4.14.165", "@types/lodash@^4.14.92": version "4.14.168" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== @@ -3097,7 +3258,7 @@ dependencies: "@types/react" "*" -"@types/mdast@^3.0.0": +"@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== @@ -3111,6 +3272,11 @@ dependencies: "@types/braces" "*" +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" @@ -3136,7 +3302,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@^14.0.10", "@types/node@^14.14.10": +"@types/node@*", "@types/node@>=8.1.0", "@types/node@^14.0.10", "@types/node@^14.14.10", "@types/node@^14.14.30": version "14.14.37" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== @@ -3191,11 +3357,16 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== -"@types/qs@^6.9.5": +"@types/qs@*", "@types/qs@^6.9.5": version "6.9.6" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + "@types/reach__router@^1.3.7": version "1.3.7" resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.7.tgz#de8ab374259ae7f7499fc1373b9697a5f3cd6428" @@ -3247,6 +3418,14 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== +"@types/serve-static@*": + version "1.13.9" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" + integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/sinonjs__fake-timers@^6.0.1": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz#3a84cf5ec3249439015e14049bd3161419bf9eae" @@ -3284,6 +3463,22 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== +"@types/vfile-message@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" + integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== + dependencies: + vfile-message "*" + +"@types/vfile@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" + integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== + dependencies: + "@types/node" "*" + "@types/unist" "*" + "@types/vfile-message" "*" + "@types/webpack-env@^1.16.0": version "1.16.0" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.0.tgz#8c0a9435dfa7b3b1be76562f3070efb3f92637b4" @@ -3335,12 +3530,12 @@ integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw== "@typescript-eslint/eslint-plugin@^4.15.2": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz#56f8da9ee118fe9763af34d6a526967234f6a7f0" - integrity sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw== + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.20.0.tgz#9d8794bd99aad9153092ad13c96164e3082e9a92" + integrity sha512-sw+3HO5aehYqn5w177z2D82ZQlqHCwcKSMboueo7oE4KU9QiC0SAgfS/D4z9xXvpTc8Bt41Raa9fBR8T2tIhoQ== dependencies: - "@typescript-eslint/experimental-utils" "4.19.0" - "@typescript-eslint/scope-manager" "4.19.0" + "@typescript-eslint/experimental-utils" "4.20.0" + "@typescript-eslint/scope-manager" "4.20.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -3348,60 +3543,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.19.0.tgz#9ca379919906dc72cb0fcd817d6cb5aa2d2054c6" - integrity sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA== +"@typescript-eslint/experimental-utils@4.20.0": + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.20.0.tgz#a8ab2d7b61924f99042b7d77372996d5f41dc44b" + integrity sha512-sQNlf6rjLq2yB5lELl3gOE7OuoA/6IVXJUJ+Vs7emrQMva14CkOwyQwD7CW+TkmOJ4Q/YGmoDLmbfFrpGmbKng== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.19.0" - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/typescript-estree" "4.19.0" + "@typescript-eslint/scope-manager" "4.20.0" + "@typescript-eslint/types" "4.20.0" + "@typescript-eslint/typescript-estree" "4.20.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.15.2": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.19.0.tgz#4ae77513b39f164f1751f21f348d2e6cb2d11128" - integrity sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA== + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.20.0.tgz#8dd403c8b4258b99194972d9799e201b8d083bdd" + integrity sha512-m6vDtgL9EABdjMtKVw5rr6DdeMCH3OA1vFb0dAyuZSa3e5yw1YRzlwFnm9knma9Lz6b2GPvoNSa8vOXrqsaglA== dependencies: - "@typescript-eslint/scope-manager" "4.19.0" - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/typescript-estree" "4.19.0" + "@typescript-eslint/scope-manager" "4.20.0" + "@typescript-eslint/types" "4.20.0" + "@typescript-eslint/typescript-estree" "4.20.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.19.0.tgz#5e0b49eca4df7684205d957c9856f4e720717a4f" - integrity sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g== +"@typescript-eslint/scope-manager@4.20.0": + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.20.0.tgz#953ecbf3b00845ece7be66246608be9d126d05ca" + integrity sha512-/zm6WR6iclD5HhGpcwl/GOYDTzrTHmvf8LLLkwKqqPKG6+KZt/CfSgPCiybshmck66M2L5fWSF/MKNuCwtKQSQ== dependencies: - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/visitor-keys" "4.19.0" + "@typescript-eslint/types" "4.20.0" + "@typescript-eslint/visitor-keys" "4.20.0" -"@typescript-eslint/types@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.19.0.tgz#5181d5d2afd02e5b8f149ebb37ffc8bd7b07a568" - integrity sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA== +"@typescript-eslint/types@4.20.0": + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.20.0.tgz#c6cf5ef3c9b1c8f699a9bbdafb7a1da1ca781225" + integrity sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w== -"@typescript-eslint/typescript-estree@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.19.0.tgz#8a709ffa400284ab72df33376df085e2e2f61147" - integrity sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA== +"@typescript-eslint/typescript-estree@4.20.0": + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.20.0.tgz#8b3b08f85f18a8da5d88f65cb400f013e88ab7be" + integrity sha512-Knpp0reOd4ZsyoEJdW8i/sK3mtZ47Ls7ZHvD8WVABNx5Xnn7KhenMTRGegoyMTx6TiXlOVgMz9r0pDgXTEEIHA== dependencies: - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/visitor-keys" "4.19.0" + "@typescript-eslint/types" "4.20.0" + "@typescript-eslint/visitor-keys" "4.20.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.19.0.tgz#cbea35109cbd9b26e597644556be4546465d8f7f" - integrity sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A== +"@typescript-eslint/visitor-keys@4.20.0": + version "4.20.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz#1e84db034da13f208325e6bfc995c3b75f7dbd62" + integrity sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A== dependencies: - "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/types" "4.20.0" eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.11.0": @@ -3745,6 +3940,13 @@ adjust-sourcemap-loader@3.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3796,10 +3998,10 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.4.tgz#8e239d4d56cf884bccca8cca362f508446dc160f" - integrity sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A== +ajv@^8.0.1: + version "8.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.3.tgz#81f1b07003b329f000b7912e59a24f52392867b6" + integrity sha512-Df6NAivu9KpZw+q8ySijAgLvr1mUA5ihkRvCLCxpdYR21ann5yIuN+PpFxmweSj7i3yjJ0x5LN5KVs0RRzskAQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3816,6 +4018,11 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= +anser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" + integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== + anser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/anser/-/anser-2.0.1.tgz#8d9069291fee18306ffaf2e364a690dcc8ed78ad" @@ -4002,6 +4209,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -4033,6 +4245,11 @@ array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.2, array-inclu get-intrinsic "^1.1.1" is-string "^1.0.5" +array-iterate@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7" + integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA== + array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -4117,6 +4334,16 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -4135,6 +4362,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +ast-types@0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" + integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== + ast-types@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" @@ -4174,7 +4406,7 @@ async-retry-ng@^2.0.1: resolved "https://registry.yarnpkg.com/async-retry-ng/-/async-retry-ng-2.0.1.tgz#f5285ec1c52654a2ba6a505d0c18b1eadfaebd41" integrity sha512-iitlc2murdQ3/A5Re3CcplQBEf7vOmFrFQ6RFn3+/+zZUyIHYkZnnEziMSa6YIb2Bs2EJEPZWReTxjHqvQbDbw== -async@1.5.2: +async@1.5.2, async@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= @@ -4236,6 +4468,13 @@ autoprefixer@^9.8.6: postcss "^7.0.32" postcss-value-parser "^4.1.0" +available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -4258,6 +4497,13 @@ axios@0.21.1, axios@^0.21.0, axios@^0.21.1: dependencies: follow-redirects "^1.10.0" +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -4427,12 +4673,12 @@ babel-plugin-react-svg@^3.0.3: resolved "https://registry.yarnpkg.com/babel-plugin-react-svg/-/babel-plugin-react-svg-3.0.3.tgz#7da46a0bd8319f49ac85523d259f145ce5d78321" integrity sha512-Pst1RWjUIiV0Ykv1ODSeceCBsFOP2Y4dusjq7/XkjuzJdvS9CjpkPMUIoO4MLlvp5PiLCeMlsOC7faEUA0gm3Q== -babel-plugin-remove-graphql-queries@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-3.1.0.tgz#03e80d40da51c0240e0e9296e7788c25cca284c0" - integrity sha512-SRQLdxRg74aO8YWi/asxE31qn9bzPzSk28mJ6tHoT7U3Y2VPWhTVCLRXALLlRZEYFyLI4RJKSMT6LdKzN9a79Q== +babel-plugin-remove-graphql-queries@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-3.2.0.tgz#63e044ee1d299679a9b8180f6b111a3769b7a79d" + integrity sha512-cjH42CKC9NjRLZbnPDUucNhnZ2Rq6gfUSLBP2UGfz9KYk/Fi+lzAVU3W+0KUV2DntyoLuV86YwC4mI2QsS3yag== -babel-plugin-syntax-jsx@^6.18.0: +babel-plugin-syntax-jsx@6.18.0, babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= @@ -4455,10 +4701,10 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-gatsby@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-1.1.0.tgz#53176fd26bb798d91b0891d9dffcde5b1a8558cd" - integrity sha512-GM21xzM1mlUvCmA4pjJxyG3Q2abcrIn1wfGgCBUfw3mwHuy/RibF0L9QzpZUcQTRWy82oAjJteA0qaTLFhOD+g== +babel-preset-gatsby@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-1.2.0.tgz#2f90fc9094ba5710d22cbe736ed62fefd292cf7a" + integrity sha512-ChqM9ahcr9ea/wO+rS3y8z9IRlX9yodxq3c+V6NmYCnZkI/SwB6qp5WEC3FCu3U4XUOrvhAQD+PK2N8r1C4lHA== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" @@ -4473,8 +4719,8 @@ babel-preset-gatsby@^1.1.0: babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-macros "^2.8.0" babel-plugin-transform-react-remove-prop-types "^0.4.24" - gatsby-core-utils "^2.1.0" - gatsby-legacy-polyfills "^1.1.0" + gatsby-core-utils "^2.2.0" + gatsby-legacy-polyfills "^1.2.0" babel-runtime@^6.26.0: version "6.26.0" @@ -4505,9 +4751,11 @@ balanced-match@^1.0.0: integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base32-encode@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/base32-encode/-/base32-encode-1.1.1.tgz#d022d86aca0002a751bbe1bf20eb4a9b1cef4e95" - integrity sha512-eqa0BeGghj3guezlasdHJhr3+J5ZbbQvxeprkcDMbRQrjlqOT832IUDT4Al4ofAwekFYMqkkM9KMUHs9Cu0HKA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/base32-encode/-/base32-encode-1.2.0.tgz#e150573a5e431af0a998e32bdfde7045725ca453" + integrity sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A== + dependencies: + to-data-view "^1.1.0" base64-arraybuffer@0.1.4: version "0.1.4" @@ -4601,6 +4849,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + bin-build@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-3.0.0.tgz#c5780a25a8a9f966d8244217e6c1f5082a143861" @@ -4746,6 +4999,11 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= +boolean@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.3.tgz#0fee0c9813b66bef25a8a6a904bb46736d05f024" + integrity sha512-EqrTKXQX6Z3A2nRmMEIlAIfjQOgFnVO2nqZGpbcsPnYGWBwpFqzlrozU1dy+S2iqfYDLh26ef4KrgTxu9xQrxA== + boxen@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" @@ -4864,7 +5122,7 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -browserify-zlib@^0.2.0: +browserify-zlib@0.2.0, browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== @@ -4881,6 +5139,17 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" +browserslist@4.16.1: + version "4.16.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" + integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== + dependencies: + caniuse-lite "^1.0.30001173" + colorette "^1.2.1" + electron-to-chromium "^1.3.634" + escalade "^3.1.1" + node-releases "^1.1.69" + browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.12.2, browserslist@^4.14.5, browserslist@^4.16.3: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" @@ -4936,6 +5205,11 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-equal@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" @@ -4961,6 +5235,14 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= +buffer@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + buffer@^4.3.0: version "4.9.2" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -5228,10 +5510,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001196: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" - integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001173, caniuse-lite@^1.0.30001179, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001196: + version "1.0.30001205" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz#d79bf6a6fb13196b4bb46e5143a22ca0242e0ef8" + integrity sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og== capture-exit@^2.0.0: version "2.0.0" @@ -5260,7 +5542,7 @@ caw@^2.0.0, caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" -ccount@^1.0.0: +ccount@^1.0.0, ccount@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== @@ -5274,6 +5556,14 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -5293,7 +5583,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -5355,6 +5645,21 @@ cheerio@^1.0.0-rc.3: parse5 "^6.0.0" parse5-htmlparser2-tree-adapter "^6.0.0" +chokidar@3.5.1, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.4.3, chokidar@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -5374,21 +5679,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.4.3, chokidar@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -5429,11 +5719,16 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.2.6, classnames@^2.2.5, classnames@^2.2.6: +classnames@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== +classnames@^2.2.5, classnames@^2.2.6: + version "2.3.0" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.0.tgz#19524334bad47ccd99793936b67f9be0860fe835" + integrity sha512-UUf/S3eeczXBjHPpSnrZ1ZyxH3KmLW8nVYFUWIZA/dixYMIQr7l94yYKxaAkmPk7HO9dlT6gFqAPZC02tTdfQw== + clean-css@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" @@ -5583,7 +5878,7 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.2: +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== @@ -5653,7 +5948,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: +comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== @@ -5800,7 +6095,7 @@ console-stream@^0.1.1: resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ= -constants-browserify@^1.0.0: +constants-browserify@1.0.0, constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= @@ -5823,9 +6118,9 @@ content-type@^1.0.4, content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== contentful-management@^7.5.1: - version "7.13.0" - resolved "https://registry.yarnpkg.com/contentful-management/-/contentful-management-7.13.0.tgz#b44286d01b48e705eedbb767878ecf41cf8b2f10" - integrity sha512-Bn4okEcfDws0/nMnKWKk6TXWbJtR0qSq1lnaQIAxcXQvkKnqq+ydsHhebkijmrVw84DI4lZO5Q9n41lsaLLDog== + version "7.13.1" + resolved "https://registry.yarnpkg.com/contentful-management/-/contentful-management-7.13.1.tgz#f37756abfc49a8d05a7536f3c13f2effa03da7b5" + integrity sha512-qiAtCTCFZaheGOl28B8Kd311AJqqUgYr4SPYQz7Ilb+Mf92KeEgCvrP56f3AbTQqLUCIpKMzvb3ghfjseap82A== dependencies: axios "^0.21.0" contentful-sdk-core "^6.7.0" @@ -5929,27 +6224,27 @@ core-js-compat@3.9.0: semver "7.0.0" core-js-compat@^3.8.1, core-js-compat@^3.9.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== + version "3.10.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.10.0.tgz#3600dc72869673c110215ee7a005a8609dea0fe1" + integrity sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ== dependencies: browserslist "^4.16.3" semver "7.0.0" core-js-pure@^3.0.0, core-js-pure@^3.8.2: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + version "3.10.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.10.0.tgz#dab9d6b141779b622b40567e7a536d2276646c15" + integrity sha512-CC582enhrFZStO4F8lGI7QL3SYx7/AIRc+IdSi3btrQGrVsTawo5K/crmKbRrQ+MOMhNX4v+PATn0k2NN6wI7A== core-js@^2.4.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.0.1, core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2, core-js@^3.9.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" - integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== +core-js@^3.0.4, core-js@^3.6.5, core-js@^3.8.2, core-js@^3.9.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" + integrity sha512-MQx/7TLgmmDVamSyfE+O+5BHvG1aUGj/gHhLn1wVtm2B5u1eVIPvh7vkfjwWKNCjrTJB8+He99IntSQ1qP+vYQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -6041,10 +6336,10 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.5.3" -create-gatsby@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/create-gatsby/-/create-gatsby-1.1.0.tgz#91a381886d5127d1f0c7ecf52eaf6fd2e1b9b169" - integrity sha512-AM9JNlbIOkTinGNiG7J8AnCCykZxJfVENlv1vF7hS3RqGsKeZlv4PADTLCdkeIUhaLcjEiEVv7HbyfK8dA2eoA== +create-gatsby@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-gatsby/-/create-gatsby-1.2.0.tgz#c3ff032cd76a16c8f7d9a10cfb960eea9acfe022" + integrity sha512-CXvs1wxGqU1m8PMGmcuJfi9x8koFZZu0JwQr+e7MNnUL33wQEnaLSdwFDBUT4cEqFVWXWAcGErBOZT7/XEgh7Q== create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" @@ -6118,7 +6413,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: +crypto-browserify@3.12.0, crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -6198,7 +6493,7 @@ css-loader@^5.0.1: schema-utils "^3.0.0" semver "^7.3.4" -css-minimizer-webpack-plugin@^1.2.0: +css-minimizer-webpack-plugin@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-1.3.0.tgz#d867b4a54ca9920125b30263505e8cca72bc8cf1" integrity sha512-jFa0Siplmfef4ndKglpVaduY47oHQwioAOEGK0f0vAX0s+vc+SmP6cCMoc+8Adau5600RnOEld5VVdC8CQau7w== @@ -6239,6 +6534,11 @@ css-select@^3.1.2: domutils "^2.4.3" nth-check "^2.0.0" +css-selector-parser@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -6248,9 +6548,9 @@ css-tree@1.0.0-alpha.37: source-map "^0.6.1" css-tree@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" - integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" source-map "^0.6.1" @@ -6270,7 +6570,7 @@ css-what@^4.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== -css.escape@^1.5.1: +css.escape@1.5.1, css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= @@ -6331,6 +6631,22 @@ cssnano-preset-default@^4.0.7: postcss-svgo "^4.0.2" postcss-unique-selectors "^4.0.1" +cssnano-preset-simple@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-1.2.2.tgz#c631bf79ffec7fdfc4069e2f2da3ca67d99d8413" + integrity sha512-gtvrcRSGtP3hA/wS8mFVinFnQdEsEpm3v4I/s/KmNjpdWaThV/4E5EojAzFXxyT5OCSRPLlHR9iQexAqKHlhGQ== + dependencies: + caniuse-lite "^1.0.30001179" + postcss "^7.0.32" + +cssnano-simple@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-1.2.2.tgz#72c2c3970e67123c3b4130894a30dc1050267007" + integrity sha512-4slyYc1w4JhSbhVX5xi9G0aQ42JnRyPg+7l7cqoNyoIDzfWx40Rq3JQZnoAWDu60A4AvKVp9ln/YSUOdhDX68g== + dependencies: + cssnano-preset-simple "1.2.2" + postcss "^7.0.32" + cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" @@ -6465,6 +6781,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-uri-to-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + dataloader@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" @@ -6480,7 +6801,7 @@ date-fns@^2.14.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.19.0.tgz#65193348635a28d5d916c43ec7ce6fbd145059e1" integrity sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg== -dayjs@^1.9.3: +dayjs@^1.10.4, dayjs@^1.9.3: version "1.10.4" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== @@ -6492,6 +6813,13 @@ debug@2, debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, de dependencies: ms "2.0.0" +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@~4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + debug@4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -6499,6 +6827,13 @@ debug@4.3.2: dependencies: ms "2.1.2" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -6506,13 +6841,6 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@~4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -6644,7 +6972,12 @@ deep-object-diff@^1.1.0: resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== -deepmerge@^4.0, deepmerge@^4.0.0, deepmerge@^4.2.2: +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + +deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== @@ -6748,6 +7081,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -6761,7 +7099,7 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detab@2.0.4: +detab@2.0.4, detab@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== @@ -6955,6 +7293,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +domain-browser@4.19.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" + integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -6977,6 +7320,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + domhandler@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" @@ -6992,7 +7342,7 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.4.3, domutils@^2.4.4: +domutils@^2.0.0, domutils@^2.4.3, domutils@^2.4.4: version "2.5.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.0.tgz#42f49cffdabb92ad243278b331fd761c1c2d3039" integrity sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg== @@ -7081,14 +7431,14 @@ download@^7.1.0: pify "^3.0.0" downshift@^6.0.15: - version "6.1.1" - resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.1.tgz#3c8f5a64cc678e1b45a87b80647ea5351af13e5e" - integrity sha512-ch8Sh/j7gVqQd7Kcv3A5TkGfldmxmlQrRPZJYWEhzh24+h7WA4vXssuhcGNJrD8YPJlZYQGHcaX8BNhS0IcOvg== + version "6.1.2" + resolved "https://registry.yarnpkg.com/downshift/-/downshift-6.1.2.tgz#99d9a03d4da4bf369df766effc3b70f7e789950e" + integrity sha512-WnPoQ6miic4+uEzPEfqgeen0t5YREOUabMopU/Juo/UYDMZl0ZACkO6ykWCRg48dlEUmEt6zfaJlj1x7kEy78g== dependencies: - "@babel/runtime" "^7.12.5" + "@babel/runtime" "^7.13.10" compute-scroll-into-view "^1.0.17" prop-types "^15.7.2" - react-is "^17.0.1" + react-is "^17.0.2" duplexer3@^0.1.4: version "0.1.4" @@ -7118,15 +7468,22 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.649: - version "1.3.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz#5e796ed7ce88cd77bc7bf831cf311ef6b067c389" - integrity sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.634, electron-to-chromium@^1.3.649: + version "1.3.704" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.704.tgz#894205a237cbe0097d63da8f6d19e605dd13ab51" + integrity sha512-6cz0jvawlUe4h5AbfQWxPzb+8LzVyswGAWiGc32EJEmfj39HTQyNPkLXirc7+L4x5I6RgRkzua8Ryu5QZqc8cA== elegant-spinner@^1.0.1: version "1.0.1" @@ -7197,6 +7554,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -7214,9 +7578,9 @@ endent@^2.0.1: objectorarray "^1.0.4" engine.io-client@~4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-4.1.2.tgz#823b4f005360321c41445fc23ce8ee028ef2e36b" - integrity sha512-1mwvwKYMa0AaCy+sPgvJ/SnKyO5MJZ1HEeXfA3Rm/KHkHGiYD5bQVq8QzvIrkI01FuVtOdZC5lWdRw1BGXB2NQ== + version "4.1.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-4.1.3.tgz#e0ea88aefe76a14cf4375513b194438be3c5e238" + integrity sha512-C3JYYyvna0FvSKOWGWpo0/EQ6MayO8uEKam1oedLZRpxLego9Fk6K3UH/Phieu1xPHauM7YqAygJ+6SraVc0Qg== dependencies: base64-arraybuffer "0.1.4" component-emitter "~1.3.0" @@ -7402,6 +7766,11 @@ es6-iterator@2.0.3, es6-iterator@^2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= + es6-shim@^0.35.5: version "0.35.6" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" @@ -7579,7 +7948,7 @@ eslint-plugin-react@7.23.0: resolve "^2.0.0-next.3" string.prototype.matchall "^4.0.4" -eslint-plugin-react@^7.22.0: +eslint-plugin-react@^7.23.1: version "7.23.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz#f1a2e844c0d1967c822388204a8bc4dee8415b11" integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ== @@ -7597,14 +7966,6 @@ eslint-plugin-react@^7.22.0: resolve "^2.0.0-next.3" string.prototype.matchall "^4.0.4" -eslint-scope@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -7613,7 +7974,7 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@^5.0.0, eslint-scope@^5.1.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -7638,7 +7999,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint-webpack-plugin@^2.5.2: +eslint-webpack-plugin@^2.5.3: version "2.5.3" resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.3.tgz#a125585a1d8bb9c939f2a920a9bc9be4a21cdb58" integrity sha512-LewNevZf9ghDCxCGT6QltNWVi8KIYWc4LKcin8K9Azh1hypG7YAmobUDIU67fAPa+eMjRnU4rjEkLbYI1w5/UA== @@ -7783,7 +8144,7 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: +etag@1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= @@ -7938,6 +8299,21 @@ express-graphql@^0.9.0: http-errors "^1.7.3" raw-body "^2.4.1" +express-jwt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/express-jwt/-/express-jwt-6.0.0.tgz#20886c730983ffb1c706a4383235df86eff349b8" + integrity sha512-C26y9myRjx7CyhZ+BAT3p+gQyRCoDZ7qo8plCvLDaRT6je6ALIAQknT6XLVQGFKwIy/Ux7lvM2MNap5dt0T7gA== + dependencies: + async "^1.5.0" + express-unless "^0.3.0" + jsonwebtoken "^8.1.0" + lodash.set "^4.0.0" + +express-unless@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/express-unless/-/express-unless-0.3.1.tgz#2557c146e75beb903e2d247f9b5ba01452696e20" + integrity sha1-JVfBRudb65A+LSR/m1ugFFJpbiA= + express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -8011,7 +8387,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@^3.0.0, extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -8113,6 +8489,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + fast-safe-stringify@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" @@ -8123,7 +8506,7 @@ fast-shallow-equal@^1.0.0: resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.7: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -8351,6 +8734,15 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -8360,15 +8752,6 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -8447,6 +8830,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0, follow-redirects@^1.10.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" @@ -8464,6 +8854,11 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -8537,6 +8932,19 @@ formidable@^1.2.2: resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== +formik@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.2.6.tgz#378a4bafe4b95caf6acf6db01f81f3fe5147559d" + integrity sha512-Kxk2zQRafy56zhLmrzcbryUpMBvT0tal5IvcifK5+4YNGelKsnrODFJ0sZQRMQboblWNym4lAW3bt+tf2vApSA== + dependencies: + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.14" + lodash-es "^4.17.14" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^1.10.0" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -8555,22 +8963,22 @@ fragment-cache@^0.2.1: map-cache "^0.2.2" framer-motion@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.0.3.tgz#e20a32c6825dc08c98e130640cb6441ec2920b7d" - integrity sha512-5p9VPpgPctMJuNW8CqHSk9k/v3xAUpReWzlgKl1a1fsvqzcFgNGENZPfBwHuukanvMmh3trzO5jZNX0Kc8/pAA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.1.2.tgz#2fffb7700ca1c3405e697294d155b1aae51c1031" + integrity sha512-nVieffLWWmK5gog46PsoecgJCsFV+n6A5GOqoGXkWtvB9jWcscRVIdGzAaPKo2uiJHkGSyXUHU8+lt6YOQVRqw== dependencies: - framesync "5.2.3" + framesync "5.3.0" hey-listen "^1.0.8" - popmotion "9.3.4" + popmotion "9.3.5" style-value-types "4.1.4" tslib "^2.1.0" optionalDependencies: "@emotion/is-prop-valid" "^0.8.2" -framesync@5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/framesync/-/framesync-5.2.3.tgz#73e26c83e108fb95f05515ee5c6fdf20c9fd47ab" - integrity sha512-5PxjYm5RxvsT68a9trOOL/61POxL7DcHrbx+j/50CR33mvBdp0aUTI+EfrMeVXprx3XOZ37NWg6r5ZQQOA2arA== +framesync@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/framesync/-/framesync-5.3.0.tgz#0ecfc955e8f5a6ddc8fdb0cc024070947e1a0d9b" + integrity sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA== dependencies: tslib "^2.1.0" @@ -8722,10 +9130,10 @@ gatsby-background-image@^1.5.0: short-uuid "^4.1.0" sort-media-queries "^0.2.2" -gatsby-cli@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-3.1.0.tgz#e67deb874d24c02b7d47a3fdf51f2d06bb2d50ae" - integrity sha512-SOEXePHvk+Lj3XezFOjmtidMUq39hRHQsDa9iAtMvFc6bJxVIm4oGMu59mUWijGEVTlL1kwMOY7kAq1DEEtfNA== +gatsby-cli@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-3.2.0.tgz#af279e0df295a11f644cd1433ed5b31800940597" + integrity sha512-MOj7LgwNX/O30LNdZ1WDUQ4Wiyn3uXFGND7QQepfWpaHvrgtposhy/vseAAR54N5pyehcdLhQkNQkbd4Zw9olA== dependencies: "@babel/code-frame" "^7.10.4" "@types/common-tags" "^1.8.0" @@ -8735,14 +9143,14 @@ gatsby-cli@^3.1.0: common-tags "^1.8.0" configstore "^5.0.1" convert-hrtime "^3.0.0" - create-gatsby "^1.1.0" + create-gatsby "^1.2.0" envinfo "^7.7.3" execa "^3.4.0" fs-exists-cached "^1.0.0" fs-extra "^8.1.0" - gatsby-core-utils "^2.1.0" - gatsby-recipes "^0.12.0" - gatsby-telemetry "^2.1.0" + gatsby-core-utils "^2.2.0" + gatsby-recipes "^0.13.0" + gatsby-telemetry "^2.2.0" hosted-git-info "^3.0.6" is-valid-path "^0.1.1" joi "^17.4.0" @@ -8766,10 +9174,10 @@ gatsby-cli@^3.1.0: yoga-layout-prebuilt "^1.9.6" yurnalist "^2.1.0" -gatsby-core-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-2.1.0.tgz#634989bc3cde1c7add752fbdc3c6a3cdd8e23377" - integrity sha512-zBNZ4kypfgqrUWNGMQQCXZookssXWaTnLWmxM7TOz5Phjvr0NvQo/xpkUgVbuylkQDwprmg88oRdox8L3zMY9Q== +gatsby-core-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-2.2.0.tgz#def804d0fc2acde605c5d4da3c1ffbfc9aaf4e2a" + integrity sha512-7T6aVJAj0u/VUg+zKOLuxyZLS/8KDQcDeEFCkKY0d7Pd4wV/QqKRLljr0TRVkivRZHXyWQI9fM3ox5DzfkHdCQ== dependencies: ci-info "2.0.0" configstore "^5.0.1" @@ -8780,119 +9188,117 @@ gatsby-core-utils@^2.1.0: tmp "^0.2.1" xdg-basedir "^4.0.0" -gatsby-graphiql-explorer@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-1.1.0.tgz#00e4cfcad769363e6ea97cf6e36ff618c5e31923" - integrity sha512-+HqRSR3tkIAqMloEmLxpnfTpAWF9zHyRfPYw6nOhVmEkC75zNrT22XkFp9toitr0qdCVavpAJMhjBpypL9l3qQ== +gatsby-graphiql-explorer@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-1.2.0.tgz#5e8b64d876e56c288a23c7a7430e2d074aec0fea" + integrity sha512-2Ot6RstekslT6kzv28ovwwsRXIRbqLP8FkfjUql2ZrkothMXIGp4s1hl6e1RQ6qB7E+8HO0Xhgg85pmJD4cfOA== dependencies: "@babel/runtime" "^7.12.5" -gatsby-legacy-polyfills@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gatsby-legacy-polyfills/-/gatsby-legacy-polyfills-1.1.0.tgz#70b0a42d1121b04c872b6320ade0efd8b996aaa8" - integrity sha512-h+1dvamBzeItxkWUyjlEJ5/1mBR8nOiS2ZO8L6VOL/s4egwTFbL8ehE/yhn/41nSB/KCKjMY9mv7orU/v/Xdaw== +gatsby-image@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-image/-/gatsby-image-3.2.0.tgz#b9724a2f4559113e478877904df97b2aca022358" + integrity sha512-7tNow0zRTrSMBX8BoZFqC/akXCjYuLKElhJe3wVpDTgfgCfoJMNNIrbepOBYORcQqv9YB2WWDQjhwtCro/WRqQ== + dependencies: + "@babel/runtime" "^7.12.5" + object-fit-images "^3.2.4" + prop-types "^15.7.2" + +gatsby-legacy-polyfills@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gatsby-legacy-polyfills/-/gatsby-legacy-polyfills-1.2.0.tgz#fda9b3b9f6b340a4fdfdd978e84b0847bdfab79c" + integrity sha512-WC2LXsQQ/F6zNHhD50gnl2U7XVJnwldnU9xKOLndEfy74GhQ7OONsAYSytMYXdBlMKJW3k15pBfhRMM6incZIw== dependencies: core-js-compat "3.9.0" -gatsby-link@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-3.1.0.tgz#a64795edc032483450103ab235bab68a6f8dc2b8" - integrity sha512-5l84aGNGYp+8QDWnM030R1TjBms+zgdsNSZrRmwcQ57EF2IW6zRrw+ENSlBrxeV40mkmIXkVmIVbB8XuNKZNrg== +gatsby-link@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-3.2.0.tgz#87d130dfccab915f9fd989611765d220967417f2" + integrity sha512-LyANWBIuMnxivSNF7pnHc0S3mDNMaHNGSacnMynpHw9kVZuu03xi+DnzEqkzon/hgl+yRgQOtganGZgHTHzYFw== dependencies: "@babel/runtime" "^7.12.5" "@types/reach__router" "^1.3.7" prop-types "^15.7.2" -gatsby-page-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-1.1.0.tgz#44bbc38a5baf96b97c70ec5be607c594fe12b054" - integrity sha512-hNjEuWYtU95t6ypXn82eC+7OoArH4i/PnlhHt9DS8xdpf7Ad95Bk+wAhpIlF8iv9f/uf/e5DdbQeSXj1E1TeRw== +gatsby-page-utils@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-1.2.0.tgz#8c1be23a4701f4b6cdb3fb3c753923fa37bfd895" + integrity sha512-8b09VzneD1ze3eSJ4n88ytf3N2kE8PcoYVVyHe/EL5HloUz3EexY1o6oJbePkXsfqqcMGuUsUnPNSbLX+0YGYQ== dependencies: "@babel/runtime" "^7.12.5" bluebird "^3.7.2" chokidar "^3.5.1" fs-exists-cached "^1.0.0" - gatsby-core-utils "^2.1.0" + gatsby-core-utils "^2.2.0" glob "^7.1.6" lodash "^4.17.21" micromatch "^4.0.2" -gatsby-plugin-gatsby-cloud@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-gatsby-cloud/-/gatsby-plugin-gatsby-cloud-2.1.0.tgz#87bdf357d10fa9364e3edd240e6d5b3a8c8e7983" - integrity sha512-oyB991WgUenVTI1ocGjzHpthZTgHwhZ1xeR2E2WYtVHLZg2A+f2QvrG1y6mFfb0TPAL0RYhzCSgUtTMFXn4dGA== - dependencies: - "@babel/runtime" "^7.12.5" - fs-extra "^8.1.0" - kebab-hash "^0.1.2" - lodash "^4.17.21" - webpack-assets-manifest "^5.0.1" - gatsby-plugin-image@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gatsby-plugin-image/-/gatsby-plugin-image-1.1.2.tgz#85fc4f5356bf29c2098c4371e5396e14a0ff632e" - integrity sha512-ijuCa/++l+J3lUuEQyDPu1CoQ9dMdjlmgXQIZZvo+ZK25FlWVvZn/tyyg/cFekqv+Ir1Dr8LnHHlxEKdvYkIrw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-image/-/gatsby-plugin-image-1.2.0.tgz#ad571ba270b5c1e8a679ac33eeccd01ac3370db3" + integrity sha512-tG39QNnmld4rpTLettTL6r8BFm1rRrcionBpgUJXi9l5W4UaUn/hKdM9jV8g5aNUzo4YrEcgZcf1v2dPfrz9Iw== dependencies: "@babel/code-frame" "^7.12.13" "@babel/parser" "^7.12.5" "@babel/traverse" "^7.12.5" babel-jsx-utils "^1.1.0" - babel-plugin-remove-graphql-queries "^3.1.0" + babel-plugin-remove-graphql-queries "^3.2.0" camelcase "^5.3.1" chokidar "^3.5.1" common-tags "^1.8.0" fs-extra "^8.1.0" - gatsby-core-utils "^2.1.0" + gatsby-core-utils "^2.2.0" objectFitPolyfill "^2.3.0" prop-types "^15.7.2" gatsby-plugin-manifest@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-manifest/-/gatsby-plugin-manifest-3.1.0.tgz#9a40e2c7355663ea0863b199e7ba92af2f655e8d" - integrity sha512-T3vmSdld5KdKhov1/GFgBZ1fgFdyS1Uw2ehtJy3qTqknO3TLq2AiyMTJVRE5Z6ztYWLkE5Lnc07HZSYSb0ocsA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-manifest/-/gatsby-plugin-manifest-3.2.0.tgz#512938442542f95ffc8e0cbe5df19db719e935d9" + integrity sha512-oU5pvAHZ+qIhCbmTP5Eti73i6pgAnxF/nfwXCSQ7zUjFWzKkjW8tHYK3XmhEYX2ooUX2WeP9e3vp2QdnlmA59Q== dependencies: "@babel/runtime" "^7.12.5" - gatsby-core-utils "^2.1.0" - gatsby-plugin-utils "^1.1.0" + gatsby-core-utils "^2.2.0" + gatsby-plugin-utils "^1.2.0" semver "^7.3.2" sharp "^0.27.0" -gatsby-plugin-matomo@0.9.0: +gatsby-plugin-matomo@0.9.0, gatsby-plugin-matomo@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/gatsby-plugin-matomo/-/gatsby-plugin-matomo-0.9.0.tgz#016a87adf577498fe1e396bdc56d418e7cadd87c" integrity sha512-PqxVWMXhVOkJbEMLiW3G7tWTx4TMilzV6ywwOM7tCSp4718T+pAb+l0aJl2/bOs9kezxHmKa9yxvH4Kvs1rTYA== gatsby-plugin-offline@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-offline/-/gatsby-plugin-offline-4.1.0.tgz#92858f5a61077d9e44fa9e933b6a1ceff793b044" - integrity sha512-lLIooOgZBV91GjqNglIup72wXufEkVyLUDyoHzs7yxAuj1nGUEinWNpp+QLHH9SxI9salyuawzL52GSHTwQlDw== + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-offline/-/gatsby-plugin-offline-4.2.0.tgz#c45561fd2682f3aeddcd1de2a4ce8da1bf935052" + integrity sha512-WVT1pZhcqgdNIxtWqMheQHda/ifRJC3c/fb7+bM35tGpVywjWDgu0gwvulceTHJz3JX1mkDW9vlvgDI5C1Dlzw== dependencies: "@babel/runtime" "^7.12.5" cheerio "^1.0.0-rc.3" - gatsby-core-utils "^2.1.0" + gatsby-core-utils "^2.2.0" glob "^7.1.6" idb-keyval "^3.2.0" lodash "^4.17.21" workbox-build "^4.3.1" -gatsby-plugin-page-creator@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-3.1.0.tgz#98df02c01beabd6274c1f920d5785ec70f6e9c17" - integrity sha512-0Ji3U8/oPgUCIHUmm5QI09Yz98j8qslqdzDv7veE75+Qqr1oC4ZD650TwH9GVjRKitxwntK+GaNPMS6nDq24kw== +gatsby-plugin-page-creator@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-3.2.0.tgz#cb33ddbb48d9d5e92e4c2e5c25d3b39e8b64c89f" + integrity sha512-9JlR+jA1zRFOtGmTcy/Yr9MDy1//7Vq3VA9CWJ/+4AyGEgbStQ4ObPbK0NE3V4aUuRlDBhj5SsKJ3xOUecVQRA== dependencies: "@babel/traverse" "^7.12.5" "@sindresorhus/slugify" "^1.1.0" chokidar "^3.5.1" fs-exists-cached "^1.0.0" - gatsby-page-utils "^1.1.0" - gatsby-telemetry "^2.1.0" + gatsby-page-utils "^1.2.0" + gatsby-telemetry "^2.2.0" globby "^11.0.2" lodash "^4.17.21" gatsby-plugin-postcss@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-postcss/-/gatsby-plugin-postcss-4.1.0.tgz#71100ba9f5aecd3c15eb6c496a774b6358257ad6" - integrity sha512-5pMpbi9CmQa8j3PwSvUPJ0ydB7QVfbuuCM17ij83ZGpsb2V8Y7+r0CDo6drQ0CGRp8u7TAMcfpSg6JCkvfc1Sg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-postcss/-/gatsby-plugin-postcss-4.2.0.tgz#45966bfbae9f3ef79e91c3fe5904c1e0bca873fb" + integrity sha512-RFyxN0zDi8UuQxvjF/WoFaNxfQkulCsyA6UtIfgs73QZj31VqOJ6bmtjJW2ct6zFeANOJ/nOczbr2nyBcMDnvQ== dependencies: "@babel/runtime" "^7.12.5" postcss-loader "^4.1.0" @@ -8908,9 +9314,9 @@ gatsby-plugin-purgecss@^6.0.0: purgecss "^4.0.2" gatsby-plugin-react-helmet@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-4.1.0.tgz#a210eeb840411fe59d1da1184e2ffb25383cbc9d" - integrity sha512-vMTtpVnzrYRcBrDt4feui0CxviINtNFwulRbhJ0if63H31Ep0i4jcMzDitVqpHxcImkzQwchK3Qap3JWqr6L6Q== + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-4.2.0.tgz#406a8500576fe13674b317041a91b73189b5c58f" + integrity sha512-EF9GsIgDpO3qVTMDXzzm9h3G10tNiejp3MfIrSgSE66NGLY/GR8aEsENsOWrjHsHMOs7AaC1eOXbNQ0aJt3Otg== dependencies: "@babel/runtime" "^7.12.5" @@ -8926,7 +9332,7 @@ gatsby-plugin-remove-serviceworker@1.0.0: resolved "https://registry.yarnpkg.com/gatsby-plugin-remove-serviceworker/-/gatsby-plugin-remove-serviceworker-1.0.0.tgz#9fb433bc8bd766e14e1d3711c4ac6f051e1dff7c" integrity sha1-n7QzvIvXZuFOHTcRxKxvBR4d/3w= -gatsby-plugin-robots-txt@1.5.5: +gatsby-plugin-robots-txt@1.5.5, gatsby-plugin-robots-txt@^1.5.5: version "1.5.5" resolved "https://registry.yarnpkg.com/gatsby-plugin-robots-txt/-/gatsby-plugin-robots-txt-1.5.5.tgz#5ec156c2283307031d4890a7d036e11131037cea" integrity sha512-wLIep04R0cnY+3t9uFVFitA/eLbI6o8xkrUPg6gVxnas/LtzMe5tUiMK5P+idC14B0ohY1y2zl2hP+Bu54/dHQ== @@ -8935,26 +9341,26 @@ gatsby-plugin-robots-txt@1.5.5: generate-robotstxt "^8.0.3" gatsby-plugin-sass@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-sass/-/gatsby-plugin-sass-4.1.0.tgz#458df0b2b8bcc04bdd040febed106883e2825690" - integrity sha512-lVm+DGSkAIM2APosbaBqi9OlS5YP1bXVmA2MXJqGdIrb/x9FkrN3psFjiTIuBob2YesAgeQV2OJtJefGGAf4bQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-sass/-/gatsby-plugin-sass-4.2.0.tgz#15802a17e253dbd60530cba7079628255cdb5521" + integrity sha512-WnboqnpqZdkkQBYwbwnAAloJqBLuxR4FP2lp7jdrJPW4Drp0MQ2sf7XdtFjbNtmgpdXTeYFRBHazZpd25xsIgA== dependencies: "@babel/runtime" "^7.12.5" resolve-url-loader "^3.1.2" sass-loader "^10.1.1" gatsby-plugin-sharp@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-3.1.2.tgz#fd14aa7d729c3a8b8770321c91f33ad59f404185" - integrity sha512-YH4vd9u18Z0x/iiPqiyDpd8CQP7N7gN1LvvGydtch34sWijdQcCBP/kiZk+hn1iXCvVG4vxLt2DvkY4LaWGUpA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-sharp/-/gatsby-plugin-sharp-3.2.0.tgz#d0e638f91c823800e5014a83c8860c98dec914c3" + integrity sha512-+Y4z/Q0bQL+wA1kb9wvAKlSz+o0+2V3IRxhu8kx/0pfpk48Q0apk+v4UMn7l835yocKfsePj8qvW7Ez0D47O9A== dependencies: "@babel/runtime" "^7.12.5" async "^3.2.0" bluebird "^3.7.2" filenamify "^4.2.0" fs-extra "^9.1.0" - gatsby-core-utils "^2.1.0" - gatsby-telemetry "^2.1.0" + gatsby-core-utils "^2.2.0" + gatsby-telemetry "^2.2.0" got "^10.7.0" imagemin "^7.0.1" imagemin-mozjpeg "^9.0.0" @@ -8969,10 +9375,10 @@ gatsby-plugin-sharp@^3.1.2: svgo "1.3.2" uuid "3.4.0" -gatsby-plugin-typescript@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-3.1.0.tgz#dafb86c481f8bad84ad761e08f7d6ae83a7c73ba" - integrity sha512-p1tk/7ECbLefJzmEEl/n6qKofNIXIH2B9Bz0XnKyVaRxXNIbE3VI76qFCm3dFh+MUUg8Q4JKc2WAZcBYIdQeZA== +gatsby-plugin-typescript@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-3.2.0.tgz#ce86469837e7c9783a8acee7f3859e9b7ad591e8" + integrity sha512-C9FqkDfIaI2f/zdWmVVZBCSbGdclr6fOJHpgPJm0DOWHsOMBqmiDjZ+0U2inc0iR0hq5cPqKCQGTisk6clVCNw== dependencies: "@babel/core" "^7.12.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" @@ -8980,26 +9386,26 @@ gatsby-plugin-typescript@^3.1.0: "@babel/plugin-proposal-optional-chaining" "^7.12.1" "@babel/preset-typescript" "^7.12.1" "@babel/runtime" "^7.12.5" - babel-plugin-remove-graphql-queries "^3.1.0" + babel-plugin-remove-graphql-queries "^3.2.0" -gatsby-plugin-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gatsby-plugin-utils/-/gatsby-plugin-utils-1.1.0.tgz#b73f3f196323df3c75e6edb345d221f003b5c152" - integrity sha512-B21V3tFskfZcVSJVaYy6rLrxHcumbcmhKAYKniKThxCP/0KSqHkfC9+Bopsonk8npRKbVX924OI3UOCKfbgFsg== +gatsby-plugin-utils@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-utils/-/gatsby-plugin-utils-1.2.0.tgz#4751d952c9c99f15d4a68497cd1841a90aec6c33" + integrity sha512-9+kKeyQdXJtQ/9pthfP4LTiem7coOdBt+8wRTwa+DF331qfzunjekl0uWlZSZBnQpG1uS7GX4R/4tei72cVVmw== dependencies: joi "^17.2.1" -gatsby-react-router-scroll@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-4.1.0.tgz#582a693048cf9a485a567afa11964df366d104fe" - integrity sha512-P2RIO7Py7QQvIntzmrpiz93B6jZsOwVhSVWp3dDa1YrD4/y43553zrEwczifWicLYcgCy/miMnuctfoKCJuxlg== +gatsby-react-router-scroll@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-4.2.0.tgz#bb10753c7ba8934a4b6e9eec359b69b556f310fc" + integrity sha512-n3KF1wNkWR6S5ZpFdXCEu4JP9xntyZNW2S/B8kumna7r2zclJBOiQWJWTopb7rEMgC/uY+RQRFHgyweaYSqIqQ== dependencies: "@babel/runtime" "^7.12.5" -gatsby-recipes@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.12.0.tgz#3b0e313c6f67ffa750c7ff402ca1196f525a2470" - integrity sha512-WotaMTpVWVP40uO24Iw2ioEAGcO6OZwcJYZz3Ihrb4CmjbKM6KEic8RuXH4d84OTLCvWz0s0lPiIu1IgbnYwgQ== +gatsby-recipes@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.13.0.tgz#de9cfb611052db899c6a2ad8f9368859b82f7e59" + integrity sha512-ni3J7wu45XfktDyxjL42zgjRzDqGQZX4/l541P5UbcAjdPAQJBP3qUgyPt2qhtenPYP/iZdbutXKxKjfkckcsQ== dependencies: "@babel/core" "^7.12.3" "@babel/generator" "^7.12.5" @@ -9024,8 +9430,8 @@ gatsby-recipes@^0.12.0: express "^4.17.1" express-graphql "^0.9.0" fs-extra "^8.1.0" - gatsby-core-utils "^2.1.0" - gatsby-telemetry "^2.1.0" + gatsby-core-utils "^2.2.0" + gatsby-telemetry "^2.2.0" glob "^7.1.6" graphql "^15.4.0" graphql-compose "~7.25.0" @@ -9060,17 +9466,85 @@ gatsby-recipes@^0.12.0: xstate "^4.9.1" yoga-layout-prebuilt "^1.9.6" +gatsby-remark-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-classes/-/gatsby-remark-classes-1.0.0.tgz#6d93f7054a558c2cd7ba73ff5e25a5adc01fd5a9" + integrity sha512-F0pM8FdTwqFDDiP2qR4TnZZmkRI6Q3Mry/qzbxI4ORE/7ZnR6EKfvA1DryZ2RnrZyVUnbBEdzmZDPAYcBPE4PA== + dependencies: + unist-util-select "^2.0.2" + +gatsby-remark-copy-linked-files@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-copy-linked-files/-/gatsby-remark-copy-linked-files-3.2.0.tgz#aedfb7c05c0833fcb9e807127a08be101654503b" + integrity sha512-pNKYR9Q3QuIZ3u5msW9dtqszOgKzRqDRtg3kXnqagCC8JbT2IVYI4IG3tP2tTG3CwEOjBtBI0YhUM2KGgzdJ5g== + dependencies: + "@babel/runtime" "^7.12.5" + cheerio "^1.0.0-rc.3" + fs-extra "^8.1.0" + is-relative-url "^3.0.0" + lodash "^4.17.21" + path-is-inside "^1.0.2" + probe-image-size "^6.0.0" + unist-util-visit "^1.4.1" + +gatsby-remark-images@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-4.2.0.tgz#c8a34c5e9bea47427ff6d65a6ecb52506685bdfe" + integrity sha512-LaybtebK/8jF2qLInv/2yAvNioCJXxjhVZqIBs8xQp6sgaWSQ2CMFWARLkJC21OezIObiAGYKCMSKk8bWP6cFQ== + dependencies: + "@babel/runtime" "^7.12.5" + chalk "^4.1.0" + cheerio "^1.0.0-rc.3" + gatsby-core-utils "^2.2.0" + is-relative-url "^3.0.0" + lodash "^4.17.21" + mdast-util-definitions "^1.2.5" + potrace "^2.1.8" + query-string "^6.13.3" + unist-util-select "^1.5.0" + unist-util-visit-parents "^2.1.2" + +gatsby-remark-prismjs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-prismjs/-/gatsby-remark-prismjs-4.2.0.tgz#3a40a0246673d20fdab99b097c8ebf193c86ced2" + integrity sha512-PTE4p/f+XosSt/VdHJr9U3ruZ3yhqtUpqDuifsVbOOsS6AyvmEY/7WPUThRC+nSVfueG1geVgxrWB0AoaUPKXQ== + dependencies: + "@babel/runtime" "^7.12.5" + parse-numeric-range "^0.0.2" + unist-util-visit "^1.4.1" + +gatsby-remark-responsive-iframe@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-responsive-iframe/-/gatsby-remark-responsive-iframe-3.2.0.tgz#1f9f74f4c43b8b3e77059c591528bce84d8d50c8" + integrity sha512-eoxAnAHv0Imh81Fn7Qh5TXiIFTBJBlytq1eXkIrNH0ecqKkmWiiY5Ynr7DRx4UlOHg6pEJD0ZlpL8iN5GbxTyQ== + dependencies: + "@babel/runtime" "^7.12.5" + cheerio "^1.0.0-rc.3" + common-tags "^1.8.0" + lodash "^4.17.21" + unist-util-visit "^1.4.1" + +gatsby-remark-smartypants@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-smartypants/-/gatsby-remark-smartypants-3.2.0.tgz#b1f84b0a4787e558d3a7a4eef59777ebaf7dac83" + integrity sha512-caZ44+koorqFul45GYzQRhRRortbqmHhYPv8+oy7GbAkLoZvusLd4mnT7u7Te2PHfMoUuQVA8AxETOeNUcVdzQ== + dependencies: + "@babel/runtime" "^7.12.5" + retext "^5.0.0" + retext-smartypants "^3.0.3" + unist-util-visit "^1.4.1" + gatsby-source-filesystem@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-3.1.0.tgz#59d9c5ebced33d954a9927e740168b9c9ee43422" - integrity sha512-3qFXEi4Hp7NrqTMCJ44vzwMZclD1aHyC5XUXxuuQ+/gT4k4yPIjPTbUdYgDzvrc8/K/5XRvJDB2vprdjxwoeGw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-3.2.0.tgz#1ceec22a068b235a084b15fb426898ef213fe995" + integrity sha512-5CAMdSiasWCciJEneIU1RgS9IcHrTwl8i7xqPxhE9ihBa+Y1RSEX3FdtNGnK3Z5dYQVHMwR0NNOPJ3WZW0rJQQ== dependencies: "@babel/runtime" "^7.12.5" better-queue "^3.8.10" chokidar "^3.4.3" file-type "^16.0.0" fs-extra "^8.1.0" - gatsby-core-utils "^2.1.0" + gatsby-core-utils "^2.2.0" got "^9.6.0" md5-file "^5.0.0" mime "^2.4.6" @@ -9079,10 +9553,10 @@ gatsby-source-filesystem@^3.0.0: valid-url "^1.0.9" xstate "^4.14.0" -gatsby-telemetry@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-2.1.0.tgz#e7c0f8bc488a93bf4afcd10760f38b50471e754f" - integrity sha512-ZAmjxYsLyJ9eK3ZGphoIjl1C/Mx732h+PWpyD+NNUPf+GFJcPDVAd/tX9XHjNTVrAN3rAaHuH48wK7JNeC/xIA== +gatsby-telemetry@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-2.2.0.tgz#c6ed229ea2f1c238200ec4a9e943ead7a366fe9b" + integrity sha512-Zx/MP+By8QHgm2fikfq6egmcrwREsWAg2wfqTo0CRax5WUQQWl57zX3b0bIJ+k0sFCvU4XuxP0XrytvzxkVViQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -9092,7 +9566,7 @@ gatsby-telemetry@^2.1.0: boxen "^4.2.0" configstore "^5.0.1" fs-extra "^8.1.0" - gatsby-core-utils "^2.1.0" + gatsby-core-utils "^2.2.0" git-up "^4.0.2" is-docker "^2.1.1" lodash "^4.17.21" @@ -9100,17 +9574,43 @@ gatsby-telemetry@^2.1.0: uuid "3.4.0" gatsby-transformer-json@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-transformer-json/-/gatsby-transformer-json-3.1.0.tgz#d3cf91c5a6ec98f4a295af97b02b22e54dcb8682" - integrity sha512-eEd3LkxteckVQt0ka5tH2tJmYSogEfuULg7GPCsh9pcK2hR8YZq2dpFyGzwGREd6FYYkyJTg8KtqSSASiNjJrg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-json/-/gatsby-transformer-json-3.2.0.tgz#3cfc4aef0913387b26ecf89b040a48408ed91d61" + integrity sha512-U0uOjTXkozFOzoMG46+Vmc7N0CH/hTYrvyIqtxpV+xDPvWNn07Ynk/0qaxAjRANe5oyJHYfTl1vd0Y/9R89AlA== dependencies: "@babel/runtime" "^7.12.5" bluebird "^3.7.2" +gatsby-transformer-remark@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-3.2.0.tgz#51a608dfc12a1c4c3b266c5076043d068050d049" + integrity sha512-z/fykxLNbKTN9fzYypyMwJ09z5YDMgnEPPF1x+szyjvEJhjKF8rfSgP13iKeYuG04Pxrj8L+QKS6xL/+H2lJIA== + dependencies: + "@babel/runtime" "^7.12.5" + gatsby-core-utils "^2.2.0" + gray-matter "^4.0.2" + hast-util-raw "^4.0.0" + hast-util-to-html "^4.0.1" + lodash "^4.17.21" + mdast-util-to-hast "^3.0.4" + mdast-util-to-string "^1.1.0" + mdast-util-toc "^5.0" + remark "^10.0.1" + remark-parse "^6.0.3" + remark-retext "^3.1.3" + remark-stringify "6.0.4" + retext-english "^3.0.4" + sanitize-html "^1.27.5" + underscore.string "^3.3.5" + unified "^6.2.0" + unist-util-remove-position "^1.1.4" + unist-util-select "^1.5.0" + unist-util-visit "^1.4.1" + gatsby-transformer-sharp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-3.1.0.tgz#958318785828302ef195a071bfb71071c94028be" - integrity sha512-wj7KFhbqkxT5Ff5R8RDpBz5DweR6frLyIX28n4ryGIqMkgkmEwkIfWcA4/JjocDm4dVwkXKmlwJA1jufkGEpCg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-3.2.0.tgz#f6b8481dfacdc1d8d27c253213982f8571af462b" + integrity sha512-2UmkLMCuYCskuyyEqHIPfNg1svgtNxCWWCCfEnAIIhntWfX7mewdhSG7eBciFJep+CYfV6bGZLcb+sKYkb0jvg== dependencies: "@babel/runtime" "^7.12.5" bluebird "^3.7.2" @@ -9121,10 +9621,20 @@ gatsby-transformer-sharp@^3.0.0: semver "^7.3.4" sharp "^0.27.0" +gatsby-transformer-yaml@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-yaml/-/gatsby-transformer-yaml-3.2.0.tgz#ed4588f0642f3f82dbddd213d6ca20e8c3b0341e" + integrity sha512-x6nvYas74uIH9II0Ti3cLLT/juRjZN47sgbcG5DVIiOj+tzHmHQMFaqWnxv8o2WTxdfddRmd7beor9VwZd9YRg== + dependencies: + "@babel/runtime" "^7.12.5" + js-yaml "^3.14.1" + lodash "^4.17.21" + unist-util-select "^1.5.0" + gatsby@^3.0.4, gatsby@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-3.1.2.tgz#666420ad991e092b1d7e9fb887c2c31f6a8c4118" - integrity sha512-3gF954rAkbZimrJe0K8gXl6Xe1AGyu04k813ut1Dzh98xf6WJoJQOFjQKB9MLmrzY7WRS94Pah1/9GuO+5hEpQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-3.2.0.tgz#4b92b3063761572eb8116b9fd4efce3c916bb045" + integrity sha512-eVaAR6LQA4D7bPeN1/2Hzk5kt7QJzb0DoPUuBy9daxZy3oPR1Zf6wfdV6RQcW6+ABLpG073h5uOTMxANAlm66A== dependencies: "@babel/code-frame" "^7.10.4" "@babel/core" "^7.12.3" @@ -9150,8 +9660,8 @@ gatsby@^3.0.4, gatsby@^3.1.2: babel-plugin-add-module-exports "^1.0.4" babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-lodash "^3.3.4" - babel-plugin-remove-graphql-queries "^3.1.0" - babel-preset-gatsby "^1.1.0" + babel-plugin-remove-graphql-queries "^3.2.0" + babel-preset-gatsby "^1.2.0" better-opn "^2.0.0" better-queue "^3.8.10" bluebird "^3.7.2" @@ -9166,7 +9676,7 @@ gatsby@^3.0.4, gatsby@^3.1.2: core-js "^3.9.0" cors "^2.8.5" css-loader "^5.0.1" - css-minimizer-webpack-plugin "^1.2.0" + css-minimizer-webpack-plugin "^1.3.0" css.escape "^1.5.1" date-fns "^2.14.0" debug "^3.2.7" @@ -9180,9 +9690,9 @@ gatsby@^3.0.4, gatsby@^3.1.2: eslint-plugin-graphql "^4.0.0" eslint-plugin-import "^2.22.1" eslint-plugin-jsx-a11y "^6.4.1" - eslint-plugin-react "^7.22.0" + eslint-plugin-react "^7.23.1" eslint-plugin-react-hooks "^4.2.0" - eslint-webpack-plugin "^2.5.2" + eslint-webpack-plugin "^2.5.3" event-source-polyfill "^1.0.15" execa "^4.0.3" express "^4.17.1" @@ -9193,16 +9703,16 @@ gatsby@^3.0.4, gatsby@^3.1.2: find-cache-dir "^3.3.1" fs-exists-cached "1.0.0" fs-extra "^8.1.0" - gatsby-cli "^3.1.0" - gatsby-core-utils "^2.1.0" - gatsby-graphiql-explorer "^1.1.0" - gatsby-legacy-polyfills "^1.1.0" - gatsby-link "^3.1.0" - gatsby-plugin-page-creator "^3.1.0" - gatsby-plugin-typescript "^3.1.0" - gatsby-plugin-utils "^1.1.0" - gatsby-react-router-scroll "^4.1.0" - gatsby-telemetry "^2.1.0" + gatsby-cli "^3.2.0" + gatsby-core-utils "^2.2.0" + gatsby-graphiql-explorer "^1.2.0" + gatsby-legacy-polyfills "^1.2.0" + gatsby-link "^3.2.0" + gatsby-plugin-page-creator "^3.2.0" + gatsby-plugin-typescript "^3.2.0" + gatsby-plugin-utils "^1.2.0" + gatsby-react-router-scroll "^4.2.0" + gatsby-telemetry "^2.2.0" glob "^7.1.6" got "8.3.2" graphql "^15.4.0" @@ -9269,7 +9779,7 @@ gatsby@^3.0.4, gatsby@^3.1.2: util.promisify "^1.0.1" uuid "3.4.0" v8-compile-cache "^2.2.0" - webpack "^5.16.0" + webpack "^5.28.0" webpack-dev-middleware "^4.1.0" webpack-dev-server "^3.11.2" webpack-merge "^5.7.3" @@ -9300,9 +9810,9 @@ gaze@^1.0.0: globule "^1.0.0" gbimage-bridge@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/gbimage-bridge/-/gbimage-bridge-0.1.1.tgz#8feb1b41a357d13bbf80c2ec106e68c9ed15499b" - integrity sha512-kFdv2u1DshZndyO5cO6f8Gd6yv1ZOLly8+02seaVkHDNH27fVWpAghgDQm8NYXhj9QK937YuspKRC2eaWmDpDw== + version "0.1.2" + resolved "https://registry.yarnpkg.com/gbimage-bridge/-/gbimage-bridge-0.1.2.tgz#590eae69f1dbea348dcac3fe35e8254d736bdb9c" + integrity sha512-A9aOra36fvieC+7u2PD7FUdVMqWQ5C9UdQTX5nvyCrpeFzUZYLTnMY/mquH453JmLnLQC2Tl363fpyDfj/nDWQ== generate-robotstxt@^8.0.3: version "8.0.3" @@ -9335,6 +9845,13 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-orientation@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-orientation/-/get-orientation-1.1.2.tgz#20507928951814f8a91ded0a0e67b29dfab98947" + integrity sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ== + dependencies: + stream-parser "^0.3.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -9429,7 +9946,7 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= -github-slugger@^1.0.0: +github-slugger@^1.0.0, github-slugger@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== @@ -9809,6 +10326,16 @@ graphql@^15.4.0: resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" @@ -9969,6 +10496,18 @@ hasha@^5.2.0: is-stream "^2.0.0" type-fest "^0.8.0" +hast-to-hyperscript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz#5106cbba78edb7c95e2e8a49079371eb196c1ced" + integrity sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg== + dependencies: + comma-separated-tokens "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.2.1" + unist-util-is "^2.0.0" + web-namespaces "^1.1.2" + hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" @@ -9982,6 +10521,17 @@ hast-to-hyperscript@^9.0.0: unist-util-is "^4.0.0" web-namespaces "^1.0.0" +hast-util-from-parse5@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz#b7164a7ffc88da4f751dc7c2f801ff8d7c143bab" + integrity sha512-I6dtjsGtDqz4fmGSiFClFyiXdKhj5bPceS6intta7k/VDuiKz9P61C6hO6WMiNNmEm1b/EtBH8f+juvz4o0uwQ== + dependencies: + ccount "^1.0.3" + hastscript "^4.0.0" + property-information "^4.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + hast-util-from-parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" @@ -9994,7 +10544,12 @@ hast-util-from-parse5@^6.0.0: vfile-location "^3.2.0" web-namespaces "^1.0.0" -hast-util-parse-selector@^2.0.0: +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-parse-selector@^2.0.0, hast-util-parse-selector@^2.2.0: version "2.2.5" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== @@ -10015,6 +10570,47 @@ hast-util-raw@6.0.1: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-raw@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" + integrity sha512-5xYHyEJMCf8lX/NT4iA5z6N43yoFsrJqXJ5GWwAbLn815URbIz+UNNFEgid33F9paZuDlqVKvB+K3Aqu5+DdSw== + dependencies: + hast-util-from-parse5 "^4.0.2" + hast-util-to-parse5 "^4.0.1" + html-void-elements "^1.0.1" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-to-html@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" + integrity sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg== + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.1" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^1.0.1" + unist-util-is "^2.0.0" + xtend "^4.0.1" + +hast-util-to-parse5@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz#e52534b4bf40dc4e7d0428fcaf6d32bc75c62ee5" + integrity sha512-U/61W+fsNfBpCyJBB5Pt3l5ypIfgXqEyW9pyrtxF7XrqDJHzcFrYpnC94d0JDYjvobLpYCzcU9srhMRPEO1YXw== + dependencies: + hast-to-hyperscript "^5.0.0" + property-information "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + hast-util-to-parse5@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" @@ -10026,6 +10622,21 @@ hast-util-to-parse5@^6.0.0: xtend "^4.0.0" zwitch "^1.0.0" +hast-util-whitespace@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== + +hastscript@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-4.1.0.tgz#ea5593fa6f6709101fc790ced818393ddaa045ce" + integrity sha512-bOTn9hEfzewvHyXdbYGKqOr/LOz+2zYhKbC17U2YAjd16mnjqB1BQ0nooM/RdMy/htVyli0NAznXiBtwDi1cmQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -10037,7 +10648,7 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -10138,9 +10749,9 @@ html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1: integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-entities@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.0.tgz#83474887115f12d33a7b85f6573c95223c2940a4" - integrity sha512-/XzLX7A79umjBdw7yYw99bk20uj+L1hQINB029One2OCIqtHj0o5F+XMRam1pveHF4pEYZyr8RSLYWdhguHrwg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" + integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== html-minifier-terser@^5.0.1: version "5.1.1" @@ -10160,7 +10771,7 @@ html-tags@^3.1.0: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== -html-void-elements@^1.0.0: +html-void-elements@^1.0.0, html-void-elements@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== @@ -10192,6 +10803,16 @@ htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + htmlparser2@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" @@ -10270,6 +10891,15 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -10303,11 +10933,19 @@ http-status-codes@2.1.4, http-status-codes@^2.1.2, http-status-codes@^2.1.4: resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.1.4.tgz#453d99b4bd9424254c4f6a9a3a03715923052798" integrity sha512-MZVIsLKGVOVE1KEnldppe6Ij+vmemMuApDfjhVSLzyYP+td0bREEYyAoIw9yFePoBXManCuBqmiNP5FqJS5Xkg== -https-browserify@^1.0.0: +https-browserify@1.0.0, https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -10341,6 +10979,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -10502,7 +11147,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -10705,7 +11350,7 @@ is-boolean-object@^1.1.0: dependencies: call-bind "^1.0.0" -is-buffer@^1.1.5: +is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -10855,6 +11500,11 @@ is-function@^1.0.1, is-function@^1.0.2: resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== +is-generator-function@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" + integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -10914,6 +11564,14 @@ is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -11112,6 +11770,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.1" +is-typed-array@^1.1.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" + integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -11337,6 +12006,15 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" +jest-worker@27.0.0-next.5: + version "27.0.0-next.5" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.0-next.5.tgz#5985ee29b12a4e191f4aae4bb73b97971d86ec28" + integrity sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" @@ -11401,7 +12079,7 @@ js-string-escape@^1.0.1: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: +js-yaml@^3.11.0, js-yaml@^3.13.1, js-yaml@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -11424,6 +12102,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -11528,6 +12213,22 @@ jsonp@0.2.1, jsonp@^0.2.1: dependencies: debug "^2.1.3" +jsonwebtoken@^8.1.0, jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -11551,12 +12252,38 @@ junk@^3.1.0: resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== -kebab-hash@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/kebab-hash/-/kebab-hash-0.1.2.tgz#dfb7949ba34d8e70114ea7d83e266e5e2a4abaac" - integrity sha512-BTZpq3xgISmQmAVzkISy4eUutsUA7s4IEFlCwOBJjvSFOwyR7I+fza+tBc/rzYWK/NrmFHjfU1IhO3lu29Ib/w== +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: - lodash.kebabcase "^4.1.1" + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwks-rsa@^1.12.2: + version "1.12.3" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-1.12.3.tgz#40232f85d16734cb82837f38bb3e350a34435400" + integrity sha512-cFipFDeYYaO9FhhYJcZWX/IyZgc0+g316rcHnDpT2dNRNIE/lMOmWKKqp09TkJoYlNFzrEVODsR4GgXJMgWhnA== + dependencies: + "@types/express-jwt" "0.0.42" + axios "^0.21.1" + debug "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + jsonwebtoken "^8.5.1" + limiter "^1.1.5" + lru-memoizer "^2.1.2" + ms "^2.1.2" + proxy-from-env "^1.1.0" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" keyv@3.0.0: version "3.0.0" @@ -11625,6 +12352,11 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +ky@0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" + integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== + language-subtag-registry@~0.3.2: version "0.3.21" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" @@ -11676,6 +12408,19 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +limiter@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -11732,9 +12477,9 @@ listr-verbose-renderer@^0.5.0: figures "^2.0.0" listr2@^3.2.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.4.3.tgz#543bcf849d5ffc70602708b69d2daac73f751699" - integrity sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA== + version "3.4.4" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.4.4.tgz#5bb5e0107cc9a8787dcfb5d302c88cbddcdba248" + integrity sha512-okQwtieCHDX5erlxcEn2xwNfVQhV+/YiD+U0v+6DQamXnknE7mc6B5fopHl96v1PuZjTpaoChctf96PB6K4XRg== dependencies: chalk "^4.1.0" cli-truncate "^2.1.0" @@ -11742,7 +12487,7 @@ listr2@^3.2.2: indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.6" + rxjs "^6.6.7" through "^2.3.8" wrap-ansi "^7.0.0" @@ -11877,18 +12622,21 @@ lock@^1.0.0: resolved "https://registry.yarnpkg.com/lock/-/lock-1.1.0.tgz#53157499d1653b136ca66451071fca615703fa55" integrity sha1-UxV0mdFlOxNspmRRBx/KYVcD+lU= -lockfile@^1.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== - dependencies: - signal-exit "^3.0.2" +lodash-es@^4.17.14, lodash-es@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.castarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" + integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU= + lodash.clonedeep@4.5.0, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -11904,16 +12652,16 @@ lodash.deburr@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= -lodash.escaperegexp@^4.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - lodash.every@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc= +lodash.flatmap@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz#ef8cbf408f6e48268663345305c6acc0b778702e" + integrity sha1-74y/QI9uSCaGYzRTBcaswLd4cC4= + lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -11929,25 +12677,40 @@ lodash.foreach@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.get@^4, lodash.get@^4.0: +lodash.get@^4: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.has@^4.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" - integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= lodash.map@^4.6.0: version "4.6.0" @@ -11964,11 +12727,26 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.once@^4.1.1: +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0, lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= +lodash.set@^4.0.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -11989,6 +12767,11 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -11999,7 +12782,7 @@ lodash.without@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= -lodash@4, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.10: +lodash@4, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12157,6 +12940,22 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha1-HRdnnAac2l0ECZGgnbwsDbN35V4= + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-memoizer@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.1.4.tgz#b864d92b557f00b1eeb322156a0409cb06dafac6" + integrity sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ== + dependencies: + lodash.clonedeep "^4.5.0" + lru-cache "~4.0.0" + lru-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" @@ -12237,6 +13036,11 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + markdown-table@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" @@ -12278,6 +13082,13 @@ mdast-squeeze-paragraphs@^4.0.0: dependencies: unist-util-remove "^2.0.0" +mdast-util-compact@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== + dependencies: + unist-util-visit "^1.1.0" + mdast-util-compact@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" @@ -12285,6 +13096,13 @@ mdast-util-compact@^2.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-definitions@^1.2.0, mdast-util-definitions@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74" + integrity sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA== + dependencies: + unist-util-visit "^1.0.0" + mdast-util-definitions@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" @@ -12340,6 +13158,23 @@ mdast-util-to-hast@10.0.1: unist-util-position "^3.0.0" unist-util-visit "^2.0.0" +mdast-util-to-hast@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" + integrity sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA== + dependencies: + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^1.2.0" + mdurl "^1.0.1" + trim "0.0.1" + trim-lines "^1.0.0" + unist-builder "^1.0.1" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^1.1.0" + xtend "^4.0.1" + mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" @@ -12352,7 +13187,17 @@ mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1: repeat-string "^1.0.0" zwitch "^1.0.0" -mdast-util-to-string@^1.0.0: +mdast-util-to-nlcst@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz#dcd0f51b59515b11a0700aeb40f168ed7ba9ed3d" + integrity sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag== + dependencies: + nlcst-to-string "^2.0.0" + repeat-string "^1.5.2" + unist-util-position "^3.0.0" + vfile-location "^2.0.0" + +mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== @@ -12362,6 +13207,19 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdast-util-toc@^5.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz#3af0f9c9a764b993538af03f1f79f4e3cec22736" + integrity sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g== + dependencies: + "@types/mdast" "^3.0.3" + "@types/unist" "^2.0.3" + extend "^3.0.2" + github-slugger "^1.2.1" + mdast-util-to-string "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit "^2.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -12372,7 +13230,7 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdurl@^1.0.0: +mdurl@^1.0.0, mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= @@ -12396,9 +13254,9 @@ mem@^8.0.0: mimic-fn "^3.1.0" memfs@^3.1.2, memfs@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" - integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== + version "3.2.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.1.tgz#12301801a14eb3daa9f7491aa0ff09ffec519dd0" + integrity sha512-Y5vcpQzWTime4fBTr/fEnxXUxEYUgKbDlty1WX0gaa4ae14I6KmvK1S8HtXOX0elKAE6ENZJctkGtbTFYcRIUw== dependencies: fs-monkey "1.0.1" @@ -12887,7 +13745,12 @@ nano-css@^5.3.1: stacktrace-js "^2.0.2" stylis "^4.0.6" -nanoid@^3.1.20: +nanoclone@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" + integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== + +nanoid@^3.1.16, nanoid@^3.1.20, nanoid@^3.1.22: version "3.1.22" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== @@ -12914,6 +13777,13 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +native-url@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.3.4.tgz#29c943172aed86c63cee62c8c04db7f5756661f8" + integrity sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== + dependencies: + querystring "^0.2.0" + native-url@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" @@ -12960,11 +13830,72 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +next@^10.0.8: + version "10.1.2" + resolved "https://registry.yarnpkg.com/next/-/next-10.1.2.tgz#2c508cc2982077f0bad6863be020c10c1d059970" + integrity sha512-S2KYS8NXeFmaJd8EyoC/kWi3uIlNz3PghnpDWYwy5dxhbtyaozK7fVpXmDcOTQEyYq3BZG5ph0B+hOsAwMdYfQ== + dependencies: + "@babel/runtime" "7.12.5" + "@hapi/accept" "5.0.1" + "@next/env" "10.1.2" + "@next/polyfill-module" "10.1.2" + "@next/react-dev-overlay" "10.1.2" + "@next/react-refresh-utils" "10.1.2" + "@opentelemetry/api" "0.14.0" + assert "2.0.0" + ast-types "0.13.2" + browserify-zlib "0.2.0" + browserslist "4.16.1" + buffer "5.6.0" + caniuse-lite "^1.0.30001179" + chalk "2.4.2" + chokidar "3.5.1" + constants-browserify "1.0.0" + crypto-browserify "3.12.0" + cssnano-simple "1.2.2" + domain-browser "4.19.0" + encoding "0.1.13" + etag "1.8.1" + find-cache-dir "3.3.1" + get-orientation "1.1.2" + https-browserify "1.0.0" + jest-worker "27.0.0-next.5" + native-url "0.3.4" + node-fetch "2.6.1" + node-html-parser "1.4.9" + node-libs-browser "^2.2.1" + os-browserify "0.3.0" + p-limit "3.1.0" + path-browserify "1.0.1" + pnp-webpack-plugin "1.6.4" + postcss "8.1.7" + process "0.11.10" + prop-types "15.7.2" + querystring-es3 "0.2.1" + raw-body "2.4.1" + react-is "16.13.1" + react-refresh "0.8.3" + stream-browserify "3.0.0" + stream-http "3.1.1" + string_decoder "1.3.0" + styled-jsx "3.3.2" + timers-browserify "2.0.12" + tty-browserify "0.0.1" + use-subscription "1.5.1" + util "0.12.3" + vm-browserify "1.1.2" + watchpack "2.1.1" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nlcst-to-string@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" + integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -13037,6 +13968,13 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" +node-html-parser@1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" + integrity sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw== + dependencies: + he "1.2.0" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -13081,7 +14019,7 @@ node-object-hash@^2.0.0: resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-2.3.1.tgz#5e4a6ac7f932cec4f90aff2fbdb953cb83344416" integrity sha512-ab7pm34jqISawXpJ+fHjj2E9CmzDtm2fTTdurgzbWXIrdTEk2q2cSZRzoeGrwa0cvq6Sqezq6S9bhOBYPHRzuQ== -node-releases@^1.1.61, node-releases@^1.1.70: +node-releases@^1.1.61, node-releases@^1.1.69, node-releases@^1.1.70: version "1.1.71" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== @@ -13179,6 +14117,11 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== +not@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + integrity sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0= + npm-conf@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -13211,7 +14154,7 @@ npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.2: +nth-check@^1.0.1, nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== @@ -13262,6 +14205,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-fit-images@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/object-fit-images/-/object-fit-images-3.2.4.tgz#6c299d38fdf207746e5d2d46c2877f6f25d15b52" + integrity sha512-G+7LzpYfTfqUyrZlfrou/PLLLAPNC52FTy5y1CBywX+1/FkxIloOyQXBmZ3Zxa2AWO+lMF0JTuvqbr7G5e5CWg== + object-hash@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09" @@ -13467,7 +14415,7 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-browserify@^0.3.0: +os-browserify@0.3.0, os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= @@ -13772,7 +14720,17 @@ parse-bmfont-xml@^1.1.4: xml-parse-from-string "^1.0.0" xml2js "^0.4.5" -parse-entities@^1.1.0: +parse-english@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e" + integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg== + dependencies: + nlcst-to-string "^2.0.0" + parse-latin "^4.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + +parse-entities@^1.0.2, parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== @@ -13826,6 +14784,20 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-latin@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917" + integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw== + dependencies: + nlcst-to-string "^2.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + +parse-numeric-range@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4" + integrity sha1-tPCdQTx6282Yf26SM8e0shDJOOQ= + parse-path@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" @@ -13836,6 +14808,11 @@ parse-path@^4.0.0: qs "^6.9.4" query-string "^6.13.8" +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= + parse-url@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" @@ -13853,6 +14830,11 @@ parse5-htmlparser2-tree-adapter@^6.0.0: dependencies: parse5 "^6.0.1" +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -14101,7 +15083,7 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" -platform@^1.3.6: +platform@1.3.6, platform@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== @@ -14142,12 +15124,12 @@ polished@^4.0.5, polished@^4.1.1: dependencies: "@babel/runtime" "^7.12.5" -popmotion@9.3.4, popmotion@^9.3.4: - version "9.3.4" - resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-9.3.4.tgz#9dea29e752491396b0beebc360d9837598f24c7c" - integrity sha512-CwUJwVEkhXZg7ZCtWLrO2lK40g/J+cEwAV0bPxOq83g2UNrvN2HTcUDnlf/rq6QeMKJPwDvXd6R8SsJO5BjDXg== +popmotion@9.3.5, popmotion@^9.3.4: + version "9.3.5" + resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-9.3.5.tgz#e821aff3424a021b0f2c93922db31c55cfe64149" + integrity sha512-Lr2rq8OP0j8D7CO2/6eO17ALeFCxjx1hfTGbMg+TLqFj+KZSGOoj6gRBVTzDINGqo6LQrORQSSSDaCL5OrB3bw== dependencies: - framesync "5.2.3" + framesync "5.3.0" hey-listen "^1.0.8" style-value-types "4.1.4" tslib "^2.1.0" @@ -14569,6 +15551,16 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" +postcss@8.1.7: + version "8.1.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f" + integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.16" + source-map "^0.6.1" + postcss@8.2.6: version "8.2.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" @@ -14596,13 +15588,13 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.8: - version "8.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" - integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== +postcss@^8.1.6, postcss@^8.2.1, postcss@^8.2.6, postcss@^8.2.8: + version "8.2.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.9.tgz#fd95ff37b5cee55c409b3fdd237296ab4096fba3" + integrity sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q== dependencies: colorette "^1.2.2" - nanoid "^3.1.20" + nanoid "^3.1.22" source-map "^0.6.1" potrace@^2.1.8: @@ -14666,7 +15658,7 @@ prettier@2.2.1, prettier@^2.0.5, prettier@^2.2.1, prettier@~2.2.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -pretty-bytes@^5.1.0, pretty-bytes@^5.4.1: +pretty-bytes@^5.1.0, pretty-bytes@^5.4.1, pretty-bytes@^5.5.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== @@ -14715,7 +15707,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: +process@0.11.10, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -14751,7 +15743,7 @@ promise.prototype.finally@^3.1.0: es-abstract "^1.17.0-next.0" function-bind "^1.1.1" -prompts@2.4.0, prompts@^2.3.2, prompts@^2.4.0: +prompts@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== @@ -14759,6 +15751,14 @@ prompts@2.4.0, prompts@^2.3.2, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" +prompts@^2.3.2, prompts@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + prop-types@15.7.2, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -14777,6 +15777,18 @@ proper-lockfile@^4.1.1: retry "^0.12.0" signal-exit "^3.0.2" +property-expr@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.4.tgz#37b925478e58965031bb612ec5b3260f8241e910" + integrity sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg== + +property-information@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" + integrity sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ== + dependencies: + xtend "^4.0.1" + property-information@^5.0.0, property-information@^5.3.0: version "5.6.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" @@ -14802,6 +15814,11 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -14906,7 +15923,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.10.0, qs@^6.9.4: +qs@^6.10.0, qs@^6.6.0, qs@^6.9.4: version "6.10.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== @@ -14927,7 +15944,7 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.13.1, query-string@^6.13.8: +query-string@^6.13.1, query-string@^6.13.3, query-string@^6.13.8: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== @@ -14937,7 +15954,7 @@ query-string@^6.13.1, query-string@^6.13.8: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystring-es3@^0.2.0: +querystring-es3@0.2.1, querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -15007,7 +16024,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.4.1: +raw-body@2.4.1, raw-body@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== @@ -15036,9 +16053,9 @@ rc@^1.2.7, rc@^1.2.8: strip-json-comments "~2.0.1" react-colorful@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.0.1.tgz#50dcd10cd94bc0b2257492ca8785c53b07805faf" - integrity sha512-I/ctDkUZVCIKvIqBwqQWphPxDUJv8q1omKzQ3XJ6H3PhrxF/1t9olNVcTKBJSTKDACZJbyJ0cEAUi3rvAZWdSA== + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.1.0.tgz#45c8044d80bc0e7ee08dc78c760e6694f3745ca2" + integrity sha512-ZXKcQbSuuHaN5tOHORI+G9/tXsGxk/6qlAbfETfZILwwWwngyJiyYRhUJjI+Esk71BhhQRdj0v7cFHDnD95jtQ== react-countup@4.3.3: version "4.3.3" @@ -15166,6 +16183,11 @@ react-error-overlay@^6.0.9: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + react-fast-compare@^3.0.1, react-fast-compare@^3.1.1, react-fast-compare@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" @@ -15201,12 +16223,12 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" -react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@16.13.1, react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: +react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -15249,7 +16271,7 @@ react-popper@^2.2.4: react-fast-compare "^3.0.1" warning "^4.0.2" -react-refresh@^0.8.3: +react-refresh@0.8.3, react-refresh@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== @@ -15259,6 +16281,14 @@ react-refresh@^0.9.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== +react-share@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/react-share/-/react-share-4.4.0.tgz#cabbf2111d7a907a888ab4d89d08410329efd5ee" + integrity sha512-POe8Ge/JT9Ew9iyW7CiYsCCWCb8uMJWqFl9S7W0fJ/oH5gBJNzukH0bL5vSr17KKG5h15d3GfKaoviI22BKeYA== + dependencies: + classnames "^2.2.5" + jsonp "^0.2.1" + react-side-effect@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" @@ -15447,7 +16477,7 @@ read@^1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -15713,7 +16743,7 @@ remark-parse@8.0.3: vfile-location "^3.0.0" xtend "^4.0.1" -remark-parse@^6.0.3: +remark-parse@^6.0.0, remark-parse@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== @@ -15734,6 +16764,13 @@ remark-parse@^6.0.3: vfile-location "^2.0.0" xtend "^4.0.1" +remark-retext@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.3.tgz#77173b1d9d13dab15ce5b38d996195fea522ee7f" + integrity sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw== + dependencies: + mdast-util-to-nlcst "^3.2.0" + remark-slug@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-6.0.0.tgz#2b54a14a7b50407a5e462ac2f376022cce263e2c" @@ -15750,6 +16787,26 @@ remark-squeeze-paragraphs@4.0.0: dependencies: mdast-squeeze-paragraphs "^4.0.0" +remark-stringify@6.0.4, remark-stringify@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" + integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + remark-stringify@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" @@ -15770,6 +16827,15 @@ remark-stringify@^8.1.0: unherit "^1.0.4" xtend "^4.0.1" +remark@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" + integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== + dependencies: + remark-parse "^6.0.0" + remark-stringify "^6.0.0" + unified "^7.0.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -15791,7 +16857,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.0.0, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -15803,6 +16869,11 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + replace-ext@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" @@ -15980,6 +17051,46 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retext-english@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" + integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== + dependencies: + parse-english "^4.0.0" + unherit "^1.0.4" + +retext-latin@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/retext-latin/-/retext-latin-2.0.4.tgz#ef5d34ae7641ae56b0675ea391095e8ee762b251" + integrity sha512-fOoSSoQgDZ+l/uS81oxI3alBghDUPja0JEl0TpQxI6MN+dhM6fLFumPJwMZ4PJTyL5FFAgjlsdv8IX+6IRuwMw== + dependencies: + parse-latin "^4.0.0" + unherit "^1.0.4" + +retext-smartypants@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/retext-smartypants/-/retext-smartypants-3.0.3.tgz#9c982dcc210ae3bb36f4bc46aae802798fce43f9" + integrity sha512-/0fIipYayOvvucn3yjxvWwyT9P6p8gbpqdqUQNs1+L7av2hxatmiA9sk+fygJSDn5OXRyhBzcezvTbEmEabfIQ== + dependencies: + nlcst-to-string "^2.0.0" + unist-util-visit "^1.0.0" + +retext-stringify@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/retext-stringify/-/retext-stringify-2.0.4.tgz#496d6c532f7dc6d15e4b262de0266e828f72efa9" + integrity sha512-xOtx5mFJBoT3j7PBtiY2I+mEGERNniofWktI1cKXvjMEJPOuqve0dghLHO1+gz/gScLn4zqspDGv4kk2wS5kSA== + dependencies: + nlcst-to-string "^2.0.0" + +retext@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/retext/-/retext-5.0.0.tgz#5d9018c4a677d6103c142362d76f50eb1d398bf6" + integrity sha1-XZAYxKZ31hA8FCNi129Q6x05i/Y= + dependencies: + retext-latin "^2.0.0" + retext-stringify "^2.0.0" + unified "^6.0.0" + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -16041,9 +17152,9 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== rtl-css-js@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.14.0.tgz#daa4f192a92509e292a0519f4b255e6e3c076b7d" - integrity sha512-Dl5xDTeN3e7scU1cWX8c9b6/Nqz3u/HgR4gePc1kWXYiQWVQbKCEyK6+Hxve9LbcJ5EieHy1J9nJCN3grTtGwg== + version "1.14.1" + resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.14.1.tgz#f79781d6a0c510abe73fde60aa3cbe9dfd134a45" + integrity sha512-G9N1s/6329FpJr8k9e1U/Lg0IDWThv99sb7k0IrXHjSnubxe01h52/ajsPRafJK1/2Vqrhz3VKLe3E1dx6jS9Q== dependencies: "@babel/runtime" "^7.1.2" @@ -16071,10 +17182,10 @@ rx@4.1.0: resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= -rxjs@^6.3.3, rxjs@^6.6.0, rxjs@^6.6.6: - version "6.6.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" - integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== +rxjs@^6.3.3, rxjs@^6.6.0, rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" @@ -16100,7 +17211,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -16120,6 +17231,16 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sanitize-html@^1.27.5: + version "1.27.5" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" + integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== + dependencies: + htmlparser2 "^4.1.0" + lodash "^4.17.15" + parse-srcset "^1.0.2" + postcss "^7.0.27" + sass-graph@2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" @@ -16181,7 +17302,7 @@ schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0, schema-utils@^3.0.0: +schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== @@ -16203,6 +17324,14 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + seek-bzip@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" @@ -16542,7 +17671,7 @@ skynet-js@3.0.0: url-join "^4.0.1" url-parse "^1.4.7" -skynet-js@^3.0.2: +skynet-js@^3.0.0, skynet-js@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/skynet-js/-/skynet-js-3.0.2.tgz#d08a33066ee85b86e4ffc7c31591239a88da6fbe" integrity sha512-rbmpOGbDwg2FcsZ7HkmGhVaUwWO6kaysRFKTBC3yGiV+b6fbnpPPNCskvh8kWwbTsj+koWkSRUFYqG7cc+eTuA== @@ -16764,6 +17893,13 @@ source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -16847,11 +17983,30 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +square@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/square/-/square-9.1.0.tgz#016ffb3cbf67828c31a0ea24c3753e5c7ea2ebad" + integrity sha512-DVSV/F/2U+fQ0F+OgfQQRkGs0rSUKpsqKAo/m+Gtt2oPaL4hQff/QaALldxG2gCD3oQqzdy3Q9Oevce11ytPWA== + dependencies: + "@apimatic/schema" "^0.5.1" + "@types/node" "^14.14.30" + axios "^0.21.1" + detect-node "^2.0.4" + form-data "^3.0.0" + json-bigint "^1.0.0" + lodash.flatmap "^4.5.0" + tiny-warning "^1.0.3" + squeak@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3" @@ -16947,6 +18102,13 @@ stacktrace-js@^2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" +stacktrace-parser@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -16984,6 +18146,14 @@ store2@^2.12.0: resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== +stream-browserify@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + stream-browserify@^2.0.1, stream-browserify@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -17000,6 +18170,16 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" +stream-http@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" + integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" @@ -17011,7 +18191,7 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-parser@~0.3.1: +stream-parser@^0.3.1, stream-parser@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" integrity sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M= @@ -17048,6 +18228,11 @@ string-env-interpolation@1.0.1: resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== +string-hash@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + string-natural-compare@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" @@ -17146,7 +18331,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@1.3.0, string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -17165,6 +18350,16 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + stringify-entities@^3.0.0, stringify-entities@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903" @@ -17211,6 +18406,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -17279,6 +18479,14 @@ strip-outer@^1.0.0, strip-outer@^1.0.1: dependencies: escape-string-regexp "^1.0.2" +stripe@^8.137.0: + version "8.141.0" + resolved "https://registry.yarnpkg.com/stripe/-/stripe-8.141.0.tgz#a0c27f7255e00ebb47af3a0c1849e0c431f0fd30" + integrity sha512-CRGmx1WYENj16L37TujJg+KscGn8LbYbXqRCPdaepr7BzHIdAFJfQhNfdFkShW5Z9rbmo6mA2fiAOf1S3FIoSw== + dependencies: + "@types/node" ">=8.1.0" + qs "^6.6.0" + strtok3@^6.0.3: version "6.0.8" resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.0.8.tgz#c839157f615c10ba0f4ae35067dad9959eeca346" @@ -17311,6 +18519,13 @@ style-to-object@0.3.0, style-to-object@^0.3.0: dependencies: inline-style-parser "0.1.1" +style-to-object@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" + integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== + dependencies: + inline-style-parser "0.1.1" + style-value-types@4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-4.1.4.tgz#80f37cb4fb024d6394087403dfb275e8bb627e75" @@ -17319,6 +18534,20 @@ style-value-types@4.1.4: hey-listen "^1.0.8" tslib "^2.1.0" +styled-jsx@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018" + integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g== + dependencies: + "@babel/types" "7.8.3" + babel-plugin-syntax-jsx "6.18.0" + convert-source-map "1.7.0" + loader-utils "1.2.3" + source-map "0.7.3" + string-hash "1.1.3" + stylis "3.5.4" + stylis-rule-sheet "0.0.10" + stylehacks@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" @@ -17328,6 +18557,16 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +stylis-rule-sheet@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" + integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== + +stylis@3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" + integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== + stylis@^4.0.6: version "4.0.9" resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.9.tgz#ae3d5283aa439225cf79dd2d0cf46f8bfd4ad393" @@ -17338,7 +18577,7 @@ sudo-prompt@^8.2.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw== -superagent@^6.0.0: +superagent@^6.0.0, superagent@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/superagent/-/superagent-6.1.0.tgz#09f08807bc41108ef164cfb4be293cebd480f4a6" integrity sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg== @@ -17381,6 +18620,13 @@ supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" @@ -17430,6 +18676,13 @@ svgo@^2.0.3: csso "^4.2.0" stable "^0.1.8" +swr@^0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/swr/-/swr-0.5.5.tgz#c72c1615765f33570a16bbb13699e3ac87eaaa3a" + integrity sha512-u4mUorK9Ipt+6LEITvWRWiRWAQjAysI6cHxbMmMV1dIdDzxMnswWo1CyGoyBHXX91CchxcuoqgFZ/ycx+YfhCA== + dependencies: + dequal "2.0.2" + symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -17454,16 +18707,21 @@ sync-fetch@0.3.0: node-fetch "^2.6.1" table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + version "6.0.9" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb" + integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ== dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + ajv "^8.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" -tailwindcss@^2.0.3: +tailwindcss@^2.0.3, tailwindcss@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.0.4.tgz#cf13e62738c3a27065664e449d93b66ee2945506" integrity sha512-WhgR0oiBxGOZ9jY0yVfaJCHnckR7U74Fs/BMsYxGdwGJQ5Hd/HlaKD26bEJFZOvYScJo0QcUj2ImldzedsG7Bw== @@ -17494,7 +18752,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0, tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== @@ -17684,7 +18942,7 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -timers-browserify@^2.0.4: +timers-browserify@2.0.12, timers-browserify@^2.0.4: version "2.0.12" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== @@ -17714,6 +18972,11 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== +tiny-warning@^1.0.2, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tinycolor2@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" @@ -17748,6 +19011,11 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-data-view@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-1.1.0.tgz#08d6492b0b8deb9b29bdf1f61c23eadfa8994d00" + integrity sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -17818,6 +19086,11 @@ token-types@^2.0.0: "@tokenizer/token" "^0.1.1" ieee754 "^1.2.1" +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -17826,11 +19099,23 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + traverse@0.6.6: version "0.6.6" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +trim-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" + integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -17876,9 +19161,9 @@ trough@^1.0.0: integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== ts-dedent@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.1.0.tgz#2df17a997ee5310a96d2be7adca0ba7c3eabf36a" - integrity sha512-HbmrG+lCgk5W8LQTALxBxQRBDeAhQKRzdqVhHLUkVd5nYT+b6zDzbRMjiA8wqrWDa33X09WdnW4zEsdwQArTaw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.1.1.tgz#6dd56870bb5493895171334fa5d7e929107e5bbc" + integrity sha512-riHuwnzAUCfdIeTBNUq7+Yj+ANnrMXo/7+Z74dIdudS7ys2k8aSGMzpJRMFDF7CLwUTbtvi1ZZff/Wl+XxmqIA== ts-easing@^0.2.0: version "0.2.0" @@ -17949,6 +19234,11 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -18010,6 +19300,11 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -18073,6 +19368,14 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= +underscore.string@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -18121,6 +19424,32 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" +unified@^6.0.0, unified@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + +unified@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" + integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== + dependencies: + "@types/unist" "^2.0.0" + "@types/vfile" "^3.0.0" + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^3.0.0" + x-is-string "^0.1.0" + unified@^8.4.2: version "8.4.2" resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" @@ -18178,11 +19507,23 @@ unist-builder@2.0.3, unist-builder@^2.0.0: resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== -unist-util-generated@^1.0.0: +unist-builder@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" + integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== + dependencies: + object-assign "^4.1.0" + +unist-util-generated@^1.0.0, unist-util-generated@^1.1.0: version "1.1.6" resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== +unist-util-is@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" + integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== + unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" @@ -18193,12 +19534,19 @@ unist-util-is@^4.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== +unist-util-modify-children@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" + integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg== + dependencies: + array-iterate "^1.0.0" + unist-util-position@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== -unist-util-remove-position@^1.0.0: +unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== @@ -18226,6 +19574,31 @@ unist-util-remove@^2.0.0: dependencies: unist-util-is "^4.0.0" +unist-util-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" + integrity sha1-qTwr6MD2U4J4A7gTMa3sKqJM2TM= + dependencies: + css-selector-parser "^1.1.0" + debug "^2.2.0" + nth-check "^1.0.1" + +unist-util-select@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-2.0.2.tgz#cb2774b599695172e7b60a8b5f50793e418f7ea6" + integrity sha512-Yv5Z5ShMxv7Z9Dw175tKvOiRVXV4FrMHG778DSD9Z0jALgb3wAx9DoeInr3200QlYp71rYUXzzJdCb76xKdrCw== + dependencies: + css-selector-parser "^1.1.0" + not "^0.1.0" + nth-check "^1.0.1" + unist-util-is "^3.0.0" + zwitch "^1.0.3" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + unist-util-stringify-position@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" @@ -18233,7 +19606,12 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" -unist-util-visit-parents@^2.0.0: +unist-util-visit-children@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432" + integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ== + +unist-util-visit-parents@^2.0.0, unist-util-visit-parents@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== @@ -18257,7 +19635,7 @@ unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" -unist-util-visit@^1.1.0: +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== @@ -18409,6 +19787,13 @@ use-latest@^1.0.0: dependencies: use-isomorphic-layout-effect "^1.0.0" +use-subscription@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" + integrity sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA== + dependencies: + object-assign "^4.1.1" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -18462,6 +19847,18 @@ util@0.10.3: dependencies: inherits "2.0.1" +util@0.12.3, util@^0.12.0: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + safe-buffer "^5.1.2" + which-typed-array "^1.1.2" + util@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" @@ -18541,7 +19938,7 @@ vfile-location@^3.0.0, vfile-location@^3.2.0: resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== -vfile-message@^2.0.0: +vfile-message@*, vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== @@ -18549,6 +19946,33 @@ vfile-message@^2.0.0: "@types/unist" "^2.0.0" unist-util-stringify-position "^2.0.0" +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" + integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== + dependencies: + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + vfile@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" @@ -18559,7 +19983,7 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" -vm-browserify@^1.0.1: +vm-browserify@1.1.2, vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -18585,6 +20009,14 @@ watchpack-chokidar2@^2.0.1: dependencies: chokidar "^2.1.8" +watchpack@2.1.1, watchpack@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" @@ -18596,14 +20028,6 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" @@ -18611,24 +20035,15 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0: +web-namespaces@^1.0.0, web-namespaces@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== -webpack-assets-manifest@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.0.1.tgz#5f2b45579e87f122dc9af714f9508c462383a722" - integrity sha512-4Hpv0eP1yL06cvERpwxZ+N0Pmns5j/WtiaKZeoNsFUFZB52F6wPycCyxhdyfFKMxdwC/+xeTTlBffY62I3kh2Q== - dependencies: - chalk "^4.0" - deepmerge "^4.0" - lockfile "^1.0" - lodash.escaperegexp "^4.0" - lodash.get "^4.0" - lodash.has "^4.0" - schema-utils "^3.0" - tapable "^2.0" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-dev-middleware@^3.7.2, webpack-dev-middleware@^3.7.3: version "3.7.3" @@ -18787,7 +20202,7 @@ webpack@4: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@^5.16.0: +webpack@^5.28.0: version "5.28.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.28.0.tgz#0de8bcd706186b26da09d4d1e8cbd3e4025a7c2f" integrity sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg== @@ -18830,6 +20245,15 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -18851,6 +20275,19 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= +which-typed-array@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" + integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + dependencies: + available-typed-arrays "^1.0.2" + call-bind "^1.0.0" + es-abstract "^1.18.0-next.1" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -19091,6 +20528,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -19297,6 +20739,19 @@ yoga-layout-prebuilt@^1.9.6: dependencies: "@types/yoga-layout" "1.9.2" +yup@^0.32.9: + version "0.32.9" + resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.9.tgz#9367bec6b1b0e39211ecbca598702e106019d872" + integrity sha512-Ci1qN+i2H0XpY7syDQ0k5zKQ/DoxO0LzPg8PAR/X4Mpj6DqaeCoIYEEjDJwhArh3Fa7GWbQQVDZKeXYlSH4JMg== + dependencies: + "@babel/runtime" "^7.10.5" + "@types/lodash" "^4.14.165" + lodash "^4.17.20" + lodash-es "^4.17.15" + nanoclone "^0.2.1" + property-expr "^2.0.4" + toposort "^2.0.2" + yurnalist@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/yurnalist/-/yurnalist-2.1.0.tgz#44cf7ea5a33a8fab4968cc8c2970489f93760902" @@ -19308,7 +20763,7 @@ yurnalist@^2.1.0: read "^1.0.7" strip-ansi "^5.2.0" -zwitch@^1.0.0: +zwitch@^1.0.0, zwitch@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==