mirror of
https://github.com/tormachris/cf-workers-status-page.git
synced 2025-09-21 08:25:16 +02:00
Compare commits
34 Commits
v1.2.0
...
d5d0ed3b42
Author | SHA1 | Date | |
---|---|---|---|
d5d0ed3b42 | |||
616a127173 | |||
f0ec1c016a | |||
f5b49dcae7 | |||
f419b8ad2b | |||
8d704ef44c | |||
7f58e2673a | |||
8e968732b9 | |||
798408aba1 | |||
aa76e3f1ed | |||
7813ff93ac | |||
596d30389f | |||
1189e708da | |||
de0cfaf504 | |||
f0b27a8446 | |||
a8cfe25c9a | |||
df64cdc113 | |||
d87223f292 | |||
a5a65a7582 | |||
23673587c2 | |||
fa9d865cc1 | |||
0fac88d7f8 | |||
7a9a2f90ef | |||
c337b55c37 | |||
f0a4974e92 | |||
cb15831994 | |||
2868f9820c | |||
48d78d117a | |||
c7f642cd8c | |||
54bdd42fc1 | |||
bbf9def61f | |||
ccec34ff5d | |||
ee586c9e64 | |||
8d70a0f992 |
4
.github/FUNDING.yml
vendored
Normal file
4
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: eidam
|
||||||
|
ko_fi: eidam
|
9
.github/workflows/deploy.yml
vendored
9
.github/workflows/deploy.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Deploy
|
name: Deploy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
@ -26,23 +27,25 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||||
preCommands: |
|
preCommands: |
|
||||||
wrangler kv:namespace create KV_STATUS_PAGE
|
wrangler kv:namespace create KV_STATUS_PAGE || true
|
||||||
apt-get update && apt-get install -y jq
|
export KV_NAMESPACE_ID=$(npx @cloudflare/wrangler@1 kv:namespace list 2> >(tee stderr.log >&2) | head -1 | node -pe "JSON.parse(fs.readFileSync('/dev/stdin').toString()).find(kv => kv.title.includes('KV_STATUS_PAGE')).id")
|
||||||
export KV_NAMESPACE_ID=$(wrangler kv:namespace list | jq -c 'map(select(.title | contains("KV_STATUS_PAGE")))' | jq -r ".[0].id")
|
|
||||||
echo "[env.production]" >> wrangler.toml
|
echo "[env.production]" >> wrangler.toml
|
||||||
echo "kv_namespaces = [{binding=\"KV_STATUS_PAGE\", id=\"${KV_NAMESPACE_ID}\"}]" >> wrangler.toml
|
echo "kv_namespaces = [{binding=\"KV_STATUS_PAGE\", id=\"${KV_NAMESPACE_ID}\"}]" >> wrangler.toml
|
||||||
[ -z "$SECRET_SLACK_WEBHOOK_URL" ] && echo "Secret SECRET_SLACK_WEBHOOK_URL not set, creating dummy one..." && SECRET_SLACK_WEBHOOK_URL="default-gh-action-secret" || true
|
[ -z "$SECRET_SLACK_WEBHOOK_URL" ] && echo "Secret SECRET_SLACK_WEBHOOK_URL not set, creating dummy one..." && SECRET_SLACK_WEBHOOK_URL="default-gh-action-secret" || true
|
||||||
[ -z "$SECRET_TELEGRAM_API_TOKEN" ] && echo "Secret SECRET_TELEGRAM_API_TOKEN not set, creating dummy one..." && SECRET_TELEGRAM_API_TOKEN="default-gh-action-secret" || true
|
[ -z "$SECRET_TELEGRAM_API_TOKEN" ] && echo "Secret SECRET_TELEGRAM_API_TOKEN not set, creating dummy one..." && SECRET_TELEGRAM_API_TOKEN="default-gh-action-secret" || true
|
||||||
[ -z "$SECRET_TELEGRAM_CHAT_ID" ] && echo "Secret SECRET_TELEGRAM_CHAT_ID not set, creating dummy one..." && SECRET_TELEGRAM_CHAT_ID="default-gh-action-secret" || true
|
[ -z "$SECRET_TELEGRAM_CHAT_ID" ] && echo "Secret SECRET_TELEGRAM_CHAT_ID not set, creating dummy one..." && SECRET_TELEGRAM_CHAT_ID="default-gh-action-secret" || true
|
||||||
|
[ -z "$SECRET_DISCORD_WEBHOOK_URL" ] && echo "Secret SECRET_DISCORD_WEBHOOK_URL not set, creating dummy one..." && SECRET_DISCORD_WEBHOOK_URL="default-gh-action-secret" || true
|
||||||
postCommands: |
|
postCommands: |
|
||||||
yarn kv-gc
|
yarn kv-gc
|
||||||
secrets: |
|
secrets: |
|
||||||
SECRET_SLACK_WEBHOOK_URL
|
SECRET_SLACK_WEBHOOK_URL
|
||||||
SECRET_TELEGRAM_API_TOKEN
|
SECRET_TELEGRAM_API_TOKEN
|
||||||
SECRET_TELEGRAM_CHAT_ID
|
SECRET_TELEGRAM_CHAT_ID
|
||||||
|
SECRET_DISCORD_WEBHOOK_URL
|
||||||
environment: production
|
environment: production
|
||||||
env:
|
env:
|
||||||
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
|
CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
|
||||||
SECRET_SLACK_WEBHOOK_URL: ${{secrets.SECRET_SLACK_WEBHOOK_URL}}
|
SECRET_SLACK_WEBHOOK_URL: ${{secrets.SECRET_SLACK_WEBHOOK_URL}}
|
||||||
SECRET_TELEGRAM_API_TOKEN: ${{secrets.SECRET_TELEGRAM_API_TOKEN}}
|
SECRET_TELEGRAM_API_TOKEN: ${{secrets.SECRET_TELEGRAM_API_TOKEN}}
|
||||||
SECRET_TELEGRAM_CHAT_ID: ${{secrets.SECRET_TELEGRAM_CHAT_ID}}
|
SECRET_TELEGRAM_CHAT_ID: ${{secrets.SECRET_TELEGRAM_CHAT_ID}}
|
||||||
|
SECRET_DISCORD_WEBHOOK_URL: ${{secrets.SECRET_DISCORD_WEBHOOK_URL}}
|
||||||
|
58
README.md
58
README.md
@ -19,6 +19,7 @@ Also, prepare the following secrets
|
|||||||
|
|
||||||
- Cloudflare API token with `Edit Cloudflare Workers` permissions
|
- Cloudflare API token with `Edit Cloudflare Workers` permissions
|
||||||
- Slack incoming webhook \(optional\)
|
- Slack incoming webhook \(optional\)
|
||||||
|
- Discord incoming webhook \(optional\)
|
||||||
|
|
||||||
## Getting started
|
## Getting started
|
||||||
|
|
||||||
@ -38,6 +39,9 @@ You can either deploy with **Cloudflare Deploy Button** using GitHub Actions or
|
|||||||
|
|
||||||
- Name: SECRET_SLACK_WEBHOOK_URL (optional)
|
- Name: SECRET_SLACK_WEBHOOK_URL (optional)
|
||||||
- Value: your-slack-webhook-url
|
- Value: your-slack-webhook-url
|
||||||
|
|
||||||
|
- Name: SECRET_DISCORD_WEBHOOK_URL (optional)
|
||||||
|
- Value: your-discord-webhook-url
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Navigate to the **Actions** settings in your repository and enable them
|
3. Navigate to the **Actions** settings in your repository and enable them
|
||||||
@ -46,7 +50,7 @@ You can either deploy with **Cloudflare Deploy Button** using GitHub Actions or
|
|||||||
```yaml
|
```yaml
|
||||||
settings:
|
settings:
|
||||||
title: 'Status Page'
|
title: 'Status Page'
|
||||||
url: 'https://status-page.eidam.dev' # used for Slack messages
|
url: 'https://status-page.eidam.dev' # used for Slack & Discord messages
|
||||||
logo: logo-192x192.png # image in ./public/ folder
|
logo: logo-192x192.png # image in ./public/ folder
|
||||||
daysInHistogram: 90 # number of days you want to display in histogram
|
daysInHistogram: 90 # number of days you want to display in histogram
|
||||||
collectResponseTimes: false # experimental feature, enable only for <5 monitors or on paid plans
|
collectResponseTimes: false # experimental feature, enable only for <5 monitors or on paid plans
|
||||||
@ -70,6 +74,7 @@ You can either deploy with **Cloudflare Deploy Button** using GitHub Actions or
|
|||||||
method: GET # default=GET
|
method: GET # default=GET
|
||||||
expectStatus: 200 # operational status, default=200
|
expectStatus: 200 # operational status, default=200
|
||||||
followRedirect: false # should fetch follow redirects, default=false
|
followRedirect: false # should fetch follow redirects, default=false
|
||||||
|
linkable: false # should the titles be links to the service, default=true
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Push to `main` branch to trigger the deployment
|
5. Push to `main` branch to trigger the deployment
|
||||||
@ -96,6 +101,7 @@ You can clone the repository yourself and use Wrangler CLI to develop/deploy, ex
|
|||||||
- create KV namespace and add the `KV_STATUS_PAGE` binding to [wrangler.toml](./wrangler.toml)
|
- create KV namespace and add the `KV_STATUS_PAGE` binding to [wrangler.toml](./wrangler.toml)
|
||||||
- create Worker secrets _\(optional\)_
|
- create Worker secrets _\(optional\)_
|
||||||
- `SECRET_SLACK_WEBHOOK_URL`
|
- `SECRET_SLACK_WEBHOOK_URL`
|
||||||
|
- `SECRET_DISCORD_WEBHOOK_URL`
|
||||||
|
|
||||||
## Workers KV free tier
|
## Workers KV free tier
|
||||||
|
|
||||||
@ -115,6 +121,50 @@ The Workers Free plan includes limited KV usage, but the quota is sufficient for
|
|||||||
|
|
||||||
## Future plans
|
## Future plans
|
||||||
|
|
||||||
Stay tuned for more features coming in, like leveraging the fact that CRON instances are scheduled around the world during the day
|
WIP - Support for Durable Objects - Cloudflare's product for low-latency coordination and consistent storage for the Workers platform. There is a working prototype, however, we are waiting for at least open beta.
|
||||||
so we can monitor the response times. However, we will most probably wait for the [Durable Objects](https://blog.cloudflare.com/introducing-workers-durable-objects/) to be in open beta
|
|
||||||
as they are better fit to reliably store such info.
|
There is also a managed version of this project, currently in beta. Feel free to check it out https://statusflare.com (https://twitter.com/statusflare_com).
|
||||||
|
|
||||||
|
## Running project locally
|
||||||
|
**Requirements**
|
||||||
|
- Linux or WSL
|
||||||
|
- Yarn (`npm i -g yarn`)
|
||||||
|
- Node 14+
|
||||||
|
|
||||||
|
### Steps to get server up and running
|
||||||
|
**Install wrangler**
|
||||||
|
```
|
||||||
|
npm i -g wrangler
|
||||||
|
```
|
||||||
|
|
||||||
|
**Login With Wrangler to Cloudflare**
|
||||||
|
```
|
||||||
|
wrangler login
|
||||||
|
```
|
||||||
|
|
||||||
|
**Create your KV namespace in cloudflare**
|
||||||
|
```
|
||||||
|
On the workers page navigate to KV, and create a namespace
|
||||||
|
```
|
||||||
|
|
||||||
|
**Update your wrangler.toml with**
|
||||||
|
```
|
||||||
|
kv-namespaces = [{binding="KV_STATUS_PAGE", id="<KV_ID>", preview_id="<KV_ID>"}]
|
||||||
|
```
|
||||||
|
_Note: you may need to change `kv-namespaces` to `kv_namespaces`_
|
||||||
|
|
||||||
|
**Install packages**
|
||||||
|
```
|
||||||
|
yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
**Create CSS**
|
||||||
|
```
|
||||||
|
yarn run css
|
||||||
|
```
|
||||||
|
|
||||||
|
**Run**
|
||||||
|
```
|
||||||
|
yarn run dev
|
||||||
|
```
|
||||||
|
_Note: If the styles do not come through try using `localhost:8787` instead of `localhost:8080`_
|
||||||
|
26
config.yaml
26
config.yaml
@ -1,6 +1,6 @@
|
|||||||
settings:
|
settings:
|
||||||
title: 'Status Page'
|
title: 'Status Page'
|
||||||
url: 'https://status-page.eidam.dev' # used for Slack messages
|
url: 'https://status.tormakristof.eu' # used for Slack messages
|
||||||
logo: logo-192x192.png # image in ./public/ folder
|
logo: logo-192x192.png # image in ./public/ folder
|
||||||
daysInHistogram: 90 # number of days you want to display in histogram
|
daysInHistogram: 90 # number of days you want to display in histogram
|
||||||
collectResponseTimes: true # collects avg response times from CRON locations
|
collectResponseTimes: true # collects avg response times from CRON locations
|
||||||
@ -15,23 +15,11 @@ settings:
|
|||||||
dayInHistogramNotOperational: ' incident(s)' # xx incident(s) recorded
|
dayInHistogramNotOperational: ' incident(s)' # xx incident(s) recorded
|
||||||
|
|
||||||
monitors:
|
monitors:
|
||||||
- id: workers-cloudflare-com # unique identifier
|
- id: webgateway # unique identifier
|
||||||
name: workers.cloudflare.com
|
name: webgateway.tormakristof.eu
|
||||||
description: 'You write code. They handle the rest.' # default=empty
|
description: 'On-prem webgateway status' # default=empty
|
||||||
url: 'https://workers.cloudflare.com/' # URL to fetch
|
url: 'https://tormakristof.eu/' # URL to fetch
|
||||||
method: GET # default=GET
|
method: GET # default=GET
|
||||||
expectStatus: 200 # operational status, default=200
|
expectStatus: 301 # operational status, default=200
|
||||||
followRedirect: false # should fetch follow redirects, default=false
|
followRedirect: false # should fetch follow redirects, default=false
|
||||||
|
linkable: true # allows the title to be a link, default=true
|
||||||
- id: www-cloudflare-com
|
|
||||||
name: www.cloudflare.com
|
|
||||||
description: 'Built for anything connected to the Internet.'
|
|
||||||
url: 'https://www.cloudflare.com'
|
|
||||||
method: GET
|
|
||||||
expectStatus: 200
|
|
||||||
|
|
||||||
- id: blog-cloudflare-com
|
|
||||||
name: The Cloudflare Blog
|
|
||||||
url: 'https://blog.cloudflare.com/'
|
|
||||||
method: GET
|
|
||||||
expectStatus: 200
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^10.0.2",
|
"autoprefixer": "^10.0.2",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
"postcss": "^8.1.8",
|
"postcss": "^8.2.13",
|
||||||
"postcss-cli": "^8.3.0",
|
"postcss-cli": "^8.3.0",
|
||||||
"prettier": "^2.2.0",
|
"prettier": "^2.2.0",
|
||||||
"tailwindcss": "^2.0.1",
|
"tailwindcss": "^2.0.1",
|
||||||
|
@ -30,9 +30,20 @@ export default function MonitorCard({ key, monitor, data }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<a href={monitor.url} target="_blank">
|
{(monitor.linkable === true || monitor.linkable === undefined) ?
|
||||||
<div className="text-xl">{monitor.name}</div>
|
(
|
||||||
</a>
|
<a href={monitor.url} target="_blank">
|
||||||
|
<div className="text-xl">{monitor.name}</div>
|
||||||
|
</a>
|
||||||
|
)
|
||||||
|
:
|
||||||
|
(
|
||||||
|
<span>
|
||||||
|
<div className="text-xl">{monitor.name}</div>
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<MonitorStatusLabel kvMonitor={data} />
|
<MonitorStatusLabel kvMonitor={data} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { locations } from '../functions/helpers'
|
import { locations } from '../functions/locations'
|
||||||
|
|
||||||
export default function MonitorDayAverage({ location, avg }) {
|
export default function MonitorDayAverage({ location, avg }) {
|
||||||
return (
|
return (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import config from '../../config.yaml'
|
import config from '../../config.yaml'
|
||||||
import { locations } from '../functions/helpers'
|
import { locations } from '../functions/locations'
|
||||||
|
|
||||||
const classes = {
|
const classes = {
|
||||||
green:
|
green:
|
||||||
|
@ -45,11 +45,11 @@ export default function ThemeSwitcher() {
|
|||||||
setDark(!darkmode)
|
setDark(!darkmode)
|
||||||
}
|
}
|
||||||
|
|
||||||
const buttonColor = darkmode ? 'bg-gray-700' : 'bg-gray-200'
|
const buttonColor = darkmode ? 'bg-gray-700 focus:ring-gray-700' : 'bg-gray-200 focus:ring-gray-200'
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
className={`${buttonColor} rounded-full h-7 w-7 mr-4`}
|
className={`${buttonColor} rounded-full h-7 w-7 mr-4 focus:outline-none focus:ring-2 focus:ring-opacity-50`}
|
||||||
onClick={changeTheme}
|
onClick={changeTheme}
|
||||||
>
|
>
|
||||||
{darkmode ? sunIcon : moonIcon}
|
{darkmode ? sunIcon : moonIcon}
|
||||||
|
@ -6,6 +6,7 @@ import {
|
|||||||
getCheckLocation,
|
getCheckLocation,
|
||||||
getKVMonitors,
|
getKVMonitors,
|
||||||
setKVMonitors,
|
setKVMonitors,
|
||||||
|
notifyDiscord,
|
||||||
} from './helpers'
|
} from './helpers'
|
||||||
|
|
||||||
function getDate() {
|
function getDate() {
|
||||||
@ -88,6 +89,15 @@ export async function processCronTrigger(event) {
|
|||||||
event.waitUntil(notifyTelegram(monitor, monitorOperational))
|
event.waitUntil(notifyTelegram(monitor, monitorOperational))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send Discord message on monitor change
|
||||||
|
if (
|
||||||
|
monitorStatusChanged &&
|
||||||
|
typeof SECRET_DISCORD_WEBHOOK_URL !== 'undefined' &&
|
||||||
|
SECRET_DISCORD_WEBHOOK_URL !== 'default-gh-action-secret'
|
||||||
|
) {
|
||||||
|
event.waitUntil(notifyDiscord(monitor, monitorOperational))
|
||||||
|
}
|
||||||
|
|
||||||
// make sure checkDay exists in checks in cases when needed
|
// make sure checkDay exists in checks in cases when needed
|
||||||
if (
|
if (
|
||||||
(config.settings.collectResponseTimes || !monitorOperational) &&
|
(config.settings.collectResponseTimes || !monitorOperational) &&
|
||||||
@ -131,8 +141,8 @@ export async function processCronTrigger(event) {
|
|||||||
// Save allOperational to false
|
// Save allOperational to false
|
||||||
monitorsState.lastUpdate.allOperational = false
|
monitorsState.lastUpdate.allOperational = false
|
||||||
|
|
||||||
// Increment failed checks, only on status change (maybe call it .incidents instead?)
|
// Increment failed checks on status change or first fail of the day (maybe call it .incidents instead?)
|
||||||
if (monitorStatusChanged) {
|
if (monitorStatusChanged || monitorsState.monitors[monitor.id].checks[checkDay].fails == 0) {
|
||||||
monitorsState.monitors[monitor.id].checks[checkDay].fails++
|
monitorsState.monitors[monitor.id].checks[checkDay].fails++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,6 @@ import { useEffect, useState } from 'react'
|
|||||||
|
|
||||||
const kvDataKey = 'monitors_data_v1_1'
|
const kvDataKey = 'monitors_data_v1_1'
|
||||||
|
|
||||||
export const locations = {
|
|
||||||
WAW: 'Warsaw',
|
|
||||||
SCL: 'Santiago de Chile',
|
|
||||||
MEL: 'Melbourne',
|
|
||||||
SIN: 'Singapore',
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getKVMonitors() {
|
export async function getKVMonitors() {
|
||||||
// trying both to see performance difference
|
// trying both to see performance difference
|
||||||
return KV_STATUS_PAGE.get(kvDataKey, 'json')
|
return KV_STATUS_PAGE.get(kvDataKey, 'json')
|
||||||
@ -34,6 +27,7 @@ export async function notifySlack(monitor, operational) {
|
|||||||
const payload = {
|
const payload = {
|
||||||
attachments: [
|
attachments: [
|
||||||
{
|
{
|
||||||
|
fallback: `Monitor ${monitor.name} changed status to ${getOperationalLabel(operational)}`,
|
||||||
color: operational ? '#36a64f' : '#f2c744',
|
color: operational ? '#36a64f' : '#f2c744',
|
||||||
blocks: [
|
blocks: [
|
||||||
{
|
{
|
||||||
@ -70,7 +64,7 @@ export async function notifySlack(monitor, operational) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function notifyTelegram(monitor, operational) {
|
export async function notifyTelegram(monitor, operational) {
|
||||||
const text = `Monitor *${monitor.name.replace(
|
const text = `Monitor *${monitor.name.replaceAll(
|
||||||
'-',
|
'-',
|
||||||
'\\-',
|
'\\-',
|
||||||
)}* changed status to *${getOperationalLabel(operational)}*
|
)}* changed status to *${getOperationalLabel(operational)}*
|
||||||
@ -90,6 +84,30 @@ export async function notifyTelegram(monitor, operational) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Visualize your payload using https://leovoel.github.io/embed-visualizer/
|
||||||
|
export async function notifyDiscord(monitor, operational) {
|
||||||
|
const payload = {
|
||||||
|
username: `${config.settings.title}`,
|
||||||
|
avatar_url: `${config.settings.url}/${config.settings.logo}`,
|
||||||
|
embeds: [
|
||||||
|
{
|
||||||
|
title: `${monitor.name} is ${getOperationalLabel(operational)} ${
|
||||||
|
operational ? ':white_check_mark:' : ':x:'
|
||||||
|
}`,
|
||||||
|
description: `\`${monitor.method ? monitor.method : 'GET'} ${
|
||||||
|
monitor.url
|
||||||
|
}\` - :eyes: [Status Page](${config.settings.url})`,
|
||||||
|
color: operational ? 3581519 : 13632027,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
return fetch(SECRET_DISCORD_WEBHOOK_URL, {
|
||||||
|
body: JSON.stringify(payload),
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function useKeyPress(targetKey) {
|
export function useKeyPress(targetKey) {
|
||||||
const [keyPressed, setKeyPressed] = useState(false)
|
const [keyPressed, setKeyPressed] = useState(false)
|
||||||
|
|
||||||
|
226
src/functions/locations.js
Normal file
226
src/functions/locations.js
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
export const locations = {
|
||||||
|
ADL: 'Adelaide',
|
||||||
|
AKL: 'Auckland',
|
||||||
|
ALG: 'Algiers',
|
||||||
|
AMM: 'Amman',
|
||||||
|
AMS: 'Amsterdam',
|
||||||
|
ARI: 'Arica',
|
||||||
|
ARN: 'Stockholm',
|
||||||
|
ASU: 'Asunción',
|
||||||
|
ATH: 'Athens',
|
||||||
|
ATL: 'Atlanta',
|
||||||
|
BAH: 'Manama',
|
||||||
|
BCN: 'Barcelona',
|
||||||
|
BEG: 'Belgrade',
|
||||||
|
BEL: 'Belém',
|
||||||
|
BEY: 'Beirut',
|
||||||
|
BGW: 'Baghdad',
|
||||||
|
BKK: 'Bangkok',
|
||||||
|
BLR: 'Bangalore',
|
||||||
|
BNA: 'Nashville',
|
||||||
|
BNE: 'Brisbane',
|
||||||
|
BNU: 'Blumenau',
|
||||||
|
BOG: 'Bogotá',
|
||||||
|
BOM: 'Mumbai',
|
||||||
|
BOS: 'Boston',
|
||||||
|
BRU: 'Brussels',
|
||||||
|
BSB: 'Brasilia',
|
||||||
|
BUD: 'Budapest',
|
||||||
|
BUF: 'Buffalo',
|
||||||
|
BWN: 'Bandar Seri Begawan',
|
||||||
|
CAN: 'Guangzhou',
|
||||||
|
CBR: 'Canberra',
|
||||||
|
CCU: 'Kolkata',
|
||||||
|
CDG: 'Paris',
|
||||||
|
CEB: 'Cebu',
|
||||||
|
CFC: 'Caçador',
|
||||||
|
CGK: 'Jakarta',
|
||||||
|
CGO: 'Zhengzhou',
|
||||||
|
CGP: 'Chittagong',
|
||||||
|
CKG: 'Chongqing',
|
||||||
|
CLT: 'Charlotte',
|
||||||
|
CMB: 'Colombo',
|
||||||
|
CMH: 'Columbus',
|
||||||
|
CMN: 'Casablanca',
|
||||||
|
CNF: 'Belo Horizonte',
|
||||||
|
CPH: 'Copenhagen',
|
||||||
|
CPT: 'Cape Town',
|
||||||
|
CSX: 'Zhuzhou',
|
||||||
|
CTU: 'Chengdu',
|
||||||
|
CUR: 'Willemstad',
|
||||||
|
CWB: 'Curitiba',
|
||||||
|
DAC: 'Dhaka',
|
||||||
|
DAR: 'Dar Es Salaam',
|
||||||
|
DEL: 'New Delhi',
|
||||||
|
DEN: 'Denver',
|
||||||
|
DFW: 'Dallas',
|
||||||
|
DKR: 'Dakar',
|
||||||
|
DME: 'Moscow',
|
||||||
|
DMM: 'Dammam',
|
||||||
|
DOH: 'Doha',
|
||||||
|
DTW: 'Detroit',
|
||||||
|
DUB: 'Dublin',
|
||||||
|
DUR: 'Durban',
|
||||||
|
DUS: 'Düsseldorf',
|
||||||
|
DXB: 'Dubai',
|
||||||
|
EDI: 'Edinburgh',
|
||||||
|
EVN: 'Yerevan',
|
||||||
|
EWR: 'Newark',
|
||||||
|
EZE: 'Buenos Aires',
|
||||||
|
FCO: 'Rome',
|
||||||
|
FLN: 'Florianopolis',
|
||||||
|
FOR: 'Fortaleza',
|
||||||
|
FRA: 'Frankfurt',
|
||||||
|
GIG: 'Rio de Janeiro',
|
||||||
|
GND: 'St. George’s',
|
||||||
|
GOT: 'Gothenburg',
|
||||||
|
GRU: 'São Paulo',
|
||||||
|
GUA: 'Guatemala City',
|
||||||
|
GVA: 'Geneva',
|
||||||
|
GYD: 'Baku',
|
||||||
|
GYE: 'Guayaquil',
|
||||||
|
HAM: 'Hamburg',
|
||||||
|
HAN: 'Hanoi',
|
||||||
|
HEL: 'Helsinki',
|
||||||
|
HKG: 'Hong Kong ',
|
||||||
|
HNL: 'Honolulu',
|
||||||
|
HRE: 'Harare',
|
||||||
|
HYD: 'Hyderabad',
|
||||||
|
IAD: 'Ashburn',
|
||||||
|
IAH: 'Houston',
|
||||||
|
ICN: 'Seoul',
|
||||||
|
IND: 'Indianapolis',
|
||||||
|
ISB: 'Islamabad',
|
||||||
|
IST: 'Istanbul',
|
||||||
|
ITJ: 'Itajaí',
|
||||||
|
JAX: 'Jacksonville',
|
||||||
|
JIB: 'Djibouti City',
|
||||||
|
JNB: 'Johannesburg',
|
||||||
|
JSR: 'Jashore',
|
||||||
|
KBP: 'Kyiv',
|
||||||
|
KEF: 'Reykjavík',
|
||||||
|
KGL: 'Kigali',
|
||||||
|
KHI: 'Karachi',
|
||||||
|
KIV: 'Chișinău',
|
||||||
|
KIX: 'Osaka',
|
||||||
|
KJA: 'Krasnoyarsk',
|
||||||
|
KTM: 'Kathmandu',
|
||||||
|
KUL: 'Kuala Lumpur',
|
||||||
|
KWI: 'Kuwait City',
|
||||||
|
LAD: 'Luanda',
|
||||||
|
LAS: 'Las Vegas',
|
||||||
|
LAX: 'Los Angeles',
|
||||||
|
LCA: 'Nicosia',
|
||||||
|
LED: 'Saint Petersburg',
|
||||||
|
LHE: 'Lahore',
|
||||||
|
LHR: 'London',
|
||||||
|
LIM: 'Lima',
|
||||||
|
LIS: 'Lisbon',
|
||||||
|
LOS: 'Lagos',
|
||||||
|
LUX: 'Luxembourg City',
|
||||||
|
MAA: 'Chennai',
|
||||||
|
MAD: 'Madrid',
|
||||||
|
MAN: 'Manchester',
|
||||||
|
MBA: 'Mombasa',
|
||||||
|
MCI: 'Kansas City',
|
||||||
|
MCT: 'Muscat',
|
||||||
|
MDE: 'Medellín',
|
||||||
|
MEL: 'Melbourne',
|
||||||
|
MEM: 'Memphis',
|
||||||
|
MEX: 'Mexico City',
|
||||||
|
MFE: 'McAllen',
|
||||||
|
MFM: 'Macau ',
|
||||||
|
MGM: 'Montgomery',
|
||||||
|
MIA: 'Miami',
|
||||||
|
MLE: 'Malé',
|
||||||
|
MNL: 'Manila',
|
||||||
|
MPM: 'Maputo',
|
||||||
|
MRS: 'Marseille',
|
||||||
|
MRU: 'Port Louis',
|
||||||
|
MSP: 'Minneapolis',
|
||||||
|
MUC: 'Munich',
|
||||||
|
MXP: 'Milan',
|
||||||
|
NAG: 'Nagpur',
|
||||||
|
NBG: 'Ningbo',
|
||||||
|
NBO: 'Nairobi',
|
||||||
|
NOU: 'Noumea',
|
||||||
|
NRT: 'Tokyo',
|
||||||
|
OMA: 'Omaha',
|
||||||
|
ORD: 'Chicago',
|
||||||
|
ORF: 'Norfolk',
|
||||||
|
OSL: 'Oslo',
|
||||||
|
OTP: 'Bucharest',
|
||||||
|
PAP: 'Port',
|
||||||
|
PBH: 'Thimphu',
|
||||||
|
PBM: 'Paramaribo',
|
||||||
|
PDX: 'Portland',
|
||||||
|
PER: 'Perth',
|
||||||
|
PHL: 'Philadelphia',
|
||||||
|
PHX: 'Phoenix',
|
||||||
|
PIT: 'Pittsburgh',
|
||||||
|
PMO: 'Palermo',
|
||||||
|
PNH: 'Phnom Penh',
|
||||||
|
POA: 'Porto Alegre',
|
||||||
|
PRG: 'Prague',
|
||||||
|
PTY: 'Panama City',
|
||||||
|
QRO: 'Queretaro',
|
||||||
|
QWJ: 'Americana',
|
||||||
|
RAO: 'Ribeirao Preto',
|
||||||
|
RGN: 'Yangon',
|
||||||
|
RIC: 'Richmond',
|
||||||
|
RIX: 'Riga',
|
||||||
|
ROB: 'Monrovia',
|
||||||
|
RUH: 'Riyadh',
|
||||||
|
RUN: 'Réunion',
|
||||||
|
SAN: 'San Diego',
|
||||||
|
SCL: 'Santiago',
|
||||||
|
SEA: 'Seattle',
|
||||||
|
SGN: 'Ho Chi Minh City',
|
||||||
|
SHA: 'Shanghai',
|
||||||
|
SIN: 'Singapore',
|
||||||
|
SJC: 'San Jose',
|
||||||
|
SJO: 'San José',
|
||||||
|
SJP: 'São José do Rio Preto',
|
||||||
|
SKG: 'Thessaloniki',
|
||||||
|
SLC: 'Salt Lake City',
|
||||||
|
SMF: 'Sacramento',
|
||||||
|
SOD: 'Sorocaba',
|
||||||
|
SOF: 'Sofia',
|
||||||
|
SSA: 'Salvador',
|
||||||
|
STL: 'St. Louis',
|
||||||
|
SVX: 'Yekaterinburg',
|
||||||
|
SYD: 'Sydney',
|
||||||
|
SZV: 'Suzhou',
|
||||||
|
TBS: 'Tbilisi',
|
||||||
|
TGU: 'Tegucigalpa',
|
||||||
|
TLH: 'Tallahassee',
|
||||||
|
TLL: 'Tallinn',
|
||||||
|
TLV: 'Tel Aviv',
|
||||||
|
TNA: 'Jinan',
|
||||||
|
TNR: 'Antananarivo',
|
||||||
|
TPA: 'Tampa',
|
||||||
|
TPE: 'Taipei ',
|
||||||
|
TSN: 'Tianjin',
|
||||||
|
TUN: 'Tunis',
|
||||||
|
TXL: 'Berlin',
|
||||||
|
UIO: 'Quito',
|
||||||
|
ULN: 'Ulaanbaatar',
|
||||||
|
URT: 'Surat Thani',
|
||||||
|
VCP: 'Campinas',
|
||||||
|
VIE: 'Vienna',
|
||||||
|
VNO: 'Vilnius',
|
||||||
|
VTE: 'Vientiane',
|
||||||
|
WAW: 'Warsaw',
|
||||||
|
WUH: 'Wuhan',
|
||||||
|
WUX: 'Wuxi',
|
||||||
|
XIY: 'Xi’an',
|
||||||
|
YUL: 'Montréal',
|
||||||
|
YVR: 'Vancouver',
|
||||||
|
YWG: 'Winnipeg',
|
||||||
|
YXE: 'Saskatoon',
|
||||||
|
YYC: 'Calgary',
|
||||||
|
YYZ: 'Toronto',
|
||||||
|
ZAG: 'Zagreb',
|
||||||
|
ZDM: 'Ramallah ',
|
||||||
|
ZRH: 'Zürich',
|
||||||
|
}
|
@ -3,9 +3,10 @@ workers_dev = true
|
|||||||
account_id = ""
|
account_id = ""
|
||||||
type = "webpack"
|
type = "webpack"
|
||||||
webpack_config = "node_modules/flareact/webpack"
|
webpack_config = "node_modules/flareact/webpack"
|
||||||
|
compatibility_date = "2021-07-23"
|
||||||
|
|
||||||
[triggers]
|
[triggers]
|
||||||
crons = ["* * * * *"]
|
crons = ["*/2 * * * *"]
|
||||||
|
|
||||||
[site]
|
[site]
|
||||||
bucket = "out"
|
bucket = "out"
|
||||||
|
161
yarn.lock
161
yarn.lock
@ -1511,10 +1511,10 @@ bluebird@^3.5.5:
|
|||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||||
|
|
||||||
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
|
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
|
||||||
version "4.11.9"
|
version "4.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
|
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
|
||||||
integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
|
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
|
||||||
|
|
||||||
bn.js@^5.0.0, bn.js@^5.1.1:
|
bn.js@^5.0.0, bn.js@^5.1.1:
|
||||||
version "5.1.3"
|
version "5.1.3"
|
||||||
@ -1585,7 +1585,7 @@ braces@^3.0.1, braces@~3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fill-range "^7.0.1"
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
brorand@^1.0.1:
|
brorand@^1.0.1, brorand@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
|
||||||
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
|
||||||
@ -1652,15 +1652,15 @@ browserify-zlib@^0.2.0:
|
|||||||
pako "~1.0.5"
|
pako "~1.0.5"
|
||||||
|
|
||||||
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.6, browserslist@^4.14.7, browserslist@^4.6.4:
|
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.6, browserslist@^4.14.7, browserslist@^4.6.4:
|
||||||
version "4.14.7"
|
version "4.16.6"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6"
|
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2"
|
||||||
integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==
|
integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
caniuse-lite "^1.0.30001157"
|
caniuse-lite "^1.0.30001219"
|
||||||
colorette "^1.2.1"
|
colorette "^1.2.2"
|
||||||
electron-to-chromium "^1.3.591"
|
electron-to-chromium "^1.3.723"
|
||||||
escalade "^3.1.1"
|
escalade "^3.1.1"
|
||||||
node-releases "^1.1.66"
|
node-releases "^1.1.71"
|
||||||
|
|
||||||
buffer-from@^1.0.0:
|
buffer-from@^1.0.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
@ -1817,10 +1817,10 @@ caniuse-api@^3.0.0:
|
|||||||
lodash.memoize "^4.1.2"
|
lodash.memoize "^4.1.2"
|
||||||
lodash.uniq "^4.5.0"
|
lodash.uniq "^4.5.0"
|
||||||
|
|
||||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157:
|
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157, caniuse-lite@^1.0.30001219:
|
||||||
version "1.0.30001159"
|
version "1.0.30001235"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001235.tgz#ad5ca75bc5a1f7b12df79ad806d715a43a5ac4ed"
|
||||||
integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==
|
integrity sha512-zWEwIVqnzPkSAXOUlQnPW2oKoYb2aLQ4Q5ejdjBcnH63rfypaW34CxaeBn1VMya2XaEU3P/R2qHpWyj+l0BT1A==
|
||||||
|
|
||||||
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
@ -1982,9 +1982,9 @@ color-name@^1.0.0, color-name@~1.1.4:
|
|||||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
color-string@^1.5.4:
|
color-string@^1.5.4:
|
||||||
version "1.5.4"
|
version "1.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6"
|
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312"
|
||||||
integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==
|
integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==
|
||||||
dependencies:
|
dependencies:
|
||||||
color-name "^1.0.0"
|
color-name "^1.0.0"
|
||||||
simple-swizzle "^0.2.2"
|
simple-swizzle "^0.2.2"
|
||||||
@ -1997,10 +1997,10 @@ color@^3.0.0, color@^3.1.3:
|
|||||||
color-convert "^1.9.1"
|
color-convert "^1.9.1"
|
||||||
color-string "^1.5.4"
|
color-string "^1.5.4"
|
||||||
|
|
||||||
colorette@^1.2.1:
|
colorette@^1.2.1, colorette@^1.2.2:
|
||||||
version "1.2.1"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
|
||||||
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
|
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
|
||||||
|
|
||||||
commander@^2.20.0:
|
commander@^2.20.0:
|
||||||
version "2.20.3"
|
version "2.20.3"
|
||||||
@ -2612,9 +2612,9 @@ dns-equal@^1.0.0:
|
|||||||
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
|
integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
|
||||||
|
|
||||||
dns-packet@^1.3.1:
|
dns-packet@^1.3.1:
|
||||||
version "1.3.1"
|
version "1.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
|
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
|
||||||
integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
|
integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
|
||||||
dependencies:
|
dependencies:
|
||||||
ip "^1.1.0"
|
ip "^1.1.0"
|
||||||
safe-buffer "^5.0.1"
|
safe-buffer "^5.0.1"
|
||||||
@ -2684,23 +2684,23 @@ ee-first@1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||||
|
|
||||||
electron-to-chromium@^1.3.591:
|
electron-to-chromium@^1.3.723:
|
||||||
version "1.3.602"
|
version "1.3.749"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.602.tgz#a176db985a9826c9a3fbf614d054fc42c5c9f478"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.749.tgz#0ecebc529ceb49dd2a7c838ae425236644c3439a"
|
||||||
integrity sha512-+JbC10U8vpKAqAtrEqORdzaWewRgEj5DY+QQNyP/dxDTshPqqgpjrvt6smewKS/5F3vT5prYgg7/VTxb5FROjw==
|
integrity sha512-F+v2zxZgw/fMwPz/VUGIggG4ZndDsYy0vlpthi3tjmDZlcfbhN5mYW0evXUsBr2sUtuDANFtle410A9u/sd/4A==
|
||||||
|
|
||||||
elliptic@^6.5.3:
|
elliptic@^6.5.3:
|
||||||
version "6.5.3"
|
version "6.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6"
|
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
|
||||||
integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==
|
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
bn.js "^4.4.0"
|
bn.js "^4.11.9"
|
||||||
brorand "^1.0.1"
|
brorand "^1.1.0"
|
||||||
hash.js "^1.0.0"
|
hash.js "^1.0.0"
|
||||||
hmac-drbg "^1.0.0"
|
hmac-drbg "^1.0.1"
|
||||||
inherits "^2.0.1"
|
inherits "^2.0.4"
|
||||||
minimalistic-assert "^1.0.0"
|
minimalistic-assert "^1.0.1"
|
||||||
minimalistic-crypto-utils "^1.0.0"
|
minimalistic-crypto-utils "^1.0.1"
|
||||||
|
|
||||||
emoji-regex@^7.0.1:
|
emoji-regex@^7.0.1:
|
||||||
version "7.0.3"
|
version "7.0.3"
|
||||||
@ -2874,9 +2874,9 @@ events@^3.0.0:
|
|||||||
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
|
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
|
||||||
|
|
||||||
eventsource@^1.0.7:
|
eventsource@^1.0.7:
|
||||||
version "1.0.7"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
|
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.1.tgz#4544a35a57d7120fba4fa4c86cb4023b2c09df2f"
|
||||||
integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
|
integrity sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA==
|
||||||
dependencies:
|
dependencies:
|
||||||
original "^1.0.0"
|
original "^1.0.0"
|
||||||
|
|
||||||
@ -3472,7 +3472,7 @@ hex-color-regex@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
|
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
|
||||||
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
|
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
|
||||||
|
|
||||||
hmac-drbg@^1.0.0:
|
hmac-drbg@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
|
||||||
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
|
integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
|
||||||
@ -3489,9 +3489,9 @@ homedir-polyfill@^1.0.1:
|
|||||||
parse-passwd "^1.0.0"
|
parse-passwd "^1.0.0"
|
||||||
|
|
||||||
hosted-git-info@^2.1.4:
|
hosted-git-info@^2.1.4:
|
||||||
version "2.8.8"
|
version "2.8.9"
|
||||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
|
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
|
||||||
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
|
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
|
||||||
|
|
||||||
hpack.js@^2.1.6:
|
hpack.js@^2.1.6:
|
||||||
version "2.1.6"
|
version "2.1.6"
|
||||||
@ -4159,14 +4159,6 @@ last-call-webpack-plugin@^3.0.0:
|
|||||||
lodash "^4.17.5"
|
lodash "^4.17.5"
|
||||||
webpack-sources "^1.1.0"
|
webpack-sources "^1.1.0"
|
||||||
|
|
||||||
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:
|
lines-and-columns@^1.1.6:
|
||||||
version "1.1.6"
|
version "1.1.6"
|
||||||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
|
||||||
@ -4271,9 +4263,9 @@ lodash.uniq@^4.5.0:
|
|||||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||||
|
|
||||||
lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5:
|
lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5:
|
||||||
version "4.17.20"
|
version "4.17.21"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||||
|
|
||||||
log-symbols@^4.0.0:
|
log-symbols@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
@ -4472,7 +4464,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
|
||||||
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
|
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
|
||||||
|
|
||||||
minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
minimalistic-crypto-utils@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||||
@ -4616,10 +4608,10 @@ nan@^2.12.1:
|
|||||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
|
||||||
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
|
||||||
|
|
||||||
nanoid@^3.1.12, nanoid@^3.1.16:
|
nanoid@^3.1.12, nanoid@^3.1.22:
|
||||||
version "3.1.16"
|
version "3.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64"
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||||
integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==
|
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||||
|
|
||||||
nanomatch@^1.2.9:
|
nanomatch@^1.2.9:
|
||||||
version "1.2.13"
|
version "1.2.13"
|
||||||
@ -4706,10 +4698,10 @@ node-libs-browser@^2.2.1:
|
|||||||
util "^0.11.0"
|
util "^0.11.0"
|
||||||
vm-browserify "^1.0.1"
|
vm-browserify "^1.0.1"
|
||||||
|
|
||||||
node-releases@^1.1.66:
|
node-releases@^1.1.71:
|
||||||
version "1.1.67"
|
version "1.1.73"
|
||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
|
||||||
integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==
|
integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
|
||||||
|
|
||||||
normalize-package-data@^2.3.2:
|
normalize-package-data@^2.3.2:
|
||||||
version "2.5.0"
|
version "2.5.0"
|
||||||
@ -5870,14 +5862,13 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2
|
|||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
supports-color "^6.1.0"
|
supports-color "^6.1.0"
|
||||||
|
|
||||||
postcss@^8.1.6, postcss@^8.1.8:
|
postcss@^8.1.6, postcss@^8.2.13:
|
||||||
version "8.1.8"
|
version "8.2.13"
|
||||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.8.tgz#697439e7276735ecdd2893d2cf8efb2236693ac3"
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f"
|
||||||
integrity sha512-hO6jFWBy0QnBBRaw+s0F4hVPKGDICec/nLNEG1D4qqw9/LBzWMkTjckqqELXAo0J42jN8GFZXtgQfezEaoG9gQ==
|
integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
colorette "^1.2.1"
|
colorette "^1.2.2"
|
||||||
line-column "^1.0.2"
|
nanoid "^3.1.22"
|
||||||
nanoid "^3.1.16"
|
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
prepend-http@^1.0.0:
|
prepend-http@^1.0.0:
|
||||||
@ -6767,9 +6758,9 @@ sprintf-js@~1.0.2:
|
|||||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||||
|
|
||||||
ssri@^6.0.1:
|
ssri@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
|
resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
|
||||||
integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
|
integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
figgy-pudding "^3.5.1"
|
figgy-pudding "^3.5.1"
|
||||||
|
|
||||||
@ -7265,9 +7256,9 @@ urix@^0.1.0:
|
|||||||
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
|
||||||
|
|
||||||
url-parse@^1.4.3:
|
url-parse@^1.4.3:
|
||||||
version "1.4.7"
|
version "1.5.10"
|
||||||
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
|
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
|
||||||
integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
|
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
querystringify "^2.1.1"
|
querystringify "^2.1.1"
|
||||||
requires-port "^1.0.0"
|
requires-port "^1.0.0"
|
||||||
@ -7566,9 +7557,9 @@ wrappy@1:
|
|||||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||||
|
|
||||||
ws@^6.2.1:
|
ws@^6.2.1:
|
||||||
version "6.2.1"
|
version "6.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
|
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
||||||
integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
|
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
|
||||||
dependencies:
|
dependencies:
|
||||||
async-limiter "~1.0.0"
|
async-limiter "~1.0.0"
|
||||||
|
|
||||||
@ -7578,9 +7569,9 @@ xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1:
|
|||||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||||
|
|
||||||
y18n@^4.0.0:
|
y18n@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
|
||||||
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
|
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
|
||||||
|
|
||||||
y18n@^5.0.5:
|
y18n@^5.0.5:
|
||||||
version "5.0.5"
|
version "5.0.5"
|
||||||
|
Reference in New Issue
Block a user