diff --git a/.goreleaser.yml b/.goreleaser.yml index 3c3aa490..d3e71df2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -71,7 +71,7 @@ builds: nfpms: - package_name: ntfy - homepage: https://git.zio.sh/astra/ntfy/v2 + homepage: https://heckel.io/ntfy maintainer: Philipp C. Heckel description: Simple pub-sub notification service license: Apache 2.0 @@ -164,14 +164,14 @@ dockers: - image_templates: - &arm64v8_image "binwiederhier/ntfy:{{ .Tag }}-arm64v8" use: buildx - dockerfile: Dockerfile-arm + dockerfile: Dockerfile goarch: arm64 build_flag_templates: - "--platform=linux/arm64/v8" - image_templates: - &armv7_image "binwiederhier/ntfy:{{ .Tag }}-armv7" use: buildx - dockerfile: Dockerfile-arm + dockerfile: Dockerfile goarch: arm goarm: 7 build_flag_templates: @@ -179,7 +179,7 @@ dockers: - image_templates: - &armv6_image "binwiederhier/ntfy:{{ .Tag }}-armv6" use: buildx - dockerfile: Dockerfile-arm + dockerfile: Dockerfile goarch: arm goarm: 6 build_flag_templates: diff --git a/Dockerfile b/Dockerfile index 45dad05d..7c2052ef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,6 @@ LABEL org.opencontainers.image.licenses="Apache-2.0, GPL-2.0" LABEL org.opencontainers.image.title="ntfy" LABEL org.opencontainers.image.description="Send push notifications to your phone or desktop using PUT/POST" -RUN apk add --no-cache tzdata COPY ntfy /usr/bin EXPOSE 80/tcp diff --git a/Dockerfile-arm b/Dockerfile-arm deleted file mode 100644 index 755092fd..00000000 --- a/Dockerfile-arm +++ /dev/null @@ -1,18 +0,0 @@ -FROM alpine - -LABEL org.opencontainers.image.authors="philipp.heckel@gmail.com" -LABEL org.opencontainers.image.url="https://ntfy.sh/" -LABEL org.opencontainers.image.documentation="https://docs.ntfy.sh/" -LABEL org.opencontainers.image.source="https://github.com/binwiederhier/ntfy" -LABEL org.opencontainers.image.vendor="Philipp C. Heckel" -LABEL org.opencontainers.image.licenses="Apache-2.0, GPL-2.0" -LABEL org.opencontainers.image.title="ntfy" -LABEL org.opencontainers.image.description="Send push notifications to your phone or desktop using PUT/POST" - -# Alpine does not support adding "tzdata" on ARM anymore, see -# https://github.com/binwiederhier/ntfy/issues/894 - -COPY ntfy /usr/bin - -EXPOSE 80/tcp -ENTRYPOINT ["ntfy"] diff --git a/Dockerfile-build b/Dockerfile-build index 6e96c7d4..62a60bd8 100644 --- a/Dockerfile-build +++ b/Dockerfile-build @@ -2,17 +2,13 @@ FROM golang:1.20-bullseye as builder ARG VERSION=dev ARG COMMIT=unknown -ARG NODE_MAJOR=18 -RUN apt-get update && apt-get install -y \ - build-essential ca-certificates curl gnupg \ - && mkdir -p /etc/apt/keyrings \ - && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ - && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" >> /etc/apt/sources.list.d/nodesource.list \ - && apt-get update \ - && apt-get install -y \ - python3-pip nodejs \ - && rm -rf /var/lib/apt/lists/* +RUN apt-get update +RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash +RUN apt-get install -y \ + build-essential \ + nodejs \ + python3-pip WORKDIR /app ADD Makefile . diff --git a/Makefile b/Makefile index 88c22033..8cb75238 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,8 @@ help: @echo " make web-deps - Install web app dependencies (npm install the universe)" @echo " make web-build - Actually build the web app" @echo " make web-lint - Run eslint on the web app" - @echo " make web-fmt - Run prettier on the web app" - @echo " make web-fmt-check - Run prettier on the web app, but don't change anything" + @echo " make web-format - Run prettier on the web app" + @echo " make web-format-check - Run prettier on the web app, but don't change anything" @echo @echo "Build documentation:" @echo " make docs - Build the documentation" @@ -111,7 +111,18 @@ build-deps-ubuntu: docs: docs-deps docs-build docs-build: .PHONY - mkdocs build + @if ! /bin/echo -e "import sys\nif sys.version_info < (3,8):\n exit(1)" | python3; then \ + if which python3.8; then \ + echo "python3.8 $(shell which mkdocs) build"; \ + python3.8 $(shell which mkdocs) build; \ + else \ + echo "ERROR: Python version too low. mkdocs-material needs >= 3.8"; \ + exit 1; \ + fi; \ + else \ + echo "mkdocs build"; \ + mkdocs build; \ + fi docs-deps: .PHONY pip3 install -r requirements.txt @@ -140,10 +151,10 @@ web-deps: web-deps-update: cd web && npm update -web-fmt: +web-format: cd web && npm run format -web-fmt-check: +web-format-check: cd web && npm run format:check web-lint: @@ -237,7 +248,7 @@ cli-build-results: # Test/check targets -check: test web-fmt-check fmt-check vet web-lint lint staticcheck +check: test web-format-check fmt-check vet web-lint lint staticcheck test: .PHONY go test $(shell go list ./... | grep -vE 'ntfy/(test|examples|tools)') @@ -264,7 +275,7 @@ coverage-upload: # Lint/formatting targets -fmt: web-fmt +fmt: gofmt -s -w . fmt-check: diff --git a/README.md b/README.md index b3d0c55e..6cc1adbe 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,186 @@ +![ntfy](web/public/static/images/ntfy.png) + # ntfy.sh | Send push notifications to your phone or desktop via PUT/POST +[![Release](https://img.shields.io/github/release/binwiederhier/ntfy.svg?color=success&style=flat-square)](https://github.com/binwiederhier/ntfy/releases/latest) +[![Go Reference](https://pkg.go.dev/badge/heckel.io/ntfy.svg)](https://pkg.go.dev/heckel.io/ntfy) +[![Tests](https://github.com/binwiederhier/ntfy/workflows/test/badge.svg)](https://github.com/binwiederhier/ntfy/actions) +[![Go Report Card](https://goreportcard.com/badge/github.com/binwiederhier/ntfy)](https://goreportcard.com/report/github.com/binwiederhier/ntfy) +[![codecov](https://codecov.io/gh/binwiederhier/ntfy/branch/main/graph/badge.svg?token=A597KQ463G)](https://codecov.io/gh/binwiederhier/ntfy) +[![Discord](https://img.shields.io/discord/874398661709295626?label=Discord)](https://discord.gg/cT7ECsZj9w) +[![Matrix](https://img.shields.io/matrix/ntfy:matrix.org?label=Matrix)](https://matrix.to/#/#ntfy:matrix.org) +[![Matrix space](https://img.shields.io/matrix/ntfy-space:matrix.org?label=Matrix+space)](https://matrix.to/#/#ntfy-space:matrix.org) +[![Lemmy](https://img.shields.io/badge/Lemmy-discuss-green)](https://discuss.ntfy.sh/c/ntfy) +[![Healthcheck](https://healthchecks.io/badge/68b65976-b3b0-4102-aec9-980921/kcoEgrLY.svg)](https://ntfy.statuspage.io/) +[![Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/binwiederhier/ntfy) **ntfy** (pronounced "*notify*") is a simple HTTP-based [pub-sub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) notification service. With ntfy, you can **send notifications to your phone or desktop via scripts** from any computer, **without having to sign up or pay any fees**. If you'd like to run your own instance of the service, you can easily do so since ntfy is open source. +You can access the free version of ntfy at **[ntfy.sh](https://ntfy.sh)**. There is also an [open source Android app](https://github.com/binwiederhier/ntfy-android) +available on [Google Play](https://play.google.com/store/apps/details?id=io.heckel.ntfy) or [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/), +as well as an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) available on the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347). -### This is a fork of [github.com/binwiederhier/ntfy](https://github.com/binwiederhier/ntfy) \ No newline at end of file +

+ + + + + +

+ +## [ntfy Pro](https://ntfy.sh/app) 💸 🎉 +I now offer paid plans for [ntfy.sh](https://ntfy.sh/) if you don't want to self-host, or you want to support the development of ntfy (→ [Purchase via web app](https://ntfy.sh/app)). You can **buy a plan for as low as $3.33/month** (if you use promo code `MYTOPIC`, limited time only). You can also donate via [GitHub Sponsors](https://github.com/sponsors/binwiederhier), and [Liberapay](https://liberapay.com/ntfy). I would be very humbled by your sponsorship. ❤️ + +## **[Documentation](https://ntfy.sh/docs/)** + +[Getting started](https://ntfy.sh/docs/) | +[Android/iOS](https://ntfy.sh/docs/subscribe/phone/) | +[API](https://ntfy.sh/docs/publish/) | +[Install / Self-hosting](https://ntfy.sh/docs/install/) | +[Building](https://ntfy.sh/docs/develop/) + +## Chat / forum +There are a few ways to get in touch with me and/or the rest of the community. Feel free to use any of these methods. Whatever +works best for you: + +* [Discord server](https://discord.gg/cT7ECsZj9w) - direct chat with the community +* [Matrix room #ntfy](https://matrix.to/#/#ntfy:matrix.org) (+ [Matrix space](https://matrix.to/#/#ntfy-space:matrix.org)) - same chat, bridged from Discord +* [Lemmy discussion board](https://discuss.ntfy.sh/c/ntfy) - asynchronous forum (_new as of June 2023_) +* [GitHub issues](https://github.com/binwiederhier/ntfy/issues) - questions, features, bugs + +## Announcements / beta testers +For announcements of new releases and cutting-edge beta versions, please subscribe to the [ntfy.sh/announcements](https://ntfy.sh/announcements) +topic. If you'd like to test the iOS app, join [TestFlight](https://testflight.apple.com/join/P1fFnAm9). For Android betas, +join Discord/Matrix (I'll eventually make a testing channel in Google Play). + +## Contributing +I welcome any and all contributions. Just create a PR or an issue. For larger features/ideas, please reach out +on Discord/Matrix first to see if I'd accept them. To contribute code, check out the [build instructions](https://ntfy.sh/docs/develop/) +for the server and the Android app. Or, if you'd like to help translate 🇩🇪 🇺🇸 🇧🇬, you can start immediately in +[Hosted Weblate](https://hosted.weblate.org/projects/ntfy/). + + +Translation status + + +## Sponsors +I have just very recently started accepting donations via [GitHub Sponsors](https://github.com/sponsors/binwiederhier), +and [Liberapay](https://liberapay.com/ntfy). I would be humbled if you helped me carry the server and developer +account costs. Even small donations are very much appreciated. A big fat **Thank You** to the folks already sponsoring ntfy: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +I'd also like to thank JetBrains for their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/), +and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project: + + + +## Code of Conduct +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. + +**We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.** + +_Please be sure to read the complete [Code of Conduct](CODE_OF_CONDUCT.md)._ + +## License +Made with ❤️ by [Philipp C. Heckel](https://heckel.io). +The project is dual licensed under the [Apache License 2.0](LICENSE) and the [GPLv2 License](LICENSE.GPLv2). + +Third party libraries and resources: +* [github.com/urfave/cli](https://github.com/urfave/cli) (MIT) is used to drive the CLI +* [Mixkit sounds](https://mixkit.co/free-sound-effects/notification/) (Mixkit Free License) are used as notification sounds +* [Sounds from notificationsounds.com](https://notificationsounds.com) (Creative Commons Attribution) are used as notification sounds +* [Roboto Font](https://fonts.google.com/specimen/Roboto) (Apache 2.0) is used as a font in everything web +* [React](https://reactjs.org/) (MIT) is used for the web app +* [Material UI components](https://mui.com/) (MIT) are used in the web app +* [MUI dashboard template](https://github.com/mui/material-ui/tree/master/docs/data/material/getting-started/templates/dashboard) (MIT) was used as a basis for the web app +* [Dexie.js](https://github.com/dexie/Dexie.js) (Apache 2.0) is used for web app persistence in IndexedDB +* [GoReleaser](https://goreleaser.com/) (MIT) is used to create releases +* [go-smtp](https://github.com/emersion/go-smtp) (MIT) is used to receive e-mails +* [stretchr/testify](https://github.com/stretchr/testify) (MIT) is used for unit and integration tests +* [github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) (MIT) is used to provide the persistent message cache +* [Firebase Admin SDK](https://github.com/firebase/firebase-admin-go) (Apache 2.0) is used to send FCM messages +* [github/gemoji](https://github.com/github/gemoji) (MIT) is used for emoji support (specifically the [emoji.json](https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json) file) +* [Lightbox with vanilla JS](https://yossiabramov.com/blog/vanilla-js-lightbox) as a lightbox on the landing page +* [HTTP middleware for gzip compression](https://gist.github.com/CJEnright/bc2d8b8dc0c1389a9feeddb110f822d7) (MIT) is used for serving static files +* [Regex for auto-linking](https://github.com/bryanwoods/autolink-js) (MIT) is used to highlight links (the library is not used) +* [Statically linking go-sqlite3](https://www.arp242.net/static-go.html) +* [Linked tabs in mkdocs](https://facelessuser.github.io/pymdown-extensions/extensions/tabbed/#linked-tabs) +* [webpush-go](https://github.com/SherClockHolmes/webpush-go) (MIT) is used to send web push notifications diff --git a/client/client.go b/client/client.go index 191df260..93cf7da5 100644 --- a/client/client.go +++ b/client/client.go @@ -7,8 +7,8 @@ import ( "encoding/json" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "io" "net/http" "regexp" diff --git a/client/client_test.go b/client/client_test.go index 7ab39db6..f0b15a3f 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -2,10 +2,10 @@ package client_test import ( "fmt" - "git.zio.sh/astra/ntfy/v2/client" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/test" "github.com/stretchr/testify/require" + "heckel.io/ntfy/client" + "heckel.io/ntfy/log" + "heckel.io/ntfy/test" "os" "testing" "time" diff --git a/client/config_test.go b/client/config_test.go index f4c86bfb..c85d3d49 100644 --- a/client/config_test.go +++ b/client/config_test.go @@ -1,8 +1,8 @@ package client_test import ( - "git.zio.sh/astra/ntfy/v2/client" "github.com/stretchr/testify/require" + "heckel.io/ntfy/client" "os" "path/filepath" "testing" diff --git a/client/options.go b/client/options.go index 1bf48faf..630f1554 100644 --- a/client/options.go +++ b/client/options.go @@ -2,7 +2,7 @@ package client import ( "fmt" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "net/http" "strings" "time" diff --git a/cmd/access.go b/cmd/access.go index 0dc4719e..87f01d11 100644 --- a/cmd/access.go +++ b/cmd/access.go @@ -5,9 +5,9 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" ) func init() { diff --git a/cmd/access_test.go b/cmd/access_test.go index d872021a..359beb92 100644 --- a/cmd/access_test.go +++ b/cmd/access_test.go @@ -2,10 +2,10 @@ package cmd import ( "fmt" - "git.zio.sh/astra/ntfy/v2/server" - "git.zio.sh/astra/ntfy/v2/test" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" + "heckel.io/ntfy/test" "testing" ) diff --git a/cmd/app.go b/cmd/app.go index 27e876b6..edef5b47 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -3,9 +3,9 @@ package cmd import ( "fmt" - "git.zio.sh/astra/ntfy/v2/log" "github.com/urfave/cli/v2" "github.com/urfave/cli/v2/altsrc" + "heckel.io/ntfy/log" "os" "regexp" ) diff --git a/cmd/app_test.go b/cmd/app_test.go index c5232050..ec27a67d 100644 --- a/cmd/app_test.go +++ b/cmd/app_test.go @@ -3,9 +3,9 @@ package cmd import ( "bytes" "encoding/json" - "git.zio.sh/astra/ntfy/v2/client" - "git.zio.sh/astra/ntfy/v2/log" "github.com/urfave/cli/v2" + "heckel.io/ntfy/client" + "heckel.io/ntfy/log" "os" "strings" "testing" diff --git a/cmd/config_loader.go b/cmd/config_loader.go index eab742e2..9f0a5769 100644 --- a/cmd/config_loader.go +++ b/cmd/config_loader.go @@ -2,10 +2,10 @@ package cmd import ( "fmt" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" "github.com/urfave/cli/v2/altsrc" "gopkg.in/yaml.v2" + "heckel.io/ntfy/util" "os" ) diff --git a/cmd/publish.go b/cmd/publish.go index 050184ca..5ffe3adf 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -3,10 +3,10 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/client" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" + "heckel.io/ntfy/client" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "io" "os" "os/exec" diff --git a/cmd/publish_test.go b/cmd/publish_test.go index fb4bbc70..a254f47d 100644 --- a/cmd/publish_test.go +++ b/cmd/publish_test.go @@ -2,9 +2,9 @@ package cmd import ( "fmt" - "git.zio.sh/astra/ntfy/v2/test" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/test" + "heckel.io/ntfy/util" "net/http" "net/http/httptest" "os" diff --git a/cmd/serve.go b/cmd/serve.go index 1177af0c..87b83dda 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -5,8 +5,8 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" "github.com/stripe/stripe-go/v74" + "heckel.io/ntfy/user" "io/fs" "math" "net" @@ -17,12 +17,12 @@ import ( "syscall" "time" - "git.zio.sh/astra/ntfy/v2/log" + "heckel.io/ntfy/log" - "git.zio.sh/astra/ntfy/v2/server" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" "github.com/urfave/cli/v2/altsrc" + "heckel.io/ntfy/server" + "heckel.io/ntfy/util" ) func init() { diff --git a/cmd/serve_test.go b/cmd/serve_test.go index 2fef0643..774166c3 100644 --- a/cmd/serve_test.go +++ b/cmd/serve_test.go @@ -9,12 +9,12 @@ import ( "testing" "time" - "git.zio.sh/astra/ntfy/v2/client" - "git.zio.sh/astra/ntfy/v2/test" - "git.zio.sh/astra/ntfy/v2/util" "github.com/gorilla/websocket" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "heckel.io/ntfy/client" + "heckel.io/ntfy/test" + "heckel.io/ntfy/util" ) func init() { diff --git a/cmd/subscribe.go b/cmd/subscribe.go index c9ed75e9..77a1b5f1 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -3,10 +3,10 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/client" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" + "heckel.io/ntfy/client" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "os" "os/exec" "os/user" diff --git a/cmd/tier.go b/cmd/tier.go index 76e273a1..f1c8ddcb 100644 --- a/cmd/tier.go +++ b/cmd/tier.go @@ -5,9 +5,9 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" ) func init() { diff --git a/cmd/tier_test.go b/cmd/tier_test.go index b896d15f..1774aa27 100644 --- a/cmd/tier_test.go +++ b/cmd/tier_test.go @@ -1,10 +1,10 @@ package cmd import ( - "git.zio.sh/astra/ntfy/v2/server" - "git.zio.sh/astra/ntfy/v2/test" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" + "heckel.io/ntfy/test" "testing" ) diff --git a/cmd/token.go b/cmd/token.go index 4fe7e541..ab9f4447 100644 --- a/cmd/token.go +++ b/cmd/token.go @@ -5,9 +5,9 @@ package cmd import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "net/netip" "time" ) diff --git a/cmd/token_test.go b/cmd/token_test.go index b5f0c0b4..40d7be7b 100644 --- a/cmd/token_test.go +++ b/cmd/token_test.go @@ -2,10 +2,10 @@ package cmd import ( "fmt" - "git.zio.sh/astra/ntfy/v2/server" - "git.zio.sh/astra/ntfy/v2/test" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" + "heckel.io/ntfy/test" "regexp" "testing" ) diff --git a/cmd/user.go b/cmd/user.go index 21fe21af..a96c7089 100644 --- a/cmd/user.go +++ b/cmd/user.go @@ -6,13 +6,13 @@ import ( "crypto/subtle" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/user" "os" "strings" - "git.zio.sh/astra/ntfy/v2/util" "github.com/urfave/cli/v2" "github.com/urfave/cli/v2/altsrc" + "heckel.io/ntfy/util" ) const ( diff --git a/cmd/user_test.go b/cmd/user_test.go index 361a4288..1149285f 100644 --- a/cmd/user_test.go +++ b/cmd/user_test.go @@ -1,11 +1,11 @@ package cmd import ( - "git.zio.sh/astra/ntfy/v2/server" - "git.zio.sh/astra/ntfy/v2/test" - "git.zio.sh/astra/ntfy/v2/user" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" + "heckel.io/ntfy/test" + "heckel.io/ntfy/user" "os" "path/filepath" "testing" diff --git a/cmd/webpush_test.go b/cmd/webpush_test.go index e2565214..1b364701 100644 --- a/cmd/webpush_test.go +++ b/cmd/webpush_test.go @@ -3,9 +3,9 @@ package cmd import ( "testing" - "git.zio.sh/astra/ntfy/v2/server" "github.com/stretchr/testify/require" "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" ) func TestCLI_WebPush_GenerateKeys(t *testing.T) { diff --git a/docs/config.md b/docs/config.md index 2662a537..bb7f7e1b 100644 --- a/docs/config.md +++ b/docs/config.md @@ -466,31 +466,6 @@ $ dig A mx1.ntfy.sh +short 3.139.215.220 ``` -### Local-only email -If you want to send emails from an internal service on the same network as your ntfy instance, you do not need to -worry about DNS records at all. Define a port for the SMTP server and pick an SMTP server domain (can be -anything). - -=== "/etc/ntfy/server.yml" - ``` yaml - smtp-server-listen: ":25" - smtp-server-domain: "example.com" - smtp-server-addr-prefix: "ntfy-" # optional - ``` - -Then, in the email settings of your internal service, set the SMTP server address to the IP address of your -ntfy instance. Set the port to the value you defined in `smtp-server-listen`. Leave any username and password -fields empty. In the "From" address, pick anything (e.g., "alerts@ntfy.sh"); the value doesn't matter. -In the "To" address, put in an email address that follows this pattern: `[topic]@[smtp-server-domain]` (or -`[smtp-server-addr-prefix][topic]@[smtp-server-domain]` if you set `smtp-server-addr-prefix`). - -So if you used `example.com` as the SMTP server domain, and you want to send a message to the `email-alerts` -topic, set the "To" address to `email-alerts@example.com`. If the topic has access restrictions, you will need -to include an access token in the "To" address, such as `email-alerts+tk_AbC123dEf456@example.com`. - -If the internal service lets you use define an email "Subject", it will become the title of the notification. -The body of the email will become the message of the notification. - ## Behind a proxy (TLS, etc.) !!! warning If you are running ntfy behind a proxy, you must set the `behind-proxy` flag. Otherwise, all visitors are @@ -1180,10 +1155,10 @@ and [here](https://easyengine.io/tutorials/nginx/block-wp-login-php-bruteforce-a ## Health checks A preliminary health check API endpoint is exposed at `/v1/health`. The endpoint returns a `json` response in the format shown below. -If a non-200 HTTP status code is returned or if the returned `healthy` field is `false` the ntfy service should be considered as unhealthy. +If a non-200 HTTP status code is returned or if the returned `health` field is `false` the ntfy service should be considered as unhealthy. ```json -{"healthy":true} +{"health":true} ``` See [Installation for Docker](install.md#docker) for an example of how this could be used in a `docker-compose` environment. diff --git a/docs/develop.md b/docs/develop.md index b090c8c5..05b55773 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -429,7 +429,7 @@ steps: ### XCode setup -1. Follow step 4 of [Add Firebase to your Apple project](https://firebase.google.com/docs/ios/setup) to install the +1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the `firebase-ios-sdk` in XCode, if it's not already present - you can select any packages in addition to Firebase Core / Firebase Messaging 1. Similarly, install the SQLite.swift package dependency in XCode 1. When running the debug build, ensure XCode is pointed to the connected iOS device - registering for push notifications does not work in the iOS simulators diff --git a/docs/emojis.md b/docs/emojis.md index d801ae09..fa01bb47 100644 --- a/docs/emojis.md +++ b/docs/emojis.md @@ -2,9 +2,9 @@ -You can [tag messages](publish.md#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically +You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the -[tagging and emojis page](publish.md#tags-emojis). +[tagging and emojis page](../publish/#tags-emojis). diff --git a/docs/examples.md b/docs/examples.md index 4e936d91..8164e2bf 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -135,21 +135,6 @@ You can send a message during a workflow run with curl. Here is an example sendi ${{ secrets.NTFY_URL }} ``` -## Changedetection.io -ntfy is an excellent choice for getting notifications when a website has a change sent to your mobile (or desktop), -[changedetection.io](https://changedetection.io) or on GitHub ([dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io)) -uses [apprise](https://github.com/caronc/apprise) library for notification integrations. - -To add any ntfy(s) notification to a website change simply add the [ntfy style URL](https://github.com/caronc/apprise/wiki/Notify_ntfy) -to the notification list. - -For example `ntfy://{topic}` or `ntfy://{user}:{password}@{host}:{port}/{topics}` - -In your changedetection.io installation, click `Edit` > `Notifications` on a single website watch (or group) then add -the special ntfy Apprise Notification URL to the Notification List. - -![ntfy alerts on website change](static/img/cdio-setup.jpg) - ## Watchtower (shoutrrr) You can use [shoutrrr](https://containrrr.dev/shoutrrr/latest/services/ntfy/) to send [Watchtower](https://github.com/containrrr/watchtower/) notifications to your ntfy topic. diff --git a/docs/faq.md b/docs/faq.md index 6ff97cfe..8844566f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -76,18 +76,6 @@ However, if you still want to disable it, you can do so with the `web-root: disa Think of the ntfy web app like an Android/iOS app. It is freely available and accessible to anyone, yet useless without a proper backend. So as long as you secure your backend with ACLs, exposing the ntfy web app to the Internet is harmless. -## If topic names are public, could I not just brute force them? -If you don't have [ACLs set up](config.md#access-control), the topic name is your password, it says so everywhere. If you -choose a easy-to-guess/dumb topic name, people will be able to guess it. If you choose a randomly generated topic name, -the topic is as good as a good password. - -As for brute forcing: It's not possible to brute force a ntfy server for very long, as you'll get quickly rate limited. -In the default configuration, you'll be able to do 60 requests as a burst, and then 1 request per 10 seconds. Assuming you -choose a random 10 digit topic name using only A-Z, a-z, 0-9, _ and -, there are 64^10 possible topic names. Even if you -could do hundreds of requests per seconds (which you cannot), it would take many years to brute force a topic name. - -For ntfy.sh, there's even a fail2ban in place which will ban your IP pretty quickly. - ## Where can I donate? I have just very recently started accepting donations via [GitHub Sponsors](https://github.com/sponsors/binwiederhier). I would be humbled if you helped me carry the server and developer account costs. Even small donations are very much diff --git a/docs/install.md b/docs/install.md index c1a621d7..bc5b7a0d 100644 --- a/docs/install.md +++ b/docs/install.md @@ -14,15 +14,14 @@ We support amd64, armv7 and arm64. 1. Install ntfy using one of the methods described below 2. Then (optionally) edit `/etc/ntfy/server.yml` for the server (Linux only, see [configuration](config.md) or [sample server.yml](https://github.com/binwiederhier/ntfy/blob/main/server/server.yml)) -3. Or (optionally) create/edit `~/.config/ntfy/client.yml` (for the non-root user), `~/Library/Application Support/ntfy/client.yml` (for the macOS non-root user), or `/etc/ntfy/client.yml` (for the root user), see [sample client.yml](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml)) +3. Or (optionally) create/edit `~/.config/ntfy/client.yml` (for the non-root user) or `/etc/ntfy/client.yml` (for the root user), see [sample client.yml](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml)) To run the ntfy server, then just run `ntfy serve` (or `systemctl start ntfy` when using the deb/rpm). To send messages, use `ntfy publish`. To subscribe to topics, use `ntfy subscribe` (see [subscribing via CLI](subscribe/cli.md) for details). -If you like tutorials, check out :simple-youtube: [Kris Occhipinti's ntfy install guide](https://www.youtube.com/watch?v=bZzqrX05mNU) on YouTube, or -[Alex's Docker-based setup guide](https://blog.alexsguardian.net/posts/2023/09/12/selfhosting-ntfy/). Both are great -resources to get started. _I am not affiliated with Kris or Alex, I just liked their video/post._ +If you like video tutorials, check out :simple-youtube: [Kris Occhipinti's ntfy install guide](https://www.youtube.com/watch?v=bZzqrX05mNU). +It's short and to the point. _I am not affiliated with Kris, I just liked the video._ ## Linux binaries Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and diff --git a/docs/integrations.md b/docs/integrations.md index a8ffa6a9..57ae2c10 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -23,8 +23,6 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [Platypush](https://docs.platypush.tech/platypush/plugins/ntfy.html) - Automation platform aimed to run on any device that can run Python - [diun](https://crazymax.dev/diun/) - Docker Image Update Notifier - [Cloudron](https://www.cloudron.io/store/sh.ntfy.cloudronapp.html) - Platform that makes it easy to manage web apps on your server -- [Xitoring](https://xitoring.com/docs/notifications/notification-roles/ntfy/) - Server and Uptime monitoring -- [changedetection.io](https://changedetection.io) ⭐ - Website change detection and notification ## Integration via HTTP/SMTP/etc. @@ -58,8 +56,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [ntfy](https://github.com/ffflorian/ntfy) - Send notifications over ntfy (JS) - [ntfy_dart](https://github.com/jr1221/ntfy_dart) - Dart wrapper around the ntfy API (Dart) - [gotfy](https://github.com/AnthonyHewins/gotfy) - A Go wrapper for the ntfy API (Go) -- [symfony/ntfy-notifier](https://symfony.com/components/NtfyNotifier) ⭐ - Symfony Notifier integration for ntfy (PHP) -- [ntfy-java](https://github.com/MaheshBabu11/ntfy-java/) - A Java package to interact with a ntfy server (Java) +- [symfony/ntfy-notifier](https://symfony.com/components/NtfyNotifier) ⭐ - Symfony Notifier integration for ntfy (PHP) ## CLIs + GUIs @@ -130,31 +127,10 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [msgdrop](https://github.com/jbrubake/msgdrop) - Send and receive encrypted messages (Bash) - [vigilant](https://github.com/VerifiedJoseph/vigilant) - Monitor RSS/ATOM and JSON feeds, and send push notifications on new entries (PHP) - [ansible-role-ntfy-alertmanager](https://github.com/bleetube/ansible-role-ntfy-alertmanager) - Ansible role to install xenrox/ntfy-alertmanager -- [NtfyMe-Blender](https://github.com/NotNanook/NtfyMe-Blender) - Blender addon to send notifications to NtfyMe (Python) -- [ntfy-ios-url-share](https://www.icloud.com/shortcuts/be8a7f49530c45f79733cfe3e41887e6) - An iOS shortcut that lets you share URLs easily and quickly. -- [ntfy-ios-filesharing](https://www.icloud.com/shortcuts/fe948d151b2e4ae08fb2f9d6b27d680b) - An iOS shortcut that lets you share files from your share feed to a topic of your choice. -- [systemd-ntfy](https://hackage.haskell.org/package/systemd-ntfy) - monitor a set of systemd services an send a notification to ntfy.sh whenever their status changes -- [RouterOS Scripts](https://git.eworm.de/cgit/routeros-scripts/about/) - a collection of scripts for MikroTik RouterOS -- [ntfy-android-builder](https://github.com/TheBlusky/ntfy-android-builder) - Script for building ntfy-android with custom Firebase configuration (Docker/Shell) ## Blog + forum posts -- [Installing Self Host NTFY On Linux Using Docker Container](https://www.pinoylinux.org/topicsplus/containers/installing-self-host-ntfy-on-linux-using-docker-container/) - pinoylinux.org - 9/2023 -- [Homelab Notifications with ntfy](https://blog.alexsguardian.net/posts/2023/09/12/selfhosting-ntfy/) ⭐ - alexsguardian.net - 9/2023 -- [Why NTFY is the Ultimate Push Notification Tool for Your Needs](https://osintph.medium.com/why-ntfy-is-the-ultimate-push-notification-tool-for-your-needs-e767421c84c5) - osintph.medium.com - 9/2023 -- [Supercharge Your Alerts: Ntfy — The Ultimate Push Notification Solution](https://medium.com/spring-boot/supercharge-your-alerts-ntfy-the-ultimate-push-notification-solution-a3dda79651fe) - spring-boot.medium.com - 9/2023 -- [Deploy Ntfy using Docker](https://www.linkedin.com/pulse/deploy-ntfy-mohamed-sharfy/) - linkedin.com - 9/2023 -- [Send Notifications With Ntfy for New WordPress Posts](https://www.activepieces.com/blog/ntfy-notifications-for-wordpress-new-posts) - activepieces.com - 9/2023 -- [Get Ntfy Notifications About New Zendesk Ticket](https://www.activepieces.com/blog/ntfy-notifications-about-new-zendesk-tickets) - activepieces.com - 9/2023 -- [Set reminder for recurring events using ntfy & Cron](https://www.youtube.com/watch?v=J3O4aQ-EcYk) - youtube.com - 9/2023 -- [ntfy - Installation and full configuration setup](https://www.youtube.com/watch?v=QMy14rGmpFI) - youtube.com - 9/2023 -- [How to install Ntfy.sh on Portainer / Docker Compose](https://www.youtube.com/watch?v=utD9GNbAwyg) - youtube.com - 9/2023 -- [ntfy - Push-Benachrichtigungen // Push Notifications](https://www.youtube.com/watch?v=LE3vRPPqZOU) - youtube.com - 9/2023 -- [Podman Update Notifications via Ntfy](https://rair.dev/podman-upadte-notifications-ntfy/) - rair.dev - 9/2023 -- [NetworkChunk - how did I NOT know about this?](https://www.youtube.com/watch?v=poDIT2ruQ9M) ⭐ - youtube.com - 8/2023 -- [NTFY - Command-Line Notifications](https://academy.networkchuck.com/blog/ntfy/) - academy.networkchuck.com - 8/2023 -- [Open Source Push Notifications! Get notified of any event you can imagine. Triggers abound!](https://www.youtube.com/watch?v=WJgwWXt79pE) ⭐ - youtube.com - 8/2023 -- [How to install and self host an Ntfy server on Linux](https://linuxconfig.org/how-to-install-and-self-host-an-ntfy-server-on-linux) - linuxconfig.org - 7/2023 +- [How to install and self host an Ntfy server on Linux](https://linuxconfig.org/how-to-install-and-self-host-an-ntfy-server-on-linux) - linuxconfig.org - 9/2021 - [Basic website monitoring using cronjobs and ntfy.sh](https://burkhardt.dev/2023/website-monitoring-cron-ntfy/) - burkhardt.dev - 6/2023 - [Pingdom alternative in one line of curl through ntfy.sh](https://piqoni.bearblog.dev/uptime-monitoring-in-one-line-of-curl/) - bearblog.dev - 6/2023 - [#OpenSourceDiscovery 78: ntfy.sh](https://opensourcedisc.substack.com/p/opensourcediscovery-78-ntfysh) - opensourcedisc.substack.com - 6/2023 @@ -238,7 +214,6 @@ ntfy community. Thanks to everyone running a public server. **You guys rock!** | [ntfy.envs.net](https://ntfy.envs.net) | 🇩🇪 Germany | | [ntfy.mzte.de](https://ntfy.mzte.de/) | 🇩🇪 Germany | | [ntfy.hostux.net](https://ntfy.hostux.net/) | 🇫🇷 France | -| [ntfy.fossman.de](https://ntfy.fossman.de/) | 🇩🇪 Germany | Please be aware that **server operators can log your messages**. The project also cannot guarantee the reliability and uptime of third party servers, so use of each server is **at your own discretion**. diff --git a/docs/known-issues.md b/docs/known-issues.md index cdb95bb6..401d82a1 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -27,12 +27,11 @@ Be sure that in your selfhosted server: * Set `upstream-base-url: "https://ntfy.sh"` (**not your own hostname!**) * Ensure that the URL you set in `base-url` **matches exactly** what you set the Default Server in iOS to -## iOS app seeing "New message", but not real message content -If you see `New message` notifications on iOS, your iPhone can likely not talk to your self-hosted server. Be sure that -your iOS device and your ntfy server are either on the same network, or that your phone can actually reach the server. - -Turn on tracing/debugging on the server (via `log-level: trace` or `log-level: debug`, see [troubleshooting](troubleshooting.md)), -and read docs on [iOS instant notifications](https://docs.ntfy.sh/config/#ios-instant-notifications). +## Firefox on Android not automatically subscribing to web push (see [#789](https://github.com/binwiederhier/ntfy/issues/789)) +ntfy defaults to web-push based subscriptions when installed as a [progressive web app](./subscribe/pwa.md). Firefox +Android has an [open bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1796434) where it reports the PWA mode incorrectly. +This causes ntfy to not automatically subscribe to web push, and requires you to go to the ntfy Settings page to enable +it manually. ## Safari does not play sounds for web push notifications Safari does not support playing sounds for web push notifications, and treats them all as silent. This will be fixed with diff --git a/docs/publish.md b/docs/publish.md index 41370778..2de0ff73 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -457,7 +457,6 @@ You can set the priority with the header `X-Priority` (or any of its aliases: `P === "PowerShell" ``` powershell $Request = @{ - Method = 'POST' URI = "https://ntfy.sh/phil_alerts" Headers = @{ Priority = "5" @@ -1034,7 +1033,7 @@ is the only required one: $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = ConvertTo-JSON @{ + Body = @{ Topic = "mytopic" Title = "Low disk space alert" Message = "Disk space is low at 5.1 GB" @@ -1043,7 +1042,7 @@ is the only required one: FileName = "diskspace.jpg" Tags = @("warning", "cd") Click = "https://homecamera.lan/xasds1h2xsSsa/" - Actions = @( + Actions = ConvertTo-JSON @( @{ Action = "view" Label = "Admin panel" @@ -1131,7 +1130,7 @@ As of today, the following actions are supported: when the action button is tapped (only supported on Android) * [`http`](#send-http-request): Sends HTTP POST/GET/PUT request when the action button is tapped -Here's an example of what a notification with actions can look like: +Here's an example of what that a notification with actions can look like:
![notification with actions](static/img/android-screenshot-notification-actions.png){ width=500 } @@ -1920,10 +1919,10 @@ And the same example using [JSON publishing](#publish-as-json): $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = ConvertTo-Json -Depth 3 @{ + Body = @{ Topic = "wifey" Message = "Your wife requested you send a picture of yourself." - Actions = @( + Actions = ConvertTo-Json -Depth 3 @( @{ Action = "broadcast" Label = "Take picture" @@ -2073,7 +2072,7 @@ Here's an example using the [`X-Actions` header](#using-a-header): 'method' => 'POST', 'header' => "Content-Type: text/plain\r\n" . - 'Actions: http, Close door, https://api.mygarage.lan/, method=PUT, headers.Authorization=Bearer zAzsx1sk.., body={\"action\": \"close\"}', + "Actions: http, Close door, https://api.mygarage.lan/, method=PUT, headers.Authorization=Bearer zAzsx1sk.., body={\"action\": \"close\"}", 'content' => 'Garage door has been open for 15 minutes. Close it?' ] ])); @@ -2200,10 +2199,10 @@ And the same example using [JSON publishing](#publish-as-json): $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = ConvertTo-Json -Depth 3 @{ + Body = @{ Topic = "myhome" Message = "Garage door has been open for 15 minutes. Close it?" - Actions = @( + Actions = ConvertTo-Json -Depth 3 @( @{ Action = "http" Label = "Close door" @@ -2288,7 +2287,7 @@ You can define which URL to open when a notification is clicked. This may be use to a Zabbix alert or a transaction that you'd like to provide the deep-link for. Tapping the notification will open the web browser (or the app) and open the website. -To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its alias `Click`). +To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its aliase `Click`). If you pass a website URL (`http://` or `https://`) the web browser will open. If you pass another URI that can be handled by another app, the responsible app may open. diff --git a/docs/releases.md b/docs/releases.md index 73e5eb20..70682131 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -110,7 +110,7 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. ## ntfy server v2.4.0 Released Apr 26, 2023 -This release adds a tiny `v1/stats` endpoint to expose how many messages have been published, and adds support to encode the `X-Title`, +This release adds a tiny `v1/stats` endpoint to expose how many messages have been published, and adds suport to encode the `X-Title`, `X-Message` and `X-Tags` header as RFC 2047. It's a pretty small release, and mainly enables the release of the new ntfy.sh website. ❤️ If you like ntfy, **please consider sponsoring me** via [GitHub Sponsors](https://github.com/sponsors/binwiederhier) @@ -1273,7 +1273,7 @@ Released Dec 28, 2021 **Features & bug fixes:** -* [Publish messages via e-mail](publish.md#e-mail-publishing) #66 +* [Publish messages via e-mail](ntfy.sh/docs/publish/#e-mail-publishing) #66 * Server-side work to support [unifiedpush.org](https://unifiedpush.org) #64 * Fixing the Santa bug #65 @@ -1288,10 +1288,6 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes + maintenance:** * Fix ACL issue with topic patterns containing underscores ([#840](https://github.com/binwiederhier/ntfy/issues/840), thanks to [@Joe-0237](https://github.com/Joe-0237) for reporting) -* Re-add `tzdata` to Docker images for amd64 image ([#894](https://github.com/binwiederhier/ntfy/issues/894), [#307](https://github.com/binwiederhier/ntfy/pull/307)) -* Add special logic to ignore `Priority` header if it resembled a RFC 9218 value ([#851](https://github.com/binwiederhier/ntfy/pull/851)/[#895](https://github.com/binwiederhier/ntfy/pull/895), thanks to [@gusdleon](https://github.com/gusdleon), see also [#351](https://github.com/binwiederhier/ntfy/issues/351), [#353](https://github.com/binwiederhier/ntfy/issues/353), [#461](https://github.com/binwiederhier/ntfy/issues/461)) -* PWA: hide install prompt on macOS 14 Safari ([#899](https://github.com/binwiederhier/ntfy/pull/899), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) -* Fix web app crash in Edge for languages with underline in locale ([#922](https://github.com/binwiederhier/ntfy/pull/922)/[#912](https://github.com/binwiederhier/ntfy/issues/912)/[#852](https://github.com/binwiederhier/ntfy/issues/852), thanks to [@imkero](https://github.com/imkero)) ### ntfy Android app v1.16.1 (UNRELEASED) diff --git a/docs/static/img/cdio-setup.jpg b/docs/static/img/cdio-setup.jpg deleted file mode 100644 index 2f9e44cb..00000000 Binary files a/docs/static/img/cdio-setup.jpg and /dev/null differ diff --git a/docs/static/img/pwa-install-macos-safari-add-to-dock.png b/docs/static/img/pwa-install-macos-safari-add-to-dock.png deleted file mode 100644 index 8a780605..00000000 Binary files a/docs/static/img/pwa-install-macos-safari-add-to-dock.png and /dev/null differ diff --git a/docs/subscribe/cli.md b/docs/subscribe/cli.md index 7f589d3c..59cfc8e7 100644 --- a/docs/subscribe/cli.md +++ b/docs/subscribe/cli.md @@ -10,7 +10,7 @@ to topics via the ntfy CLI. The CLI is included in the same `ntfy` binary that c ## Install + configure To install the ntfy CLI, simply **follow the steps outlined on the [install page](../install.md)**. The ntfy server and client are the same binary, so it's all very convenient. After installing, you can (optionally) configure the client -by creating `~/.config/ntfy/client.yml` (for the non-root user), `~/Library/Application Support/ntfy/client.yml` (for the macOS non-root user), or `/etc/ntfy/client.yml` (for the root user). You +by creating `~/.config/ntfy/client.yml` (for the non-root user), or `/etc/ntfy/client.yml` (for the root user). You can find a [skeleton config](https://github.com/binwiederhier/ntfy/blob/main/client/client.yml) on GitHub. If you just want to use [ntfy.sh](https://ntfy.sh), you don't have to change anything. If you **self-host your own server**, diff --git a/docs/subscribe/pwa.md b/docs/subscribe/pwa.md index 5dcaa257..582cb5ae 100644 --- a/docs/subscribe/pwa.md +++ b/docs/subscribe/pwa.md @@ -26,13 +26,6 @@ app drawer: -### Safari on macOS -To install and register the web app via Safari, click on the Share menu and click Add to Dock. You need to be on macOS Sonoma (14) or higher. - -
- -
- ### Chrome/Firefox on Android For Chrome on Android, either click the "Add to Home Screen" banner at the bottom of the screen, or select "Install app" in the menu, and then click "Install" in the popup menu. After installation, you can find the app in your app drawer, diff --git a/go.mod b/go.mod index a7395d5b..1560c61d 100644 --- a/go.mod +++ b/go.mod @@ -1,25 +1,25 @@ -module git.zio.sh/astra/ntfy/v2 +module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.14.0 // indirect - cloud.google.com/go/storage v1.34.1 // indirect + cloud.google.com/go/firestore v1.12.0 // indirect + cloud.google.com/go/storage v1.32.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.18.0 - github.com/gabriel-vasile/mimetype v1.4.3 - github.com/gorilla/websocket v1.5.1 - github.com/mattn/go-sqlite3 v1.14.18 + github.com/gabriel-vasile/mimetype v1.4.2 + github.com/gorilla/websocket v1.5.0 + github.com/mattn/go-sqlite3 v1.14.17 github.com/olebedev/when v1.0.0 github.com/stretchr/testify v1.8.1 github.com/urfave/cli/v2 v2.25.7 - golang.org/x/crypto v0.14.0 - golang.org/x/oauth2 v0.13.0 // indirect - golang.org/x/sync v0.5.0 - golang.org/x/term v0.13.0 - golang.org/x/time v0.4.0 - google.golang.org/api v0.149.0 + golang.org/x/crypto v0.12.0 + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sync v0.3.0 + golang.org/x/term v0.11.0 + golang.org/x/time v0.3.0 + google.golang.org/api v0.138.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -28,18 +28,18 @@ replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pi require github.com/pkg/errors v0.9.1 // indirect require ( - firebase.google.com/go/v4 v4.12.1 - github.com/SherClockHolmes/webpush-go v1.3.0 - github.com/prometheus/client_golang v1.17.0 + firebase.google.com/go/v4 v4.12.0 + github.com/SherClockHolmes/webpush-go v1.2.0 + github.com/prometheus/client_golang v1.16.0 github.com/stripe/stripe-go/v74 v74.30.0 ) require ( - cloud.google.com/go v0.110.10 // indirect - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/longrunning v0.5.4 // indirect + cloud.google.com/go/iam v1.1.2 // indirect + cloud.google.com/go/longrunning v0.5.1 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -50,30 +50,31 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.4.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/s2a-go v0.1.5 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/kr/text v0.2.0 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/appengine/v2 v2.0.5 // indirect - google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/grpc v1.59.0 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/appengine/v2 v2.0.4 // indirect + google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230815205213-6bfd019c3878 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 // indirect + google.golang.org/grpc v1.57.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d93f52d2..c6761a56 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,21 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/firestore v1.14.0 h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw= -cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg= -cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= -cloud.google.com/go/storage v1.34.1 h1:H2Af2dU5J0PF7A5B+ECFIce+RqxVnrVilO+cu0TS3MI= -cloud.google.com/go/storage v1.34.1/go.mod h1:VN1ElqqvR9adg1k9xlkUJ55cMOP1/QjnNNuT5xQL6dY= -firebase.google.com/go/v4 v4.12.1 h1:tDNvobifGsx/1HSFLnM0fmNfx/CDZSgsTO2KhZtgpcs= -firebase.google.com/go/v4 v4.12.1/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= +cloud.google.com/go/firestore v1.12.0 h1:aeEA/N7DW7+l2u5jtkO8I0qv0D95YwjggD8kUHrTHO4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/storage v1.32.0 h1:5w6DxEGOnktmJHarxAOUywxVW9lbNWIzlzzUltG/3+o= +cloud.google.com/go/storage v1.32.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= +firebase.google.com/go/v4 v4.12.0 h1:I6dCkcWUMFNkFdWgzlf8SLWecQnKdFgJhMv5fT9l1qI= +firebase.google.com/go/v4 v4.12.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= github.com/AlekSi/pointer v1.2.0/go.mod h1:gZGfd3dpW4vEc/UlyfKKi1roIqcCgwOIvb0tSNSBle0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -22,17 +23,24 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID3+o= github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= -github.com/SherClockHolmes/webpush-go v1.3.0 h1:CAu3FvEE9QS4drc3iKNgpBWFfGqNthKlZhp5QpYnu6k= -github.com/SherClockHolmes/webpush-go v1.3.0/go.mod h1:AxRHmJuYwKGG1PVgYzToik1lphQvDnqFYDqimHvwhIw= +github.com/SherClockHolmes/webpush-go v1.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA= +github.com/SherClockHolmes/webpush-go v1.2.0/go.mod h1:w6X47YApe/B9wUz2Wh8xukxlyupaxSSEbu6yKJcHN2w= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -45,9 +53,12 @@ github.com/emersion/go-smtp v0.17.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVR github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -59,13 +70,16 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -78,41 +92,44 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.5 h1:8IYp3w9nysqv3JH+NJgXJzGbDHzLOTj43BmSkp+O7qg= +github.com/google/s2a-go v0.1.5/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM= +github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI= -github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/olebedev/when v1.0.0 h1:T2DZCj8HxUhOVxcqaLOmzuTr+iZLtMHsZEim7mjIA2w= github.com/olebedev/when v1.0.0/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -120,6 +137,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -134,72 +152,72 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsr github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= -golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= -golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -207,35 +225,39 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= -google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.138.0 h1:K/tVp05MxNVbHShRw9m7e9VJGdagNeTdMzqPH7AUqr0= +google.golang.org/api v0.138.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/appengine/v2 v2.0.5 h1:4C+F3Cd3L2nWEfSmFEZDPjQvDwL8T0YCeZBysZifP3k= -google.golang.org/appengine/v2 v2.0.5/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine/v2 v2.0.4 h1:aAAPYixP9EfTJjNO6F46afaxp+jfzb0VgwVjMeLBtF4= +google.golang.org/appengine/v2 v2.0.4/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U= -google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4= -google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405 h1:HJMDndgxest5n2y77fnErkM62iUsptE/H8p0dC2Huo4= -google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878 h1:Iveh6tGCJkHAjJgEqUQYGDGgbwmhjoAOz8kO/ajxefY= +google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230815205213-6bfd019c3878 h1:WGq4lvB/mlicysM/dUT3SBvijH4D3sm/Ny1A4wmt2CI= +google.golang.org/genproto/googleapis/api v0.0.0-20230815205213-6bfd019c3878/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878 h1:lv6/DhyiFFGsmzxbsUUTOkN29II+zeWHxvT8Lpdxsv0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230815205213-6bfd019c3878/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -252,6 +274,8 @@ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/log/event.go b/log/event.go index c4521674..b4b8f59f 100644 --- a/log/event.go +++ b/log/event.go @@ -3,7 +3,7 @@ package log import ( "encoding/json" "fmt" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "log" "os" "sort" diff --git a/main.go b/main.go index 6aea6fa2..5b1428d1 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,8 @@ package main import ( "fmt" - "git.zio.sh/astra/ntfy/v2/cmd" "github.com/urfave/cli/v2" + "heckel.io/ntfy/cmd" "os" "runtime" ) diff --git a/scripts/emoji-convert.sh b/scripts/emoji-convert.sh index 8cbe397b..61ad5f79 100755 --- a/scripts/emoji-convert.sh +++ b/scripts/emoji-convert.sh @@ -25,9 +25,9 @@ elif [[ "$1" == *.md ]]; then -You can [tag messages](publish.md#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically +You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically converted to emojis. This is a reference of all supported emojis. To learn more about the feature, please refer to the -[tagging and emojis page](publish.md#tags-emojis). +[tagging and emojis page](../publish/#tags-emojis).
" > "$1" diff --git a/server/actions.go b/server/actions.go index ce61395c..80065873 100644 --- a/server/actions.go +++ b/server/actions.go @@ -4,7 +4,7 @@ import ( "encoding/json" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "regexp" "strings" "unicode/utf8" diff --git a/server/config.go b/server/config.go index c7b09082..9815aa88 100644 --- a/server/config.go +++ b/server/config.go @@ -5,7 +5,7 @@ import ( "net/netip" "time" - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/user" ) // Defines default config settings (excluding limits, see below) diff --git a/server/config_test.go b/server/config_test.go index 23fbadf1..14f028f1 100644 --- a/server/config_test.go +++ b/server/config_test.go @@ -1,8 +1,8 @@ package server_test import ( - "git.zio.sh/astra/ntfy/v2/server" "github.com/stretchr/testify/assert" + "heckel.io/ntfy/server" "testing" ) diff --git a/server/errors.go b/server/errors.go index f3d0d6b1..27ba3df0 100644 --- a/server/errors.go +++ b/server/errors.go @@ -3,7 +3,7 @@ package server import ( "encoding/json" "fmt" - "git.zio.sh/astra/ntfy/v2/log" + "heckel.io/ntfy/log" "net/http" ) diff --git a/server/file_cache.go b/server/file_cache.go index 499cca16..c097aefb 100644 --- a/server/file_cache.go +++ b/server/file_cache.go @@ -3,8 +3,8 @@ package server import ( "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "io" "os" "path/filepath" diff --git a/server/file_cache_test.go b/server/file_cache_test.go index cdb534be..8f267a73 100644 --- a/server/file_cache_test.go +++ b/server/file_cache_test.go @@ -3,8 +3,8 @@ package server import ( "bytes" "fmt" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/util" "os" "strings" "testing" diff --git a/server/log.go b/server/log.go index 23fdf5d5..978d0593 100644 --- a/server/log.go +++ b/server/log.go @@ -2,10 +2,10 @@ package server import ( "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" "github.com/emersion/go-smtp" "github.com/gorilla/websocket" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "net/http" "strings" "unicode/utf8" diff --git a/server/message_cache.go b/server/message_cache.go index fafd6d9b..8a613ff1 100644 --- a/server/message_cache.go +++ b/server/message_cache.go @@ -9,9 +9,9 @@ import ( "strings" "time" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" _ "github.com/mattn/go-sqlite3" // SQLite driver + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" ) var ( diff --git a/server/server.go b/server/server.go index 8610f443..0ab36524 100644 --- a/server/server.go +++ b/server/server.go @@ -26,13 +26,13 @@ import ( "time" "unicode/utf8" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/emersion/go-smtp" "github.com/gorilla/websocket" "github.com/prometheus/client_golang/prometheus/promhttp" "golang.org/x/sync/errgroup" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" ) // Server is the main server, providing the UI and API for ntfy diff --git a/server/server_account.go b/server/server_account.go index 32b6153f..f26cc2ff 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -2,9 +2,9 @@ package server import ( "encoding/json" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "net/http" "net/netip" "strings" diff --git a/server/server_account_test.go b/server/server_account_test.go index fd51ac27..119efb16 100644 --- a/server/server_account_test.go +++ b/server/server_account_test.go @@ -2,10 +2,10 @@ package server import ( "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/netip" "path/filepath" diff --git a/server/server_admin.go b/server/server_admin.go index 5bfd1547..9380a5ff 100644 --- a/server/server_admin.go +++ b/server/server_admin.go @@ -1,7 +1,7 @@ package server import ( - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/user" "net/http" ) diff --git a/server/server_admin_test.go b/server/server_admin_test.go index a2a6f432..1513ea40 100644 --- a/server/server_admin_test.go +++ b/server/server_admin_test.go @@ -1,9 +1,9 @@ package server import ( - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "sync/atomic" "testing" "time" diff --git a/server/server_firebase.go b/server/server_firebase.go index eb1db971..b8158d2f 100644 --- a/server/server_firebase.go +++ b/server/server_firebase.go @@ -7,9 +7,9 @@ import ( firebase "firebase.google.com/go/v4" "firebase.google.com/go/v4/messaging" "fmt" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "google.golang.org/api/option" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "strings" ) diff --git a/server/server_firebase_test.go b/server/server_firebase_test.go index ca1147e3..fb27ea05 100644 --- a/server/server_firebase_test.go +++ b/server/server_firebase_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/user" "net/netip" "strings" "sync" diff --git a/server/server_manager.go b/server/server_manager.go index 7a562a94..66d449de 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -1,8 +1,8 @@ package server import ( - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "strings" ) diff --git a/server/server_matrix.go b/server/server_matrix.go index bf43a13f..c25a1b59 100644 --- a/server/server_matrix.go +++ b/server/server_matrix.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" "fmt" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "io" "net/http" "strings" diff --git a/server/server_middleware.go b/server/server_middleware.go index 5d842b98..b1428154 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -3,7 +3,7 @@ package server import ( "net/http" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" ) type contextKey int diff --git a/server/server_payments.go b/server/server_payments.go index a4b51a11..1e98d059 100644 --- a/server/server_payments.go +++ b/server/server_payments.go @@ -4,9 +4,6 @@ import ( "bytes" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stripe/stripe-go/v74" portalsession "github.com/stripe/stripe-go/v74/billingportal/session" "github.com/stripe/stripe-go/v74/checkout/session" @@ -14,6 +11,9 @@ import ( "github.com/stripe/stripe-go/v74/price" "github.com/stripe/stripe-go/v74/subscription" "github.com/stripe/stripe-go/v74/webhook" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/netip" diff --git a/server/server_payments_test.go b/server/server_payments_test.go index 29a1b13d..ebd559e7 100644 --- a/server/server_payments_test.go +++ b/server/server_payments_test.go @@ -2,12 +2,12 @@ package server import ( "encoding/json" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "github.com/stripe/stripe-go/v74" "golang.org/x/time/rate" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/netip" "path/filepath" diff --git a/server/server_test.go b/server/server_test.go index 85fdc211..647268fb 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -6,8 +6,8 @@ import ( "encoding/base64" "encoding/json" "fmt" - "git.zio.sh/astra/ntfy/v2/user" "golang.org/x/crypto/bcrypt" + "heckel.io/ntfy/user" "io" "math/rand" "net/http" @@ -22,10 +22,10 @@ import ( "testing" "time" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" "github.com/SherClockHolmes/webpush-go" "github.com/stretchr/testify/require" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" ) func TestMain(m *testing.M) { @@ -329,27 +329,6 @@ func TestServer_PublishPriority(t *testing.T) { require.Equal(t, 40007, toHTTPError(t, response.Body.String()).Code) } -func TestServer_PublishPriority_SpecialHTTPHeader(t *testing.T) { - s := newTestServer(t, newTestConfig(t)) - - response := request(t, s, "POST", "/mytopic", "test", map[string]string{ - "Priority": "u=4", - "X-Priority": "5", - }) - require.Equal(t, 5, toMessage(t, response.Body.String()).Priority) - - response = request(t, s, "POST", "/mytopic?priority=4", "test", map[string]string{ - "Priority": "u=9", - }) - require.Equal(t, 4, toMessage(t, response.Body.String()).Priority) - - response = request(t, s, "POST", "/mytopic", "test", map[string]string{ - "p": "2", - "priority": "u=9, i", - }) - require.Equal(t, 2, toMessage(t, response.Body.String()).Priority) -} - func TestServer_PublishGETOnlyOneTopic(t *testing.T) { // This tests a bug that allowed publishing topics with a comma in the name (no ticket) @@ -512,8 +491,6 @@ func TestServer_PublishAtAndPrune(t *testing.T) { messages := toMessages(t, response.Body.String()) require.Equal(t, 1, len(messages)) // Not affected by pruning require.Equal(t, "a message", messages[0].Message) - - time.Sleep(time.Second) // FIXME CI failing not sure why } func TestServer_PublishAndMultiPoll(t *testing.T) { diff --git a/server/server_twilio.go b/server/server_twilio.go index 231436a3..093abe63 100644 --- a/server/server_twilio.go +++ b/server/server_twilio.go @@ -4,9 +4,9 @@ import ( "bytes" "encoding/xml" "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/url" diff --git a/server/server_twilio_test.go b/server/server_twilio_test.go index d6877527..af694a77 100644 --- a/server/server_twilio_test.go +++ b/server/server_twilio_test.go @@ -1,9 +1,9 @@ package server import ( - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/http/httptest" diff --git a/server/server_webpush.go b/server/server_webpush.go index a0e33af5..bb0f5408 100644 --- a/server/server_webpush.go +++ b/server/server_webpush.go @@ -7,9 +7,9 @@ import ( "regexp" "strings" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" "github.com/SherClockHolmes/webpush-go" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" ) const ( diff --git a/server/server_webpush_test.go b/server/server_webpush_test.go index 16e02cc8..c0db79c6 100644 --- a/server/server_webpush_test.go +++ b/server/server_webpush_test.go @@ -3,9 +3,9 @@ package server import ( "encoding/json" "fmt" - "git.zio.sh/astra/ntfy/v2/user" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/http/httptest" diff --git a/server/smtp_sender.go b/server/smtp_sender.go index 4c0d263e..9093687e 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -11,8 +11,8 @@ import ( "sync" "time" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" ) type mailer interface { diff --git a/server/topic.go b/server/topic.go index 3daac9a7..5dfafbe3 100644 --- a/server/topic.go +++ b/server/topic.go @@ -5,8 +5,8 @@ import ( "sync" "time" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" ) const ( diff --git a/server/types.go b/server/types.go index 5c423216..eeb566fc 100644 --- a/server/types.go +++ b/server/types.go @@ -5,10 +5,10 @@ import ( "net/netip" "time" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" ) // List of possible events diff --git a/server/util.go b/server/util.go index dea13ed5..03eb8661 100644 --- a/server/util.go +++ b/server/util.go @@ -3,19 +3,15 @@ package server import ( "context" "fmt" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "io" "mime" "net/http" "net/netip" - "regexp" "strings" ) -var ( - mimeDecoder mime.WordDecoder - priorityHeaderIgnoreRegex = regexp.MustCompile(`^u=\d,\s*(i|\d)$|^u=\d$`) -) +var mimeDecoder mime.WordDecoder func readBoolParam(r *http.Request, defaultValue bool, names ...string) bool { value := strings.ToLower(readParam(r, names...)) @@ -54,9 +50,9 @@ func readParam(r *http.Request, names ...string) string { func readHeaderParam(r *http.Request, names ...string) string { for _, name := range names { - value := strings.TrimSpace(maybeDecodeHeader(name, r.Header.Get(name))) + value := maybeDecodeHeader(r.Header.Get(name)) if value != "" { - return value + return strings.TrimSpace(value) } } return "" @@ -130,26 +126,10 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) { return t, nil } -// maybeDecodeHeader decodes the given header value if it is MIME encoded, e.g. "=?utf-8?q?Hello_World?=", -// or returns the original header value if it is not MIME encoded. It also calls maybeIgnoreSpecialHeader -// to ignore new HTTP "Priority" header. -func maybeDecodeHeader(name, value string) string { - decoded, err := mimeDecoder.DecodeHeader(value) +func maybeDecodeHeader(header string) string { + decoded, err := mimeDecoder.DecodeHeader(header) if err != nil { - return maybeIgnoreSpecialHeader(name, value) + return header } - return maybeIgnoreSpecialHeader(name, decoded) -} - -// maybeIgnoreSpecialHeader ignores new HTTP "Priority" header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority) -// -// Cloudflare (and potentially other providers) add this to requests when forwarding to the backend (ntfy), -// so we just ignore it. If the "Priority" header is set to "u=*, i" or "u=*" (by Cloudflare), the header will be ignored. -// Returning an empty string will allow the rest of the logic to continue searching for another header (x-priority, prio, p), -// or in the Query parameters. -func maybeIgnoreSpecialHeader(name, value string) string { - if strings.ToLower(name) == "priority" && priorityHeaderIgnoreRegex.MatchString(strings.TrimSpace(value)) { - return "" - } - return value + return decoded } diff --git a/server/util_test.go b/server/util_test.go index 6555a81b..3d062b4d 100644 --- a/server/util_test.go +++ b/server/util_test.go @@ -2,9 +2,9 @@ package server import ( "bytes" - "crypto/rand" "fmt" "github.com/stretchr/testify/require" + "math/rand" "net/http" "strings" "testing" @@ -75,16 +75,3 @@ Accept: */* (peeked bytes not UTF-8, peek limit of 4096 bytes reached, hex: ` + fmt.Sprintf("%x", body[:4096]) + ` ...)` require.Equal(t, expected, renderHTTPRequest(r)) } - -func TestMaybeIgnoreSpecialHeader(t *testing.T) { - require.Empty(t, maybeIgnoreSpecialHeader("priority", "u=1")) - require.Empty(t, maybeIgnoreSpecialHeader("Priority", "u=1")) - require.Empty(t, maybeIgnoreSpecialHeader("Priority", "u=1, i")) -} - -func TestMaybeDecodeHeaders(t *testing.T) { - r, _ := http.NewRequest("GET", "http://ntfy.sh/mytopic/json?since=all", nil) - r.Header.Set("Priority", "u=1") // Cloudflare priority header - r.Header.Set("X-Priority", "5") // ntfy priority header - require.Equal(t, "5", readHeaderParam(r, "x-priority", "priority", "p")) -} diff --git a/server/visitor.go b/server/visitor.go index d1ec1226..e4c06f66 100644 --- a/server/visitor.go +++ b/server/visitor.go @@ -2,14 +2,14 @@ package server import ( "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/user" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" "net/netip" "sync" "time" - "git.zio.sh/astra/ntfy/v2/util" "golang.org/x/time/rate" + "heckel.io/ntfy/util" ) const ( diff --git a/server/webpush_store.go b/server/webpush_store.go index 3781f250..b2ab0d11 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -3,7 +3,7 @@ package server import ( "database/sql" "errors" - "git.zio.sh/astra/ntfy/v2/util" + "heckel.io/ntfy/util" "net/netip" "time" diff --git a/test/server.go b/test/server.go index cabff94f..0b9200a6 100644 --- a/test/server.go +++ b/test/server.go @@ -2,7 +2,7 @@ package test import ( "fmt" - "git.zio.sh/astra/ntfy/v2/server" + "heckel.io/ntfy/server" "math/rand" "net/http" "path/filepath" diff --git a/user/manager.go b/user/manager.go index 0ff211cf..324b7684 100644 --- a/user/manager.go +++ b/user/manager.go @@ -6,11 +6,11 @@ import ( "encoding/json" "errors" "fmt" - "git.zio.sh/astra/ntfy/v2/log" - "git.zio.sh/astra/ntfy/v2/util" "github.com/mattn/go-sqlite3" "github.com/stripe/stripe-go/v74" "golang.org/x/crypto/bcrypt" + "heckel.io/ntfy/log" + "heckel.io/ntfy/util" "net/netip" "strings" "sync" diff --git a/user/manager_test.go b/user/manager_test.go index bebb0a07..468dc36a 100644 --- a/user/manager_test.go +++ b/user/manager_test.go @@ -3,10 +3,10 @@ package user import ( "database/sql" "fmt" - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" "github.com/stripe/stripe-go/v74" "golang.org/x/crypto/bcrypt" + "heckel.io/ntfy/util" "net/netip" "path/filepath" "strings" diff --git a/user/types.go b/user/types.go index 140da216..11895785 100644 --- a/user/types.go +++ b/user/types.go @@ -2,8 +2,8 @@ package user import ( "errors" - "git.zio.sh/astra/ntfy/v2/log" "github.com/stripe/stripe-go/v74" + "heckel.io/ntfy/log" "net/netip" "regexp" "strings" diff --git a/util/batching_queue_test.go b/util/batching_queue_test.go index 08d812ed..b3c41a4c 100644 --- a/util/batching_queue_test.go +++ b/util/batching_queue_test.go @@ -1,8 +1,8 @@ package util_test import ( - "git.zio.sh/astra/ntfy/v2/util" "github.com/stretchr/testify/require" + "heckel.io/ntfy/util" "math/rand" "sync" "testing" diff --git a/util/util.go b/util/util.go index d48487df..4a63e22f 100644 --- a/util/util.go +++ b/util/util.go @@ -161,6 +161,11 @@ func ParsePriority(priority string) (int, error) { case "5", "max", "urgent": return 5, nil default: + // Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority) + // Cloudflare adds this to requests when forwarding to the backend (ntfy), so we just ignore it. + if strings.HasPrefix(p, "u=") { + return 3, nil + } return 0, errInvalidPriority } } diff --git a/util/util_test.go b/util/util_test.go index f0f45c28..49a24126 100644 --- a/util/util_test.go +++ b/util/util_test.go @@ -87,6 +87,15 @@ func TestParsePriority_Invalid(t *testing.T) { } } +func TestParsePriority_HTTPSpecPriority(t *testing.T) { + priorities := []string{"u=1", "u=3", "u=7, i"} // see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority + for _, priority := range priorities { + actual, err := ParsePriority(priority) + require.Nil(t, err) + require.Equal(t, 3, actual) // Always expect 3! + } +} + func TestPriorityString(t *testing.T) { priorities := []int{0, 1, 2, 3, 4, 5} expected := []string{"default", "min", "low", "default", "high", "max"} diff --git a/web/index.html b/web/index.html index 191e8c40..462bbc1f 100644 --- a/web/index.html +++ b/web/index.html @@ -22,7 +22,7 @@ @@ -30,7 +30,7 @@ diff --git a/web/package-lock.json b/web/package-lock.json index 7e3fcfdb..735fc42b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -68,11 +68,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.22.10", "chalk": "^2.4.2" }, "engines": { @@ -80,34 +80,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", - "convert-source-map": "^2.0.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", + "json5": "^2.2.2", "semver": "^6.3.1" }, "engines": { @@ -118,19 +118,13 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -152,25 +146,25 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -180,15 +174,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -203,9 +197,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -220,9 +214,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -236,22 +230,22 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -270,39 +264,39 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -333,14 +327,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" }, "engines": { "node": ">=6.9.0" @@ -350,13 +344,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -411,56 +405,56 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -469,9 +463,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -481,9 +475,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -496,14 +490,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -775,14 +769,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/helper-remap-async-to-generator": "^7.22.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -825,9 +819,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -856,12 +850,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -873,18 +867,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -912,9 +906,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -958,9 +952,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -990,9 +984,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1006,9 +1000,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1038,9 +1032,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1069,9 +1063,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1100,12 +1094,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1116,12 +1110,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1133,15 +1127,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1198,9 +1192,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1214,9 +1208,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1230,16 +1224,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" + "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1265,9 +1259,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1281,9 +1275,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1298,9 +1292,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1329,13 +1323,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1562,17 +1556,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.2", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1593,41 +1587,41 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", + "@babel/plugin-transform-block-scoping": "^7.22.10", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", + "@babel/plugin-transform-destructuring": "^7.22.10", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", + "@babel/plugin-transform-dynamic-import": "^7.22.5", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", + "@babel/plugin-transform-json-strings": "^7.22.5", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -1641,10 +1635,10 @@ "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1676,9 +1670,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1687,33 +1681,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1722,12 +1716,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2245,18 +2239,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2277,9 +2271,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2304,55 +2298,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", - "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", - "dependencies": { - "@floating-ui/utils": "^0.1.3" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", - "dependencies": { - "@floating-ui/core": "^1.4.2", - "@floating-ui/utils": "^0.1.3" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz", - "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==", - "dependencies": { - "@floating-ui/dom": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -2374,9 +2334,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -2428,9 +2388,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2438,9 +2398,9 @@ } }, "node_modules/@mapbox/hast-util-table-cell-style": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.1.tgz", - "integrity": "sha512-LyQz4XJIdCdY/+temIhD/Ed0x/p4GAOUycpFSEK2Ads1CPKZy6b7V/2ROEtQiLLQ8soIs0xe/QAoR6kwpyW/yw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.0.tgz", + "integrity": "sha512-gqaTIGC8My3LVSnU38IwjHVKJC94HSonjvFHDk8/aSrApL8v4uWgm8zJkK7MJIIbHuNOr/+Mv2KkQKcxs6LEZA==", "dependencies": { "unist-util-visit": "^1.4.1" }, @@ -2449,17 +2409,18 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.22.tgz", - "integrity": "sha512-l4asGID5tmyerx9emJfXOKLyXzaBtdXNIFE3M+IrSZaFtGFvaQKHhc3+nxxSxPf1+G44psjczM0ekRQCdXx9HA==", + "version": "5.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.11.tgz", + "integrity": "sha512-FdKZGPd8qmC3ZNke7CNhzcEgToc02M6WYZc9hcBsNQ17bgAd3s9F//1bDDYgMVBYxDM71V0sv/hBHlOY4I1ZVA==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@floating-ui/react-dom": "^2.0.2", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.16", + "@babel/runtime": "^7.22.6", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.5", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", - "prop-types": "^15.8.1" + "prop-types": "^15.8.1", + "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" @@ -2480,20 +2441,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.16.tgz", - "integrity": "sha512-97isBjzH2v1K7oB4UH2f4NOkBShOynY6dhnoR2XlUk/g6bb7ZBv2I3D1hvvqPtpEigKu93e7f/jAYr5d9LOc5w==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.5.tgz", + "integrity": "sha512-+wpGH1USwPcKMFPMvXqYPC6fEvhxM3FzxC8lyDiNK/imLyyJ6y2DPb1Oue7OGIKJWBmYBqrWWtfovrxd1aJHTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.16.tgz", - "integrity": "sha512-wmOgslMEGvbHZjFLru8uH5E+pif/ciXAvKNw16q6joK6EWVWU5rDYWFknDaZhCvz8ZE/K8ZnJQ+lMG6GgHzXbg==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.3.tgz", + "integrity": "sha512-XkxWPhageu1OPUm2LWjo5XqeQ0t2xfGe8EiLkRW9oz2LHMMZmijvCxulhgquUVTF1DnoSh+3KoDLSsoAFtVNVw==", "dependencies": { - "@babel/runtime": "^7.23.2" + "@babel/runtime": "^7.22.6" }, "engines": { "node": ">=12.0.0" @@ -2514,17 +2475,17 @@ } }, "node_modules/@mui/material": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.16.tgz", - "integrity": "sha512-W4zZ4vnxgGk6/HqBwgsDHKU7x2l2NhX+r8gAwfg58Rhu3ikfY7NkIS6y8Gl3NkATc4GG1FNaGjjpQKfJx3U6Jw==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.5.tgz", + "integrity": "sha512-4qa4GMfuZH0Ai3mttk5ccXP8a3sf7aPlAJwyMrUSz6h9hPri6BPou94zeu3rENhhmKLby9S/W1y+pmficy8JKA==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "5.0.0-beta.22", - "@mui/core-downloads-tracker": "^5.14.16", - "@mui/system": "^5.14.16", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.16", - "@types/react-transition-group": "^4.4.8", + "@babel/runtime": "^7.22.6", + "@mui/base": "5.0.0-beta.11", + "@mui/core-downloads-tracker": "^5.14.5", + "@mui/system": "^5.14.5", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.5", + "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", @@ -2558,12 +2519,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.16.tgz", - "integrity": "sha512-FNlL0pTSEBh8nXsVWreCHDSHk+jG8cBx1sxRbT8JVtL+PYbYPi802zfV4B00Kkf0LNRVRvAVQwojMWSR/MYGng==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.5.tgz", + "integrity": "sha512-cC4C5RrpXpDaaZyH9QwmPhRLgz+f2SYbOty3cPkk4qPSOSfif2ZEcDD9HTENKDDd9deB+xkPKzzZhi8cxIx8Ig==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/utils": "^5.14.16", + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.14.5", "prop-types": "^15.8.1" }, "engines": { @@ -2584,11 +2545,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.16.tgz", - "integrity": "sha512-FfvYvTG/Zd+KXMMImbcMYEeQAbONGuX5Vx3gBmmtB6KyA7Mvm9Pma1ly3R0gc44yeoFd+2wBjn1feS8h42HW5w==", + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", "dependencies": { - "@babel/runtime": "^7.23.2", + "@babel/runtime": "^7.21.0", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2615,15 +2576,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.16.tgz", - "integrity": "sha512-uKnPfsDqDs8bbN54TviAuoGWOmFiQLwNZ3Wvj+OBkJCzwA6QnLb/sSeCB7Pk3ilH4h4jQ0BHtbR+Xpjy9wlOuA==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.5.tgz", + "integrity": "sha512-mextXZHDeGcR7E1kx43TRARrVXy+gI4wzpUgNv7MqZs1dvTVXQGVeAT6ydj9d6FUqHBPMNLGV/21vJOrpqsL+w==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/private-theming": "^5.14.16", - "@mui/styled-engine": "^5.14.16", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.16", + "@babel/runtime": "^7.22.6", + "@mui/private-theming": "^5.14.5", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.5", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2654,11 +2615,11 @@ } }, "node_modules/@mui/types": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.8.tgz", - "integrity": "sha512-9u0ji+xspl96WPqvrYJF/iO+1tQ1L5GTaDOeG3vCR893yy7VcWwRNiVMmPdPNpMDqx0WV1wtEW9OMwK9acWJzQ==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "*" }, "peerDependenciesMeta": { "@types/react": { @@ -2667,12 +2628,13 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.16", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.16.tgz", - "integrity": "sha512-3xV31GposHkwRbQzwJJuooWpK2ybWdEdeUPtRjv/6vjomyi97F3+68l+QVj9tPTvmfSbr2sx5c/NuvDulrdRmA==", + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.5.tgz", + "integrity": "sha512-6Hzw63VR9C5xYv+CbjndoRLU6Gntal8rJ5W+GUzkyHrGWIyYPWZPa6AevnyGioySNETATe1H9oXS8f/7qgIHJA==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@types/prop-types": "^15.7.9", + "@babel/runtime": "^7.22.6", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2684,13 +2646,7 @@ "url": "https://opencollective.com/mui" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, "node_modules/@nodelib/fs.scandir": { @@ -2738,9 +2694,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", - "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.8.0.tgz", + "integrity": "sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==", "engines": { "node": ">=14.0.0" } @@ -2757,47 +2713,6 @@ "string.prototype.matchall": "^4.0.6" } }, - "node_modules/@types/babel__core": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", - "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.6", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", - "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", - "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", - "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", @@ -2811,46 +2726,51 @@ "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.14.tgz", - "integrity": "sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", + "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", + "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", + "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", - "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prop-types": { - "version": "15.7.9", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", - "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.35", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", - "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", + "version": "18.2.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", + "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-transition-group": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", - "integrity": "sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "dependencies": { "@types/react": "*" } @@ -2865,37 +2785,30 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", - "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@types/trusted-types": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz", - "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", "dev": true }, "node_modules/@types/unist": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.9.tgz", - "integrity": "sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" }, "node_modules/@vitejs/plugin-react": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", - "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", + "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", "dev": true, "dependencies": { - "@babel/core": "^7.23.2", + "@babel/core": "^7.22.9", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "@types/babel__core": "^7.20.3", "react-refresh": "^0.14.0" }, "engines": { @@ -2906,9 +2819,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2991,15 +2904,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -3010,16 +2923,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "get-intrinsic": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -3029,14 +2942,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3047,14 +2960,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3065,28 +2978,27 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "get-intrinsic": "^1.1.3" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -3099,15 +3011,15 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/asynciterator.prototype": { @@ -3141,9 +3053,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true, "engines": { "node": ">=4" @@ -3173,13 +3085,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -3187,25 +3099,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", - "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.33.1" + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3249,9 +3161,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "dev": true, "funding": [ { @@ -3268,10 +3180,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -3299,14 +3211,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3321,9 +3232,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "version": "1.0.30001521", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", + "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", "dev": true, "funding": [ { @@ -3451,12 +3362,12 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.33.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", - "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", + "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", "dev": true, "dependencies": { - "browserslist": "^4.22.1" + "browserslist": "^4.21.9" }, "funding": { "type": "opencollective", @@ -3559,27 +3470,12 @@ "node": ">=0.10.0" } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -3608,9 +3504,9 @@ } }, "node_modules/dexie-react-hooks": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.7.tgz", - "integrity": "sha512-Lwv5W0Hk+uOW3kGnsU9GZoR1er1B7WQ5DSdonoNG+focTNeJbHW6vi6nBoX534VKI3/uwHebYzSw1fwY6a7mTw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.6.tgz", + "integrity": "sha512-xSblWtmPwhafWNWMECsW7zMMmBu8goH3QqTxEfwBNoNG1mgsM0oFclippev7ss9HhKICqBwTjgqpscci5Ed4mA==", "peerDependencies": { "@types/react": ">=16", "dexie": "^3.2 || ^4.0.1-alpha", @@ -3654,9 +3550,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.576", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz", - "integrity": "sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==", + "version": "1.4.495", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.495.tgz", + "integrity": "sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==", "dev": true }, "node_modules/emoji-regex": { @@ -3682,26 +3578,26 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", + "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", + "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -3709,23 +3605,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -3735,15 +3631,15 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", + "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.3", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.2.1", @@ -3752,31 +3648,31 @@ "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "has": "^1.0.3" } }, "node_modules/es-to-primitive": { @@ -3854,19 +3750,18 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4007,26 +3902,27 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", + "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", + "eslint-import-resolver-node": "^0.3.7", "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "has": "^1.0.3", + "is-core-module": "^2.12.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "resolve": "^1.22.3", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -4059,27 +3955,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { "node": ">=4.0" @@ -4143,12 +4039,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4237,9 +4133,9 @@ "dev": true }, "node_modules/eslint/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4485,23 +4381,22 @@ } }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", + "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/for-each": { @@ -4535,9 +4430,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, @@ -4549,23 +4444,20 @@ } }, "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -4593,15 +4485,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", + "function-bind": "^1.1.1", + "has": "^1.0.3", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4709,6 +4601,17 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4727,12 +4630,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4777,17 +4680,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", @@ -4828,9 +4720,9 @@ } }, "node_modules/humanize-duration": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.30.0.tgz", - "integrity": "sha512-NxpT0fhQTFuMTLnuu1Xp+ozNpYirQnbV3NlOjEKBYlE3uvMRu3LDuq8EPc3gVXxVYnchQfqVM4/+T9iwHPLLeA==" + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", + "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==" }, "node_modules/i18next": { "version": "21.10.0", @@ -4931,13 +4823,13 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", "side-channel": "^1.0.4" }, "engines": { @@ -5063,11 +4955,11 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { - "hasown": "^2.0.0" + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5381,16 +5273,16 @@ "dev": true }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", "dev": true, "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" } }, "node_modules/jake": { @@ -5550,12 +5442,6 @@ "node": ">=4" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5627,15 +5513,6 @@ "node": ">=4.0" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", @@ -5643,15 +5520,12 @@ "dev": true }, "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" + "language-subtag-registry": "~0.3.2" } }, "node_modules/leven": { @@ -5938,9 +5812,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true, "funding": [ { @@ -5995,9 +5869,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6031,28 +5905,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -6062,39 +5936,39 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "es-abstract": "^1.21.2", "get-intrinsic": "^1.2.1" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -6263,9 +6137,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", "dev": true, "funding": [ { @@ -6354,9 +6228,9 @@ } }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -6482,11 +6356,11 @@ } }, "node_modules/react-router": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", - "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.15.0.tgz", + "integrity": "sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==", "dependencies": { - "@remix-run/router": "1.11.0" + "@remix-run/router": "1.8.0" }, "engines": { "node": ">=14.0.0" @@ -6496,12 +6370,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", - "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.15.0.tgz", + "integrity": "sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==", "dependencies": { - "@remix-run/router": "1.11.0", - "react-router": "6.18.0" + "@remix-run/router": "1.8.0", + "react-router": "6.15.0" }, "engines": { "node": ">=14.0.0" @@ -6527,15 +6401,15 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -6553,9 +6427,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -6579,14 +6453,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6680,9 +6554,9 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6729,9 +6603,9 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", + "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6768,13 +6642,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.0", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -6845,35 +6719,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7002,19 +6847,18 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { @@ -7022,14 +6866,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -7039,28 +6883,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7196,9 +7040,9 @@ } }, "node_modules/terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7389,12 +7233,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -7534,9 +7372,9 @@ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" }, "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -7553,9 +7391,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -7620,9 +7458,9 @@ } }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "dev": true, "dependencies": { "esbuild": "^0.18.10", @@ -7799,13 +7637,13 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index ce1d88bb..09fe1296 100644 --- a/web/public/static/langs/ar.json +++ b/web/public/static/langs/ar.json @@ -152,7 +152,7 @@ "publish_dialog_chip_delay_label": "تأخير التسليم", "subscribe_dialog_login_description": "هذا الموضوع محمي بكلمة مرور. الرجاء إدخال اسم المستخدم وكلمة المرور للاشتراك.", "subscribe_dialog_subscribe_button_cancel": "إلغاء", - "common_back": "الرجوع", + "common_back": "العودة", "prefs_notifications_sound_play": "تشغيل الصوت المحدد", "prefs_notifications_min_priority_title": "أولوية دنيا", "prefs_notifications_min_priority_max_only": "الأولوية القصوى فقط", @@ -329,6 +329,5 @@ "publish_dialog_attachment_limits_quota_reached": "يتجاوز الحصة، {{remainingBytes}} متبقية", "account_basics_tier_paid_until": "تم دفع مبلغ الاشتراك إلى غاية {{date}}، وسيتم تجديده تِلْقائيًا", "account_basics_tier_canceled_subscription": "تم إلغاء اشتراكك وسيتم إعادته إلى مستوى حساب مجاني بداية مِن {{date}}.", - "account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن.", - "nav_upgrade_banner_description": "حجز المواضيع والمزيد من الرسائل ورسائل البريد الإلكتروني والمرفقات الأكبر حجمًا" + "account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن." } diff --git a/web/public/static/langs/bg.json b/web/public/static/langs/bg.json index c4cdb102..307734b1 100644 --- a/web/public/static/langs/bg.json +++ b/web/public/static/langs/bg.json @@ -318,20 +318,5 @@ "account_upgrade_dialog_tier_features_emails_one": "{{emails}} ел. писмо на ден", "account_upgrade_dialog_tier_features_emails_other": "{{emails}} ел. писма на ден", "account_upgrade_dialog_tier_features_calls_one": "{{calls}} телефонни обаждания на ден", - "account_usage_attachment_storage_description": "{{filesize}} на файл, изтриване след {{expiry}}", - "account_upgrade_dialog_billing_contact_email": "За въпроси относно плащанията се свържете с нас.", - "account_upgrade_dialog_tier_current_label": "Текущо", - "account_upgrade_dialog_billing_contact_website": "За въпроси относно плащанията се обърнете към страницата.", - "account_upgrade_dialog_button_cancel_subscription": "Прекратяване на абонамент", - "account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} на файл", - "account_upgrade_dialog_reservations_warning_one": "Избраното ниво разрешава по-малко резервирани теми, от колкото текущото. Преди промяна на нивото изтрийте най-малко една резервирана тема. Можете да премахвате теми в Настройки.", - "account_tokens_title": "Кодове за достъп", - "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} на година. Плаща се всеки месец.", - "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} плащане на година. Спестявате {{save}}.", - "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} общ обем", - "account_upgrade_dialog_tier_price_per_month": "на месец", - "account_upgrade_dialog_button_pay_now": "Плащане и абониране", - "account_upgrade_dialog_tier_selected_label": "Избрано", - "account_upgrade_dialog_button_update_subscription": "Премяна на абонамент", - "account_upgrade_dialog_reservations_warning_other": "Избраното ниво разрешава по-малко резервирани теми, от колкото текущото. Преди промяна на нивото изтрийте най-малко {{count}} резервирани теми. Можете да премахвате теми в Настройки." + "account_usage_attachment_storage_description": "{{filesize}} на файл, изтриване след {{expiry}}" } diff --git a/web/public/static/langs/cy.json b/web/public/static/langs/cy.json index da6c9b41..68846b8f 100644 --- a/web/public/static/langs/cy.json +++ b/web/public/static/langs/cy.json @@ -39,10 +39,5 @@ "publish_dialog_attach_placeholder": "Atodi ffeil drwy URL, e.e. https://f-droid.org/F-Droid.apk", "notifications_click_copy_url_button": "Copio linc", "notifications_actions_open_url_title": "Ewch i {{url}}", - "publish_dialog_email_label": "Ebost", - "signup_form_confirm_password": "Cadarnhau cyfrinair", - "signup_form_button_submit": "Cofrestru", - "common_back": "Yn ôl", - "common_copy_to_clipboard": "Copio i'r clipfwrdd", - "signup_already_have_account": "Gyda chyfrif yn barod? Mewngofnodi!" + "publish_dialog_email_label": "Ebost" } diff --git a/web/public/static/langs/de.json b/web/public/static/langs/de.json index a43fb7da..c792b9e3 100644 --- a/web/public/static/langs/de.json +++ b/web/public/static/langs/de.json @@ -25,7 +25,7 @@ "notifications_click_copy_url_title": "Link-URL in Zwischenablage kopieren", "publish_dialog_priority_low": "Niedrige Priorität", "publish_dialog_message_label": "Nachricht", - "action_bar_unsubscribe": "Abmelden", + "action_bar_unsubscribe": "Von Thema abmelden", "notifications_copied_to_clipboard": "In Zwischenablage kopiert", "notifications_loading": "Benachrichtigungen werden geladen …", "notifications_attachment_open_title": "Gehe zu {{url}}", @@ -154,7 +154,7 @@ "notifications_actions_not_supported": "Diese Aktion wird in der Web-App nicht unterstützt", "notifications_actions_http_request_title": "Sende HTTP {{method}} an {{url}}", "action_bar_show_menu": "Menü anzeigen", - "action_bar_toggle_mute": "Stummschaltung an/aus", + "action_bar_toggle_mute": "Stummschaltung der Benachrichtigungen an/aus", "message_bar_show_dialog": "Dialog zur Veröffentlichung anzeigen", "message_bar_publish": "Benachrichtigung veröffentlichen", "nav_button_connecting": "verbinde", diff --git a/web/public/static/langs/fi.json b/web/public/static/langs/fi.json deleted file mode 100644 index 0967ef42..00000000 --- a/web/public/static/langs/fi.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/web/public/static/langs/fr.json b/web/public/static/langs/fr.json index 096b62af..a0d6a1b4 100644 --- a/web/public/static/langs/fr.json +++ b/web/public/static/langs/fr.json @@ -272,7 +272,7 @@ "account_delete_dialog_button_submit": "Supprimer définitivement le compte", "account_delete_dialog_billing_warning": "Supprimer votre compte annule aussi immédiatement votre facturation. Vous n'aurez plus accès à votre tableau de bord de facturation.", "account_upgrade_dialog_title": "Changer le tarif du compte", - "account_upgrade_dialog_proration_info": "Facturation : Lors d'un changement vers un tiers payant, la différence de prix sera débitée immédiatement. En passant d'un tiers payant a gratuit, votre solde sera utilisé pour payer de futur factures.", + "account_upgrade_dialog_proration_info": "Facturation : Lors d'un changement entre un plan payant et un autre, la différence de prix sera créditée ou remboursée sur la prochaine facture. Vous ne recevrez pas d'autre facture avant la fin de la prochaine période de facturation.", "account_upgrade_dialog_reservations_warning_other": "Le tarif sélectionné autorise moins de sujets réservés que votre tarif actuel. Avant de changer de tarif, veuillez supprimer au moins {{count}} sujets réservés. Vous pouvez supprimer des sujets réservés dans les Paramètres.", "account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} sujets réservés", "account_upgrade_dialog_tier_features_messages_other": "{{messages}} messages journaliers", @@ -368,17 +368,8 @@ "account_basics_phone_numbers_dialog_code_placeholder": "Ex : 123456", "account_basics_phone_numbers_dialog_check_verification_button": "Code de confirmarion", "account_basics_phone_numbers_dialog_channel_sms": "SMS", - "account_basics_phone_numbers_dialog_channel_call": "Appeler", + "account_basics_phone_numbers_dialog_channel_call": "Appel", "account_usage_calls_none": "Aucun appels téléphoniques ne peut être fait avec ce compte", "publish_dialog_call_reset": "Supprimer les appels téléphoniques", - "publish_dialog_chip_call_label": "Appel téléphonique", - "account_upgrade_dialog_tier_features_messages_one": "{{messages}} message journalier", - "account_upgrade_dialog_tier_features_emails_one": "{{emails}} mail journalier", - "account_upgrade_dialog_tier_features_calls_other": "{{calls}} appels journaliers", - "account_upgrade_dialog_tier_features_no_calls": "Aucun appel", - "publish_dialog_call_item": "Appeler le numéro {{number}}", - "publish_dialog_chip_call_no_verified_numbers_tooltip": "Aucun numéro de téléphone vérifié", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} sujet réservé", - "account_upgrade_dialog_tier_features_calls_one": "{{calls}} appels journaliers", - "account_usage_calls_title": "Appels téléphoniques passés" + "publish_dialog_chip_call_label": "Appel téléphonique" } diff --git a/web/public/static/langs/gl.json b/web/public/static/langs/gl.json index 92d35610..0967ef42 100644 --- a/web/public/static/langs/gl.json +++ b/web/public/static/langs/gl.json @@ -1,384 +1 @@ -{ - "common_cancel": "Cancelar", - "common_save": "Gardar", - "common_add": "Engadir", - "signup_disabled": "O rexistro está desactivado", - "signup_error_username_taken": "O identificador {{username}} xa está collido", - "login_title": "Accede á túa conta ntfy", - "action_bar_send_test_notification": "Enviar notificación de proba", - "action_bar_clear_notifications": "Limpar todas as notificacións", - "action_bar_unsubscribe": "Retirar subscrición", - "action_bar_profile_settings": "Axustes", - "message_bar_type_message": "Escribe aquí a mensaxe", - "notifications_copied_to_clipboard": "Copiada ao portapapeis", - "notifications_attachment_image": "Imaxe anexa", - "notifications_attachment_copy_url_title": "Copiar URL do anexo ao portapapeis", - "notifications_attachment_copy_url_button": "Copiar URL", - "notifications_attachment_open_title": "Ir a {{url}}", - "notifications_attachment_file_audio": "ficheiro de audio", - "notifications_attachment_file_app": "ficheiro de app Android", - "notifications_attachment_file_document": "outro documento", - "notifications_click_copy_url_title": "Copiar URL da ligazón ao portapapeis", - "notifications_click_copy_url_button": "Copiar ligazón", - "notifications_actions_open_url_title": "Ir a {{url}}", - "notifications_none_for_topic_description": "Para enviar notificacións a este tema, simplemente usa PUT ou POST co URL do tema.", - "notifications_no_subscriptions_description": "Preme en \"{{linktext}} para crear ou subscribirte a un tema. Após, podes enviar mensaxes vía PUT ou POST e recibirás aquí as notificacións.", - "display_name_dialog_description": "Establecer un nome alternativo para o tema que será mostrado na lista de subscrición. Isto axudará a identificar os temas que teñan nomes complicados.", - "publish_dialog_tags_label": "Etiquetas", - "publish_dialog_tags_placeholder": "Lista de etiquetas separadas por vírgulas, ex. aviso, tarefa1", - "publish_dialog_priority_label": "Prioridade", - "publish_dialog_click_label": "URL a premer", - "publish_dialog_click_placeholder": "URL que se abre ao premer na notificación", - "publish_dialog_click_reset": "Desbotar o URL a premer", - "common_back": "Atrás", - "common_copy_to_clipboard": "Copiar ao portapapeis", - "signup_title": "Crear unha conta ntfy", - "signup_form_username": "Identificador", - "signup_form_password": "Contrasinal", - "signup_form_confirm_password": "Confirmar contrasinal", - "signup_form_button_submit": "Crear conta", - "login_form_button_submit": "Acceder", - "login_link_signup": "Crear conta", - "login_disabled": "O acceso está desactivado", - "action_bar_show_menu": "Mostrar menú", - "action_bar_toggle_mute": "Acalar/Reactivar as notificacións", - "message_bar_error_publishing": "Erro ao publicar a notificación", - "message_bar_publish": "Publicar mensaxe", - "nav_topics_title": "Temas subscritos", - "nav_button_documentation": "Documentación", - "nav_button_publish_message": "Publicar notificación", - "nav_button_subscribe": "Subscribirse ao tema", - "nav_button_muted": "Notificacións acaladas", - "nav_button_connecting": "conectando", - "nav_upgrade_banner_label": "Mellorar a ntfy Pro", - "alert_not_supported_description": "O teu navegador non ten soporte para notificacións.", - "notifications_priority_x": "Prioridade {{priority}}", - "notifications_attachment_link_expires": "a ligazón caduca o {{date}}", - "notifications_attachment_link_expired": "a ligazón de descarga caducou", - "notifications_attachment_file_image": "ficheiro de imaxe", - "notifications_attachment_file_video": "ficheiro de vídeo", - "notifications_actions_not_supported": "Acción non soportada na aplicación web", - "notifications_actions_http_request_title": "Enviar HTTP {{method}} a {{url}}", - "notifications_none_for_topic_title": "Aínda non recibiches ningunha notificación para este tema.", - "reserve_dialog_checkbox_label": "Reservar tema e configurar acceso", - "notifications_loading": "Cargando notificacións…", - "publish_dialog_base_url_placeholder": "URL de servizo, ex. https://exemplo.com", - "publish_dialog_topic_label": "Nome do tema", - "publish_dialog_topic_placeholder": "Nome do tema, ex. alertas_equipo", - "publish_dialog_topic_reset": "Restablecer tema", - "publish_dialog_title_label": "Título", - "publish_dialog_title_placeholder": "Título das notificacións, ex. Alerta de reunión", - "publish_dialog_message_label": "Mensaxe", - "publish_dialog_message_placeholder": "Escribe aquí a mensaxe", - "publish_dialog_email_label": "Correo electrónico", - "signup_form_toggle_password_visibility": "Cambiar visibilidade do contrasinal", - "signup_already_have_account": "Xa tes unha conta? Accede!", - "signup_error_creation_limit_reached": "Acadouse o límite de creación de contas", - "action_bar_logo_alt": "logo ntfy", - "action_bar_settings": "Axustes", - "action_bar_account": "Conta", - "action_bar_change_display_name": "Cambiar nome público", - "action_bar_reservation_add": "Reservar tema", - "action_bar_reservation_edit": "Cambiar a reserva", - "action_bar_reservation_delete": "Desbotar a reserva", - "action_bar_reservation_limit_reached": "Acadouse o límite", - "action_bar_toggle_action_menu": "Abrir/Pechar menú de accións", - "action_bar_profile_title": "Perfil", - "action_bar_profile_logout": "Pechar sesión", - "action_bar_sign_in": "Acceder", - "action_bar_sign_up": "Crear conta", - "message_bar_show_dialog": "Mostrar diálogo para publicar", - "nav_button_all_notifications": "Todas as notificacións", - "nav_button_account": "Conta", - "nav_button_settings": "Axustes", - "nav_upgrade_banner_description": "Reserva temas, máis mensaxes e correos electrónicos así como anexos máis grandes", - "alert_grant_title": "As notificacións están desactivadas", - "alert_grant_description": "Concede permiso no navegador para mostrar notificacións de escritorio.", - "alert_grant_button": "Conceder agora", - "alert_not_supported_title": "Non hai soporte para notificacións", - "alert_not_supported_context_description": "Só hai soporte para notificacións ao usar HTTPS. Esta é unha limitación da API de Notificacións.", - "notifications_list": "Lista de notificacións", - "notifications_list_item": "Notificación", - "notifications_mark_read": "Marcar como lida", - "notifications_delete": "Eliminar", - "notifications_tags": "Etiquetas", - "notifications_new_indicator": "Nova notificación", - "notifications_attachment_open_button": "Abrir anexo", - "notifications_click_open_button": "Abrir ligazón", - "notifications_none_for_any_title": "Non recibiches ningunha notificación.", - "notifications_none_for_any_description": "Para enviar notificacións ao tema, simplemente usa PUT ou POST ao URL do tema. Aquí tes un exemplo usando un dos teus temas.", - "notifications_no_subscriptions_title": "Semella que aínda non tes subscricións.", - "notifications_example": "Exemplo", - "display_name_dialog_title": "Cambiar nonme público", - "display_name_dialog_placeholder": "Nome público", - "publish_dialog_title_topic": "Publicar en {{topic}}", - "publish_dialog_title_no_topic": "Publicar notificación", - "publish_dialog_progress_uploading": "Enviando…", - "publish_dialog_progress_uploading_detail": "Enviando {{loaded}}/{{total}} ({{percent}}%) …", - "publish_dialog_message_published": "Notificación publicada", - "publish_dialog_attachment_limits_file_and_quota_reached": "supera o límite de ficheiros e cota {{fileSizeLimit}}, quedan {{remainingBytes}}", - "publish_dialog_attachment_limits_file_reached": "supera o límite para ficheiros {{fileSizeLimit}}", - "publish_dialog_attachment_limits_quota_reached": "supera a cota, quedan {{remainingBytes}}", - "publish_dialog_emoji_picker_show": "Elixe emoji", - "publish_dialog_priority_min": "Prioridade Mínima", - "publish_dialog_priority_low": "Prioridade baixa", - "publish_dialog_priority_default": "Prioridade por defecto", - "publish_dialog_priority_high": "Prioridade alta", - "publish_dialog_priority_max": "Prioridade Máxima", - "publish_dialog_base_url_label": "URL do servizo", - "notifications_more_details": "Para máis información, visita o sitio web ou le a documentación.", - "publish_dialog_call_label": "Chamada de teléfono", - "publish_dialog_call_reset": "Retirar chamada de teléfono", - "publish_dialog_delay_placeholder": "Adiar a entrega, ex. {{unixTimestamp}}, {{relativeTime}}, ou \"{{naturalLanguage}}\" (Só en inglés)", - "publish_dialog_other_features": "Outras características:", - "publish_dialog_chip_click_label": "Premer en URL", - "publish_dialog_chip_email_label": "Reenvío por correo", - "publish_dialog_chip_call_label": "Chamada de teléfono", - "publish_dialog_chip_attach_url_label": "Anexar ficheiro por URL", - "publish_dialog_button_cancel_sending": "Cancelar o envío", - "publish_dialog_button_cancel": "Cancelar", - "publish_dialog_button_send": "Enviar", - "publish_dialog_attached_file_title": "Ficheiro anexo:", - "publish_dialog_attached_file_filename_placeholder": "Nome do ficheiro anexo", - "publish_dialog_drop_file_here": "Soltar aquí o ficheiro", - "emoji_picker_search_placeholder": "Buscar emoji", - "subscribe_dialog_subscribe_title": "Subscribirse a un tema", - "publish_dialog_call_item": "Número de teléfono {{number}}", - "publish_dialog_email_placeholder": "Enderezo ao que reenviar a notificación, ex. xoana@exemplo.com", - "publish_dialog_email_reset": "Retirar reenvío ao correo", - "publish_dialog_attach_label": "URL do anexo", - "publish_dialog_attach_placeholder": "Anexa un ficheiro por URL, ex. https://f-droid.org/F-Droid.apk", - "publish_dialog_attach_reset": "Retirar URL do anexo", - "publish_dialog_filename_placeholder": "Nome do ficheiro anexo", - "publish_dialog_filename_label": "Nome do ficheiro", - "publish_dialog_delay_label": "Adiar", - "publish_dialog_delay_reset": "Retirar o adiadamento da entrega", - "publish_dialog_chip_attach_file_label": "Anexar ficheiro local", - "publish_dialog_chip_delay_label": "Entrega adiada", - "publish_dialog_chip_topic_label": "Cambiar tema", - "publish_dialog_details_examples_description": "Para ver exemplos e unha descrición polo miúdo das ferramentas de envío, le a documentación.", - "publish_dialog_checkbox_publish_another": "Publicar outra", - "emoji_picker_search_clear": "Limpar busca", - "publish_dialog_chip_call_no_verified_numbers_tooltip": "Números de teléfono non verificados", - "publish_dialog_attached_file_remove": "Retirar ficheiro anexo", - "account_upgrade_dialog_tier_features_no_calls": "Sen chamadas", - "account_upgrade_dialog_billing_contact_email": "Para preguntas sobre pagamentos, contacta con nós directamente.", - "account_tokens_dialog_title_create": "Crear token de acceso", - "prefs_reservations_dialog_title_edit": "Editar tema reservado", - "priority_default": "por defecto", - "prefs_notifications_min_priority_title": "Prioridade mínima", - "account_upgrade_dialog_tier_features_calls_one": "{{calls}} chamadas de teléfono diarias", - "account_upgrade_dialog_tier_current_label": "Actual", - "account_tokens_table_token_header": "Token", - "prefs_notifications_delete_after_never": "Nunca", - "prefs_users_description": "Engadir/eliminar usuarias dos temas protexidos. Ten en conta que as credenciais gárdanse na almacenaxe local do navegador.", - "subscribe_dialog_subscribe_description": "Os temas poderían non estar proxetidos con contrasinal, así que elixe un nome complicado de adiviñar. Unha vez subscrita, podes PUT/POST notificacións.", - "account_upgrade_dialog_interval_yearly_discount_save_up_to": "aforro ata un {{discount}}%", - "account_tokens_dialog_label": "Etiqueta, ex. notificación de Radarr", - "account_tokens_table_expires_header": "Caducidade", - "account_upgrade_dialog_proration_info": "Axuste: ao mellorar a un plan de pagamento superior, a diferencia vaise cobrar inmediatamente. Se degradas a conta a un plan inferior a diferencia usarase para pagar futuros períodos de pagamento.", - "prefs_reservations_dialog_access_label": "Acceso", - "account_usage_attachment_storage_title": "Almacenaxe dos anexos", - "prefs_users_dialog_username_label": "Identificador, ex. xoana", - "prefs_reservations_table_not_subscribed": "Non subscrita", - "account_upgrade_dialog_tier_features_emails_other": "{{emails}} correos diarios", - "prefs_notifications_min_priority_max_only": "Só prioridade máxima", - "account_upgrade_dialog_tier_features_calls_other": "{{calls}} chamadas de teléfono diarias", - "prefs_notifications_sound_description_some": "As notificacións sonan co ton {{sound}} ao chegar", - "prefs_reservations_edit_button": "Editar acceso ao tema", - "account_tokens_dialog_expires_never": "O token non caduca", - "subscribe_dialog_login_title": "Require inciar sesión", - "account_tokens_dialog_expires_x_days": "O token caduca en {{days}} días", - "prefs_reservations_table_everyone_read_only": "Podo publicar e subscribirme, calquera pode subscribirse", - "prefs_reservations_table_everyone_deny_all": "Só eu podo publicar e subscribirme", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} tema reservado", - "subscribe_dialog_login_button_login": "Acceder", - "account_upgrade_dialog_tier_features_no_reservations": "Sen temas reservados", - "prefs_users_table_cannot_delete_or_edit": "Non se pode eliminar ou editar unha usuaria coa sesión iniciada", - "prefs_notifications_delete_after_three_hours_description": "As notificacións autoelimínanse após tres horas", - "prefs_notifications_delete_after_three_hours": "Após tres horas", - "prefs_notifications_min_priority_description_x_or_higher": "Mostrar as notificacións se a prioridade é {{number}} {{name}} ou superior", - "reservation_delete_dialog_description": "Ao eliminar a reserva cedes a propiedade do tema, e permites que outras persoas poidan reservalo. Podes manter ou eliminar as mensaxes e anexos existentes.", - "prefs_reservations_table_everyone_read_write": "Calquera pode publicar e subscribirse", - "prefs_reservations_dialog_title_delete": "Eliminar a reserva do tema", - "prefs_users_table": "Táboa de usuarias", - "prefs_reservations_table_topic_header": "Tema", - "reservation_delete_dialog_submit_button": "Eliminar a reserva", - "prefs_reservations_limit_reached": "Acadaches o límite de temas que podes reservar.", - "account_upgrade_dialog_interval_monthly": "Mensual", - "prefs_users_add_button": "Engadir usuaria", - "account_upgrade_dialog_tier_features_messages_other": "{{messages}} mensaxes diarias", - "prefs_appearance_language_title": "Idioma", - "prefs_notifications_delete_after_one_day_description": "As notificacións autoelimínanse após un día", - "account_tokens_table_never_expires": "Non caduca", - "account_tokens_delete_dialog_title": "Desbotar token de acceso", - "prefs_notifications_delete_after_one_month": "Após un mes", - "account_tokens_delete_dialog_description": "Antes de borrar o token de acceso mira que ningunha aplicación ou programa o está usando. Esta acción non pode desfacerse.", - "account_upgrade_dialog_button_cancel": "Cancelar", - "account_tokens_table_label_header": "Etiqueta", - "account_upgrade_dialog_billing_contact_website": "Para preguntas sobre pagamentos, vai ao noso sitiio web.", - "prefs_notifications_delete_after_never_description": "As notificacións non se eliminarán nunca automáticamente", - "account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} temas reservados", - "prefs_notifications_sound_description_none": "As notificacións non reproducen un ton ao chegar", - "account_tokens_description": "Usar tokens de acceso ao publicar e subscribirte a través da API de ntfy, así non tes que enviar as credenciais. Le a documentación para saber máis.", - "prefs_reservations_table": "Táboa cos temas reservados", - "account_upgrade_dialog_button_cancel_subscription": "Cancelar subscrición", - "account_upgrade_dialog_tier_features_emails_one": "{{emails}} correo diario", - "account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} por ficheiro", - "prefs_reservations_description": "Podes reservar nomes de temas para uso personal. Ao reservar un tema tes a propiedade sobre del, e permíteche definir os permisos de acceso para outras usuarias sobre o tema.", - "prefs_users_description_no_sync": "Usuarias e contrasinais non están sincronizados coa túa conta.", - "account_tokens_dialog_title_edit": "Editar token de acceso", - "prefs_users_table_base_url_header": "URL do servizo", - "account_upgrade_dialog_tier_features_messages_one": "{{mensaxes}} mensaxe diaria", - "account_upgrade_dialog_reservations_warning_one": "O nivel seleccionado permite reservar menos temas que o nivel actual. Antes de cambiar de nivel, elimina unha reserva polo menos. Podes eliminar as reservas nos Axustes.", - "prefs_users_table_user_header": "Usuaria", - "error_boundary_stack_trace": "Trazas do problema", - "prefs_users_dialog_password_label": "Contrasinal", - "prefs_notifications_delete_after_one_week": "Após unha semana", - "prefs_reservations_delete_button": "Restablecer acceso ao tema", - "prefs_notifications_delete_after_one_week_description": "As notificacións autoelimínanse após unha semana", - "error_boundary_unsupported_indexeddb_description": "A app ntfy web precisa a función IndexedDB, e o teu navegador non ten soporte para IndexedDB no modo privado.

Aínda que é unha mágoa, tampouco ten moito senso usar a app ntfy web en modo privado, porque todo se garda na almacenaxe do navegador. Podes aprender máis sobre isto neste tema de GitHub, ou comentarnos o que che parece en Discord ou Matrix.", - "subscribe_dialog_subscribe_button_cancel": "Cancelar", - "account_basics_tier_description": "O nivel da túa conta", - "prefs_reservations_dialog_title_add": "Reservar tema", - "account_upgrade_dialog_cancel_warning": "Isto vai cancelar a túa subscrición, e degradar a túa conta o {{date}}. Nesa data, as reservas de temas así como as mensaxes na caché do servidor van ser eliminadas.", - "prefs_notifications_sound_title": "Ton da notificación", - "prefs_notifications_min_priority_default_and_higher": "Prioridade por defecto e superior", - "prefs_reservations_table_access_header": "Acceso", - "account_tokens_table_copied_to_clipboard": "Copiouse o token de acceso", - "account_tokens_dialog_expires_x_hours": "O token caduca en {{hours}} horas", - "prefs_users_edit_button": "Editar usuaria", - "account_upgrade_dialog_title": "Cambiar facturación da conta", - "priority_low": "baixa", - "prefs_reservations_table_click_to_subscribe": "Preme para subscribirte", - "error_boundary_description": "Isto non debería pasar. Lamentámolo.
Se tes un minuto, informa en GitHub, ou fáinolo saber en Discord ou Matrix.", - "priority_min": "min", - "prefs_notifications_min_priority_description_any": "Mostrar todas as notificacións, obviando a prioridade", - "error_boundary_gathering_info": "Obter máis info…", - "error_boundary_unsupported_indexeddb_title": "Non hai soporte para a navegación privada", - "prefs_notifications_delete_after_one_day": "Após un día", - "error_boundary_title": "vaite!, ntfy fallou", - "reservation_delete_dialog_action_keep_description": "As mensaxes e anexos que están no servidor serán visibles públicamente para quen saiba o nome do tema.", - "prefs_reservations_add_button": "Engadir tema reservado", - "prefs_reservations_title": "Temas reservados", - "prefs_reservations_dialog_description": "Ao reservar un tema tes a propiedade sobre el, e permíteche definir os permisos de acceso para outras usuarias.", - "account_tokens_delete_dialog_submit_button": "Eliminar definitivamente o token", - "prefs_notifications_title": "Notificacións", - "account_tokens_title": "Tokens de acceso", - "prefs_reservations_dialog_topic_label": "Tema", - "prefs_users_title": "Xestionar usuarias", - "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} anual. Pagamento mensual.", - "account_tokens_dialog_expires_unchanged": "Deixar a data de caducidade sen cambiar", - "error_boundary_button_copy_stack_trace": "Copiar trazas do problema", - "account_tokens_dialog_title_delete": "Eliminar token de acceso", - "reservation_delete_dialog_action_keep_title": "Manter as mensaxes e anexos gardados", - "prefs_notifications_sound_no_sound": "Sen ton", - "account_upgrade_dialog_interval_yearly": "Anual", - "account_upgrade_dialog_button_redirect_signup": "Crea unha conta", - "account_tokens_dialog_button_cancel": "Cancelar", - "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} cobrado anualmente. Aforro {{save}}.", - "prefs_notifications_min_priority_high_and_higher": "Prioridade alta e superior", - "priority_max": "máx", - "prefs_users_delete_button": "Eliminar usuaria", - "prefs_notifications_min_priority_any": "Calquera prioridade", - "account_tokens_dialog_expires_label": "O token caduca o", - "prefs_notifications_delete_after_title": "Desbotar notificacións", - "account_upgrade_dialog_interval_yearly_discount_save": "aforro {{discount}}%", - "prefs_users_dialog_title_edit": "Editar usuaria", - "prefs_notifications_min_priority_low_and_higher": "Prioridade baixa e superior", - "account_tokens_dialog_button_update": "Actualizar token", - "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} almacenaxe total", - "prefs_reservations_table_everyone_write_only": "Podo publicar e subscribirme, calquera pode publicar", - "prefs_appearance_title": "Aparencia", - "account_tokens_table_cannot_delete_or_edit": "Non se pode editar ou desbotar o token da sesión actual", - "prefs_notifications_sound_play": "Reproducir ton seleccionado", - "account_tokens_table_last_access_header": "Último acceso", - "account_tokens_table_last_origin_tooltip": "Desde o enderezo IP {{ip}}, preme para detalles", - "account_upgrade_dialog_tier_price_per_month": "mes", - "account_tokens_table_current_session": "Sesión do navegador actual", - "account_upgrade_dialog_button_pay_now": "Paga e subscríbete", - "reservation_delete_dialog_action_delete_title": "Eliminar mensaxes e anexos gardados", - "reservation_delete_dialog_action_delete_description": "As mensaxes e anexos vanse borrar definitivamente. Esta acción non ten volta.", - "prefs_notifications_delete_after_one_month_description": "As notificacións autoelimínanse após un mes", - "prefs_users_dialog_base_url_label": "URL do servizo, ex. https://ntfy.sh", - "account_upgrade_dialog_tier_selected_label": "Seleccionado", - "account_upgrade_dialog_button_update_subscription": "Actualizar subscrición", - "priority_high": "alta", - "account_delete_dialog_billing_warning": "Ao eliminar a conta tamén cancelas o pagamento das subscricións. Non poderás volver acceder ao taboleiro de pagamentos.", - "prefs_notifications_min_priority_description_max": "Mostrar notificacións se a prioridade é 5 (máx)", - "account_upgrade_dialog_reservations_warning_other": "O nivel seleccionado permite reservar menos temas que o nivel actual. Antes de cambiar de nivel, elimina {{count}} reservas polo menos. Podes eliminar as reservas nos Axustes.", - "prefs_users_dialog_title_add": "Engadir usuaria", - "account_tokens_dialog_button_create": "Crear token", - "account_tokens_table_create_token_button": "Crear token de acceso", - "account_basics_tier_interval_monthly": "mensual", - "account_basics_tier_canceled_subscription": "A sua suscripción foi cancelada e vostede será degradado a unha conta gratuita o {{date}}.", - "account_basics_password_dialog_current_password_incorrect": "Contrasinal incorrecto", - "account_basics_phone_numbers_dialog_number_label": "Número de teléfono", - "account_basics_password_dialog_button_submit": "Modificar contrasinal", - "account_basics_username_title": "Usuario", - "account_basics_phone_numbers_dialog_check_verification_button": "Código de confirmación", - "account_usage_messages_title": "Mesaxes publicados", - "account_basics_phone_numbers_dialog_verify_button_sms": "Enviar SMS", - "account_basics_tier_change_button": "Cambiar", - "account_basics_phone_numbers_dialog_description": "Para usar a característica de chamadas de teléfono, vostede debe engadir e verificar ao menos un número de teléfono. A verificación pode ser realizada vía SMS ou a través de chamada.", - "account_delete_title": "Borrar conta", - "account_delete_dialog_label": "Contrasinal", - "account_basics_tier_admin_suffix_with_tier": "(con tier {{tier}})", - "subscribe_dialog_login_username_label": "Nome de usuario, ex. phil", - "subscribe_dialog_error_user_not_authorized": "Usuario {{username}} non autorizado", - "account_basics_title": "Conta", - "account_basics_phone_numbers_no_phone_numbers_yet": "Aínda non hay números de teléfono", - "subscribe_dialog_subscribe_button_generate_topic_name": "Xerar nome", - "subscribe_dialog_login_password_label": "Contrasinal", - "subscribe_dialog_subscribe_button_subscribe": "Subscribirse", - "account_basics_phone_numbers_dialog_title": "Engadir número de teléfono", - "account_basics_username_admin_tooltip": "É vostede Admin", - "account_delete_dialog_description": "Isto borrará permanentemente a túa conta, incluido todos os datos almacenados no servidor. Despois do borrado, o teu nome de usuario non estará dispoñible durante 7 días. Se realmente queres proceder, por favor confirme co seu contrasinal na caixa inferior.", - "account_usage_reservations_none": "Non hai temas reservados para esta conta", - "subscribe_dialog_subscribe_topic_placeholder": "Nome do tema, ex. phil_alertas", - "account_usage_title": "Uso", - "account_basics_tier_upgrade_button": "Mexorar a Pro", - "subscribe_dialog_error_topic_already_reserved": "Tema xa reservado", - "account_basics_tier_admin_suffix_no_tier": "(sen tier)", - "account_basics_tier_payment_overdue": "O pago está retrasado. Por favor, revise o seu método de pago o a súa conta será degradada pronto.", - "account_basics_phone_numbers_description": "Para notificacións telefónicas", - "account_basics_tier_free": "De balde", - "account_basics_tier_admin": "Admin", - "account_delete_dialog_button_cancel": "Cancelar", - "account_basics_password_description": "Modificar o contrasinal da conta", - "account_usage_calls_title": "Chamadas realizadas", - "account_basics_tier_basic": "Básico", - "account_basics_phone_numbers_copied_to_clipboard": "Número de teléfono copiado no portapapeis", - "account_basics_tier_title": "Tipo de conta", - "account_usage_cannot_create_portal_session": "Non foi posible abrir o portal de pagos", - "account_delete_description": "Borrar permanentemente a túa conta", - "account_basics_phone_numbers_dialog_number_placeholder": "ex. +1222333444", - "account_basics_phone_numbers_dialog_code_placeholder": "ex. 123456", - "account_basics_tier_manage_billing_button": "Xestionar pagos", - "account_basics_username_description": "Ei, ese eres ti ❤", - "account_basics_password_dialog_confirm_password_label": "Confirmar contrasinal", - "account_basics_tier_interval_yearly": "anual", - "account_delete_dialog_button_submit": "Borrar permanentemente a conta", - "account_basics_phone_numbers_dialog_channel_call": "Chamada", - "account_basics_password_title": "Contrasinal", - "account_basics_password_dialog_new_password_label": "Novo contrasinal", - "account_usage_of_limit": "de {{limit}}", - "subscribe_dialog_error_user_anonymous": "anónimo", - "account_usage_basis_ip_description": "Estadísticas de uso e límites para esta conta están basados na sua IP, polo que poden estar compartidos con outros usuarios. Os limites mostrados son aproximados, basados nos ratios de limite existentes.", - "account_basics_password_dialog_title": "Modificar contrasinal", - "account_usage_limits_reset_daily": "Límite de uso é reiniciado diariamente a medianoite (UTC(", - "account_usage_unlimited": "Sen límites", - "account_basics_phone_numbers_title": "Números de teléfono", - "account_basics_password_dialog_current_password_label": "Contrasinal actual", - "subscribe_dialog_subscribe_base_url_label": "URL do servizo", - "account_usage_reservations_title": "Temas reservados", - "account_usage_calls_none": "Non se poden realizar chamadas con esta conta", - "subscribe_dialog_subscribe_use_another_label": "Usar outro servidor", - "account_basics_phone_numbers_dialog_code_label": "Código de verificación", - "account_basics_tier_paid_until": "Suscripción pagada ata {{date}}, e vaise auto-renovar", - "account_usage_attachment_storage_description": "{{filesize}} por arquivo, borrado despois de {{expiry}}", - "account_basics_phone_numbers_dialog_verify_button_call": "Chámame", - "account_usage_emails_title": "Emails enviados", - "account_basics_phone_numbers_dialog_channel_sms": "SMS", - "subscribe_dialog_login_description": "Este tema está protexido por contrasinal. Por favor, introduza o usuario e contrasinal para subscribirse." -} +{} diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index 4833e8fa..ff731345 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -267,42 +267,5 @@ "publish_dialog_chip_call_label": "Chiamata telefonica", "publish_dialog_chip_call_no_verified_numbers_tooltip": "Nessun numero verificato", "account_basics_phone_numbers_title": "Numeri di telefono", - "account_basics_phone_numbers_dialog_description": "Per usare la funzionalità di notifica tramite chiamata telefonica, devi aggiungere e verificare almeno un numero di telefono. La verifica può essere fatta tramite SMS o chiamata telefonica.", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} topic riservato", - "account_upgrade_dialog_billing_contact_email": "Per domande di fatturazione, contattaci direttamente.", - "account_upgrade_dialog_tier_current_label": "Attuale", - "account_basics_phone_numbers_dialog_number_label": "Numero di telefono", - "account_basics_phone_numbers_dialog_check_verification_button": "Conferma codice", - "account_basics_phone_numbers_dialog_verify_button_sms": "Invia SMS", - "account_basics_phone_numbers_no_phone_numbers_yet": "Ancora nessun numero di telefono", - "account_basics_phone_numbers_dialog_title": "Aggiungi un numero di telefono", - "account_upgrade_dialog_button_cancel": "Cancella", - "account_upgrade_dialog_billing_contact_website": "Per domande di fatturazione, visita per favore in nostro sito.", - "account_upgrade_dialog_button_cancel_subscription": "Cancella iscrizione", - "account_basics_phone_numbers_description": "Per notifiche via chiamata", - "account_basics_phone_numbers_copied_to_clipboard": "Numero di telefono copiato negli appunti", - "account_basics_phone_numbers_dialog_number_placeholder": "p. e. +391234567890", - "account_basics_phone_numbers_dialog_code_placeholder": "p. e. 123456", - "account_tokens_title": "Token d'accesso", - "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} all'anno. Addebitato annualmente.", - "account_basics_phone_numbers_dialog_channel_call": "Chiama", - "account_upgrade_dialog_button_redirect_signup": "Iscriviti ora", - "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} addebitato annualmente. Risparmia {{save}}.", - "account_upgrade_dialog_tier_price_per_month": "mese", - "account_upgrade_dialog_button_pay_now": "Paga ora e isciviti", - "account_basics_phone_numbers_dialog_code_label": "Codice di verifica", - "account_basics_phone_numbers_dialog_verify_button_call": "Chiamami", - "account_basics_phone_numbers_dialog_channel_sms": "SMS", - "account_upgrade_dialog_tier_selected_label": "Selezionato", - "account_upgrade_dialog_button_update_subscription": "Aggiorna iscrizione", - "account_usage_attachment_storage_title": "Archivio allegati", - "account_delete_dialog_description": "Il tuo account sarà permanentemente cancellato assieme a tutti i tuoi dati presenti sul server. Dopo la cancellazione, la tua username non sarà disponibile per 7 giorni. Se desideri davvero procedere, inserisci la tua password nella seguente casella.", - "account_delete_dialog_button_cancel": "Annulla", - "account_usage_calls_title": "Chiamate effettuate", - "account_delete_description": "Elimina permanentemente il tuo account", - "account_delete_dialog_button_submit": "Elimina il tuo account permanentemente", - "account_usage_basis_ip_description": "Le statistiche di utilizzo e i limiti per questo account sono basati sul tuo indirizzo IP, quindi potrebbero essere in condivisione con altri utenti. I limiti mostrati sopra sono approssimazioni basate sui limiti esistenti.", - "account_usage_calls_none": "Questo account non può effettuare chiamate", - "account_delete_dialog_billing_warning": "Eliminando il tuo account perderai immediatamente il tuo abbonamento. Non potrai più accedere alla dashboard di fatturazione.", - "account_delete_dialog_label": "Password" + "account_basics_phone_numbers_dialog_description": "Per usare la funzionalità di notifica tramite chiamata telefonica, devi aggiungere e verificare almeno un numero di telefono. La verifica può essere fatta tramite SMS o chiamata telefonica." } diff --git a/web/public/static/langs/nb_NO.json b/web/public/static/langs/nb_NO.json index 13cd419e..b03adca7 100644 --- a/web/public/static/langs/nb_NO.json +++ b/web/public/static/langs/nb_NO.json @@ -190,10 +190,5 @@ "error_boundary_unsupported_indexeddb_title": "Privat surfing støttes ikke", "action_bar_account": "Konto", "action_bar_profile_settings": "Innstillinger", - "nav_button_account": "Konto", - "signup_title": "Opprett en ntfy konto", - "signup_form_username": "Brukernavn", - "signup_form_password": "Passord", - "signup_form_button_submit": "Meld deg på", - "signup_form_confirm_password": "Bekreft passord" + "nav_button_account": "Konto" } diff --git a/web/public/static/langs/pt_BR.json b/web/public/static/langs/pt_BR.json index 79b2c14a..8452ea2e 100644 --- a/web/public/static/langs/pt_BR.json +++ b/web/public/static/langs/pt_BR.json @@ -191,33 +191,10 @@ "error_boundary_unsupported_indexeddb_description": "O ntfy web app precisa do IndexedDB para funcionar, e seu navegador não suporta IndexedDB no modo de navegação privada.

Embora isso seja lamentável, também não faz muito sentido usar o ntfy web app no modo de navegação privada de qualquer maneira, porque tudo é armazenado no armazenamento do navegador. Você pode ler mais sobre isso nesta edição do GitHub, ou falar conosco em Discord ou Matrix.", "action_bar_reservation_add": "Reserve topic", "action_bar_reservation_edit": "Change reservation", - "signup_disabled": "Registrar está desativado", - "signup_error_username_taken": "Usuário {{username}} já existe", - "signup_error_creation_limit_reached": "Limite de criação de contas atingido", - "action_bar_reservation_delete": "Remover reserva", - "action_bar_account": "Conta", - "action_bar_change_display_name": "Change display name", - "common_copy_to_clipboard": "Copiar para área de transferência", - "login_link_signup": "Registrar", - "login_title": "Entrar na sua conta ntfy", - "login_form_button_submit": "Entrar", - "login_disabled": "Login está desabilitado", - "action_bar_reservation_limit_reached": "Limite atingido", - "action_bar_profile_title": "Perfil", - "action_bar_profile_settings": "Configurações", - "action_bar_profile_logout": "Sair", - "action_bar_sign_in": "Entrar", - "action_bar_sign_up": "Registrar", - "nav_button_account": "Conta", - "signup_title": "Criar uma conta ntfy", - "signup_form_username": "Usuário", - "signup_form_password": "Senha", - "signup_form_confirm_password": "Confirmar senha", - "signup_form_button_submit": "Registrar", - "account_basics_phone_numbers_title": "Telefones", - "signup_form_toggle_password_visibility": "Ativar visibilidade de senha", - "signup_already_have_account": "Já possui uma conta? Entrar!", - "nav_upgrade_banner_label": "Atualizar para ntfy Pro", - "account_basics_phone_numbers_dialog_description": "Para usar o recurso de notificação de chamada, é necessários adicionar e verificar pelo menos um número de telefone. A verificação pode ser feita por SMS ou chamada telefônica.", - "account_basics_phone_numbers_description": "Para notificações de chamada telefônica" + "signup_disabled": "Signup is disabled", + "signup_error_username_taken": "Username {{username}} is already taken", + "signup_error_creation_limit_reached": "Account creation limit reached", + "action_bar_reservation_delete": "N", + "action_bar_account": "Account", + "action_bar_change_display_name": "Change display name" } diff --git a/web/public/static/langs/ru.json b/web/public/static/langs/ru.json index 71cef5a4..2a6100ad 100644 --- a/web/public/static/langs/ru.json +++ b/web/public/static/langs/ru.json @@ -354,7 +354,7 @@ "account_upgrade_dialog_billing_contact_email": "По вопросам оплаты, пожалуйста свяжитесь с нами.", "account_upgrade_dialog_billing_contact_website": "По вопросам оплаты, пожалуйста обратитесь к нашему сайту.", "publish_dialog_call_reset": "Удалить вызов", - "account_basics_phone_numbers_dialog_description": "Для того что бы использовать возможность уведомлений о вызовах, нужно добавить и проверить хотя бы один номер телефона. Проверить можно используя SMS или звонок.", + "account_basics_phone_numbers_dialog_description": "Для использования уведомлений необходимо добавить и подтвердить хотя бы один номер телефона. Проверить можно используя SMS или звонок.", "account_basics_phone_numbers_dialog_title": "Добавить номер телефона", "account_basics_phone_numbers_dialog_number_placeholder": "например +1222333444", "account_basics_phone_numbers_dialog_code_placeholder": "например 123456", @@ -363,22 +363,5 @@ "account_usage_calls_none": "Невозможно совершать вызовы с этим аккаунтом", "publish_dialog_chip_call_no_verified_numbers_tooltip": "Нет проверенных номеров", "account_basics_phone_numbers_copied_to_clipboard": "Номер телефона скопирован в буфер обмена", - "account_upgrade_dialog_tier_features_no_calls": "Нет вызовов", - "account_upgrade_dialog_tier_features_calls_one": "{{calls}} ежедневный звонок", - "account_basics_phone_numbers_dialog_number_label": "Номер телефона", - "account_basics_phone_numbers_dialog_check_verification_button": "Подтвердить код", - "account_upgrade_dialog_tier_features_calls_other": "{{calls}} ежедневных звонков", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} зарезервированная тема", - "account_basics_phone_numbers_no_phone_numbers_yet": "Телефонных номеров пока нет", - "publish_dialog_chip_call_label": "Звонок", - "account_upgrade_dialog_tier_features_emails_one": "{{emails}} ежедневное письмо", - "account_upgrade_dialog_tier_features_messages_one": "{{messages}} ежедневное сообщения", - "account_basics_phone_numbers_description": "Для уведомлений о телефонных звонках", - "publish_dialog_call_label": "Звонок", - "account_basics_phone_numbers_dialog_channel_call": "Позвонить", - "account_basics_phone_numbers_title": "Номера телефонов", - "account_basics_phone_numbers_dialog_code_label": "Проверочный код", - "account_basics_phone_numbers_dialog_verify_button_call": "Позвонить мне", - "publish_dialog_call_item": "Вызов телефонного номера {{number}}", - "account_basics_phone_numbers_dialog_channel_sms": "SMS" + "account_upgrade_dialog_tier_features_no_calls": "Нет вызовов" } diff --git a/web/public/static/langs/sk.json b/web/public/static/langs/sk.json deleted file mode 100644 index 0e3f57a7..00000000 --- a/web/public/static/langs/sk.json +++ /dev/null @@ -1,384 +0,0 @@ -{ - "common_save": "Uložiť", - "common_back": "Späť", - "common_copy_to_clipboard": "Kopírovať do schránky", - "signup_title": "Vytvoriť ntfy účet", - "signup_form_username": "Používateľské meno", - "signup_form_confirm_password": "Potvrdenie hesla", - "signup_form_button_submit": "Zaregistrovať sa", - "signup_form_toggle_password_visibility": "Prepnúť viditeľnosť hesla", - "signup_error_username_taken": "Používateľské meno {{username}} je už obsadené", - "login_form_button_submit": "Prihlásiť sa", - "login_disabled": "Prihlásenie je zakázané", - "action_bar_logo_alt": "ntfy logo", - "action_bar_settings": "Nastavenia", - "action_bar_account": "Účet", - "action_bar_sign_in": "Prihlásiť sa", - "action_bar_profile_settings": "Nastavenia", - "action_bar_reservation_edit": "Zmeniť rezerváciu", - "action_bar_unsubscribe": "Odhlásiť odber", - "action_bar_toggle_mute": "Stlmiť/zrušiť stlmenie upozornení", - "action_bar_toggle_action_menu": "Otvoriť/zavrieť akčné menu", - "action_bar_profile_title": "Profil", - "nav_button_settings": "Nastavenia", - "nav_button_account": "Účet", - "message_bar_show_dialog": "Zobraziť okno pre odosielanie oznámení", - "message_bar_publish": "Zverejniť správu", - "nav_topics_title": "Odoberané témy", - "nav_button_all_notifications": "Všetky oznámenia", - "alert_grant_description": "Udeliť prehliadaču povolenie na zobrazovanie oznámení na ploche.", - "alert_not_supported_context_description": "Oznámenia sú podporované len cez HTTPS. Ide o obmedzenie rozhrania Notifications API.", - "notifications_list": "Zoznam oznámení", - "notifications_list_item": "Oznámenie", - "notifications_mark_read": "Označiť ako prečítané", - "notifications_delete": "Zmazať", - "notifications_copied_to_clipboard": "Skopírované do schránky", - "notifications_tags": "Štítky", - "notifications_priority_x": "Priorita {{priority}}", - "notifications_new_indicator": "Nové oznámenie", - "notifications_attachment_image": "Obrázok prílohy", - "notifications_attachment_link_expired": "odkaz na stiahnutie vypršal", - "notifications_attachment_file_image": "súbor s obrázkom", - "notifications_attachment_file_video": "video súbor", - "notifications_attachment_file_audio": "zvukový súbor", - "notifications_attachment_file_app": "Súbor aplikácie pre Android", - "notifications_attachment_file_document": "iný dokument", - "notifications_click_copy_url_title": "Skopírovať URL adresu odkazu do schránky", - "notifications_click_copy_url_button": "Kopírovať odkaz", - "notifications_click_open_button": "Otvoriť odkaz", - "notifications_actions_not_supported": "Akcia nie je podporovaná vo webovej aplikácii", - "notifications_none_for_topic_title": "K tejto téme ste zatiaľ nedostali žiadne upozornenia.", - "notifications_none_for_any_title": "Nedostali ste žiadne upozornenia.", - "notifications_none_for_any_description": "Ak chcete posielať oznámenia do témy, jednoducho zadajte adresu PUT alebo POST na adresu URL témy. Tu je príklad s použitím jednej z vašich tém.", - "notifications_no_subscriptions_title": "Zdá sa, že zatiaľ nemáte žiadne prihlásenia na odber.", - "display_name_dialog_title": "Zmeniť zobrazovaný názov", - "notifications_no_subscriptions_description": "Kliknutím na odkaz \"{{text odkazu}}\" vytvoríte tému alebo sa na ňu prihlásite. Potom môžete posielať správy prostredníctvom PUT alebo POST a budete tu dostávať oznámenia.", - "notifications_example": "Príklad", - "notifications_more_details": "Ďalšie informácie nájdete na webovej stránke alebo v dokumentácií.", - "display_name_dialog_placeholder": "Zobrazený názov", - "reserve_dialog_checkbox_label": "Rezervovať tému a nakonfigurovať prístup", - "notifications_loading": "Načítavanie oznámení …", - "publish_dialog_title_no_topic": "Zverejniť oznámenie", - "publish_dialog_title_topic": "Zverejniť v {{topic}}", - "publish_dialog_progress_uploading": "Nahrávanie…", - "publish_dialog_progress_uploading_detail": "Nahrávanie {{loaded}}/{{total}} ({{percent}}%) …", - "publish_dialog_message_published": "Oznámenie zverejnené", - "publish_dialog_attachment_limits_file_and_quota_reached": "prekročí {{fileSizeLimit}} limit súboru a kvótu, {{remainingBytes}} zostáva", - "publish_dialog_attachment_limits_file_reached": "prekračuje {{fileSizeLimit}} limit súboru", - "publish_dialog_attachment_limits_quota_reached": "prekračuje kvótu, {{remainingBytes}} zostáva", - "publish_dialog_emoji_picker_show": "Vyberte emoji", - "publish_dialog_priority_min": "Min. priorita", - "publish_dialog_priority_low": "Nízka priorita", - "publish_dialog_priority_default": "Predvolená priorita", - "publish_dialog_priority_high": "Vysoká priorita", - "publish_dialog_priority_max": "Max. priorita", - "publish_dialog_base_url_label": "URL Adresa služby", - "publish_dialog_base_url_placeholder": "URL adresa služby, napr. https://example.com", - "publish_dialog_topic_label": "Názov témy", - "publish_dialog_topic_placeholder": "Názov témy, napr. phil_alerts", - "publish_dialog_topic_reset": "Resetovať tému", - "publish_dialog_title_label": "Názov", - "publish_dialog_title_placeholder": "Názov oznámenia, napr. Upozornenie na miesto na disku", - "publish_dialog_tags_label": "Štítky", - "publish_dialog_message_label": "Správa", - "publish_dialog_priority_label": "Priorita", - "publish_dialog_click_label": "Kliknite na URL", - "publish_dialog_click_placeholder": "URL adresa sa otvorí po kliknutí na oznámenie", - "publish_dialog_email_label": "Email", - "publish_dialog_email_placeholder": "Emailová adresa, na ktorú sa má oznámenie zaslať, napr. phil@example.com", - "publish_dialog_call_label": "Telefonovať", - "publish_dialog_call_item": "Zavolať na telefónne číslo {{number}}", - "publish_dialog_call_reset": "Odstrániť telefón", - "publish_dialog_attach_label": "URL prílohy", - "publish_dialog_attach_reset": "Odstrániť URL prílohy", - "publish_dialog_filename_label": "Názov súboru", - "publish_dialog_filename_placeholder": "Názov súboru prílohy", - "publish_dialog_delay_label": "Oneskorenie", - "publish_dialog_delay_placeholder": "Oneskorenie doručenia, napr. {{unixTimestamp}}, {{relativeTime}} alebo \"{{naturalLanguage}}\" (len v angličtine)", - "publish_dialog_delay_reset": "Odstrániť oneskorené doručenie", - "publish_dialog_chip_call_label": "Telefonovať", - "publish_dialog_other_features": "Ďalšie funkcie:", - "publish_dialog_chip_call_no_verified_numbers_tooltip": "Žiadne overené telefónne čísla", - "publish_dialog_chip_attach_url_label": "Pripojiť súbor pomocou adresy URL", - "publish_dialog_chip_delay_label": "Oneskoriť doručenie", - "publish_dialog_chip_topic_label": "Zmeniť tému", - "publish_dialog_button_cancel_sending": "Zrušiť odosielanie", - "publish_dialog_button_send": "Odoslať", - "publish_dialog_checkbox_publish_another": "Zverejniť ďalšie", - "publish_dialog_attached_file_title": "Priložený súbor:", - "subscribe_dialog_subscribe_button_cancel": "Zrušiť", - "subscribe_dialog_subscribe_title": "Odoberať tému", - "subscribe_dialog_subscribe_base_url_label": "URL Adresa služby", - "subscribe_dialog_subscribe_topic_placeholder": "Názov témy, napr. phil_alerts", - "publish_dialog_attached_file_filename_placeholder": "Názov súboru prílohy", - "publish_dialog_attached_file_remove": "Odstrániť priložený súbor", - "publish_dialog_drop_file_here": "Vložiť súbor", - "subscribe_dialog_login_password_label": "Heslo", - "account_basics_password_dialog_confirm_password_label": "Potvrdenie hesla", - "account_basics_title": "Účet", - "account_delete_dialog_button_cancel": "Zrušiť", - "account_delete_dialog_label": "Heslo", - "prefs_reservations_dialog_title_add": "Rezervovať tému", - "publish_dialog_button_cancel": "Zrušiť", - "account_upgrade_dialog_button_cancel": "Zrušiť", - "account_tokens_dialog_button_cancel": "Zrušiť", - "common_cancel": "Zrušiť", - "common_add": "Pridať", - "account_basics_username_title": "Používateľské meno", - "signup_form_password": "Heslo", - "signup_error_creation_limit_reached": "Dosiahnutý limit na vytvorenie konta", - "account_basics_password_title": "Heslo", - "action_bar_change_display_name": "Zmeniť zobrazovaný názov", - "prefs_users_dialog_password_label": "Heslo", - "action_bar_sign_up": "Zaregistrovať sa", - "login_link_signup": "Zaregistrovať sa", - "signup_already_have_account": "Už máte účet? Prihláste sa!", - "signup_disabled": "Registrácia je vypnutá", - "login_title": "Prihláste sa do svojho konta ntfy", - "action_bar_show_menu": "Zobraziť menu", - "action_bar_reservation_add": "Rezervovať tému", - "action_bar_reservation_delete": "Odstrániť rezerváciu", - "action_bar_reservation_limit_reached": "Dosiahnutý limit", - "action_bar_send_test_notification": "Odoslať testovacie oznámenie", - "action_bar_clear_notifications": "Vymazať všetky oznámenia", - "publish_dialog_message_placeholder": "Sem napíšte správu", - "action_bar_profile_logout": "Odhlásiť sa", - "message_bar_type_message": "Sem napíšte správu", - "message_bar_error_publishing": "Chyba pri zverejňovaní oznámenia", - "nav_button_documentation": "Dokumentácia", - "nav_button_publish_message": "Zverejniť oznámenie", - "nav_button_subscribe": "Odoberať tému", - "nav_button_muted": "Oznámenia stlmené", - "nav_button_connecting": "pripájanie", - "nav_upgrade_banner_description": "Rezervovať témy, viac správ a e-mailov a väčšie prílohy", - "nav_upgrade_banner_label": "Vylepšiť na ntfy Pro", - "alert_grant_title": "Oznámenia sú vypnuté", - "alert_grant_button": "Prideliť teraz", - "alert_not_supported_title": "Oznámenia nie sú podporované", - "alert_not_supported_description": "Oznámenia nie sú vo vašom prehliadači podporované.", - "notifications_attachment_copy_url_title": "Kopírovať URL adresu prílohy do schránky", - "notifications_attachment_copy_url_button": "Kopírovať adresu URL", - "notifications_attachment_open_title": "Prejsť na {{url}}", - "notifications_actions_open_url_title": "Prejsť na {{url}}", - "notifications_attachment_open_button": "Otvoriť prílohu", - "notifications_attachment_link_expires": "platnosť odkazu vyprší {{date}}", - "notifications_none_for_topic_description": "Ak chcete posielať oznámenia do tejto témy, jednoducho zadajte adresu PUT alebo POST na URL adresu témy.", - "notifications_actions_http_request_title": "Odoslať HTTP {{method}} na {{url}}", - "display_name_dialog_description": "Nastavenie alternatívneho názvu témy, ktorá sa zobrazuje v zozname odberov. Pomáha to ľahšie identifikovať témy so zložitými názvami.", - "prefs_users_table_base_url_header": "URL Adresa služby", - "publish_dialog_tags_placeholder": "Zoznam štítkov oddelených čiarkou, napr. varovanie, srv1-backup", - "publish_dialog_chip_click_label": "Kliknite na URL", - "publish_dialog_email_reset": "Odstrániť email na preposielanie", - "publish_dialog_click_reset": "Odobrať URL kliknutím", - "publish_dialog_attach_placeholder": "Pripojiť súbor pomocou URL adresy, napr. https://f-droid.org/F-Droid.apk", - "publish_dialog_chip_email_label": "Preposlanie na email", - "publish_dialog_chip_attach_file_label": "Pripojiť miestny súbor", - "publish_dialog_details_examples_description": "Príklady a podrobný opis všetkých funkcií odosielania nájdete v dokumentácii.", - "account_upgrade_dialog_tier_features_no_calls": "Žiadne telefonáty", - "account_upgrade_dialog_billing_contact_email": "V prípade otázok týkajúcich sa fakturácie nás prosím kontaktujte tu.", - "account_tokens_dialog_title_create": "Vytvoriť prístupový token", - "prefs_reservations_dialog_title_edit": "Upraviť rezervovanú tému", - "account_basics_tier_interval_monthly": "mesačne", - "account_basics_tier_canceled_subscription": "Vaše predplatné bolo zrušené a bude preradené na bezplatné konto k dátumu {{date}}.", - "priority_default": "predvolená", - "prefs_notifications_min_priority_title": "Najnižšia priorita", - "account_upgrade_dialog_tier_features_calls_one": "{{calls}} denný telefonát", - "account_upgrade_dialog_tier_current_label": "Aktuálne", - "account_basics_password_dialog_current_password_incorrect": "Nesprávne heslo", - "account_tokens_table_token_header": "Token", - "prefs_notifications_delete_after_never": "Nikdy", - "prefs_users_description": "Tu môžete pridávať/odstraňovať používateľov pre svoje chránené témy. Upozorňujeme, že používateľské meno a heslo sú uložené v lokálnom úložisku prehliadača.", - "account_basics_phone_numbers_dialog_number_label": "Telefónne číslo", - "subscribe_dialog_subscribe_description": "Témy nemusia byť chránené heslom, preto vyberte názov, ktorý nie je ľahké uhádnuť. Po prihlásení sa na odber môžete PUT/POST oznámenia.", - "account_basics_password_dialog_button_submit": "Zmeniť heslo", - "account_basics_phone_numbers_dialog_check_verification_button": "Potvrdiť kód", - "account_upgrade_dialog_interval_yearly_discount_save_up_to": "ušetrite až {{discount}}%", - "account_tokens_dialog_label": "Označenie, napr. Radarr notifications", - "account_tokens_table_expires_header": "Vyprší", - "account_upgrade_dialog_proration_info": "Vyhlásenie: Pri prechode medzi platenými plánmi sa rozdiel v cene účtuje okamžite. Pri prechode na nižšiu úroveň sa zostatok použije na platbu za budúce fakturačné obdobia.", - "prefs_reservations_dialog_access_label": "Prístup", - "account_usage_attachment_storage_title": "Ukladanie príloh", - "prefs_users_dialog_username_label": "Používateľské meno, napr. phil", - "account_usage_messages_title": "Zverejnené správy", - "emoji_picker_search_clear": "Vymazať vyhľadávanie", - "prefs_reservations_table_not_subscribed": "Odber nie je prihlásený", - "account_upgrade_dialog_tier_features_emails_other": "{{emails}} denné emaily", - "prefs_notifications_min_priority_max_only": "Iba najvyššia priorita", - "account_upgrade_dialog_tier_features_calls_other": "{{calls}} denné telefonáty", - "prefs_notifications_sound_description_some": "Oznámenia pri príchode prehrávajú zvuk {{sound}}", - "prefs_reservations_edit_button": "Upraviť prístup k téme", - "account_basics_phone_numbers_dialog_verify_button_sms": "Poslať SMS", - "account_basics_tier_change_button": "Zmeniť", - "account_tokens_dialog_expires_never": "Platnosť tokenu nikdy nevyprší", - "subscribe_dialog_login_title": "Vyžaduje sa prihlásenie", - "account_tokens_dialog_expires_x_days": "Token vyprší za {{days}} dní", - "prefs_reservations_table_everyone_read_only": "Môžem publikovať a odoberať, každý môže odoberať", - "prefs_reservations_table_everyone_deny_all": "Iba ja môžem publikovať a odoberať", - "account_basics_phone_numbers_dialog_description": "Ak chcete používať funkciu oznamovanie hovorom, musíte pridať a overiť aspoň jedno telefónne číslo. Overenie je možné vykonať prostredníctvom SMS alebo telefonického hovoru.", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} rezervovaná téma", - "account_delete_title": "Odstrániť účet", - "subscribe_dialog_login_button_login": "Prihlásenie", - "account_upgrade_dialog_tier_features_no_reservations": "Žiadne rezervované témy", - "prefs_users_table_cannot_delete_or_edit": "Nie je možné odstrániť alebo upraviť prihláseného používateľa", - "account_basics_tier_admin_suffix_with_tier": "(s úrovňou {{tier}})", - "prefs_notifications_delete_after_three_hours_description": "Oznámenia sa automaticky odstránia po troch hodinách", - "prefs_notifications_delete_after_three_hours": "Po troch hodinách", - "prefs_notifications_min_priority_description_x_or_higher": "Zobraziť oznámenia, ak je priorita {{number}} ({{name}}) alebo vyššia", - "reservation_delete_dialog_description": "Odstránením rezervácie sa vzdáte vlastníctva témy a umožníte ostatným, aby si ju rezervovali. Existujúce správy a prílohy si môžete ponechať alebo odstrániť.", - "subscribe_dialog_login_username_label": "Používateľské meno, napr. phil", - "subscribe_dialog_error_user_not_authorized": "Používateľ {{username}} nie je autorizovaný", - "prefs_reservations_table_everyone_read_write": "Každý môže publikovať a odoberať", - "prefs_reservations_dialog_title_delete": "Odstrániť rezervovanú tému", - "prefs_users_table": "Tabuľka používateľov", - "prefs_reservations_table_topic_header": "Téma", - "reservation_delete_dialog_submit_button": "Vymazať rezerváciu", - "prefs_reservations_limit_reached": "Dosiahli ste limit rezervovaných tém.", - "account_upgrade_dialog_interval_monthly": "Mesačne", - "prefs_users_add_button": "Pridať používateľa", - "account_upgrade_dialog_tier_features_messages_other": "{{messages}} denné správy", - "account_basics_phone_numbers_no_phone_numbers_yet": "Zatiaľ žiadne telefónne čísla", - "subscribe_dialog_subscribe_button_generate_topic_name": "Vygenerovať názov", - "prefs_appearance_language_title": "Jazyk", - "prefs_notifications_delete_after_one_day_description": "Oznámenia sa automaticky odstránia po jednom dni", - "subscribe_dialog_subscribe_button_subscribe": "Odoberať", - "account_tokens_table_never_expires": "Nikdy nevyprší", - "account_tokens_delete_dialog_title": "Odstrániť prístupový token", - "prefs_notifications_delete_after_one_month": "Po jednom mesiaci", - "account_basics_phone_numbers_dialog_title": "Pridať telefónne číslo", - "account_tokens_delete_dialog_description": "Pred odstránením prístupového tokenu sa uistite, že ho aktívne nepoužívajú žiadne aplikácie ani skripty. Túto akciu nie je možné vrátiť späť.", - "account_tokens_table_label_header": "Označenie", - "account_upgrade_dialog_billing_contact_website": "Otázky týkajúce sa fakturácie nájdete na našej webovej stránke.", - "account_basics_username_admin_tooltip": "Ste Admin", - "prefs_notifications_delete_after_never_description": "Oznámenia sa nikdy automaticky neodstránia", - "account_delete_dialog_description": "Tým sa vaše konto natrvalo odstráni vrátane všetkých údajov uložených na serveri. Po vymazaní bude vaše používateľské meno 7 dní nedostupné. Ak naozaj chcete pokračovať, potvrďte svoje heslo v poli nižšie.", - "account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} rezervované témy", - "account_usage_reservations_none": "Žiadne rezervované témy pre toto konto", - "prefs_notifications_sound_description_none": "Pri príchode oznámení sa neprehráva žiadny zvuk", - "account_tokens_description": "Pri publikovaní a prihlasovaní prostredníctvom rozhrania ntfy API používajte prístupové tokeny, aby ste nemuseli posielať prihlasovacie údaje k účtu. Viacej informácií nájdete v dokumentácií.", - "prefs_reservations_table": "Tabuľka rezervovaných tém", - "emoji_picker_search_placeholder": "Vyhľadať emoji", - "account_upgrade_dialog_button_cancel_subscription": "Zrušiť predplatné", - "account_upgrade_dialog_tier_features_emails_one": "{{emails}} denný email", - "account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} na jeden súbor", - "prefs_reservations_description": "Tu si môžete rezervovať názvy tém na osobné použitie. Rezervovaním témy získate vlastníctvo nad témou a môžete definovať prístupové práva pre ostatných používateľov k téme.", - "account_usage_title": "Používanie", - "account_basics_tier_upgrade_button": "Vylepšiť na PRO verziu", - "prefs_users_description_no_sync": "Používatelia a heslá nie sú synchronizované s vaším účtom.", - "account_tokens_dialog_title_edit": "Upraviť prístupový token", - "account_upgrade_dialog_tier_features_messages_one": "{{messages}} denná správa", - "account_upgrade_dialog_reservations_warning_one": "Vybraná úroveň umožňuje menej rezervovaných tém ako vaša aktuálna úroveň. Pred zmenou úrovne vymažte aspoň jednu rezerváciu. Rezervácie môžete odstrániť v Nastaveniach.", - "subscribe_dialog_error_topic_already_reserved": "Téma je už rezervovaná", - "prefs_users_table_user_header": "Používateľ", - "error_boundary_stack_trace": "Výpis zásobníka", - "prefs_notifications_delete_after_one_week": "Po jednom týždni", - "prefs_reservations_delete_button": "Resetovať prístup k téme", - "account_basics_tier_admin_suffix_no_tier": "(bez úrovne)", - "prefs_notifications_delete_after_one_week_description": "Oznámenia sa automaticky odstránia po jednom týždni", - "error_boundary_unsupported_indexeddb_description": "Webová aplikácia ntfy potrebuje na fungovanie IndexedDB a váš prehliadač nepodporuje IndexedDB v režime súkromného prehliadania.

Je to síce nešťastné, ale aj tak nemá veľký zmysel používať webovú aplikáciu ntfy v režime súkromného prehliadania, pretože všetko je uložené v úložisku prehliadača. Viac informácií si môžete prečítať v tomto probléme GitHubu alebo sa s nami porozprávať na Discord alebo Matrix.", - "account_basics_tier_payment_overdue": "Vaša platba je po termíne splatnosti. Aktualizujte prosím svoj spôsob platby, inak bude váš účet preradený do nižšej kategórie.", - "account_basics_tier_description": "Úroveň výkonu vášho účtu", - "account_basics_phone_numbers_description": "Pre oznamovanie hovorom", - "account_basics_tier_free": "Zadarmo", - "account_upgrade_dialog_cancel_warning": "Týmto zrušíte svoje predplatné a {{date}} prejdete na nižšiu úroveň svojho účtu. V tento deň budú odstránené rezervácie tém, ako aj správy uložené vo vyrovnávacej pamäti servera.", - "account_basics_tier_admin": "Admin", - "prefs_notifications_sound_title": "Zvuk oznámenia", - "prefs_notifications_min_priority_default_and_higher": "Predvolená priorita a vyššia", - "prefs_reservations_table_access_header": "Prístup", - "account_tokens_table_copied_to_clipboard": "Prístupový token skopírovaný", - "account_tokens_dialog_expires_x_hours": "Token vyprší za {{hours}} hodín", - "prefs_users_edit_button": "Upraviť používateľa", - "account_upgrade_dialog_title": "Zmeniť úroveň účtu", - "priority_low": "nízka", - "prefs_reservations_table_click_to_subscribe": "Kliknutím sa prihlásite na odber", - "account_basics_password_description": "Zmeniť heslo účtu", - "account_usage_calls_title": "Uskutočnené telefonické hovory", - "error_boundary_description": "Toto samozrejme nemalo nastať. Je mi to veľmi ľúto.
Ak máte chvíľu, nahláste to na GitHub alebo nám dajte vedieť cez Discord alebo Matrix.", - "priority_min": "najnižšia", - "account_basics_tier_basic": "Základný", - "prefs_notifications_min_priority_description_any": "Zobraziť všetky oznámenia bez ohľadu na prioritu", - "error_boundary_gathering_info": "Získajte viac informácií…", - "error_boundary_unsupported_indexeddb_title": "Súkromné prehliadanie nie je podporované", - "prefs_notifications_delete_after_one_day": "Po jednom dni", - "error_boundary_title": "Ale nie, ntfy prestalo fungovať", - "reservation_delete_dialog_action_keep_description": "Správy a prílohy, ktoré sú uložené v medzipamäti na serveri, budú verejne viditeľné pre ľudí, ktorí poznajú názov témy.", - "prefs_reservations_add_button": "Pridať rezervovanú tému", - "prefs_reservations_title": "Rezervované témy", - "account_basics_phone_numbers_copied_to_clipboard": "Telefónne číslo skopírované do schránky", - "prefs_reservations_dialog_description": "Rezervovaním témy získate vlastníctvo nad témou a môžete definovať prístupové práva pre ostatných používateľov k téme.", - "account_basics_tier_title": "Typ účtu", - "account_usage_cannot_create_portal_session": "Nemožnosť otvoriť fakturačný portál", - "account_tokens_delete_dialog_submit_button": "Trvalo odstrániť token", - "account_delete_description": "Natrvalo odstrániť vaše konto", - "account_basics_phone_numbers_dialog_number_placeholder": "napr. +1222333444", - "account_basics_phone_numbers_dialog_code_placeholder": "napr. 123456", - "prefs_notifications_title": "Oznámenia", - "account_basics_tier_manage_billing_button": "Spravovať fakturáciu", - "account_tokens_title": "Prístupové tokeny", - "account_basics_username_description": "Hej, to si ty ❤", - "prefs_reservations_dialog_topic_label": "Téma", - "prefs_users_title": "Správa používateľov", - "account_basics_tier_interval_yearly": "ročne", - "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} za rok. Účtuje sa mesačne.", - "account_delete_dialog_button_submit": "Natrvalo odstrániť konto", - "account_basics_phone_numbers_dialog_channel_call": "Hovor", - "account_basics_password_dialog_new_password_label": "Nové heslo", - "account_tokens_dialog_expires_unchanged": "Ponechať dátum skončenia platnosti nezmenený", - "error_boundary_button_copy_stack_trace": "Kopírovať výpis zásobníka", - "account_tokens_dialog_title_delete": "Odstrániť prístupový token", - "account_usage_of_limit": "z {{limit}}", - "reservation_delete_dialog_action_keep_title": "Ponechať správy a prílohy uložené v medzipamäti", - "prefs_notifications_sound_no_sound": "Bez zvuku", - "account_upgrade_dialog_interval_yearly": "Ročne", - "account_upgrade_dialog_button_redirect_signup": "Zaregistrujte sa teraz", - "subscribe_dialog_error_user_anonymous": "anonymný", - "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} účtovaná ročne. Uložiť {{save}}.", - "prefs_notifications_min_priority_high_and_higher": "Vysoká priorita a vyššia", - "account_usage_basis_ip_description": "Štatistiky a limity používania tohto účtu sú založené na vašej IP adrese, takže môžu byť zdieľané s ostatnými používateľmi. Vyššie uvedené limity sú približné hodnoty založené na existujúcich rýchlostných limitoch.", - "account_basics_password_dialog_title": "Zmeniť heslo", - "priority_max": "najvyššia", - "account_usage_limits_reset_daily": "Limity používania sa obnovujú denne o polnoci (UTC)", - "account_usage_unlimited": "Nekonečné", - "prefs_users_delete_button": "Odstrániť používateľa", - "prefs_notifications_min_priority_any": "Akákoľvek priorita", - "account_tokens_dialog_expires_label": "Platnosť prístupového tokenu vyprší za", - "account_basics_phone_numbers_title": "Telefónne čísla", - "prefs_notifications_delete_after_title": "Odstrániť oznámenia", - "account_upgrade_dialog_interval_yearly_discount_save": "ušetríte {{discount}}%", - "prefs_users_dialog_title_edit": "Upraviť používateľa", - "account_basics_password_dialog_current_password_label": "Aktuálne heslo", - "prefs_notifications_min_priority_low_and_higher": "Nízka priorita a vyššia", - "account_tokens_dialog_button_update": "Aktualizovať token", - "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} celkový úložný priestor", - "prefs_reservations_table_everyone_write_only": "Môžem publikovať a odoberať, každý môže publikovať", - "prefs_appearance_title": "Vzhlad", - "account_tokens_table_cannot_delete_or_edit": "Nie je možné upraviť alebo odstrániť aktuálny token relácie", - "prefs_notifications_sound_play": "Prehrať vybraný zvuk", - "account_tokens_table_last_access_header": "Posledný prístup", - "account_tokens_table_last_origin_tooltip": "Z IP adresy {{ip}}, kliknite na vyhľadávanie", - "account_usage_reservations_title": "Rezervované témy", - "account_upgrade_dialog_tier_price_per_month": "mesiac", - "account_usage_calls_none": "S týmto účtom nie je možné uskutočňovať žiadne telefonické hovory", - "account_tokens_table_current_session": "Aktuálna relácia prehliadača", - "account_upgrade_dialog_button_pay_now": "Zaplatiť a predplatiť si", - "subscribe_dialog_subscribe_use_another_label": "Použiť iný server", - "reservation_delete_dialog_action_delete_title": "Odstrániť správy a prílohy uložené v medzipamäti", - "account_basics_phone_numbers_dialog_code_label": "Overovací kód", - "reservation_delete_dialog_action_delete_description": "Správy a prílohy uložené v medzipamäti sa natrvalo vymažú. Túto akciu nemožno vrátiť späť.", - "account_basics_tier_paid_until": "Predplatné zaplatené do {{date}} s automatickou obnovou", - "account_usage_attachment_storage_description": "{{filesize}} na súbor, vymazaný po {{expiry}}", - "prefs_notifications_delete_after_one_month_description": "Oznámenia sa automaticky odstránia po jednom mesiaci", - "account_basics_phone_numbers_dialog_verify_button_call": "Zavolajte mi", - "prefs_users_dialog_base_url_label": "URL adresa služby, napr. https://ntfy.sh", - "account_usage_emails_title": "Odoslané emaily", - "account_basics_phone_numbers_dialog_channel_sms": "SMS", - "account_upgrade_dialog_tier_selected_label": "Vybrané", - "account_upgrade_dialog_button_update_subscription": "Aktualizovať predplatné", - "priority_high": "vysoká", - "account_delete_dialog_billing_warning": "Odstránením konta sa okamžite zruší aj vaše fakturačné predplatné. Už nebudete mať prístup k fakturačnému panelu.", - "prefs_notifications_min_priority_description_max": "Zobraziť oznámenia, ak je priorita 5 (max)", - "subscribe_dialog_login_description": "Táto téma je chránená heslom. Ak sa chcete prihlásiť na odber témy, zadajte používateľské meno a heslo.", - "account_upgrade_dialog_reservations_warning_other": "Vybraná úroveň umožňuje menej rezervovaných tém ako vaša aktuálna úroveň. Pred zmenou úrovne vymažte aspoň {{count}} rezervácií. Rezervácie môžete odstrániť v Nastaveniach.", - "prefs_users_dialog_title_add": "Pridať používateľa", - "account_tokens_dialog_button_create": "Vytvoriť token", - "account_tokens_table_create_token_button": "Vytvoriť prístupový token" -} diff --git a/web/public/static/langs/tr.json b/web/public/static/langs/tr.json index 28eca9f6..be8ddf47 100644 --- a/web/public/static/langs/tr.json +++ b/web/public/static/langs/tr.json @@ -77,7 +77,7 @@ "notifications_example": "Örnek", "notifications_more_details": "Daha fazla bilgi için web sitesine veya belgelendirmeye bakın.", "publish_dialog_chip_attach_url_label": "URL ile dosya ekle", - "prefs_notifications_min_priority_default_and_higher": "Varsayılan öncelik ve üstü", + "prefs_notifications_min_priority_default_and_higher": "Öntanımlı öncelik ve üstü", "prefs_notifications_delete_after_three_hours": "Üç saat sonra", "notifications_none_for_any_description": "Bir konuya bildirim göndermek için konu URL'sine PUT veya POST göndermeniz yeterlidir. İşte konularınızdan birini kullanan bir örnek.", "notifications_no_subscriptions_title": "Henüz aboneliğiniz yok gibi görünüyor.", diff --git a/web/public/static/langs/vi.json b/web/public/static/langs/vi.json index b2f94441..0967ef42 100644 --- a/web/public/static/langs/vi.json +++ b/web/public/static/langs/vi.json @@ -1,21 +1 @@ -{ - "common_add": "Thêm", - "common_back": "Quay lại", - "signup_title": "Tạo tài khoản ntfy", - "signup_form_toggle_password_visibility": "Hiện mật khẩu", - "login_form_button_submit": "Đăng nhập", - "common_copy_to_clipboard": "Lưu vào clipboard", - "signup_form_username": "Tên user", - "signup_already_have_account": "Đã có tài khoản? Đăng nhập!", - "signup_disabled": "Đăng kí bị đóng", - "signup_error_username_taken": "Tên {{username}} đã được sử dụng", - "signup_error_creation_limit_reached": "Đã bị giới hạn tạo tài khoản", - "login_title": "Đăng nhập vào tài khoản ntfy", - "login_link_signup": "Đăng kí", - "login_disabled": "Đăng nhập bị đóng", - "action_bar_show_menu": "Hiện menu", - "signup_form_password": "Mật khẩu", - "action_bar_settings": "Cài đặt", - "signup_form_confirm_password": "Xác nhận mật khẩu", - "signup_form_button_submit": "Đăng kí" -} +{} diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index e26e7f14..e2904e9e 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -1,13 +1,11 @@ { "action_bar_show_menu": "显示菜单", "action_bar_logo_alt": "ntfy图标", - "action_bar_mute_notifications": "静音", "action_bar_settings": "设置", "action_bar_send_test_notification": "发送测试通知", "action_bar_clear_notifications": "清除所有通知", "action_bar_unsubscribe": "取消订阅", "action_bar_toggle_action_menu": "开启或关闭操作菜单", - "action_bar_unmute_notifications": "取消静音", "message_bar_type_message": "在此处输入消息", "message_bar_show_dialog": "显示发布对话框", "message_bar_publish": "发布消息", @@ -22,10 +20,6 @@ "alert_notification_permission_required_button": "现在授予", "alert_not_supported_title": "不支持通知", "alert_not_supported_description": "您的浏览器不支持通知。", - "alert_notification_ios_install_required_description": "要接收通知,请在iOS上点击分享图标,然后添加到主屏幕。", - "alert_notification_ios_install_required_title": "需要安装iOS应用程序", - "alert_notification_permission_denied_description": "你已禁用通知。要重新启用通知,请在浏览器设置中启用通知。", - "alert_notification_permission_denied_title": "已禁用通知", "notifications_list": "通知列表", "notifications_list_item": "通知", "notifications_mark_read": "标记为已读", @@ -123,9 +117,9 @@ "prefs_notifications_min_priority_description_x_or_higher": "仅显示优先级为{{number}}({{name}})或以上的通知", "prefs_notifications_min_priority_description_max": "仅显示最高优先级的通知", "prefs_notifications_min_priority_any": "任意优先级", - "prefs_notifications_min_priority_low_and_higher": "低优先级或更高", - "prefs_notifications_min_priority_default_and_higher": "默认优先级或更高", - "prefs_notifications_min_priority_high_and_higher": "高优先级或更高", + "prefs_notifications_min_priority_low_and_higher": "低优先级和更高优先级", + "prefs_notifications_min_priority_default_and_higher": "默认优先级和更高优先级", + "prefs_notifications_min_priority_high_and_higher": "高优先级和更高优先级", "prefs_notifications_min_priority_max_only": "仅最高优先级", "prefs_notifications_delete_after_never": "从不", "prefs_notifications_delete_after_one_month": "一月后", @@ -135,11 +129,6 @@ "prefs_notifications_delete_after_one_day_description": "一天后自动删除通知", "prefs_notifications_delete_after_one_week_description": "一周后自动删除通知", "prefs_notifications_delete_after_one_month_description": "一月后后自动删除通知", - "prefs_notifications_web_push_disabled": "已暂用", - "prefs_notifications_web_push_disabled_description": "当网页程序在运行时将会收到通知 (透过 WebSocket)", - "prefs_notifications_web_push_enabled": "已为 {{server}} 启用", - "prefs_notifications_web_push_enabled_description": "即使网页程序未有运行亦会收到通知 (via Web Push)", - "prefs_notifications_web_push_title": "背景通知", "prefs_users_title": "管理用户", "prefs_users_description": "在此处添加/删除受保护主题的用户。请注意,用户名和密码存储在浏览器的本地存储中。", "prefs_users_add_button": "添加用户", @@ -151,10 +140,6 @@ "common_save": "保存", "prefs_appearance_title": "外观", "prefs_appearance_language_title": "语言", - "prefs_appearance_theme_title": "主題", - "prefs_appearance_theme_system": "系統 (預設)", - "prefs_appearance_theme_dark": "黑暗模式", - "prefs_appearance_theme_light": "光亮模式", "priority_min": "最低", "priority_low": "低", "priority_default": "默认", @@ -164,7 +149,6 @@ "prefs_users_table_base_url_header": "服务链接地址", "prefs_users_dialog_base_url_label": "服务链接地址,例如 https://ntfy.sh", "error_boundary_button_copy_stack_trace": "复制堆栈跟踪", - "error_boundary_button_reload_ntfy": "重新加载 ntfy", "error_boundary_stack_trace": "堆栈跟踪", "error_boundary_gathering_info": "收集更多信息……", "error_boundary_unsupported_indexeddb_title": "不支持隐私浏览", @@ -176,7 +160,6 @@ "notifications_attachment_copy_url_button": "复制链接地址", "notifications_attachment_open_title": "转到 {{url}}", "notifications_actions_http_request_title": "发送 HTTP {{method}} 到 {{url}}", - "notifications_actions_failed_notification": "通知失败", "notifications_actions_open_url_title": "转到 {{url}}", "notifications_none_for_topic_description": "要向此主题发送通知,只需使用 PUT 或 POST 到主题链接即可。", "subscribe_dialog_subscribe_topic_placeholder": "主题名,例如 phil_alerts", @@ -185,14 +168,12 @@ "publish_dialog_title_placeholder": "主题标题,例如 磁盘空间告警", "publish_dialog_email_label": "电子邮件", "publish_dialog_button_send": "发送", - "publish_dialog_checkbox_markdown": "格式化为 Markdown", "publish_dialog_attachment_limits_quota_reached": "超过配额,剩余 {{remainingBytes}}", "publish_dialog_attach_label": "附件链接地址", "publish_dialog_click_reset": "移除点击连接地址", "publish_dialog_button_cancel": "取消", "subscribe_dialog_subscribe_button_cancel": "取消", "subscribe_dialog_subscribe_base_url_label": "服务地址地址", - "subscribe_dialog_subscribe_use_another_background_info": "当网页程序未开启, 将不会收到来自其他服务器的通知", "prefs_notifications_min_priority_description_any": "显示所有通知,无论优先级如何", "prefs_notifications_delete_after_title": "删除通知", "prefs_notifications_delete_after_three_hours": "三小时后", @@ -399,9 +380,5 @@ "account_basics_phone_numbers_dialog_verify_button_call": "拨打电话", "account_upgrade_dialog_tier_features_messages_one": "一条每日消息", "account_upgrade_dialog_tier_features_calls_other": "{{calls}} 通每日电话", - "account_upgrade_dialog_tier_features_no_calls": "无电话呼叫", - "web_push_subscription_expiring_title": "通知将被暂停", - "web_push_subscription_expiring_body": "打开ntfy以继续接收通知", - "web_push_unknown_notification_title": "接收到未知通知", - "web_push_unknown_notification_body": "你可能需要打开网页来更新ntfy" + "account_upgrade_dialog_tier_features_no_calls": "无电话呼叫" } diff --git a/web/public/static/langs/zh_Hant.json b/web/public/static/langs/zh_Hant.json index 683f5a9f..9b0dd372 100644 --- a/web/public/static/langs/zh_Hant.json +++ b/web/public/static/langs/zh_Hant.json @@ -1,407 +1,220 @@ { - "account_basics_password_description": "更改你的帳戶密碼", - "account_basics_password_dialog_button_submit": "更改密碼", - "account_basics_password_dialog_confirm_password_label": "確認密碼", - "account_basics_password_dialog_current_password_incorrect": "密碼錯誤", - "account_basics_password_dialog_current_password_label": "當前密碼", - "account_basics_password_dialog_new_password_label": "新密碼", - "account_basics_password_dialog_title": "更改密碼", - "account_basics_password_title": "密碼", - "account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼板", - "account_basics_phone_numbers_description": "電話通知", - "account_basics_phone_numbers_dialog_channel_call": "撥打", - "account_basics_phone_numbers_dialog_channel_sms": "短信", - "account_basics_phone_numbers_dialog_check_verification_button": "確認碼", - "account_basics_phone_numbers_dialog_code_label": "驗證碼", - "account_basics_phone_numbers_dialog_code_placeholder": "例如:123456", - "account_basics_phone_numbers_dialog_description": "要使用來電通知功能,你需要新增並驗證至少一個電話號碼。可以通過短信或電話驗證。", - "account_basics_phone_numbers_dialog_number_label": "電話號碼", - "account_basics_phone_numbers_dialog_number_placeholder": "例如:+1222333444", - "account_basics_phone_numbers_dialog_title": "新增電話號碼", - "account_basics_phone_numbers_dialog_verify_button_call": "撥打電話", - "account_basics_phone_numbers_dialog_verify_button_sms": "發送資訊", - "account_basics_phone_numbers_no_phone_numbers_yet": "無可執行的電話號碼", - "account_basics_phone_numbers_title": "電話號碼", - "account_basics_tier_admin_suffix_no_tier": "(無等級)", - "account_basics_tier_admin_suffix_with_tier": "(有 {{tier}} 等級)", - "account_basics_tier_admin": "管理員", - "account_basics_tier_basic": "基礎版", - "account_basics_tier_canceled_subscription": "你的訂閱已取消,並將在 {{date}} 降級為免費帳戶。", - "account_basics_tier_change_button": "改變", - "account_basics_tier_description": "你帳戶的權限級別", - "account_basics_tier_free": "免費", - "account_basics_tier_interval_monthly": "每月", - "account_basics_tier_interval_yearly": "每年", - "account_basics_tier_manage_billing_button": "管理計費", - "account_basics_tier_paid_until": "訂閱已支付至 {{date}},並將自動續訂", - "account_basics_tier_payment_overdue": "你的付款已逾期。請更新你的付款方式,否則你的帳戶將很快被降級。", - "account_basics_tier_title": "帳戶類型", - "account_basics_tier_upgrade_button": "升級到專業版", - "account_basics_title": "帳戶", - "account_basics_username_admin_tooltip": "你是管理員", - "account_basics_username_description": "嘿,那是你 ❤", - "account_basics_username_title": "用戶名", - "account_delete_description": "永久刪除你的帳戶", - "account_delete_dialog_billing_warning": "刪除你的帳戶也會立即取消你的計費訂閱。你將無法再訪問計費儀錶板。", - "account_delete_dialog_button_cancel": "取消", - "account_delete_dialog_button_submit": "永久刪除帳戶", - "account_delete_dialog_description": "這將永久刪除你的帳戶,包括存儲在伺服器上的所有數據。刪除後,你的用戶名將在 7 天內不可用。如果你真的想繼續,請在下面的框中使用你的密碼作確認。", - "account_delete_dialog_label": "密碼", - "account_delete_title": "刪除帳戶", - "account_tokens_delete_dialog_description": "在刪除訪問令牌之前,請確保沒有應用程序或腳本正在活躍使用它。 此操作無法撤銷。", - "account_tokens_delete_dialog_submit_button": "永久删除令牌", - "account_tokens_delete_dialog_title": "刪除訪問令牌", - "account_tokens_description": "通過 ntfy API 發布和訂閱時使用訪問令牌,因此你不必發送你的帳戶憑證。查看文檔以了解更多資訊。", - "account_tokens_dialog_button_cancel": "取消", - "account_tokens_dialog_button_create": "創建令牌", - "account_tokens_dialog_button_update": "更新令牌", - "account_tokens_dialog_expires_label": "訪問令牌過期於", - "account_tokens_dialog_expires_never": "令牌永不過期", - "account_tokens_dialog_expires_unchanged": "保持過期日期不變", - "account_tokens_dialog_expires_x_days": "令牌在 {{days}} 天後過期", - "account_tokens_dialog_expires_x_hours": "令牌在 {{hours}} 小時後過期", - "account_tokens_dialog_label": "標籤,例如:Radarr 通知", - "account_tokens_dialog_title_create": "創建訪問令牌", - "account_tokens_dialog_title_delete": "刪除訪問令牌", - "account_tokens_dialog_title_edit": "編輯訪問令牌", - "account_tokens_table_cannot_delete_or_edit": "無法編輯或刪除當前會話令牌", - "account_tokens_table_copied_to_clipboard": "已複製訪問令牌", - "account_tokens_table_create_token_button": "創建訪問令牌", - "account_tokens_table_current_session": "當前瀏覽器會話", - "account_tokens_table_expires_header": "過期", - "account_tokens_table_label_header": "標籤", - "account_tokens_table_last_access_header": "最後訪問", - "account_tokens_table_last_origin_tooltip": "於IP地址 {{ip}},點擊查找", - "account_tokens_table_never_expires": "永不過期", - "account_tokens_table_token_header": "令牌", - "account_tokens_title": "訪問令牌", - "account_upgrade_dialog_billing_contact_email": "有關賬單問題,請直接聯繫我們 。", - "account_upgrade_dialog_billing_contact_website": "有關賬單問題,請參考我們的網站 。", - "account_upgrade_dialog_button_cancel_subscription": "取消訂閱", - "account_upgrade_dialog_button_cancel": "取消", - "account_upgrade_dialog_button_pay_now": "立即付款並訂閱", - "account_upgrade_dialog_button_redirect_signup": "立即註冊", - "account_upgrade_dialog_button_update_subscription": "更新訂閱", - "account_upgrade_dialog_cancel_warning": "這將取消你的訂閱,並在 {{date}} 降級你的帳戶。在那一天,主題保留以及緩存在伺服器上的訊息將被刪除。", - "account_upgrade_dialog_interval_monthly": "每月", - "account_upgrade_dialog_interval_yearly_discount_save_up_to": "節省高達 {{discount}}%", - "account_upgrade_dialog_interval_yearly_discount_save": "節省 {{discount}}%", - "account_upgrade_dialog_interval_yearly": "每年", - "account_upgrade_dialog_proration_info": "按比例分配:在付費計劃之間升級時,差價將被立刻收取。在降級到較低級別時,餘額將被用於支付未來的賬單周期。", - "account_upgrade_dialog_reservations_warning_one": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,請至少刪除 1 項保留。你可以在設置中刪除保留。", - "account_upgrade_dialog_reservations_warning_other": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,請至少刪除 {{count}} 項保留。你可以在設置中刪除保留。", - "account_upgrade_dialog_tier_current_label": "當前", - "account_upgrade_dialog_tier_features_attachment_file_size": "每個文件 {{filesize}} ", - "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} 總存儲空間", - "account_upgrade_dialog_tier_features_calls_one": "每日一通電話", - "account_upgrade_dialog_tier_features_calls_other": "每日{{calls}} 通電話", - "account_upgrade_dialog_tier_features_emails_one": "每日一封郵件", - "account_upgrade_dialog_tier_features_emails_other": "每日 {{emails}} 條郵件", - "account_upgrade_dialog_tier_features_messages_one": "每日一條訊息", - "account_upgrade_dialog_tier_features_messages_other": "每日 {{messages}} 條訊息", - "account_upgrade_dialog_tier_features_no_calls": "沒有電話", - "account_upgrade_dialog_tier_features_no_reservations": "無保留主題", - "account_upgrade_dialog_tier_features_reservations_one": "保留一條主題", - "account_upgrade_dialog_tier_features_reservations_other": "保留 {{reservations}} 條主題", - "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月計費。", - "account_upgrade_dialog_tier_price_billed_yearly": "{{價格}} 按年計費。節省 {{save}}。", - "account_upgrade_dialog_tier_price_per_month": "月", - "account_upgrade_dialog_tier_selected_label": "已選", - "account_upgrade_dialog_title": "更改帳戶等級", - "account_usage_attachment_storage_description": "每個文件 {{filesize}},在 {{expiry}} 後刪除", - "account_usage_attachment_storage_title": "附件存儲", - "account_usage_basis_ip_description": "此帳戶的使用統計資訊和限制基於你的 IP 地址,因此可能會與其他用戶共享。上面顯示的限制是基於現有速率限制的近似值。", - "account_usage_calls_none": "此帳號無法撥打電話", - "account_usage_calls_title": "已撥打電話", - "account_usage_cannot_create_portal_session": "無法打開計費門戶", - "account_usage_emails_title": "已發送電子郵件", - "account_usage_limits_reset_daily": "使用限制每天午夜 (UTC) 重置", - "account_usage_messages_title": "已發布訊息", - "account_usage_of_limit": "{{limit}} 的", - "account_usage_reservations_none": "此帳戶沒有保留主題", - "account_usage_reservations_title": "保留主題", - "account_usage_title": "使用量", - "account_usage_unlimited": "無限", - "action_bar_account": "帳戶", - "action_bar_change_display_name": "更改顯示名稱", - "action_bar_clear_notifications": "清除所有通知", "action_bar_logo_alt": "ntfy 標識", - "action_bar_mute_notifications": "靜音", - "action_bar_profile_logout": "登出", - "action_bar_profile_settings": "設定", - "action_bar_profile_title": "個人資料", - "action_bar_reservation_add": "保留主題", - "action_bar_reservation_delete": "移除保留", - "action_bar_reservation_edit": "更改保留", - "action_bar_reservation_limit_reached": "達到限制", - "action_bar_send_test_notification": "發送測試通知", - "action_bar_settings": "設定", - "action_bar_show_menu": "顯示選單", - "action_bar_sign_in": "登錄", - "action_bar_sign_up": "註冊", - "action_bar_toggle_action_menu": "開啟或關閉操作選單", - "action_bar_toggle_mute": "通知靜音/解除通知靜音", - "action_bar_unmute_notifications": "取消靜音", "action_bar_unsubscribe": "取消訂閱", - "alert_notification_ios_install_required_description": "要接收通知,請在 iOS 上點擊共享,然後添加到主屏幕", - "alert_notification_ios_install_required_title": "需要安裝 iOS 應用程式", - "alert_notification_permission_denied_description": "你已禁用通知。要重新啟用通知,請在瀏覽器設置中啟用通知。", - "alert_notification_permission_denied_title": "已禁用通知", - "alert_notification_permission_required_button": "現在授予", - "alert_notification_permission_required_description": "授予瀏覽器顯示桌面通知的權限。", - "alert_notification_permission_required_title": "已禁用通知", - "alert_not_supported_context_description": "通知僅支援 HTTPS。這是 Notifications API 的限制。", - "alert_not_supported_description": "你的瀏覽器不支援通知。", - "alert_not_supported_title": "不支援通知", - "common_add": "新增", - "common_back": "返回", - "common_cancel": "取消", - "common_copy_to_clipboard": "複製到剪貼板", - "common_save": "保存", - "display_name_dialog_description": "為訂閱列表中顯示的主題設置一個替代名稱。這有助於更輕鬆地識別名稱複雜的主題。", - "display_name_dialog_placeholder": "顯示名稱", - "display_name_dialog_title": "更改顯示名稱", - "emoji_picker_search_clear": "清除搜索", - "emoji_picker_search_placeholder": "查找表情符號", - "error_boundary_button_copy_stack_trace": "複製堆疊追踪", - "error_boundary_button_reload_ntfy": "重新加載 ntfy", - "error_boundary_description": "這顯然不應該發生。對此非常抱歉。
如果你有時間,請在GitHub上報告,或通過DiscordMatrix告訴我們。", - "error_boundary_gathering_info": "收集更多資訊……", - "error_boundary_stack_trace": "堆疊追踪", - "error_boundary_title": "天啊,ntfy 崩潰了", - "error_boundary_unsupported_indexeddb_description": "Ntfy Web應用程式需要IndexedDB才能運行,且你的瀏覽器在隱私瀏覽模式下不支援IndexedDB。

儘管這很不幸,但在隱私瀏覽模式下使用ntfy Web應用程式也沒有多大意義,因為所有東西都存儲在瀏覽器存儲中。你可以在本GitHub問題中閱讀有關它的更多資訊,或者在DiscordMatrix上與我們交談。", - "error_boundary_unsupported_indexeddb_title": "不支援隱私瀏覽", - "login_disabled": "登錄已禁用", - "login_form_button_submit": "登錄", - "login_link_signup": "註冊", - "login_title": "請登錄你的 ntfy 帳戶", - "message_bar_error_publishing": "發佈通知時出錯", - "message_bar_publish": "發布訊息", - "message_bar_show_dialog": "顯示發布對話框", - "message_bar_type_message": "在此處輸入訊息", - "nav_button_account": "帳戶", - "nav_button_all_notifications": "全部通知", - "nav_button_connecting": "正在連接", - "nav_button_documentation": "文檔", - "nav_button_muted": "已暫停通知", - "nav_button_publish_message": "發布通知", + "action_bar_toggle_mute": "通知靜音/解除通知靜音", + "action_bar_toggle_action_menu": "開啟/關閉操作選單", + "message_bar_type_message": "在這輸入訊息", + "alert_notification_permission_required_description": "允許瀏覽器權限以顯示桌面通知。", + "alert_notification_permission_required_button": "允許", + "notifications_list": "通知清單", + "notifications_list_item": "通知", + "notifications_mark_read": "標示已讀", + "notifications_attachment_image": "附加圖片", + "notifications_attachment_copy_url_title": "複製附件 URL 到剪貼簿", + "notifications_attachment_copy_url_button": "複製 URL", + "notifications_attachment_open_title": "前往 {{url}}", + "notifications_attachment_open_button": "開啟附件", + "notifications_attachment_link_expired": "下載連結已過期", + "notifications_attachment_file_video": "影片檔案", + "notifications_attachment_file_app": "Android 應用程式檔案", + "notifications_attachment_file_document": "其他文件", + "notifications_click_copy_url_title": "複製連結 URL 到剪貼板", + "notifications_click_copy_url_button": "複製連結", + "notifications_click_open_button": "開啟連結", + "notifications_actions_not_supported": "網頁程式無法支援該動作", + "notifications_actions_http_request_title": "傳送 HTTP {{method}} 到 {{url}}", + "notifications_none_for_topic_title": "尚未收到任何此主題的通知。", + "notifications_none_for_topic_description": "如要寄送通知到此主題,請使用 PUT 或 POST 到此主題URL。", + "notifications_none_for_any_title": "尚未收到任何通知。", + "action_bar_settings": "設定", + "action_bar_send_test_notification": "發送測試通知", + "action_bar_clear_notifications": "清除所有通知", + "action_bar_show_menu": "顯示選單", + "nav_button_documentation": "文件", + "nav_button_publish_message": "發佈通知", + "nav_button_muted": "通知已靜音", + "notifications_copied_to_clipboard": "已複製到剪貼簿", + "message_bar_publish": "發佈訊息", + "message_bar_show_dialog": "顯示發佈對話框", + "message_bar_error_publishing": "發佈通知時發生錯誤", + "nav_topics_title": "訂閱主題", + "nav_button_all_notifications": "所有通知", "nav_button_settings": "設定", "nav_button_subscribe": "訂閱主題", - "nav_topics_title": "訂閱主題", - "nav_upgrade_banner_description": "保留主題,更多訊息和郵件,以及更大的附件", - "nav_upgrade_banner_label": "升級到 ntfy Pro", - "notifications_actions_failed_notification": "通知失敗", - "notifications_actions_http_request_title": "發送 HTTP {{method}} 到 {{url}}", - "notifications_actions_not_supported": "網頁應用程序不支援此操作", - "notifications_actions_open_url_title": "轉到 {{url}}", - "notifications_attachment_copy_url_button": "複製連結地址", - "notifications_attachment_copy_url_title": "將附件中連結地址複製到剪貼板", - "notifications_attachment_file_app": "安卓應用程式", - "notifications_attachment_file_audio": "聲音文件", - "notifications_attachment_file_document": "其他文件", - "notifications_attachment_file_image": "圖片文件", - "notifications_attachment_file_video": "影片文件", - "notifications_attachment_image": "附件圖片", - "notifications_attachment_link_expired": "下載連結已過期", - "notifications_attachment_link_expires": "連結在 {{date}} 過期", - "notifications_attachment_open_button": "打開附件", - "notifications_attachment_open_title": "轉到 {{url}}", - "notifications_click_copy_url_button": "複製鏈結", - "notifications_click_copy_url_title": "複製鏈結地址到剪貼板", - "notifications_click_open_button": "打開鏈結", - "notifications_copied_to_clipboard": "複製到剪貼板", - "notifications_delete": "刪除", - "notifications_example": "示例", - "notifications_list_item": "通知", - "notifications_list": "通知列表", - "notifications_loading": "正在加載通知……", - "notifications_mark_read": "標記為已讀", - "notifications_more_details": "有關更多資訊,請查看網站文檔。", + "nav_button_connecting": "連線中", + "alert_notification_permission_required_title": "通知已關閉", + "alert_not_supported_title": "不支援通知", + "alert_not_supported_description": "瀏覽器不支援通知。", + "notifications_tags": "標籤", + "notifications_priority_x": "優先度 {{priority}}", "notifications_new_indicator": "新通知", - "notifications_none_for_any_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題鏈結即可。以下是使用你的主題的示例。", - "notifications_none_for_any_title": "你尚未收到任何通知。", - "notifications_none_for_topic_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題連結即可。", - "notifications_none_for_topic_title": "你尚未收到有關此主題的任何通知。", - "notifications_no_subscriptions_description": "點擊 \"{{linktext}}\" 連結以建立或訂閱主題。之後,你可以使用 PUT 或 POST 發送訊息,你將在這裡收到通知。", - "notifications_no_subscriptions_title": "看起來你還未有任何訂閱", - "notifications_priority_x": "優先級 {{priority}}", - "notifications_tags": "標記", - "prefs_appearance_language_title": "語言", - "prefs_appearance_theme_dark": "黑暗模式", - "prefs_appearance_theme_light": "光亮模式", - "prefs_appearance_theme_system": "系統 (預設)", - "prefs_appearance_theme_title": "主題", - "prefs_appearance_title": "外觀", - "prefs_notifications_delete_after_never_description": "永不自動刪除通知", + "notifications_attachment_file_audio": "聲音檔案", + "notifications_delete": "刪除", + "notifications_attachment_link_expires": "連結在 {{date}} 過期", + "notifications_attachment_file_image": "圖片檔案", + "notifications_actions_open_url_title": "前往 {{url}}", + "notifications_no_subscriptions_title": "你尚未有任何訂閱。", + "notifications_example": "範例", + "notifications_more_details": "你可以在 ntfy 網站或者技術文件中查看更多資訊。", + "notifications_loading": "載入中…", + "publish_dialog_title_topic": "發佈到 {{topic}}", + "publish_dialog_title_no_topic": "發佈通知", + "publish_dialog_progress_uploading": "上傳中…", + "publish_dialog_priority_label": "優先度", + "publish_dialog_email_label": "電郵地址", + "publish_dialog_filename_label": "檔案名稱", + "publish_dialog_button_cancel": "取消", + "publish_dialog_button_send": "傳送", + "publish_dialog_button_cancel_sending": "取消傳送", + "subscribe_dialog_subscribe_button_cancel": "取消", + "subscribe_dialog_subscribe_button_subscribe": "訂閱", + "emoji_picker_search_clear": "清除", + "subscribe_dialog_login_password_label": "密碼", + "common_back": "返回", + "subscribe_dialog_login_button_login": "登入", "prefs_notifications_delete_after_never": "從不", - "prefs_notifications_delete_after_one_day_description": "一天後自動刪除通知", - "prefs_notifications_delete_after_one_day": "一天後", - "prefs_notifications_delete_after_one_month_description": "一個月後自動刪除通知", - "prefs_notifications_delete_after_one_month": "一個月後", - "prefs_notifications_delete_after_one_week_description": "一周後自動刪除通知", - "prefs_notifications_delete_after_one_week": "一周後", - "prefs_notifications_delete_after_three_hours_description": "三小時後自動刪除通知", - "prefs_notifications_delete_after_three_hours": "三小時後", - "prefs_notifications_delete_after_title": "刪除通知", - "prefs_notifications_min_priority_any": "任意優先級", - "prefs_notifications_min_priority_default_and_higher": "默認優先級或更高", - "prefs_notifications_min_priority_description_any": "顯示所有通知,無論優先級如何", - "prefs_notifications_min_priority_description_max": "僅顯示最高優先級的通知", - "prefs_notifications_min_priority_description_x_or_higher": "僅顯示優先級為{{number}}({{name}})或以上的通知", - "prefs_notifications_min_priority_high_and_higher": "高優先級或更高", - "prefs_notifications_min_priority_low_and_higher": "低優先級或更高", - "prefs_notifications_min_priority_max_only": "僅最高優先級", - "prefs_notifications_min_priority_title": "最低優先級", - "prefs_notifications_sound_description_none": "收到通知時不播放任何聲音", - "prefs_notifications_sound_description_some": "收到通知時播放 {{sound}} 聲音", - "prefs_notifications_sound_no_sound": "靜音", - "prefs_notifications_sound_play": "播放選中聲音", - "prefs_notifications_sound_title": "通知提示音", - "prefs_notifications_title": "通知", - "prefs_notifications_web_push_disabled_description": "當網頁程式在運行時將會收到通知 (透過 WebSocket)", - "prefs_notifications_web_push_disabled": "己暫用", - "prefs_notifications_web_push_enabled_description": "即使網頁程式未有運街亦會收到通知 (via Web Push)", - "prefs_notifications_web_push_enabled": "己為 {{server}} 啟用", - "prefs_notifications_web_push_title": "背景通知", - "prefs_reservations_add_button": "新增保留主題", - "prefs_reservations_delete_button": "重置主題訪問", - "prefs_reservations_description": "你可以在此處保留主題名稱供個人使用。保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。", - "prefs_reservations_dialog_access_label": "訪問", - "prefs_reservations_dialog_description": "保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。", - "prefs_reservations_dialog_title_add": "保留主題", - "prefs_reservations_dialog_title_delete": "刪除主題保留", - "prefs_reservations_dialog_title_edit": "編輯保留主題", - "prefs_reservations_dialog_topic_label": "主題", - "prefs_reservations_edit_button": "編輯主題訪問", - "prefs_reservations_limit_reached": "你已達到保留主題限制。", - "prefs_reservations_table_access_header": "訪問", - "prefs_reservations_table_click_to_subscribe": "點擊以訂閱", - "prefs_reservations_table_everyone_deny_all": "只有我可以發佈和訂閱", - "prefs_reservations_table_everyone_read_only": "我可以發佈和訂閱,每個人都可以訂閱", - "prefs_reservations_table_everyone_read_write": "每個人都可以發佈和訂閱", - "prefs_reservations_table_everyone_write_only": "我可以發佈和訂閱,每個人都可以發佈", - "prefs_reservations_table_not_subscribed": "未訂閱", - "prefs_reservations_table_topic_header": "主題", - "prefs_reservations_table": "保留主題表格", - "prefs_reservations_title": "保留主題", "prefs_users_add_button": "新增使用者", - "prefs_users_delete_button": "刪除用戶", - "prefs_users_description_no_sync": "用戶和密碼不會同步到你的賬戶。", - "prefs_users_description": "在此處新增/刪除受保護主題的使用者。請注意,使用者名和密碼將存儲在瀏覽器的本地存儲中。", - "prefs_users_dialog_base_url_label": "服務連結地址,例如 https://ntfy.sh", "prefs_users_dialog_password_label": "密碼", "prefs_users_dialog_title_add": "新增使用者", - "prefs_users_dialog_title_edit": "編輯使用者", - "prefs_users_dialog_username_label": "使用者名,例如 phil", - "prefs_users_edit_button": "編輯用戶", - "prefs_users_table_base_url_header": "服務連結地址", - "prefs_users_table_cannot_delete_or_edit": "無法刪除或編輯已登錄用戶", - "prefs_users_table_user_header": "用戶", - "prefs_users_table": "用戶表", - "prefs_users_title": "管理使用者", - "priority_default": "預設", - "priority_high": "高", - "priority_low": "低", - "priority_max": "最高", - "priority_min": "最低", - "publish_dialog_attached_file_filename_placeholder": "附件文件名", - "publish_dialog_attached_file_remove": "刪除附件文件", - "publish_dialog_attached_file_title": "附件文件:", - "publish_dialog_attach_label": "附件連結地址", - "publish_dialog_attachment_limits_file_and_quota_reached": "超過 {{fileSizeLimit}} 文件限制和配額,剩餘 {{remainingBytes}}", - "publish_dialog_attachment_limits_file_reached": "超過 {{fileSizeLimit}} 文件限制", - "publish_dialog_attachment_limits_quota_reached": "超過配額,剩餘 {{remainingBytes}}", - "publish_dialog_attach_placeholder": "使用鏈結地址附加文件,例如 https://f-droid.org/F-Droid.apk", - "publish_dialog_attach_reset": "移除附件鏈結地址", - "publish_dialog_base_url_label": "服務鏈結地址", - "publish_dialog_base_url_placeholder": "服務鏈結地址,例如 https://example.com", - "publish_dialog_button_cancel_sending": "取消發送", - "publish_dialog_button_cancel": "取消", - "publish_dialog_button_send": "發送", - "publish_dialog_call_item": "撥打電話 {{number}}", - "publish_dialog_call_label": "撥號", - "publish_dialog_call_reset": "清空撥號", - "publish_dialog_checkbox_markdown": "格式化為 Markdown", - "publish_dialog_checkbox_publish_another": "發布另一個", - "publish_dialog_chip_attach_file_label": "本地文件附件", - "publish_dialog_chip_attach_url_label": "鏈結附件地址", - "publish_dialog_chip_call_label": "撥號", - "publish_dialog_chip_call_no_verified_numbers_tooltip": "未驗證的電話號碼", - "publish_dialog_chip_click_label": "點擊鏈結地址", - "publish_dialog_chip_delay_label": "延期投遞", - "publish_dialog_chip_email_label": "轉發郵件", - "publish_dialog_chip_topic_label": "變更主題", - "publish_dialog_click_label": "點擊鏈結地址", - "publish_dialog_click_placeholder": "點擊通知時打開鏈結地址", - "publish_dialog_click_reset": "移除點擊連結地址", - "publish_dialog_delay_label": "延期", - "publish_dialog_delay_placeholder": "延期投遞,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(僅限英語)", - "publish_dialog_delay_reset": "刪除延期投遞", - "publish_dialog_details_examples_description": "有關所有發送功能的範例和詳細說明,請參閱文檔。", - "publish_dialog_drop_file_here": "將文件拖拽至此", - "publish_dialog_email_label": "電子郵件", - "publish_dialog_email_placeholder": "將通知轉發到的地址,例如 phil@example.com", - "publish_dialog_email_reset": "移除電子郵件轉發", - "publish_dialog_emoji_picker_show": "選擇表情符號", - "publish_dialog_filename_label": "文件名", - "publish_dialog_filename_placeholder": "附件文件名", - "publish_dialog_message_label": "訊息", - "publish_dialog_message_placeholder": "在此輸入訊息", - "publish_dialog_message_published": "已發布通知", - "publish_dialog_other_features": "其它功能:", - "publish_dialog_priority_default": "默認優先級", - "publish_dialog_priority_high": "高優先級", - "publish_dialog_priority_label": "優先級", - "publish_dialog_priority_low": "低優先級", - "publish_dialog_priority_max": "最高優先級", - "publish_dialog_priority_min": "最低優先級", - "publish_dialog_progress_uploading_detail": "正在上傳 {{loaded}}/{{total}} ({{percent}}%) ……", - "publish_dialog_progress_uploading": "正在上傳……", - "publish_dialog_tags_label": "標記", - "publish_dialog_tags_placeholder": "英文逗號分隔標記列表,例如 warning, srv1-backup", - "publish_dialog_title_label": "主題", - "publish_dialog_title_no_topic": "發布通知", - "publish_dialog_title_placeholder": "主題標題,例如 磁碟空間警告", - "publish_dialog_title_topic": "發布到 {{topic}}", + "common_save": "儲存", + "common_cancel": "取消", + "error_boundary_title": "歐買尬,ntfy 壞掉了", + "notifications_none_for_any_description": "要開始發送通知到一個主題,只需要對主題 URL 發送 HTTP PUT 或者 POST,例如:", + "notifications_no_subscriptions_description": "點選 「{{linktext}}」 連結以建立或訂閱主題。完成後,你就可以使用 HTTP PUT 或者 POST 發送通知到這裡了!", + "error_boundary_description": "很抱歉 ntfy 發生錯誤了。
如果你有時間,煩請到 Github 回報錯誤,或者到 Discord 或者 Matrix 聊天室裡面告訴我們。", + "publish_dialog_tags_placeholder": "逗號分隔的標籤,例如 e.g. warning, srv1-backup", + "publish_dialog_click_label": "點擊網址", + "publish_dialog_attach_placeholder": "從網址新增附件,例如 https://f-droid.org/F-Droid.apk", + "publish_dialog_attach_reset": "移除附件網址", + "publish_dialog_attach_label": "附件網址", + "publish_dialog_delay_reset": "移除延遲傳送", + "publish_dialog_delay_label": "延遲", + "publish_dialog_other_features": "其他功能:", + "publish_dialog_filename_placeholder": "附件檔案名稱", + "publish_dialog_delay_placeholder": "延遲傳送,例如 {{unixTimestamp}}, {{relativeTime}} 或 \"{{naturalLanguage}}\" (僅限英文)", + "publish_dialog_chip_click_label": "點擊網址", + "publish_dialog_chip_email_label": "轉發到電郵", + "publish_dialog_chip_attach_url_label": "從網址新增附件", + "emoji_picker_search_placeholder": "搜尋 emoji", + "subscribe_dialog_subscribe_title": "訂閱主題", + "subscribe_dialog_error_user_not_authorized": "用戶 {{username}} 沒有權限", + "subscribe_dialog_error_user_anonymous": "匿名", + "login_title": "登入 ntfy 帳戶", + "action_bar_reservation_add": "保留主題", + "action_bar_profile_logout": "登出", + "alert_not_supported_context_description": "訊息只支援 HTTPS. 這是受 Notifications API 的限制", + "publish_dialog_base_url_placeholder": "服務網址,例如 https://example.com", + "signup_title": "創建 ntfy 賬戶", + "signup_form_username": "用戶名稱", + "signup_form_password": "密碼", + "signup_form_button_submit": "註冊", + "signup_form_toggle_password_visibility": "顯示/隱藏密碼", + "signup_disabled": "註冊已停止", + "signup_error_username_taken": "用戶名稱 {{username}} 已被取用", + "signup_error_creation_limit_reached": "註冊賬戶限制", + "login_form_button_submit": "登入", + "login_link_signup": "註冊", + "signup_already_have_account": "已有帳戶? 立即登入!", + "login_disabled": "登入已停止", + "action_bar_account": "帳戶", + "action_bar_change_display_name": "改變顯示名稱", + "action_bar_reservation_edit": "改變已保留", + "action_bar_reservation_delete": "移除保留", + "action_bar_reservation_limit_reached": "達到限制", + "action_bar_profile_title": "簡介", + "action_bar_profile_settings": "設置", + "action_bar_sign_in": "登入", + "action_bar_sign_up": "註冊", + "nav_button_account": "帳戶", + "nav_upgrade_banner_label": "升級到 ntfy 專業版", + "nav_upgrade_banner_description": "保留主題,更多信息電郵及附件", + "display_name_dialog_title": "改變顯示名稱", + "display_name_dialog_description": "為主題新增在訂閱清單顯示的第二名稱, 這會令尋找複雜主題時更方便。", + "display_name_dialog_placeholder": "顯示名稱", + "reserve_dialog_checkbox_label": "保留主題及設置權限", + "publish_dialog_progress_uploading_detail": "上載中 {{loaded}}/{{total}} ({{percent}}%) …", + "publish_dialog_message_published": "已公佈通訊", + "publish_dialog_attachment_limits_file_reached": "超出檔案限制 {fileSizeLimit}}", + "publish_dialog_attachment_limits_quota_reached": "超出限制, 尚餘 {{remainingBytes}}", + "publish_dialog_emoji_picker_show": "選擇 emoji", + "publish_dialog_priority_min": "最低優先", + "publish_dialog_priority_low": "較低優先", + "publish_dialog_priority_default": "正常優先", + "publish_dialog_priority_high": "高度優先", + "publish_dialog_priority_max": "最高優先", + "publish_dialog_base_url_label": "服務網址", "publish_dialog_topic_label": "主題名稱", "publish_dialog_topic_placeholder": "主題名稱,例如 phil_alerts", "publish_dialog_topic_reset": "重置主題", - "reservation_delete_dialog_action_delete_description": "緩存的郵件和附件將被永久刪除。此操作無法撤銷。", - "reservation_delete_dialog_action_delete_title": "刪除緩存的郵件和附件", - "reservation_delete_dialog_action_keep_description": "緩存在伺服器上的訊息和附件將對知道主題名稱的人公開可見。", - "reservation_delete_dialog_action_keep_title": "保留緩存的郵件和附件", - "reservation_delete_dialog_description": "刪除保留會放棄對該主題的所有權,並允許其他人保留它。你可以保留或刪除現有郵件和附件。", - "reservation_delete_dialog_submit_button": "刪除保留", - "reserve_dialog_checkbox_label": "保留主題並配置訪問", - "signup_already_have_account": "已有帳戶?登錄!", - "signup_disabled": "註冊已禁用", - "signup_error_creation_limit_reached": "已達到帳戶創建限制", - "signup_error_username_taken": "用戶名 {{username}} 已被取用", - "signup_form_button_submit": "註冊", - "signup_form_confirm_password": "確認密碼", - "signup_form_password": "密碼", - "signup_form_toggle_password_visibility": "切換密碼可見性", - "signup_form_username": "用戶名", - "signup_title": "創建一個 ntfy 帳戶", - "subscribe_dialog_error_topic_already_reserved": "主題已保留", - "subscribe_dialog_error_user_anonymous": "匿名", - "subscribe_dialog_error_user_not_authorized": "未授權 {{username}} 使用者", - "subscribe_dialog_login_button_login": "登入", - "subscribe_dialog_login_description": "本主題受密碼保護,請輸入用戶名和密碼以訂閱。", - "subscribe_dialog_login_password_label": "密碼", - "subscribe_dialog_login_title": "請登錄", - "subscribe_dialog_login_username_label": "用戶名,例如 phil", - "subscribe_dialog_subscribe_base_url_label": "服務地址地址", - "subscribe_dialog_subscribe_button_cancel": "取消", + "publish_dialog_title_label": "標題", + "publish_dialog_title_placeholder": "通訊標題,例如 Disk space alert", + "publish_dialog_message_label": "訊息", + "publish_dialog_message_placeholder": "這裏輸入訊息", + "publish_dialog_tags_label": "標籤", + "publish_dialog_click_placeholder": "通訊被點擊時到訪的網址", + "publish_dialog_click_reset": "移除點擊網址", + "publish_dialog_email_reset": "移除電郵轉發", + "publish_dialog_chip_attach_file_label": "上載檔案", + "publish_dialog_chip_delay_label": "延遲傳送", + "publish_dialog_chip_topic_label": "更變主題", + "publish_dialog_details_examples_description": "可以在 documentation 找到詳細的功能說明及例子。", + "publish_dialog_checkbox_publish_another": "公佈更多", + "publish_dialog_attached_file_title": "附件:", + "publish_dialog_attached_file_filename_placeholder": "附件名稱", + "subscribe_dialog_subscribe_use_another_label": "使用另一個伺服器", + "subscribe_dialog_subscribe_base_url_label": "服務網址", "subscribe_dialog_subscribe_button_generate_topic_name": "生成名稱", - "subscribe_dialog_subscribe_button_subscribe": "訂閱", - "subscribe_dialog_subscribe_description": "主題可能不受密碼保護,因此請選擇一個不容易被猜中的名字。訂閱後,你可以使用 PUT/POST 通知。", - "subscribe_dialog_subscribe_title": "訂閱主題", - "subscribe_dialog_subscribe_topic_placeholder": "主題名,例如 phil_alerts", - "subscribe_dialog_subscribe_use_another_background_info": "當網頁程式未開啟, 將不會收到來自其他伺服器的通知", - "subscribe_dialog_subscribe_use_another_label": "使用其他伺服器", - "web_push_subscription_expiring_body": "開啟ntfy以繼續接收通知", - "web_push_subscription_expiring_title": "通知會被暫停", - "web_push_unknown_notification_body": "你可能需要開啟網頁來更新ntfy", - "web_push_unknown_notification_title": "接收到不明通知" + "subscribe_dialog_login_title": "需要登入", + "subscribe_dialog_login_username_label": "用戶名稱,例如 phil", + "subscribe_dialog_error_topic_already_reserved": "主題已被保留", + "account_basics_title": "帳戶", + "account_basics_username_title": "用戶名稱", + "account_basics_username_description": "這就是你了❤", + "account_basics_username_admin_tooltip": "你是管理員", + "account_basics_password_title": "密碼", + "account_basics_password_description": "更變你的密碼", + "account_basics_password_dialog_title": "更變密碼", + "account_basics_password_dialog_new_password_label": "新的密碼", + "account_basics_password_dialog_confirm_password_label": "確認密碼", + "account_basics_password_dialog_button_submit": "更變密碼", + "account_usage_unlimited": "無限制", + "account_usage_title": "已經使用", + "account_usage_limits_reset_daily": "使用限制每天午夜重置", + "account_basics_tier_title": "帳戶類型", + "account_basics_tier_description": "你的能量值", + "account_basics_tier_admin": "管理員", + "account_basics_tier_admin_suffix_with_tier": "(擁有 {{tier}})", + "account_basics_tier_admin_suffix_no_tier": "(無層)", + "account_basics_tier_basic": "基礎", + "account_basics_tier_free": "免費", + "account_basics_tier_upgrade_button": "升級至專業版", + "publish_dialog_email_placeholder": "轉發到電郵,例如 phil@example.com", + "subscribe_dialog_subscribe_topic_placeholder": "主題名稱,例如 phil_alerts", + "publish_dialog_attached_file_remove": "移除附件", + "subscribe_dialog_subscribe_description": "主題可能不受到密碼保護, 所以盡量選擇一個不會容易被猜中的主題名稱。 一旦已訂閱,你能夠 PUT/POST 通訊。", + "subscribe_dialog_login_description": "這個主題受密碼保護,請輸入用戶名稱及密碼以訂閱主題。", + "account_basics_password_dialog_current_password_label": "現在的密碼", + "account_basics_password_dialog_current_password_incorrect": "密碼不正確", + "account_basics_tier_change_button": "更變", + "common_add": "新增", + "signup_form_confirm_password": "確認密碼", + "publish_dialog_drop_file_here": "拖曳檔案到此", + "account_basics_tier_interval_monthly": "每月", + "common_copy_to_clipboard": "複製到剪貼簿", + "publish_dialog_call_label": "電話", + "publish_dialog_call_reset": "移除電話", + "publish_dialog_chip_call_label": "電話", + "account_usage_reservations_none": "此帳戶沒有預留主題", + "account_usage_attachment_storage_title": "附件容量", + "account_basics_tier_canceled_subscription": "你的付費訂閱已取消,並於 {{date}} 下調為免費帳戶。", + "account_usage_messages_title": "已發佈的信息", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "沒有已驗證的電話號碼", + "account_basics_tier_interval_yearly": "每年", + "account_usage_emails_title": "已發送電郵", + "account_usage_attachment_storage_description": "每個檔案約 {{filesize}},將於 {{expiry}} 後刪除", + "publish_dialog_attachment_limits_file_and_quota_reached": "已超過 {{fileSizeLimit}} 檔案上限,尚餘 {{remainingBytes}}", + "account_basics_tier_paid_until": "已付費訂閱至 {{date}} 並自動續期", + "account_basics_tier_payment_overdue": "你的費用已逾期。請更新付款方法,否則你的戶口等級將會下調。", + "publish_dialog_call_item": "致電 {{number}}", + "account_basics_tier_manage_billing_button": "管理付款方式" } diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 77bbdb1e..4089746a 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -124,17 +124,9 @@ class Notifier { return window.location.protocol === "https:" || window.location.hostname.match("^127.") || window.location.hostname === "localhost"; } - // no PushManager when not installed, but it _is_ supported. iosSupportedButInstallRequired() { - return ( - config.enable_web_push && - // a service worker exists - "serviceWorker" in navigator && - // but the pushmanager API is missing, which implies we're on an iOS device without installing - !("PushManager" in window) && - // check that this is the case by checking for `standalone`, which only exists on Safari - window.navigator.standalone === false - ); + // no PushManager when not installed, but it _is_ supported. + return config.enable_web_push && "serviceWorker" in navigator && window.navigator.standalone === false; } } diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 08710c1f..d0ae15ce 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -130,20 +130,14 @@ export const hashCode = (s) => { return hash; }; -/** - * convert `i18n.language` style str (e.g.: `en_US`) to kebab-case (e.g.: `en-US`), - * which is expected by `` and `Intl.DateTimeFormat` - */ -export const getKebabCaseLangStr = (language) => language.replace(/_/g, "-"); - export const formatShortDateTime = (timestamp, language) => - new Intl.DateTimeFormat(getKebabCaseLangStr(language), { + new Intl.DateTimeFormat(language, { dateStyle: "short", timeStyle: "short", }).format(new Date(timestamp * 1000)); export const formatShortDate = (timestamp, language) => - new Intl.DateTimeFormat(getKebabCaseLangStr(language), { dateStyle: "short" }).format(new Date(timestamp * 1000)); + new Intl.DateTimeFormat(language, { dateStyle: "short" }).format(new Date(timestamp * 1000)); export const formatBytes = (bytes, decimals = 2) => { if (bytes === 0) return "0 bytes"; diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 7f84b7de..d22ec66f 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -11,7 +11,7 @@ import ActionBar from "./ActionBar"; import Preferences from "./Preferences"; import subscriptionManager from "../app/SubscriptionManager"; import userManager from "../app/UserManager"; -import { expandUrl, getKebabCaseLangStr } from "../app/utils"; +import { expandUrl } from "../app/utils"; import ErrorBoundary from "./ErrorBoundary"; import routes from "./routes"; import { useAccountListener, useBackgroundProcesses, useConnectionListeners, useWebPushTopics } from "./hooks"; @@ -56,7 +56,7 @@ const App = () => { ); useEffect(() => { - document.documentElement.setAttribute("lang", getKebabCaseLangStr(i18n.language)); + document.documentElement.setAttribute("lang", i18n.language); document.dir = languageDir; }, [i18n.language, languageDir]); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 546ecbe3..a93032ce 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -571,8 +571,7 @@ const Language = () => { Bahasa IndonesiaБългарскиČeština - 繁體中文 - 简体中文 + 中文DanskDeutschEspañol