From 7812eb9d19d50bfa33778c352844aeef726efde6 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 24 May 2023 20:37:27 -0400 Subject: [PATCH 001/305] WIP: Markdown --- server/server.go | 4 ++++ server/server_firebase.go | 23 ++++++++++++----------- server/types.go | 35 ++++++++++++++++++----------------- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/server/server.go b/server/server.go index ac54aa50..179359d1 100644 --- a/server/server.go +++ b/server/server.go @@ -963,6 +963,10 @@ func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, fi return false, false, "", "", false, errHTTPBadRequestActionsInvalid.Wrap(e.Error()) } } + contentType, markdown := readParam(r, "content-type"), readBoolParam(r, false, "x-markdown", "markdown", "md") + if markdown || strings.ToLower(contentType) == "text/markdown" { + m.ContentType = "text/markdown" + } unifiedpush = readBoolParam(r, false, "x-unifiedpush", "unifiedpush", "up") // see GET too! if unifiedpush { firebase = false diff --git a/server/server_firebase.go b/server/server_firebase.go index 6318b98e..b8158d2f 100644 --- a/server/server_firebase.go +++ b/server/server_firebase.go @@ -144,17 +144,18 @@ func toFirebaseMessage(m *message, auther user.Auther) (*messaging.Message, erro } if allowForward { data = map[string]string{ - "id": m.ID, - "time": fmt.Sprintf("%d", m.Time), - "event": m.Event, - "topic": m.Topic, - "priority": fmt.Sprintf("%d", m.Priority), - "tags": strings.Join(m.Tags, ","), - "click": m.Click, - "icon": m.Icon, - "title": m.Title, - "message": m.Message, - "encoding": m.Encoding, + "id": m.ID, + "time": fmt.Sprintf("%d", m.Time), + "event": m.Event, + "topic": m.Topic, + "priority": fmt.Sprintf("%d", m.Priority), + "tags": strings.Join(m.Tags, ","), + "click": m.Click, + "icon": m.Icon, + "title": m.Title, + "message": m.Message, + "content_type": m.ContentType, + "encoding": m.Encoding, } if len(m.Actions) > 0 { actions, err := json.Marshal(m.Actions) diff --git a/server/types.go b/server/types.go index 9e4ff558..7798a65e 100644 --- a/server/types.go +++ b/server/types.go @@ -24,23 +24,24 @@ const ( // message represents a message published to a topic type message struct { - ID string `json:"id"` // Random message ID - Time int64 `json:"time"` // Unix time in seconds - Expires int64 `json:"expires,omitempty"` // Unix time in seconds (not required for open/keepalive) - Event string `json:"event"` // One of the above - Topic string `json:"topic"` - Title string `json:"title,omitempty"` - Message string `json:"message,omitempty"` - Priority int `json:"priority,omitempty"` - Tags []string `json:"tags,omitempty"` - Click string `json:"click,omitempty"` - Icon string `json:"icon,omitempty"` - Actions []*action `json:"actions,omitempty"` - Attachment *attachment `json:"attachment,omitempty"` - PollID string `json:"poll_id,omitempty"` - Encoding string `json:"encoding,omitempty"` // empty for raw UTF-8, or "base64" for encoded bytes - Sender netip.Addr `json:"-"` // IP address of uploader, used for rate limiting - User string `json:"-"` // Username of the uploader, used to associated attachments + ID string `json:"id"` // Random message ID + Time int64 `json:"time"` // Unix time in seconds + Expires int64 `json:"expires,omitempty"` // Unix time in seconds (not required for open/keepalive) + Event string `json:"event"` // One of the above + Topic string `json:"topic"` + Title string `json:"title,omitempty"` + Message string `json:"message,omitempty"` + Priority int `json:"priority,omitempty"` + Tags []string `json:"tags,omitempty"` + Click string `json:"click,omitempty"` + Icon string `json:"icon,omitempty"` + Actions []*action `json:"actions,omitempty"` + Attachment *attachment `json:"attachment,omitempty"` + PollID string `json:"poll_id,omitempty"` + ContentType string `json:"content_type,omitempty"` // text/plain by default (if empty), or text/markdown + Encoding string `json:"encoding,omitempty"` // empty for raw UTF-8, or "base64" for encoded bytes + Sender netip.Addr `json:"-"` // IP address of uploader, used for rate limiting + User string `json:"-"` // Username of the uploader, used to associated attachments } func (m *message) Context() log.Context { From 9056d68fc93679c288a1ca333701acc0ca674422 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 17:48:39 +0200 Subject: [PATCH 002/305] Make async for loops performant using Promise.all --- web/src/app/Poller.js | 19 +++++----- web/src/app/SubscriptionManager.js | 57 ++++++++++++++---------------- 2 files changed, 37 insertions(+), 39 deletions(-) diff --git a/web/src/app/Poller.js b/web/src/app/Poller.js index b9568211..372e46e5 100644 --- a/web/src/app/Poller.js +++ b/web/src/app/Poller.js @@ -21,15 +21,16 @@ class Poller { async pollAll() { console.log(`[Poller] Polling all subscriptions`); const subscriptions = await subscriptionManager.all(); - for (const s of subscriptions) { - try { - // TODO(eslint): Switch to Promise.all - // eslint-disable-next-line no-await-in-loop - await this.poll(s); - } catch (e) { - console.log(`[Poller] Error polling ${s.id}`, e); - } - } + + await Promise.all( + subscriptions.map(async (s) => { + try { + await this.poll(s); + } catch (e) { + console.log(`[Poller] Error polling ${s.id}`, e); + } + }) + ); } async poll(subscription) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 77627532..03617e0a 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -5,13 +5,12 @@ class SubscriptionManager { /** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */ async all() { const subscriptions = await db.subscriptions.toArray(); - await Promise.all( - subscriptions.map(async (s) => { - // eslint-disable-next-line no-param-reassign - s.new = await db.notifications.where({ subscriptionId: s.id, new: 1 }).count(); - }) + return Promise.all( + subscriptions.map(async (s) => ({ + ...s, + new: await db.notifications.where({ subscriptionId: s.id, new: 1 }).count(), + })) ); - return subscriptions; } async get(subscriptionId) { @@ -40,33 +39,31 @@ class SubscriptionManager { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); // Add remote subscriptions - const remoteIds = []; // = topicUrl(baseUrl, topic) - for (let i = 0; i < remoteSubscriptions.length; i += 1) { - const remote = remoteSubscriptions[i]; - // TODO(eslint): Switch to Promise.all - // eslint-disable-next-line no-await-in-loop - const local = await this.add(remote.base_url, remote.topic, false); - const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; - // TODO(eslint): Switch to Promise.all - // eslint-disable-next-line no-await-in-loop - await this.update(local.id, { - displayName: remote.display_name, // May be undefined - reservation, // May be null! - }); - remoteIds.push(local.id); - } + const remoteIds = await Promise.all( + remoteSubscriptions.map(async (remote) => { + const local = await this.add(remote.base_url, remote.topic, false); + const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; + + await this.update(local.id, { + displayName: remote.display_name, // May be undefined + reservation, // May be null! + }); + + return local.id; + }) + ); // Remove local subscriptions that do not exist remotely const localSubscriptions = await db.subscriptions.toArray(); - for (let i = 0; i < localSubscriptions.length; i += 1) { - const local = localSubscriptions[i]; - const remoteExists = remoteIds.includes(local.id); - if (!local.internal && !remoteExists) { - // TODO(eslint): Switch to Promise.all - // eslint-disable-next-line no-await-in-loop - await this.remove(local.id); - } - } + + await Promise.all( + localSubscriptions.map(async (local) => { + const remoteExists = remoteIds.includes(local.id); + if (!local.internal && !remoteExists) { + await this.remove(local.id); + } + }) + ); } async updateState(subscriptionId, state) { From 4d90e32fe9f584b056fceea763aae2a39ea10396 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 17:49:04 +0200 Subject: [PATCH 003/305] Use es6 destructuring swap for shuffling --- web/src/app/utils.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 0af10330..481d6031 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -139,17 +139,14 @@ export const maybeAppendActionErrors = (message, notification) => { }; export const shuffle = (arr) => { - let j; - let x; - for (let index = arr.length - 1; index > 0; index -= 1) { - j = Math.floor(Math.random() * (index + 1)); - x = arr[index]; - // eslint-disable-next-line no-param-reassign - arr[index] = arr[j]; - // eslint-disable-next-line no-param-reassign - arr[j] = x; + const returnArr = [...arr]; + + for (let index = returnArr.length - 1; index > 0; index -= 1) { + const j = Math.floor(Math.random() * (index + 1)); + [returnArr[index], returnArr[j]] = [returnArr[j], returnArr[index]]; } - return arr; + + return returnArr; }; export const splitNoEmpty = (s, delimiter) => From d178be7576ea152386f9b41591df969eb6f18f29 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 18:08:59 +0200 Subject: [PATCH 004/305] Fix param reassignment issue --- web/src/app/SubscriptionManager.js | 9 ++++++--- web/src/components/Notifications.jsx | 11 +++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 03617e0a..ecbe4dac 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -105,9 +105,12 @@ class SubscriptionManager { return false; } try { - // eslint-disable-next-line no-param-reassign - notification.new = 1; // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation - await db.notifications.add({ ...notification, subscriptionId }); // FIXME consider put() for double tab + await db.notifications.add({ + ...notification, + subscriptionId, + // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation + new: 1, + }); // FIXME consider put() for double tab await db.subscriptions.update(subscriptionId, { last: notification.id, }); diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index 7d4da068..2faf2fd2 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -436,15 +436,10 @@ const ACTION_LABEL_SUFFIX = { }; const updateActionStatus = (notification, action, progress, error) => { - // TODO(eslint): Fix by spreading? Does the code depend on the change, though? - // eslint-disable-next-line no-param-reassign - notification.actions = notification.actions.map((a) => { - if (a.id !== action.id) { - return a; - } - return { ...a, progress, error }; + subscriptionManager.updateNotification({ + ...notification, + actions: notification.actions.map((a) => (a.id === action.id ? { ...a, progress, error } : a)), }); - subscriptionManager.updateNotification(notification); }; const performHttpAction = async (notification, action) => { From da17e4ee8a9c0c6f954a61fdab581a32fb887c1b Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 20:47:19 +0200 Subject: [PATCH 005/305] Make small code style improvements --- web/src/app/ConnectionManager.js | 4 +--- web/src/app/utils.js | 4 ++-- web/src/components/EmojiPicker.jsx | 12 +----------- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 751c7bd3..2033cbea 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -61,9 +61,7 @@ class ConnectionManager { const { connectionId } = subscription; const added = !this.connections.get(connectionId); if (added) { - const { baseUrl } = subscription; - const { topic } = subscription; - const { user } = subscription; + const { baseUrl, topic, user } = subscription; const since = subscription.last; const connection = new Connection( connectionId, diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 481d6031..ab7551bb 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -118,10 +118,10 @@ export const maybeWithBearerAuth = (headers, token) => { export const withBasicAuth = (headers, username, password) => ({ ...headers, Authorization: basicAuth(username, password) }); export const maybeWithAuth = (headers, user) => { - if (user && user.password) { + if (user?.password) { return withBasicAuth(headers, user.username, user.password); } - if (user && user.token) { + if (user?.token) { return withBearerAuth(headers, user.token); } return headers; diff --git a/web/src/components/EmojiPicker.jsx b/web/src/components/EmojiPicker.jsx index f9e8b5e8..d1fb1706 100644 --- a/web/src/components/EmojiPicker.jsx +++ b/web/src/components/EmojiPicker.jsx @@ -127,17 +127,7 @@ const Category = (props) => { ); }; -const emojiMatches = (emoji, words) => { - if (words.length === 0) { - return true; - } - for (const word of words) { - if (emoji.searchBase.indexOf(word) === -1) { - return false; - } - } - return true; -}; +const emojiMatches = (emoji, words) => words.length === 0 || words.some((word) => emoji.searchBase.includes(word)); const Emoji = (props) => { const { emoji } = props; From 38bd4f3ce374455287b3ee3ed27e277a353be043 Mon Sep 17 00:00:00 2001 From: Rogelio Dominguez Date: Thu, 25 May 2023 12:57:35 +0000 Subject: [PATCH 006/305] Translated using Weblate (Spanish) Currently translated at 100.0% (381 of 381 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/es/ --- web/public/static/langs/es.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/es.json b/web/public/static/langs/es.json index 3166a522..065a50e8 100644 --- a/web/public/static/langs/es.json +++ b/web/public/static/langs/es.json @@ -355,5 +355,29 @@ "account_upgrade_dialog_billing_contact_email": "Para preguntas sobre facturación, por favor contáctenos directamente.", "account_upgrade_dialog_tier_features_messages_one": "{{messages}} mensaje diario", "account_upgrade_dialog_tier_features_emails_one": "{{emails}} correo electrónico diario", - "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} tema reservado" + "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} tema reservado", + "publish_dialog_call_label": "Llamada telefónica", + "publish_dialog_call_placeholder": "Número de teléfono al cual llamar con el mensaje, por ejemplo +12223334444, o \"sí\"", + "publish_dialog_chip_call_label": "Llamada telefónica", + "account_basics_phone_numbers_title": "Números de teléfono", + "account_basics_phone_numbers_description": "Para notificaciones por llamada teléfonica", + "account_basics_phone_numbers_no_phone_numbers_yet": "Aún no hay números de teléfono", + "account_basics_phone_numbers_dialog_number_label": "Número de teléfono", + "account_basics_phone_numbers_dialog_number_placeholder": "p. ej. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Envía SMS", + "account_basics_phone_numbers_dialog_verify_button_call": "Llámame", + "account_basics_phone_numbers_dialog_code_label": "Código de verificación", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_channel_call": "Llamar", + "account_usage_calls_title": "Llamadas telefónicas realizadas", + "account_usage_calls_none": "No se pueden hacer llamadas telefónicas con esta cuenta", + "account_upgrade_dialog_tier_features_calls_one": "{{llamadas}} llamadas telefónicas diarias", + "account_upgrade_dialog_tier_features_calls_other": "{{llamadas}} llamadas telefónicas diarias", + "account_upgrade_dialog_tier_features_no_calls": "No hay llamadas telefónicas", + "publish_dialog_call_reset": "Eliminar llamada telefónica", + "account_basics_phone_numbers_dialog_description": "Para utilizar la función de notificación de llamadas, tiene que añadir y verificar al menos un número de teléfono. La verificación puede realizarse mediante un SMS o una llamada telefónica.", + "account_basics_phone_numbers_copied_to_clipboard": "Número de teléfono copiado al portapapeles", + "account_basics_phone_numbers_dialog_check_verification_button": "Confirmar código", + "account_basics_phone_numbers_dialog_title": "Agregar número de teléfono", + "account_basics_phone_numbers_dialog_code_placeholder": "p.ej. 123456" } From 02524ca101f29f92234637a78089413c1f90db9d Mon Sep 17 00:00:00 2001 From: Kalil Maciel Date: Wed, 24 May 2023 17:20:33 +0000 Subject: [PATCH 007/305] Translated using Weblate (Portuguese) Currently translated at 59.8% (228 of 381 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/pt/ --- web/public/static/langs/pt.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/pt.json b/web/public/static/langs/pt.json index bf753c9a..57d56565 100644 --- a/web/public/static/langs/pt.json +++ b/web/public/static/langs/pt.json @@ -214,5 +214,17 @@ "login_link_signup": "Registar", "action_bar_reservation_add": "Reservar tópico", "action_bar_sign_up": "Registar", - "nav_button_account": "Conta" + "nav_button_account": "Conta", + "common_copy_to_clipboard": "Copiar", + "nav_upgrade_banner_label": "Atualizar para ntfy Pro", + "alert_not_supported_context_description": "Notificações são suportadas apenas sobre HTTPS. Essa é uma limitação da API de Notificações.", + "display_name_dialog_title": "Alterar nome mostrado", + "display_name_dialog_description": "Configura um nome alternativo ao tópico que é mostrado na lista de assinaturas. Isto ajuda a identificar tópicos com nomes complicados mais facilmente.", + "display_name_dialog_placeholder": "Nome exibido", + "reserve_dialog_checkbox_label": "Reservar tópico e configurar acesso", + "publish_dialog_call_label": "Chamada telefônica", + "publish_dialog_call_placeholder": "Número de telefone para ligar com a mensagem, ex: +12223334444, ou 'Sim'", + "publish_dialog_call_reset": "Remover chamada telefônica", + "publish_dialog_chip_call_label": "Chamada telefônica", + "subscribe_dialog_subscribe_button_generate_topic_name": "Gerar nome" } From 232c889ce31f825c72b645f63cc262d69c32ca1e Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 26 May 2023 21:14:59 +0200 Subject: [PATCH 008/305] Use `apt-get` in makefile `apt` is for interactive shell usage, using it in a script results in a warning as the CLI interface is not stable > WARNING: apt does not have a stable CLI interface. > Use with caution in scripts. --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 73988446..a5f8d9f0 100644 --- a/Makefile +++ b/Makefile @@ -85,13 +85,13 @@ update: web-deps-update cli-deps-update docs-deps-update # Ubuntu-specific build-deps-ubuntu: - sudo apt update - sudo apt install -y \ + sudo apt-get update + sudo apt-get install -y \ curl \ gcc-aarch64-linux-gnu \ gcc-arm-linux-gnueabi \ jq - which pip3 || sudo apt install -y python3-pip + which pip3 || sudo apt-get install -y python3-pip # Documentation From 11f898412748f4477caf8b260e0575cb768091dc Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 26 May 2023 21:40:18 +0200 Subject: [PATCH 009/305] Add a way to use Docker for building everything MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I’d like to test #751 on my own instance, but installing all the build dependencies on my server isn’t ideal - having this script in the repo would make it possible to simply point my compose file to the git repo and have it build the Linux binary itself. Note that it uses a somewhat “inefficient” builder step, i.e. not combining steps together to reduce layers, as it uses a multi-stage build to have a lean final image. This makes it easier to re-build if something needs to change, as the cache is used more optimally. For example, if only some go files change, most of the build is already cached and only the go step gets re-run. The more “efficient” builder step would look like this, but would have to build the docs, web app and go CLI for any change in any file: ```Dockerfile FROM golang:1.19-bullseye as builder RUN apt-get update && \ curl -fsSL https://deb.nodesource.com/setup_18.x | bash && \ apt-get install -y \ build-essential \ nodejs \ python3-pip WORKDIR /app ADD . . RUN make web docs cli-linux-server ``` --- .dockerignore | 3 +++ Dockerfile-build | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 17 ++++++++++++++-- docs/develop.md | 9 ++++++++ 4 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile-build diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..3bf2a126 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +dist +*/node_modules +Dockerfile* diff --git a/Dockerfile-build b/Dockerfile-build new file mode 100644 index 00000000..f8af256b --- /dev/null +++ b/Dockerfile-build @@ -0,0 +1,53 @@ +FROM golang:1.19-bullseye as builder + +ARG VERSION=dev +ARG COMMIT=unknown + +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 . + +# docs +ADD ./requirements.txt . +RUN make docs-deps +ADD ./mkdocs.yml . +ADD ./docs ./docs +RUN make docs-build + +# web +ADD ./web/package.json ./web/package-lock.json ./web/ +RUN make web-deps +ADD ./web ./web +RUN make web-build + +# cli & server +ADD go.mod go.sum main.go ./ +ADD ./client ./client +ADD ./cmd ./cmd +ADD ./log ./log +ADD ./server ./server +ADD ./user ./user +ADD ./util ./util +RUN make VERSION=$VERSION COMMIT=$COMMIT cli-linux-server + +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" + +COPY --from=builder /app/dist/ntfy_linux_server/ntfy /usr/bin/ntfy + +EXPOSE 80/tcp +ENTRYPOINT ["ntfy"] diff --git a/Makefile b/Makefile index a5f8d9f0..8cb75238 100644 --- a/Makefile +++ b/Makefile @@ -31,12 +31,16 @@ help: @echo " make cli-darwin-server - Build client & server (no GoReleaser, current arch, macOS)" @echo " make cli-client - Build client only (no GoReleaser, current arch, Linux/macOS/Windows)" @echo + @echo "Build dev Docker:" + @echo " make docker-dev - Build client & server for current architecture using Docker only" + @echo @echo "Build web app:" @echo " make web - Build the web app" @echo " make web-deps - Install web app dependencies (npm install the universe)" @echo " make web-build - Actually build the web app" - @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 " make web-lint - Run eslint on the web app" + @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" @@ -82,6 +86,15 @@ build: web docs cli update: web-deps-update cli-deps-update docs-deps-update docker pull alpine +docker-dev: + docker build \ + --file ./Dockerfile-build \ + --tag binwiederhier/ntfy:$(VERSION) \ + --tag binwiederhier/ntfy:dev \ + --build-arg VERSION=$(VERSION) \ + --build-arg COMMIT=$(COMMIT) \ + ./ + # Ubuntu-specific build-deps-ubuntu: diff --git a/docs/develop.md b/docs/develop.md index a53c5033..baab3f3a 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -163,6 +163,15 @@ $ make release-snapshot During development, you may want to be more picky and build only certain things. Here are a few examples. +### Build a Docker image only for Linux + +This is useful to test the final build with web app, docs, and server without any dependencies locally + +``` shell +$ make docker-dev +$ docker run --rm -p 80:80 binwiederhier/ntfy:dev serve +``` + ### Build the ntfy binary To build only the `ntfy` binary **without the web app or documentation**, use the `make cli-...` targets: From 217c660ba0a1584e371969e45404cc3ebcf684af Mon Sep 17 00:00:00 2001 From: Linerly Date: Thu, 25 May 2023 22:44:32 +0000 Subject: [PATCH 010/305] Translated using Weblate (Indonesian) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/id/ --- web/public/static/langs/id.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/id.json b/web/public/static/langs/id.json index 76c9d1d0..48fcda0b 100644 --- a/web/public/static/langs/id.json +++ b/web/public/static/langs/id.json @@ -379,5 +379,7 @@ "account_basics_phone_numbers_dialog_channel_sms": "SMS", "account_upgrade_dialog_tier_features_calls_one": "{{calls}} panggilan telepon harian", "account_upgrade_dialog_tier_features_no_calls": "Tidak ada panggilan telepon", - "account_basics_phone_numbers_dialog_code_label": "Kode verifikasi" + "account_basics_phone_numbers_dialog_code_label": "Kode verifikasi", + "publish_dialog_call_item": "Panggil nomor telepon {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Tidak ada nomor telepon terverifikasi" } From 578ccf1643a10f2806a3afa46103012fa5e50847 Mon Sep 17 00:00:00 2001 From: iTentalce Date: Thu, 25 May 2023 14:52:03 +0000 Subject: [PATCH 011/305] Translated using Weblate (Czech) Currently translated at 96.0% (367 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/cs/ --- web/public/static/langs/cs.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/cs.json b/web/public/static/langs/cs.json index aeff195b..6b967c87 100644 --- a/web/public/static/langs/cs.json +++ b/web/public/static/langs/cs.json @@ -355,5 +355,15 @@ "account_upgrade_dialog_billing_contact_website": "Otázky týkající se fakturace naleznete na našich webových stránkách.", "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} rezervované téma", "account_upgrade_dialog_tier_features_messages_one": "{{messages}} denní zpráva", - "account_upgrade_dialog_tier_features_emails_one": "{{emails}} denní e-mail" + "account_upgrade_dialog_tier_features_emails_one": "{{emails}} denní e-mail", + "publish_dialog_call_label": "Telefonát", + "publish_dialog_call_reset": "Odstranit telefonát", + "publish_dialog_chip_call_label": "Telefonát", + "account_basics_phone_numbers_title": "Telefonní čísla", + "account_basics_phone_numbers_dialog_description": "Pro oznámení prostřednictvím tel. hovoru, musíte přidat a ověřit alespoň jedno telefonní číslo. Ověření lze provést pomocí SMS nebo telefonátu.", + "account_basics_phone_numbers_description": "K oznámení telefonátem", + "account_basics_phone_numbers_no_phone_numbers_yet": "Zatím žádná telefonní čísla", + "account_basics_phone_numbers_copied_to_clipboard": "Telefonní číslo zkopírováno do schránky", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Žádná ověřená telefonní čísla", + "publish_dialog_call_item": "Vytočit číslo {{number}}" } From bd3907259685071d2c02b531d8d8e10628ad32a9 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sat, 27 May 2023 11:34:03 +0000 Subject: [PATCH 012/305] Translated using Weblate (Spanish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/es/ --- web/public/static/langs/es.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/es.json b/web/public/static/langs/es.json index 065a50e8..62ecdaf6 100644 --- a/web/public/static/langs/es.json +++ b/web/public/static/langs/es.json @@ -379,5 +379,7 @@ "account_basics_phone_numbers_copied_to_clipboard": "Número de teléfono copiado al portapapeles", "account_basics_phone_numbers_dialog_check_verification_button": "Confirmar código", "account_basics_phone_numbers_dialog_title": "Agregar número de teléfono", - "account_basics_phone_numbers_dialog_code_placeholder": "p.ej. 123456" + "account_basics_phone_numbers_dialog_code_placeholder": "p.ej. 123456", + "publish_dialog_call_item": "Llamar al número de teléfono {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "No hay números de teléfono verificados" } From 2e7f4747755e0b45aae3ad121e3409d3eddb768f Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 27 May 2023 09:03:34 +0000 Subject: [PATCH 013/305] Translated using Weblate (Ukrainian) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/uk/ --- web/public/static/langs/uk.json | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/uk.json b/web/public/static/langs/uk.json index 7d995dd2..32a30795 100644 --- a/web/public/static/langs/uk.json +++ b/web/public/static/langs/uk.json @@ -352,5 +352,34 @@ "account_upgrade_dialog_reservations_warning_other": "Обраний рівень дозволяє менше зарезервованих тем, ніж ваш поточний рівень. Перш ніж змінити свій рівень, будь ласка, видаліть принаймні {{count}} резервувань. Ви можете видалити резервування в Налаштуваннях.", "account_upgrade_dialog_button_cancel": "Скасувати", "account_upgrade_dialog_button_redirect_signup": "Зареєструватися зараз", - "account_upgrade_dialog_button_pay_now": "Оплатити зараз і підписатися" + "account_upgrade_dialog_button_pay_now": "Оплатити зараз і підписатися", + "prefs_reservations_add_button": "Додати зарезервовану тему", + "prefs_reservations_edit_button": "Редагувати доступ до теми", + "prefs_reservations_limit_reached": "Ви досягли ліміту зарезервованих тем.", + "prefs_reservations_table_click_to_subscribe": "Натисніть, щоб підписатися", + "prefs_reservations_table_topic_header": "Тема", + "prefs_reservations_description": "Тут ви можете зарезервувати назви тем для особистого користування. Резервування теми дає вам право власності на тему і дозволяє визначати права доступу до неї інших користувачів.", + "prefs_reservations_table": "Таблиця зарезервованих тем", + "prefs_reservations_table_access_header": "Доступ", + "prefs_reservations_table_everyone_deny_all": "Тільки я можу публікувати та підписуватись", + "prefs_reservations_table_everyone_read_only": "Я можу публікувати та підписуватись, кожен може підписатися", + "prefs_reservations_table_everyone_write_only": "Я можу публікувати і підписуватися, кожен може публікувати", + "prefs_reservations_table_everyone_read_write": "Кожен може публікувати та підписуватися", + "prefs_reservations_table_not_subscribed": "Не підписаний", + "prefs_reservations_dialog_title_add": "Зарезервувати тему", + "prefs_reservations_dialog_title_edit": "Редагувати зарезервовану тему", + "prefs_reservations_title": "Зарезервовані теми", + "prefs_reservations_delete_button": "Скинути доступ до теми", + "prefs_reservations_dialog_description": "Резервування теми дає вам право власності на цю тему і дозволяє визначати права доступу до неї інших користувачів.", + "prefs_reservations_dialog_topic_label": "Тема", + "prefs_reservations_dialog_access_label": "Доступ", + "reservation_delete_dialog_description": "Видалення резервування позбавляє вас права власності на тему і дозволяє іншим зарезервувати її. Ви можете зберегти або видалити існуючі повідомлення і вкладення.", + "reservation_delete_dialog_submit_button": "Видалити резервування", + "publish_dialog_call_item": "Телефонувати за номером {{номер}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Немає підтверджених номерів телефонів", + "prefs_reservations_dialog_title_delete": "Видалити резервування теми", + "reservation_delete_dialog_action_delete_title": "Видалення кешованих повідомлень і вкладень", + "reservation_delete_dialog_action_keep_title": "Збереження кешованих повідомлень і вкладень", + "reservation_delete_dialog_action_keep_description": "Повідомлення і вкладення, які кешуються на сервері, стають загальнодоступними для людей, які знають назву теми.", + "reservation_delete_dialog_action_delete_description": "Кешовані повідомлення та вкладення будуть видалені назавжди. Ця дія не може бути скасована." } From afb585e6fd47e45161bbd073d221f799882ec40a Mon Sep 17 00:00:00 2001 From: Shjosan Date: Sat, 27 May 2023 22:24:06 +0000 Subject: [PATCH 014/305] Translated using Weblate (Swedish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sv/ --- web/public/static/langs/sv.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/sv.json b/web/public/static/langs/sv.json index 31e809c5..bc4a5405 100644 --- a/web/public/static/langs/sv.json +++ b/web/public/static/langs/sv.json @@ -355,5 +355,30 @@ "reservation_delete_dialog_action_keep_title": "Behåll cachade meddelanden och bilagor", "reservation_delete_dialog_action_keep_description": "Meddelanden och bilagor som lagras på servern blir offentligt synliga för personer som känner till ämnesnamnet.", "reservation_delete_dialog_action_delete_title": "Ta bort meddelanden och bilagor som sparats i cacheminnet", - "reservation_delete_dialog_description": "Om du tar bort en reservation ger du upp äganderätten till ämnet och låter andra reservera det. Du kan behålla eller radera befintliga meddelanden och bilagor." + "reservation_delete_dialog_description": "Om du tar bort en reservation ger du upp äganderätten till ämnet och låter andra reservera det. Du kan behålla eller radera befintliga meddelanden och bilagor.", + "publish_dialog_call_label": "Telefonsamtal", + "publish_dialog_call_reset": "Ta bort telefonsamtal", + "publish_dialog_chip_call_label": "Telefonsamtal", + "account_basics_phone_numbers_title": "Telefonnummer", + "account_basics_phone_numbers_description": "För notifieringar via telefonsamtal", + "account_basics_phone_numbers_no_phone_numbers_yet": "Inga telefonnummer ännu", + "account_basics_phone_numbers_copied_to_clipboard": "Telefonnummer kopierat till urklipp", + "account_basics_phone_numbers_dialog_title": "Lägga till telefonnummer", + "account_basics_phone_numbers_dialog_number_label": "Telefonnummer", + "account_basics_phone_numbers_dialog_number_placeholder": "t.ex. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Skicka SMS", + "account_basics_phone_numbers_dialog_verify_button_call": "Ring mig", + "account_basics_phone_numbers_dialog_code_label": "Verifieringskod", + "account_basics_phone_numbers_dialog_channel_call": "Ring", + "account_usage_calls_title": "Telefonsamtal som gjorts", + "account_usage_calls_none": "Inga telefonsamtal kan göras med detta konto", + "publish_dialog_call_item": "Ring telefonnummer {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Inga verifierade telefonnummer", + "account_basics_phone_numbers_dialog_description": "För att använda funktionen för samtalsavisering måste du lägga till och verifiera minst ett telefonnummer. Verifieringen kan göras via SMS eller ett telefonsamtal.", + "account_basics_phone_numbers_dialog_code_placeholder": "t.ex. 123456", + "account_basics_phone_numbers_dialog_check_verification_button": "Bekräfta kod", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} dagliga telefonsamtal", + "account_upgrade_dialog_tier_features_no_calls": "Inga telefonsamtal", + "account_upgrade_dialog_tier_features_calls_one": "{{calls}} dagliga telefonsamtal" } From ca25b80bfbba4a012df992d1f3f350beae18a6a4 Mon Sep 17 00:00:00 2001 From: arjan-s Date: Tue, 30 May 2023 07:40:29 +0000 Subject: [PATCH 015/305] Translated using Weblate (Dutch) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/nl/ --- web/public/static/langs/nl.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/nl.json b/web/public/static/langs/nl.json index ca7a2a13..8ccb629d 100644 --- a/web/public/static/langs/nl.json +++ b/web/public/static/langs/nl.json @@ -355,5 +355,30 @@ "prefs_reservations_table_topic_header": "Onderwerp", "prefs_reservations_table_access_header": "Toegang", "prefs_reservations_table_everyone_read_write": "Iedereen kan publiceren en abonneren", - "prefs_reservations_table_not_subscribed": "Niet geabonneerd" + "prefs_reservations_table_not_subscribed": "Niet geabonneerd", + "publish_dialog_call_label": "Telefoongesprek", + "publish_dialog_call_reset": "Telefoongesprek verwijderen", + "publish_dialog_chip_call_label": "Telefoongesprek", + "account_basics_phone_numbers_title": "Telefoonnummers", + "account_basics_phone_numbers_description": "Voor meldingen via telefoongesprekken", + "account_basics_phone_numbers_no_phone_numbers_yet": "Nog geen telefoonnummers", + "account_basics_phone_numbers_dialog_verify_button_call": "Bel me", + "account_upgrade_dialog_tier_features_calls_one": "{{calls}} dagelijkse telefoontjes", + "account_basics_phone_numbers_copied_to_clipboard": "Telefoonnummer gekopieerd naar klembord", + "publish_dialog_call_item": "Bel telefoonnummer {{nummer}}", + "account_basics_phone_numbers_dialog_check_verification_button": "Bevestig code", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Geen geverifieerde telefoonnummers", + "account_basics_phone_numbers_dialog_channel_call": "Telefoongesprek", + "account_basics_phone_numbers_dialog_number_label": "Telefoonnummer", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_code_placeholder": "bijv. 123456", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} dagelijkse telefoontjes", + "account_upgrade_dialog_tier_features_no_calls": "Geen telefoontjes", + "account_basics_phone_numbers_dialog_description": "Als u de functie voor oproepmeldingen wilt gebruiken, moet u ten minste één telefoonnummer toevoegen en verifiëren. Verificatie kan worden gedaan via sms of een telefoontje.", + "account_basics_phone_numbers_dialog_title": "Telefoonnummer toevoegen", + "account_basics_phone_numbers_dialog_number_placeholder": "bijv. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Stuur SMS", + "account_basics_phone_numbers_dialog_code_label": "Verificatiecode", + "account_usage_calls_title": "Aantal telefoontjes", + "account_usage_calls_none": "Met dit account kan niet worden gebeld" } From 453bf435b0be9f8ed459e4fb43abbb87eb6d1f64 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:55:17 +0200 Subject: [PATCH 016/305] Fix account sync race condition --- web/src/components/hooks.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index b9c5536d..6b681881 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -47,6 +47,13 @@ export const useConnectionListeners = (account, subscriptions, users) => { const handleMessage = async (subscriptionId, message) => { const subscription = await subscriptionManager.get(subscriptionId); + + // Race condition: sometimes the subscription is already unsubscribed from account + // sync before the message is handled + if (!subscription) { + return; + } + if (subscription.internal) { await handleInternalMessage(message); } else { From d084a415f354c7895324b098450f27e0de857f23 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 31 May 2023 15:36:02 -0400 Subject: [PATCH 017/305] Do not forward UP messages to upstream --- docs/releases.md | 1 + server/server.go | 2 +- server/server_test.go | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 71fceb1e..6c88dd1d 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1225,6 +1225,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes:** * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) +* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) **Maintenance:** diff --git a/server/server.go b/server/server.go index ac54aa50..d2fac01f 100644 --- a/server/server.go +++ b/server/server.go @@ -760,7 +760,7 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.TwilioAccount != "" && call != "" { go s.callPhone(v, r, m, call) } - if s.config.UpstreamBaseURL != "" { + if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } } else { diff --git a/server/server_test.go b/server/server_test.go index 73df2762..d7c4a7c6 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2559,6 +2559,29 @@ func TestServer_UpstreamBaseURL_With_Access_Token_Success(t *testing.T) { }) } +func TestServer_UpstreamBaseURL_DoNotForwardUnifiedPush(t *testing.T) { + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + t.Fatal("UnifiedPush messages should not be forwarded") + })) + defer upstreamServer.Close() + + c := newTestConfigWithAuthFile(t) + c.BaseURL = "http://myserver.internal" + c.UpstreamBaseURL = upstreamServer.URL + s := newTestServer(t, c) + + // Send UP message, this should not forward to upstream server + response := request(t, s, "PUT", "/mytopic?up=1", `hi there`, nil) + require.Equal(t, 200, response.Code) + m := toMessage(t, response.Body.String()) + require.NotEmpty(t, m.ID) + require.Equal(t, "hi there", m.Message) + + // Forwarding is done asynchronously, so wait a bit. + // This ensures that the t.Fatal above is actually not triggered. + time.Sleep(500 * time.Millisecond) +} + func newTestConfig(t *testing.T) *Config { conf := NewConfig() conf.BaseURL = "http://127.0.0.1:12345" From 04cc71af90c92a42589c603c24920bea95b4db54 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 13:56:32 -0400 Subject: [PATCH 018/305] .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b0c2d330..f695607e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ dist/ +dev-dist/ build/ .idea/ .vscode/ From dc8932cd953025708111c222d1c898202fbb1276 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 14:08:51 -0400 Subject: [PATCH 019/305] Fix segault in ntfy pub --- client/client.go | 5 ++++- cmd/app.go | 1 + cmd/publish.go | 4 ++++ cmd/subscribe.go | 4 +++- docs/releases.md | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/client/client.go b/client/client.go index b744fa11..e719e9ef 100644 --- a/client/client.go +++ b/client/client.go @@ -97,7 +97,10 @@ func (c *Client) Publish(topic, message string, options ...PublishOption) (*Mess // WithNoFirebase, and the generic WithHeader. func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishOption) (*Message, error) { topicURL := c.expandTopicURL(topic) - req, _ := http.NewRequest("POST", topicURL, body) + req, err := http.NewRequest("POST", topicURL, body) + if err != nil { + return nil, err + } for _, option := range options { if err := option(req); err != nil { return nil, err diff --git a/cmd/app.go b/cmd/app.go index edef5b47..fd992633 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -29,6 +29,7 @@ var flagsDefault = []cli.Flag{ var ( logLevelOverrideRegex = regexp.MustCompile(`(?i)^([^=\s]+)(?:\s*=\s*(\S+))?\s*->\s*(TRACE|DEBUG|INFO|WARN|ERROR)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go ) // New creates a new CLI application diff --git a/cmd/publish.go b/cmd/publish.go index 0179f9fa..bce27e0f 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -249,6 +249,10 @@ func parseTopicMessageCommand(c *cli.Context) (topic string, message string, com if c.String("message") != "" { message = c.String("message") } + if !topicRegex.MatchString(topic) { + err = fmt.Errorf("topic %s contains invalid characters", topic) + return + } return } diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 2691e6a1..81f5988c 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -72,7 +72,7 @@ ntfy subscribe TOPIC COMMAND $NTFY_TITLE $title, $t Message title $NTFY_PRIORITY $priority, $prio, $p Message priority (1=min, 5=max) $NTFY_TAGS $tags, $tag, $ta Message tags (comma separated list) - $NTFY_RAW $raw Raw JSON message + $NTFY_RAW $raw Raw JSON message Examples: ntfy sub mytopic 'notify-send "$m"' # Execute command for incoming messages @@ -108,6 +108,8 @@ func execSubscribe(c *cli.Context) error { // Checks if user != "" && token != "" { return errors.New("cannot set both --user and --token") + } else if !topicRegex.MatchString(topic) { + return fmt.Errorf("topic %s contains invalid characters", topic) } if !fromConfig { diff --git a/docs/releases.md b/docs/releases.md index 6c88dd1d..0e93b677 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1226,6 +1226,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) * Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) +* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) **Maintenance:** From f58c1e4c84e80f7fa1a2bea2e1b2bfae4240c7d0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 1 Jun 2023 16:01:39 -0400 Subject: [PATCH 020/305] Fix previous fix --- client/client.go | 62 ++++++++++++++++++++----------------------- client/client_test.go | 2 +- cmd/app.go | 1 - cmd/publish.go | 4 --- cmd/subscribe.go | 12 ++++++--- 5 files changed, 38 insertions(+), 43 deletions(-) diff --git a/client/client.go b/client/client.go index e719e9ef..93cf7da5 100644 --- a/client/client.go +++ b/client/client.go @@ -11,23 +11,25 @@ import ( "heckel.io/ntfy/util" "io" "net/http" + "regexp" "strings" "sync" "time" ) -// Event type constants const ( - MessageEvent = "message" - KeepaliveEvent = "keepalive" - OpenEvent = "open" - PollRequestEvent = "poll_request" + // MessageEvent identifies a message event + MessageEvent = "message" ) const ( maxResponseBytes = 4096 ) +var ( + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go +) + // Client is the ntfy client that can be used to publish and subscribe to ntfy topics type Client struct { Messages chan *Message @@ -96,7 +98,10 @@ func (c *Client) Publish(topic, message string, options ...PublishOption) (*Mess // To pass title, priority and tags, check out WithTitle, WithPriority, WithTagsList, WithDelay, WithNoCache, // WithNoFirebase, and the generic WithHeader. func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishOption) (*Message, error) { - topicURL := c.expandTopicURL(topic) + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return nil, err + } req, err := http.NewRequest("POST", topicURL, body) if err != nil { return nil, err @@ -136,11 +141,14 @@ func (c *Client) PublishReader(topic string, body io.Reader, options ...PublishO // By default, all messages will be returned, but you can change this behavior using a SubscribeOption. // See WithSince, WithSinceAll, WithSinceUnixTime, WithScheduled, and the generic WithQueryParam. func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, error) { + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return nil, err + } ctx := context.Background() messages := make([]*Message, 0) msgChan := make(chan *Message) errChan := make(chan error) - topicURL := c.expandTopicURL(topic) log.Debug("%s Polling from topic", util.ShortTopicURL(topicURL)) options = append(options, WithPoll()) go func() { @@ -169,15 +177,18 @@ func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, err // Example: // // c := client.New(client.NewConfig()) -// subscriptionID := c.Subscribe("mytopic") +// subscriptionID, _ := c.Subscribe("mytopic") // for m := range c.Messages { // fmt.Printf("New message: %s", m.Message) // } -func (c *Client) Subscribe(topic string, options ...SubscribeOption) string { +func (c *Client) Subscribe(topic string, options ...SubscribeOption) (string, error) { + topicURL, err := c.expandTopicURL(topic) + if err != nil { + return "", err + } c.mu.Lock() defer c.mu.Unlock() subscriptionID := util.RandomString(10) - topicURL := c.expandTopicURL(topic) log.Debug("%s Subscribing to topic", util.ShortTopicURL(topicURL)) ctx, cancel := context.WithCancel(context.Background()) c.subscriptions[subscriptionID] = &subscription{ @@ -186,7 +197,7 @@ func (c *Client) Subscribe(topic string, options ...SubscribeOption) string { cancel: cancel, } go handleSubscribeConnLoop(ctx, c.Messages, topicURL, subscriptionID, options...) - return subscriptionID + return subscriptionID, nil } // Unsubscribe unsubscribes from a topic that has been previously subscribed to using the unique @@ -202,31 +213,16 @@ func (c *Client) Unsubscribe(subscriptionID string) { sub.cancel() } -// UnsubscribeAll unsubscribes from a topic that has been previously subscribed with Subscribe. -// If there are multiple subscriptions matching the topic, all of them are unsubscribed from. -// -// A topic can be either a full URL (e.g. https://myhost.lan/mytopic), a short URL which is then prepended https:// -// (e.g. myhost.lan -> https://myhost.lan), or a short name which is expanded using the default host in the -// config (e.g. mytopic -> https://ntfy.sh/mytopic). -func (c *Client) UnsubscribeAll(topic string) { - c.mu.Lock() - defer c.mu.Unlock() - topicURL := c.expandTopicURL(topic) - for _, sub := range c.subscriptions { - if sub.topicURL == topicURL { - delete(c.subscriptions, sub.ID) - sub.cancel() - } - } -} - -func (c *Client) expandTopicURL(topic string) string { +func (c *Client) expandTopicURL(topic string) (string, error) { if strings.HasPrefix(topic, "http://") || strings.HasPrefix(topic, "https://") { - return topic + return topic, nil } else if strings.Contains(topic, "/") { - return fmt.Sprintf("https://%s", topic) + return fmt.Sprintf("https://%s", topic), nil } - return fmt.Sprintf("%s/%s", c.config.DefaultHost, topic) + if !topicRegex.MatchString(topic) { + return "", fmt.Errorf("invalid topic name: %s", topic) + } + return fmt.Sprintf("%s/%s", c.config.DefaultHost, topic), nil } func handleSubscribeConnLoop(ctx context.Context, msgChan chan *Message, topicURL, subcriptionID string, options ...SubscribeOption) { diff --git a/client/client_test.go b/client/client_test.go index a71ea5cb..f0b15a3f 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -21,7 +21,7 @@ func TestClient_Publish_Subscribe(t *testing.T) { defer test.StopServer(t, s, port) c := client.New(newTestConfig(port)) - subscriptionID := c.Subscribe("mytopic") + subscriptionID, _ := c.Subscribe("mytopic") time.Sleep(time.Second) msg, err := c.Publish("mytopic", "some message") diff --git a/cmd/app.go b/cmd/app.go index fd992633..edef5b47 100644 --- a/cmd/app.go +++ b/cmd/app.go @@ -29,7 +29,6 @@ var flagsDefault = []cli.Flag{ var ( logLevelOverrideRegex = regexp.MustCompile(`(?i)^([^=\s]+)(?:\s*=\s*(\S+))?\s*->\s*(TRACE|DEBUG|INFO|WARN|ERROR)$`) - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // Same as in server/server.go ) // New creates a new CLI application diff --git a/cmd/publish.go b/cmd/publish.go index bce27e0f..0179f9fa 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -249,10 +249,6 @@ func parseTopicMessageCommand(c *cli.Context) (topic string, message string, com if c.String("message") != "" { message = c.String("message") } - if !topicRegex.MatchString(topic) { - err = fmt.Errorf("topic %s contains invalid characters", topic) - return - } return } diff --git a/cmd/subscribe.go b/cmd/subscribe.go index 81f5988c..c85c4686 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -108,8 +108,6 @@ func execSubscribe(c *cli.Context) error { // Checks if user != "" && token != "" { return errors.New("cannot set both --user and --token") - } else if !topicRegex.MatchString(topic) { - return fmt.Errorf("topic %s contains invalid characters", topic) } if !fromConfig { @@ -196,7 +194,10 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, topicOptions = append(topicOptions, auth) } - subscriptionID := cl.Subscribe(s.Topic, topicOptions...) + subscriptionID, err := cl.Subscribe(s.Topic, topicOptions...) + if err != nil { + return err + } if s.Command != "" { cmds[subscriptionID] = s.Command } else if conf.DefaultCommand != "" { @@ -206,7 +207,10 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, } } if topic != "" { - subscriptionID := cl.Subscribe(topic, options...) + subscriptionID, err := cl.Subscribe(topic, options...) + if err != nil { + return err + } cmds[subscriptionID] = command } for m := range cl.Messages { From 2e9eff69d7a6b796d3d6c27a62da7824a1ca94b6 Mon Sep 17 00:00:00 2001 From: JULIANE LEITE Date: Sat, 3 Jun 2023 01:11:23 +0000 Subject: [PATCH 021/305] Translated using Weblate (Portuguese (Brazil)) Currently translated at 50.2% (192 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/pt_BR/ --- web/public/static/langs/pt_BR.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/pt_BR.json b/web/public/static/langs/pt_BR.json index acf5bca0..16ba3a14 100644 --- a/web/public/static/langs/pt_BR.json +++ b/web/public/static/langs/pt_BR.json @@ -188,5 +188,13 @@ "prefs_users_edit_button": "Editar usuário", "prefs_users_delete_button": "Excluir usuário", "error_boundary_unsupported_indexeddb_title": "Navegação anônima não suportada", - "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." + "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": "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" } From fe3db1375ad22e6deaec8ad057d82aea15215856 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Jun 2023 02:43:04 +0000 Subject: [PATCH 022/305] Bump vite from 4.3.8 to 4.3.9 in /web Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.3.8 to 4.3.9. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v4.3.9/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- web/package-lock.json | 14 +++++++------- web/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index b5754d90..7ed3df2b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -11,7 +11,7 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", - "@mui/material": "latest", + "@mui/material": "*", "dexie": "^3.2.1", "dexie-react-hooks": "^1.1.1", "humanize-duration": "^3.27.3", @@ -19,8 +19,8 @@ "i18next-browser-languagedetector": "^6.1.4", "i18next-http-backend": "^1.4.0", "js-base64": "^3.7.2", - "react": "latest", - "react-dom": "latest", + "react": "*", + "react-dom": "*", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", @@ -37,7 +37,7 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.8" + "vite": "^4.3.9" } }, "node_modules/@ampproject/remapping": { @@ -4518,9 +4518,9 @@ } }, "node_modules/vite": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", - "integrity": "sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "dependencies": { "esbuild": "^0.17.5", diff --git a/web/package.json b/web/package.json index c00e8c6a..274e4c8e 100644 --- a/web/package.json +++ b/web/package.json @@ -40,7 +40,7 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.8" + "vite": "^4.3.9" }, "browserslist": { "production": [ From 2b2753be21ae704df4731bf0f71b6b5149cbc784 Mon Sep 17 00:00:00 2001 From: Shoshin Akamine Date: Mon, 5 Jun 2023 07:13:31 +0000 Subject: [PATCH 023/305] Translated using Weblate (Japanese) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ja/ --- web/public/static/langs/ja.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ja.json b/web/public/static/langs/ja.json index 9c686793..554cd9d3 100644 --- a/web/public/static/langs/ja.json +++ b/web/public/static/langs/ja.json @@ -356,5 +356,29 @@ "account_upgrade_dialog_tier_features_messages_one": "毎日 {{messages}} メッセージ", "account_upgrade_dialog_tier_features_reservations_one": "予約済みトピック {{reservations}} 件", "account_upgrade_dialog_tier_features_emails_one": "毎日メール {{emails}} 件", - "publish_dialog_call_label": "電話" + "publish_dialog_call_label": "電話", + "publish_dialog_call_item": "電話番号 {{number}}", + "account_basics_phone_numbers_title": "電話番号", + "account_usage_calls_none": "このアカウントからは電話を発信できません", + "account_usage_calls_title": "電話を発信しました", + "account_upgrade_dialog_tier_features_calls_one": "電話 1日 {{calls}} 回", + "account_upgrade_dialog_tier_features_no_calls": "電話なし", + "publish_dialog_call_reset": "電話番号を削除", + "publish_dialog_chip_call_label": "電話番号", + "account_basics_phone_numbers_dialog_description": "電話通知機能を使うには、最低ひとつの電話番号を追加して認証する必要があります。認証はSMSまたは電話で実施できます。", + "account_basics_phone_numbers_description": "電話通知", + "account_basics_phone_numbers_dialog_title": "電話番号を追加", + "account_basics_phone_numbers_no_phone_numbers_yet": "電話番号はまだありません", + "account_basics_phone_numbers_copied_to_clipboard": "電話番号がクリップボードにコピーされました", + "account_basics_phone_numbers_dialog_number_label": "電話番号", + "account_basics_phone_numbers_dialog_number_placeholder": "例 +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "SMSを送信", + "account_basics_phone_numbers_dialog_verify_button_call": "自分に電話する", + "account_basics_phone_numbers_dialog_code_label": "確認コード", + "account_basics_phone_numbers_dialog_code_placeholder": "例 123456", + "account_basics_phone_numbers_dialog_check_verification_button": "確認コード", + "account_upgrade_dialog_tier_features_calls_other": "電話 1日 {{calls}} 回", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "認証済み電話番号がありません", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_channel_call": "電話する" } From c045f4d21f81bf16addab57ff57024117065089c Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:22:12 -0400 Subject: [PATCH 024/305] Integrations --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index d1a4d42c..e6113ed7 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -124,6 +124,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [#OpenSourceDiscovery 78: ntfy.sh](https://opensourcedisc.substack.com/p/opensourcediscovery-78-ntfysh) - opensourcedisc.substack.com - 6/2023 - [ntfy: des notifications instantanées](https://blogmotion.fr/diy/ntfy-notification-push-domotique-20708) - blogmotion.fr - 5/2023 - [桌面通知:ntfy](https://www.cnblogs.com/xueweihan/archive/2023/05/04/17370060.html) - cnblogs.com - 5/2023 - [ntfy.sh - Open source push notifications via PUT/POST](https://lobste.rs/s/5drapz/ntfy_sh_open_source_push_notifications) - lobste.rs - 5/2023 From 78e437057c7cd33ae09669a4d3a46a161c76450b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:24:15 -0400 Subject: [PATCH 025/305] Update deps --- go.mod | 32 ++--- go.sum | 64 +++++----- web/package-lock.json | 264 +++++++++++++++++++++--------------------- 3 files changed, 185 insertions(+), 175 deletions(-) diff --git a/go.mod b/go.mod index 162fd943..19af7ba5 100644 --- a/go.mod +++ b/go.mod @@ -3,23 +3,23 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.9.0 // indirect + cloud.google.com/go/firestore v1.10.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/BurntSushi/toml v1.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.16.0 github.com/gabriel-vasile/mimetype v1.4.2 github.com/gorilla/websocket v1.5.0 - github.com/mattn/go-sqlite3 v1.14.16 - github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8 + 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.3 + github.com/urfave/cli/v2 v2.25.5 golang.org/x/crypto v0.9.0 golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.2.0 golang.org/x/term v0.8.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.122.0 + google.golang.org/api v0.125.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -28,15 +28,15 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.11.0 github.com/prometheus/client_golang v1.15.1 - github.com/stripe/stripe-go/v74 v74.18.0 + github.com/stripe/stripe-go/v74 v74.21.0 ) require ( cloud.google.com/go v0.110.2 // indirect - cloud.google.com/go/compute v1.19.3 // indirect + cloud.google.com/go/compute v1.20.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.0.1 // indirect - cloud.google.com/go/longrunning v0.4.2 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/longrunning v0.5.0 // 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 @@ -47,16 +47,16 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.10.0 // indirect github.com/kr/text v0.2.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.4.0 // indirect - github.com/prometheus/common v0.43.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.10.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 @@ -67,7 +67,9 @@ require ( 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.3 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect google.golang.org/grpc v1.55.0 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index bfaf339d..999fc8ac 100644 --- a/go.sum +++ b/go.sum @@ -2,16 +2,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.2 h1:sdFPBr6xG9/wkBbfhmUz/JmZC7X6LavQgcrVINrKiVA= cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= -cloud.google.com/go/compute v1.19.3 h1:DcTwsFgGev/wV5+q8o2fzgcHOaac+DKGC91ZlvpsQds= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.0 h1:cUOcywWuowO9It2i1KX1lIb0HH7gLv6nENKuZGnlcSo= +cloud.google.com/go/compute v1.20.0/go.mod h1:kn5BhC++qUWR/AM3Dn21myV7QbgqejW04cAOrtppaQI= 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.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/iam v1.0.1 h1:lyeCAU6jpnVNrE9zGQkTl3WgNgK/X+uWwaw0kynZJMU= -cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= -cloud.google.com/go/longrunning v0.4.2 h1:WDKiiNXFTaQ6qz/G8FCOkuY9kJmOJGY67wPUC1M2RbE= -cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/firestore v1.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= +cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/longrunning v0.5.0 h1:DK8BH0+hS+DIvc9a2TPnteUievsTCH4ORMAASSb7JcQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= @@ -19,8 +19,8 @@ firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI4 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= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.1 h1:rHnDkSK+/g6DlREUK73PkmIs60pqrnuduK+JmP++JmU= +github.com/BurntSushi/toml v1.3.1/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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -91,27 +91,27 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/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.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.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0 h1:ebSgKfMxynOdxw8QQuFOKMgomqeLGPqNLQox2bo42zg= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= 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.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +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 v0.0.0-20221205223600-4d190b02b8d8 h1:0uFGkScHef2Xd8g74BMHU1jFcnKEm0PzrPn4CluQ9FI= -github.com/olebedev/when v0.0.0-20221205223600-4d190b02b8d8/go.mod h1:T0THb4kP9D3NNqlvCwIG4GyUioTAzEhB4RNVzig/43E= +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= @@ -121,10 +121,10 @@ github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 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.43.0 h1:iq+BVjvYLei5f27wiuNiB1DN6DYQkp1c8Bx0Vykh5us= -github.com/prometheus/common v0.43.0/go.mod h1:NCvr5cQIh3Y/gy73/RdVtC9r8xxrxwJnB+2lB3BxrFc= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +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.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= 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= @@ -139,10 +139,10 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.18.0 h1:ImSIoaVkTUozHxa21AhwHYBjwc8fVSJJJB1Q7oaXzIw= -github.com/stripe/stripe-go/v74 v74.18.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= -github.com/urfave/cli/v2 v2.25.3 h1:VJkt6wvEBOoSjPFQvOkv6iWIrsJyCrKGtCtxXWwmGeY= -github.com/urfave/cli/v2 v2.25.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/stripe/stripe-go/v74 v74.21.0 h1:du6P28r6t7TceuNINYgOoSJW60scbhR5ol2WmBD2a6Q= +github.com/stripe/stripe-go/v74 v74.21.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/urfave/cli/v2 v2.25.5 h1:d0NIAyhh5shGscroL7ek/Ya9QYQE0KNabJgiUinIQkc= +github.com/urfave/cli/v2 v2.25.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -225,8 +225,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T 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.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.125.0 h1:7xGvEY4fyWbhWMHf3R2/4w7L4fXyfpRGE9g6lp8+DCk= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -237,8 +237,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA 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-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= 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= diff --git a/web/package-lock.json b/web/package-lock.json index b5754d90..6bcfffe6 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -65,30 +65,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz", - "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz", + "integrity": "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz", - "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz", + "integrity": "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-compilation-targets": "^7.21.5", - "@babel/helper-module-transforms": "^7.21.5", - "@babel/helpers": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/generator": "^7.22.0", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -104,12 +104,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz", - "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz", + "integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==", "dev": true, "dependencies": { - "@babel/types": "^7.21.5", + "@babel/types": "^7.22.3", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -119,12 +119,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz", - "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", + "integrity": "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.21.5", + "@babel/compat-data": "^7.22.0", "@babel/helper-validator-option": "^7.21.0", "browserslist": "^4.21.3", "lru-cache": "^5.1.1", @@ -138,9 +138,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz", - "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", + "integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -183,19 +183,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz", - "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==", + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz", + "integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.21.5", + "@babel/helper-environment-visitor": "^7.22.1", "@babel/helper-module-imports": "^7.21.4", "@babel/helper-simple-access": "^7.21.5", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" }, "engines": { "node": ">=6.9.0" @@ -260,14 +260,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz", - "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", + "integrity": "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==", "dev": true, "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.5", - "@babel/types": "^7.21.5" + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.3" }, "engines": { "node": ">=6.9.0" @@ -287,9 +287,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz", - "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz", + "integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -329,9 +329,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", + "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -354,19 +354,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz", - "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz", + "integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.5", - "@babel/helper-environment-visitor": "^7.21.5", + "@babel/generator": "^7.22.3", + "@babel/helper-environment-visitor": "^7.22.1", "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.5", - "@babel/types": "^7.21.5", + "@babel/parser": "^7.22.4", + "@babel/types": "^7.22.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -375,9 +375,9 @@ } }, "node_modules/@babel/types": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz", - "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==", + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz", + "integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==", "dependencies": { "@babel/helper-string-parser": "^7.21.5", "@babel/helper-validator-identifier": "^7.19.1", @@ -436,9 +436,9 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz", - "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==", + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -935,18 +935,18 @@ } }, "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", + "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "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": "^1.2.1", @@ -1031,15 +1031,15 @@ "dev": true }, "node_modules/@mui/base": { - "version": "5.0.0-beta.2", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.2.tgz", - "integrity": "sha512-R9R+aqrl1QhZJaO05rhvooqxOaf7SKpQ+EjW80sbP3ticTVmLmrn4YBLQS7/ML+WXdrkrPtqSmKFdSE5Ik3gBQ==", + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", "dependencies": { "@babel/runtime": "^7.21.0", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.7", + "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" @@ -1063,9 +1063,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.2.tgz", - "integrity": "sha512-aOLCXMCySMFL2WmUhnz+DjF84AoFVu8rn35OsL759HXOZMz8zhEwVf5w/xxkWx7DycM2KXDTgAvYW48nTfqTLA==", + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", + "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" @@ -1097,13 +1097,13 @@ } }, "node_modules/@mui/material": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.2.tgz", - "integrity": "sha512-Pfke1l0GG2OJb/Nr10aVr8huoBFcBTdWKV5iFSTEHqf9c2C1ZlyYMISn7ui6X3Gix8vr+hP5kVqH1LAWwQSb6w==", + "version": "5.13.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.4.tgz", + "integrity": "sha512-Yq+4f1KLPa/Szd3xqra2hbOAf2Usl8GbubncArM6LIp40mBLtXIdPE29MNtHsbtuzz4g+eidrETgoi3wdbEYfQ==", "dependencies": { "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.2", - "@mui/core-downloads-tracker": "^5.13.2", + "@mui/base": "5.0.0-beta.4", + "@mui/core-downloads-tracker": "^5.13.4", "@mui/system": "^5.13.2", "@mui/types": "^7.2.4", "@mui/utils": "^5.13.1", @@ -1307,18 +1307,18 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.3.tgz", + "integrity": "sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q==", "engines": { "node": ">=14" } @@ -1340,9 +1340,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.8.tgz", + "integrity": "sha512-lTyWUNrd8ntVkqycEEplasWy2OxNlShj3zqS0LuB1ENUGis5HodmhM7DtCoUGbxj3VW/WsGA0DUhpG6XrM7gPA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1560,9 +1560,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.1.tgz", - "integrity": "sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg==", + "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" @@ -1608,9 +1608,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.21.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", + "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==", "dev": true, "funding": [ { @@ -1620,13 +1620,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -1657,9 +1661,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001489", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", - "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", + "version": "1.0.30001495", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz", + "integrity": "sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg==", "dev": true, "funding": [ { @@ -1852,20 +1856,20 @@ } }, "node_modules/dexie": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.3.tgz", - "integrity": "sha512-iHayBd4UYryDCVUNa3PMsJMEnd8yjyh5p7a+RFeC8i8n476BC9wMhVvqiImq5zJZJf5Tuer+s4SSj+AA3x+ZbQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.4.tgz", + "integrity": "sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==", "engines": { "node": ">=6.0" } }, "node_modules/dexie-react-hooks": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.3.tgz", - "integrity": "sha512-bXXE1gfYtfuVYTNiOlyam+YVaO8KaqacgRuxFuP37YtpS6o/jxT6KOl5h+hhqY36s0UavlHWbL+HWJFMcQumIg==", + "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.1.0-alpha.1 <5.0.0", + "dexie": "^3.2 || ^4.0.1-alpha", "react": ">=16" } }, @@ -1891,9 +1895,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.407", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.407.tgz", - "integrity": "sha512-5smEvFSFYMv90tICOzRVP7Opp98DAC4KW7RRipg3BuNpGbbV3N+x24Zh3sbLb1T5haGtOSy/hrBfXsWnIM9aCg==", + "version": "1.4.423", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.423.tgz", + "integrity": "sha512-y4A7YfQcDGPAeSWM1IuoWzXpg9RY1nwHzHSwRtCSQFp9FgAVDgdWlFf0RbdWfLWQ2WUI+bddUgk5RgTjqRE6FQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2084,16 +2088,16 @@ } }, "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "version": "8.42.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", + "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -3796,9 +3800,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, "funding": [ { @@ -3961,11 +3965,11 @@ } }, "node_modules/react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.12.0.tgz", + "integrity": "sha512-/tCGtLq9umxRvbYeIx3j94CmpQfue0E3qnetVm9luKhu58cR4t+3O4ZrQXBdXfJrBATOAj+wF/1ihJJQI8AoTw==", "dependencies": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.6.3" }, "engines": { "node": ">=14" @@ -3975,12 +3979,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.12.0.tgz", + "integrity": "sha512-UzLwZ3ZVaDr6YV0HdjwxuwtDKgwpJx9o1ea9fU0HV4tTvzdB8WPHzlLFMo5orchpIS84e8G4Erlhu7Rl84XDFQ==", "dependencies": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.6.3", + "react-router": "6.12.0" }, "engines": { "node": ">=14" @@ -4077,9 +4081,9 @@ } }, "node_modules/rollup": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.23.0.tgz", - "integrity": "sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==", + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.24.0.tgz", + "integrity": "sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -4518,9 +4522,9 @@ } }, "node_modules/vite": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.8.tgz", - "integrity": "sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", "dev": true, "dependencies": { "esbuild": "^0.17.5", From 733ef4664b18f2b8b9085d19df86e1c647fa4565 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 7 Jun 2023 13:24:41 -0400 Subject: [PATCH 026/305] Deps --- web/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 8ee27156..a8637edb 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -11,7 +11,7 @@ "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", - "@mui/material": "*", + "@mui/material": "latest", "dexie": "^3.2.1", "dexie-react-hooks": "^1.1.1", "humanize-duration": "^3.27.3", @@ -19,8 +19,8 @@ "i18next-browser-languagedetector": "^6.1.4", "i18next-http-backend": "^1.4.0", "js-base64": "^3.7.2", - "react": "*", - "react-dom": "*", + "react": "latest", + "react-dom": "latest", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", From ff5c854192dafd99d57204ce690d6fbe3828ceb6 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 24 May 2023 21:36:01 +0200 Subject: [PATCH 027/305] Add PWA, service worker and Web Push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use new notification request/opt-in flow for push - Implement unsubscribing - Implement muting - Implement emojis in title - Add iOS specific PWA warning - Don’t use websockets when web push is enabled - Fix duplicate notifications - Implement default web push setting - Implement changing subscription type - Implement web push subscription refresh - Implement web push notification click --- .gitignore | 1 + cmd/serve.go | 17 + cmd/web_push.go | 39 + docs/config.md | 31 +- docs/develop.md | 63 +- go.mod | 2 + go.sum | 5 + server/config.go | 11 +- server/errors.go | 1 + server/server.go | 290 +- server/server.yml | 10 + server/server_account.go | 7 + server/server_middleware.go | 9 + server/server_test.go | 13 + server/smtp_sender.go | 24 - server/types.go | 24 + server/util.go | 24 + server/web_push.go | 132 + web/.eslintrc | 3 +- web/index.html | 7 + web/package-lock.json | 2652 ++++++++++++++++- web/package.json | 3 +- web/public/config.js | 2 +- web/public/static/images/apple-touch-icon.png | Bin 0 -> 15584 bytes web/public/static/images/mask-icon.svg | 20 + web/public/static/images/pwa-192x192.png | Bin 0 -> 6614 bytes web/public/static/images/pwa-512x512.png | Bin 0 -> 19716 bytes web/public/static/langs/en.json | 18 +- web/public/sw.js | 111 + web/src/app/AccountApi.js | 4 + web/src/app/Api.js | 59 + web/src/app/ConnectionManager.js | 17 +- web/src/app/Notifier.js | 104 +- web/src/app/Poller.js | 9 +- web/src/app/Prefs.js | 30 +- web/src/app/Pruner.js | 4 + web/src/app/Session.js | 12 +- web/src/app/SessionReplica.js | 44 + web/src/app/SubscriptionManager.js | 198 +- web/src/app/UserManager.js | 17 +- web/src/app/WebPushWorker.js | 46 + web/src/app/db.js | 21 - web/src/app/getDb.js | 34 + web/src/app/utils.js | 18 +- web/src/components/Account.jsx | 7 +- web/src/components/ActionBar.jsx | 6 +- web/src/components/App.jsx | 4 + web/src/components/Navigation.jsx | 44 +- web/src/components/Preferences.jsx | 32 + web/src/components/SubscribeDialog.jsx | 121 +- web/src/components/SubscriptionPopup.jsx | 168 +- web/src/components/hooks.js | 33 +- web/vite.config.js | 61 +- 53 files changed, 4363 insertions(+), 249 deletions(-) create mode 100644 cmd/web_push.go create mode 100644 server/web_push.go create mode 100644 web/public/static/images/apple-touch-icon.png create mode 100644 web/public/static/images/mask-icon.svg create mode 100644 web/public/static/images/pwa-192x192.png create mode 100644 web/public/static/images/pwa-512x512.png create mode 100644 web/public/sw.js create mode 100644 web/src/app/SessionReplica.js create mode 100644 web/src/app/WebPushWorker.js delete mode 100644 web/src/app/db.js create mode 100644 web/src/app/getDb.js diff --git a/.gitignore b/.gitignore index f695607e..b60c9b23 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ secrets/ node_modules/ .DS_Store __pycache__ +web/dev-dist/ \ No newline at end of file diff --git a/cmd/serve.go b/cmd/serve.go index 5d5381bf..a5105bcd 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -94,6 +94,11 @@ var flagsServe = append( altsrc.NewBoolFlag(&cli.BoolFlag{Name: "enable-metrics", Aliases: []string{"enable_metrics"}, EnvVars: []string{"NTFY_ENABLE_METRICS"}, Value: false, Usage: "if set, Prometheus metrics are exposed via the /metrics endpoint"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "metrics-listen-http", Aliases: []string{"metrics_listen_http"}, EnvVars: []string{"NTFY_METRICS_LISTEN_HTTP"}, Usage: "ip:port used to expose the metrics endpoint (implicitly enables metrics)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "profile-listen-http", Aliases: []string{"profile_listen_http"}, EnvVars: []string{"NTFY_PROFILE_LISTEN_HTTP"}, Usage: "ip:port used to expose the profiling endpoints (implicitly enables profiling)"}), + altsrc.NewBoolFlag(&cli.BoolFlag{Name: "web-push-enabled", Aliases: []string{"web_push_enabled"}, EnvVars: []string{"NTFY_WEB_PUSH_ENABLED"}, Usage: "enable web push (requires public and private key)"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-public-key", Aliases: []string{"web_push_public_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PUBLIC_KEY"}, Usage: "public key used for web push notifications"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), + altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), ) var cmdServe = &cli.Command{ @@ -129,6 +134,11 @@ func execServe(c *cli.Context) error { keyFile := c.String("key-file") certFile := c.String("cert-file") firebaseKeyFile := c.String("firebase-key-file") + webPushEnabled := c.Bool("web-push-enabled") + webPushPrivateKey := c.String("web-push-private-key") + webPushPublicKey := c.String("web-push-public-key") + webPushSubscriptionsFile := c.String("web-push-subscriptions-file") + webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") cacheStartupQueries := c.String("cache-startup-queries") @@ -183,6 +193,8 @@ func execServe(c *cli.Context) error { // Check values if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") + } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { + return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") } else if managerInterval < 5*time.Second { @@ -347,6 +359,11 @@ func execServe(c *cli.Context) error { conf.MetricsListenHTTP = metricsListenHTTP conf.ProfileListenHTTP = profileListenHTTP conf.Version = c.App.Version + conf.WebPushEnabled = webPushEnabled + conf.WebPushPrivateKey = webPushPrivateKey + conf.WebPushPublicKey = webPushPublicKey + conf.WebPushSubscriptionsFile = webPushSubscriptionsFile + conf.WebPushEmailAddress = webPushEmailAddress // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/cmd/web_push.go b/cmd/web_push.go new file mode 100644 index 00000000..becaffd7 --- /dev/null +++ b/cmd/web_push.go @@ -0,0 +1,39 @@ +//go:build !noserver + +package cmd + +import ( + "fmt" + + "github.com/SherClockHolmes/webpush-go" + "github.com/urfave/cli/v2" +) + +func init() { + commands = append(commands, cmdWebPush) +} + +var cmdWebPush = &cli.Command{ + Name: "web-push-keys", + Usage: "Generate web push VAPID keys", + UsageText: "ntfy web-push-keys", + Category: categoryServer, + Action: generateWebPushKeys, +} + +func generateWebPushKeys(c *cli.Context) error { + privateKey, publicKey, err := webpush.GenerateVAPIDKeys() + if err != nil { + return err + } + + fmt.Fprintf(c.App.ErrWriter, `Add the following lines to your config file: +web-push-enabled: true +web-push-public-key: %s +web-push-private-key: %s +web-push-subscriptions-file: +web-push-email-address: +`, publicKey, privateKey) + + return nil +} diff --git a/docs/config.md b/docs/config.md index df1f2cd6..774f9b2f 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1285,13 +1285,17 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-secret-key` | `NTFY_STRIPE_SECRET_KEY` | *string* | - | Payments: Key used for the Stripe API communication, this enables payments | | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | +| `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push-keys` to generate | +| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | +| `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. ## Command line options ``` -$ ntfy serve --help NAME: ntfy serve - Run the ntfy server @@ -1321,8 +1325,8 @@ OPTIONS: --log-file value, --log_file value set log file, default is STDOUT [$NTFY_LOG_FILE] --config value, -c value config file (default: /etc/ntfy/server.yml) [$NTFY_CONFIG_FILE] --base-url value, --base_url value, -B value externally visible base URL for this host (e.g. https://ntfy.sh) [$NTFY_BASE_URL] - --listen-http value, --listen_http value, -l value ip:port used to as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] - --listen-https value, --listen_https value, -L value ip:port used to as HTTPS listen address [$NTFY_LISTEN_HTTPS] + --listen-http value, --listen_http value, -l value ip:port used as HTTP listen address (default: ":80") [$NTFY_LISTEN_HTTP] + --listen-https value, --listen_https value, -L value ip:port used as HTTPS listen address [$NTFY_LISTEN_HTTPS] --listen-unix value, --listen_unix value, -U value listen on unix socket path [$NTFY_LISTEN_UNIX] --listen-unix-mode value, --listen_unix_mode value file permissions of unix socket, e.g. 0700 (default: system default) [$NTFY_LISTEN_UNIX_MODE] --key-file value, --key_file value, -K value private key file, if listen-https is set [$NTFY_KEY_FILE] @@ -1343,11 +1347,12 @@ OPTIONS: --keepalive-interval value, --keepalive_interval value, -k value interval of keepalive messages (default: 45s) [$NTFY_KEEPALIVE_INTERVAL] --manager-interval value, --manager_interval value, -m value interval of for message pruning and stats printing (default: 1m0s) [$NTFY_MANAGER_INTERVAL] --disallowed-topics value, --disallowed_topics value [ --disallowed-topics value, --disallowed_topics value ] topics that are not allowed to be used [$NTFY_DISALLOWED_TOPICS] - --web-root value, --web_root value sets web root to landing page (home), web app (app) or disabled (disable) (default: "app") [$NTFY_WEB_ROOT] + --web-root value, --web_root value sets root of the web app (e.g. /, or /app), or disables it (disable) (default: "/") [$NTFY_WEB_ROOT] --enable-signup, --enable_signup allows users to sign up via the web app, or API (default: false) [$NTFY_ENABLE_SIGNUP] --enable-login, --enable_login allows users to log in via the web app, or API (default: false) [$NTFY_ENABLE_LOGIN] --enable-reservations, --enable_reservations allows users to reserve topics (if their tier allows it) (default: false) [$NTFY_ENABLE_RESERVATIONS] --upstream-base-url value, --upstream_base_url value forward poll request to an upstream server, this is needed for iOS push notifications for self-hosted servers [$NTFY_UPSTREAM_BASE_URL] + --upstream-access-token value, --upstream_access_token value access token to use for the upstream server; needed only if upstream rate limits are exceeded or upstream server requires auth [$NTFY_UPSTREAM_ACCESS_TOKEN] --smtp-sender-addr value, --smtp_sender_addr value SMTP server address (host:port) for outgoing emails [$NTFY_SMTP_SENDER_ADDR] --smtp-sender-user value, --smtp_sender_user value SMTP user (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_USER] --smtp-sender-pass value, --smtp_sender_pass value SMTP password (if e-mail sending is enabled) [$NTFY_SMTP_SENDER_PASS] @@ -1355,6 +1360,10 @@ OPTIONS: --smtp-server-listen value, --smtp_server_listen value SMTP server address (ip:port) for incoming emails, e.g. :25 [$NTFY_SMTP_SERVER_LISTEN] --smtp-server-domain value, --smtp_server_domain value SMTP domain for incoming e-mail, e.g. ntfy.sh [$NTFY_SMTP_SERVER_DOMAIN] --smtp-server-addr-prefix value, --smtp_server_addr_prefix value SMTP email address prefix for topics to prevent spam (e.g. 'ntfy-') [$NTFY_SMTP_SERVER_ADDR_PREFIX] + --twilio-account value, --twilio_account value Twilio account SID, used for phone calls, e.g. AC123... [$NTFY_TWILIO_ACCOUNT] + --twilio-auth-token value, --twilio_auth_token value Twilio auth token [$NTFY_TWILIO_AUTH_TOKEN] + --twilio-phone-number value, --twilio_phone_number value Twilio number to use for outgoing calls [$NTFY_TWILIO_PHONE_NUMBER] + --twilio-verify-service value, --twilio_verify_service value Twilio Verify service ID, used for phone number verification [$NTFY_TWILIO_VERIFY_SERVICE] --global-topic-limit value, --global_topic_limit value, -T value total number of topics allowed (default: 15000) [$NTFY_GLOBAL_TOPIC_LIMIT] --visitor-subscription-limit value, --visitor_subscription_limit value number of subscriptions per visitor (default: 30) [$NTFY_VISITOR_SUBSCRIPTION_LIMIT] --visitor-attachment-total-size-limit value, --visitor_attachment_total_size_limit value total storage limit used for attachments per visitor (default: "100M") [$NTFY_VISITOR_ATTACHMENT_TOTAL_SIZE_LIMIT] @@ -1365,10 +1374,18 @@ OPTIONS: --visitor-message-daily-limit value, --visitor_message_daily_limit value max messages per visitor per day, derived from request limit if unset (default: 0) [$NTFY_VISITOR_MESSAGE_DAILY_LIMIT] --visitor-email-limit-burst value, --visitor_email_limit_burst value initial limit of e-mails per visitor (default: 16) [$NTFY_VISITOR_EMAIL_LIMIT_BURST] --visitor-email-limit-replenish value, --visitor_email_limit_replenish value interval at which burst limit is replenished (one per x) (default: 1h0m0s) [$NTFY_VISITOR_EMAIL_LIMIT_REPLENISH] + --visitor-subscriber-rate-limiting, --visitor_subscriber_rate_limiting enables subscriber-based rate limiting (default: false) [$NTFY_VISITOR_SUBSCRIBER_RATE_LIMITING] --behind-proxy, --behind_proxy, -P if set, use X-Forwarded-For header to determine visitor IP address (for rate limiting) (default: false) [$NTFY_BEHIND_PROXY] --stripe-secret-key value, --stripe_secret_key value key used for the Stripe API communication, this enables payments [$NTFY_STRIPE_SECRET_KEY] --stripe-webhook-key value, --stripe_webhook_key value key required to validate the authenticity of incoming webhooks from Stripe [$NTFY_STRIPE_WEBHOOK_KEY] - --billing-contact value, --billing_contact value e-mail or website to display in upgrade dialog (only if payments are enabled) [$NTFY_BILLING_CONTACT] - --help, -h show help (default: false) + --billing-contact value, --billing_contact value e-mail or website to display in upgrade dialog (only if payments are enabled) [$NTFY_BILLING_CONTACT] + --enable-metrics, --enable_metrics if set, Prometheus metrics are exposed via the /metrics endpoint (default: false) [$NTFY_ENABLE_METRICS] + --metrics-listen-http value, --metrics_listen_http value ip:port used to expose the metrics endpoint (implicitly enables metrics) [$NTFY_METRICS_LISTEN_HTTP] + --profile-listen-http value, --profile_listen_http value ip:port used to expose the profiling endpoints (implicitly enables profiling) [$NTFY_PROFILE_LISTEN_HTTP] + --web-push-enabled, --web_push_enabled enable web push (requires public and private key) (default: false) [$NTFY_WEB_PUSH_ENABLED] + --web-push-public-key value, --web_push_public_key value public key used for web push notifications [$NTFY_WEB_PUSH_PUBLIC_KEY] + --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] + --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] + --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] + --help, -h show help ``` - diff --git a/docs/develop.md b/docs/develop.md index baab3f3a..6be65abd 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -16,7 +16,7 @@ server consists of three components: * **The documentation** is generated by [MkDocs](https://www.mkdocs.org/) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/), which is written in [Python](https://www.python.org/). You'll need Python and MkDocs (via `pip`) only if you want to build the docs. -* **The web app** is written in [React](https://reactjs.org/), using [MUI](https://mui.com/). It uses [Create React App](https://create-react-app.dev/) +* **The web app** is written in [React](https://reactjs.org/), using [MUI](https://mui.com/). It uses [Vite](https://vitejs.dev/) to build the production build. If you want to modify the web app, you need [nodejs](https://nodejs.org/en/) (for `npm`) and install all the 100,000 dependencies (*sigh*). @@ -241,6 +241,67 @@ $ cd web $ npm start ``` +### Testing Web Push locally + +Reference: + +#### With the dev servers + +1. Get web push keys `go run main.go web-push-keys` + +2. Run the server with web push enabled + + ```sh + go run main.go \ + --log-level debug \ + serve \ + --web-push-enabled \ + --web-push-public-key KEY \ + --web-push-private-key KEY \ + --web-push-subscriptions-file=/tmp/subscriptions.db + ``` + +3. In `web/public/config.js` set `base_url` to `http://localhost`. This is required as web push can only be used + with the server matching the `base_url` + +4. Run `ENABLE_DEV_PWA=1 npm run start` - this enables the dev service worker + +5. Set your browser to allow testing service workers insecurely: + + - Chrome: + + Open Chrome with special flags allowing insecure localhost service worker testing (regularly dismissing SSL warnings is not enough) + + ```sh + # for example, macOS + /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ + --user-data-dir=/tmp/foo \ + --unsafely-treat-insecure-origin-as-secure=http://localhost:3000,http://localhost + ``` + + - Firefox: + + See here: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API + + > Note: On Firefox, for testing you can run service workers over HTTP (insecurely); simply check the Enable Service Workers over HTTP (when toolbox is open) option in the Firefox Devtools options/gear menu + + - Safari, iOS: + + There doesn't seem to be a good way to do this currently. The only way is to serve a valid HTTPS certificate. + + This is beyond the scope of this guide, but you can try `mkcert`, a number of reverse proxies such as Traefik and Caddy, + or tunneling software such as [Cloudflare Tunnels][cloudflare_tunnels] or ngrok. + +[cloudflare_tunnels]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/do-more-with-tunnels/trycloudflare/ + +6. Open +#### With a built package + +1. Run `make web-build` + +2. Follow steps 1, 2, 4 and 5 from "With the dev servers" + +3. Open ### Build the docs The sources for the docs live in `docs/`. Similarly to the web app, you can simply run `make docs` to build the documentation. As long as you have `mkdocs` installed (see above), this should work fine: diff --git a/go.mod b/go.mod index 19af7ba5..dda58c9b 100644 --- a/go.mod +++ b/go.mod @@ -39,10 +39,12 @@ require ( cloud.google.com/go/longrunning v0.5.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect + github.com/SherClockHolmes/webpush-go v1.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect 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 diff --git a/go.sum b/go.sum index 999fc8ac..d8e78b86 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,8 @@ github.com/BurntSushi/toml v1.3.1 h1:rHnDkSK+/g6DlREUK73PkmIs60pqrnuduK+JmP++JmU github.com/BurntSushi/toml v1.3.1/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.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= @@ -57,6 +59,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 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= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -149,6 +153,7 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t 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= diff --git a/server/config.go b/server/config.go index a876926e..f7c1813d 100644 --- a/server/config.go +++ b/server/config.go @@ -1,10 +1,11 @@ package server import ( - "heckel.io/ntfy/user" "io/fs" "net/netip" "time" + + "heckel.io/ntfy/user" ) // Defines default config settings (excluding limits, see below) @@ -146,6 +147,11 @@ type Config struct { EnableMetrics bool AccessControlAllowOrigin string // CORS header field to restrict access from web clients Version string // injected by App + WebPushEnabled bool + WebPushPrivateKey string + WebPushPublicKey string + WebPushSubscriptionsFile string + WebPushEmailAddress string } // NewConfig instantiates a default new server config @@ -227,5 +233,8 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", + WebPushPrivateKey: "", + WebPushPublicKey: "", + WebPushSubscriptionsFile: "", } } diff --git a/server/errors.go b/server/errors.go index eee916b5..d13e2969 100644 --- a/server/errors.go +++ b/server/errors.go @@ -114,6 +114,7 @@ var ( errHTTPBadRequestAnonymousCallsNotAllowed = &errHTTP{40035, http.StatusBadRequest, "invalid request: anonymous phone calls are not allowed", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestPhoneNumberVerifyChannelInvalid = &errHTTP{40036, http.StatusBadRequest, "invalid request: verification channel must be 'sms' or 'call'", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestDelayNoCall = &errHTTP{40037, http.StatusBadRequest, "delayed call notifications are not supported", "", nil} + errHTTPBadRequestWebPushSubscriptionInvalid = &errHTTP{40038, http.StatusBadRequest, "invalid request: web push payload malformed", "", nil} errHTTPNotFound = &errHTTP{40401, http.StatusNotFound, "page not found", "", nil} errHTTPUnauthorized = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication", nil} errHTTPForbidden = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication", nil} diff --git a/server/server.go b/server/server.go index d2fac01f..cba74280 100644 --- a/server/server.go +++ b/server/server.go @@ -9,13 +9,6 @@ import ( "encoding/json" "errors" "fmt" - "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" "io" "net" "net/http" @@ -32,32 +25,43 @@ import ( "sync" "time" "unicode/utf8" + + "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" + + "github.com/SherClockHolmes/webpush-go" ) // Server is the main server, providing the UI and API for ntfy type Server struct { - config *Config - httpServer *http.Server - httpsServer *http.Server - httpMetricsServer *http.Server - httpProfileServer *http.Server - unixListener net.Listener - smtpServer *smtp.Server - smtpServerBackend *smtpBackend - smtpSender mailer - topics map[string]*topic - visitors map[string]*visitor // ip: or user: - firebaseClient *firebaseClient - messages int64 // Total number of messages (persisted if messageCache enabled) - messagesHistory []int64 // Last n values of the messages counter, used to determine rate - userManager *user.Manager // Might be nil! - messageCache *messageCache // Database that stores the messages - fileCache *fileCache // File system based cache that stores attachments - stripe stripeAPI // Stripe API, can be replaced with a mock - priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) - metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set - closeChan chan bool - mu sync.RWMutex + config *Config + httpServer *http.Server + httpsServer *http.Server + httpMetricsServer *http.Server + httpProfileServer *http.Server + unixListener net.Listener + smtpServer *smtp.Server + smtpServerBackend *smtpBackend + smtpSender mailer + topics map[string]*topic + visitors map[string]*visitor // ip: or user: + firebaseClient *firebaseClient + messages int64 // Total number of messages (persisted if messageCache enabled) + messagesHistory []int64 // Last n values of the messages counter, used to determine rate + userManager *user.Manager // Might be nil! + messageCache *messageCache // Database that stores the messages + webPushSubscriptionStore *webPushSubscriptionStore // Database that stores web push subscriptions + fileCache *fileCache // File system based cache that stores attachments + stripe stripeAPI // Stripe API, can be replaced with a mock + priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) + metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set + closeChan chan bool + mu sync.RWMutex } // handleFunc extends the normal http.HandlerFunc to be able to easily return errors @@ -65,17 +69,21 @@ type handleFunc func(http.ResponseWriter, *http.Request, *visitor) error var ( // If changed, don't forget to update Android App and auth_sqlite.go - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! - topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! - externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic - jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) - ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) - rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) - wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) - authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! + topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! + externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic + jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) + ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) + rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) + wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) + authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) + webPushPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push$`) + webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) + publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) webConfigPath = "/config.js" + webManifestPath = "/manifest.webmanifest" + webServiceWorkerPath = "/sw.js" accountPath = "/account" matrixPushPath = "/_matrix/push/v1/notify" metricsPath = "/metrics" @@ -98,6 +106,7 @@ var ( apiAccountBillingSubscriptionCheckoutSuccessTemplate = "/v1/account/billing/subscription/success/{CHECKOUT_SESSION_ID}" apiAccountBillingSubscriptionCheckoutSuccessRegex = regexp.MustCompile(`/v1/account/billing/subscription/success/(.+)$`) apiAccountReservationSingleRegex = regexp.MustCompile(`/v1/account/reservation/([-_A-Za-z0-9]{1,64})$`) + apiWebPushConfig = "/v1/web-push-config" staticRegex = regexp.MustCompile(`^/static/.+`) docsRegex = regexp.MustCompile(`^/docs(|/.*)$`) fileRegex = regexp.MustCompile(`^/file/([-_A-Za-z0-9]{1,64})(?:\.[A-Za-z0-9]{1,16})?$`) @@ -151,6 +160,10 @@ func New(conf *Config) (*Server, error) { if err != nil { return nil, err } + webPushSubscriptionStore, err := createWebPushSubscriptionStore(conf) + if err != nil { + return nil, err + } topics, err := messageCache.Topics() if err != nil { return nil, err @@ -188,17 +201,18 @@ func New(conf *Config) (*Server, error) { firebaseClient = newFirebaseClient(sender, auther) } s := &Server{ - config: conf, - messageCache: messageCache, - fileCache: fileCache, - firebaseClient: firebaseClient, - smtpSender: mailer, - topics: topics, - userManager: userManager, - messages: messages, - messagesHistory: []int64{messages}, - visitors: make(map[string]*visitor), - stripe: stripe, + config: conf, + messageCache: messageCache, + webPushSubscriptionStore: webPushSubscriptionStore, + fileCache: fileCache, + firebaseClient: firebaseClient, + smtpSender: mailer, + topics: topics, + userManager: userManager, + messages: messages, + messagesHistory: []int64{messages}, + visitors: make(map[string]*visitor), + stripe: stripe, } s.priceCache = util.NewLookupCache(s.fetchStripePrices, conf.StripePriceCacheDuration) return s, nil @@ -213,6 +227,14 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } +func createWebPushSubscriptionStore(conf *Config) (*webPushSubscriptionStore, error) { + if !conf.WebPushEnabled { + return nil, nil + } + + return newWebPushSubscriptionStore(conf.WebPushSubscriptionsFile) +} + // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts // a manager go routine to print stats and prune messages. func (s *Server) Run() error { @@ -342,6 +364,9 @@ func (s *Server) closeDatabases() { s.userManager.Close() } s.messageCache.Close() + if s.webPushSubscriptionStore != nil { + s.webPushSubscriptionStore.Close() + } } // handle is the main entry point for all HTTP requests @@ -416,6 +441,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleHealth(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == webConfigPath { return s.ensureWebEnabled(s.handleWebConfig)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == webManifestPath { + return s.ensureWebEnabled(s.handleWebManifest)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == webServiceWorkerPath { + return s.ensureWebEnabled(s.handleStatic)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiUsersPath { return s.ensureAdmin(s.handleUsersGet)(w, r, v) } else if r.Method == http.MethodPut && r.URL.Path == apiUsersPath { @@ -474,6 +503,8 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { return s.ensurePaymentsEnabled(s.handleBillingTiersGet)(w, r, v) + } else if r.Method == http.MethodGet && r.URL.Path == apiWebPushConfig { + return s.ensureWebPushEnabled(s.handleAPIWebPushConfig)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == matrixPushPath { return s.handleMatrixDiscovery(w) } else if r.Method == http.MethodGet && r.URL.Path == metricsPath && s.metricsHandler != nil { @@ -504,6 +535,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) + } else if r.Method == http.MethodPost && webPushPathRegex.MatchString(r.URL.Path) { + return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) + } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { + return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } @@ -535,6 +570,63 @@ func (s *Server) handleTopicAuth(w http.ResponseWriter, _ *http.Request, _ *visi return s.writeJSON(w, newSuccessResponse()) } +func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, _ *visitor) error { + response := &apiWebPushConfigResponse{ + PublicKey: s.config.WebPushPublicKey, + } + + return s.writeJSON(w, response) +} + +func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { + var username string + u := v.User() + if u != nil { + username = u.Name + } + + var sub webPushSubscribePayload + err := json.NewDecoder(r.Body).Decode(&sub) + + if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPushSubscriptionStore.AddSubscription(topic.ID, username, sub) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { + var payload webPushUnsubscribePayload + + err := json.NewDecoder(r.Body).Decode(&payload) + + if err != nil { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPushSubscriptionStore.RemoveSubscription(topic.ID, payload.Endpoint) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -564,6 +656,11 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi return err } +func (s *Server) handleWebManifest(w http.ResponseWriter, r *http.Request, v *visitor) error { + w.Header().Set("Content-Type", "application/manifest+json") + return s.handleStatic(w, r, v) +} + // handleMetrics returns Prometheus metrics. This endpoint is only called if enable-metrics is set, // and listen-metrics-http is not set. func (s *Server) handleMetrics(w http.ResponseWriter, r *http.Request, _ *visitor) error { @@ -763,6 +860,9 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } + if s.config.WebPushEnabled { + go s.publishToWebPushEndpoints(v, m) + } } else { logvrm(v, r, m).Tag(tagPublish).Debug("Message delayed, will process later") } @@ -877,6 +977,95 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { } } +func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { + subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) + + if err != nil { + logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return + } + + failedCount := 0 + totalCount := len(subscriptions) + + wg := &sync.WaitGroup{} + wg.Add(totalCount) + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": totalCount} + + // Importing the emojis in the service worker would add unnecessary complexity, + // simply do it here for web push notifications instead + var titleWithDefault string + var formattedTitle string + + emojis, _, err := toEmojis(m.Tags) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + if m.Title == "" { + titleWithDefault = m.Topic + } else { + titleWithDefault = m.Title + } + + if len(emojis) > 0 { + formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) + } else { + formattedTitle = titleWithDefault + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + defer wg.Done() + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + + payload := &webPushPayload{ + SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), + Message: *m, + FormattedTitle: formattedTitle, + } + jsonPayload, err := json.Marshal(payload) + + if err != nil { + failedCount++ + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + _, err = webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + failedCount++ + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + + // probably need to handle different codes differently, + // but for now just expire the subscription on any error + err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + } + }(i, xi) + } + + ctx = log.Context{"topic": m.Topic, "message_id": m.ID, "failed_count": failedCount, "total_count": totalCount} + + if failedCount > 0 { + logvm(v, m).Fields(ctx).Warn("Unable to publish web push messages to %d of %d endpoints", failedCount, totalCount) + } else { + logvm(v, m).Fields(ctx).Debug("Published %d web push messages successfully", totalCount) + } +} + func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { cache = readBoolParam(r, true, "x-cache", "cache") firebase = readBoolParam(r, true, "x-firebase", "firebase") @@ -1692,6 +1881,9 @@ func (s *Server) sendDelayedMessage(v *visitor, m *message) error { if s.config.UpstreamBaseURL != "" { go s.forwardPollRequest(v, m) } + if s.config.WebPushEnabled { + go s.publishToWebPushEndpoints(v, m) + } if err := s.messageCache.MarkPublished(m); err != nil { return err } diff --git a/server/server.yml b/server/server.yml index 9c7972e9..ecb89994 100644 --- a/server/server.yml +++ b/server/server.yml @@ -38,6 +38,16 @@ # # firebase-key-file: +# Enable web push +# +# Run ntfy web-push-keys to generate the keys +# +# web-push-enabled: true +# web-push-public-key: "" +# web-push-private-key: "" +# web-push-subscriptions-file: "" +# web-push-email-address: "" + # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. # diff --git a/server/server_account.go b/server/server_account.go index 6e6a6864..dbadb81a 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -170,6 +170,13 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * if _, err := s.userManager.Authenticate(u.Name, req.Password); err != nil { return errHTTPBadRequestIncorrectPasswordConfirmation } + if s.webPushSubscriptionStore != nil { + err := s.webPushSubscriptionStore.ExpireWebPushForUser(u.Name) + + if err != nil { + logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) + } + } if u.Billing.StripeSubscriptionID != "" { logvr(v, r).Tag(tagStripe).Info("Canceling billing subscription for user %s", u.Name) if _, err := s.stripe.CancelSubscription(u.Billing.StripeSubscriptionID); err != nil { diff --git a/server/server_middleware.go b/server/server_middleware.go index 7aea45a3..41c2706c 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -58,6 +58,15 @@ func (s *Server) ensureWebEnabled(next handleFunc) handleFunc { } } +func (s *Server) ensureWebPushEnabled(next handleFunc) handleFunc { + return func(w http.ResponseWriter, r *http.Request, v *visitor) error { + if !s.config.WebPushEnabled { + return errHTTPNotFound + } + return next(w, r, v) + } +} + func (s *Server) ensureUserManager(next handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, v *visitor) error { if s.userManager == nil { diff --git a/server/server_test.go b/server/server_test.go index d7c4a7c6..b9f2912d 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -238,6 +238,12 @@ func TestServer_WebEnabled(t *testing.T) { rr = request(t, s, "GET", "/config.js", "", nil) require.Equal(t, 404, rr.Code) + rr = request(t, s, "GET", "/manifest.webmanifest", "", nil) + require.Equal(t, 404, rr.Code) + + rr = request(t, s, "GET", "/sw.js", "", nil) + require.Equal(t, 404, rr.Code) + rr = request(t, s, "GET", "/static/css/home.css", "", nil) require.Equal(t, 404, rr.Code) @@ -250,6 +256,13 @@ func TestServer_WebEnabled(t *testing.T) { rr = request(t, s2, "GET", "/config.js", "", nil) require.Equal(t, 200, rr.Code) + + rr = request(t, s2, "GET", "/manifest.webmanifest", "", nil) + require.Equal(t, 200, rr.Code) + require.Equal(t, "application/manifest+json", rr.Header().Get("Content-Type")) + + rr = request(t, s2, "GET", "/sw.js", "", nil) + require.Equal(t, 200, rr.Code) } func TestServer_PublishLargeMessage(t *testing.T) { diff --git a/server/smtp_sender.go b/server/smtp_sender.go index 9093687e..759ef396 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -1,8 +1,6 @@ package server import ( - _ "embed" // required by go:embed - "encoding/json" "fmt" "mime" "net" @@ -130,25 +128,3 @@ This message was sent by {ip} at {time} via {topicURL}` body = strings.ReplaceAll(body, "{ip}", senderIP) return body, nil } - -var ( - //go:embed "mailer_emoji_map.json" - emojisJSON string -) - -func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { - var emojiMap map[string]string - if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { - return nil, nil, err - } - tagsOut = make([]string, 0) - emojisOut = make([]string, 0) - for _, t := range tags { - if emoji, ok := emojiMap[t]; ok { - emojisOut = append(emojisOut, emoji) - } else { - tagsOut = append(tagsOut, t) - } - } - return -} diff --git a/server/types.go b/server/types.go index 9e4ff558..6eed5eef 100644 --- a/server/types.go +++ b/server/types.go @@ -7,6 +7,7 @@ import ( "net/netip" "time" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -401,6 +402,10 @@ type apiConfigResponse struct { DisallowedTopics []string `json:"disallowed_topics"` } +type apiWebPushConfigResponse struct { + PublicKey string `json:"public_key"` +} + type apiAccountBillingPrices struct { Month int64 `json:"month"` Year int64 `json:"year"` @@ -462,3 +467,22 @@ type apiStripeSubscriptionDeletedEvent struct { ID string `json:"id"` Customer string `json:"customer"` } + +type webPushPayload struct { + SubscriptionID string `json:"subscription_id"` + Message message `json:"message"` + FormattedTitle string `json:"formatted_title"` +} + +type webPushSubscription struct { + BrowserSubscription webpush.Subscription + Username string +} + +type webPushSubscribePayload struct { + BrowserSubscription webpush.Subscription `json:"browser_subscription"` +} + +type webPushUnsubscribePayload struct { + Endpoint string `json:"endpoint"` +} diff --git a/server/util.go b/server/util.go index 03eb8661..be724c76 100644 --- a/server/util.go +++ b/server/util.go @@ -2,6 +2,8 @@ package server import ( "context" + _ "embed" // required by go:embed + "encoding/json" "fmt" "heckel.io/ntfy/util" "io" @@ -133,3 +135,25 @@ func maybeDecodeHeader(header string) string { } return decoded } + +var ( + //go:embed "mailer_emoji_map.json" + emojisJSON string +) + +func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { + var emojiMap map[string]string + if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { + return nil, nil, err + } + tagsOut = make([]string, 0) + emojisOut = make([]string, 0) + for _, t := range tags { + if emoji, ok := emojiMap[t]; ok { + emojisOut = append(emojisOut, emoji) + } else { + tagsOut = append(tagsOut, t) + } + } + return +} diff --git a/server/web_push.go b/server/web_push.go new file mode 100644 index 00000000..fe9f5149 --- /dev/null +++ b/server/web_push.go @@ -0,0 +1,132 @@ +package server + +import ( + "database/sql" + + _ "github.com/mattn/go-sqlite3" // SQLite driver +) + +// Messages cache +const ( + createWebPushSubscriptionsTableQuery = ` + BEGIN; + CREATE TABLE IF NOT EXISTS web_push_subscriptions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + topic TEXT NOT NULL, + username TEXT, + endpoint TEXT NOT NULL, + key_auth TEXT NOT NULL, + key_p256dh TEXT NOT NULL, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP + ); + CREATE INDEX IF NOT EXISTS idx_topic ON web_push_subscriptions (topic); + CREATE INDEX IF NOT EXISTS idx_endpoint ON web_push_subscriptions (endpoint); + CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON web_push_subscriptions (topic, endpoint); + COMMIT; + ` + insertWebPushSubscriptionQuery = ` + INSERT OR REPLACE INTO web_push_subscriptions (topic, username, endpoint, key_auth, key_p256dh) + VALUES (?, ?, ?, ?, ?); + ` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM web_push_subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM web_push_subscriptions WHERE username = ?` + deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM web_push_subscriptions WHERE topic = ? AND endpoint = ?` + + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM web_push_subscriptions WHERE topic = ?` + + selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM web_push_subscriptions` +) + +type webPushSubscriptionStore struct { + db *sql.DB +} + +func newWebPushSubscriptionStore(filename string) (*webPushSubscriptionStore, error) { + db, err := sql.Open("sqlite3", filename) + if err != nil { + return nil, err + } + if err := setupSubscriptionDb(db); err != nil { + return nil, err + } + webPushSubscriptionStore := &webPushSubscriptionStore{ + db: db, + } + return webPushSubscriptionStore, nil +} + +func setupSubscriptionDb(db *sql.DB) error { + // If 'messages' table does not exist, this must be a new database + rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) + if err != nil { + return setupNewSubscriptionDb(db) + } + rowsMC.Close() + return nil +} + +func setupNewSubscriptionDb(db *sql.DB) error { + if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { + return err + } + return nil +} + +func (c *webPushSubscriptionStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { + _, err := c.db.Exec( + insertWebPushSubscriptionQuery, + topic, + username, + subscription.BrowserSubscription.Endpoint, + subscription.BrowserSubscription.Keys.Auth, + subscription.BrowserSubscription.Keys.P256dh, + ) + return err +} + +func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByTopicAndEndpointQuery, + topic, + endpoint, + ) + return err +} + +func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { + rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) + if err != nil { + return nil, err + } + defer rows.Close() + + data := []webPushSubscription{} + for rows.Next() { + i := webPushSubscription{} + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) + if err != nil { + return nil, err + } + data = append(data, i) + } + return data, nil +} + +func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByEndpointQuery, + endpoint, + ) + return err +} + +func (c *webPushSubscriptionStore) ExpireWebPushForUser(username string) error { + _, err := c.db.Exec( + deleteWebPushSubscriptionByUsernameQuery, + username, + ) + return err +} +func (c *webPushSubscriptionStore) Close() error { + return c.db.Close() +} diff --git a/web/.eslintrc b/web/.eslintrc index adf66130..a21221fc 100644 --- a/web/.eslintrc +++ b/web/.eslintrc @@ -33,5 +33,6 @@ "unnamedComponents": "arrow-function" } ] - } + }, + "overrides": [{ "files": ["./public/sw.js"], "rules": { "no-restricted-globals": "off" } }] } diff --git a/web/index.html b/web/index.html index c146e64d..82bae45e 100644 --- a/web/index.html +++ b/web/index.html @@ -13,11 +13,18 @@ + + + + diff --git a/web/package-lock.json b/web/package-lock.json index a8637edb..c0ef7ef4 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -37,7 +37,8 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-plugin-pwa": "^0.15.0" } }, "node_modules/@ampproject/remapping": { @@ -118,6 +119,30 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz", + "integrity": "sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.1", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz", @@ -137,6 +162,63 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz", + "integrity": "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.22.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz", + "integrity": "sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.1", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz", @@ -171,6 +253,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz", + "integrity": "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", @@ -201,6 +295,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz", @@ -210,6 +316,41 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz", + "integrity": "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-member-expression-to-functions": "^7.22.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-simple-access": { "version": "7.21.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz", @@ -222,6 +363,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", @@ -259,6 +412,21 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helpers": { "version": "7.22.3", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz", @@ -298,6 +466,909 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz", + "integrity": "sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-transform-optional-chaining": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz", + "integrity": "sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz", + "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz", + "integrity": "sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz", + "integrity": "sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz", + "integrity": "sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz", + "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz", + "integrity": "sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz", + "integrity": "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz", + "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz", + "integrity": "sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz", + "integrity": "sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz", + "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.21.5", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-simple-access": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz", + "integrity": "sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz", + "integrity": "sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz", + "integrity": "sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz", + "integrity": "sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz", + "integrity": "sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz", + "integrity": "sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.3", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz", + "integrity": "sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz", + "integrity": "sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz", + "integrity": "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz", + "integrity": "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz", + "integrity": "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", @@ -328,6 +1399,292 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz", + "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz", + "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz", + "integrity": "sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz", + "integrity": "sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.4.tgz", + "integrity": "sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.3", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-plugin-utils": "^7.21.5", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.3", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-attributes": "^7.22.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.21.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.3", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-class-properties": "^7.22.3", + "@babel/plugin-transform-class-static-block": "^7.22.3", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.21.5", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-dynamic-import": "^7.22.1", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-export-namespace-from": "^7.22.3", + "@babel/plugin-transform-for-of": "^7.21.5", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-json-strings": "^7.22.3", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.3", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.3", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.3", + "@babel/plugin-transform-new-target": "^7.22.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.3", + "@babel/plugin-transform-numeric-separator": "^7.22.3", + "@babel/plugin-transform-object-rest-spread": "^7.22.3", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-optional-catch-binding": "^7.22.3", + "@babel/plugin-transform-optional-chaining": "^7.22.3", + "@babel/plugin-transform-parameters": "^7.22.3", + "@babel/plugin-transform-private-methods": "^7.22.3", + "@babel/plugin-transform-private-property-in-object": "^7.22.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.21.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.21.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.3", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.3", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.4", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "node_modules/@babel/runtime": { "version": "7.22.3", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz", @@ -1008,6 +2365,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -1323,12 +2690,36 @@ "node": ">=14" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/node": { + "version": "20.2.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz", + "integrity": "sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==", + "dev": true + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -1365,11 +2756,26 @@ "@types/react": "*" } }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/scheduler": { "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.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, "node_modules/@vitejs/plugin-react": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.0.tgz", @@ -1547,6 +2953,21 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -1591,6 +3012,45 @@ "npm": ">=6" } }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1607,6 +3067,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.21.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz", @@ -1639,6 +3111,24 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1722,6 +3212,21 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1739,6 +3244,19 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/core-js-compat": { + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz", + "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -1776,6 +3294,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -1839,6 +3366,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -1894,6 +3430,21 @@ "csstype": "^3.0.2" } }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.423", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.423.tgz", @@ -2554,6 +4105,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2569,6 +4126,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2602,6 +4187,48 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -2651,6 +4278,21 @@ "is-callable": "^1.1.3" } }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2727,6 +4369,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -2811,6 +4459,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2960,6 +4614,12 @@ "cross-fetch": "3.1.5" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -3154,6 +4814,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -3166,6 +4832,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -3181,6 +4856,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -3206,6 +4890,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -3227,6 +4920,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -3322,6 +5027,129 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-base64": { "version": "3.7.5", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", @@ -3361,6 +5189,12 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3385,6 +5219,27 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -3413,6 +5268,15 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3446,12 +5310,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3472,6 +5354,43 @@ "yallist": "^3.0.2" } }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3799,6 +5718,18 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { "version": "8.4.24", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", @@ -3851,6 +5782,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-bytes": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3895,6 +5838,15 @@ } ] }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -4009,11 +5961,38 @@ "react-dom": ">=16.6.0" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "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" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", @@ -4031,6 +6010,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -4119,6 +6145,26 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", @@ -4150,6 +6196,15 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4202,6 +6257,32 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, "node_modules/stack-generator": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", @@ -4318,6 +6399,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4339,6 +6434,15 @@ "node": ">=4" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4378,6 +6482,63 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4400,6 +6561,18 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -4482,6 +6655,77 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "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" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -4569,6 +6813,27 @@ } } }, + "node_modules/vite-plugin-pwa": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.15.2.tgz", + "integrity": "sha512-l1srtaad5NMNrAtAuub6ArTYG5Ci9AwofXXQ6IsbpCMYQ/0HUndwI7RB2x95+1UBFm7VGttQtT7woBlVnNhBRw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "pretty-bytes": "^6.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0", + "workbox-build": "^6.5.4", + "workbox-window": "^6.5.4" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -4666,6 +6931,391 @@ "node": ">=0.10.0" } }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-build/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "dev": true, + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dev": true, + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/web/package.json b/web/package.json index 274e4c8e..2e52635a 100644 --- a/web/package.json +++ b/web/package.json @@ -40,7 +40,8 @@ "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", - "vite": "^4.3.9" + "vite": "^4.3.9", + "vite-plugin-pwa": "^0.15.0" }, "browserslist": { "production": [ diff --git a/web/public/config.js b/web/public/config.js index 2f46d65c..7bcad73f 100644 --- a/web/public/config.js +++ b/web/public/config.js @@ -7,7 +7,7 @@ var config = { base_url: window.location.origin, // Change to test against a different server - app_root: "/app", + app_root: "/", enable_login: true, enable_signup: true, enable_payments: false, diff --git a/web/public/static/images/apple-touch-icon.png b/web/public/static/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8f89050995c49f6073a9167c8afd7d2831cac384 GIT binary patch literal 15584 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 MMdd`Qh4cgd7jCG$_W%F@ literal 0 HcmV?d00001 diff --git a/web/public/static/images/mask-icon.svg b/web/public/static/images/mask-icon.svg new file mode 100644 index 00000000..32fced6d --- /dev/null +++ b/web/public/static/images/mask-icon.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/web/public/static/images/pwa-192x192.png b/web/public/static/images/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaebcc4da731b451ddfd2403c222ee45b571a46 GIT binary patch literal 6614 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 Yi|2gk?hWM}iV46-&s?|RhD+T402#pN%m4rY literal 0 HcmV?d00001 diff --git a/web/public/static/images/pwa-512x512.png b/web/public/static/images/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..d9003a1959d28c7aea6d6c2fd726866c5ffe9d0f GIT binary patch literal 19716 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 literal 0 HcmV?d00001 diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 5d8a3a3d..53b8c3f5 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -52,9 +52,10 @@ "nav_button_connecting": "connecting", "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", - "alert_grant_title": "Notifications are disabled", - "alert_grant_description": "Grant your browser permission to display desktop notifications.", - "alert_grant_button": "Grant now", + "alert_notification_permission_denied_title": "Notifications are blocked", + "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", + "alert_notification_ios_install_required_title": "iOS Install Required", + "alert_notification_ios_install_required_description": "Click on the Share icon and Add to Home Screen to enable notifications on iOS", "alert_not_supported_title": "Notifications not supported", "alert_not_supported_description": "Notifications are not supported in your browser.", "alert_not_supported_context_description": "Notifications are only supported over HTTPS. This is a limitation of the Notifications API.", @@ -92,6 +93,10 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", + "notification_toggle_unmute": "Unmute", + "notification_toggle_sound": "Sound only", + "notification_toggle_browser": "Browser notifications", + "notification_toggle_background": "Browser and background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -164,6 +169,8 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", + "subscribe_dialog_subscribe_enable_browser_notifications_label": "Notify me via browser notifications", + "subscribe_dialog_subscribe_enable_background_notifications_label": "Also notify me when ntfy is not open (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -363,6 +370,11 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", + "prefs_notifications_web_push_default_title": "Enable web push notifications by default", + "prefs_notifications_web_push_default_description": "This affects the initial state in the subscribe dialog, as well as the default state for synced topics", + "prefs_notifications_web_push_default_initial": "Unset", + "prefs_notifications_web_push_default_enabled": "Enabled", + "prefs_notifications_web_push_default_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/public/sw.js b/web/public/sw.js new file mode 100644 index 00000000..43a2e3b3 --- /dev/null +++ b/web/public/sw.js @@ -0,0 +1,111 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching"; +import { NavigationRoute, registerRoute } from "workbox-routing"; +import { NetworkFirst } from "workbox-strategies"; + +import { getDbAsync } from "../src/app/getDb"; + +// See WebPushWorker, this is to play a sound on supported browsers, +// if the app is in the foreground +const broadcastChannel = new BroadcastChannel("web-push-broadcast"); + +self.addEventListener("install", () => { + console.log("[ServiceWorker] Installed"); + self.skipWaiting(); +}); + +self.addEventListener("activate", () => { + console.log("[ServiceWorker] Activated"); + self.skipWaiting(); +}); + +// There's no good way to test this, and Chrome doesn't seem to implement this, +// so leaving it for now +self.addEventListener("pushsubscriptionchange", (event) => { + console.log("[ServiceWorker] PushSubscriptionChange"); + console.log(event); +}); + +self.addEventListener("push", (event) => { + console.log("[ServiceWorker] Received Web Push Event", { event }); + // server/types.go webPushPayload + const data = event.data.json(); + + const { formatted_title: formattedTitle, subscription_id: subscriptionId, message } = data; + broadcastChannel.postMessage(message); + + event.waitUntil( + (async () => { + const db = await getDbAsync(); + + await Promise.all([ + (async () => { + await db.notifications.add({ + ...message, + subscriptionId, + // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation + new: 1, + }); + const badgeCount = await db.notifications.where({ new: 1 }).count(); + console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); + self.navigator.setAppBadge?.(badgeCount); + })(), + db.subscriptions.update(subscriptionId, { + last: message.id, + }), + self.registration.showNotification(formattedTitle, { + tag: subscriptionId, + body: message.message, + icon: "/static/images/ntfy.png", + data, + }), + ]); + })() + ); +}); + +self.addEventListener("notificationclick", (event) => { + event.notification.close(); + + const { message } = event.notification.data; + + if (message.click) { + self.clients.openWindow(message.click); + return; + } + + const rootUrl = new URL(self.location.origin); + const topicUrl = new URL(message.topic, self.location.origin); + + event.waitUntil( + (async () => { + const clients = await self.clients.matchAll({ type: "window" }); + + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + if (topicClient) { + topicClient.focus(); + return; + } + + const rootClient = clients.find((client) => client.url === rootUrl.toString()); + if (rootClient) { + rootClient.focus(); + return; + } + + self.clients.openWindow(topicUrl); + })() + ); +}); + +// self.__WB_MANIFEST is default injection point +// eslint-disable-next-line no-underscore-dangle +precacheAndRoute(self.__WB_MANIFEST); + +// clean old assets +cleanupOutdatedCaches(); + +// to allow work offline +registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); + +registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); diff --git a/web/src/app/AccountApi.js b/web/src/app/AccountApi.js index 9576c4ec..572764fe 100644 --- a/web/src/app/AccountApi.js +++ b/web/src/app/AccountApi.js @@ -382,6 +382,10 @@ class AccountApi { setTimeout(() => this.runWorker(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async runWorker() { if (!session.token()) { return; diff --git a/web/src/app/Api.js b/web/src/app/Api.js index ba1cbe61..f731e61f 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,6 +6,9 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, + topicUrlWebPushSubscribe, + topicUrlWebPushUnsubscribe, + webPushConfigUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -113,6 +116,62 @@ class Api { } throw new Error(`Unexpected server response ${response.status}`); } + + /** + * @returns {Promise<{ public_key: string } | undefined>} + */ + async getWebPushConfig(baseUrl) { + const response = await fetch(webPushConfigUrl(baseUrl)); + + if (response.ok) { + return response.json(); + } + + if (response.status === 404) { + // web push is not enabled + return undefined; + } + + throw new Error(`Unexpected server response ${response.status}`); + } + + async subscribeWebPush(baseUrl, topic, browserSubscription) { + const user = await userManager.get(baseUrl); + + const url = topicUrlWebPushSubscribe(baseUrl, topic); + console.log(`[Api] Sending Web Push Subscription ${url}`); + + const response = await fetch(url, { + method: "POST", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ browser_subscription: browserSubscription }), + }); + + if (response.ok) { + return true; + } + + throw new Error(`Unexpected server response ${response.status}`); + } + + async unsubscribeWebPush(subscription) { + const user = await userManager.get(subscription.baseUrl); + + const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); + console.log(`[Api] Unsubscribing Web Push Subscription ${url}`); + + const response = await fetch(url, { + method: "POST", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ endpoint: subscription.webPushEndpoint }), + }); + + if (response.ok) { + return true; + } + + throw new Error(`Unexpected server response ${response.status}`); + } } const api = new Api(); diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 2033cbea..952c74af 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -1,7 +1,8 @@ import Connection from "./Connection"; +import { NotificationType } from "./SubscriptionManager"; import { hashCode } from "./utils"; -const makeConnectionId = async (subscription, user) => +const makeConnectionId = (subscription, user) => user ? hashCode(`${subscription.id}|${user.username}|${user.password ?? ""}|${user.token ?? ""}`) : hashCode(`${subscription.id}`); /** @@ -45,13 +46,19 @@ class ConnectionManager { return; } console.log(`[ConnectionManager] Refreshing connections`); - const subscriptionsWithUsersAndConnectionId = await Promise.all( - subscriptions.map(async (s) => { + const subscriptionsWithUsersAndConnectionId = subscriptions + .map((s) => { const [user] = users.filter((u) => u.baseUrl === s.baseUrl); - const connectionId = await makeConnectionId(s, user); + const connectionId = makeConnectionId(s, user); return { ...s, user, connectionId }; }) - ); + // we want to create a ws for both sound-only and active browser notifications, + // only background notifications don't need this as they come over web push. + // however, if background notifications are muted, we again need the ws while + // the page is active + .filter((s) => s.notificationType !== NotificationType.BACKGROUND && s.mutedUntil !== 1); + + console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); const deletedIds = Array.from(this.connections.keys()).filter((id) => !targetIds.includes(id)); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 45792dc8..a005f460 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -1,22 +1,18 @@ -import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl } from "./utils"; +import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; import prefs from "./Prefs"; -import subscriptionManager from "./SubscriptionManager"; import logo from "../img/ntfy.png"; +import api from "./Api"; /** * The notifier is responsible for displaying desktop notifications. Note that not all modern browsers * support this; most importantly, all iOS browsers do not support window.Notification. */ class Notifier { - async notify(subscriptionId, notification, onClickFallback) { + async notify(subscription, notification, onClickFallback) { if (!this.supported()) { return; } - const subscription = await subscriptionManager.get(subscriptionId); - const shouldNotify = await this.shouldNotify(subscription, notification); - if (!shouldNotify) { - return; - } + const shortUrl = topicShortUrl(subscription.baseUrl, subscription.topic); const displayName = topicDisplayName(subscription); const message = formatMessage(notification); @@ -26,6 +22,7 @@ class Notifier { console.log(`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`); const n = new Notification(title, { body: message, + tag: subscription.id, icon: logo, }); if (notification.click) { @@ -33,45 +30,88 @@ class Notifier { } else { n.onclick = () => onClickFallback(subscription); } + } + async playSound() { // Play sound const sound = await prefs.sound(); if (sound && sound !== "none") { try { await playSound(sound); } catch (e) { - console.log(`[Notifier, ${shortUrl}] Error playing audio`, e); + console.log(`[Notifier] Error playing audio`, e); } } } + async unsubscribeWebPush(subscription) { + try { + await api.unsubscribeWebPush(subscription); + } catch (e) { + console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + } + } + + async subscribeWebPush(baseUrl, topic) { + if (!this.supported() || !this.pushSupported()) { + return {}; + } + + // only subscribe to web push for the current server. this is a limitation of the web push API, + // which only allows a single server per service worker origin. + if (baseUrl !== config.base_url) { + return {}; + } + + const registration = await navigator.serviceWorker.getRegistration(); + + if (!registration) { + console.log("[Notifier.subscribeWebPush] Web push supported but no service worker registration found, skipping"); + return {}; + } + + try { + const webPushConfig = await api.getWebPushConfig(baseUrl); + + if (!webPushConfig) { + console.log("[Notifier.subscribeWebPush] Web push not configured on server"); + } + + const browserSubscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlB64ToUint8Array(webPushConfig.public_key), + }); + + await api.subscribeWebPush(baseUrl, topic, browserSubscription); + + console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); + + return browserSubscription; + } catch (e) { + console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + } + + return {}; + } + granted() { return this.supported() && Notification.permission === "granted"; } - maybeRequestPermission(cb) { - if (!this.supported()) { - cb(false); - return; - } - if (!this.granted()) { - Notification.requestPermission().then((permission) => { - const granted = permission === "granted"; - cb(granted); - }); - } + denied() { + return this.supported() && Notification.permission === "denied"; } - async shouldNotify(subscription, notification) { - if (subscription.mutedUntil === 1) { + async maybeRequestPermission() { + if (!this.supported()) { return false; } - const priority = notification.priority ? notification.priority : 3; - const minPriority = await prefs.minPriority(); - if (priority < minPriority) { - return false; - } - return true; + + return new Promise((resolve) => { + Notification.requestPermission((permission) => { + resolve(permission === "granted"); + }); + }); } supported() { @@ -82,6 +122,10 @@ class Notifier { return "Notification" in window; } + pushSupported() { + return "serviceWorker" in navigator && "PushManager" in window; + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification @@ -89,6 +133,10 @@ class Notifier { contextSupported() { return window.location.protocol === "https:" || window.location.hostname.match("^127.") || window.location.hostname === "localhost"; } + + iosSupportedButInstallRequired() { + return "standalone" in window.navigator && window.navigator.standalone === false; + } } const notifier = new Notifier(); diff --git a/web/src/app/Poller.js b/web/src/app/Poller.js index 372e46e5..2261dddc 100644 --- a/web/src/app/Poller.js +++ b/web/src/app/Poller.js @@ -18,6 +18,10 @@ class Poller { setTimeout(() => this.pollAll(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async pollAll() { console.log(`[Poller] Polling all subscriptions`); const subscriptions = await subscriptionManager.all(); @@ -47,14 +51,13 @@ class Poller { } pollInBackground(subscription) { - const fn = async () => { + (async () => { try { await this.poll(subscription); } catch (e) { console.error(`[App] Error polling subscription ${subscription.id}`, e); } - }; - setTimeout(() => fn(), 0); + })(); } } diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 8adc5088..45078352 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,33 +1,45 @@ -import db from "./db"; +import getDb from "./getDb"; class Prefs { + constructor(db) { + this.db = db; + } + async setSound(sound) { - db.prefs.put({ key: "sound", value: sound.toString() }); + this.db.prefs.put({ key: "sound", value: sound.toString() }); } async sound() { - const sound = await db.prefs.get("sound"); + const sound = await this.db.prefs.get("sound"); return sound ? sound.value : "ding"; } async setMinPriority(minPriority) { - db.prefs.put({ key: "minPriority", value: minPriority.toString() }); + this.db.prefs.put({ key: "minPriority", value: minPriority.toString() }); } async minPriority() { - const minPriority = await db.prefs.get("minPriority"); + const minPriority = await this.db.prefs.get("minPriority"); return minPriority ? Number(minPriority.value) : 1; } async setDeleteAfter(deleteAfter) { - db.prefs.put({ key: "deleteAfter", value: deleteAfter.toString() }); + this.db.prefs.put({ key: "deleteAfter", value: deleteAfter.toString() }); } async deleteAfter() { - const deleteAfter = await db.prefs.get("deleteAfter"); + const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } + + async webPushDefaultEnabled() { + const obj = await this.db.prefs.get("webPushDefaultEnabled"); + return obj?.value ?? "initial"; + } + + async setWebPushDefaultEnabled(enabled) { + await this.db.prefs.put({ key: "webPushDefaultEnabled", value: enabled ? "enabled" : "disabled" }); + } } -const prefs = new Prefs(); -export default prefs; +export default new Prefs(getDb()); diff --git a/web/src/app/Pruner.js b/web/src/app/Pruner.js index 498c1566..f9568a33 100644 --- a/web/src/app/Pruner.js +++ b/web/src/app/Pruner.js @@ -18,6 +18,10 @@ class Pruner { setTimeout(() => this.prune(), delayMillis); } + stopWorker() { + clearTimeout(this.timer); + } + async prune() { const deleteAfterSeconds = await prefs.deleteAfter(); const pruneThresholdTimestamp = Math.round(Date.now() / 1000) - deleteAfterSeconds; diff --git a/web/src/app/Session.js b/web/src/app/Session.js index 0b47f93a..8affa53c 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,12 +1,22 @@ +import sessionReplica from "./SessionReplica"; + class Session { + constructor(replica) { + this.replica = replica; + } + store(username, token) { localStorage.setItem("user", username); localStorage.setItem("token", token); + + this.replica.store(username, token); } reset() { localStorage.removeItem("user"); localStorage.removeItem("token"); + + this.replica.reset(); } resetAndRedirect(url) { @@ -27,5 +37,5 @@ class Session { } } -const session = new Session(); +const session = new Session(sessionReplica); export default session; diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js new file mode 100644 index 00000000..808833f6 --- /dev/null +++ b/web/src/app/SessionReplica.js @@ -0,0 +1,44 @@ +import Dexie from "dexie"; + +// Store to IndexedDB as well so that the +// service worker can access it +// TODO: Probably make everything depend on this and not use localStorage, +// but that's a larger refactoring effort for another PR + +class SessionReplica { + constructor() { + const db = new Dexie("session-replica"); + + db.version(1).stores({ + keyValueStore: "&key", + }); + + this.db = db; + } + + async store(username, token) { + try { + await this.db.keyValueStore.bulkPut([ + { key: "user", value: username }, + { key: "token", value: token }, + ]); + } catch (e) { + console.error("[Session] Error replicating session to IndexedDB", e); + } + } + + async reset() { + try { + await this.db.delete(); + } catch (e) { + console.error("[Session] Error resetting session on IndexedDB", e); + } + } + + async username() { + return (await this.db.keyValueStore.get({ key: "user" }))?.value; + } +} + +const sessionReplica = new SessionReplica(); +export default sessionReplica; diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index ecbe4dac..ae4bf49e 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,47 +1,112 @@ -import db from "./db"; +import notifier from "./Notifier"; +import prefs from "./Prefs"; +import getDb from "./getDb"; import { topicUrl } from "./utils"; +/** @typedef {string} NotificationTypeEnum */ + +/** @enum {NotificationTypeEnum} */ +export const NotificationType = { + /** sound-only */ + SOUND: "sound", + /** browser notifications when there is an active tab, via websockets */ + BROWSER: "browser", + /** web push notifications, regardless of whether the window is open */ + BACKGROUND: "background", +}; + class SubscriptionManager { + constructor(db) { + this.db = db; + } + /** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */ async all() { - const subscriptions = await db.subscriptions.toArray(); + const subscriptions = await this.db.subscriptions.toArray(); return Promise.all( subscriptions.map(async (s) => ({ ...s, - new: await db.notifications.where({ subscriptionId: s.id, new: 1 }).count(), + new: await this.db.notifications.where({ subscriptionId: s.id, new: 1 }).count(), })) ); } async get(subscriptionId) { - return db.subscriptions.get(subscriptionId); + return this.db.subscriptions.get(subscriptionId); } - async add(baseUrl, topic, internal) { + async notify(subscriptionId, notification, defaultClickAction) { + const subscription = await this.get(subscriptionId); + + if (subscription.mutedUntil === 1) { + return; + } + + const priority = notification.priority ?? 3; + if (priority < (await prefs.minPriority())) { + return; + } + + await notifier.playSound(); + + // sound only + if (subscription.notificationType === "sound") { + return; + } + + await notifier.notify(subscription, notification, defaultClickAction); + } + + /** + * @param {string} baseUrl + * @param {string} topic + * @param {object} opts + * @param {boolean} opts.internal + * @param {NotificationTypeEnum} opts.notificationType + * @returns + */ + async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); + + const webPushFields = opts.notificationType === "background" ? await notifier.subscribeWebPush(baseUrl, topic) : {}; + const existingSubscription = await this.get(id); if (existingSubscription) { + if (webPushFields.endpoint) { + await this.db.subscriptions.update(existingSubscription.id, { + webPushEndpoint: webPushFields.endpoint, + }); + } + return existingSubscription; } + const subscription = { id: topicUrl(baseUrl, topic), baseUrl, topic, mutedUntil: 0, last: null, - internal: internal || false, + ...opts, + webPushEndpoint: webPushFields.endpoint, }; - await db.subscriptions.put(subscription); + + await this.db.subscriptions.put(subscription); + return subscription; } async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); + const notificationType = (await prefs.webPushDefaultEnabled()) === "enabled" ? "background" : "browser"; + // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { - const local = await this.add(remote.base_url, remote.topic, false); + const local = await this.add(remote.base_url, remote.topic, { + notificationType, + }); const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; await this.update(local.id, { @@ -54,29 +119,33 @@ class SubscriptionManager { ); // Remove local subscriptions that do not exist remotely - const localSubscriptions = await db.subscriptions.toArray(); + const localSubscriptions = await this.db.subscriptions.toArray(); await Promise.all( localSubscriptions.map(async (local) => { const remoteExists = remoteIds.includes(local.id); if (!local.internal && !remoteExists) { - await this.remove(local.id); + await this.remove(local); } }) ); } async updateState(subscriptionId, state) { - db.subscriptions.update(subscriptionId, { state }); + this.db.subscriptions.update(subscriptionId, { state }); } - async remove(subscriptionId) { - await db.subscriptions.delete(subscriptionId); - await db.notifications.where({ subscriptionId }).delete(); + async remove(subscription) { + await this.db.subscriptions.delete(subscription.id); + await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); + + if (subscription.webPushEndpoint) { + await notifier.unsubscribeWebPush(subscription); + } } async first() { - return db.subscriptions.toCollection().first(); // May be undefined + return this.db.subscriptions.toCollection().first(); // May be undefined } async getNotifications(subscriptionId) { @@ -84,7 +153,7 @@ class SubscriptionManager { // It's actually fine, because the reading and filtering is quite fast. The rendering is what's // killing performance. See https://dexie.org/docs/Collection/Collection.offset()#a-better-paging-approach - return db.notifications + return this.db.notifications .orderBy("time") // Sort by time first .filter((n) => n.subscriptionId === subscriptionId) .reverse() @@ -92,7 +161,7 @@ class SubscriptionManager { } async getAllNotifications() { - return db.notifications + return this.db.notifications .orderBy("time") // Efficient, see docs .reverse() .toArray(); @@ -100,18 +169,19 @@ class SubscriptionManager { /** Adds notification, or returns false if it already exists */ async addNotification(subscriptionId, notification) { - const exists = await db.notifications.get(notification.id); + const exists = await this.db.notifications.get(notification.id); if (exists) { return false; } try { - await db.notifications.add({ + // sw.js duplicates this logic, so if you change it here, change it there too + await this.db.notifications.add({ ...notification, subscriptionId, // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation new: 1, }); // FIXME consider put() for double tab - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { last: notification.id, }); } catch (e) { @@ -124,19 +194,19 @@ class SubscriptionManager { async addNotifications(subscriptionId, notifications) { const notificationsWithSubscriptionId = notifications.map((notification) => ({ ...notification, subscriptionId })); const lastNotificationId = notifications.at(-1).id; - await db.notifications.bulkPut(notificationsWithSubscriptionId); - await db.subscriptions.update(subscriptionId, { + await this.db.notifications.bulkPut(notificationsWithSubscriptionId); + await this.db.subscriptions.update(subscriptionId, { last: lastNotificationId, }); } async updateNotification(notification) { - const exists = await db.notifications.get(notification.id); + const exists = await this.db.notifications.get(notification.id); if (!exists) { return false; } try { - await db.notifications.put({ ...notification }); + await this.db.notifications.put({ ...notification }); } catch (e) { console.error(`[SubscriptionManager] Error updating notification`, e); } @@ -144,47 +214,105 @@ class SubscriptionManager { } async deleteNotification(notificationId) { - await db.notifications.delete(notificationId); + await this.db.notifications.delete(notificationId); } async deleteNotifications(subscriptionId) { - await db.notifications.where({ subscriptionId }).delete(); + await this.db.notifications.where({ subscriptionId }).delete(); } async markNotificationRead(notificationId) { - await db.notifications.where({ id: notificationId }).modify({ new: 0 }); + await this.db.notifications.where({ id: notificationId }).modify({ new: 0 }); } async markNotificationsRead(subscriptionId) { - await db.notifications.where({ subscriptionId, new: 1 }).modify({ new: 0 }); + await this.db.notifications.where({ subscriptionId, new: 1 }).modify({ new: 0 }); } async setMutedUntil(subscriptionId, mutedUntil) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { mutedUntil, }); + + const subscription = await this.get(subscriptionId); + + if (subscription.notificationType === "background") { + if (mutedUntil === 1) { + await notifier.unsubscribeWebPush(subscription); + } else { + const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); + await this.db.subscriptions.update(subscriptionId, { + webPushEndpoint: webPushFields.endpoint, + }); + } + } + } + + /** + * + * @param {object} subscription + * @param {NotificationTypeEnum} newNotificationType + * @returns + */ + async setNotificationType(subscription, newNotificationType) { + const oldNotificationType = subscription.notificationType ?? "browser"; + + if (oldNotificationType === newNotificationType) { + return; + } + + let { webPushEndpoint } = subscription; + + if (oldNotificationType === "background") { + await notifier.unsubscribeWebPush(subscription); + webPushEndpoint = undefined; + } else if (newNotificationType === "background") { + const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); + webPushEndpoint = webPushFields.webPushEndpoint; + } + + await this.db.subscriptions.update(subscription.id, { + notificationType: newNotificationType, + webPushEndpoint, + }); + } + + // for logout/delete, unsubscribe first to prevent receiving dangling notifications + async unsubscribeAllWebPush() { + const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); + await Promise.all(subscriptions.map((subscription) => notifier.unsubscribeWebPush(subscription))); + } + + async refreshWebPushSubscriptions() { + const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); + const browserSubscription = await (await navigator.serviceWorker.getRegistration())?.pushManager?.getSubscription(); + + if (browserSubscription) { + await Promise.all(subscriptions.map((subscription) => notifier.subscribeWebPush(subscription.baseUrl, subscription.topic))); + } else { + await Promise.all(subscriptions.map((subscription) => this.setNotificationType(subscription, "sound"))); + } } async setDisplayName(subscriptionId, displayName) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { displayName, }); } async setReservation(subscriptionId, reservation) { - await db.subscriptions.update(subscriptionId, { + await this.db.subscriptions.update(subscriptionId, { reservation, }); } async update(subscriptionId, params) { - await db.subscriptions.update(subscriptionId, params); + await this.db.subscriptions.update(subscriptionId, params); } async pruneNotifications(thresholdTimestamp) { - await db.notifications.where("time").below(thresholdTimestamp).delete(); + await this.db.notifications.where("time").below(thresholdTimestamp).delete(); } } -const subscriptionManager = new SubscriptionManager(); -export default subscriptionManager; +export default new SubscriptionManager(getDb()); diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index 2cdd5449..a3dee0a3 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -1,9 +1,13 @@ -import db from "./db"; +import getDb from "./getDb"; import session from "./Session"; class UserManager { + constructor(db) { + this.db = db; + } + async all() { - const users = await db.users.toArray(); + const users = await this.db.users.toArray(); if (session.exists()) { users.unshift(this.localUser()); } @@ -14,21 +18,21 @@ class UserManager { if (session.exists() && baseUrl === config.base_url) { return this.localUser(); } - return db.users.get(baseUrl); + return this.db.users.get(baseUrl); } async save(user) { if (session.exists() && user.baseUrl === config.base_url) { return; } - await db.users.put(user); + await this.db.users.put(user); } async delete(baseUrl) { if (session.exists() && baseUrl === config.base_url) { return; } - await db.users.delete(baseUrl); + await this.db.users.delete(baseUrl); } localUser() { @@ -43,5 +47,4 @@ class UserManager { } } -const userManager = new UserManager(); -export default userManager; +export default new UserManager(getDb()); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js new file mode 100644 index 00000000..508df725 --- /dev/null +++ b/web/src/app/WebPushWorker.js @@ -0,0 +1,46 @@ +import notifier from "./Notifier"; +import subscriptionManager from "./SubscriptionManager"; + +const onMessage = () => { + notifier.playSound(); +}; + +const delayMillis = 2000; // 2 seconds +const intervalMillis = 300000; // 5 minutes + +class WebPushWorker { + constructor() { + this.timer = null; + } + + startWorker() { + if (this.timer !== null) { + return; + } + + this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); + setTimeout(() => this.updateSubscriptions(), delayMillis); + + this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); + this.broadcastChannel.addEventListener("message", onMessage); + } + + stopWorker() { + clearTimeout(this.timer); + + this.broadcastChannel.removeEventListener("message", onMessage); + this.broadcastChannel.close(); + } + + async updateSubscriptions() { + try { + console.log("[WebPushBroadcastListener] Refreshing web push subscriptions"); + + await subscriptionManager.refreshWebPushSubscriptions(); + } catch (e) { + console.error("[WebPushBroadcastListener] Error refreshing web push subscriptions", e); + } + } +} + +export default new WebPushWorker(); diff --git a/web/src/app/db.js b/web/src/app/db.js deleted file mode 100644 index 0e1a5e71..00000000 --- a/web/src/app/db.js +++ /dev/null @@ -1,21 +0,0 @@ -import Dexie from "dexie"; -import session from "./Session"; - -// Uses Dexie.js -// https://dexie.org/docs/API-Reference#quick-reference -// -// Notes: -// - As per docs, we only declare the indexable columns, not all columns - -// The IndexedDB database name is based on the logged-in user -const dbName = session.username() ? `ntfy-${session.username()}` : "ntfy"; -const db = new Dexie(dbName); - -db.version(1).stores({ - subscriptions: "&id,baseUrl", - notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance - users: "&baseUrl,username", - prefs: "&key", -}); - -export default db; diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js new file mode 100644 index 00000000..9cf8c66e --- /dev/null +++ b/web/src/app/getDb.js @@ -0,0 +1,34 @@ +import Dexie from "dexie"; +import session from "./Session"; +import sessionReplica from "./SessionReplica"; + +// Uses Dexie.js +// https://dexie.org/docs/API-Reference#quick-reference +// +// Notes: +// - As per docs, we only declare the indexable columns, not all columns + +const getDbBase = (username) => { + // The IndexedDB database name is based on the logged-in user + const dbName = username ? `ntfy-${username}` : "ntfy"; + const db = new Dexie(dbName); + + db.version(2).stores({ + subscriptions: "&id,baseUrl,notificationType", + notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance + users: "&baseUrl,username", + prefs: "&key", + }); + + return db; +}; + +export const getDbAsync = async () => { + const username = await sessionReplica.username(); + + return getDbBase(username); +}; + +const getDb = () => getDbBase(session.username()); + +export default getDb; diff --git a/web/src/app/utils.js b/web/src/app/utils.js index ab7551bb..0f879373 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,7 +20,10 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; +export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push`; +export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); +export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; @@ -156,7 +159,7 @@ export const splitNoEmpty = (s, delimiter) => .filter((x) => x !== ""); /** Non-cryptographic hash function, see https://stackoverflow.com/a/8831937/1440785 */ -export const hashCode = async (s) => { +export const hashCode = (s) => { let hash = 0; for (let i = 0; i < s.length; i += 1) { const char = s.charCodeAt(i); @@ -288,3 +291,16 @@ export const randomAlphanumericString = (len) => { } return id; }; + +export const urlB64ToUint8Array = (base64String) => { + const padding = "=".repeat((4 - (base64String.length % 4)) % 4); + const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/"); + + const rawData = window.atob(base64); + const outputArray = new Uint8Array(rawData.length); + + for (let i = 0; i < rawData.length; i += 1) { + outputArray[i] = rawData.charCodeAt(i); + } + return outputArray; +}; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 541d4f86..bbc380c9 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -48,7 +48,7 @@ import routes from "./routes"; import { formatBytes, formatShortDate, formatShortDateTime, openUrl } from "../app/utils"; import accountApi, { LimitBasis, Role, SubscriptionInterval, SubscriptionStatus } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; -import db from "../app/db"; +import getDb from "../app/getDb"; import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import DialogFooter from "./DialogFooter"; @@ -57,6 +57,7 @@ import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; import theme from "./theme"; import session from "../app/Session"; +import subscriptionManager from "../app/SubscriptionManager"; const Account = () => { if (!session.exists()) { @@ -1077,8 +1078,10 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { + await subscriptionManager.unsubscribeAllWebPush(); + await accountApi.delete(password); - await db.delete(); + await getDb().delete(); console.debug(`[Account] Account deleted`); session.resetAndRedirect(routes.app); } catch (e) { diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 798efb49..154f17cb 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -13,7 +13,7 @@ import session from "../app/Session"; import logo from "../img/ntfy.svg"; import subscriptionManager from "../app/SubscriptionManager"; import routes from "./routes"; -import db from "../app/db"; +import getDb from "../app/getDb"; import { topicDisplayName } from "../app/utils"; import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; @@ -120,8 +120,10 @@ const ProfileIcon = () => { const handleLogout = async () => { try { + await subscriptionManager.unsubscribeAllWebPush(); + await accountApi.logout(); - await db.delete(); + await getDb().delete(); } finally { session.resetAndRedirect(routes.app); } diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 189235bb..148c3ac2 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -57,6 +57,10 @@ const App = () => { const updateTitle = (newNotificationsCount) => { document.title = newNotificationsCount > 0 ? `(${newNotificationsCount}) ntfy` : "ntfy"; + + if ("setAppBadge" in window.navigator) { + window.navigator.setAppBadge(newNotificationsCount); + } }; const Layout = () => { diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index 8cbefec4..b2755aa9 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -14,7 +14,6 @@ import { ListSubheader, Portal, Tooltip, - Button, Typography, Box, IconButton, @@ -94,15 +93,10 @@ const NavList = (props) => { setSubscribeDialogKey((prev) => prev + 1); }; - const handleRequestNotificationPermission = () => { - notifier.maybeRequestPermission((granted) => props.onNotificationGranted(granted)); - }; - const handleSubscribeSubmit = (subscription) => { console.log(`[Navigation] New subscription: ${subscription.id}`, subscription); handleSubscribeReset(); navigate(routes.forSubscription(subscription)); - handleRequestNotificationPermission(); }; const handleAccountClick = () => { @@ -114,19 +108,27 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const showNotificationBrowserNotSupportedBox = !notifier.browserSupported(); + const showNotificationPermissionDenied = notifier.denied(); + const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); + const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const showNotificationGrantBox = notifier.supported() && props.subscriptions?.length > 0 && !props.notificationsGranted; + const navListPadding = - showNotificationGrantBox || showNotificationBrowserNotSupportedBox || showNotificationContextNotSupportedBox ? "0" : ""; + showNotificationPermissionDenied || + showNotificationIOSInstallRequired || + showNotificationBrowserNotSupportedBox || + showNotificationContextNotSupportedBox + ? "0" + : ""; return ( <> + {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } - {showNotificationGrantBox && } + {showNotificationIOSInstallRequired && } {!showSubscriptionsList && ( navigate(routes.app)} selected={location.pathname === config.app_root}> @@ -344,16 +346,26 @@ const SubscriptionItem = (props) => { ); }; -const NotificationGrantAlert = (props) => { +const NotificationPermissionDeniedAlert = () => { const { t } = useTranslation(); return ( <> - {t("alert_grant_title")} - {t("alert_grant_description")} - + {t("alert_notification_permission_denied_title")} + {t("alert_notification_permission_denied_description")} + + + + ); +}; + +const NotificationIOSInstallRequiredAlert = () => { + const { t } = useTranslation(); + return ( + <> + + {t("alert_notification_ios_install_required_title")} + {t("alert_notification_ios_install_required_description")} diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 4afc0f80..091e1f51 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,6 +48,7 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; +import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -85,6 +86,7 @@ const Notifications = () => { + {notifier.pushSupported() && } ); @@ -232,6 +234,36 @@ const DeleteAfter = () => { ); }; +const WebPushDefaultEnabled = () => { + const { t } = useTranslation(); + const labelId = "prefWebPushDefaultEnabled"; + const defaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); + const handleChange = async (ev) => { + await prefs.setWebPushDefaultEnabled(ev.target.value); + }; + + // while loading + if (defaultEnabled == null) { + return null; + } + + return ( + + + + + + ); +}; + const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 0f1cec13..57281661 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -8,17 +8,20 @@ import { DialogContentText, DialogTitle, Autocomplete, - Checkbox, FormControlLabel, FormGroup, useMediaQuery, + Switch, + Stack, } from "@mui/material"; import { useTranslation } from "react-i18next"; +import { Warning } from "@mui/icons-material"; +import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; -import subscriptionManager from "../app/SubscriptionManager"; +import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; import poller from "../app/Poller"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -28,11 +31,13 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; +import notifier from "../app/Notifier"; +import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; -export const subscribeTopic = async (baseUrl, topic) => { - const subscription = await subscriptionManager.add(baseUrl, topic); +export const subscribeTopic = async (baseUrl, topic, opts) => { + const subscription = await subscriptionManager.add(baseUrl, topic, opts); if (session.exists()) { try { await accountApi.addSubscription(baseUrl, topic); @@ -52,14 +57,29 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const handleSuccess = async () => { + const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); + + const handleSuccess = async (notificationType) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; - const subscription = await subscribeTopic(actualBaseUrl, topic); + const subscription = await subscribeTopic(actualBaseUrl, topic, { + notificationType, + }); poller.pollInBackground(subscription); // Dangle! + + // if the user hasn't changed the default web push setting yet, set it to enabled + if (notificationType === "background" && webPushDefaultEnabled === "initial") { + await prefs.setWebPushDefaultEnabled(true); + } + props.onSuccess(subscription); }; + // wait for liveQuery load + if (webPushDefaultEnabled === undefined) { + return <>; + } + return ( {!showLoginPage && ( @@ -72,6 +92,7 @@ const SubscribeDialog = (props) => { onCancel={props.onCancel} onNeedsLogin={() => setShowLoginPage(true)} onSuccess={handleSuccess} + webPushDefaultEnabled={webPushDefaultEnabled} /> )} {showLoginPage && setShowLoginPage(false)} onSuccess={handleSuccess} />} @@ -79,6 +100,22 @@ const SubscribeDialog = (props) => { ); }; +const browserNotificationsSupported = notifier.supported(); +const pushNotificationsSupported = notifier.pushSupported(); +const iosInstallRequired = notifier.iosSupportedButInstallRequired(); + +const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { + if (backgroundNotificationsEnabled) { + return NotificationType.BACKGROUND; + } + + if (browserNotificationsEnabled) { + return NotificationType.BROWSER; + } + + return NotificationType.SOUND; +}; + const SubscribePage = (props) => { const { t } = useTranslation(); const { account } = useContext(AccountContext); @@ -96,6 +133,30 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); + // load initial value, but update it in `handleBrowserNotificationsChanged` + // if we interact with the API and therefore possibly change it (from default -> denied) + const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); + // default to on if notifications are already granted + const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + + const handleBrowserNotificationsChanged = async (e) => { + if (e.target.checked && (await notifier.maybeRequestPermission())) { + setBrowserNotificationsEnabled(true); + if (props.webPushDefaultEnabled === "enabled") { + setBackgroundNotificationsEnabled(true); + } + } else { + setNotificationsExplicitlyDenied(notifier.denied()); + setBrowserNotificationsEnabled(false); + setBackgroundNotificationsEnabled(false); + } + }; + + const handleBackgroundNotificationsChanged = (e) => { + setBackgroundNotificationsEnabled(e.target.checked); + }; + const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -133,12 +194,15 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(); + props.onSuccess(getNotificationTypeFromToggles(browserNotificationsEnabled, backgroundNotificationsEnabled)); }; const handleUseAnotherChanged = (e) => { props.setBaseUrl(""); setAnotherServerVisible(e.target.checked); + if (e.target.checked) { + setBackgroundNotificationsEnabled(false); + } }; const subscribeButtonEnabled = (() => { @@ -193,8 +257,7 @@ const SubscribePage = (props) => { setReserveTopicVisible(ev.target.checked)} @@ -217,8 +280,9 @@ const SubscribePage = (props) => { { )} )} + {browserNotificationsSupported && ( + + + } + label={ + + {t("subscribe_dialog_subscribe_enable_browser_notifications_label")} + {notificationsExplicitlyDenied && } + + } + /> + {pushNotificationsSupported && !anotherServerVisible && browserNotificationsEnabled && ( + + } + label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} + /> + )} + + )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index ee83a119..90c63b3f 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -14,12 +14,26 @@ import { useMediaQuery, MenuItem, IconButton, + ListItemIcon, + ListItemText, + Divider, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; -import { Clear } from "@mui/icons-material"; +import { + Check, + Clear, + ClearAll, + Edit, + EnhancedEncryption, + Lock, + LockOpen, + NotificationsOff, + RemoveCircle, + Send, +} from "@mui/icons-material"; import theme from "./theme"; -import subscriptionManager from "../app/SubscriptionManager"; +import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; import session from "../app/Session"; @@ -30,6 +44,7 @@ import api from "../app/Api"; import { AccountContext } from "./App"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; +import notifier from "../app/Notifier"; export const SubscriptionPopup = (props) => { const { t } = useTranslation(); @@ -70,8 +85,7 @@ export const SubscriptionPopup = (props) => { }; const handleSendTestMessage = async () => { - const { baseUrl } = props.subscription; - const { topic } = props.subscription; + const { baseUrl, topic } = props.subscription; const tags = shuffle([ "grinning", "octopus", @@ -133,7 +147,7 @@ export const SubscriptionPopup = (props) => { const handleUnsubscribe = async () => { console.log(`[SubscriptionPopup] Unsubscribing from ${props.subscription.id}`, props.subscription); - await subscriptionManager.remove(props.subscription.id); + await subscriptionManager.remove(props.subscription); if (session.exists() && !subscription.internal) { try { await accountApi.deleteSubscription(props.subscription.baseUrl, props.subscription.topic); @@ -155,19 +169,72 @@ export const SubscriptionPopup = (props) => { return ( <> - {t("action_bar_change_display_name")} - {showReservationAdd && {t("action_bar_reservation_add")}} + + + + + + + + {t("action_bar_change_display_name")} + + {showReservationAdd && ( + + + + + {t("action_bar_reservation_add")} + + )} {showReservationAddDisabled && ( + + + + {t("action_bar_reservation_add")} )} - {showReservationEdit && {t("action_bar_reservation_edit")}} - {showReservationDelete && {t("action_bar_reservation_delete")}} - {t("action_bar_send_test_notification")} - {t("action_bar_clear_notifications")} - {t("action_bar_unsubscribe")} + {showReservationEdit && ( + + + + + + {t("action_bar_reservation_edit")} + + )} + {showReservationDelete && ( + + + + + + {t("action_bar_reservation_delete")} + + )} + + + + + + {t("action_bar_send_test_notification")} + + + + + + + {t("action_bar_clear_notifications")} + + + + + + + {t("action_bar_unsubscribe")} + { ); }; +const getNotificationType = (subscription) => { + if (subscription.mutedUntil === 1) { + return "muted"; + } + + return subscription.notificationType ?? NotificationType.BROWSER; +}; + +const checkedItem = ( + + + +); + +const NotificationToggle = ({ subscription }) => { + const { t } = useTranslation(); + const type = getNotificationType(subscription); + + const handleChange = async (newType) => { + try { + if (newType !== NotificationType.SOUND && !(await notifier.maybeRequestPermission())) { + return; + } + + await subscriptionManager.setNotificationType(subscription, newType); + } catch (e) { + console.error("[NotificationToggle] Error setting notification type", e); + } + }; + + const unmute = async () => { + await subscriptionManager.setMutedUntil(subscription.id, 0); + }; + + if (type === "muted") { + return ( + + + + + {t("notification_toggle_unmute")} + + ); + } + + return ( + <> + + {type === NotificationType.SOUND && checkedItem} + handleChange(NotificationType.SOUND)}> + {t("notification_toggle_sound")} + + + {!notifier.denied() && !notifier.iosSupportedButInstallRequired() && ( + <> + {notifier.supported() && ( + + {type === NotificationType.BROWSER && checkedItem} + handleChange(NotificationType.BROWSER)}> + {t("notification_toggle_browser")} + + + )} + {notifier.pushSupported() && ( + + {type === NotificationType.BACKGROUND && checkedItem} + handleChange(NotificationType.BACKGROUND)}> + {t("notification_toggle_background")} + + + )} + + )} + + ); +}; + export const ReserveLimitChip = () => { const { account } = useContext(AccountContext); if (account?.role === Role.ADMIN || account?.stats.reservations_remaining > 0) { diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 6b681881..3a710e3a 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -2,7 +2,6 @@ import { useNavigate, useParams } from "react-router-dom"; import { useEffect, useState } from "react"; import subscriptionManager from "../app/SubscriptionManager"; import { disallowedTopic, expandSecureUrl, topicUrl } from "../app/utils"; -import notifier from "../app/Notifier"; import routes from "./routes"; import connectionManager from "../app/ConnectionManager"; import poller from "../app/Poller"; @@ -10,6 +9,7 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; +import webPushWorker from "../app/WebPushWorker"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -41,7 +41,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { const added = await subscriptionManager.addNotification(subscriptionId, notification); if (added) { const defaultClickAction = (subscription) => navigate(routes.forSubscription(subscription)); - await notifier.notify(subscriptionId, notification, defaultClickAction); + await subscriptionManager.notify(subscriptionId, notification, defaultClickAction); } }; @@ -61,7 +61,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { } }; - connectionManager.registerStateListener(subscriptionManager.updateState); + connectionManager.registerStateListener((id, state) => subscriptionManager.updateState(id, state)); connectionManager.registerMessageListener(handleMessage); return () => { @@ -79,7 +79,7 @@ export const useConnectionListeners = (account, subscriptions, users) => { if (!account || !account.sync_topic) { return; } - subscriptionManager.add(config.base_url, account.sync_topic, true); // Dangle! + subscriptionManager.add(config.base_url, account.sync_topic, { internal: true }); // Dangle! }, [account]); // When subscriptions or users change, refresh the connections @@ -129,11 +129,30 @@ export const useAutoSubscribe = (subscriptions, selected) => { * and Poller.js, because side effect imports are not a thing in JS, and "Optimize imports" cleans * up "unused" imports. See https://github.com/binwiederhier/ntfy/issues/186. */ + +const stopWorkers = () => { + poller.stopWorker(); + pruner.stopWorker(); + accountApi.stopWorker(); +}; + +const startWorkers = () => { + poller.startWorker(); + pruner.startWorker(); + accountApi.startWorker(); +}; + export const useBackgroundProcesses = () => { useEffect(() => { - poller.startWorker(); - pruner.startWorker(); - accountApi.startWorker(); + console.log("[useBackgroundProcesses] mounting"); + startWorkers(); + webPushWorker.startWorker(); + + return () => { + console.log("[useBackgroundProcesses] unloading"); + stopWorkers(); + webPushWorker.stopWorker(); + }; }, []); }; diff --git a/web/vite.config.js b/web/vite.config.js index ffc80ab7..840ee006 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -1,14 +1,73 @@ /* eslint-disable import/no-extraneous-dependencies */ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; +import { VitePWA } from "vite-plugin-pwa"; + +// please look at develop.md for how to run your browser +// in a mode allowing insecure service worker testing +// this turns on: +// - the service worker in dev mode +// - turns off automatically opening the browser +const enableLocalPWATesting = process.env.ENABLE_DEV_PWA; export default defineConfig(() => ({ build: { outDir: "build", assetsDir: "static/media", + sourcemap: true, }, server: { port: 3000, + open: !enableLocalPWATesting, }, - plugins: [react()], + plugins: [ + react(), + VitePWA({ + registerType: "autoUpdate", + injectRegister: "inline", + strategies: "injectManifest", + devOptions: { + enabled: enableLocalPWATesting, + /* when using generateSW the PWA plugin will switch to classic */ + type: "module", + navigateFallback: "index.html", + }, + injectManifest: { + globPatterns: ["**/*.{js,css,html,mp3,png,svg,json}"], + globIgnores: ["config.js"], + manifestTransforms: [ + (entries) => ({ + manifest: entries.map((entry) => + entry.url === "index.html" + ? { + ...entry, + url: "/", + } + : entry + ), + }), + ], + }, + manifest: { + name: "ntfy web", + short_name: "ntfy", + description: + "ntfy lets you send push notifications via scripts from any computer or phone. Made with ❤ by Philipp C. Heckel, Apache License 2.0, source at https://heckel.io/ntfy.", + theme_color: "#317f6f", + start_url: "/", + icons: [ + { + src: "/static/images/pwa-192x192.png", + sizes: "192x192", + type: "image/png", + }, + { + src: "/static/images/pwa-512x512.png", + sizes: "512x512", + type: "image/png", + }, + ], + }, + }), + ], })); From a9fef387faf5754060dd3e12f6a8921fe99a6df0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 29 May 2023 17:57:21 +0200 Subject: [PATCH 028/305] Add web push tests --- cmd/serve.go | 2 +- cmd/web_push.go | 36 ++++- cmd/web_push_test.go | 24 +++ docs/config.md | 4 +- docs/develop.md | 2 +- docs/static/img/pwa-badge.png | Bin 0 -> 804922 bytes docs/static/img/pwa-install.png | Bin 0 -> 291616 bytes docs/static/img/pwa.png | Bin 0 -> 285281 bytes docs/static/img/web-pin.png | Bin 18235 -> 0 bytes docs/static/img/web-push-settings.png | Bin 0 -> 329556 bytes docs/static/img/web-subscribe.png | Bin 77785 -> 300865 bytes docs/subscribe/desktop.md | 12 ++ docs/subscribe/web.md | 55 +++++-- mkdocs.yml | 1 + server/config.go | 2 + server/server.go | 33 ++-- server/server.yml | 2 +- server/server_test.go | 26 +++- server/server_web_push_test.go | 212 ++++++++++++++++++++++++++ web/src/app/utils.js | 2 +- 20 files changed, 372 insertions(+), 41 deletions(-) create mode 100644 cmd/web_push_test.go create mode 100644 docs/static/img/pwa-badge.png create mode 100644 docs/static/img/pwa-install.png create mode 100644 docs/static/img/pwa.png delete mode 100644 docs/static/img/web-pin.png create mode 100644 docs/static/img/web-push-settings.png create mode 100644 docs/subscribe/desktop.md create mode 100644 server/server_web_push_test.go diff --git a/cmd/serve.go b/cmd/serve.go index a5105bcd..4ec94945 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -194,7 +194,7 @@ func execServe(c *cli.Context) error { if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { - return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push-keys' to generate keys") + return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") } else if managerInterval < 5*time.Second { diff --git a/cmd/web_push.go b/cmd/web_push.go index becaffd7..8b09762c 100644 --- a/cmd/web_push.go +++ b/cmd/web_push.go @@ -14,11 +14,20 @@ func init() { } var cmdWebPush = &cli.Command{ - Name: "web-push-keys", - Usage: "Generate web push VAPID keys", - UsageText: "ntfy web-push-keys", + Name: "web-push", + Usage: "Generate keys, in the future manage web push subscriptions", + UsageText: "ntfy web-push [generate-keys]", Category: categoryServer, - Action: generateWebPushKeys, + + Subcommands: []*cli.Command{ + { + Action: generateWebPushKeys, + Name: "generate-keys", + Usage: "Generate VAPID keys to enable browser background push notifications", + UsageText: "ntfy web-push generate-keys", + Category: categoryServer, + }, + }, } func generateWebPushKeys(c *cli.Context) error { @@ -27,13 +36,28 @@ func generateWebPushKeys(c *cli.Context) error { return err } - fmt.Fprintf(c.App.ErrWriter, `Add the following lines to your config file: + fmt.Fprintf(c.App.ErrWriter, `Keys generated. + +VAPID Public Key: +%s + +VAPID Private Key: +%s + +--- + +Add the following lines to your config file: + web-push-enabled: true web-push-public-key: %s web-push-private-key: %s web-push-subscriptions-file: web-push-email-address: -`, publicKey, privateKey) + +Look at the docs for other methods (e.g. command line flags & environment variables). + +You will also need to set a base-url. +`, publicKey, privateKey, publicKey, privateKey) return nil } diff --git a/cmd/web_push_test.go b/cmd/web_push_test.go new file mode 100644 index 00000000..3241ea43 --- /dev/null +++ b/cmd/web_push_test.go @@ -0,0 +1,24 @@ +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" + "heckel.io/ntfy/server" +) + +func TestCLI_WebPush_GenerateKeys(t *testing.T) { + app, _, _, stderr := newTestApp() + require.Nil(t, runWebPushCommand(app, server.NewConfig(), "generate-keys")) + require.Contains(t, stderr.String(), "Keys generated.") +} + +func runWebPushCommand(app *cli.App, conf *server.Config, args ...string) error { + webPushArgs := []string{ + "ntfy", + "--log-level=ERROR", + "web-push", + } + return app.Run(append(webPushArgs, args...)) +} diff --git a/docs/config.md b/docs/config.md index 774f9b2f..3aeab614 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1286,8 +1286,8 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | | `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | -| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push-keys` to generate | -| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push-keys` to generate | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push generate-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | | `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | diff --git a/docs/develop.md b/docs/develop.md index 6be65abd..09215d9a 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -247,7 +247,7 @@ Reference: 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 z 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∈VDwY+>kNcEiivKvtdKrLoui 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

8Ek<^i4 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

x?A)hy{o3zi*v9&q9Amgj6ua9a>8 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μho>nS>a|&RS=w2b1&@lBg!Shg?gaby7`IWsw`R<) zEP?t8?+V75LJW;-ky3~|iVL>aam3upUqsubZ&((eM@V|{Ktk-f=*)P&+3R5XQ$O`v z5-z#@TDOpKj4QLLTbm1(%#|C9v&69^q2C@t{3@BRQ_BhGCk7m3fO4{OQ@CMv^+{>j zzpet9^T~Wg@DXEr?&IELKgNS1z2bFZ7n}DS1y^1$ox6H&6ncp4PPj+o!a`gM zLz|^MGu(NE%8p|*5=`lr#2l^ohV^&ftQ_CM5-|4R#H8`UtGgk?yxv9 zp{tIZF0_c#iTMfe@oS@ECOm2_|F(y6BwVD~CfV>wVRUunS-XHux5>(z_$fC*NGGEv=eJ)SeM#_jyn}WqgM%qT>A+Kz(joXh)Ejeah3G@EKdt>)?paKKkUFz z=D-7R{x`lbQASd;+^C6@X^;!2dE)DSplqN-{)B-qqQiA#b1f(IO}Q7hn_T zC1@v#O7w~cVvy+Fo*C4h(kw?QNmh%fpF&oqbG|$H-Mws9H_FHZQR*-gEH52wd*Q(g zyY8{F$Xs!m3DgZKJ0QBGXzIB6h+bc26HQVi22=_CztdhX9*!})A|YyN4W>Ar!{z^lx`ueztUhAS}rm08bo#O~KSb?xuT zHZiI1r-XXqSLUj6YCB`@K9@Cy?OvK)Yp)QAgtWRxU&@||-!!~P_KlKh z(#bp{HS=pr-0Fo<+qX57jyRdJu?L2a;JLDOepe)Nbj(7(RNonWeC#Bukblk6QROFW zG*)#_?!-B~_V@2ypPV`>0egsHY|k*;zczX?dhlfO{JqM|&f&mTh>eN1UTA=NV4NU8 zS10&I%u_%l%NX#nr-h;5cWQGhy{BPJmteMoP;DKCmctYig2`Q1g~n7C_wx5^YK+x? zrPC>DD#&VEk{d z)vmlfUxhxM2}oUj`f9EKNSRXm+Cp~i&Fb8x9oG86*eI-3?m~dQ>qz=tETka54|Vp6 zYEI5jIQjdqL)$u6FY~53u@cB@+9RPbD14`3{CKuK>efW+=73S!Tgx~{GhlV~fr}@F zhcHJdP7W$(%Ooky(OQ}xZZ70iF)yT4RTtG6tNwL%dgzi1JlL-E;@-uw&p>PH;u+m{ zxNk7o8%5DhN8Lo_YJZm_EQ01GjCDyL;FSJT#X%mEv9B^4047p$tN`OE$SsRkAZx5> z>bmEx^^@JQRYTtJdUVMRCI7MyXMQ1$`lhqCc)y2!B)Z|K_rl!sGz8+rrQmGn$8enW0y!b{9zj&TdI5{fCZr{tFnI8Q+HJ3?<$s4 zi+tT5vbcrSPhh(x&@P0ueZ}eCETD|e!qQLJk(K}`QNjq{vZ!6`Ha1w+(+`RWU7GZh z=-b^lEO)8eS*67~iKXIP!VK(ClsCJlyFcd2n7=b5c18W9jPB*vqYPJ8P5gN9tF@L7 zou!K#7{10+!wtOYYLXh*j6CYk7*K& z|Fgi#XHjJ+|*mC~z>-1B?u-RAS3qm^D4zX!hU>(mzw?kL4I%CD6HlM^x_ zN@M)35=5>4R?zDSnrOir8WN3d=xL9A}X`G=Wkyr9$6)B;3LXOf*1UrTXKBF4#3J`3eU1Rd4zG z-WN36o3(W4OW~=qdag__sR+ixw-aC-hD6?Dv)1ju=C{>z_@@2Jwv+V1N+nasvRTmZ zh?X|rKd4Qv+{-1x_jhBWg?;r3)&a&A*?WN3BbSEYP!aQ7=8vOBU{!2uQPh8qFF6W3 z?z!KH#JdjP3tH@yGx4^$gGk5fS2_Dwp1L)pDaM=aC1EVS=kS2viLQ>pHoVZ5P_xyK z&33-c#0Qw3E&javn6*bAUid$mIQFV^%%0Dw-kcsRp%4C=U%8t4TI<~i(vdDhC)~^q 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�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

*h+xPgcDJQlicxK92<&WJZ-B^aAZ5+3Akm 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

*<&?s`_kj6hpcHbI!3^?D3x`LeQ0dN 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νj)i&1uDtwu-+B_ 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 FV1iUJ8C?JX literal 0 HcmV?d00001 diff --git a/docs/static/img/pwa-install.png b/docs/static/img/pwa-install.png new file mode 100644 index 0000000000000000000000000000000000000000..e7397add644039938c0aad554896112072c63384 GIT binary patch literal 291616 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%0AI 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
^_F z)aZ9?E_z4Nr)quo!5liyTXWbS)Sysr|8wD%Nzqb_dIevG#LS5vw&8ZY_qu@B>;t>+IT*YN0D7tTf#>$NobNdw^0p&W-(Fu&Ad{<0Xz;j(_i&LtU zoqCmRDzx*|ll=t8ehW>`#~WaX>1L`TVdc2m0CB!xr)P?&zR4nB1qf$okgCwneGeR> zO*7il`-wlWzQifdbv&7ESBO=E&jFDr-hknDi}wA5G7psT)cT17%PpamGeGV`ud>@BlFY0)2U(;>XsYe#v_~b=i!`+z^x85?W`IIRDryd?kwyio-YL|Vw~@npO&0oPB%`9aZwk)*@zr`9KB4${GQ@%JY@e)T> zxjz+Ykt9z``N)fB`6XbPIV}2_;Mm)!m61s1nA8dhHf8;a=*kql{BRCWz4{Ww=bfMfTFatd4D4 zj(Bqgx$Ww`^GPG$hG4eCP){_8<(>TM^?9j$b3J!UjQl2on(N;rm*Hc6x2qT+ANrZl!V~)Tu(?c(1{?hD3Shg-V77OTc?b zBp3MN@$aop1xUL1fM~e6-tZ*aoRB&dlVownIb;#l!sX7K_j!^m{&>mfkcB`O4mNM| zZ|+xLu+TnI@tqCb8*BHS`(R1KBq8=Et?(TaM85-Z=A59*aCi?2hq6-HgjC<>PzaTU zfyn7cLRHm1rf$7v#0DshL6yW#d1Oi>K+v>=aW6PC&0PD^kmLPRK`sKR=ZPX;dXhB9 z!hi~GuNaoJDwo#>H(80vd*re#qYPJP)3nqzTXP5~y_F|lC~?5$BqdpXp6n2M3PVyX zA}q6qc0&(K#dIl7UvjjpfVK;a(%&4J0NuctDb35 ztn3%m0lJdYv90d6kQPo@OZ`~T0@P|`EyCqtjlBcZp{VTV%H)3K5Ocw5VwbIbvlK*W z25XWj!UCyO=2;@dJ-2`Z*W8h$*>u}BLopdQJWOj5W4@HuPFE;K(K0Uw$x^qQBi1E6 z-r_vuL`oIiOgKr;s}7Oo2^X%pp#4htc71rr3Z<$nq33d_CsS`k1KsXjU@4Dv@Pf zs_%yQhtV+V^K+{w9(`li445V;jre3`E->y@5H{8(PwRu+lDA9xxsoJ}CDGq|VUtDU^pQZkH9Lm23>NUR&ROdf zslF8qo8yW;&BHQn+I3%4Mq>)gAFsu3rNoPAi9e;2V6fBsfb^=1g^`IG1Egfh++i*3 zo>s^l2u4d#!DBFS>&6i17bR_f50DEi-8`}iWREAMO(@f;*4y-AR zW#^H(2xT>H!xyEymRcwC=`#)efJwVpQq!8R789kPOAF5}mMV^Q z!_9Iw21;E`*Jkt(E>Y-s@Y)LZIP+jGmnH0&$}m$-9TZ-9Fq#&Z;&|h{GD6g+7{Zqy)-*6iY_`F%3Z7%VAtoQlPPfu}JF50$-gOz< z%a?Vq)PJ@rw4JjZTR-Bo>7?p8v3y3N5VacII&8)Ql2@=QmaTV zoqeX4$nU+(ebLF#qB=`Mb8AN2CGo%d`FUlf2jpvmSEG{ zm=jai(km8Zdh43_eZ2RY9FTjRODhAf5TeXWyuk$Gm0)iDF!}=^!Ur1LpNT-TjcOU61K(5N~E7?9N4ee;A!3) zeTlN!_Y<5?jQu=nq|hmU22{{?kW#3IU#Bd~k=$J5g?%l&C|`mPx2J?^@S2|(!Y)gi z5Wag%yM!U?;sO>kxFKJ4H+r78(vyII8fb}xhkOVCEdEBGaqTyzI)T7-Z|mz7uuj?y z0X9~w?4!Xy)zLpcv8ccYzC|;r_zUFEf->Y>`usW4}3-3Oh!&s_!Y~*l6}aC zRPVDVbTZzRC*!fvZ8#w^$@>XT;{5q@x_n}Ke{tmyv>Z6VFkv&ekNrizCqp=LwP#DZ ze|x|TZ0>9#QJB=1?hqp71;r$F)To;ve5+klf);bl>h1;k;1*g7`kN(+^f8Hv1{oNUAmwv+iw##;vK<%>X z&zZcq@E`y1``5RiNU=?!;c0WJ$VH``2-cPDT>DEt@IQO(@9REU(4Yj)50RJSMN|iR zkc|5GE-}Ub<9Eh@7MZ8^{6(dEr9iw5{5gYjIa50@AI`+p=2H^E(yo$@Q+{QJj8fHR&%sWpQda!i8~^>{bs*HO*|r}pi3R)+Y&axe*i`>Ai2TQRf`-&v z&|&M7U!M$I4yi$CNR{2yaQB{Vdi0d3DRLvx#5cp(5wJ@*n|Umi`GY&byfW76F~QRpNoBiP2Je z)VdZEB#3@Ew&6|yiAw@YuF=U&KviaB0?@0i6M$4B&IgX`t!&%@AqRX~29MDf-68{| z1TJsn4rq~OW0vIKCv_bH8+aw>y8P*&-Md~<2JU2gYRG@K2h7z3RsmX)trpV8k9Qog_-rxS2&8sdegZ47trdXp zBUjgR=&uYGwFlxULlz1iiNLYJ2*^ZRA0MZ@NHLFyOk#0ck~0FhWUD@Wsu8fpCOJNz zuY;6gAmfB7ke|UURgs*8fYILo&l-Z6-IzGvuV?}~8;Q+30NF)m6*N|J{dthxj|^@}-wyS^J)+^djhK z0-)ygu@G#7+dT3zhQICUYbJu?+LPM%?bP+CoB7;L0(W|Fu+?q#Yd%S6)`2|WN153T zqfv-Y30q9@oz|#%25`OT0(~1h(jvzy(Ppt0fDMvH3O)zGYZ3Asoqa4P5E~UTL-?3k zL@Fs+4Qx9&T1-b8p!5pBW)oG@WIz~qY1=sf@Mhn{-Y^ZSf~1X`KwXD;fsO}qn}CGn zeIOb^grJfo{C7)GI=Zr zOrS#w$1|QAaWwy*k87Dibm&=g2t<7dnT>tagxLWDV(4+EZ~>`gt^#!wafB*xDO?Sf ztARc7E&M6NYdQlVwEd)q#4(v~y8{KB%=mtx>Y74VkfHa1Yy!((06MY7?l}ZfZUP%B zyl$~sA)pEVxO)P0OA{ne5bCyOX@Cj8p_Jd#F^f!lD_Vn(Zbqf1_YvcsT)2b!7O!+r zD^3LNAzJWy@Lr@A0U@>nULMqpLIeim;g81^E_v%uC@T|gMgBr<(wzJRkN_tJVB04T!M+Vt*Mi%{aTG3EK zHmV>}fq|P+De+})Z0H>~n98go@FUmEV7L%i_Xb+$5D>1o6E@ZHo2@YtI|Ee=c>!_z zqXyf=k5z*DL#f+|d_D(TAWtyXjd!=(eCH{h0^-(!_w>Gzef?IjEgUMFtqr*C%WAH_ zrS@TyPHW3*nr-&1Gj}@R!Ha}2`+NQn5Gu?Ljg$Hzyv2?yN~nLgUln` zKRq{iqNYh33cLSno~Pb__@3k@C{>Knt-$b}JXpOHs!5t@XMqvfbwSl&?DxXs-^VM- zPuNiAO+tmZZOqS7lC*%Pm+?e9A7r9}Y{|DUEQ--F8~S|=(v#_!>H|EpU)SAre)v3- zQwy%!1m-q=gFCA+G0|TSQYe^q$Y$NXj*J1-&Cm_Q4$EqhV5#ETlRArJp-3pr{pHQX zb>|I-?JqlD;6WfYntES#mnE&S_xdhdXN`-+&gq?$U2`-T8xqYoc12%`^pL-2(pW_$gK}pZo{XzgXFa;I!NC>m^AmDfEE;#%UBQ}nRo@ljRZzz>Qoez*l%n)q zshl`>af~-dOemrR4Y4p-K=^;z*#kx>HxIc(TH}o`sEJuHes-J?Hnf|ez=G($E3hSE zAW1V*KFJh0vw&D92%!E?_(PN)0CeifAgX|;G}TlfE-9M9YOUT(`+B#s;Y#t3p`YL( zeJp&aLwU*`ex(@e$qBjw#zrgmm#9k;MaT)y$g___4`!kwL>&6$9u>dT0H8O5 z*J6+spapzqe_A0E=${e5cJ%@8?d6!UiQo5Pplk|DqbAC( z*Cb&DhkNO2VGYjDEjY_Lv?EZlT44OSXt$j^27vt}DRoAYB9d-KXyfwP$t)chMjJ_M zz(AJT=NjEpL5D_xc7!{%>W`?xf!B#cU)+Go_j)w>xHTvxAyucg@pex|vzZw4ZkY*2 z0-GXiwO6Z%|-8W!D5+a z+Hj!l#1SWLDme#aEa&=NYt(7B4MIq{K5%K2ZQLk#toAEIPV++F{z=^@Ad(Rxus)=j z6MygO<^Y{Xu1i;SLOP1!!dkeJu>ToWJyJBM=a$V>%u~d*shV)3*|R;XAHsPB(-lEP z;j@RNjT?#gqI7#5&E0z)(WSd>sZN*?BfB*@P?7FR1t_PD*LO$jJ``z#qq)Du<)ZB1 z^_6Ap!?T`ssz1?Nrl~jEiFPnpyCCd(DMC!gC(j=p{pDQyiQga$5IlqbmWsa~e&r4N zlm@N|HXu-Lh9{k-v1KKEBN%@|VBq=^1{gmGkc}p3nVaR?cLO}e&u_@DCgoy(ZFmt0 znLWQWBviR?ft5@Z5Pl#iharCclfM_TOEBTXxw?&I2Q zct|i6nysV;KDhe;9O7p!woa4{<6?`to!E)I_AJ>@LLldB8@gW<#RZkq0X;j!TSQ0$ zC^XI3;*U(=jKZ_;B*LP6tCrIZ5H`{!2=+IWR75_ofbRj$TN&ZrrZvSD9ca#45A}L| zA$rKC?q(2ZXEq_}F#V8ZA68$~%wd2M^V9iBEP*2g=Iz@46r_vP%^`r}c;A*tqWKsE zJfah!V_jNB)|ghTP!mZftS$V;9IXvGIgX=Y0M`Kz1Pe@iLzBmkx5r&Ge?mC}*Shew zvyvMc&1HgO)}Sa7XmRgH(S~jy49?^Y%=5wkHg5xnUzMmmiT-j@ z^CuY~c_<&7YHeIf=^hv@+97-l2Rl{I&S#}J603nd_7}&!lUX8uU=4*V-y7u67o%&q zm*jX;oGV<$Dol2pWaLh&)4)me&e4q~$xlz=$RS7ENv=t3_d98kX8ZdA9}SOA``tJ| z>=Ac-E7!_#F17!c+BPI^kU0>)eMy-VlJP{MlSjO2P8I=+wnT&{dPk(taqb6o?fW-f zXNunP!W&Ey^#SC}0}H=hlmjsV(Sd3ew;nfHc8i}-!HazsWML!6#1RO)Rz)i90LV1ifEN%;2V9gA4tnS*Dk3 z55`9~nRY;E#OTB*fM$?Z#Yl7{t@pYQ zv1&CTvhBlD5@e&5GbjSpG9H_$!LN!tX;$&k#cZ!;zie)Iu(VO{zSpORPk@DbBD(bL z;Jqbt=feydgUTErH%FEsc`G@1XT5DZ6+ls zO2Ca_Y3nCNKyPRW%Cf~1T#X0Sy+KHq{x|(AYUZB2 zb9k#HCd!LSvjx0_+FQFo4-a*)$I1GGiI?i+Lz%DrZ={2GV2LMzi5 zJ(;wdH6c^t6aH+J!3z_DK`|7C!0|_FE5QltTXYbdjqPm~y==Fsc!*sv`gtj4UHBcx z3AY2OPzzc8WQ|m5Zd3CD33-F=FSX zo6T?zDW>9g8MkjJ2@58LJzSIp8wG^c&KU7{mtU4&9vUjVP*QZSRa7uh2s$R{a>R&D zfvt1Z%dZo^&JXD83a{EK33`WF63xt&0Io-KnKV)Syg;I~8CbR5Akn618U(67Og8i> z9O-%kktS^}myuR&RznMnQ0JNX^@=SkMT~6-=+S^lVsuRoFVYudG`cZf1YThJJ@MF3 zS!hkj->KYRT2?8q#tUYnqftA1o09A~fJT=j6lM)=PBjsm&bsh`*p-adM)(FNB_@1j zirpE0{&pdb+p}UG%K8-)iO3oebvwex%m!Z2b!H>j-AKEcjl6&WW2eA}4Kz_~kyF;V zm(vO{%AdDpyMM91Zxy7$EeM}F-V$!MB%-_}Ay32dlU%G;&C<6pNX9qo5xFF}OnqW2 zybuATXP+>MkHE=)S=rr^W2GQzY9M}7@13F#i6d^`IOjc@5|R)J-O6X*uoDQigNYnH z!?QpnB_!?pNBd^^PASM$E5s6nShPt#XO+O2C;gU23D(U|YokO9TkDfT68wbm;VJpm zKwRE{7cgR*z(M`Th8y}-ayHL)>-Y{DF56up`NvIRcoIXtlN}C(^Yxm|`B^+-0)(HB=BI%eBYXLg9bsNf4s6Fg#-m6HLxF8*c3HZtSH6^wOD6L?(RU;4JyoV z|Dm-(vOMZwkTsy5Bn_qvqex39y4sDkZVY?u+(Y>CDz=mkc^H!2z_~ofMoSzm6qziX z4^Gg2$rIW$bz)-Kmg1{xQr?`;^w#Sn_M_|MU-q^S$jt`Mj*0^1WgWP~@)48z2@jY! zwBYD>{EGda%A>VwON_dNXE^7(7{!!(5+oAH1uWA#*8~*G6FQ*K4eYgSvbV_fVa|@P zMDItdbv+e63@LnOdHjkz@mJc^u-vb<*URHRH;C`xJO=fw_nn#oK%<#?CnL>+qlha; zL~wxlROk&w%31A^`RKq0g#fpBY=UtX!tg*VAs`FCBeGipf6|IGQ-ZMgF}RsnSh%L< zZ3?$fRi!w;bu*63Dm*+M);8?&MwVrF%uHT$vNmw)EFRw`<^W}58KlV{BzC;+1Q`fj zfRwI4?{Kcaf#bX-Ot*|gh7goHALgX*W2QO-DjFu75fI(d4e=F^@2ZXFtL?D##!P}_ zi@{t|tA_yoyQ71q!nbmOXZ@br|DMpQ8x&jOH%>5*X;NEZCT}nYjVuNS-%ERlSYKu_ z>7Xp8e_4j$<%Lk_!bki9<3Leg+)V`gG~IZug^%y;H>5so_sP;N=3CfMt`p0b*=ha4 z#{J->DgK_e>B)#Qu;+6m5u6tw6F`$QbEo)#G!IIAKW^?FHFx+nnqt`+vB>wof0z_E z=SunQlXF~=BBMB*=LUdVqoFEbsYDbE3(l#HFvF< z^#q~{C*Y!OVbhE!0oSMbGK1#&K@6=e{AOoDDR)-pN8ZPV_rU5EQX4J>PEpN4m4_og z+wJm$Z{ILpT3g|K#d!t^9#=Bn?|N+%!}ZzvOtZRfIg=o=otQEs+($;n@44XfB@fo) z`;s+j8fp_W)|J<_Uv0(R$zj&1w2aaLikx!1h>Y0=DuvFZ{8CtP=0{L!`a6CCxo zOGpu~w#l?6jIIkXDd6O9TRriG*;6eR>w5CAw3_-KIM#_&WEaZc-BsJw(qt#$4!;eP z?ipme-#}~rGXH=xy}OM#a&u5?K8jC9*x-EZ9k)tT<}kV?(}K{GM2X(3Kcm8}1#5A4 ziU7>72A8N&$x|YEfvB6^y_+MB!GeRcV>-Dsc-= zx9}DVXK4iXi`Kc3ieiB$F>-_%PA2dZUr3|h@6Uohk`Yu zuzZ2thRBKxbqwvq)U&Oon+fdYo{ z%1(TlHQ6SbQ{mQBp#sV*;mXtF?;q1NIB}93yR-MgA|Jj=B8UucE3SJ&EBRQkYzw|O zumlcFRYIA5q-crG4~GomNZ#*GTV@uFSwKWz=d{=iy+pXXZ$q@|U zq!@~l$D7N)OCk4WPT6IaEZ37rLxDwgHi0ucY~cq%Y?Lta5s>o4ElJ$JnYC>dR~brg zxiWh4Bnp9%5rW+rZoJz$z?x3#=WH<2l8=3a~m_@M13!c-U=2F>Hy^DDrDaQ+wk&a~iC zjDFwzk%G5pr+{!?f^tTb{_Fb>pB9dEJgg=lQCgq899+ zX07nJdLMx6(BK`CrL1wFZkAdpzo-jO0{Ohoo9XTY@2{hCOe$rmAyn(YcJd5P?qP>e zwQALo`EiBoo1_xu(y# zf!IFs9Khj{2+3_3)8wu~>Zw}GJMFPMXr-F$H7}F!p47pxHBy-;d$b2|qBh-WKn#o` z8ZX=xv!L`^BRR3EC=5DaHS*d3+to^d;^R4zl`+8Nv1$7%JQ|-w#}v2OEqOEb$x|sW ziUf5Kl|8oKJWIs#T^kI@>;kwoG8>{`r@LoJtpY1RAtYqf*&|Z_^%9I6@is1sbK%5E zq5`v{h6m=M%0=t{UD`;}pvWN`8<0I7(l0Ss9G~ZWb!ew&G##nIj#(dl?-9AAVb$w1 zmzgi9{ra!$n0=u&}=3{qf2Wz>_p0~DlLA@Dad`rJ?u!!&-?^#dDOt(-H!C78kO8Xacy}^$VPjg!UfxA*#>Aotl5zoe8p<6&}KQai7kdQ zs};0^&U0b1v@vPjRf+f8IUOCU3gu-MpyY7m0?3DTx~=n~W9wp)C&sJxC>jwJb=RQY z5Jsj+wMx8Vv9P_=VsuQgBe=Kl)Ox1>x#irn%J8aoJ6w^rkEI)@Rl5;}Ac!IOSXtq{ z#8Q>N$lGzVp~ctLyw(T--@z`ICm{kwX!&et*FTn<^UeIRrvjry4uai+O0oDRkJ(h= z(hLk0^sEb|bskJ`OabjD@GUUbYeji=9__@CS!h8K6whdYhPB? z;G*P{d=)BgH9UF}d07+EfG+gMYJ8STEh)kN_CaUl5~R3$dJ zIih(SB*ky^_?&=5Jf|0z_Lh5RiCM2)5Wr=yS!? z@`$RLO)ELbS!D$XjI!+MmPzRDCcG}#u;DsmJNMNo_?kiq{{SGx#9(bgT0s^S&z&bAq%`W1*2FD|O0k9_ zu|swq`f#5-Jo(r2>5-A;=vgEHTn|eq66P!iWj<7t9B>d8d#t%mQ?4#7-gnD}&_vHv zoDxd5zhrLb8qlPM3>h7tCv~TK9r7=yci-Ts>tklJBNm^Y_IjjaS`2rlF?&k6zE7Ej zdkbeLAeVHSYULE#m~0IIE&kWJ9W}0p3)5L2Lonb`+{DWW_A`G4-D?kjNhiy#QR zBI~31mbyV;cmeXXFa6&Fj!7- zx?*-d_I(Xeyg>}=r^Hc;tT#euw4iA*sr^SakdAl>4PTu*8Tg*#M1F;y| zI_lM!4vdAhA2#yYX@CCc^3n%DjF0^6(F zVNWA*yTa(nfsA$~<`h*2V;E}|T6sD54y3?V2+D`tVcFEdpxDdtIso_huF?`P-c5dA zH?fJV{aDj1_?eC!U+3HI%o%9G`sOU*o!4#Gvk&EUaJIIf^l>c$#4=JAG1Z5xavUO> ziQLenN*m+(TtJFofBOrTVr<$(6X!%bNCAu7nzZz-{KE0@@D)~39GAjQkpJyFcleg3 zR$Hj4ZYpQy5#kY82~F?|Mxvj{N6#Egc!-!`iY4sX27YsKD0z4aaJ?gyvq0A-sGC(_ zbI9BnDe;q(&tOhoMNmWVcfelEazTj3Q9R6g8OId<&6hy>$8mM4`Dmv387Wy$`}Z&U zOb>I-5f6c;6?TJvheFi2)CV8&7E>nJeP>= zVcEtqkx~)v%{M1cS=?f33uBs5JV3>MIn#1?6_kUX2`Kom)$ zVU-rjFMfr5iX+KXuD!emlJ0>T8m}54UlFge_gl-7-#fR9&DM--TnlGHMe3$h+78rz zG)Ua&W*z8x$~*_Oj%+`X^+X`Op96s6h4M4ONFo|D&l4b67237~zk!hANDfN($CvQ7 z{$|)N0twpe?mvt$AJY*m$^v#LmDK$+@1O2mpI*t1Vjs5kEtD6i1&&M8Yq(=dpiuQQ zSJ!FGA=p782R>utTj@8*b9j?a6MZ>6B19W+3hK9E~^uE6x^=S!M=Ou}iTj=`|5Kqkcmr&LfU@hBKA4lS}Gg z+s$@x2Ien$G{t+f+^Zcga}yB72F6!}`xIh}<~ba;7e9u!HaVZ!j_kRUhtoted8u&o znlL#u2=#vRRb|5KQmo-7j$C1f}Ty;P>%pGiTkS!nY zko44Vk`&EKMb-l5+gVMEvuy#Ons^DvJ7KS}FR9op9WA2Ng*+2LtF^7!dMNne`*{ab zNs!*aM!3tC4lSP+&4yc~d^0T>%;fdQ zpjl#Dex|&j1PZ_$gx3Xa8_MrfP>H>w!fM-mI7cLn*1G872#^SsYrkOK1}MfTADM~* zghT9cHrbA4BAMum9s6prnS&O+7wn72aTi;Ii16rU-nC6N`T9bF>q?G+iPj#k65H6V z7DN4gJk!hA_D}ZOkH!NEzwMp7eRYzQ`x>#@&F8a~c;c}-h8q2(f5c}>DFBTMjh-G2 z&F@xBytiGu=Z1bt5xFcHhh7(sMB4c|&uX6ek zZ97ej{D@#jhiq}lO05&S?#{X`^R;FSI5Fq5Nt)g#bH71a}OwKEjrxc7nLpXz46 zGIAYVh-7`J{g2?+-rvs;xu5sZKjHcLq3kO|7^6#l@!rarJ!2$SfxAf7D=q7jFR+&5 z+H6swy8FC?H5jS*o4!1H@FXrhxw{)eb*T6W1be9|FM}MY<7yBX8=I|(<<_HB8+DRM zWnF=-?*>2rxM91zJYFH6@0@S|AT!-8%Vc~p$ljfo>!33B2uq3zPg{t zwNHeEf+Kpx>n?+6p{|6Ipl`6KKRVn4tzexkQm7LM0H%(?mP5<3=O0HUuZ>nX8HHDQ zx&hLt^+>6O&HKZAwLNKl2d~v89yPL0v2tSG*}j}MMcJumgmKHrIv((Wa@UR)egqq~ z8fiuVo43U>Vkekq{Dq#|$@g|!4UgLcbw13(C>F!T>GvfEc>C_!YBZLf^XB3pDkOpP z9OHGJ`p_le<h|M_cl2pFH}a=Ut|;0_0<-{=0CZ{fuXnO-0wW#p52DT6^y#( zg8u^V{9Fa2vDi^fZ;g?4dqN5Wr+=+DL}Ti`ji3rwF2kmp(WeYzi(NhiRh4Y#UD6cG z2AU=? zi7>s1b2p)7vnzTV&$G=S2l6ql)SW!L^i4gUho6?5qW4wwSlTK!T_ljQZJzhKVn{pG z@DFUdsCPs?FU-xa=c+6Gm5`;Z!IP6k3{zWQnYhBQe>Sda*`NKPdYCfTYQS8ff3%L+ z`Ak5JCwu82-v;fwQ!c~SnYp}B=;8#`mcl}Zfiy-%e}Cm`jvj}M2P1o=l;&f8sSGB1 z)UPLg4>LKvrYbfi1s>|f>U+XC2P^xbYGcy%WMsIaSHS3^S3`O;_gKhol?VCv*yB?6 zH2i!$(f%fp*R9+1l7+df@@k)tMX>HpAMHxppQUK1Id3WGNv~ipfRcdTsSaDgUYp*v z2S(oSl2Wo)l&?jfN3Z?LS{)=7&K8%Qip9RJDz%mq-gLCvW_eAuE`YD<^Z>9O4f5VZ`@C@@i+Mw zDR>f##C_~_9N>ZOqg9l%05=x8e`hkYO~eLhGvt5OHi>Afc#IxdHjzy-Xs$6RVVdW( zG42RJVj7D#d2|&A3tAP`q868@tBNx`)s4)Gzs?`d<*fX)w0dz(^W4n$aBW$;{{}}D zr8p18V%eLy7rIl>FyLpz1oPiU`&~NrUeny3?o=K_Zkb+L_Vtdc>!-Yx+DTny3@;fi z0q-f)BFM~vIw|+QpsGW5D~e*D{n(-p<3yfQs`KuNvPt2|*ZIdcA|0%be}2LM4591{ z4C8Cfr2O_-tZ_D;e83{<=zLu43|RlLClku5Gp91fS}UIJ_rSt zH=>kpOgB=ukoJ6EsbL*GFy2c%f0wg7@iBz|s~YF=(G0m-S(;6;ns@p;O%Kfj1rwI+ z$B%!}5x>>iQFkE4XvN2%M^WW^Zwq`#T1pt=Rm&EC(bo=WTYi4TFJf?*l`Y~h`l-_m<~j!@Bq$%Mpo0Rck*&fAG^&C@6fyMQve2TUr&sPD?i=JUa{3WG`jtWPjleq3gMp6N8*Y; z0Y8!Y*GjdhS=o@WR0&AoKYxtK@ZiY`0O=EQN1p5>hefAKhQR(NzgD*V+)u^2CeADK zh2QmgP!`QR0a9Uj>{Qf0P z&6MI z+j!R>i@4WJ$?wY~8M##~KD_EC{b^bC!`TN1kGOX3S3(6g#Xa?J)x2_ujc)~e#I0DX zmkYc3+#dg0z%bGMsr;i|`hy0CI?kFVaC(V*NP{;WnuMxg?5Co1Aack+|rNCYBv%#W4OcGNSWbDhtKcuZhWmzs;G)V zeXs*4Ml)AE>L03|!~YZL(I}KTP|zYRTb<|WFO~vKuoM*Y29uzGcPOtR1Gm;Ji&Z%; z@3y;mkH=ug8AW11Va}B&vNU6Fb@)eq?Y{Oe?$F<>#q(+=!~u6okAW220s~__?pJL}!t;^RPsGw1 z_+O6=W^A%8R=@Ool-4OR>-=fy{(EzD`{86poXx8b?RO;vPeTSe#Tg4~UKu$CU1zP%QPvBv2pvI2WnY z1&GNW#Jn$(xj@zpaU%b_8@?1Y05=#bKwo)m|MA$S4nTSHo@6TaSO|*!?j`64eJ;2g zqqAZDi@SSDAzB!Zbf@HZi+H^NyYvUGV*E2aTKPhNvHYe+>$Ld2k>6>3l_A;)8W=eA zH@!fH;|CawCO7VK76Pc%#PQyWxk4=G{g4C`mWu%a-Wd-9IRWy;*F*$?uWgTKaJ+qS zqyKu}?^j>t!CL-Jk>2<1pPA2xiNh4NGdwr+AMd;PH97hkT4dnSYN73)T_~WOix!eJ zHU1rtfA9Ct_@uA}bt{z#4Uh zKTh&LKKJrhD)8~T*DpVu9UA<0*+VLq)8q1Oe_Bt^0lu7FAcf@SpKqUI0u!&xJjz7k z-{1GA=~ujr?|?6#FKMd#Jq;;5MWJVjh5C<2{cjJ+s|Fp1X(2fF#^u}9z_ZF>__BS` zyx$Y_A3sDLL34*c7u~*i7Pmz~S6o@Ny7fQz6pkMlv35ik4@ zv`q_!FVAys_{H1R@F_I&vne|MHJSg>tKg=G!Lu=6XnlOyRaZb)ASai|{?9!nN;L`1v*Uq|D#80Y_2)a4yFlCLTpjtip}ngYn7bnt6YiEA z=3S-popCy&<<@!bXUFNUc`rA#|L7nZuqjeRZhCsrE_z|m&S?Rbe_j4V^Rs0YDaE`W?N0=a0pC3ID#azuR(e@r6*6rJ%E08lBJB?}-i$a{=H6@D-xpfQLK#*l@Y;6SrZ*l{g`n za)2e)8pzQofahp@*ak?r6^0Kp=7fTouUmt2Y51Ft~(b41MK@=p~urW;$94lNYGPu_n>C=GbZC40w)AV;$dJ6 zy9RDfp|TO+U59;ck}i+yn0`>xCCuA|ZB4i2Gp@D<6IV0Lua8v&IOEy;Jh8BAC4`tm zAJlk+_k)We-Q;Ua-7TgC@%Ik@J}_FC!M*=n@U6X=gkE44@HI@{2b1ERR|5c?8l9aS zILT%89s(Gr0U}-GXcli}w4#7nyY!19?-a^`M=Fua{;CDgi>P&x6WayshQw#wAesNe z3TQ>->&$|>POmz^_``Sbo0@fr@tfG@?8wm~cRqEN|NAIHfEh*5nsB*Bh~5F6pp{&N z23mrHE5pNyAIT8J<-QFbNaA;!_ON^9?X+>xt%T4fMqy?tAHW*X7y2dLoC<(AgL2&f23SCN)L zLJK7{fk&!zLJJ`R(h?vPsiAx;itj$|Z@=T5zh{j7=NS(}NbYi7*IH|?Ip-?Xgq^_S z+mUIJ|KfXVs=huX0Ak(u5nI(`wg%y<%?0UFM#Lp|2`~#R#lcE1(XS zGtJJYV%nNgbTe(oy7DfPV>L@05wi%+pTsf!Y+EbA)T}#K)q1{3ZGwG)9iGz0YNd{+ zz8@rd!)M+LJSd*Q;3hn@j@`P%79>SG#ROfA z!2{M9mdJGl05G)z;J=;;sd3Z|3K6YJDgw_GpHyVNOX!V2&=;`f0;d=!j3lQwU z-UJUBXz!`;SU6iJ7N_c!EAD6=Np(<5H7s;*G|q&bF7aUe`%nh0bpe=-_wlnG7QE6d z!vw~B-vSUJReSIeL6>?W?P0KV(P&1E$a4I=`S~6|Zq=pAGu9P@?4%8jjQ&#X;&p*l z1u%FdH$5T*T{}967{6fKex~_CqmlP~{1W`Zn6O{2^hny{Xy~(W5@+iOuc=%sNeT!~ zij;_7t~K$%2f(NJn5?lboHJFTSY<|{Y2{bKPv9SPKyqLYLxnThw(h$u8Nbs9((VkF z257+Zs>QXw>z-*THfnwLbYkpTQ-A$Sd~JncJ|G-n9UU_;nt<4Eo@iWT(}r^a{}+Au zoIPXVuFa7PBSW3c;uWTR^8|g$X}JdB)7VDPvdC>2-3(8doxuzCv|!kxytl&)&&ym=}=U zYT`-v46q|7?$lLG0ovZg6V`FKY+hOckW@R%QFX`za&ico1No)AK4(wCWO1VkX+hGG~%cKwpwnVXxhCkezmg{SEEJD zCp@7Z1cTW;4qw*(m0hyJv~>iWN>vbb0*j!q zi%#)k&fu)?Al_rlw8&;5sm0|yoLvhh3LoBs>yj{XU0`ufBcd{NrV>%gQjQEHRvpJsAR2h6dgzsYC z*8r~k>*rWwe~^CjP|{mu+)5hN_iTU(NZyFNFwJ3{fFWBF(M7YQ5D2Xu&?vK8pkU|| zuz6i05w6YbANNo;e4iC;G|j~qMGo8IJSZwh%^%$O;|1`MeX%NpKfl(Q)=~u~m^+&Z z2~*RcIE=t;6-Ngw0jEMM$$(?_YwiB|k2`&UfPkK&ZDd3DjYTSrv*_D}E#ghZK0aJH zEJnX=3F%7dA36URwPB0Am^Y8izseKVu_vy`I_#p%gMNo*-*dYfc#BC9lJ;YV=Y3%t z?Tu5|Z=Fo7i<0voI|=52VH*>fI=Gj6y9IK!-{VqlqmDGxt~c4bgmDxeeh;d~135Is#~XE_rCwT_>vd~9WsRO{ z=vXI1MGrSK4Qh>N-5Wlp7vMpYIaIsb+vjIE5lXPGn`mmP$k(!c#iDvo3gh zVCf7gy|ggHwpYayU+@}JmeNEwMPxgcf8D{=Q20BN+}Z zA2dnk?T(xg*3o(FVG#2VZok0!2+ zqi~2ER}Qf^{GL3ngB~x(GoX*(%pOC(g0q!i#i8B?lxtrbgCJY2a zrj$u{9Ij+f;BYF<9*xE&&=}ALZj@D@RTjZ9)1;8T_L#G!qA+HD=zZl5nQ;XbuHoUa z0ODP3u4&9=tyy}Uaq5IAz9MKe$Uo#-1aP7Q2S%D zRs_~qm!dCtO_PQvDj^n1?1#Ss9P_mfh-CBrx>#BAC7#tV{AreZ+*p3b%op7%< zV%VxF8<;_4(D3vSt+e`6%HPZgbG5x`jmJfLiRTDBB#jbK2DiBAdDeODZQ~oCL(EE6 z;+pI!@{i?3d=UIFD@^gKI#J1CKXYwRY?qI(^}5;Hw0pflEnH*!`nLY#0N zX}^uFCl&%2f)g|i+*4p&^5`=iCVHV&O1wO4{9f}u*5<5ab?>tR`seKY@FcrzV!f7z zb`7nGoMT{cQ}12*eJ%7N81gJ(C~@T}-QWalhfU3P41P|m4AMRFHNarR#`5)D4bJX6 zC(}zEsZEr3EDlJYNHJkMx-B*GsO4XEmVzoIi#RKbsJ`E2Up9 zQmSSN%bLv!`r+?1G~%ro-Gv(Ln444{*RICe=J=ajtXOC|P=Cderu`mkeDTmFspx9M z;-xv|z#I?gsO6u1wB&(Vu!HP^X+)6{)QLWC^~NJ#>Ty4mjU)*$sLP24;!IhKm!r8V zX-IA;2;Wurm9Q6O#7Ttk7O5H|b1`Zp#wN-p@CtY(Zqj}r8oed2UE7WcyZ|)|r?XQ- zd~9gNF?}NQ(+!KjcTraKt~@7a+YuE|V1=Qa$KWdeLCR4NX|8 zf{3(3T6b8Jid-s>KK; zepLn11Mf|3!S~3aZvzwkEn2z_aw41A3}SvM93T1I*j&&`OQ5fX#7N+G$J8?@2B!EU~m%Q}~dn8;mK*`em3qb9Y-<8OD~)ll`%n z9lSNdD7Xxu(zi=?HSDc?YPy#>-7lsi2Sc`4n!o#zS`YF;Ej>@UHaAqE(;A6!(2CEr zhxBie_(m2(MzKvj-ncyjqH=DB=9Sd@PsFU?Z6b4u@=@qb#n86Dm$9|ct(o!;c&}A~ z_BgiS3%#3}^*+mckek&1DoxjJ5CE80`@9MJ>K*M(hOPNJX1~kUwa{^I+D^EG5b}W( z5%iV$dD8-CSOh}T>|HCpAU(zud=V7>Zc9}J>_fx?XGJdm$K`L zv8s`dOuKhTm$T@>R9wCh2v>DE8bEzBR-ArVRw4E<+)YbN9MtJ zhGf%Xc!1Y-`8^m*c}T#Uy4*)>hsSOLWgio&3?>%&#|;0jl>cwE_Frg~A!|WzYgCh) zHol35IAkXLfiRM#~ZbpuSGQXcZD;G z$miHMQo1{FJmFGk>z{m&9V(hAT!Dp!ptufS=Pe$XlY;veA|7boouVs-1>`wH_kX$z zt7ka@7L0DJA;)jHz;|*t)Xn&*s>UO?aO;Ns^&tQ2NaF5iwfN2w?5W)-@WImu{N`@^ zUOv`ba*>^_+z`}|Dit{_beiMB_cfAv@I^DQq`ubo8V-u-v~EP$rC>}6tVv;=OF5C_ zv%$~z@Dr`?1+FguTjU6(UVy9fU7@@+&xta09%*kJ1D6MV6F<&nL&uKCn1`FT?Kh@P z>Z+Pvv{4zH3%hw7@zMu2DQtN8rG@DLYLs*_@uNaT{8&D?P1-?4@+@2wqF=cNtBlxc zgWyc1tA*A~*uf~R1OXF5jI0N-LE1Y;6YrFc*IT*5h5RvdyB=}Ti-geb0Q=*lcV|@% zBeWH>%8%}-c%tTNl%>QrB&BT4-hwb66YQn@Q|y!E;e=MlM;F@J4g%vqz&W>kRpLPyBZMRsXAP!$gR^-G8>4ZIfr0iE{jd`m%p3``hJMV)k z@{)~A=axNum#IE5NXOt^HA-o`4^~_{kldR50x;HcptR|lBLr}XvS$7WNm&#o~krjg1BXU?g^TAspETZH?Yf(FO-K7C`In9J0570kl9I z(+W|Hxx-{>-u5Kk(FEq-Q=V~+3!>l|3a5w z_7O6xlY!x2AF?Cg?sSwqWLv5FIVjYk1yY%|QNJxH3hmY9+^m{i#vz?M-@No1>qT;V z*9MFDheT>xj?c<+D+EujFU4>u%?w1^UlqjY6Ri7Dr#1^lHdDBKY+=M{mVTn4;6GYi zT^NbB>7S4Xl9`NR`?#xtj%~wmhA{*pr;F^tA0Rck*Au!jV+$JNDu1K))wkhDI8-lC z@f(p=2!|8%-SG4Nw4JBKSi#--kvSUrdsVKIh-e#bDQC-S>+6Aqi@m=ukdd=ns#!rH=g&@6G`_2I(L$lH`I9a!K2oxb|V>+G@AC zfBySi><1Ly0A=yE?{}Z+!%K+!HFG~4EjPb?tst^qqW;sEyZAD;{G?%q+4IoRt z4={}hJ98?qZok_n_FHJ#B{C0Ym7UlZjWAxJ1+5r`2{1wM zvqlTzJgj^i*sa_2Y=otOhhX;}V(yLF!*m(J5mO>_cku_}HEq8|p!4!*z>L>6@Ss+1d;Ad9`^=trTB%RF{{7i9 zR%b3B@Pj^!9`V0RJ{FQ|e*fUb&A)f8wLfgn+6(oEPOjU0g6mdN%1#7D0=v~XFjPO^ zW%S3^6AzU8zR;MOocRYuB^u`lTlUqEKSLOQU(VJ#F}$J@vCf(&k~pX3+SzefAH6@> zQCD(fN>~3_!Y8;l4M;{ z^#~YK4OH|()bPO;LN53Wr;RI->rMB*WjXb@zC#Usb*ohQS~Af ze_Bre_Ge#N_|-Ryr(S47 zN8oZZolH-!KABUjM#$QRjuZdOli3MRV&L3rKg{?4BG3H&R|?_KMS0h;rQhNA!#QOE z*X}5ne~A0<-&=jkoAF)CI=>c~xuRRj?^og#5=3hfe3^hsNPGe?IHRRd`WmYMjz9{`1wC zvreIV{BO%vPoXH*DKtOgX#1Z({nj`5@~@sQ?UJic{uw;kpq}sl>yng&XIF4L^XTfY zCt=`OA=q>e|La};^?#LW@NA?d!~U#;b*#S5nrPL(!L@%~+b&=oh^+s!3J$=Ry}5`O zIrX0({M&H&^6=`TcM?9EWlm7R?{O8jZ&cdGMn(8q5%_-Qaa0H&^MgPZK ze}3WLo~S}My!WZAwf=uz6b7CZg44`x_459`9eYF?E_b9$hkf-4umh{WV2!iHZ?xv$ zJ{*3$3?HAj?azn*cfI zT^7Fu(1iIe8S-if{1YBeDMGZ^En_uu?)SMTj)1_P5aSla4Zm^9$QN4iHP%2Y&spyY zqcldq%_+mGIpIo92L>Ss1MUVt;oa_dt(%vll3Y)aiU$BItOw58ki<{0wb2jZQ^oki zk#haOT)7jhNPDtB3tK7+T9zE98ffSpjk+7|g56HS_A;F}XGrKWa zgWm%@CIwV1lu&GwUPVs%v-3vWC63FrHRb^uYVzbmzU~#OUzq35UwFQ0WN>~el{zD9 zi=CFJTw0rXbu}PgV_n!=f5|@~wH+=jVDx30JfzaszJtssjV0D;)IXibn$`@~i#hR8 zPbF)V6+*Qr`L58rVb=1rKnI-#Y-6(5M@hTl;6iJFr!<(I4)|Lqi{yh*SefhF0gkKF z7&~%GyAX9S|IoKBVKqHM`v&%J4s&7{s+3IjF#WnM4c#ztPxlSOr!D08F*OIP5E>{GriUOSc26&;{dxxN2W zRs8RavPvDeBLpW#-l2KtHNFp2JDZere-gaz4xx+T-mtPe0b=QGjej)=9${5g?z+!) zi6t2+ljx$Fo&reQ%XH7*l-#B^XxWV9DshyG2(Q&pDan}eEO~Q9!lz`NKH+vRcgE&0 zG3nxOfxl8L1wP2q!Y$9PHr_Yy)r5WZVbS)`+6_&6fq%2-MaQJT2WxYLFgCdcjV@HH z2~^-KaYSY7h_x!E85|zGNI7#MI!=}KNQN!%NvNl@)r5}9mN=R#6$JnOh8g&V4s!aR z;^YU^P8aLH+X9@Iu{#Mk@qH64a0(q>0EMI(!N>a}+v^*#U>{kcN3b>*Oi6nb8#Ntg zWE3f3mx7`YueZge-vhu%-=^V%ueg1;%&=#2w+>(gPCBT(eggvjaHbtdbrZ?FZY-(O zu=V-ak(C9yC`&GbFps=0`KE*$v>nkbf|*rL%>=e7ms-T6gW9l+h^Ft8zuD9#H2`cQ zGK_MwhQ8^&P%IX@qt>i$kKUlsn3Ps@EXzdjh5oHtI2d7qEeSyDFWrCHhqpk>0#RQn$%?tRV1#52LKa=0au&e~f+|VnP{j=s0 z%m~!}s5)XZQX6BOhl%yQ%S65k(*NWZb{R(vmtQdx#NDDsoL5<*VEQ%KYUEcWsQW|= z&4eS)6Z(&>n0M~GLd=Spo-)usI!Q^Zz7Z(6gt}(2gxC_cqIYmUT9RSWT&$fTo8UZi z_8pb6Of}A1kVHx`>t%k`0OH!PRt91`f?%=0A>#Xn#c0aYDCanS>o}VukC5OR@R3s< z0rDLIE?>YJbH)rNGiM$TmT4loj2?_WymA?NB>13swQ3OB)!0$ISat-Dwa{H4&eHq;Qf3WrNR`}8KBw`<>##BQZMysV9675UJEDmTMT`c z(9)m|?P3DS1YMD8$`bX*tqm=g4zg!ao3P_xL12NjOrGU@!BPXX;*I3V&=>FJy3U-2 z*=*)8X38(pi1bg-{u=iC=1JMpt@^BgzXzs|zVtfx(kENa`h)iwmUYT=KAISRPmuG& zS;GL$ApbI&zkZw6CkY_-3<`4!^m+d6Nda&k+BRo@M*Al8p)UaiDz=0QKyI zu4=!;V8wB85015i%W-Um7K*gwMy#B2Cm#4DdEeEJnpFhxqcyPL=^lPxHY(gBly7pW$=Bf$Nfj5Nd8m&L#lksvM{%n=xl}*XBjwEWE;6 zBFzWtYbNb!> z*`=Jz_&P_wGWB_n5S@8V()Uz>=Ik8Hk-D1UnkuP_t)7kdT$;6dCxWyEE`OCo-;DM? z>y=rbmBAw3pGZc@39&?}YXoHoms44kV6>3 znH{gGYrTzVtvH)eEgLJZ?5=JJ%VxQrUMc^h^)kKPI4F+MXIekk+g8Qi>}qk} zMbEC)Z;y#YnNXx%*e&X5ZX(50?1DWph2x>$@3i87V}2(!uFKmN#`z^0tkY*;>G6pp zp2eSaV(Ge{gnIPwwsUR}*m-+sP@k_PWBJPp^q$DVn1;E`dbv!n9A+XA4>Z#f=fTD2 zAoql8yrEzCu|0c}1UzqOm82N=g7e&YzvkplFg+bAeR<}?^pxNQ8E})P)W8O=2=`Zf zC&0m?@W|(Tc(NK8#_^;4Hc~~+>hct}nW};760&j^G)@giKH5)35)LCM58%|%&+xh( zireO888`i;0tA37?}u{5>%okgQEJO(P!+N6UNrf#i9zlPvGD^OAB``pisg8P>Y>f- zHyD9CqQ(3PO$cU(fXobtOZ=RnZyS{yV9)DbQJ<8iE-7aVPs+tep_5klq&%_6})=f)sat6L%q`;1TFy4Ka z`>GQ!NvSaKG@|is_i6qH>MvU$t+_VU(p`fg(*Ruy8JahAIXZi#2BEr@{%*TZ;)2yg z@C2RRhcWDbjM8u?v|a(dBy#JOTW55Q60^2#%y#{(ilW_=X+!Vwn5FUP_rpC~+0vB98k$`?jhh`ZJPvQH zDa^OC!>dObJ9+E6gy<}Ot5Gg(Ut2hnj^b$z@Tn<`DR%Hh&VA>Zp^SuYq0a8fp%=W4 zZg=8cIkzxZ_qKjCLYd);_ds>k26f%=b`UP*AYxV;oFs% zC5`@c0e;R(f5l1-b=iK*Ljp%C%f`m_=ttrXEps~Lqj!Nc6(qm>z;*pYkJlx^XD(=* zG|w>B9lY6-9OMNp>n!Nfm!P+%-ZDD+Zig03nAG9=F^_EEP4^lXwLywmFPLWSc#M|8 zJmVlg-XUkng>=5{{N~XEJ8h&bt$;Oxw-G&j=+t=I^nvU%Ivk0ROVF~x^q%-#g_I#R za7JflidJ9?gnbdqR`E&b(h*1J1T<1FRm3^5MwI8{3eg){|=c76jgEnG+)f-lD~VP!Aer(00R9 zJ@%ijwIV$CZ=<_6xjs@di?&C!QehZtBjf039Oj?0eIocl6Ycf|gXB#ce45n}rOU7h zwLr7|Zg3$+vw8b9;@L~8l6r@L**cczu68Z)=CW-o=W=&5A&!2QWT8Oip@kl6wD>^u z;hJlB5YMTVMOKq3RMKvu)2!xR2WF zr;@)G_aCe=Gqy_i9*#oX%7Crh-NOl#q`($$NYoiQ&oIaUtbzmxx=epj|PU7X^y za(r8uxGK^R-%L!kYsh{~&?oq*Mo+~RPJgwKFkjHjc~%sOm-_iYdz9YR!z;=o-c;_x zjQ2=pAFh>3u|ak^J0RNnj*}|uJ;zzc!g`E6uAxC21yGo;+aZUmP)jG z5S}MLmkJ>ystuVbw~jRuOQ*}_cRbG2EXfFK&U^Qfh~v<|Fp!jupFUwd9F(4-a2**X z_zfXh2DBcltedD}!)Q^2hQLED4av+2WPkalnob|K=d^5@qOY53Xq`w>k%?bg*z+9) zocpbc<{WMy182r4(wztb?tmZ0M57-Qq^QcEK!2SxI}w5$a_9j%h_#R{CEI$4O+2O- zN%O4>7`hn#%N-Nb_Ptrd`Cqi}#{jwNEVAwC)V(PK#Z=;bt!4}5B9ltoFip;=rwAwR zRo7zr#TuKMkYlj5@aNJ8hQjoXof2MJ2-z|FTaAIj#Jm%>>_LbvDG6g4({4e$afVY# zWG71Q2ZlcYLHq`OTd$L(eY^Im&=VfdG4$A!*&{*0=#-O!nJ3s6o!lDM|DoSgas;!c zb=F-%SeyC|u|2HJYe#Y18_F8ax>%YUkvzc4X8Ta@XGXT-zS3NVODc4tI|-%(2UbS+ z=6n96Bna5>FnIW5cJ0aK-x^jH`dPX>qx`9y-9J0I4z;Cfw26!~*Q4L@;OL1)KIxfb z&%0Fig}eIoYo|p9A2tr8RV?eDjFNAhqAhsitBZ$skMcMFPV=rQLs8Fja$r?7>idZ$ zetgmVMGau-lj}^RwBMkvr!2Qdz$+cElcW#N`7X~CGIfY%8O>RO}v5IB%7=4I0?K1V5%xwY#kUARQ=?j{iChdE> zF}*niAaq|N?vy-^p*7l zsT6hhq!$>52dAgQ{xydJy7t=B8B-k2= z7Zrf~h6-?@q_)9L(N!50o4!P-!_bLjwJZaAV*`_DJ!8 zw21OKwR>2FJ0IgB1PFTq`yvC3^N4a&3x^xG?=9+W}QTEWX`}neX=S8UsYvL9q z*|T#AFRT$o*x}62Xg+K9P=q2rA@bg0?N;~bQ(&WI7oqHk@48WtE_Kph}=`09V{7V5Q-VJxp?Ry7x) zMF~NqNL(*9!(e00j>}5SM*AQ%U2Sg|Gq7m?fgKBBgS@VyvjLj0E0PV=au9956Rojj zG2Y+E>jWfP6UPd!{_X|)f|rfY`NX?8tp>4m*_l%Aj*9o}?TLi@fvEz5XB%ZlS zDaFj+w^_u5P(U)(~N3U1S4OC}bpwU!#6 zTbA1XxW9Tv9%88+R&GaCgg~R0HXZXui{SieUyMD12OB`MjUaAl8@w%i+cJ4L4{+v* zaP8nt#N;cgCMiLpT*3x;ltQB_TUCUdh1_RSAp81F953r4Xj8kQPfuPpNiULa*~=k# zVpi2R6*bmKKz0z~xgRXfpfgK$DIe<5isSZdK^72`wcb^M-d-GiG&W`U!cR&X@V1B| z*-M^K#-p-sy;_8#C|~!dSGc`seH5=RWxqlXYNB=#zp%C>by=dSYh zqNcFRhb8qg}d9NSLwS?DREP(;q#B9 zy=F5aKXP>6<0A8)+n8bRs!+2JWP%FnY`WIv11nLS;@1p zCUKNhL3DjtxJAf7_X6X7{+PM6%lu$MlISs{d8`K`6*Ut`PPMaOcwEc1{F!I)vqJ-0 z>{!+PnO0z;=CB?Zlf}j85UlN8i?O zomh%-eEML|Z#e81@pad$ud5`EBR;Sm=QHo!1bDqrVLwFv0A8|qV+5%m-F_uapjDHQ z9EQ2khQCSSgb_~}FB0c&ed@EP zUD#VaHv7H*-`-h2*=}c2=W*cFCAUoo$;gAhQe`Uu1goEm>M0XnD0U% z##%?;D;bNUJ#gvw`t+qrCR>s>31QOUaRa0Mo&U_9+1b7Ligs^*s_3?RWejdVs<(_;;C1}bO&M0K zWA!!@?2@&UlA*Nr2x(aUG0DtG*ie%!w|;&R>0tGlJUBu1G^uHOzOB%qNw*RAF*fL> zxJ++iwyakl8|WNaXx$fTH{O_dRkW;v8u${wNXs0XCOwVbDTbTi-oxL%T|Ll| zG2Q9xM9*K6r(`N?kI#k-%P(0bcHIy0AeqMDTw2ste#-3j{~F3x)ARo81gVf%)%X5m zTf6Aif&9@^pDD5#M$v7S+*^WeDj0W4+dxD!Shqq7Dm2%v-xumP*7@4>DYEa;k`^|_ zx@}tabWhRA2%Tq)*~`q5^S>J~j-V@y61?8}+r9ua%OXI482!f<&MU_wJ2%!qwvtGH zA=OM0*r{f&^dtd@;!PZRM zT?RvJnae&X-{xwC^E=nEqO`H5Gy9Q}pJQ{Px@%}^6^9)=N5rpc8;=NM5DuL`tli&hDws5n`Q${Sf_eO?ku?0XlHwV znuSxAGQk|fi`y@%ia!s-+vpRZ)n z;p|$vd1Y+7OSDrFXfjl0VpOBByvM+Y~uA z4|z7S=jL{8teFTHcGrl{AuiTu z_fIn47*7j4SFLJb^iVHAIzY2`oX%~)hBCZ8?CWy>EgL(Z|A$jZA9k!HxH zRJ)Z*8Lwkg)}H;|l15frxkR&~CAwOIDD$yLk7Sj47_%??~oPYIz?Fqj4~CxTsrQoceIGw+#$M}qaM+RhO%wH z&L0u_B<#K@S4W9wYu4#*{&7r4>)FRMmsCUFnn-q_?sn~9<1doZF8MxDu_ESw_w=S3 z6GG3$!6?(Ghu%C8x>|o0|UbRnUFMORjYO4qMGZ>O6pMPMO%7 zKS65ZAHe6uG7DGE|7VAwHtA&cx?Wp7C>0}(TKX4ZDB6HlBI-LjHD1h9>C@=bF~m~Q z2_1=9uK}My%~{5}Xm$BkMrUeg`^il_=6LUg*A$t7U0D4@9L2kIxN)bGgITBG>)Fn$ zU4>g%$PooC>hS;q)R^2 zz*@FcjqW+}_{7i1)HaU`laYwWX2_(yQ9`*I+acgXDsYM3Ym}GxiY1GZE3h zj#k#&4P}6TM2?2q#gn`2;+t7-*bjPmJ%e&Zl209Yl4ERA9#E3N1#8QB8ASD}G z&RlGcUi2_h&B7ket4E4T@-8v1ePvj@uBHyAphmB)@#>Xdn-zI<^7uBBSsIbRLmU-Z zPJMZJY1!(ikz%wh8{TI*oig{+a&|_Jl0$f$(|x)lg)_k>YLHn`Xlt*w@K0f)gWKH1 z%JY^pqFm9EG6^xxIe<>yb`3H0osk}9Q9Y0r6bZrZPC{k*?i%I5OpyI>cc z1B*9#w?cnEJwT{zRO^fi&CtO3iRs={4HJqFb!lPrZbpze{ar?;3;?QdYn7=U_(b5TBd0rs$5f zbMD1Dis^dv_;G#u_>p)-dz_}v$259o?8cHB`B~5w+`Dq`YYFZiIAJ}{&dSg6IAgc! zx2Ln)3~PvefyE-dfu!y8;Q7?c_Y3DN*~op_;`;Rbv%0-*Zv=EWf^U zMNyLWF|1i>C?A3R^!_J%)SktZ0a_o4;@A=?xKaAxG_6x_`r)b zmnngLHm#rT>YIHaC|1THSk7fCGq|Jon)siDI`NH56|YbG>r1$dE3ao4P{om6hmt3k z#_3hrCS<}$*V2xyu2k8Tp2UtBhBV5hUYdZi=b9PTH;HlPGutghx&|u<7&)BCZ6)cLB>k85(;?qbg;7| z4wWa4njGbiF_}Kb*_(&*oAa)pKAR@@JKbX0i`;s=YC(GBRtsyvc)7P<+^};_{|Hw} zMmZYs4hxDE7t=z_?i?WIYzZv8e}qi1u}}wn);G`LWnbBQA5VyuzA#1~_iWX*I2rDw ztKEY6sSk^0v}}jGiWC*pcE)8-Md{@lM`MWC=}~;;gE#EQispK^N?u3mGpiNlgMBnF zg+%mr;0p^jn_zzvR3)2IhemQcD`Ck+_gb>@f8ep9J4++ zW#GF6!(mK;gmSf1{IsUlndE&wh4GW@+F=4Z%Ph|j3b8(>FvSD8ox7pXW7c8f{a`2b zib({I_EPrQIYzRB9CDWZBY`qU1Drl+rGPbV#K)hiH8& zW@9k0$A3pgUhxu*FV;svp5Byzym0f|)WzaDCo&d^b@}!azU_QiW~^He@6C~1{f!-r z*Y`gl%suU>du#&{%kxN26|#DEcjz~Az-GGj3-*L($s82Mr@?o zx$R*&Mn0y}A1mZnvNucq5Eicuw&yA0m1|3fW^hvJ{N};yKMQtJ8P8`PTm3%He%ye= zP5VvCZ=&|v4HzT@u+HZlz^D14z*?&=$F~_Ekje6Iv5zEdF}a%iBmv6$IJ(VDL{kE>h2M;7YgqonsFno!1%z#qe+plQ&#bNIhDL zgfI|!vA9;ZB$s$&hUDSx<-Q1QS%Xs&rsdmMA{o1kD!v|asGK@yl=<#&1Lt&F&z?S_ z^`Yg1;(FH+3K5NU5MrN4f3pU2-gKDKc4A=Ro7u_~kC06)SkwA6U#PKOc$q~1nKm5J zl>45z?70=IvUFb7zt19prX>wHu>0gvI9^Dzd62RxW5F<4UvlY&9Gc<{)ID07!HzYU z(m?!Tn|OjDThZd=O|Emv^y#!t!a32L$;x1;bO*Lv0`4H0$gR7ZjRJGXpVQrq+A_<{ zIqX$#i>Kjs`3>l4QFL-_JDM0uKW|Hthg=`(dE&RQ3~+h7TUdO$wo8}z2K1D1MWO^8 zg!BfpPhmr1pN{BLqL>V1ZK6{W>Sx)$APTPU&h))(VG25)>4DFvS19u4dJv4|Eu?lw zXN-7UZ*J9%OI>1oIle@0thf(#=Ct}(4unJ5E`BmiRr`6}9=R=pMyXa}(yps?d4(PX6du{?YjfMqWP=N2*d| zco{qMxI0opc3jENQ)?B^DIMQ>cut<#`;jn-gt>e@ zTCwoe^svR!Vo0?6;4S^hio23A(+6JP$4J_ekKQ|6IM+W*9eJV55NBf~j=6nEQRjG#WBT$NPy^Ps@{Gr0ebx@xm*s!=eB;oW3;xokN zIFXMea~cTbekc{QdKI&K(0$30O-t+Z^{=0lXWu1c^G@^ZNZD4z9)U^?@ecyS<-xr6 z$CZP!KvkL~vTE+S zR|lRT+LVK+%#6YRIVC$S+-Stx8vO&%Bp-c*M%=O%YEO)D7tlK(%I#-MyLZ9%cczVY z!;arlr5wacX-GN@5pN?tyRT~qS z$I4GR7$1QuP3f%h=BcU89ZXB?Dt+epJKwO|#)879+;0t#RMV{8O|wsTE%>8x*8@ReopkD=m#sbiFFE zBY~%tARdu&w|SuMz69QL=5_6|8!mD%ZPdLpCep4aCXsoZN@Wa>aZUY}&%6qRqC&!2 z=ntC1#!{bcmgc^)#&;VV3romk7e+kCj-N-6??u|FDEgHL1lqH53h%tjc&Ob4NAgB8 zYE=4^6Rp|ho^tS5({{@gnI9Cw3X=6vd0&_C0$Fm-!04b5sE$5#$gq0GtnEy&`D$|vc#;>9rw9Is0Uxo1Rf~Jm)&mmk zuORZ++)mA>Maw*v=!6*hfDxsF;k2;!*OdFu5a{rvc;=>=%QfZdf|_X~vzInvPH48} z-3$}LwlsNwi5i;pntfUG`uikUDNMAbCz9<6ra<#6I9UIq*^faH5yCO5H-ANJE#mh;{ z8Z=@h5oP?=nBF27zHv7y0}RN=JiP`4x02jv$42FBfGvapLpq5@6KyHgp3icb#M754 z*O?5_1K49aoZm5qsx80JiRLX~ON&zKG&Q4&!`){-MV@ee`~>4A$W3O=i$@n8NV?JC zvtwAS5gZ`7t^xnI2Y0T`zF9tDkC06_IES@v+Gmc1vge&!xk?sgO2Jy!R8%k6i; z8>*4gDR!Ie@-BTA9C=~lvR{bm*>XC;=lM2|qmWtwe)Sz1QYP27r+2>te5(qo5* z1&Fm&eU-&CJ|zs7dT!Cn0wKl0BQ?PZ4sAJ{+LqtT1G??vP}z4MoqgX7eMhh9?`MNM zpBkypU|lGF6`N|7Rnf6tgY6b})h~IwblSX$-c&r5SU5daM6hc}D2$CFnHCjMGdnNt zTdj^&q1ZY9@%7dC?LqS3`08Mr6uUud{jb@FdGb-#4J))x-GPa|{(WRQiwt>oc`)t? zQm;rbzOAT~pc?v#<&`aY#F8iDPEI|-%5UMD;4RIZij3io%tWh~KQI!Ms55SpX0D?t zz@J5ACs!{INnakkacN6ZuNDc0>NT_L5jdic`&CbHRwFu!4MZX#dij|wj5R-)%xH2& zNyNSeE9l5&Sv>c{tix&TKu5wlOyx*(VlaKV5Qw^{ZGGUQ9yZ+QsIz(RRpXh0Si40@ zqkZ@KY{mK4*(ej4s7&jrsFZ-v-%8wDH{cTEowM7uf7is;xe&Cr7q7YC`TOUcNiM!X zYA2=#57tIn0DBCd3K|enk*dVQUlv3nOJZti1`C6)j{mx+{};KcLg1c;xqfhv%>v#& zDc5xH;jYT3@P%@3v98=3YDn~&&R@6rg2f|$P`};dkDB^#irlYm+W+%ElP3VG<+qgh z6KWA)Mv5aIwfT32=^qhr2880etAVShvBHNV@DSMkPkUb;4t4i7-hxDyQXyGdRklR- zt*56{ib|pE6_f1i*k)uWg{L0lu`7wPj7)YjiV%ZI*0D{NA=`{4W*BDPBjfqzdwJi# zf7kEQA6+xfe9q^-?{n|>Irp)I{4Zy{A3xqL>AIVFa(S~?@qY;K|9|u<-iY)ktbr1` zr=dErc5wW^`j)R6$NxO}B?0h8UnZV+Els;}#Oqyv3e<|(g(V+eB{yL0)viCy#lduykf3gf+`151{$3PZlK63BLO1;sr)We6x zK*Pp!rH9dhyf-f$IpiNbr0Du3*T;c$4UdN6NOi8%o{8i$5bI>+rMcd?^Qls-ELeMG zy93uAYw>RjAWBv+tA9DG>m3tF9DrX%O6Ozpfx}?RNeV1(E1==e2#~5aW2s)OF7zmdBaUOLAf>D+z zKVxpy0_eOKBQRWxEsa}AT z!*{a6S84X}x>jC~Sn2=^yZr6%a{@hP-s5xq7)Ubveer7zV`lFN-z;->O9Tgc^hil| z`)MgHmZw&^xqrUU`@sDlb>cI7oHmMQiG z)TKiv9OoPtDa-wOjB*JzMF+bAO!}hqzIHR47^jciWkGWWf_K!-Xhdvs+%s;M|O}nD$s+&c7BXW4-Qqwa;rI$#hE#Cb6zuVD_?=VfnW4_luxP2 zIb5X@r4)lQYA}1>;C!XZJg6?%&>Ip_yLQ-BxEjf_W!fa1cE3_QmfT&LCZi#mEUKx% z8LWRPrE<}&S0PQ|ORn)(O_{3#{BS>teScH!tHFt)gRznK^J|_QsZ2Ju>n5s`qR1CC z#!Dqo#$-xvQl)f)ogjVwJFLGZl*EI3Dy%R3g2=|r?c-2ly3}2`xIN(34^cg}y>RC$ zQPd1-xM3%eou}UwbzpWHdO_Ez)$-$CEzJP=|f%>_UyH=hi;t~ZD-%L!Dx#7 z!6V}3b0&$tmpaHsx}WBsF)%VqCnMbtVCxl*vSDp=i(NWx$0w`UvX&{BnAsQ{mO(Fa zs?sFac`zJP0;}q$wfBs6!f2j97?shHHfql!EyoI}Ir!K&lVzDYRTK<5CwoTu@ zwkmj%$&W3(rprx$oH}pg8_XUMHHUe5K5Fn&vHuf@XjN{4oe15HVTxa1WyPM%M1Obe zsJ3v@&7fS_q0Mb9dywW2tNPL};o;SoC1=JdZn``^^@S7X=5;N;puGEyaR>vy5IAe< zIwYf8XT9)-FBV20H)X^66_1enpC>R9V>GGiWF8;8>82hu#;G~3KX`g@;OZc}pHJ4J zf;wDr>wI5Nurq}CvZ}I(qA7nhPD9<7Tpv*-F&i)$*^$1CF2c+DO0qSW+83$))Ka1? zW>qDi2pmSBzCmd$j663?!b_66W})hHmy|{+u~wn;;h?%NK%x`<%WP%pV1zMyp`bxZ z7t(v8J(MA+TS0=hEjMAZg#tSr$2131o_TrXy8_axl8odW{{!HA6pU zb+hQHF9+vhmXRbMr%ung0*SKzpa{SH$H(k4FSBs_^<}c!SH}-J?O=xIZ zum&w zAcI#4#-htm&!3t&>yeg;j+BFLe<}nP-L>e8ZGD3@^KkGSNaxQ#Vsmkdl;FVE9*+8Z z@a@#4U30mm>}$ z8b~SI?BbgOqT7k`SZK>x?OHHb3`0{(Phxu; zu3L1$P-!yC@D`G0k$7V%vaN$-`94f9((9y&*N9YqTU-lj_N0=CFywKEL%}DP3XSD_ zF}22~-X(iSo`h>$et=Wyo)gvl zmHV8nJqvo@H>Tb1mN1UDG8M#`_j%m+RF>{YDy)LyLSbggxlO#al$QM>@4Qa0$%>)=v5s$grGX*!xT$#b zm%U~2z5+~$em+U(u@;o0XaD(zlqODD{i*pFG*6<;1nh9r1G=?|NAaE|_x+L?6fVE% zS18mL6)7Ls5XmQavYnvR(JCLYP+nmsl$%nNJ%t$0?ih8c@AxeElE3=SD;uGGv85W8 z$mR2Q3rjqFYzC+T59o)pWP)KC!rr$83MXdTbi5B6>5`Ap`?iMGdLy#hUtnHerw2vg z-bxb^BPYvxeX1~IU+7|dw=R0VsGmH$tyjIs+c1$8?L%4`8f~fMmsXPCv}lnW{V?Ro z@rP}Ze3e>o@n{!aXO0JQ(BrB@p@V&1Vm(?tB*i=m1#6+bwFNc)vO`OB(IV^6zJ+;c z5RR-|I`1|QyFqxLh=|i5*Vv-Y7-yp$l;~A7oFYw8>aXOkq~yR>5@(c(Y!M4IedYqJ zcBV3bILnx?b?SvNzBnW#<7H~-QgRj+>G2bCQa1D|3BR~IZ_?{47}Hf%T}KS+O!b8% zGx&TQ1Z$<5_9A<~MIFL;EOAg>QmIM*3>i=jHoOu#(*0=rkF>rbXy>$W zf&ua^S{o`EoaC_dthm8_QWc&RQ!SHWGMnI3d!Nz7opXS23^wygyNM#w?{iIJI4WK=j69;-?eAPSHFy7? zUOb{N!X&N$cEuOs4v{M?J7T1(^Hvl-ua}>vx%{<1BUD6=z_abtq|P}%j-{4%{2l^O z0UV7jW$F6tz0NvvAN3NTDe41~vw?#&g#D^nWD@>*BJd=Ye9kf*(1?@3le~I5mQU=f zoB#V4;vs1`b*U^xv?#SzPo&L8AYNKPbu`B5rIeMr(;7t*NPsX}OpXyuFZ+ z?tM*<1v?_@bx)v`kz*B?wXcyjGcLf!Pzb5C(a|v!ZM~4G1RH)jRVU{cZCX^%(YzF$ zh9bxKMJh8g@MpfBELNk)i3fcWw(c~@O<3&u>C}mX|2^p-Qq{yq(MWYU)yjq?N02Qw zexiMD;oO&I!c*Wf#x*`#CK%;LF;cPAqr9H?CWbW4D4lde>ugcc?Oizo*>jP`P!?L0h{O=C+UptR1m)7~H@XFFl1EN#Q0eGzQ;6b8-^)@0E;- z*gAJ(cH7wP0o6dgXL2|AKU_=NeZCph$8n(}f_#eJ4o}H8g9Aq_T+W%`tv73C>?o>% zsmg70jhIcxf0`+9ULft&dNcXBbC{>L5L(y>T=ogS8AX)7jly(XsIVbA+k3yE)g$Mi#q3fvSeG6#mv~maCRaNem0hm@qFisAHXgE1$dC_Xb`hvn8*IU$jZJr4uU(9l#E(1Of zANoleO7R<}jxBt6J>%%Wuq|ZNDYeWmJJ;B&8>_NmaZiQ#FmBWMh~C~6KVN#G$M7BT z$u2}o6dQd{>?plEkP@;}KjVQ;ilI<@KbC*63{?a-#sSvQaqv@=X6>6+ZxfDxE;X2p zaMkP1@K~_ubbpcaE*9M8wHLz-@_sFOY7TH%?9ZAU(D{WE!fxxQndj zdYCGBo%`f6d9^!7+nyIgeYsp(u1Earp8-?k6r=ql2}!Gyvf7}k<}jRa|A3dAHV?rH zmxn!WZ16;~9Rk)#@9BabwLV=Fx2XIm<}b^lXGKOs8jcn8<9J$*zW?C>BBU055aW&a z>VI|z8491)-bSktoa#mv_51oeOg?W>FWC#Yoky4yuIYKH`|=K$LbitQpY!M}zuZ#V z{1n!h{ya$pz1#$%K#y#*Q%1Qr*ZC3tg?o4^w#>i!{p0Qt18z;Vsjys!7s5#JGY+gYKYacz&Jc-AT3-4K zicy`Y==I4O**~HKaBQ(|Vh>GT2+U3x&n~}9g_~5CB zgab>L4iGJ~!SsSvMHIfDS5l_A3OUQt^@qj8P3k6=(r%~{#pKHWpdBr zbPwIM57M6C7~+%SEvc$$S3<1nHn>~hJqdjMeaS+K3f-C%l=)b``oGbUDRj!GPjtR> zAgRsgwTyZ3kA|sAsx$umY?PYpt}#t9C??-^5)HN9`k+hG0_^smAWuqUxTLraH|?aQ zEHzGaPIV5;@u*5e=~F1bgU9t!5X#9uLp$4!Rl4#^J;(^NDA_ZVk&eV^&gi@}M4BZP z<|}-htP{j4)=<<^T$e@j6?{Dtge$jplfT*coZ1mpL4{0vc`0`tgOcjO=1`kNZfU=QZl=b||D);{fCUx#)3Rjrl^GOeLQT zI@;7{LWC9s%_+JuXNDSS;MPv^dE{v|*7~)~knGg;Qaf}vmM13}x$NTTn?dG5mdmTQ zI(y7UAxkBDmWPhuOURDjrCs+mBx5#704c|C13REw+I$G3!?sF8BPMVU5D6VIRFZRw4+ zLWnL}BNoT0hhDnr;dvu~$ch$S2ohk+I9A*;AAw8eMF^ihK})6!YP!29%`eGSW*b2s zwcH7XN$(;J)N&V)3(c&8E&E%~N9Oj4!*)xKC{3)>oc1f4Q|{J*E34K3sF&?Py##)2 z_=f2OhoA=Q^E(Fw%)J8S-rKrw6i^IE**IFzj2nP_~BCqk(CPKYEC+7q$ zN8vi5GS$Rr#it$aJ#fE{$^LJ~1n=0%utVpo>UIbV66(4Yp?B;P3XObvohFiLO^U9R zf(}Rs(iDV$hnk#7`xvxl@yIaLRl|3E86GExC=TUbO7}X@??z6U=Z2%6%9M_l);lPj zXfmQ(e3C=dR^J(_HKn2i!Z3fKv#3GEPiK$YX6xJEC+f`5Kapj)kmV}J4i=5TEzwGY z<@xTAJQEsyqQLO(v8C^WDY>^^(3ZX(gM>nABI_cBm+4VK!U~;7p&E_SjB`u7KL+A7 zZ>!TwsA&O{kKnhiE8n2Ohxq0-#H6#(4#Zm|SD)-}`hbWx zJ#LDkEy|&9mSB*RivktmY*X%1Ju=3UY+uMDRDIp;b3Qf{BL0-CNPPx5A!C|=xI$n2 zp%=nsV0>h9xDdFSO4H9>-<`AKD5rF}l;wFOy7#Ced?cGZFiTAdmBp9&P%ff9F5OOF z%LuV$wf}_k4LtAC#9BAM;VW~~<4&mv=>5_E%p<25Fo5O7|>HZMR$+x{N=Y5(Xp49k^9U z+J(r-plGDbRYhAL%P8~(4Q+NNAkUsEm!&o4eR{_bE|VaaN-d4GkE4$N9PL%LD_&IT zPfBa&!R|W9OJA7K@ArqK>>A9tnkz3$Q*#?pucRsTsz4qPZIe)PW6cKEA^PmShSx7%DytQ_`%{+MeE?&S~XGl zG9}?1ZvNu?Mo?-`t)I+F>D?!(3HlFN{`}Ew2`*Z&1lNdgu3W2Iz-|7!IoC?10o&H= zI2O4YCus2i_2$FgZoiZFhljts&OFV~^nh97X-tbxhL&t_QA{2ZoUGVKAA~X3E6RzB zr)}r6b;&W@()%FtqNv(F%W?O1@=Sa-ll3JV74~6#J8#*bPJArLC_F-jG1uI0`_)$ zrUQs#qjtWId#hQ|AMfOsXsU8V8j@7F*CbLvMc(&bZEvN4bIruL3_s1+#614Jk{K?z zYD%9OFC^&=bkqQW)2*e=P4dTT^qo$Cm5*^$wY+3?IGJ5OM(VCI7cG@}nxynzrOfmD zx9yeQAUERC?UrRXKM~+CQ?!H3$zPr7v)It_E;b$CI{sM@pVCJR?5{Sg34MWFaQDc) z9YDNtzU53Sf8S5U;JEX=y_JstV#tvWZl7wwejy~rgXlDeDhnijn3#{7Hf@dBqH()b z)=0PZ8|^*AlVFOUX|cKdvmQ}n+dZcchN_41;66hJg<_LplMX1`RZqPLjLJ4a(8`ya zcT_2Nn7{CWkL^UXT+`P|LVU)|HTzZHA-#BqyP*=>6>Tj`{?I&(S4FqH2jN$v5gfDu zssdLkA6&UNbLFbzAV=RpA>piiy>%4tJpm|w@oLdwCdCZ^#ZefN?qe++`|I?V3_ggo zUIh8H*^v;3q{i!3(RKJUQ_fvsv4N*cyPlaAZ-s045 z{LQWi@08X^;Qj~6I$O_2`v+E?I&a7h^QPQs9SAm$?Mgu`i||1R(jX5aAQBsB29lp| zifnxk);=h7$GI^>PXUa;iQ)PGZWb zA_qI7Y)Aku8~GLRiRD@N3(>uB0WwaAE&dL>L1P2= zs_0KxH!Qj*XkAFQ-&8BF{D(m<)Aiv1ej~rymUrS>7AyI6))}SCsolU%_g);mxC+qf z(?*gY&bjAY^3Uqm6E{IM@-?P(C$G^zAP;Z(M-$%<5nwL;#aEY< zVWBs?QLG>xuwORIVQfgK-!2S2dni9iZSb zQH$Oqt8ZCHxl}7KD5WZYfGOQ>dwC_Hd*83;JSG(W!|d#cgu!fZcfiUVsX{A+c>H7k ze}MdL>df~of;;Brvb>6@l zz++&AI!4~?W%Ac!@Z=V^+ZzF^B?cH(osEfpH=ta%b*B8^>zHkoT>j62>CsV0Ej|B> z2=yR4C_VdQOlTtja#m7@#O7v&)g=%U2Rl%lI}dHJuqy=v7VNb&gWaq1e9Z)~-Z)3x zxrWMbYbAC)1q^B^rZWNB2A*V1&3e88uv@p?(8`;TT`kD6bX^2GNa1|?%Z&*8_f^0F z`CHqBf5Cd)dW9#o4GF)$cMa}`R$x#fDzb3*>cq<6Yh)GoMigL)KMqK6px_A;){9`F zpK+Ypm|+(IB6B4tFRXIcUQle7-eMZF5wN^r+XAejwlZm@0JybK@Dvx*xUB;@^#K@s z&Xq~}MM(cMoS?J6TIu3?>&RSo2{35v<@SM@B>Msu+V!Bvy6KpVFZNX);M|gV`_I)s z$e#jO-n#C!y3T7qV$!P>EPF2Q+R4?yR3JbuTYtR!JzD#B<+Ol2`|M)Us&F@m?i;V$ zoY;u4#{g@`+G)A3rl|hD0~T+%xlM5+0Pcdpp8B*jW{y=$7i^dr%v)vO|3c3H4Zu0! zVh*^Keq|)}27om!pq`nBUB42k8ekCSaD~YPtUzWswG5AK1T4#|#}@eeOmcj92DsNg z1nlu4iY6DojGf}x1<~!B_@ULj6|K+b#8-Vkh z8(GY#=iy3%GBb5%9hufhk*Nm|NlCc5I;gc3Jh|=b?aTkp_1g!3;JVBUFcGi^o})v; z%Wu~=Vy!Dcx~1`t$5v(k1PUx(Lt2*OMgV-s2ZJ%%+TBbvL5g3w)^dG@b&VUZ0h|?| z-MzqsH4VUeku`>CcGrHy9E5?v#h$;J=7572*yP8#V1wiOpZ!|QKY{70W#YMMx>z<% z*Vb*Drfbu5ZQC?mz&ibw%iJ_wzxx9qtGj8sHlwcpFQcxrIn?njTlh0C|9S2fa1{MF zBe2Z~Y%>DejKH>SMqn(P$-~X$;b!u1GkLg~JY?tHOdhgtCJ#63UYm8V&AOM?X5DME z?)Cpf-Rq=L^6rRvB(j)U)7#>|vdcXIk^?UD+@Si^%3l6g0I_cRqs!SHu(eY8hu5Gg zcP#Wm+6E8so+#03_&eigyd0#d*bME>CF5o89>pw+`h(|K0y8-`dees_tzC%P3_+}3 zH3He|k<($Z3XnxOsO!l%pUIhtt-!c9gE{CpUdg+PKJFy{A}#6$|-%SXFXE$0l{FhtXT51q_X!Cop&AVMfxM$WUUgsRuumQf* z*CYTesntzpLw=Gp5!1b?@c`VQ$Zrrp+&cYnb~+tfwco6DA9Hp6?}4&Hb#YeA`fU2@ zYme!RS%2X>el7mP;+MaUKpuQ@xfiyBp$PYd)*WrOWfDsmOfY%+O4p^|iqmW8Yu#bF z7qUcDGG5s6Ruh~oV-zzkEg8$v|J{!!1-4x{lpJaXeO`Vi@+uYTC8l~l`fu-u$TGuS zHO&Tx;KYwNsn$k~tBUB2*sUS(3efyQ)Z@jCivLD`u-tP~gLVJ_YOeUXf@^jKWT*y9 z)VsuODQnLgtnA>Zzw~g&8qmK};ut@*DfL{SOPn+0lS@jNljRc4vrg8HN&JU$fV~p9 z{uy3l>EChq>aopvbX;f0E&-?OONpl4)P(?|+nJ`jW~bmLybO)~jDImefO>e*=hF{a zHiTebnDVrh^P8DZvbW%A_xV-15G@zpUnf)lLR8ZU)DEKibmH0;g|B-7Jo^9KUVn~t z7158+#ZN1GEck$XM3yQ9PT@wgX`Eb7?|&@Uk)+O2i>x7vPEVPbe+4`5Tu`suHWJK_ zdyY=oH3Vs%^_==Hw7+#E80@2UDsO&Fbv9X2lRn;BwcqXh$Ql{ckAdx#C+|?!6xr|c zWO11<3{MW~9C;yrE#7Txg})@T84-IW4ITD4YMh3P3NtiB7#>gkMok--TeBW(=>uN7 zW@)f6b#k!@0)Q*UkL#vKdJS$`n$$JL-hZC6)>&tteRh8Hv%h=Kd{$PJ!N+-qgMxyBFZ)hX6$J%576k?K-2*IS zj&1jLE(!`xp|ymBvaEyzt+F%F!rIOp1?Ao6xCCtVn7K#((EEZA477)>!OOV~D5~Ow ztvnRZ9}>L}4aoc;L#AcSRv7Bvl+B{hDTQgq7D`J-)@eA7UmaR_@S*e5;7x$U>=J0% zdq-h3^~U_Jk<;bgg~1XHC8?JThtn7bB`J_nCZgO!YXt>~T8YCaTElLrh=HGD}AG9+D7=}5Lv{Q1LYVVau{ z3gBNPXLFbsnyy{*kjTAImWG z+fYn41ssQlhu2?(Z({a_MiH&;U4`ei|B!|24ZpOO=N6C}tg%cYZs8HpOYAg+`L#vf zvn4%UZ>0Pb`b|~pj=2BJB<7Ob7*1?8Ez?WaNciH@`=^SeH!@=!3=1qKk&Sjx(Y@vH zubF&`+c(v@PR`mYF2h3?pHod$G(W!8s_qZt>$CgmW9Z~nJDEOcD!Z|hC*3pZ#4bW_ z7FjbvhrZ+6lItGLE3PY|w7SEWF{9;mF?`sbnlSbaG9nvsnvk9*WF(^0ks6gm#ZVS8 zbas(+`8oa?*F`X|@#9kyRX@W|8I$R06iiDgLHhmhR+C?##9o32DWi{^^?%pW2lG5+Kn>l!b|_>p`Nmx;veBa04sUZTjrgbt=- zXI?^f|AwwDM=l={hX6pw%<4iV1{hT-6XiWt-p5~JNjXm#0qTs*sBz(svZk}XD4Q4B zsM8fwO$9Z5{+4N&Eu2+l#he_;Ez_Kd`1#X{z>Cj|stLm&pj@gUvw587r^K$)IS<~` zoB)n)UQ_KvUU?h~%zPrXPke!V!F#=nz2U~ord8UnN{Oe5527Oa@=df%Ds}eVAw9vPmBIf0 z-9g@gk3+}i-2JgblnITjoG;Hl=Ze00FbI4eM3wr7k`lvhW3_22iRw6zQkyCoMi~Ja7guVSIVs6V{bq znxn3&s0LA`-z++vKFvB!I(>BtJJs6EU|J=?BlRKqj)RF4Lc-3Br>3GVR7@Txu_P%Z zf0Q3NUip^pSy;R@OFmT&>}M}2DajFuDTx-dCUd$*EMrzIUYz#(r|%bHlj9(azM9kO z7R+a{4U9a@E6R77+2!k5U206K)~bzVr#f-v`#H(wO%in)u;^#HBkFAW_QCVuI)}Q1 z{kLx9ZjoNmUNzU~_}bm-bmFFUz0V^IBOWTSDTpX!Z5xh+B?IbWYXxh6)w)}!O+1^( zw`sOMs{>hQ%zzcOayj>&o;!Py`|8U`^cl&Nx+oVYS*p&w6vR&)q7c$8B-aj0hb&Qy}gs4Ox3JihT`oG zY@3(sM=t8plBmWU+Lwg9i+w8*7B`AF6$Ft4FG8e4IAnbLB>R~An(>~|g{yRZKm6!) z>Z%KM?cIy1337>asX5DF-)7%qhp~^5J!9Ks6Krvu)tHGp@*3Azmj=nX-uzTpFW(q- zuWsq6VgP{|W~?0lhnFtrwOdU3{n3OQ3b{(Mn%?0Hyn zkg~q8Dgd#BHq2La(`?Y}ws+sN%fb_IN0v_;xFNbNx`HBYY^VuDF^(@yK17dYFNH~yEdbc{ zeJnr!{1zuy&Z?o8Ty=i=J&qlLZhc*|Ik64PBty4F8=DIyQVXKh! z$P<0fyq2G4Gn>CQEt$%h1k`#}m(+$-jZRyyNN;DX@2s(Z3Fn67&*UnZ|FC##zRvlW zQwf&@V=u6rwX8Hw2VI=gBulw^(Gw2Y+Q=6D8EwbtE$gmFfd4eotEYDz`a`18p)szJ zM(al@ZCasW`T?4~?Rxn5b_15`7#jlPo8zT>yj(BnR| z%(n97yOdT~*_WX&?XiyU%kPX45^zE_y_kjzdzaaIKLPh<Z_e#P`%4R6b>(1vd z)32xQX4HHMeA#BGDjHw{um(a_N?uSmqBl5YnFp}+VX4VoVDq9QZCBtD!rsQx*w=b_ z2<}D95IWPy3opJ7eah-3>8XC9z2O7{(zkQTQoghdX$kSlkQDah9exTv@xFi>N#mq{ z%ZQJ#iJBIw@pQKs29@5!vv=qK9|816WOvW+Wu{m*v>5KsuWCSo4nCW8yRgZWZw{5ZqI9g_P4jsFeB3sP%u!Rp~WzENdWUmhddpS4!kcGXsp=Qjn~vzwR!KbW(7*gO7i2Sw0> zADOf_cQv8)u(xw?;r9@F@wXEE$n@`Qzzf>H6>+r{dZDeLOe+C&HmBugf6e~-g)j~+ zEv=xlnFYV9r1U?kBj1ExSh>17@&f=M5QrVb$qsb31aR>2@c~}H0lay`hAhG6;_2XO z;=$(NLihJZ{@ISCxr?c@wWF&w(1G@MyCxriZmvQvUi|LpU)SHqY3^bDKRr3P{9{_k z2?Bn90dTOt2K=jSWL3f6x%|r39_DsBlGgS}nj!lT=HTRdBlx!p|MBU6y8O4Q+W%IS z@9pbJ%0T~C(?=qvVfYc*^zl|0 zVu!ttxR_ta>A5rMnSfS~ju7{wNuCypDV&^_qrQzd5SKV#2z0nYaEH%wdvx(^bdh*! z_(=toSroGn zg)|dQ-5*E!e|ZrV58%jiAJ`s=iJj-n@8upyK9bg{F<`N0k&&LPCg!?0SQ21BoE}an zE~LIwYm}Y#PHAt09T<(x*PCw4#q>(2x7vVOnLVyi4~*X)1F=4;+GG9e)bmUozDHQ#wdeRtBZD6XwhfQ4-xO% zO_?@3RZ>F}lJ-lx2kRY-rUqmcGSMatxdg-uyVklZXvCFs|d%wv0zY^|1W$j@!vn`bFc~~?wbo5{F?0;DMS`tS-Nl=GP$fruzx&MXRaSMFN zQa}e>84fqq+(AG6VQtob8P8!3>Xnfph~G_@jF% z)?e(WpCnPhC7yrl>ZXv6jQSclK}HRR%w4uZ6*E3mW|l(bg}2uT?-ubJRxS>W*l%K> zN-6)Vl>ZOKL^0{Vq7fQ;W%J)1)3rICMS-CUhZg<&X#O`I z7_T!OujXA+39KE{QM-)hP=mOJ!!ByZbx0zcgFy5Fh`Y+Mof(Db?tsQ&$ zdNnBW`=xb3TD`$#leY5REU4`wABuqZEps&4AKc|&dB6WlGzdm>u^d$`Sb@g!w4Dz# zwCnLCBT3+QQIphuHBq5?dory@z%B^?^w$O}fT_s8zw1WGcOn)x2A=J%Pr}?H^xGI3 zyBV$UyGueSK6Fp~OD&>dQu_@`jQMWqDBYLpC<{X$)3lv7kv0g@AAdmq@9gG3cz6iH zN%h$LsRiEcsSq^XbkWl1xEZ?l-MU_CzLZ~qsvC#=C2rFy8}G*s2vCDELMR1K>j8HM zIbi1{Xa#}b?0;|4e-G`Z49(9iBSwkFbE{AIDp_QuejRaBhI7dKmu827vv?EQQ$gj~ z>kYWwX_nz>Wt|)83%4-a1i3(43>h!#4!bxphDej0=`(M1$A2dW%J^&bX zJA%1`aF8sz>8Y=d_)E;bP{KqyOsF)qcc&*$1e4qF9TTdz!e0_=4$RHo%@mnYk0F+s z!szH=4($5B{|L!K1U(v!Ccbu{W$n-KsjK$#RAepcZ6l!9|@V{BLf8vskE2iTmIbjmEi&Il@YL9twY7xq(ar`7RGP3pvmR8L%{ihqCi2*)?!qZ#bQLWVK}Wq zb2wd1NELn2dGcIg|9cX}Wb}m0R5p{|WMGlNRN^ggqx`AO6hy~n>!NYL_Xu~gOkf-T ztJDivxWfC9<&6@5 z@FdJT0ul&nvt`iX=58GGTl7l9IvQ;!5f)_{ zA#ADT7Nd#GxB11OP!0+hLhKtYPCMxlyGEZadZA zQfG4^Rx?$b#5qZ_#xr+Jq2>)bQfYQSQWa>h*V3D|S24}Ojhkn@x2IqLZ)Bm`{uw}y z>jn_R(I=m(Sr*z0Y(=TSlgDu!OBv3Ot6ly`qD)K7@0p7=u40*ni8Ef;6(&u{=^H46 zcblg6O-i8Z45KL(7Q2}112M6S=Laplo7@Y;zJN-fIgV<}iupFrn(K*t{C&%iWjVy{ zsszMXphCFJsA|pjaI}Q}2ATqPV(ii}I>{kdgt2}5q0&#jwV7^?37pxyH#IJ9g2R)~bpAl}% zyzSR$D3Mw5Owo1Te8ly}E!nDwhL$a?)--Tiq3vtwLiH(`B@Udi*#T4xjYS&`tJhg$$oTUMRgl~$JmUGFn0n?v@sddNEu zqCfkx*$`4*$@DAN*xR+EQK9Ck`(+=AT87K$g9^g7V^WLfPYH&!Rvb`?osr4b>Y1d_!H2=Di=Le8Agy%)ywc*E@ZH;oAMK;DBdgv zo=R*1R>xZG8+EI%o-~%YSLHw%qs#>?x960KA9*#`EAE9cvcHa{6o@8Tj z&|DGz@cA0vcU^+58A zGKNZ%nC6jgu3j~NMsfk6XjKB1bPi=HpY~Kn%LWJ;MFGqiEt}ddJXe)$^at!vHQYft z?x^B|MXwky|J$vWWPXj^q4x!>pOW3oTG75pnblC@4B36PKYh1DjJUFG9cB&7buKsp zZbi=-#dPlN^TZ*ePZ_@BZ(x~^x6N){tw)s32CR2s=B>shMoqHm9}Vm{OX|IHz}K~l zMYjhBGE-XzO1luAxGkQTKC-1u0--fpF7rY4Gjn2(JwW8}&~DMn4l8c|iq%tCcJ;BI zFTyKNlWJ^5eKdBX{SP!!H_p(=9C)!IV|e|{tyFN&Iz$k*SK81D&N#AFTfaFAJiX(d zR@lKn{L!Iw+~tby^L)FR5)&CrifV^w^_)bk6p+Pc)UK1kFmz^8pSP!k!<2kwsts=^ z+v8H%0xhE2d%aunl9x(S8+Jfw2cbtP+{Hk-*>-?%)8na(`eQ7&X(zqOVbAK!Qfuq? zd_My#%3tCxY=@-5Zf?yXDAQ0E@U`NWeTwuHk3(u%TeT*ceX|E!lgfxuliG;kYb9{C zj?4J@TUpPouTLA(DxM#3=j7bx_%SF@T=Qf#*ew=vv&YCpR^a$Cw)A)N{E-O$IEy(r zth$bw^VOyy&z9=*zRAR3ZYi~`N9>0N5vqWe>lB6Ve}UAupIzXqF(`2(v>P4j=3D!2 zF&$%_?ZkA92-pn2zgyzsPoCsVcBFj9H@!joMo#$;7%KoFiOS9hWk6r5Ot~2jJY8o? znK}cuD6&n3wO1#8mf=j1Qi00=h)gxqD!x&E&yyI(=4OX$Uok99pG(udlpI zNNaZXM}*oVliOrlt$xx>`o^;le@nsKvWp|Lt*7^tohW&wUsYU6<6U+S2$*5hD-mwn zf9ZA*>6z{)=h92h<-A$9Kb{vNXH$my{b4efr@gH+Tn>m$Q){hgHF5oUtk}Gvq$=)G z!^S(~RypY1pAd$Oe9a57OYb&%17JQ~01BTF0$<}cGSM7~7^LT)LxG+Rw-HC7*TWhsnnrggQ|{05 z$h}6g%LP04=b+vtHAln@OGd40)?*y@fUi2ugkb(rq>Ma9-)sW#m)y zR7E^u;3vl2Mc`?Q$R!6Xz9568y{P3u%9J9UiFV`&cgCl|ilTz&v3Y5q9AG-@k7h+Z zvlUHW*`Z=iGIG|EES9Efp8z&orZ>45MEC|b(*my6hBAIXF_hUG4|-M?$M*UFG#6j0 z0Gueve)dDlai|Hlzk|DULPG?YcDXkpwnN+ln{OCjg zkuuLgnoE`CKZ zPDC+#kE{qw2yLSha#*2!so-N2tv$mqGO)^mo}mN zOZxmjvk&ka7A5#RX7|X@Q3j7H%#=)6j;gD{(tcFGFPY(neJEgUwt!+DHGf+Qwm2$9 zuo6-+HZVb#-xQb6w;A}}CFb=O%=nE8o$I>wo_J5y&T*P^=#X>bp~9@sBF%VE!m{k) zZ69{x?f1V>FcgiIerxu>@ra;=Gq`n}s7;2?)lAMhtkJ_q0-dEf$4c=Ho&Xj`mnpzc zWzX~m7aANiKr5Ac5LIDfG08tKFd(Ryhf>l8hJar1#s2*pk86aI3czzQW+c0?jlkpD zn_WGn-a+&FWDH4Q)e7DNJJ`5)hMBgATK(S41u`aBpSCbHY|S|tUZge^VtD)BrQkF< z0#u@PHxv>+HchoK6}i+rnRP~}oZ+iL2HFCGvxKi;fTW|VokbZDF`*=czvWVZLY6UrsBzlmLZmf@vHdRMxtDnL^Z~fQGVFrt zh@qiTt(YxYEw3ziHI05z+x>!3u{TYlWZF$4=adOHwcTyod3VXAW%-?ZGzIRU)%S~O zy-6)UuL#|?eRtRuc3N?|&pw@kV%g4tnF=Cm2pD+K;q)Q`*3t9f52p6_ivB$$2CpCDgSkGfrSj?ss8(*3N<%;zXzRr6n&qg~5T%zExMPt)mV&o! zenrc%B5gN~(01*zx!O*T7DOXJrGOF?I8P^HluI58jP6-VxNE;mvG;PiO(Aa^(=YKk z9RwCt+-=_EBMf%#TAS`U`ciCZ{nkLqKlCq}!bYfO7dAop8RwBaB=U!tTPe^M0|Y{* zhTpN0@6I!LQ5G?9s%UeChr@tW%lCBKd4E<*5zOLPt(f>dg;q7P_FE$t|uJRjGrY%fF+^@q#uF|g; zFWc4ZARolwPoq4-`7h7=Qc^EWD|SYa5a+bFA>{&aziR{AE4iyF)Pq@k(=I@;&diuMT0u7?}NyZ0kED& zYUKbtlE^RAq`(7-Z*Em-|0T;UpIfB}i}{a`@)LH<<(u0Crq=OAnC&c?QZvNJppDsp z#(S+~U%b!$Mz}81C!Ce>piez&msF*dmN_i>;jO=h^N z)pXwi&Jv0X%|I+CTpVq|Ag@GJ`T#=e;;)#35Zqbw9Y+s7TQ8{PnT)xp`!5zW28 z+hLh0AkdH=^j1Vm=(g>W5b{+z!);_Xr=BpG$7m#3xLdjDD(t=(e77T#c&V*?;TJV$ zH+=8eJvXKjCAf!*$>5S?Bj5owdKE<`vJpTC)0I1eAi*T(ii_Bs@`*!sgqsx4ocy1V zTgO+Xjy_{T3(>;^P4#h*Lk2*k;w@{1uZ5V7$muoeb@a?>zXfaP_E2hL{Cu^hBX01J zl;ztbOv@wouzJ(ecY7=4@iK-(bW_)!Ytb{GjD}&mS*tC{tHM<2v$hAthK0iLFFYF4$2_y`1L2rklcr4>C!y`p&DAuPzgkwip~|3Aqn!fRL#;HJtB&%W zh+>NUd3B~Baqs-}f9@hYalkBwTG;6==_|(*WpPvgNJi- zbQR`sH+e|p6zJ7KvtP}YHpS4#yr_#ueyy}N+)Ap=NcXJ;T*w#pJN)$~GX%6l?N!FV zan))wf2i|*07!Bm1w?$K$UM`%j!+*-W?@O}F>BRmPb!@pWm}je<&js-(D7XvOr)of zj=YNDH{K)RlDOJKa_ASxk{p203`1k(-sQH&0D0o^fPp#y58z6*#!{VKgK9&XmCUiw zpJOi@r5&$X88f^xZi;ZzJ^au*{TY5*dS#xPIV1=cXNB79ykB}aW}mPhV0=6SCdCSzuF438=?T5?P);xs>f z3ClR$wL=b(!S5_Vgd2+R%O9XwhP?F~_D<8STVt-w4vr<5Bn1VT&37L?Q%T+x{ucDHbXdyXrpyJj)yQzCtf-D^iFLb;+YQVbJfAW={S}sDaTfZ_ zpxqF$P^z;Z5=Jmq54(cyooN+X(zI)ih**Iy`VVfyJ~qju!&{Jc0-f{=yr$g6AQumPsuZ$rOW}oPDGNsr?ldao3*ELgoir(2lHV z-x9Lvt+n2d(E`gM{GvPq8_7H&HvmmrZhK|Uf)VBWlXy^)J`}NUzJFVgzHyuX=8F$3 z0;=qSjO+drp64`@Rb`e^Wt?B|45s~B%W1mbf*KXXv+~Q^FSjWOX;AM78CHDeo!-c! zI{4#)7nOND1I^=9!%wGc*F;|uUkB38_V(%!9>kEMVTSY%4M_JCc+|h#YBTpGWvU>mxj~o1+rg;DcmNq-4i393gw&{$wZH;x z?*s<Q|@ew^As=;(&15F|`2JM=@AEspYr>V}e*CHq^?NsT)Dl|f<{k}U! zZ)(3L`>`P2R-7w7#7b|Q1l#y7)jq|uSl+8SxHPeFv#F&K^B)_*Z&fohq5nO6loA{+X!8HVLC!3(d2NUHsDbOQBz zmkHSZNCqNdFtHdP>UlRbiHH;)T@3bFO>OM#Ix??_>(d_s(jGL&!Y;N-wyNf7oM=jX z_i(p<&W0uQyNxA!!DUt|9KOi_7b>u+y@9Y&8NuGSt#Z_9tq!h1oaPdqH*V-Y?Mm?!!sS3kbGX~)QLXXo z+f_47>D$G`AN@T`w=I*;DG+`-%FESGG4mdXx5$uHf;aJhtXK<3b}ge%_@ca0y)NkP zdzITAdYoYa6@Ds9&vE-M=u%VI8EM@5U%;vo+Lxo(rZTP>U;y4zro6-0r@dq5!Qap1Uoypw_1+s6M5`Z+9$y?{pT|xnQ3U(9K+YaG8_$I4fCm8yY!LKZQXk95-pRmDYJWr ztq;$2#^QXcH23-ppz}pwH$-8R58~ne_R;B+BX&bho?;Fibwk%KF`MdJ>BKu+-k@rkXbtpoBF25;4GoBsktyS3YO=f`xDB6mx+ z#>|2Q%~t&@f+x@Y^6u`23$8|j%PK;a-QYWBKd(Si6lAe5gXxLQYnRiPX9)v6?k(`a zsP+nBSSzrTk~|fu6zpA95B{ta5v062>127(cho-)Zk7Bbot}FV4HB^LAW2_p?y);R zwLiQNU-Ihu=ZqRXh50a$DaB1$=bUoLp{_@wA}rYKWO#X~b?7u&BiJjgb>GiduKu?NcFbKfPC6(+v$DyOnzX4CMH;7sQhe z;Km))rkv(bFw|Ej(D(%k%0TXgZqJ`z4gpmY1|C;`+N&F5W3)Y?ZrpcwyH0B;GBp#^ zR)`S@aN;S`k&D;RgZsIg+Fz{Nx`4_ECJ#oOcc7)MI-#mjpn?Ts%X-$fZ|{(^S^pC;x%D9*YJPonGz0 zYqkf0v{A)r-WTVSIWrT=v&hsui;=V(dTYeT#4L*kU%n() zg9lPtowZKuf3n$Z43@oLVgtQ88{L$rxRd+iTB6WDr{nnf2ALC>|d%#cH~M(g@U z0{?=wJS8UY^kYlbxyOHutF5w(n~A}z$lC@9IWIr}xN&b)PS7_`%>0}#`Q2t0F>QLo_iRpU_iW6*2oCC0gb(JFfrh9C1nPlmpnj+y zVyy$YbG+HU<%Q}+X?V>ON5cy&yB^Z9oopo=RpzvmkD(~uiZoxdG^~Et>=ME{>9A4+ z(QcMNfDgoB2R|j6Zbmknga?7lCBL_g7wc@MJ8P!SlO{%}hGMuxh#jL?yAA}tf$SEt z>dP0hd!@G`4uMxdz<28*@t>Gz-PRg-?PL|n7UL`fh zft0jj+(%SR7bF|l&f@05geMe6T-tv=j1oXi^8GxxLjBUP<%i_{3i;g+QX{SVyBZqU z*U!(p%TfBgW@SQe{|GBYd2oJ^@kjI3Wm0;7 z=|NxeAGPRjhbWYpk3(Z16^h8!gl;3a?z+cqrdWVyQNv-g`C%TiGjV(d0f|3~C^Km& zn`;+e-Rhhzr86|DkZWRQ@_O_*w*E4f8+l%^AlB00j}rR-ee~${CeE(Z=&YPbeB(Z8 zm@Hgt%jCw9u>*5!?Fn}EpRvV14}GBgk#2e&TR?^4XZ^37clp+$k1%NzvXy z^0@`)mE7pKuVfPk{n1*ya#DUSYrDGc_gBp#vMm=~YTAmA>b+TBPq$Z-)60G#^gszK zwqHKiqU9cA-Z4@vp<24T;!36`d#)Z7Sear>7L%OO|BUGg3(6&d3Y5p|zH>OpAQNvl z5zpA7xsRBI6&LzdD~Xw2a$rWNl5|NFq|X{daGci1($#Ht+M?R;~7zdOJSOJBcmS*$Vx%`n~wf77Tt3 zR{pt9w^yndWWd}0e3E&17G<{aPUup%{M!?z$gop_9V(5`*j zn&=N(4*Q=;<*eWll$=mK zujR@!dYeVzKX!!20WF2%zYIyDCzj9elWw5IF?&FRt%fT6nBlbz##}CHvk{f_V=`~n zdMr{ibdRnA%=}-^*_3}xHz#CltOg%Y&%WYbO=1pp45LXd{;3cO4^8iM-(jfN-OaD! zez&FRQ=DX>ry5LTOM1TOblcI<$<4Ty-fT+e{Y>p?2d=gnkwb^8Nlo3|K^!rh%$Kzp z91|-0t9v-|#G$_ewPM*o->?Usd(3?kjh6~fpUMo+_`dP|m-h&FG`mO$N+=1Vr#)!w z$7`M*Zq~4_pSWH{R`aiNd`(u$MJE>^4hHS=Xx_KCDC(jDhfb2iBH^5evv6!HG_i?> zpUaQ2&?H0$EO0srD08+}gCi()3_slAQh=Sd1YauNn;c6m~iQ$~ROd zc#$W3^^}a|z#Eg}T z_Z=iYp}s6-0}v#7Jc;kZ%Fw(e!jR|iSIYJ$kMy*pPyXng62o2GIQvFI4%DF8N}AvI zSumgQkVxU;H7c4!X~9I03_dDerkHGoGc?P~_g!)3a5qW&J7=?Q`dOrIKn^cobYhEl zM(%}tqQacbGr#b?CT0beg|AGVVO%o(uu$$1*_g&qD;V|q( zQp`koH%^QF@PgEPFRDoQ>610BB6aUJH{!3j=$Ortwn&-13H#_Mc~A_iY*pnM*iw2K zvy5K}kB98ac!9Y;9K^dkmVTUz_WqMjwiQ|d$1K&WR-I!~0KyV<;r8OZE3h)A@O1|v zex>Py46-M3rfw8xqr)t|bwrZq(7LGzZ?6^=oN|_L|)kYDtfncuauIkW>5F*;=!JryE z<2C9Z_~CN6D)vnmSQ+|R zOkGz|^u!*L^j-hp{`su*B4v);Z`@%>Ghgv$|lvjC)=Uneccu5D|l5~b4Yb2!LJ-bC2{rgHJ<-e~gSGsX1Au+PUOB9$KfvCfVk z<=xwl+xi!WC|qf(>iXo?f}xGC!EvFv=u+pjGEo2MBwoVkoU-pGZ6=8&l@#;TA~#*s zP zB`-y(`6_V<&pKan&YX|U&V47t=9Q};DB3FeAfB0-$=Uhx<<_zgUkU9uZw%F2qCiN8 zVrGKSoIx(8g>@?)fr!!=MwFO6vr=ra($~SqdEvne?P455XILzTzam-aXv`l^VzKT_{_n>8!Ev`zHjJy!XfUwK*RI!cV%c zuAdAX25(%MTVQ$xID9B%wmyVF`RXwhnj~L^S(Kb4=;6DP>-WG@~^WdbelD zi!@rC=T8suoT$GM5AFrzM^W3Gx%T0gwPp{E2|?}O^)pAqZ1rl;Gny?ot3!33zw;dw1xziv&cXv5LFhiS~Xz zK#tn!^>*kNVg7(#(YN&-NI_g}>F!&u>3nh1JPH&XXlT!$BAj4Svtt%kf0S7552?(Zcp=*z2!&pV16GPCZ^E*!82aEEbj3+%#aVlTTL+? z!RWT&{Q0t(Jgru&_ZijOSK}q)yIqFA_8v}k<4zIbG(SvEjHUZl{}@FDVKRz4!=rLO zDkA!LmL}lKt|-9zwSfOsN*9teR$YnYS2v*;Rv|~m_FW_*W?1}5-fz(OH9aYL{B;6o z#gjW3x}!N)@@YH`pxRjVJCW!zDtYnWjmkpt_?5k~O^@JpN5Zq2j}9NHktcuez<42t zHuS>;^wZw>g+e1!+Bjm>=C!~}1CEmp^w8|KhzrJicw>0>!$oO;0S65i@Z_9ZfcsG= zVSQK;UMR*i$w!KDHj+AJDhiVX?ezW|qbCxmwJDUypAc)&eYpr`41HN?$|ziAvAad5 z>i&fqRi2S3$bNi-Vr|V_B3}B5><%f3SO@k~6P``-ik~fY^?qGB+N&dkFY_WGn+Pkz zdI2RU4kn0lLvrF=2?_EbqL9egxS}UY)|_WXPo}89mU%$!k36#EF%*jDF_^$XD*?ET ztk1r(NZ1N*XAo_jI33?srf`cBQ)bK{?I_ZFoB+g!J#;o62z)L&iNMN7+lT#tgiKcA z#-6)@Xvt~L->n<_-KMH@^#Lo(nIF8^t-kb|V%Lzdei61J5&Byb5;k56+Bp&(i#tA9B5D|RO# zV%szYjjUpMCEGYY%UM`==lR`tvc9N~4y|VrFFiDkM*^}fTwJLyW~ibpWBt{~kAzyj zQf2)H&}xPuTK7GMVF!*xdk;>eD6z2IN%HcSpplHZ6SJ5jlF?Xxef~ni0--}ZJ%m13 z{QyS5VWkM%*+fFD@BC#Ps)3aBtgmr#YHTOOmOeSQNKkQ*ER_)b##rOi^f4|71%npz z@JZ7Rp}PH-d~sHL4K!uvN+^b6y?9g$=?1yfNmU6Q@vde4Q2?7pDBeR!{_h>Xy~{_6 zWMiJBgizVhu{T)_8}DmZ>|fdi@1gC=aKC|EC7wQt+z5`s#6MIm^AlpGn~q9-4}I3145F`8oVSK0fgqZeVhM@f3&}oD znF}%FUCq&U)c&VgM<;G%{yj_buT4}D35$w~0KNMO%!ewN?s#jQqIiR3XZU@@-glm7 zPW~;-Y9SxRCNnu{w*134%s=fdQE_o7nKU33$47Lv1FyN``u#gXrP(^|gYlPiKG&)b zWZ#e&j#3TI>JDj9`cUCg$WoS$FfRML;_azCc8}!kd?Q12a>6Zhcp8+oi3t`)0-6Kd zc=Jcrg9;ECw-kZ+oI`<~8GCUgDv=^lQ{c~U*a!x9DVlx(ymnW4I6sIY2QVDbdLKOxh??~y(wmne^9W&4chpxc5dvNQIxz01x@3}<*B#En;;s7|c}x@40=~*;;funeGZj7i`~GO`DC#wa1>QUcEfe{SIz7y?-gq6 zNnvOg#2+2gF6hxlWPw1Nxr|R6X;1Rof^+ewnFApxFGJF@hE}M2bBn~yT*nnM6n8PY zb_Gx$J;ke*MR%8>;bh-)cHbR`vVkq!--Rn>bqbP40hm zhEoi7Mq+kZ3jW*(fQLAJvR5YXPpo+QVcLS12#E`i--M#SamSm*{1hJOy1qWv%q%cW z&sOx2UX;=Xp7o(tyrg&X1nsTA&id&Y<@-$#H|0i zwXb`7%Qzl@6(OUZQ@%6h7=f)Mp{ze(ffYB^?Yl+ z@BggDFxSc6$L~1yJ}-#3UeoIp=KJ^`LlT{;NrpnCAg$4Jt&qj0$MJtlNpwn#xJ#pzny&gS?HxTqmz+6y+&lGGO1XIs<%iov4LyEHy6ZN8mccOfF zBgN2inm?^39$jHDi`qy8x>k&;`3uDr9b-P;tfg8|V4r6sU*%V0)&xm90bHp0H_hNb zZu(7;gj-JLW0zZC(J{c<>cwSyy`v0O>r(e=7(FXRpWiy5`*qtpj2s#tecMBUi0GqK zF8J;^-O!7m`m%0SR)pRZVe=lG3bUdYz58gBDnJ&Qd}0!mwV0Zh4d7VTnhhmg&X$aeLp_~ zDITXd>On*~LygSPaZtza!fL1OUXRn$r(LNaHa2TU^esC%r|28osl+lVSV$B=!U4kS zU5+1_;#Ic%RdN;kUGr?Sy=YAD%O;ZeATXpOS@)XBNrg|=??tt5DuKYuWem4cJ%+f{ zLN+(oF#+5tOJIWQjh}T*X>u>Qg;l(;_f&0$=OI!Elo^syeX1$SR;j!IXCYr+a}j&9 z!Rx2cLzbh#^Jibd_F3VYeRfQXuwkYvC~Uf?Mw4d%fju~e$d7?K8O9I##J+`ylwCbz zz{DJ#8SgaviPlZ>e6by_ecxpFP6R#E3EuGYu&N6R%Y8@_elm6!@#p+TeehB*!))VH z6M@TpD;e@M@%()vA;UN`dY|g%SRgoJt{e4>-z-Ya?tJ*-<*ll6`1GkZ8o!LB?FqTt zFpfjlEd0HmP-6s#bpKz)s=_d@Dj}2qeBiu03q!=Na){OIix6lJr6fT-&!+|fZqDKL zVp+3MN7l9Q-0H-`ZOQ^j<_q6dV<{`egs(5;dxqi zeqC^$r4EWNXB0SuM_cq}wzq01+wtn_TeVu3`IQa-xXJg^Nc!Q`7Y0*uu!3b5<`h-x z&L@UH_Aq!8;o63Jy7X&k`h7)iL9OZ$yUiY{IsTNL;qcgx!)%dcibkxIFU_8Qb+P)g zj0KI1+0iC!AMnMMzfnKji>BBg7O%6S`Lx+BwW`7&f9VDk=zSIsv18GM1;T=RUgS?-B!oVednw%5OS&z*btRc zWW%Q|!YSYSAb0z?wcQM<*Z_`f06u5yVRu znf&gg_M96lY#{VNV$_{XF-ffTGmHl*oDf~1RacPkr;l^YP6}DFkN?~Gx19YhA{dOgJOX5l4e4h%84<{p5ZbT{vJdM3>D!3#FHx#CuQ(uktUg4( z8Q-)AWpUFQMMYxBDSM_U{`Dc?%za`kGZ@1NoO7r##KoAM3z zg9*`h0$2Qxkk_DJ)mM!ilGZ{ZTNPqi2_0*RmKZyhlVNzi1;Qn%{^k_ps^W z^qT&JG6v2d06?Bl{=twSdV6;?r@zkUWr~@gUwNB+LHyF2dfT@mPzGb)Kdj!IYvHRo zi+oVKU;-kx0meF_JJISGhXonDAo> z8eTxriXI0B8VcE$mQ#SmP5fcN4Zn8q? zaI}iY7;1GgPY*6gkTp1mPf={j{LRR<3d8+6rTxGlQTSQ4k0RQRW zu0nodw-sjYXA_;TnZ?AB&}ry+7@`RMJNA-q!k&jfa=Y~V+#)?$0P+%(qr1!jA^nss zo*$r1*oIW8g!&%%z3_Q!`wL~It|XdTsv99=X<8y!cd6H$Wt|9j$+XA24R^M;<7YPu zK`_|{$49~4?dozYt;bQt4g!mh7K19kRJ>2gKZ<#LrV~HhKO_lyF1u42C2)i&TaII z7BbQHZy2@Diupr^iOa&maao_{l$kH2@uqO4C1!^0!F-94I*t#NLk??M%__P2|QfHDMjZgX?lL^}!79LNYJVC!ohA>Yni>P zR&d7MO?pN>Jbrf-EoKztY75_jSyl7stx1i9&IjD>ssA(?#G3#GFczSfwZIQctU0ji zRcY`18&Q#{L6Lpm~7pWOB&hkvZSf%eH8q zVUH|ae?FU)o;G3_i9qDwV57PpMll7}H z1WtG^;v1XKMgSop3xytaPj9!JP)#8bN%*SC3L579LE0R!0# zxoa`bAExr|;Byb^##KIs_A**%@wN=myi9DY?Xo>@XEdyab?_AD1QG-ItjxT0kJKGt zJoohjd+krM4w(a7gDohiUsGUh(FU;}78(Pj?pM-!_Uy!cqTd_)++^$uB!jMg)UL;#6F z=C#n0yI38RiV~u=RN`TgKES_c|DpW?6QAi8w@expITH>*rSwwQb~SzL5s_>ff{!c#0JDgFF0Luk|9nqB z7*6-KWphoo8>Kcn$Tzu3ae3W^I1>;Fo~i*#KZc&M{)}<)U?r2ckV$BnSZP%Nl(0Jd zr}=m!d}<4i#M00Z!vy!2w<!<6-15H_QUYL-sDm-)U_g& zT9`?D@hj~aqh~NpF&EZ7AazJ84I)A?Y?T0-zS1BdEEw{P14ISf@TUkgga7Oh;s*3_ z6mlY5C8x^;Wes%6y7&*N?@hB{vGXG(@~`@p#T&aNs%F-b@qwBU<>6=Dyk(!P(N243}e%dEfd96C=g=60SuhehW`z z7@X6p{xZ{f-llI-shng@kL@@`2ywZZ&8lkNn*_{rs2wKiJZwY*^BHfggBt=)`_0rP zr`u&FHF~B6raSg%h*??3vk%!LA;cp&ZREd>3d1RTl!hYF1oP<_t8kMvUM2-HF=~E-+0>#%}R|M=EE1Q&w8&g|Bz4E%INpNiKODw?#cS zl#(VXnnvIptlnI>ze={fIE}wOn0tCgB+rUA=6gw{bVuxEUEIO@2dSQ!Sjbt1a-ntf zc%fXd9D(>OLROg&sGq-dV7b_9fr&89F@q2N6aueSfrNkE)~L&Qu~K9nHdYDJu+c89 zLSY2#`Y170!{kaz=ej~nmfWfO-ZmE(PKsfxQLpe9iw71C!fFUx*bV~b-Z%NJg!o-( zM?3zStXE}VWjG~Dl0AA78P82X(EM0uE$K0=ht!?yN!JGEk=W0#D40z)7P!0vYQp*8~|`TDo)Rg2lXrgt3EeY15&8aVrB z(H$PZ=OgQA4y-)_bSUMfL68^pc#@wI&BL;-?yAH+CoU{NmHZu6AS)=Zp?;Wy`7h~w z#FCByBNzaju#br z2sigi11`ch<1bwYEkim!QMcc)5>Y0K?$H=aMPMPQ;zSs(RO*V7gbGi{z+K&ZDRPRe zsWA^@!hZ5Rynu%h2pq(Al}m=9o{~3xe8_>*(u*xv_>OtEo(~Spz4mv-LPAYq9wZ}! ziF_Lt)rW+pOrZ3c-_GUP(n3l^^7AnX&?=9C*7!vIsU#1ldphphv~8C5 zZtHj;bOL35e`IKZ?8|lo5%HEm!~8^YnpkAq<hW zke+Bx6()#>O+s^0wwU&A*I&rJ;$yUr%36B(!=?U9IE)>So5^&|`=|I{Sh20)P>7&O z^CjvAP8U3vz5CFu;Q0~&Y-nL<+7}M-lQyny_@v3-eNs9-z%g zeL$B0nF)%lc{GYptjtjk{{|a339&h-n)#NJ8|9As%#5ph+?|AYcNsf;YY#v-Fo*5q zO^N@d6mz%7XNoq}z{{8YE3@xlzXp8h5wyIoKJgVUp1)p?I}aqRy7vu?kWhljbRmp_IB>pTJ3I`BrTon@I3F*Grsb*Hb1H&%6(;+T`W?q- z#qP6?nL8A!4WCWoPZFTwtaDW3id&Zi0BkcV&~P6Rb9hY>?pkV6x@zX5#$k-t3x z)N3*#>Wvw{jELnIIj7hfn%zcZ=6-EVBVjSo^Z(U*lE2B3y52(4IkJVK9 zi;IFdT88G>ktsNHo5YyC7e%HwEv}lS&f8s%C$P*y59MWb4xhC2#?n<(o)NONX|K1#cc{>2Rlp_-J z1EGskINOgel22e9GguRVf{T+Gjx~B}#j=Rm?*1y;8$MwFmXsZR9Vd=P+mp4^iON=C z6J#n!xPIW#QRVG-bIgIqB-hPzYZvVg-1lMu2r}}|mXliJ>QS1Eg0y@BDgAc>n*;Re zuxIx$hHG%T)|;@z)51!_WkydFwqdbXD-NpBvH>8TVa{iOBSZ zbqF{NH3_`wTUJlbaIsPCR`4t(7#h<)|DC50HW96c71m z2jnUSCWOO=D<5GDm`91TcKcpA%HVMECB3Fnhe~hmCW8BFjAn*v+734U#>Ea{S;So= zZ$;5Uw)225eq>)Jw0vYR&M^#_O;X$xrRfdJr$P%E$Uf5gLXc*T8bsu`gXQlbz=VO2=w#K+^>>oW*84^l)w(0OJ z?A1$h3GJtlu%rW{y4@lf%H>^l5^1TJ?DH4hxqjugLwW^f3(z*Pw^wQ)hMb9twe}FDnA$a2uX4|68sYG#fXO!R(Owgn%Ze+2?W@&<83aANgHHQv_zS>*i`UQk(Fkh_IWKNYx+UJVDY`! z-asU%G*s${1{O;;5{d6kEDe?5)(ME;PGKWKAamljs?f*Ep{yGB9|a7(88*vO{qR^y z)e|TA*MG(fd_-i+S6Vlgpz-|!@rO?VtHjXA$8YD^Fl3$ScJ}Tfe zVG@;p6xDw3#Z;zBz1saS)0gJn}!Y`B}3pXNY1H~NbD!hM3fIs#1k>)KRwTg z21#V8zDA&Cs90BzpIPlO0-V1in$n9}nV9Ln`K(&%43*+uHYVd!bFlY{lw#LQfjWP~ z%>+zIhwx^>b*Sq60lSw`DcxWoO#YHlKVLT-hsXD_^c|^wbGhhX{V4Umz$PpKj2B@5 z;|9dpvu?pzGRZ63$^-T~6otcmG(XVVV~u&G&z!7ui{pj^vhmUSQzRabrF3kP16J=) zQy59T#c^4N&qo}5Zdj#TZpY*chGlR2GpP##LmK{oN zzWhbijcO`XnG)67#0ECg^9py5gKkX7dbaW*@F`{u(crRe2mMVkS0VV;@-wng?gmLa zmz%v^=1W!vBAZPP!lF$SQ38ieaYwcM)QAu9wPlNARe%?^wp4}DcJM6l;3Lu=0N7b2i z`P;w6GYPcCot(Zji;n+fX@@;9;~-XxJH-61oTq(ciiO_+Ei?!G z;_Zm?m(@q5l_~qbw9}u|v9ZkPs3c&*WoUd~>gq}1HQFWcgFM|rJcg+;! zS>hRgwcQ&eBE9(kPngITr3g&ntCrGL(l|=5;(=OXXp;N0Q;sk?!oKVI>vOOU)3xEd zkH&on5bCrtW0FlXA#0AOK7GIHVtYn@17(8t&KY9xCS4PJT^)RZdJJ?15|< zQuOih(HllBGm*0C8Ok69wq+H30e_EQ+7CPi|25USToPXU8AW;RodnXeR(G{Alsyq^ zmf!Ywf3c;_7$S&&wf+Rk{9vQ931Qh!qEhQ)LPQ)B5`A}wI}^T=PWKNdpd5*j09Ibe zC9|cHm}31=`@Xxz_V&9NvaReP{pL)@A3xi9E5PaMe2(q72O)b;!b%gPJYQWv1Mpx{ zB!2SIJpzQ->FUqRTI0&iS|A55slLEiCwCRAj%i!fafqp%^laSxk4D%F4Hx}pqrGKF^>p+$enf?(b!kAJIH4|~b7 zz#S8{D}B`KZ^haVN&Yp8U-bQSNhoIrcwu$mwnHio7MDOtW?HPp5vX9t%xrzMH;?cW z3`D4hoA2{2E=zJcn(CeOS`hycQQsxALkH<1L6p>U(lW-7;Yf}dB#M(OC#<)CNLyC}yfGkh& zzCm++P31X(`191?6c5T0qtfeg0w)Now-$Mk1CYZgGAs)6N7&_@$nnEhew4G-&qx54 z(#WwRM4$2cvHa5U+#wNHtz8hr7j7MYC-7c?K6R>yOOxJPG*ZX#q*ktJT=MVC3I){8_2?C zEaox49ySwvG+cBu9ct>cFcYH~?cf&daH*iB$RXDqDjn9n zl%fnFmoMc3KgtH?T4nN6Mu6=iSj+YEO43`@QgrB~mW=JgVp2^{Nt#kR?4NJSHAr^n z@5nmBVxXCkO%%ZO2Gt3X#qFKL@)EY=KQPGb#Y$Vd285C>kI&6->Dx4#p$(poylx!Ix4 zm+wf{Fs=vzGcgphckcxWgAMnndRFe9Uhiu1D(krOMaq(=+8ePuN2DDSuzfyRARl(> zxc*JFkxGn6MnCxk1r?q8%qWXaq&xgkM`HIkbPiUh2deQmerI$>EtBhiFbncyMdxCB z%{2aq=HJslGnIYnf=$bs20{bG?qmKe^3;Ms4P%$_O^L@HWgT6;9ezXi(kJ}G_skjf zjpoqh7y-r-tb=HGf&R4C!q#2#_9S9AU0;{g}v+C!&CJLdH8ho?R>2{_F^F&3pXo#ocbr6#D*wgiK9o zkH1KqF<@5e1e0NjI-Xf&ml?f`dqyn6MDB-|<$T&6)aOj(6epPSCrJ54^nI2E|DfCB z{kQMdx?kR;qG?)Rf9c?wiK5ukg?`|}9juZ7$-_9)&m-(UTw%069hszDKtHH6@e6EZ zdMFu3avnt^5am4|x^M#oFx)JNyl>jlC*TVCAK5FjCEQdzx_SmslBX^AbM(8%(}P^K z!nNo$kI5BSAegO0=pMB!goZA+Zw-f#)9?WnH`Y}#e(S@$O z;1Hjph2qroC&QmzJX%kZP^q#JQDlt}SchfwIN|Z%a~j z4b?IQki7K?XmRzYim3T-Xt~9=gzW(oVtV$Hq8h2|FQ~uN_7R>fwnryAVvDTtr&w_&u8i-S>)Nx`WIKJeEXD`1BFz=5zPrM`XeF^d-+jXC*r*6Qvm-#sd zP^6pLFra zKP1yzGI_W_m#C;q%$%dNYSWHgh6`&~K08QWPDBW)D=Jt055E|~8Te<|MvtG}1tgrn z{siLHa&Yf?PP6=!2I<9fFz3T$R0qnbU-^n|_St6ocpNqG8_D~W)xKU~{78+lVjUC@ zSCV#^YRHi3nz#Y=RbzN_idnF3DDev(Eb5XZ6sJ@7p$HHlXkyg6h;^}K0Q-OTa%8)T zEmaBUjdqCY!^ED&NzeqJh;^w5bTr%F%$9TCkihk1k8ir71C-NgGXv78K?AE7yvL$o@Y>x!lI5CzL40#a1(1hbzu< z_0t;2O%i!unF2M!F!2T8zK_aws?}$+b7V!ZhC`Q($J028ST=N~+Kecb6>~9zn5>et zD^)pzMEv>mA@o@)kfw(dO*N9pv&>nk%*VAyBMzQ6Y}j~yC7X~nbC7JARxJ|cJL?v? zgv0vtXoL`=-aOc_ni_<`Zs~9WLEL?l6yewvikb$O0Ka-N-rCRttAg2;nYJi|_l43+ z;4-1EUuUo^*qu*%c*L_>)CxP{D)gZBM%E+=erUEkU;7a zYAAMeM{CWpFr^jqV2Y7gnK()a^;Az^WG(8GroGOZ2LBT?kGVVbc*M|Y?&!!nRI^lg z?aX7lhu#r$%4zCfeV{3=Co%b~+N{=Y&Iht#eG}dsZxzEn;=f4p^4654()66s4O@5N zYm{9LSHK$Nl>cL;y%1DTm5q2kLsZIY(vw_r(K@6t-Y&EUQyL6h4gb!4wF(o$WlbC2 zc=1(8YC64(v0F&1xhy|QFpL;qJ|c;HFH3f+Us`}k&tK;!_8;8>rwAjEy-rp{k9L)h zE_2AcL^2X#0}%NL{Uko**b%U!0{5gAm?zWfRnDq3GIvs!JcS_Hg^qY<))Y-EY{b&Dw|lf>@7VVKle zvyUN}`+CDGL<`$cqPQF{meOLt05UyWAc%N7!d2)=ncsm{ZSatI7z@)Dc1I^=8}4z~ ztNEAZg%f#w8MRwxVr6uBh9+4I2b$H*JR;M^_4`H-G+e2rhp@-sohboU%Yy=FTl#`R zSr*rhdL4}jn=fFayX#L&atPUuNv_lW0gb``3uqJ!{|9G2GCVOcwHiLmI-xv4sdTc1 zMPiP9DK`)7<=3Mb7&)Cz?%jflgrKr5{RR$Lv_bV>F`5~;Bzr>TJfdxp^aUZ|_rq2J zg(x!UOWaberFq42kNqPP1@D`^=!&7CSBE)_DyAq~70A!GTA`Veq%M-|JLQZ$RdNo$ zpwJz8y16&M4|Wy=!;J9aYyS5D{r|!nOkgsZ9-3ZP7D%Z?ABUvxr#3PCo9QyzzJH#( zN8_0+OjB4xKjNtYa~~tWvus>J`Zu-6wqmFBvBA&9s04<80#Z6h&S<6?h+7b2giogA z{tORMV2Egy5LpJ>bR&DD0yZ)KO=NPL$#f@JoW@xSe9oQ)5#%c@Gr~-h)*}5b<5n;5 zaS;90=JbZjmMgczdpvKjCEm(epJYHtBjRbDd{DH%W^Ab0b=v;Y}cCN-T5hBP|K^7%JAqsALu=q0%59< zhnzHA#Qznm00Kw?jf<;B7JV7US;dL2C4h(@=Dp0va)`aa{}A}y+YY-;tDK5jn*Kuf zbwY~?wH|zD4W8m|$vX3Fj|oG4Na;OAB7p4NDyLw_4wurzlYY2=+-DaeRw8wNcwEE# zH?-83S^J4p+Lb-Ch-g+8mzz_Hak;e#1BFQ_PfvOoR0|?zg zl^2|nQzJKjnts)ZgB7hq=bpL=2Q+h3sF(&J&4kVgF7WiL^%aq8-uFX3$4U!!;n-Vg zm@&tE86Y;JS)`p-DXso8<^4!cBsG1olvgc@MxBeHzM_!(OV$e>L%hn_!pcE-tkX znp|9d-YRSwJ;VF+(@xSobS}W<>-fs`uj@Y(&qp{EC(s0Wr+T0q$DI>rWxy8R$T0_f zN#CmLtp@S^GrsxswK64Gm5Hj=hUjaTNdXruPY{2r_pqvt^NCTmg#aufYQqb$agBc}N_WaQYgTO58<8!vr-+%(G-F+ZZ#L2zg&I!lWFy<^m)38wgC{0 z-HcOpu<6iWZS<5uNR+Dowlsh$M86=O%NZB}e zzE<8+L%~jH{<i z-N?$hcIp_1=1nD(_IwYA6RNws&+zkeVBqPLEf+y20XFYHFD@qI8H=*=<1pg(&mq-s zJH2F7mQ^nGEv^5C6O0R4d5f1b$UrTIJBBM8N##*I-E<-! z0yS(;h*?kv-82Y)-GmoL_0n=DZ`^2|6YCrcSXB6fW$Xg4aM`sVBsttwPGJQl}f979%jF)@)h3%`4=+9vmMOWp;h$uWr$p!Y^vb*kt z5~Hni$z61M;|*nB>n*WPgZG0)I`*p1BzAEs4G7=zh<&#-m4$|Th{TyEu7uWFcOOu9 zQcY1XAT$mZU-#9q?rG{f%+=I}!z*ne4?QhIEm1b8HIF77n##%@S3xecJT9ZgJVm)egtABMxAlkMmnrr=;ecRC~ zg<1`NCo0?`rZmNWFN+}5nvufF`TPO@nlm?BTMT@??&=qaMzvClMs3GIx$uf(5}+_l zZgzckc2;VvM|qAEv3iI^Dhb%p5nWAHPi^`8^=dMllhTw;LxmJg;zqNEzuJNn9p0T{ zFCHkZQexaC+Tbc?6|30TzgsE;G8Shmx)8I2TIZef?$PK1P8=JY>?Vm7AEL0;-7k42 z)lbJOJz`ld{n*_2W%t(hekHqx_YKDxsY&M}<1q#~x6bG!s4$Q`#1j+DP)9e))EBK6sn=6n~N1E~C6dff-`sE{x~y z)`$3Wm~V_-mEp~IOgv*L)$eq24^75{lMs6JJy2$dsrJ{h>q)*JbqA2f;hDtt0YgZ$ z!m%a=PZ6)tqKW8}=i}Pw*Y49>oGlZv3HnV1*QsbVeNGRiciEbfQ!$6pEVMCY%-d;j zJAHyus-Zw!+O(|afam+(u9(s7o#4P*hipUQJ4zhh*`?#z_?3_3ca0X>H{m{yh75&% z;9eVhfGVLgJ+Z4H&C>fRq)e%`Tf#v(g5EtJrdcaoA4+}oul>bvYPCewxU)c#rIJT) z-PZQh*iI|O_M>7=KN*s zTwH`*??vwn^nz@rE@f@ap0}|ZGt?xV-l1NV>XTJHs3nDXJ=*$eytKIZD2e@1{6c%; zI(eDK_JZH$Eja;NILA?&7|;@TeFf`G=uFTFmHu_MCMCIVsS)GT>F{o42WQ0JV#hGB z%xy+Vs7N$qB(cCqqEanAF|PA4F3hIEGLS7I~mj> zicr&eGiO>~|LTHEBDBQj?JOBLxhhQbt)U^?_sp~6pNiBK+;09prIZCEws_0K3^O-U z6pLE6gJObbl)ImqMx@ke&7r_Mk8h(j=hvhEM9lqu7@KCWzzaCw=|86`B2<(?hbHb! zYf4>N(A;aQv)_SE4;nuHXbbj8p9cc2+g@{+?ADS6wbaw1uiLv|r!DRhEEP+X-8Wi_ z4!V?N3ndrLBonD~_%mr`p;Qk;je=%3G#Fct2M0D^(R@xaT$qBWo5afMa{%8y&1Q1R zgw=Cz$Dzx$2y-^1fCX65v)h)X7}po0I`cKiX&G(E{`E}B4Sf0HG)+a{kT#tA_1TQP z+Kgc0jG$JcK#vQb3)^gP^;AsDRLkQ0B+WK2-ZC0j({Cyqs1H7vg@=V#Ib0T_OLp_F z@TX4ET97;9oRi=WGz>e&Tc?-PXoK_HN~?McfxXrY;%g|oVY)rWbBR=c5m+(!HA;sOl#NuM$jfb) zAj|2JT_#)G^fkB5lxQ?%>8m>rs;&s6x}^v&)!G&)Ngq_~;NJ%j6>v;)j@u(PqnNva z;DQxo*VD56-TN-y{xqH!6lcBja@s?}JKW2!loo&wG!$i~%_nvIA``a>OT7q8nfG7+ zT>Qe>YLT+$=GS&l?H(I7Zn7f*6oa%ix|_RSJyujK-Wf>C_hHZ{n#vOf?anL+f@0tB z)lob~7VO=MP^vZrzY8$=GkDdE2cf%Q)C@@kK?$qWuAN=D)*{rAv$r;lvVz#nhf)XOF(#{CO;eI=KDln~uUcb#?|G9G-q z%b0iC2@%buWksZrJr2rN;zZVn?mn=Nd=sAv!1)eyGwR##b=_|~!K1^}S=pBjREe$S zb1#*kK%`MVmeM4rr<&A(kz!JTk{xi}?5XKw+XkiKlSq=UYL8F9s=Uurn1p8<`8B{E zIrF%G|DFFj78xxCFN*Ifh>X;oLd8hKKRurQQVch{%Dp^2l@_rS9WhWqXqcvyMiF6r zQJH`ZCnS+x&7A5=ZB6Nm_#XMR&EJ`XKgJy7;^*l6PPua3UL?kyI|blxMG?0@ zjXp5uAuC@)q(+nzIWZj_h4&5jpU|wo(Pmz6P}Eaui(=3>pxH}ozS170@|Q2trVDp| zL43#t%Gs~#>d^-?5-WC#wV>(lZqxo{lA4}-+@%b$U+$c)_~bWzJvlbt@hSCsk~;h1 zs>}!#Iw0)mfILN!!}QyI{6%|jZrqX`jb~k~LGzkoQ`GW_UhFG#{Qe7Nuc#m*uCf7n zuOSwA?HrTfMiZUnaqxTNi4=!#bf7^)dIP#bs&@y2&7U7XahghIbIdd1nvSB{i`F#K z+dEHBGT5UV7yk^2YduPne6Rvsrd%(dT0*4FCSU8DWu0YuR2xB6=ZRf6Xs;<~-+@%t zg#1n$A|M_0?=wD^yFTn$yYX*hoC*zPQ|Gr*(B`+wx@L^?dwF797x=qYTk$x5$$8N$ z{`7-~v5F+B`RP=9tl+XZdTdb#>wetzs2pMSs8G|kr+T|Y;oA(*-2N;3@htoCaFK1gr& zuk^F6`F%Xowsqm*gVMZ(X+!y;Un@I5#stv@Bul<CkaS*2u8OCFH4hU zHoFG%HX_k}{F_2*Dau&iK*6Sa%5BG(b?h=_k2?Lk@mt+VNG8e>_v}VFdeoP{lRu$~ zAxXgs^|NH8JX$YW4hb(K3noBLyK!-c;wwQ^QG8O5^Zj@J#2o!*7`-wmrcrp}7x@nY zOyaRGg4s>oeix{7RjE|FWir@VT%uH>1DcYXYRGn-&GV~z-pqD<1>OA4E&Tdr8MfRz z?X{Yw5W~&Tq!>T44La)7M{mR36dK4z2^Och#G4)6Mf7G8lc{%xd4)?E@Y>e;>a-P0 zf$c$40IhgCbX0#W_bAd&@os)Ljm1~@@)zgc#bpzDAXwk#rcSqf@UecMiMSTzIRz#G z0tX&9klLahZEj+GXYRa}IV*8z)5+m(3(6$;{#Wm>1x-K-w-m*N#AZb9Dti`#3{1l{ z?N1#j$C8F*8dYNyq1&)q*@;?xNWNEsW@}h|+DSvL7In?8xmS_p^pn$VhC9{yE$m~^ zg@l?>dHLDMT|G5jG1Co_@dPZhP>baruRNbkZl9>+(8Hg8CBG%3@a+5vm@f?bg*DPpI zvZVwL@pO2Ut9M5mE}3^{Jn2)xf5msu8WHUUQ!WgmIt34JK%1+i6jhatS%QAlWkh4; zKMDNB(&h;Jp%~uOX6f{9Kron%m-j(VI_S%C@kF_Nup> zxU~UHIyC#@h(*U?Z)nadTWceLq#^=svj-7WE2z<1CD zF)P0%nA(MHwEr)a-q+3qOASZ4JR2L+ON@23Qno2%li8(lj&H4%{URQ7ywQ|`#jD1B zj*i-xMu zv)tQ+%IQ6Hl`*cF;_2|0;cMzlNX~f%3ZjZEpi(VeMS(Be;~*@S2A1FYcSX}Kqo>vZ zcrt>46T?K^VF&w#aWU;|%GEhUds+?pIW#)z*uwAPo(;G*=FNTknRl5xR0F#f{&-Z_ zg1_t)d!@UWG_9d2rR6Nv4jJBr5-s1?_J% zxCY#bpzkX+sFN(h&@i*S#Cy3}Y?w<>ONz%gWVac4FkMXky1AAKR5Og$v%gN%5$Gc_1PKoYcb2p$Y&mY?RGtR7+*{YQ41l!7Wzf?5a!dR z_4#T__E5!zVa;#4rJ8fI_od}QQTt_q$h%(~+9_rGKh(IhGUz8lD?G9OeWUz-YANX2 zn03pYKbZtd6sS7HVJ&#lqWsx3#Z|&`&gu8vEgOpeL)u%vMH#43yL5MVr=);1LzlFu zAYBrQgbdAqG)RZijeyeKHFQWzhx81k#L#hG+S)_HxJwb@3Lv!p`z=P3Gzk zB*^&j5*ucj_xt_#5;Efeoz{$9fCLgO!?FHz>h(oBJm-dz*by@q7mN*6L6|)e$>Y;J z^qB3P>?#Ajf6wu@d;$Xu@iGrT_ikEz9_f6B&2`HF!I-8YJz16ybzhx|AH%iOnhshK z|9aYMVok|BnEuTJ5rzR6{Kik(66&{H{1rsi-WLR55MJ6pf_@dQGNW z%;ic|&UxVKttE{0)6jg#QsA{cyY11ri_93Q84Z6=+YWe>TF!f1nUIz)1aB&X-$+gK-lIrpr7C%~P?_cKzniOLP&T+i(FND- z4>#=kHUD6awO05G1yz&x0&RiBwlb|7w4tW($C1#fdf=1cXn9rW5dW#hY;*)`CAxCi z9^<9#+`E0wybyX?dE1O8+&pnB$1!z#VhFZqp6_F#p$cNFhmx}hU$&7*I# zz^NtGFw_1v$FlR4XdxCCMEld9Gt)%Ym*==x4?;+smcQWp*4`#z zNy}5wM3azUh*}nCz+eLvhKvW^-Dr_|=&w-UpN3@*H~WyYC-(xAfqFf9*+AdvDj}Zf zfON7^Uso5KreVSf8l(aI*Porj;rNCIt(qQo(txdlN!Y(_!HqebhIqB_ELhV`J3JP^ zO1%RN22x)9(UiWAL~-PD;jbSjOSNYp;0#52e(XJ>%kw20LV^29&0HT4%BkQ$eNd$W zq3G>>$zh+OCsC8}8_yHpW$}ZmOrQ~;kdiG8=p1{ll`AGrqpYJ=q+c)YJedmTufjHN zkA{V^y5qKc((RU2n#7SpPAwJUWj1~AvU$|eR&YpaLwR~P5d`Cev&Tv{F$;g~kF!C$ zVYJztHj2pSI6J8&pgvaOXTn6ptQ+!$3=&OMxT52XlukK>TyGU}p`s-?f20K{ipj;| zHD`-f1_Bvy#$W{!c{)@LiTIq4YyV^x>TA%uet)TG*?6gOb#ApgWYdZbF}*jl`ZeDa z64LB~%T^3?zDSr}sxf{cIMQI1N%&8~Bc20{DjRR2DBX27t>CxKajp>>5{%oQ$8n#0 zOy7}&D7`Hl*CIj}L6suRmH8uryj{=!Ee=Zo0(K%Lg0bv>3FGYP^U$MOJRlO%Sa6bo zQ8VKquNJaq;_P;lK}e%601lmZXl>NSM|+RYg&h%roXx41EFwkO z-;}R|J{lcC#BMSEZB}Dh!5F&aD3dWarIKqMqJ5hYK6hOf8f|6^XSW%!o7}KTN zo}I}^C$cZ$DLtu*2R!Bsf3O`tT^SDBcr}S7mlLJ(2i=q-gNFarx5=4;QVo_DHxLMA zSfRpMa82fZeyOwtvkuPRpP;7c0ngi=Zz>zKQv18Ysk5=VG*cMloiDNGvkI77Y<uvp&{~`&Ujm;d#ik>BnzH zZe3qakP_$Pf%kNw-^HS4=nn%Ua^LHitBPRndSuKR2XP+#=p6Y%!-B!G=l4V*osYx= z+4q^AjOfMb7wqO-JBA=D>1rLD?y+6wx5I7R#$1c`R5{&Wo7FY@GZgTo$~0iHI&g=x zA`gx|M^EhR4+jHc_mo3deJAAs3AYuuLIDbF(}g%%G*iuMbl|(oCdRXfI;E)UC{qOo zE*}eqb*CEi2kp4tlCwYN*TW~GHK`rEzJ5-#3l^X1w@-e7@6)d|)i*v}n|zE`%!!&c zo1**XhK-d=3JkISd1ZA)BLQsn&2A5u(ZzExwS`Aj46TXt)X$XypSG&}(-8Lug0PYd zYv`d5ndG^(K^L3t{Jb&M{x2z&h#09|%)@zXU(aO{7U8eXBu_9{y44ky<@$$3CiPc!Z{(ALoIjfX z{?_%PHKbTU;!t8~riXT%^R|EO?8KoH;o0H0A$wgdz<8I($p4+N(){M8p4w||w99w9 z>oPLuVIk$=kn?_a1K56ez#Wn-oGzH-Jl{Z08`?ertR9H8 zp{0jVbUzCH9pIEtGdYR$ng8uD2zzC&6p5XH#zRFi*{tw#*LjbRV7s5)^2gs?W`M

F=21(*!qxJ-o~qimEzHmP^|c`fpPG{9gNLPN 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

b~d-$Pj~>i0N+ZVBA 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¬jm;SdKzJ3>>xQ2uueP-R;Oth`H@Tup-|Q| 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 Nz2&jP7>hGM{|{8ked+)J literal 0 HcmV?d00001 diff --git a/docs/static/img/web-subscribe.png b/docs/static/img/web-subscribe.png index f60a865844580d11258c9a6ac8d4e6cc9d727fa4..50db6763e427eb94d848d9f9deb6958cceb8d1b7 100644 GIT binary patch literal 300865 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Ü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 b!MXe!~=o#KPPyFt~ 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∈=)zMuGKG~Ey!`!A!p3$e9Z9FYP!9# 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

HT=0ZO(Fyy95lq3%0uhR-EXz^#n;W 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 uuPV-8pGrs}PL<;c$ diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md new file mode 100644 index 00000000..65284543 --- /dev/null +++ b/docs/subscribe/desktop.md @@ -0,0 +1,12 @@ +# Using the web app as an installed PWA + +While ntfy doesn't have a built desktop app, it is built as a progressive web app and can be installed. + +This is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. +[caniuse reference](https://caniuse.com/web-app-manifest) + + diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index 5c2672f0..a563f8b0 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -1,7 +1,41 @@ # Subscribe from the Web UI -You can use the Web UI to subscribe to topics as well. If you do, and you keep the website open, **notifications will -pop up as desktop notifications**. Simply type in the topic name and click the *Subscribe* button. The browser will -keep a connection open and listen for incoming notifications. + +You can use the Web UI to subscribe to topics as well. Simply type in the topic name and click the *Subscribe* button. + +While subscribing, you have the option to enable desktop notifications, as well as background notifications. When you +enable them for the first time, you will be prompted to allow notifications on your browser. + +- **Sound only** + + If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title + will show the number of new notifications. + +- **Browser Notifications** + + This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will + appear as a system notification. If you don't see these, check that your browser is allowed to show notifications + (for example in System Settings on macOS). + + If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave + it running. + +- **Background Notifications** + + This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some + cases you may need to keep your browser open. + + + | Browser | Platform | Browser Running | Browser Not Running | Notes | + | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | + | Chrome | Desktop | ✅ | ❌ | | + | Firefox | Desktop | ✅ | ❌ | | + | Edge | Desktop | ✅ | ❌ | | + | Opera | Desktop | ✅ | ❌ | | + | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | + | Chrome | Android | ✅ | ✅ | | + | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | + + (Browsers below 1% usage not shown, look at the Push API link for more info) To learn how to send messages, check out the [publishing page](../publish.md). @@ -11,17 +45,16 @@ To learn how to send messages, check out the [publishing page](../publish.md). -To keep receiving desktop notifications from ntfy, you need to keep the website open. What I do, and what I highly recommend, -is to pin the tab so that it's always open, but sort of out of the way: - -
- ![pinned](../static/img/web-pin.png){ width=500 } -
Pin web app to move it out of the way
-
- If topic reservations are enabled, you can claim ownership over topics and define access to it:
+ +You can set your default choice for new subscriptions (for example synced account subscriptions and the default toggle state) +in the settings page: + +
+ +
diff --git a/mkdocs.yml b/mkdocs.yml index 4a7db366..76d39299 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -82,6 +82,7 @@ nav: - "Subscribing": - "From your phone": subscribe/phone.md - "From the Web app": subscribe/web.md + - "From the Desktop": subscribe/desktop.md - "From the CLI": subscribe/cli.md - "Using the API": subscribe/api.md - "Self-hosting": diff --git a/server/config.go b/server/config.go index f7c1813d..d5c87672 100644 --- a/server/config.go +++ b/server/config.go @@ -233,8 +233,10 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", + WebPushEnabled: false, WebPushPrivateKey: "", WebPushPublicKey: "", WebPushSubscriptionsFile: "", + WebPushEmailAddress: "", } } diff --git a/server/server.go b/server/server.go index cba74280..72e9c19a 100644 --- a/server/server.go +++ b/server/server.go @@ -77,7 +77,7 @@ var ( rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - webPushPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push$`) + webPushSubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/subscribe$`) webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) @@ -535,7 +535,7 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPost && webPushPathRegex.MatchString(r.URL.Path) { + } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) @@ -985,7 +985,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { return } - failedCount := 0 totalCount := len(subscriptions) wg := &sync.WaitGroup{} @@ -1029,12 +1028,11 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { jsonPayload, err := json.Marshal(payload) if err != nil { - failedCount++ logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") return } - _, err = webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, @@ -1044,26 +1042,29 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { }) if err != nil { - failedCount++ logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - // probably need to handle different codes differently, - // but for now just expire the subscription on any error err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) if err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } + + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") + + err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return } }(i, xi) } - - ctx = log.Context{"topic": m.Topic, "message_id": m.ID, "failed_count": failedCount, "total_count": totalCount} - - if failedCount > 0 { - logvm(v, m).Fields(ctx).Warn("Unable to publish web push messages to %d of %d endpoints", failedCount, totalCount) - } else { - logvm(v, m).Fields(ctx).Debug("Published %d web push messages successfully", totalCount) - } } func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { diff --git a/server/server.yml b/server/server.yml index ecb89994..e747e264 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,7 +40,7 @@ # Enable web push # -# Run ntfy web-push-keys to generate the keys +# Run ntfy web-push generate-keys to generate the keys # # web-push-enabled: true # web-push-public-key: "" diff --git a/server/server_test.go b/server/server_test.go index b9f2912d..f264d096 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/SherClockHolmes/webpush-go" "github.com/stretchr/testify/require" "heckel.io/ntfy/log" "heckel.io/ntfy/util" @@ -2604,14 +2605,35 @@ func newTestConfig(t *testing.T) *Config { return conf } -func newTestConfigWithAuthFile(t *testing.T) *Config { - conf := newTestConfig(t) +func configureAuth(t *testing.T, conf *Config) *Config { conf.AuthFile = filepath.Join(t.TempDir(), "user.db") conf.AuthStartupQueries = "pragma journal_mode = WAL; pragma synchronous = normal; pragma temp_store = memory;" conf.AuthBcryptCost = bcrypt.MinCost // This speeds up tests a lot return conf } +func newTestConfigWithAuthFile(t *testing.T) *Config { + conf := newTestConfig(t) + conf = configureAuth(t, conf) + return conf +} + +func newTestConfigWithWebPush(t *testing.T) *Config { + conf := newTestConfig(t) + + privateKey, publicKey, err := webpush.GenerateVAPIDKeys() + if err != nil { + t.Fatal(err) + } + + conf.WebPushEnabled = true + conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") + conf.WebPushEmailAddress = "testing@example.com" + conf.WebPushPrivateKey = privateKey + conf.WebPushPublicKey = publicKey + return conf +} + func newTestServer(t *testing.T, config *Config) *Server { server, err := New(config) if err != nil { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go new file mode 100644 index 00000000..80f37e3e --- /dev/null +++ b/server/server_web_push_test.go @@ -0,0 +1,212 @@ +package server + +import ( + "fmt" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + + "github.com/SherClockHolmes/webpush-go" + "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" +) + +var ( + webPushSubscribePayloadExample = `{ + "browser_subscription":{ + "endpoint": "https://example.com/webpush", + "keys": { + "p256dh": "p256dh-key", + "auth": "auth-key" + } + } + }` +) + +func TestServer_WebPush_GetConfig(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "GET", "/v1/web-push-config", "", nil) + require.Equal(t, 200, response.Code) + require.Equal(t, fmt.Sprintf(`{"public_key":"%s"}`, s.config.WebPushPublicKey)+"\n", response.Body.String()) +} + +func TestServer_WebPush_TopicSubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, 1) + require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") + require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") + require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") + require.Equal(t, subs[0].Username, "") +} + +func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) + require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, 1) + require.Equal(t, subs[0].Username, "ben") +} + +func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 403, response.Code) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 1) + + unsubscribe := `{"endpoint":"https://example.com/webpush"}` + response = request(t, s, "POST", "/test-topic/web-push/unsubscribe", unsubscribe, nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { + config := configureAuth(t, newTestConfigWithWebPush(t)) + config.AuthDefault = user.PermissionDenyAll + s := newTestServer(t, config) + + require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) + require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) + + response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 1) + + request(t, s, "DELETE", "/v1/account", `{"password":"ben"}`, map[string]string{ + "Authorization": util.BasicAuth("ben", "ben"), + }) + // should've been deleted with the account + requireSubscriptionCount(t, s, "test-topic", 0) +} + +func TestServer_WebPush_Publish(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + require.Equal(t, "/push-receive", r.URL.Path) + require.Equal(t, "high", r.Header.Get("Urgency")) + require.Equal(t, "", r.Header.Get("Topic")) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + + request(t, s, "PUT", "/test-topic", "web push test", nil) + + waitFor(t, func() bool { + return received.Load() + }) +} + +func TestServer_WebPush_PublishExpire(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + // Gone + w.WriteHeader(410) + w.Write([]byte(``)) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic-abc", upstreamServer.URL+"/push-receive") + + requireSubscriptionCount(t, s, "test-topic", 1) + requireSubscriptionCount(t, s, "test-topic-abc", 1) + + request(t, s, "PUT", "/test-topic", "web push test", nil) + + waitFor(t, func() bool { + return received.Load() + }) + + // Receiving the 410 should've caused the publisher to expire all subscriptions on the endpoint + + requireSubscriptionCount(t, s, "test-topic", 0) + requireSubscriptionCount(t, s, "test-topic-abc", 0) +} + +func addSubscription(t *testing.T, s *Server, topic string, url string) { + err := s.webPushSubscriptionStore.AddSubscription("test-topic", "", webPushSubscribePayload{ + BrowserSubscription: webpush.Subscription{ + Endpoint: url, + Keys: webpush.Keys{ + // connected to a local test VAPID key, not a leak! + Auth: "kSC3T8aN1JCQxxPdrFLrZg", + P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", + }, + }, + }) + if err != nil { + t.Fatal(err) + } +} + +func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { + subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + if err != nil { + t.Fatal(err) + } + + require.Len(t, subs, expectedLength) +} diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 0f879373..bf09bef3 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,7 +20,7 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; -export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push`; +export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; From f94bb1aa3034e0530dee8ea15f7addcc2d1f48b1 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 29 May 2023 22:09:40 +0200 Subject: [PATCH 029/305] Improve web push docs --- README.md | 1 + docs/config.md | 49 +++++++++++++++++++++++++++++++++++++++ docs/subscribe/desktop.md | 16 +++++++++---- docs/subscribe/web.md | 42 +++++++++++++++++---------------- 4 files changed, 84 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index cebf55be..c8f79c88 100644 --- a/README.md +++ b/README.md @@ -178,3 +178,4 @@ Third party libraries and resources: * [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/docs/config.md b/docs/config.md index 3aeab614..7e1ef6c6 100644 --- a/docs/config.md +++ b/docs/config.md @@ -789,6 +789,55 @@ Note that the self-hosted server literally sends the message `New message` for e may be `Some other message`. This is so that if iOS cannot talk to the self-hosted server (in time, or at all), it'll show `New message` as a popup. +## Web Push notifications +[Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) ([RFC8030](https://datatracker.ietf.org/doc/html/rfc8030)) +is supported, but needs a little configuration to enable it. Since there is no central server (other than the browser's push endpoint), +you have to configure your own [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keys. These identify the publisher, +and are used to encrypt the messages before sending them to the push endpoint. + +Limitations: + +- Like foreground browser notifications, background push notifications require the web app to be served over HTTPS. A _valid_ + certificate is required, as service workers will not run on origins with untrusted certificates. + +- Web Push is only supported for the same server. You cannot use subscribe to web push on a topic on another server. This + is due to a limitation of the Push API, which doesn't allow multiple push servers for the same origin. + +To configure VAPID keys, first generate them: + +```sh +$ ntfy web-push generate-keys +Keys generated. + +VAPID Public Key: +AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 + +VAPID Private Key: +AA2BB1234567890abcdefzxcvbnm1234567890 +``` + +Then copy the generated values into your `server.yml` or use the corresponding environment variables or command line arguments: + +```yaml +web-push-enabled: true +web-push-public-key: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +web-push-private-key: AA2BB1234567890abcdefzxcvbnm1234567890 +web-push-subscriptions-file: /var/cache/ntfy/subscriptions.db +web-push-email-address: sysadmin@example.com + +# don't forget to set the required base-url for web push notifications +base-url: https://ntfy.example.com +``` + +The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push +gateway returns an error (e.g. 410 Gone when a user has unsubscribed). + +The web app refreshes subscriptions on start and regularly on an interval, but this file should be persisted across restarts. If the subscription +file is deleted or lost, any web apps that aren't open will not receive new web push notifications until you open then. + +Changing your public/private keypair is NOT recommended. Browsers only allow one server identity (public key) per origin, and +if you change them the clients will not be able to subscribe via web push until the user manually clears the notification permission. + ## Tiers ntfy supports associating users to pre-defined tiers. Tiers can be used to grant users higher limits, such as daily message limits, attachment size, or make it possible for users to reserve topics. If [payments are enabled](#payments), diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md index 65284543..b13d11a4 100644 --- a/docs/subscribe/desktop.md +++ b/docs/subscribe/desktop.md @@ -1,9 +1,17 @@ -# Using the web app as an installed PWA +# Using the web app as an installed web app + +While ntfy doesn't have a native desktop app, it is built as a [progressive web app](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) +and thus can be installed on both desktop and mobile. + +This gives it its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux) own window, +push notifications, and an app badge with the unread notification count. + +To receive background notifications, either the browser or the installed web app must be open. + +Web app installation is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. +Look at the [compatibility table](https://caniuse.com/web-app-manifest) for more info. -While ntfy doesn't have a built desktop app, it is built as a progressive web app and can be installed. -This is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. -[caniuse reference](https://caniuse.com/web-app-manifest)
diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index a563f8b0..e073bec9 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -7,35 +7,37 @@ enable them for the first time, you will be prompted to allow notifications on y - **Sound only** - If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title - will show the number of new notifications. + If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title + will show the number of new notifications. - **Browser Notifications** - This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will - appear as a system notification. If you don't see these, check that your browser is allowed to show notifications - (for example in System Settings on macOS). + This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will + appear as a system notification. If you don't see these, check that your browser is allowed to show notifications + (for example in System Settings on macOS). - If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave - it running. + If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave + it running. - **Background Notifications** - This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some - cases you may need to keep your browser open. + This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some + cases you may need to keep your browser open. + Background notifications are only supported on the same server hosting the web app. You cannot use another server, + but can instead subscribe on the other server itself. - | Browser | Platform | Browser Running | Browser Not Running | Notes | - | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | - | Chrome | Desktop | ✅ | ❌ | | - | Firefox | Desktop | ✅ | ❌ | | - | Edge | Desktop | ✅ | ❌ | | - | Opera | Desktop | ✅ | ❌ | | - | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | - | Chrome | Android | ✅ | ✅ | | - | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | - - (Browsers below 1% usage not shown, look at the Push API link for more info) + | Browser | Platform | Browser Running | Browser Not Running | Restrictions | + | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | + | Chrome | Desktop | ✅ | ❌ | | + | Firefox | Desktop | ✅ | ❌ | | + | Edge | Desktop | ✅ | ❌ | | + | Opera | Desktop | ✅ | ❌ | | + | Safari | Desktop | ✅ | ✅ | requires Safari 16.1, macOS 13 Ventura | + | Chrome | Android | ✅ | ✅ | | + | Safari | iOS | ⚠️ | ⚠️ | requires iOS 16.4, only when app is added to homescreen | + + (Browsers below 1% usage not shown, look at the [Push API](https://caniuse.com/push-api) for more info) To learn how to send messages, check out the [publishing page](../publish.md). From 7b23158e0a2580f67aee6c98281917abbcedeae4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 13:50:24 -0400 Subject: [PATCH 030/305] Cosmetic changes --- server/message_cache.go | 4 +-- server/server.go | 17 ++++-------- server/web_push.go | 59 +++++++++++++++++++---------------------- 3 files changed, 35 insertions(+), 45 deletions(-) diff --git a/server/message_cache.go b/server/message_cache.go index 1d7302af..140271fe 100644 --- a/server/message_cache.go +++ b/server/message_cache.go @@ -270,7 +270,7 @@ func newSqliteCache(filename, startupQueries string, cacheDuration time.Duration if err != nil { return nil, err } - if err := setupDB(db, startupQueries, cacheDuration); err != nil { + if err := setupMessagesDB(db, startupQueries, cacheDuration); err != nil { return nil, err } var queue *util.BatchingQueue[*message] @@ -749,7 +749,7 @@ func (c *messageCache) Close() error { return c.db.Close() } -func setupDB(db *sql.DB, startupQueries string, cacheDuration time.Duration) error { +func setupMessagesDB(db *sql.DB, startupQueries string, cacheDuration time.Duration) error { // Run startup queries if startupQueries != "" { if _, err := db.Exec(startupQueries); err != nil { diff --git a/server/server.go b/server/server.go index 72e9c19a..ebb8b70e 100644 --- a/server/server.go +++ b/server/server.go @@ -55,7 +55,7 @@ type Server struct { messagesHistory []int64 // Last n values of the messages counter, used to determine rate userManager *user.Manager // Might be nil! messageCache *messageCache // Database that stores the messages - webPushSubscriptionStore *webPushSubscriptionStore // Database that stores web push subscriptions + webPushSubscriptionStore *webPushStore // Database that stores web push subscriptions fileCache *fileCache // File system based cache that stores attachments stripe stripeAPI // Stripe API, can be replaced with a mock priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) @@ -227,12 +227,12 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } -func createWebPushSubscriptionStore(conf *Config) (*webPushSubscriptionStore, error) { +func createWebPushSubscriptionStore(conf *Config) (*webPushStore, error) { if !conf.WebPushEnabled { return nil, nil } - return newWebPushSubscriptionStore(conf.WebPushSubscriptionsFile) + return newWebPushStore(conf.WebPushSubscriptionsFile) } // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts @@ -979,18 +979,12 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) - if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") return } - - totalCount := len(subscriptions) - - wg := &sync.WaitGroup{} - wg.Add(totalCount) - - ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": totalCount} + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} // Importing the emojis in the service worker would add unnecessary complexity, // simply do it here for web push notifications instead @@ -1017,7 +1011,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { - defer wg.Done() ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} payload := &webPushPayload{ diff --git a/server/web_push.go b/server/web_push.go index fe9f5149..2fafb2a8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -6,11 +6,10 @@ import ( _ "github.com/mattn/go-sqlite3" // SQLite driver ) -// Messages cache const ( createWebPushSubscriptionsTableQuery = ` BEGIN; - CREATE TABLE IF NOT EXISTS web_push_subscriptions ( + CREATE TABLE IF NOT EXISTS subscriptions ( id INTEGER PRIMARY KEY AUTOINCREMENT, topic TEXT NOT NULL, username TEXT, @@ -19,60 +18,58 @@ const ( key_p256dh TEXT NOT NULL, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); - CREATE INDEX IF NOT EXISTS idx_topic ON web_push_subscriptions (topic); - CREATE INDEX IF NOT EXISTS idx_endpoint ON web_push_subscriptions (endpoint); - CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON web_push_subscriptions (topic, endpoint); + CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); + CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); + CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); COMMIT; ` insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO web_push_subscriptions (topic, username, endpoint, key_auth, key_p256dh) - VALUES (?, ?, ?, ?, ?); + INSERT OR REPLACE INTO subscriptions (topic, username, endpoint, key_auth, key_p256dh) + VALUES (?, ?, ?, ?, ?) ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM web_push_subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM web_push_subscriptions WHERE username = ?` - deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM web_push_subscriptions WHERE topic = ? AND endpoint = ?` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM subscriptions WHERE username = ?` + deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM web_push_subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM web_push_subscriptions` + selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) -type webPushSubscriptionStore struct { +type webPushStore struct { db *sql.DB } -func newWebPushSubscriptionStore(filename string) (*webPushSubscriptionStore, error) { +func newWebPushStore(filename string) (*webPushStore, error) { db, err := sql.Open("sqlite3", filename) if err != nil { return nil, err } - if err := setupSubscriptionDb(db); err != nil { + if err := setupSubscriptionsDB(db); err != nil { return nil, err } - webPushSubscriptionStore := &webPushSubscriptionStore{ + return &webPushStore{ db: db, - } - return webPushSubscriptionStore, nil + }, nil } -func setupSubscriptionDb(db *sql.DB) error { - // If 'messages' table does not exist, this must be a new database +func setupSubscriptionsDB(db *sql.DB) error { + // If 'subscriptions' table does not exist, this must be a new database rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) if err != nil { - return setupNewSubscriptionDb(db) + return setupNewSubscriptionsDB(db) } - rowsMC.Close() - return nil + return rowsMC.Close() } -func setupNewSubscriptionDb(db *sql.DB) error { +func setupNewSubscriptionsDB(db *sql.DB) error { if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { return err } return nil } -func (c *webPushSubscriptionStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { +func (c *webPushStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, @@ -84,7 +81,7 @@ func (c *webPushSubscriptionStore) AddSubscription(topic string, username string return err } -func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint string) error { +func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByTopicAndEndpointQuery, topic, @@ -93,14 +90,14 @@ func (c *webPushSubscriptionStore) RemoveSubscription(topic string, endpoint str return err } -func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - data := []webPushSubscription{} + var data []webPushSubscription for rows.Next() { i := webPushSubscription{} err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) @@ -112,7 +109,7 @@ func (c *webPushSubscriptionStore) GetSubscriptionsForTopic(topic string) (subsc return data, nil } -func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error { +func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, endpoint, @@ -120,13 +117,13 @@ func (c *webPushSubscriptionStore) ExpireWebPushEndpoint(endpoint string) error return err } -func (c *webPushSubscriptionStore) ExpireWebPushForUser(username string) error { +func (c *webPushStore) ExpireWebPushForUser(username string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByUsernameQuery, username, ) return err } -func (c *webPushSubscriptionStore) Close() error { +func (c *webPushStore) Close() error { return c.db.Close() } From 7f3e4b5f473d66a70453fd1d6eb9ff3b01537716 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 13:56:10 -0400 Subject: [PATCH 031/305] Move stuff to server_web_push.go --- server/server.go | 229 +++++++-------------------------- server/server_account.go | 4 +- server/server_web_push.go | 142 ++++++++++++++++++++ server/server_web_push_test.go | 8 +- 4 files changed, 193 insertions(+), 190 deletions(-) create mode 100644 server/server_web_push.go diff --git a/server/server.go b/server/server.go index ebb8b70e..35d6f47d 100644 --- a/server/server.go +++ b/server/server.go @@ -33,35 +33,33 @@ import ( "heckel.io/ntfy/log" "heckel.io/ntfy/user" "heckel.io/ntfy/util" - - "github.com/SherClockHolmes/webpush-go" ) // Server is the main server, providing the UI and API for ntfy type Server struct { - config *Config - httpServer *http.Server - httpsServer *http.Server - httpMetricsServer *http.Server - httpProfileServer *http.Server - unixListener net.Listener - smtpServer *smtp.Server - smtpServerBackend *smtpBackend - smtpSender mailer - topics map[string]*topic - visitors map[string]*visitor // ip: or user: - firebaseClient *firebaseClient - messages int64 // Total number of messages (persisted if messageCache enabled) - messagesHistory []int64 // Last n values of the messages counter, used to determine rate - userManager *user.Manager // Might be nil! - messageCache *messageCache // Database that stores the messages - webPushSubscriptionStore *webPushStore // Database that stores web push subscriptions - fileCache *fileCache // File system based cache that stores attachments - stripe stripeAPI // Stripe API, can be replaced with a mock - priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) - metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set - closeChan chan bool - mu sync.RWMutex + config *Config + httpServer *http.Server + httpsServer *http.Server + httpMetricsServer *http.Server + httpProfileServer *http.Server + unixListener net.Listener + smtpServer *smtp.Server + smtpServerBackend *smtpBackend + smtpSender mailer + topics map[string]*topic + visitors map[string]*visitor // ip: or user: + firebaseClient *firebaseClient + messages int64 // Total number of messages (persisted if messageCache enabled) + messagesHistory []int64 // Last n values of the messages counter, used to determine rate + userManager *user.Manager // Might be nil! + messageCache *messageCache // Database that stores the messages + webPush *webPushStore // Database that stores web push subscriptions + fileCache *fileCache // File system based cache that stores attachments + stripe stripeAPI // Stripe API, can be replaced with a mock + priceCache *util.LookupCache[map[string]int64] // Stripe price ID -> price as cents (USD implied!) + metricsHandler http.Handler // Handles /metrics if enable-metrics set, and listen-metrics-http not set + closeChan chan bool + mu sync.RWMutex } // handleFunc extends the normal http.HandlerFunc to be able to easily return errors @@ -160,9 +158,12 @@ func New(conf *Config) (*Server, error) { if err != nil { return nil, err } - webPushSubscriptionStore, err := createWebPushSubscriptionStore(conf) - if err != nil { - return nil, err + var webPush *webPushStore + if conf.WebPushEnabled { + webPush, err = newWebPushStore(conf.WebPushSubscriptionsFile) + if err != nil { + return nil, err + } } topics, err := messageCache.Topics() if err != nil { @@ -201,18 +202,18 @@ func New(conf *Config) (*Server, error) { firebaseClient = newFirebaseClient(sender, auther) } s := &Server{ - config: conf, - messageCache: messageCache, - webPushSubscriptionStore: webPushSubscriptionStore, - fileCache: fileCache, - firebaseClient: firebaseClient, - smtpSender: mailer, - topics: topics, - userManager: userManager, - messages: messages, - messagesHistory: []int64{messages}, - visitors: make(map[string]*visitor), - stripe: stripe, + config: conf, + messageCache: messageCache, + webPush: webPush, + fileCache: fileCache, + firebaseClient: firebaseClient, + smtpSender: mailer, + topics: topics, + userManager: userManager, + messages: messages, + messagesHistory: []int64{messages}, + visitors: make(map[string]*visitor), + stripe: stripe, } s.priceCache = util.NewLookupCache(s.fetchStripePrices, conf.StripePriceCacheDuration) return s, nil @@ -227,14 +228,6 @@ func createMessageCache(conf *Config) (*messageCache, error) { return newMemCache() } -func createWebPushSubscriptionStore(conf *Config) (*webPushStore, error) { - if !conf.WebPushEnabled { - return nil, nil - } - - return newWebPushStore(conf.WebPushSubscriptionsFile) -} - // Run executes the main server. It listens on HTTP (+ HTTPS, if configured), and starts // a manager go routine to print stats and prune messages. func (s *Server) Run() error { @@ -364,8 +357,8 @@ func (s *Server) closeDatabases() { s.userManager.Close() } s.messageCache.Close() - if s.webPushSubscriptionStore != nil { - s.webPushSubscriptionStore.Close() + if s.webPush != nil { + s.webPush.Close() } } @@ -536,9 +529,9 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { - return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushSubscribe)))(w, r, v) + return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushSubscribe)))(w, r, v) } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { - return s.limitRequestsWithTopic(s.authorizeTopicRead(s.ensureWebPushEnabled(s.handleTopicWebPushUnsubscribe)))(w, r, v) + return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushUnsubscribe)))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } @@ -578,55 +571,6 @@ func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, return s.writeJSON(w, response) } -func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var username string - u := v.User() - if u != nil { - username = u.Name - } - - var sub webPushSubscribePayload - err := json.NewDecoder(r.Body).Decode(&sub) - - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - - err = s.webPushSubscriptionStore.AddSubscription(topic.ID, username, sub) - if err != nil { - return err - } - - return s.writeJSON(w, newSuccessResponse()) -} - -func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - var payload webPushUnsubscribePayload - - err := json.NewDecoder(r.Body).Decode(&payload) - - if err != nil { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - - err = s.webPushSubscriptionStore.RemoveSubscription(topic.ID, payload.Endpoint) - if err != nil { - return err - } - - return s.writeJSON(w, newSuccessResponse()) -} - func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -977,89 +921,6 @@ func (s *Server) forwardPollRequest(v *visitor, m *message) { } } -func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { - subscriptions, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic(m.Topic) - if err != nil { - logvm(v, m).Err(err).Warn("Unable to publish web push messages") - return - } - - ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} - - // Importing the emojis in the service worker would add unnecessary complexity, - // simply do it here for web push notifications instead - var titleWithDefault string - var formattedTitle string - - emojis, _, err := toEmojis(m.Tags) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - if m.Title == "" { - titleWithDefault = m.Topic - } else { - titleWithDefault = m.Title - } - - if len(emojis) > 0 { - formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) - } else { - formattedTitle = titleWithDefault - } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} - - payload := &webPushPayload{ - SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), - Message: *m, - FormattedTitle: formattedTitle, - } - jsonPayload, err := json.Marshal(payload) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ - Subscriber: s.config.WebPushEmailAddress, - VAPIDPublicKey: s.config.WebPushPublicKey, - VAPIDPrivateKey: s.config.WebPushPrivateKey, - // deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, - }) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - - err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - - return - } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - - err = s.webPushSubscriptionStore.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - - return - } - }(i, xi) - } -} - func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, firebase bool, email, call string, unifiedpush bool, err *errHTTP) { cache = readBoolParam(r, true, "x-cache", "cache") firebase = readBoolParam(r, true, "x-firebase", "firebase") diff --git a/server/server_account.go b/server/server_account.go index dbadb81a..0336f816 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -170,8 +170,8 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * if _, err := s.userManager.Authenticate(u.Name, req.Password); err != nil { return errHTTPBadRequestIncorrectPasswordConfirmation } - if s.webPushSubscriptionStore != nil { - err := s.webPushSubscriptionStore.ExpireWebPushForUser(u.Name) + if s.webPush != nil { + err := s.webPush.ExpireWebPushForUser(u.Name) if err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) diff --git a/server/server_web_push.go b/server/server_web_push.go new file mode 100644 index 00000000..d3f669cf --- /dev/null +++ b/server/server_web_push.go @@ -0,0 +1,142 @@ +package server + +import ( + "encoding/json" + "fmt" + "github.com/SherClockHolmes/webpush-go" + "heckel.io/ntfy/log" + "net/http" + "strings" +) + +func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { + var username string + u := v.User() + if u != nil { + username = u.Name + } + + var sub webPushSubscribePayload + err := json.NewDecoder(r.Body).Decode(&sub) + + if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPush.AddSubscription(topic.ID, username, sub) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { + var payload webPushUnsubscribePayload + + err := json.NewDecoder(r.Body).Decode(&payload) + + if err != nil { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + + topic, err := fromContext[*topic](r, contextTopic) + if err != nil { + return err + } + + err = s.webPush.RemoveSubscription(topic.ID, payload.Endpoint) + if err != nil { + return err + } + + return s.writeJSON(w, newSuccessResponse()) +} + +func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { + subscriptions, err := s.webPush.GetSubscriptionsForTopic(m.Topic) + if err != nil { + logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return + } + + ctx := log.Context{"topic": m.Topic, "message_id": m.ID, "total_count": len(subscriptions)} + + // Importing the emojis in the service worker would add unnecessary complexity, + // simply do it here for web push notifications instead + var titleWithDefault string + var formattedTitle string + + emojis, _, err := toEmojis(m.Tags) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + if m.Title == "" { + titleWithDefault = m.Topic + } else { + titleWithDefault = m.Title + } + + if len(emojis) > 0 { + formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) + } else { + formattedTitle = titleWithDefault + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + + payload := &webPushPayload{ + SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), + Message: *m, + FormattedTitle: formattedTitle, + } + jsonPayload, err := json.Marshal(payload) + + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + return + } + + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") + + err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") + + err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) + if err != nil { + logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") + } + + return + } + }(i, xi) + } +} diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 80f37e3e..3b8863d4 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -41,7 +41,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -68,7 +68,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -187,7 +187,7 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { } func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPushSubscriptionStore.AddSubscription("test-topic", "", webPushSubscribePayload{ + err := s.webPush.AddSubscription("test-topic", "", webPushSubscribePayload{ BrowserSubscription: webpush.Subscription{ Endpoint: url, Keys: webpush.Keys{ @@ -203,7 +203,7 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPushSubscriptionStore.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } From 9e0687e142e213e08007f36fd49b4ad9f8ef5f35 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:23:03 -0400 Subject: [PATCH 032/305] Random tiny changes --- go.mod | 2 +- server/server_account.go | 4 +--- server/server_test.go | 10 ++-------- server/server_web_push.go | 34 +++++++--------------------------- server/server_web_push_test.go | 17 +++++++---------- server/types.go | 4 ++-- server/web_push.go | 24 ++++++++++++------------ 7 files changed, 32 insertions(+), 63 deletions(-) diff --git a/go.mod b/go.mod index dda58c9b..96ffff98 100644 --- a/go.mod +++ b/go.mod @@ -27,6 +27,7 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.11.0 + github.com/SherClockHolmes/webpush-go v1.2.0 github.com/prometheus/client_golang v1.15.1 github.com/stripe/stripe-go/v74 v74.21.0 ) @@ -39,7 +40,6 @@ require ( cloud.google.com/go/longrunning v0.5.0 // indirect github.com/AlekSi/pointer v1.2.0 // indirect github.com/MicahParks/keyfunc v1.9.0 // indirect - github.com/SherClockHolmes/webpush-go v1.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/server/server_account.go b/server/server_account.go index 0336f816..b42496db 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -171,9 +171,7 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * return errHTTPBadRequestIncorrectPasswordConfirmation } if s.webPush != nil { - err := s.webPush.ExpireWebPushForUser(u.Name) - - if err != nil { + if err := s.webPush.RemoveByUserID(u.ID); err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) } } diff --git a/server/server_test.go b/server/server_test.go index f264d096..76f83eea 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2620,12 +2620,8 @@ func newTestConfigWithAuthFile(t *testing.T) *Config { func newTestConfigWithWebPush(t *testing.T) *Config { conf := newTestConfig(t) - privateKey, publicKey, err := webpush.GenerateVAPIDKeys() - if err != nil { - t.Fatal(err) - } - + require.Nil(t, err) conf.WebPushEnabled = true conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") conf.WebPushEmailAddress = "testing@example.com" @@ -2636,9 +2632,7 @@ func newTestConfigWithWebPush(t *testing.T) *Config { func newTestServer(t *testing.T, config *Config) *Server { server, err := New(config) - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) return server } diff --git a/server/server_web_push.go b/server/server_web_push.go index d3f669cf..d8a25e61 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -10,15 +10,8 @@ import ( ) func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var username string - u := v.User() - if u != nil { - username = u.Name - } - var sub webPushSubscribePayload err := json.NewDecoder(r.Body).Decode(&sub) - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } @@ -27,12 +20,9 @@ func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Requ if err != nil { return err } - - err = s.webPush.AddSubscription(topic.ID, username, sub) - if err != nil { + if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), sub); err != nil { return err } - return s.writeJSON(w, newSuccessResponse()) } @@ -59,7 +49,7 @@ func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Re } func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { - subscriptions, err := s.webPush.GetSubscriptionsForTopic(m.Topic) + subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") return @@ -69,21 +59,17 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { // Importing the emojis in the service worker would add unnecessary complexity, // simply do it here for web push notifications instead - var titleWithDefault string - var formattedTitle string - + var titleWithDefault, formattedTitle string emojis, _, err := toEmojis(m.Tags) if err != nil { logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") return } - if m.Title == "" { titleWithDefault = m.Topic } else { titleWithDefault = m.Title } - if len(emojis) > 0 { formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) } else { @@ -92,7 +78,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.Username, "topic": m.Topic, "message_id": m.ID} + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} payload := &webPushPayload{ SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), @@ -110,31 +96,25 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, - // deliverability on iOS isn't great with lower urgency values, + // Deliverability on iOS isn't great with lower urgency values, // and thus we can't really map lower ntfy priorities to lower urgency values Urgency: webpush.UrgencyHigh, }) if err != nil { logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - - err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } - return } // May want to handle at least 429 differently, but for now treat all errors the same if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - - err = s.webPush.ExpireWebPushEndpoint(sub.BrowserSubscription.Endpoint) - if err != nil { + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") } - return } }(i, xi) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 3b8863d4..56936529 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -5,6 +5,7 @@ import ( "io" "net/http" "net/http/httptest" + "strings" "sync/atomic" "testing" @@ -41,7 +42,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } @@ -50,7 +51,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") - require.Equal(t, subs[0].Username, "") + require.Equal(t, subs[0].UserID, "") } func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { @@ -64,17 +65,13 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) - require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } - + subs, err := s.webPush.SubscriptionsForTopic("test-topic") + require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].Username, "ben") + require.True(t, strings.HasPrefix(subs[0].UserID, "u_")) } func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { @@ -203,7 +200,7 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPush.GetSubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic("test-topic") if err != nil { t.Fatal(err) } diff --git a/server/types.go b/server/types.go index 6eed5eef..bac4a478 100644 --- a/server/types.go +++ b/server/types.go @@ -41,7 +41,7 @@ type message struct { PollID string `json:"poll_id,omitempty"` Encoding string `json:"encoding,omitempty"` // empty for raw UTF-8, or "base64" for encoded bytes Sender netip.Addr `json:"-"` // IP address of uploader, used for rate limiting - User string `json:"-"` // Username of the uploader, used to associated attachments + User string `json:"-"` // UserID of the uploader, used to associated attachments } func (m *message) Context() log.Context { @@ -476,7 +476,7 @@ type webPushPayload struct { type webPushSubscription struct { BrowserSubscription webpush.Subscription - Username string + UserID string } type webPushSubscribePayload struct { diff --git a/server/web_push.go b/server/web_push.go index 2fafb2a8..8969af68 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -12,7 +12,7 @@ const ( CREATE TABLE IF NOT EXISTS subscriptions ( id INTEGER PRIMARY KEY AUTOINCREMENT, topic TEXT NOT NULL, - username TEXT, + user_id TEXT, endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, @@ -24,14 +24,14 @@ const ( COMMIT; ` insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO subscriptions (topic, username, endpoint, key_auth, key_p256dh) + INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) ` deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUsernameQuery = `DELETE FROM subscriptions WHERE username = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, username FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) @@ -69,11 +69,11 @@ func setupNewSubscriptionsDB(db *sql.DB) error { return nil } -func (c *webPushStore) AddSubscription(topic string, username string, subscription webPushSubscribePayload) error { +func (c *webPushStore) AddSubscription(topic string, userID string, subscription webPushSubscribePayload) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, - username, + userID, subscription.BrowserSubscription.Endpoint, subscription.BrowserSubscription.Keys.Auth, subscription.BrowserSubscription.Keys.P256dh, @@ -90,7 +90,7 @@ func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { return err } -func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err @@ -100,7 +100,7 @@ func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []w var data []webPushSubscription for rows.Next() { i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.Username) + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.UserID) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func (c *webPushStore) GetSubscriptionsForTopic(topic string) (subscriptions []w return data, nil } -func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { +func (c *webPushStore) RemoveByEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, endpoint, @@ -117,10 +117,10 @@ func (c *webPushStore) ExpireWebPushEndpoint(endpoint string) error { return err } -func (c *webPushStore) ExpireWebPushForUser(username string) error { +func (c *webPushStore) RemoveByUserID(userID string) error { _, err := c.db.Exec( - deleteWebPushSubscriptionByUsernameQuery, - username, + deleteWebPushSubscriptionByUserIDQuery, + userID, ) return err } From e8139ad655da9d60a263ecb2a1c8cafa46b25a81 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:42:17 -0400 Subject: [PATCH 033/305] Move web-push-config endpoint to config.js --- server/server.go | 13 ++----------- server/server_web_push_test.go | 9 --------- server/types.go | 6 ++---- web/public/config.js | 2 ++ web/src/app/Api.js | 24 +++--------------------- web/src/app/Notifier.js | 13 ++----------- web/src/app/utils.js | 1 - 7 files changed, 11 insertions(+), 57 deletions(-) diff --git a/server/server.go b/server/server.go index 35d6f47d..12ccee5c 100644 --- a/server/server.go +++ b/server/server.go @@ -104,7 +104,6 @@ var ( apiAccountBillingSubscriptionCheckoutSuccessTemplate = "/v1/account/billing/subscription/success/{CHECKOUT_SESSION_ID}" apiAccountBillingSubscriptionCheckoutSuccessRegex = regexp.MustCompile(`/v1/account/billing/subscription/success/(.+)$`) apiAccountReservationSingleRegex = regexp.MustCompile(`/v1/account/reservation/([-_A-Za-z0-9]{1,64})$`) - apiWebPushConfig = "/v1/web-push-config" staticRegex = regexp.MustCompile(`^/static/.+`) docsRegex = regexp.MustCompile(`^/docs(|/.*)$`) fileRegex = regexp.MustCompile(`^/file/([-_A-Za-z0-9]{1,64})(?:\.[A-Za-z0-9]{1,16})?$`) @@ -496,8 +495,6 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { return s.ensurePaymentsEnabled(s.handleBillingTiersGet)(w, r, v) - } else if r.Method == http.MethodGet && r.URL.Path == apiWebPushConfig { - return s.ensureWebPushEnabled(s.handleAPIWebPushConfig)(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == matrixPushPath { return s.handleMatrixDiscovery(w) } else if r.Method == http.MethodGet && r.URL.Path == metricsPath && s.metricsHandler != nil { @@ -563,14 +560,6 @@ func (s *Server) handleTopicAuth(w http.ResponseWriter, _ *http.Request, _ *visi return s.writeJSON(w, newSuccessResponse()) } -func (s *Server) handleAPIWebPushConfig(w http.ResponseWriter, _ *http.Request, _ *visitor) error { - response := &apiWebPushConfigResponse{ - PublicKey: s.config.WebPushPublicKey, - } - - return s.writeJSON(w, response) -} - func (s *Server) handleHealth(w http.ResponseWriter, _ *http.Request, _ *visitor) error { response := &apiHealthResponse{ Healthy: true, @@ -588,7 +577,9 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi EnableCalls: s.config.TwilioAccount != "", EnableEmails: s.config.SMTPSenderFrom != "", EnableReservations: s.config.EnableReservations, + EnableWebPush: s.config.WebPushEnabled, BillingContact: s.config.BillingContact, + WebPushPublicKey: s.config.WebPushPublicKey, DisallowedTopics: s.config.DisallowedTopics, } b, err := json.MarshalIndent(response, "", " ") diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 56936529..e6dda63e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -1,7 +1,6 @@ package server import ( - "fmt" "io" "net/http" "net/http/httptest" @@ -27,14 +26,6 @@ var ( }` ) -func TestServer_WebPush_GetConfig(t *testing.T) { - s := newTestServer(t, newTestConfigWithWebPush(t)) - - response := request(t, s, "GET", "/v1/web-push-config", "", nil) - require.Equal(t, 200, response.Code) - require.Equal(t, fmt.Sprintf(`{"public_key":"%s"}`, s.config.WebPushPublicKey)+"\n", response.Body.String()) -} - func TestServer_WebPush_TopicSubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) diff --git a/server/types.go b/server/types.go index bac4a478..9f436152 100644 --- a/server/types.go +++ b/server/types.go @@ -398,14 +398,12 @@ type apiConfigResponse struct { EnableCalls bool `json:"enable_calls"` EnableEmails bool `json:"enable_emails"` EnableReservations bool `json:"enable_reservations"` + EnableWebPush bool `json:"enable_web_push"` BillingContact string `json:"billing_contact"` + WebPushPublicKey string `json:"web_push_public_key"` DisallowedTopics []string `json:"disallowed_topics"` } -type apiWebPushConfigResponse struct { - PublicKey string `json:"public_key"` -} - type apiAccountBillingPrices struct { Month int64 `json:"month"` Year int64 `json:"year"` diff --git a/web/public/config.js b/web/public/config.js index 7bcad73f..63bc97bd 100644 --- a/web/public/config.js +++ b/web/public/config.js @@ -14,6 +14,8 @@ var config = { enable_reservations: true, enable_emails: true, enable_calls: true, + enable_web_push: true, billing_contact: "", + web_push_public_key: "", disallowed_topics: ["docs", "static", "file", "app", "account", "settings", "signup", "login", "v1"], }; diff --git a/web/src/app/Api.js b/web/src/app/Api.js index f731e61f..c3effb92 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -8,7 +8,6 @@ import { topicUrlJsonPollWithSince, topicUrlWebPushSubscribe, topicUrlWebPushUnsubscribe, - webPushConfigUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -117,27 +116,8 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - /** - * @returns {Promise<{ public_key: string } | undefined>} - */ - async getWebPushConfig(baseUrl) { - const response = await fetch(webPushConfigUrl(baseUrl)); - - if (response.ok) { - return response.json(); - } - - if (response.status === 404) { - // web push is not enabled - return undefined; - } - - throw new Error(`Unexpected server response ${response.status}`); - } - async subscribeWebPush(baseUrl, topic, browserSubscription) { const user = await userManager.get(baseUrl); - const url = topicUrlWebPushSubscribe(baseUrl, topic); console.log(`[Api] Sending Web Push Subscription ${url}`); @@ -163,7 +143,9 @@ class Api { const response = await fetch(url, { method: "POST", headers: maybeWithAuth({}, user), - body: JSON.stringify({ endpoint: subscription.webPushEndpoint }), + body: JSON.stringify({ + endpoint: subscription.webPushEndpoint + }), }); if (response.ok) { diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index a005f460..c9e3c182 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -53,7 +53,7 @@ class Notifier { } async subscribeWebPush(baseUrl, topic) { - if (!this.supported() || !this.pushSupported()) { + if (!this.supported() || !this.pushSupported() || !config.enable_web_push) { return {}; } @@ -71,21 +71,12 @@ class Notifier { } try { - const webPushConfig = await api.getWebPushConfig(baseUrl); - - if (!webPushConfig) { - console.log("[Notifier.subscribeWebPush] Web push not configured on server"); - } - const browserSubscription = await registration.pushManager.subscribe({ userVisibleOnly: true, - applicationServerKey: urlB64ToUint8Array(webPushConfig.public_key), + applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), }); - await api.subscribeWebPush(baseUrl, topic, browserSubscription); - console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - return browserSubscription; } catch (e) { console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); diff --git a/web/src/app/utils.js b/web/src/app/utils.js index bf09bef3..69132b2e 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -23,7 +23,6 @@ export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/aut export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); -export const webPushConfigUrl = (baseUrl) => `${baseUrl}/v1/web-push-config`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; From 20c7650e515df910d6cc15202f16f12ba841a107 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 30 May 2023 14:53:23 -0400 Subject: [PATCH 034/305] server.yml update --- server/server.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/server.yml b/server/server.yml index e747e264..6b921bbd 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,13 +40,13 @@ # Enable web push # -# Run ntfy web-push generate-keys to generate the keys +# Run "ntfy web-push generate-keys" to generate the keys # -# web-push-enabled: true -# web-push-public-key: "" -# web-push-private-key: "" -# web-push-subscriptions-file: "" -# web-push-email-address: "" +# web-push-enabled: false +# web-push-public-key: +# web-push-private-key: +# web-push-subscriptions-file: +# web-push-email-address: # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. From 44913c1668dda3ab80039d72933db60c0e97bf77 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:02:04 +0200 Subject: [PATCH 035/305] Replace if err-nil-Fatal check with require.Nil --- server/server_web_push_test.go | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index e6dda63e..0c8526b1 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -34,9 +34,7 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, `{"success":true}`+"\n", response.Body.String()) subs, err := s.webPush.SubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) require.Len(t, subs, 1) require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") @@ -185,16 +183,12 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { }, }, }) - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { subs, err := s.webPush.SubscriptionsForTopic("test-topic") - if err != nil { - t.Fatal(err) - } + require.Nil(t, err) require.Len(t, subs, expectedLength) } From 4648f83669d97aee30d71b6a4c7d0e75a85e337d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:27:32 +0200 Subject: [PATCH 036/305] Format emojis in the service worker directly --- docs/develop.md | 9 ++++-- server/server_web_push.go | 23 --------------- server/smtp_sender.go | 24 ++++++++++++++++ server/types.go | 1 - server/util.go | 24 ---------------- web/public/sw.js | 16 ++++++----- web/src/app/Api.js | 2 +- web/src/app/Notifier.js | 3 +- web/src/app/emojisMapped.js | 4 +++ web/src/app/notificationUtils.js | 35 ++++++++++++++++++++++ web/src/app/utils.js | 43 ++-------------------------- web/src/components/Notifications.jsx | 13 ++------- 12 files changed, 85 insertions(+), 112 deletions(-) create mode 100644 web/src/app/emojisMapped.js create mode 100644 web/src/app/notificationUtils.js diff --git a/docs/develop.md b/docs/develop.md index 09215d9a..49ed8dbc 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -261,8 +261,11 @@ Reference: 0 { - formattedTitle = fmt.Sprintf("%s %s", strings.Join(emojis[:], " "), titleWithDefault) - } else { - formattedTitle = titleWithDefault - } - for i, xi := range subscriptions { go func(i int, sub webPushSubscription) { ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} @@ -83,7 +61,6 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { payload := &webPushPayload{ SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), Message: *m, - FormattedTitle: formattedTitle, } jsonPayload, err := json.Marshal(payload) diff --git a/server/smtp_sender.go b/server/smtp_sender.go index 759ef396..9093687e 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -1,6 +1,8 @@ package server import ( + _ "embed" // required by go:embed + "encoding/json" "fmt" "mime" "net" @@ -128,3 +130,25 @@ This message was sent by {ip} at {time} via {topicURL}` body = strings.ReplaceAll(body, "{ip}", senderIP) return body, nil } + +var ( + //go:embed "mailer_emoji_map.json" + emojisJSON string +) + +func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { + var emojiMap map[string]string + if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { + return nil, nil, err + } + tagsOut = make([]string, 0) + emojisOut = make([]string, 0) + for _, t := range tags { + if emoji, ok := emojiMap[t]; ok { + emojisOut = append(emojisOut, emoji) + } else { + tagsOut = append(tagsOut, t) + } + } + return +} diff --git a/server/types.go b/server/types.go index 9f436152..1c124c7a 100644 --- a/server/types.go +++ b/server/types.go @@ -469,7 +469,6 @@ type apiStripeSubscriptionDeletedEvent struct { type webPushPayload struct { SubscriptionID string `json:"subscription_id"` Message message `json:"message"` - FormattedTitle string `json:"formatted_title"` } type webPushSubscription struct { diff --git a/server/util.go b/server/util.go index be724c76..03eb8661 100644 --- a/server/util.go +++ b/server/util.go @@ -2,8 +2,6 @@ package server import ( "context" - _ "embed" // required by go:embed - "encoding/json" "fmt" "heckel.io/ntfy/util" "io" @@ -135,25 +133,3 @@ func maybeDecodeHeader(header string) string { } return decoded } - -var ( - //go:embed "mailer_emoji_map.json" - emojisJSON string -) - -func toEmojis(tags []string) (emojisOut []string, tagsOut []string, err error) { - var emojiMap map[string]string - if err = json.Unmarshal([]byte(emojisJSON), &emojiMap); err != nil { - return nil, nil, err - } - tagsOut = make([]string, 0) - emojisOut = make([]string, 0) - for _, t := range tags { - if emoji, ok := emojiMap[t]; ok { - emojisOut = append(emojisOut, emoji) - } else { - tagsOut = append(tagsOut, t) - } - } - return -} diff --git a/web/public/sw.js b/web/public/sw.js index 43a2e3b3..70ad9a7d 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -4,6 +4,7 @@ import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; import { getDbAsync } from "../src/app/getDb"; +import { formatMessage, formatTitleWithDefault } from "../src/app/notificationUtils"; // See WebPushWorker, this is to play a sound on supported browsers, // if the app is in the foreground @@ -27,11 +28,11 @@ self.addEventListener("pushsubscriptionchange", (event) => { }); self.addEventListener("push", (event) => { - console.log("[ServiceWorker] Received Web Push Event", { event }); // server/types.go webPushPayload const data = event.data.json(); + console.log("[ServiceWorker] Received Web Push Event", { event, data }); - const { formatted_title: formattedTitle, subscription_id: subscriptionId, message } = data; + const { subscription_id: subscriptionId, message } = data; broadcastChannel.postMessage(message); event.waitUntil( @@ -53,9 +54,9 @@ self.addEventListener("push", (event) => { db.subscriptions.update(subscriptionId, { last: message.id, }), - self.registration.showNotification(formattedTitle, { + self.registration.showNotification(formatTitleWithDefault(message, message.topic), { tag: subscriptionId, - body: message.message, + body: formatMessage(message), icon: "/static/images/ntfy.png", data, }), @@ -106,6 +107,7 @@ precacheAndRoute(self.__WB_MANIFEST); cleanupOutdatedCaches(); // to allow work offline -registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); - -registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); +if (import.meta.env.MODE !== "development") { + registerRoute(new NavigationRoute(createHandlerBoundToURL("/"))); + registerRoute(({ url }) => url.pathname === "/config.js", new NetworkFirst()); +} diff --git a/web/src/app/Api.js b/web/src/app/Api.js index c3effb92..377dcccb 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -144,7 +144,7 @@ class Api { method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: subscription.webPushEndpoint + endpoint: subscription.webPushEndpoint, }), }); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index c9e3c182..0ace7b39 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -1,4 +1,5 @@ -import { formatMessage, formatTitleWithDefault, openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; +import { openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array } from "./utils"; +import { formatMessage, formatTitleWithDefault } from "./notificationUtils"; import prefs from "./Prefs"; import logo from "../img/ntfy.png"; import api from "./Api"; diff --git a/web/src/app/emojisMapped.js b/web/src/app/emojisMapped.js new file mode 100644 index 00000000..d823bbe0 --- /dev/null +++ b/web/src/app/emojisMapped.js @@ -0,0 +1,4 @@ +import { rawEmojis } from "./emojis"; + +// Format emojis (see emoji.js) +export default Object.fromEntries(rawEmojis.flatMap((emoji) => emoji.aliases.map((alias) => [alias, emoji.emoji]))); diff --git a/web/src/app/notificationUtils.js b/web/src/app/notificationUtils.js new file mode 100644 index 00000000..b385f481 --- /dev/null +++ b/web/src/app/notificationUtils.js @@ -0,0 +1,35 @@ +// This is a separate file since the other utils import `config.js`, which depends on `window` +// and cannot be used in the service worker + +import emojisMapped from "./emojisMapped"; + +const toEmojis = (tags) => { + if (!tags) return []; + return tags.filter((tag) => tag in emojisMapped).map((tag) => emojisMapped[tag]); +}; + +export const formatTitle = (m) => { + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.title}`; + } + return m.title; +}; + +export const formatTitleWithDefault = (m, fallback) => { + if (m.title) { + return formatTitle(m); + } + return fallback; +}; + +export const formatMessage = (m) => { + if (m.title) { + return m.message; + } + const emojiList = toEmojis(m.tags); + if (emojiList.length > 0) { + return `${emojiList.join(" ")} ${m.message}`; + } + return m.message; +}; diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 69132b2e..906a88a4 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -1,5 +1,4 @@ import { Base64 } from "js-base64"; -import { rawEmojis } from "./emojis"; import beep from "../sounds/beep.mp3"; import juntos from "../sounds/juntos.mp3"; import pristine from "../sounds/pristine.mp3"; @@ -8,6 +7,7 @@ import dadum from "../sounds/dadum.mp3"; import pop from "../sounds/pop.mp3"; import popSwoosh from "../sounds/pop-swoosh.mp3"; import config from "./config"; +import emojisMapped from "./emojisMapped"; export const tiersUrl = (baseUrl) => `${baseUrl}/v1/tiers`; export const shortUrl = (url) => url.replaceAll(/https?:\/\//g, ""); @@ -56,48 +56,9 @@ export const topicDisplayName = (subscription) => { return topicShortUrl(subscription.baseUrl, subscription.topic); }; -// Format emojis (see emoji.js) -const emojis = {}; -rawEmojis.forEach((emoji) => { - emoji.aliases.forEach((alias) => { - emojis[alias] = emoji.emoji; - }); -}); - -const toEmojis = (tags) => { - if (!tags) return []; - return tags.filter((tag) => tag in emojis).map((tag) => emojis[tag]); -}; - -export const formatTitle = (m) => { - const emojiList = toEmojis(m.tags); - if (emojiList.length > 0) { - return `${emojiList.join(" ")} ${m.title}`; - } - return m.title; -}; - -export const formatTitleWithDefault = (m, fallback) => { - if (m.title) { - return formatTitle(m); - } - return fallback; -}; - -export const formatMessage = (m) => { - if (m.title) { - return m.message; - } - const emojiList = toEmojis(m.tags); - if (emojiList.length > 0) { - return `${emojiList.join(" ")} ${m.message}`; - } - return m.message; -}; - export const unmatchedTags = (tags) => { if (!tags) return []; - return tags.filter((tag) => !(tag in emojis)); + return tags.filter((tag) => !(tag in emojisMapped)); }; export const encodeBase64 = (s) => Base64.encode(s); diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index 2faf2fd2..fe9fcc48 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -24,17 +24,8 @@ import { useLiveQuery } from "dexie-react-hooks"; import InfiniteScroll from "react-infinite-scroll-component"; import { Trans, useTranslation } from "react-i18next"; import { useOutletContext } from "react-router-dom"; -import { - formatBytes, - formatMessage, - formatShortDateTime, - formatTitle, - maybeAppendActionErrors, - openUrl, - shortUrl, - topicShortUrl, - unmatchedTags, -} from "../app/utils"; +import { formatBytes, formatShortDateTime, maybeAppendActionErrors, openUrl, shortUrl, topicShortUrl, unmatchedTags } from "../app/utils"; +import { formatMessage, formatTitle } from "../app/notificationUtils"; import { LightboxBackdrop, Paragraph, VerticallyCenteredContainer } from "./styles"; import subscriptionManager from "../app/SubscriptionManager"; import priority1 from "../img/priority-1.svg"; From 0c25425346a43b3f5f56d1293194d315afc46198 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:30:20 +0200 Subject: [PATCH 037/305] Use readJSONWithLimit for web push sub/unsub --- server/server_web_push.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index a465764e..bf5b92b9 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -9,8 +9,7 @@ import ( ) func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - var sub webPushSubscribePayload - err := json.NewDecoder(r.Body).Decode(&sub) + sub, err := readJSONWithLimit[webPushSubscribePayload](r.Body, jsonBodyBytesLimit, false) if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } @@ -19,17 +18,14 @@ func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Requ if err != nil { return err } - if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), sub); err != nil { + if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), *sub); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) } func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - var payload webPushUnsubscribePayload - - err := json.NewDecoder(r.Body).Decode(&payload) - + payload, err := readJSONWithLimit[webPushUnsubscribePayload](r.Body, jsonBodyBytesLimit, false) if err != nil { return errHTTPBadRequestWebPushSubscriptionInvalid } From 7aa3d8f59bab59bed6c14fb49ecf878e00b08f13 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 18:43:06 +0200 Subject: [PATCH 038/305] Hide web push toggles if disabled on server --- web/src/app/Notifier.js | 2 +- web/src/components/SubscribeDialog.jsx | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 0ace7b39..73bb51ac 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -115,7 +115,7 @@ class Notifier { } pushSupported() { - return "serviceWorker" in navigator && "PushManager" in window; + return config.enable_web_push && "serviceWorker" in navigator && "PushManager" in window; } /** diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 57281661..60b69863 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -103,6 +103,7 @@ const SubscribeDialog = (props) => { const browserNotificationsSupported = notifier.supported(); const pushNotificationsSupported = notifier.pushSupported(); const iosInstallRequired = notifier.iosSupportedButInstallRequired(); +const pushPossible = pushNotificationsSupported && iosInstallRequired; const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { if (backgroundNotificationsEnabled) { @@ -138,12 +139,14 @@ const SubscribePage = (props) => { const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); // default to on if notifications are already granted const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState( + pushPossible && props.webPushDefaultEnabled === "enabled" + ); const handleBrowserNotificationsChanged = async (e) => { if (e.target.checked && (await notifier.maybeRequestPermission())) { setBrowserNotificationsEnabled(true); - if (props.webPushDefaultEnabled === "enabled") { + if (pushPossible && props.webPushDefaultEnabled === "enabled") { setBackgroundNotificationsEnabled(true); } } else { From 4944e3ae4b89b6e593fae3dd454bff400c2c4446 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 31 May 2023 21:08:46 +0200 Subject: [PATCH 039/305] Remove webPushEndpoint from indexeddb Rely directly on getting it from the browser --- web/src/app/Api.js | 4 ++-- web/src/app/Notifier.js | 31 +++++++++++++++++++----------- web/src/app/SubscriptionManager.js | 25 ++++++------------------ 3 files changed, 28 insertions(+), 32 deletions(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 377dcccb..398f8088 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -134,7 +134,7 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async unsubscribeWebPush(subscription) { + async unsubscribeWebPush(subscription, browserSubscription) { const user = await userManager.get(subscription.baseUrl); const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); @@ -144,7 +144,7 @@ class Api { method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: subscription.webPushEndpoint, + endpoint: browserSubscription.endpoint, }), }); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 73bb51ac..47c2fa1a 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -47,9 +47,14 @@ class Notifier { async unsubscribeWebPush(subscription) { try { - await api.unsubscribeWebPush(subscription); + const pushManager = await this.pushManager(); + const browserSubscription = await pushManager.getSubscription(); + if (!browserSubscription) { + throw new Error("No browser subscription found"); + } + await api.unsubscribeWebPush(subscription, browserSubscription); } catch (e) { - console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); + console.error("[Notifier] Error unsubscribing from web push", e); } } @@ -64,21 +69,15 @@ class Notifier { return {}; } - const registration = await navigator.serviceWorker.getRegistration(); - - if (!registration) { - console.log("[Notifier.subscribeWebPush] Web push supported but no service worker registration found, skipping"); - return {}; - } - try { - const browserSubscription = await registration.pushManager.subscribe({ + const pushManager = await this.pushManager(); + const browserSubscription = await pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), }); + await api.subscribeWebPush(baseUrl, topic, browserSubscription); console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - return browserSubscription; } catch (e) { console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); } @@ -86,6 +85,16 @@ class Notifier { return {}; } + async pushManager() { + const registration = await navigator.serviceWorker.getRegistration(); + + if (!registration) { + throw new Error("No service worker registration found"); + } + + return registration.pushManager; + } + granted() { return this.supported() && Notification.permission === "granted"; } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index ae4bf49e..15958914 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -68,16 +68,12 @@ class SubscriptionManager { async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); - const webPushFields = opts.notificationType === "background" ? await notifier.subscribeWebPush(baseUrl, topic) : {}; + if (opts.notificationType === "background") { + await notifier.subscribeWebPush(baseUrl, topic); + } const existingSubscription = await this.get(id); if (existingSubscription) { - if (webPushFields.endpoint) { - await this.db.subscriptions.update(existingSubscription.id, { - webPushEndpoint: webPushFields.endpoint, - }); - } - return existingSubscription; } @@ -88,7 +84,6 @@ class SubscriptionManager { mutedUntil: 0, last: null, ...opts, - webPushEndpoint: webPushFields.endpoint, }; await this.db.subscriptions.put(subscription); @@ -139,7 +134,7 @@ class SubscriptionManager { await this.db.subscriptions.delete(subscription.id); await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); - if (subscription.webPushEndpoint) { + if (subscription.notificationType === NotificationType.BACKGROUND) { await notifier.unsubscribeWebPush(subscription); } } @@ -240,10 +235,7 @@ class SubscriptionManager { if (mutedUntil === 1) { await notifier.unsubscribeWebPush(subscription); } else { - const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - await this.db.subscriptions.update(subscriptionId, { - webPushEndpoint: webPushFields.endpoint, - }); + await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); } } } @@ -261,19 +253,14 @@ class SubscriptionManager { return; } - let { webPushEndpoint } = subscription; - if (oldNotificationType === "background") { await notifier.unsubscribeWebPush(subscription); - webPushEndpoint = undefined; } else if (newNotificationType === "background") { - const webPushFields = await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - webPushEndpoint = webPushFields.webPushEndpoint; + await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); } await this.db.subscriptions.update(subscription.id, { notificationType: newNotificationType, - webPushEndpoint, }); } From 47ad024ec786da91ece3e2050303326230387534 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 13:22:54 +0200 Subject: [PATCH 040/305] Simplify web push UX and updates - Use a single endpoint - Use a declarative web push sync hook. This thus handles all edge cases that had to be manually handled before: logout, login, account sync, etc. - Simplify UX: browser notifications are always enabled (unless denied), web push toggle only shows up if permissions are already granted. --- server/server.go | 27 +++--- server/server_web_push.go | 40 ++++----- server/server_web_push_test.go | 85 +++++++++--------- server/types.go | 12 ++- server/web_push.go | 38 ++++++--- web/public/static/langs/en.json | 9 +- web/src/app/Api.js | 36 ++------ web/src/app/ConnectionManager.js | 9 +- web/src/app/Notifier.js | 53 ++++-------- web/src/app/SubscriptionManager.js | 104 +++++------------------ web/src/app/WebPushWorker.js | 64 +++++++++++--- web/src/app/getDb.js | 2 +- web/src/app/utils.js | 3 +- web/src/components/Account.jsx | 2 - web/src/components/ActionBar.jsx | 2 - web/src/components/Navigation.jsx | 91 ++++++++++++-------- web/src/components/Preferences.jsx | 2 +- web/src/components/SubscribeDialog.jsx | 82 +++--------------- web/src/components/SubscriptionPopup.jsx | 51 +++-------- web/src/components/hooks.js | 9 +- 20 files changed, 294 insertions(+), 427 deletions(-) diff --git a/server/server.go b/server/server.go index 12ccee5c..a3170817 100644 --- a/server/server.go +++ b/server/server.go @@ -67,17 +67,15 @@ type handleFunc func(http.ResponseWriter, *http.Request, *visitor) error var ( // If changed, don't forget to update Android App and auth_sqlite.go - topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! - topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! - externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic - jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) - ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) - rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) - wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) - authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) - webPushSubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/subscribe$`) - webPushUnsubscribePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/web-push/unsubscribe$`) - publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) + topicRegex = regexp.MustCompile(`^[-_A-Za-z0-9]{1,64}$`) // No /! + topicPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}$`) // Regex must match JS & Android app! + externalTopicPathRegex = regexp.MustCompile(`^/[^/]+\.[^/]+/[-_A-Za-z0-9]{1,64}$`) // Extended topic path, for web-app, e.g. /example.com/mytopic + jsonPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/json$`) + ssePathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`) + rawPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`) + wsPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/ws$`) + authPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/auth$`) + publishPathRegex = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}/(publish|send|trigger)$`) webConfigPath = "/config.js" webManifestPath = "/manifest.webmanifest" @@ -96,6 +94,7 @@ var ( apiAccountSettingsPath = "/v1/account/settings" apiAccountSubscriptionPath = "/v1/account/subscription" apiAccountReservationPath = "/v1/account/reservation" + apiAccountWebPushPath = "/v1/account/web-push" apiAccountPhonePath = "/v1/account/phone" apiAccountPhoneVerifyPath = "/v1/account/phone/verify" apiAccountBillingPortalPath = "/v1/account/billing/portal" @@ -525,10 +524,8 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPost && webPushSubscribePathRegex.MatchString(r.URL.Path) { - return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushSubscribe)))(w, r, v) - } else if r.Method == http.MethodPost && webPushUnsubscribePathRegex.MatchString(r.URL.Path) { - return s.ensureWebPushEnabled(s.limitRequestsWithTopic(s.authorizeTopicRead(s.handleTopicWebPushUnsubscribe)))(w, r, v) + } else if r.Method == http.MethodPut && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } diff --git a/server/server_web_push.go b/server/server_web_push.go index bf5b92b9..fcf0dad6 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -3,40 +3,36 @@ package server import ( "encoding/json" "fmt" + "net/http" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" - "net/http" + "heckel.io/ntfy/user" ) -func (s *Server) handleTopicWebPushSubscribe(w http.ResponseWriter, r *http.Request, v *visitor) error { - sub, err := readJSONWithLimit[webPushSubscribePayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || sub.BrowserSubscription.Endpoint == "" || sub.BrowserSubscription.Keys.P256dh == "" || sub.BrowserSubscription.Keys.Auth == "" { +func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { + payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) + if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } - topic, err := fromContext[*topic](r, contextTopic) - if err != nil { - return err - } - if err = s.webPush.AddSubscription(topic.ID, v.MaybeUserID(), *sub); err != nil { - return err - } - return s.writeJSON(w, newSuccessResponse()) -} + u := v.User() -func (s *Server) handleTopicWebPushUnsubscribe(w http.ResponseWriter, r *http.Request, _ *visitor) error { - payload, err := readJSONWithLimit[webPushUnsubscribePayload](r.Body, jsonBodyBytesLimit, false) - if err != nil { - return errHTTPBadRequestWebPushSubscriptionInvalid - } - - topic, err := fromContext[*topic](r, contextTopic) + topics, err := s.topicsFromIDs(payload.Topics...) if err != nil { return err } - err = s.webPush.RemoveSubscription(topic.ID, payload.Endpoint) - if err != nil { + if s.userManager != nil { + for _, t := range topics { + if err := s.userManager.Authorize(u, t.ID, user.PermissionRead); err != nil { + logvr(v, r).With(t).Err(err).Debug("Access to topic %s not authorized", t.ID) + return errHTTPForbidden.With(t) + } + } + } + + if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { return err } diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 0c8526b1..75746918 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -1,6 +1,8 @@ package server import ( + "encoding/json" + "fmt" "io" "net/http" "net/http/httptest" @@ -14,22 +16,10 @@ import ( "heckel.io/ntfy/util" ) -var ( - webPushSubscribePayloadExample = `{ - "browser_subscription":{ - "endpoint": "https://example.com/webpush", - "keys": { - "p256dh": "p256dh-key", - "auth": "auth-key" - } - } - }` -) - -func TestServer_WebPush_TopicSubscribe(t *testing.T) { +func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -43,6 +33,19 @@ func TestServer_WebPush_TopicSubscribe(t *testing.T) { require.Equal(t, subs[0].UserID, "") } +func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + addSubscription(t, s, "test-topic", "https://example.com/webpush") + requireSubscriptionCount(t, s, "test-topic", 1) + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}), nil) + require.Equal(t, 200, response.Code) + require.Equal(t, `{"success":true}`+"\n", response.Body.String()) + + requireSubscriptionCount(t, s, "test-topic", 0) +} + func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { config := configureAuth(t, newTestConfigWithWebPush(t)) config.AuthDefault = user.PermissionDenyAll @@ -51,7 +54,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -68,38 +71,20 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) } -func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { - s := newTestServer(t, newTestConfigWithWebPush(t)) - - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, nil) - require.Equal(t, 200, response.Code) - require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - - requireSubscriptionCount(t, s, "test-topic", 1) - - unsubscribe := `{"endpoint":"https://example.com/webpush"}` - response = request(t, s, "POST", "/test-topic/web-push/unsubscribe", unsubscribe, nil) - require.Equal(t, 200, response.Code) - require.Equal(t, `{"success":true}`+"\n", response.Body.String()) - - requireSubscriptionCount(t, s, "test-topic", 0) -} - func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { config := configureAuth(t, newTestConfigWithWebPush(t)) - config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "POST", "/test-topic/web-push/subscribe", webPushSubscribePayloadExample, map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -172,15 +157,29 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { requireSubscriptionCount(t, s, "test-topic-abc", 0) } +func payloadForTopics(t *testing.T, topics []string) string { + topicsJson, err := json.Marshal(topics) + require.Nil(t, err) + + return fmt.Sprintf(`{ + "topics": %s, + "browser_subscription":{ + "endpoint": "https://example.com/webpush", + "keys": { + "p256dh": "p256dh-key", + "auth": "auth-key" + } + } + }`, topicsJson) +} + func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPush.AddSubscription("test-topic", "", webPushSubscribePayload{ - BrowserSubscription: webpush.Subscription{ - Endpoint: url, - Keys: webpush.Keys{ - // connected to a local test VAPID key, not a leak! - Auth: "kSC3T8aN1JCQxxPdrFLrZg", - P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", - }, + err := s.webPush.AddSubscription(topic, "", webpush.Subscription{ + Endpoint: url, + Keys: webpush.Keys{ + // connected to a local test VAPID key, not a leak! + Auth: "kSC3T8aN1JCQxxPdrFLrZg", + P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", }, }) require.Nil(t, err) diff --git a/server/types.go b/server/types.go index 1c124c7a..f1f15735 100644 --- a/server/types.go +++ b/server/types.go @@ -1,12 +1,13 @@ package server import ( - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" "net/http" "net/netip" "time" + "heckel.io/ntfy/log" + "heckel.io/ntfy/user" + "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -476,10 +477,7 @@ type webPushSubscription struct { UserID string } -type webPushSubscribePayload struct { +type webPushSubscriptionPayload struct { BrowserSubscription webpush.Subscription `json:"browser_subscription"` -} - -type webPushUnsubscribePayload struct { - Endpoint string `json:"endpoint"` + Topics []string `json:"topics"` } diff --git a/server/web_push.go b/server/web_push.go index 8969af68..c48920d8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -2,7 +2,9 @@ package server import ( "database/sql" + "fmt" + "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver ) @@ -69,23 +71,33 @@ func setupNewSubscriptionsDB(db *sql.DB) error { return nil } -func (c *webPushStore) AddSubscription(topic string, userID string, subscription webPushSubscribePayload) error { +func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { + fmt.Printf("AAA") + tx, err := c.db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + + if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { + return err + } + for _, topic := range topics { + if err := c.AddSubscription(topic, userID, subscription); err != nil { + return err + } + } + return tx.Commit() +} + +func (c *webPushStore) AddSubscription(topic string, userID string, subscription webpush.Subscription) error { _, err := c.db.Exec( insertWebPushSubscriptionQuery, topic, userID, - subscription.BrowserSubscription.Endpoint, - subscription.BrowserSubscription.Keys.Auth, - subscription.BrowserSubscription.Keys.P256dh, - ) - return err -} - -func (c *webPushStore) RemoveSubscription(topic string, endpoint string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByTopicAndEndpointQuery, - topic, - endpoint, + subscription.Endpoint, + subscription.Keys.Auth, + subscription.Keys.P256dh, ) return err } diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 53b8c3f5..2d58311a 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -52,6 +52,8 @@ "nav_button_connecting": "connecting", "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", + "alert_notification_permission_required_title": "Permission required", + "alert_notification_permission_required_description": "Please click here to enable notifications", "alert_notification_permission_denied_title": "Notifications are blocked", "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", "alert_notification_ios_install_required_title": "iOS Install Required", @@ -94,9 +96,7 @@ "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", "notification_toggle_unmute": "Unmute", - "notification_toggle_sound": "Sound only", - "notification_toggle_browser": "Browser notifications", - "notification_toggle_background": "Browser and background notifications", + "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -169,8 +169,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_enable_browser_notifications_label": "Notify me via browser notifications", - "subscribe_dialog_subscribe_enable_background_notifications_label": "Also notify me when ntfy is not open (web push)", + "subscribe_dialog_subscribe_enable_background_notifications_label": "Enable background notifications (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 398f8088..b763346b 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,8 +6,7 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, - topicUrlWebPushSubscribe, - topicUrlWebPushUnsubscribe, + webPushSubscriptionsUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -116,36 +115,15 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async subscribeWebPush(baseUrl, topic, browserSubscription) { - const user = await userManager.get(baseUrl); - const url = topicUrlWebPushSubscribe(baseUrl, topic); - console.log(`[Api] Sending Web Push Subscription ${url}`); + async updateWebPushSubscriptions(topics, browserSubscription) { + const user = await userManager.get(config.base_url); + const url = webPushSubscriptionsUrl(config.base_url); + console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); const response = await fetch(url, { - method: "POST", + method: "PUT", headers: maybeWithAuth({}, user), - body: JSON.stringify({ browser_subscription: browserSubscription }), - }); - - if (response.ok) { - return true; - } - - throw new Error(`Unexpected server response ${response.status}`); - } - - async unsubscribeWebPush(subscription, browserSubscription) { - const user = await userManager.get(subscription.baseUrl); - - const url = topicUrlWebPushUnsubscribe(subscription.baseUrl, subscription.topic); - console.log(`[Api] Unsubscribing Web Push Subscription ${url}`); - - const response = await fetch(url, { - method: "POST", - headers: maybeWithAuth({}, user), - body: JSON.stringify({ - endpoint: browserSubscription.endpoint, - }), + body: JSON.stringify({ topics, browser_subscription: browserSubscription }), }); if (response.ok) { diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 952c74af..7cb12e90 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -1,5 +1,4 @@ import Connection from "./Connection"; -import { NotificationType } from "./SubscriptionManager"; import { hashCode } from "./utils"; const makeConnectionId = (subscription, user) => @@ -52,11 +51,9 @@ class ConnectionManager { const connectionId = makeConnectionId(s, user); return { ...s, user, connectionId }; }) - // we want to create a ws for both sound-only and active browser notifications, - // only background notifications don't need this as they come over web push. - // however, if background notifications are muted, we again need the ws while - // the page is active - .filter((s) => s.notificationType !== NotificationType.BACKGROUND && s.mutedUntil !== 1); + // background notifications don't need this as they come over web push. + // however, if they are muted, we again need the ws while the page is active + .filter((s) => !s.webPushEnabled && s.mutedUntil !== 1); console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 47c2fa1a..428b8979 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -2,7 +2,6 @@ import { openUrl, playSound, topicDisplayName, topicShortUrl, urlB64ToUint8Array import { formatMessage, formatTitleWithDefault } from "./notificationUtils"; import prefs from "./Prefs"; import logo from "../img/ntfy.png"; -import api from "./Api"; /** * The notifier is responsible for displaying desktop notifications. Note that not all modern browsers @@ -45,44 +44,20 @@ class Notifier { } } - async unsubscribeWebPush(subscription) { - try { - const pushManager = await this.pushManager(); - const browserSubscription = await pushManager.getSubscription(); - if (!browserSubscription) { - throw new Error("No browser subscription found"); - } - await api.unsubscribeWebPush(subscription, browserSubscription); - } catch (e) { - console.error("[Notifier] Error unsubscribing from web push", e); - } - } - - async subscribeWebPush(baseUrl, topic) { - if (!this.supported() || !this.pushSupported() || !config.enable_web_push) { - return {}; + async getBrowserSubscription() { + if (!this.pushPossible()) { + throw new Error("Unsupported or denied"); } - // only subscribe to web push for the current server. this is a limitation of the web push API, - // which only allows a single server per service worker origin. - if (baseUrl !== config.base_url) { - return {}; - } + const pushManager = await this.pushManager(); - try { - const pushManager = await this.pushManager(); - const browserSubscription = await pushManager.subscribe({ + return ( + (await pushManager.getSubscription()) ?? + pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), - }); - - await api.subscribeWebPush(baseUrl, topic, browserSubscription); - console.log("[Notifier.subscribeWebPush] Successfully subscribed to web push"); - } catch (e) { - console.error("[Notifier.subscribeWebPush] Error subscribing to web push", e); - } - - return {}; + }) + ); } async pushManager() { @@ -95,6 +70,10 @@ class Notifier { return registration.pushManager; } + notRequested() { + return this.supported() && Notification.permission === "default"; + } + granted() { return this.supported() && Notification.permission === "granted"; } @@ -127,6 +106,10 @@ class Notifier { return config.enable_web_push && "serviceWorker" in navigator && "PushManager" in window; } + pushPossible() { + return this.pushSupported() && this.contextSupported() && this.granted() && !this.iosSupportedButInstallRequired(); + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification @@ -136,7 +119,7 @@ class Notifier { } iosSupportedButInstallRequired() { - return "standalone" in window.navigator && window.navigator.standalone === false; + return this.pushSupported() && "standalone" in window.navigator && window.navigator.standalone === false; } } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 15958914..3cdaa85e 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,20 +1,9 @@ +import api from "./Api"; import notifier from "./Notifier"; import prefs from "./Prefs"; import getDb from "./getDb"; import { topicUrl } from "./utils"; -/** @typedef {string} NotificationTypeEnum */ - -/** @enum {NotificationTypeEnum} */ -export const NotificationType = { - /** sound-only */ - SOUND: "sound", - /** browser notifications when there is an active tab, via websockets */ - BROWSER: "browser", - /** web push notifications, regardless of whether the window is open */ - BACKGROUND: "background", -}; - class SubscriptionManager { constructor(db) { this.db = db; @@ -31,6 +20,11 @@ class SubscriptionManager { ); } + async webPushTopics() { + const subscriptions = await this.db.subscriptions.where({ webPushEnabled: 1, mutedUntil: 0 }).toArray(); + return subscriptions.map(({ topic }) => topic); + } + async get(subscriptionId) { return this.db.subscriptions.get(subscriptionId); } @@ -47,14 +41,7 @@ class SubscriptionManager { return; } - await notifier.playSound(); - - // sound only - if (subscription.notificationType === "sound") { - return; - } - - await notifier.notify(subscription, notification, defaultClickAction); + await Promise.all([notifier.playSound(), notifier.notify(subscription, notification, defaultClickAction)]); } /** @@ -62,28 +49,25 @@ class SubscriptionManager { * @param {string} topic * @param {object} opts * @param {boolean} opts.internal - * @param {NotificationTypeEnum} opts.notificationType + * @param {boolean} opts.webPushEnabled * @returns */ async add(baseUrl, topic, opts = {}) { const id = topicUrl(baseUrl, topic); - if (opts.notificationType === "background") { - await notifier.subscribeWebPush(baseUrl, topic); - } - const existingSubscription = await this.get(id); if (existingSubscription) { return existingSubscription; } const subscription = { + ...opts, id: topicUrl(baseUrl, topic), baseUrl, topic, mutedUntil: 0, last: null, - ...opts, + webPushEnabled: opts.webPushEnabled ? 1 : 0, }; await this.db.subscriptions.put(subscription); @@ -94,17 +78,16 @@ class SubscriptionManager { async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); - const notificationType = (await prefs.webPushDefaultEnabled()) === "enabled" ? "background" : "browser"; + const webPushEnabled = (await prefs.webPushDefaultEnabled()) === "enabled"; // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { - const local = await this.add(remote.base_url, remote.topic, { - notificationType, - }); const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; - await this.update(local.id, { + const local = await this.add(remote.base_url, remote.topic, { + // only if same-origin subscription + webPushEnabled: webPushEnabled && remote.base_url === config.base_url, displayName: remote.display_name, // May be undefined reservation, // May be null! }); @@ -126,6 +109,12 @@ class SubscriptionManager { ); } + async refreshWebPushSubscriptions(presetTopics) { + const topics = presetTopics ?? (await this.webPushTopics()); + + await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription()); + } + async updateState(subscriptionId, state) { this.db.subscriptions.update(subscriptionId, { state }); } @@ -133,10 +122,6 @@ class SubscriptionManager { async remove(subscription) { await this.db.subscriptions.delete(subscription.id); await this.db.notifications.where({ subscriptionId: subscription.id }).delete(); - - if (subscription.notificationType === NotificationType.BACKGROUND) { - await notifier.unsubscribeWebPush(subscription); - } } async first() { @@ -228,59 +213,14 @@ class SubscriptionManager { await this.db.subscriptions.update(subscriptionId, { mutedUntil, }); - - const subscription = await this.get(subscriptionId); - - if (subscription.notificationType === "background") { - if (mutedUntil === 1) { - await notifier.unsubscribeWebPush(subscription); - } else { - await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - } - } } - /** - * - * @param {object} subscription - * @param {NotificationTypeEnum} newNotificationType - * @returns - */ - async setNotificationType(subscription, newNotificationType) { - const oldNotificationType = subscription.notificationType ?? "browser"; - - if (oldNotificationType === newNotificationType) { - return; - } - - if (oldNotificationType === "background") { - await notifier.unsubscribeWebPush(subscription); - } else if (newNotificationType === "background") { - await notifier.subscribeWebPush(subscription.baseUrl, subscription.topic); - } - + async toggleBackgroundNotifications(subscription) { await this.db.subscriptions.update(subscription.id, { - notificationType: newNotificationType, + webPushEnabled: subscription.webPushEnabled === 1 ? 0 : 1, }); } - // for logout/delete, unsubscribe first to prevent receiving dangling notifications - async unsubscribeAllWebPush() { - const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); - await Promise.all(subscriptions.map((subscription) => notifier.unsubscribeWebPush(subscription))); - } - - async refreshWebPushSubscriptions() { - const subscriptions = await this.db.subscriptions.where({ notificationType: "background" }).toArray(); - const browserSubscription = await (await navigator.serviceWorker.getRegistration())?.pushManager?.getSubscription(); - - if (browserSubscription) { - await Promise.all(subscriptions.map((subscription) => notifier.subscribeWebPush(subscription.baseUrl, subscription.topic))); - } else { - await Promise.all(subscriptions.map((subscription) => this.setNotificationType(subscription, "sound"))); - } - } - async setDisplayName(subscriptionId, displayName) { await this.db.subscriptions.update(subscriptionId, { displayName, diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js index 508df725..4ba0f9e1 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPushWorker.js @@ -1,16 +1,40 @@ +import { useState, useEffect } from "react"; +import { useLiveQuery } from "dexie-react-hooks"; import notifier from "./Notifier"; import subscriptionManager from "./SubscriptionManager"; -const onMessage = () => { - notifier.playSound(); +export const useWebPushUpdateWorker = () => { + const topics = useLiveQuery(() => subscriptionManager.webPushTopics()); + const [lastTopics, setLastTopics] = useState(); + + useEffect(() => { + if (!notifier.pushPossible() || JSON.stringify(topics) === JSON.stringify(lastTopics)) { + return; + } + + (async () => { + try { + console.log("[useWebPushUpdateWorker] Refreshing web push subscriptions"); + + await subscriptionManager.refreshWebPushSubscriptions(topics); + + setLastTopics(topics); + } catch (e) { + console.error("[useWebPushUpdateWorker] Error refreshing web push subscriptions", e); + } + })(); + }, [topics, lastTopics]); }; -const delayMillis = 2000; // 2 seconds -const intervalMillis = 300000; // 5 minutes +const intervalMillis = 5 * 60 * 1_000; // 5 minutes +const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour -class WebPushWorker { +class WebPushRefreshWorker { constructor() { this.timer = null; + this.lastUpdate = null; + this.messageHandler = this.onMessage.bind(this); + this.visibilityHandler = this.onVisibilityChange.bind(this); } startWorker() { @@ -19,28 +43,42 @@ class WebPushWorker { } this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); - setTimeout(() => this.updateSubscriptions(), delayMillis); this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); - this.broadcastChannel.addEventListener("message", onMessage); + this.broadcastChannel.addEventListener("message", this.messageHandler); + + document.addEventListener("visibilitychange", this.visibilityHandler); } stopWorker() { clearTimeout(this.timer); - this.broadcastChannel.removeEventListener("message", onMessage); + this.broadcastChannel.removeEventListener("message", this.messageHandler); this.broadcastChannel.close(); + + document.removeEventListener("visibilitychange", this.visibilityHandler); + } + + onMessage() { + notifier.playSound(); + } + + onVisibilityChange() { + if (document.visibilityState === "visible") { + this.updateSubscriptions(); + } } async updateSubscriptions() { - try { - console.log("[WebPushBroadcastListener] Refreshing web push subscriptions"); + if (!notifier.pushPossible()) { + return; + } + if (!this.lastUpdate || Date.now() - this.lastUpdate > updateIntervalMillis) { await subscriptionManager.refreshWebPushSubscriptions(); - } catch (e) { - console.error("[WebPushBroadcastListener] Error refreshing web push subscriptions", e); + this.lastUpdate = Date.now(); } } } -export default new WebPushWorker(); +export const webPushRefreshWorker = new WebPushRefreshWorker(); diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js index 9cf8c66e..92b62c43 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/getDb.js @@ -14,7 +14,7 @@ const getDbBase = (username) => { const db = new Dexie(dbName); db.version(2).stores({ - subscriptions: "&id,baseUrl,notificationType", + subscriptions: "&id,baseUrl,[webPushEnabled+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", prefs: "&key", diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 906a88a4..d5b3e976 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -20,9 +20,8 @@ export const topicUrlJson = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/jso export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, topic)}?poll=1`; export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; -export const topicUrlWebPushSubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/subscribe`; -export const topicUrlWebPushUnsubscribe = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/web-push/unsubscribe`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); +export const webPushSubscriptionsUrl = (baseUrl) => `${baseUrl}/v1/account/web-push`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index bbc380c9..1fb66cb5 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -1078,8 +1078,6 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { - await subscriptionManager.unsubscribeAllWebPush(); - await accountApi.delete(password); await getDb().delete(); console.debug(`[Account] Account deleted`); diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 154f17cb..f0b031a3 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -120,8 +120,6 @@ const ProfileIcon = () => { const handleLogout = async () => { try { - await subscriptionManager.unsubscribeAllWebPush(); - await accountApi.logout(); await getDb().delete(); } finally { diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index b2755aa9..a5852525 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -108,27 +108,34 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const showNotificationPermissionDenied = notifier.denied(); + const [showNotificationPermissionRequired, setShowNotificationPermissionRequired] = useState(notifier.notRequested()); + const [showNotificationPermissionDenied, setShowNotificationPermissionDenied] = useState(notifier.denied()); const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const navListPadding = + const refreshPermissions = () => { + setShowNotificationPermissionRequired(notifier.notRequested()); + setShowNotificationPermissionDenied(notifier.denied()); + }; + + const alertVisible = + showNotificationPermissionRequired || showNotificationPermissionDenied || showNotificationIOSInstallRequired || showNotificationBrowserNotSupportedBox || - showNotificationContextNotSupportedBox - ? "0" - : ""; + showNotificationContextNotSupportedBox; return ( <> - + + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } {showNotificationIOSInstallRequired && } + {alertVisible && } {!showSubscriptionsList && ( navigate(routes.app)} selected={location.pathname === config.app_root}> @@ -346,16 +353,36 @@ const SubscriptionItem = (props) => { ); }; +const NotificationPermissionRequired = ({ refreshPermissions }) => { + const { t } = useTranslation(); + return ( + + {t("alert_notification_permission_required_title")} + + {/* component=Button is not an anchor, false positive */} + {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} + { + await notifier.maybeRequestPermission(); + refreshPermissions(); + }} + > + {t("alert_notification_permission_required_description")} + + + + ); +}; + const NotificationPermissionDeniedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_notification_permission_denied_title")} - {t("alert_notification_permission_denied_description")} - - - + + {t("alert_notification_permission_denied_title")} + {t("alert_notification_permission_denied_description")} + ); }; @@ -363,7 +390,7 @@ const NotificationIOSInstallRequiredAlert = () => { const { t } = useTranslation(); return ( <> - + {t("alert_notification_ios_install_required_title")} {t("alert_notification_ios_install_required_description")} @@ -375,33 +402,27 @@ const NotificationIOSInstallRequiredAlert = () => { const NotificationBrowserNotSupportedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_not_supported_title")} - {t("alert_not_supported_description")} - - - + + {t("alert_not_supported_title")} + {t("alert_not_supported_description")} + ); }; const NotificationContextNotSupportedAlert = () => { const { t } = useTranslation(); return ( - <> - - {t("alert_not_supported_title")} - - , - }} - /> - - - - + + {t("alert_not_supported_title")} + + , + }} + /> + + ); }; diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 091e1f51..37f9f772 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -86,7 +86,7 @@ const Notifications = () => { - {notifier.pushSupported() && } + {notifier.pushPossible() && } ); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 60b69863..ad311d5e 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -12,16 +12,14 @@ import { FormGroup, useMediaQuery, Switch, - Stack, } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { Warning } from "@mui/icons-material"; import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; -import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; +import subscriptionManager from "../app/SubscriptionManager"; import poller from "../app/Poller"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -59,16 +57,16 @@ const SubscribeDialog = (props) => { const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleSuccess = async (notificationType) => { + const handleSuccess = async (webPushEnabled) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; const subscription = await subscribeTopic(actualBaseUrl, topic, { - notificationType, + webPushEnabled, }); poller.pollInBackground(subscription); // Dangle! // if the user hasn't changed the default web push setting yet, set it to enabled - if (notificationType === "background" && webPushDefaultEnabled === "initial") { + if (webPushEnabled && webPushDefaultEnabled === "initial") { await prefs.setWebPushDefaultEnabled(true); } @@ -100,23 +98,6 @@ const SubscribeDialog = (props) => { ); }; -const browserNotificationsSupported = notifier.supported(); -const pushNotificationsSupported = notifier.pushSupported(); -const iosInstallRequired = notifier.iosSupportedButInstallRequired(); -const pushPossible = pushNotificationsSupported && iosInstallRequired; - -const getNotificationTypeFromToggles = (browserNotificationsEnabled, backgroundNotificationsEnabled) => { - if (backgroundNotificationsEnabled) { - return NotificationType.BACKGROUND; - } - - if (browserNotificationsEnabled) { - return NotificationType.BROWSER; - } - - return NotificationType.SOUND; -}; - const SubscribePage = (props) => { const { t } = useTranslation(); const { account } = useContext(AccountContext); @@ -134,27 +115,7 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - // load initial value, but update it in `handleBrowserNotificationsChanged` - // if we interact with the API and therefore possibly change it (from default -> denied) - const [notificationsExplicitlyDenied, setNotificationsExplicitlyDenied] = useState(notifier.denied()); - // default to on if notifications are already granted - const [browserNotificationsEnabled, setBrowserNotificationsEnabled] = useState(notifier.granted()); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState( - pushPossible && props.webPushDefaultEnabled === "enabled" - ); - - const handleBrowserNotificationsChanged = async (e) => { - if (e.target.checked && (await notifier.maybeRequestPermission())) { - setBrowserNotificationsEnabled(true); - if (pushPossible && props.webPushDefaultEnabled === "enabled") { - setBackgroundNotificationsEnabled(true); - } - } else { - setNotificationsExplicitlyDenied(notifier.denied()); - setBrowserNotificationsEnabled(false); - setBackgroundNotificationsEnabled(false); - } - }; + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); const handleBackgroundNotificationsChanged = (e) => { setBackgroundNotificationsEnabled(e.target.checked); @@ -197,7 +158,7 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(getNotificationTypeFromToggles(browserNotificationsEnabled, backgroundNotificationsEnabled)); + props.onSuccess(backgroundNotificationsEnabled); }; const handleUseAnotherChanged = (e) => { @@ -311,41 +272,20 @@ const SubscribePage = (props) => { )} )} - {browserNotificationsSupported && ( + {notifier.pushPossible() && !anotherServerVisible && ( } - label={ - - {t("subscribe_dialog_subscribe_enable_browser_notifications_label")} - {notificationsExplicitlyDenied && } - - } + label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} /> - {pushNotificationsSupported && !anotherServerVisible && browserNotificationsEnabled && ( - - } - label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} - /> - )} )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 90c63b3f..429c2a9f 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -33,7 +33,7 @@ import { Send, } from "@mui/icons-material"; import theme from "./theme"; -import subscriptionManager, { NotificationType } from "../app/SubscriptionManager"; +import subscriptionManager from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; import session from "../app/Session"; @@ -334,14 +334,6 @@ const DisplayNameDialog = (props) => { ); }; -const getNotificationType = (subscription) => { - if (subscription.mutedUntil === 1) { - return "muted"; - } - - return subscription.notificationType ?? NotificationType.BROWSER; -}; - const checkedItem = ( @@ -350,15 +342,10 @@ const checkedItem = ( const NotificationToggle = ({ subscription }) => { const { t } = useTranslation(); - const type = getNotificationType(subscription); - const handleChange = async (newType) => { + const handleToggleBackground = async () => { try { - if (newType !== NotificationType.SOUND && !(await notifier.maybeRequestPermission())) { - return; - } - - await subscriptionManager.setNotificationType(subscription, newType); + await subscriptionManager.toggleBackgroundNotifications(subscription); } catch (e) { console.error("[NotificationToggle] Error setting notification type", e); } @@ -368,7 +355,7 @@ const NotificationToggle = ({ subscription }) => { await subscriptionManager.setMutedUntil(subscription.id, 0); }; - if (type === "muted") { + if (subscription.mutedUntil === 1) { return ( @@ -381,30 +368,14 @@ const NotificationToggle = ({ subscription }) => { return ( <> - - {type === NotificationType.SOUND && checkedItem} - handleChange(NotificationType.SOUND)}> - {t("notification_toggle_sound")} - - - {!notifier.denied() && !notifier.iosSupportedButInstallRequired() && ( + {notifier.pushPossible() && ( <> - {notifier.supported() && ( - - {type === NotificationType.BROWSER && checkedItem} - handleChange(NotificationType.BROWSER)}> - {t("notification_toggle_browser")} - - - )} - {notifier.pushSupported() && ( - - {type === NotificationType.BACKGROUND && checkedItem} - handleChange(NotificationType.BACKGROUND)}> - {t("notification_toggle_background")} - - - )} + + {subscription.webPushEnabled === 1 && checkedItem} + + {t("notification_toggle_background")} + + )} diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 3a710e3a..eb40e443 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -9,7 +9,8 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; -import webPushWorker from "../app/WebPushWorker"; +import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; +import notifier from "../app/Notifier"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -134,24 +135,26 @@ const stopWorkers = () => { poller.stopWorker(); pruner.stopWorker(); accountApi.stopWorker(); + webPushRefreshWorker.stopWorker(); }; const startWorkers = () => { poller.startWorker(); pruner.startWorker(); accountApi.startWorker(); + webPushRefreshWorker.startWorker(); }; export const useBackgroundProcesses = () => { + useWebPushUpdateWorker(); + useEffect(() => { console.log("[useBackgroundProcesses] mounting"); startWorkers(); - webPushWorker.startWorker(); return () => { console.log("[useBackgroundProcesses] unloading"); stopWorkers(); - webPushWorker.stopWorker(); }; }, []); }; From 0f0074cbab14ddb77bc9135b02b4dd60e3581a58 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 14:45:05 +0200 Subject: [PATCH 041/305] Implement push subscription expiry --- cmd/serve.go | 8 +++ docs/config.md | 10 +++ docs/subscribe/web.md | 15 ++--- server/config.go | 10 +++ server/log.go | 1 + server/server.yml | 2 + server/server_manager.go | 3 + server/server_web_push.go | 92 ++++++++++++++++----------- server/server_web_push_test.go | 38 ++++++++++- server/types.go | 19 ++++++ server/web_push.go | 55 +++++++++++++++- web/public/sw.js | 112 +++++++++++++++++++-------------- web/src/app/Prefs.js | 3 +- web/src/components/Account.jsx | 1 - web/src/components/App.jsx | 4 +- web/src/components/hooks.js | 1 - 16 files changed, 272 insertions(+), 102 deletions(-) diff --git a/cmd/serve.go b/cmd/serve.go index 4ec94945..a77227e6 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -99,6 +99,8 @@ var flagsServe = append( altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), + altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-warning-duration", Aliases: []string{"web_push_expiry_warning_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION"}, Value: server.DefaultWebPushExpiryWarningDuration, Usage: "duration after last update to send a warning notification"}), + altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-duration", Aliases: []string{"web_push_expiry_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_DURATION"}, Value: server.DefaultWebPushExpiryDuration, Usage: "duration after last update to expire subscription"}), ) var cmdServe = &cli.Command{ @@ -138,6 +140,8 @@ func execServe(c *cli.Context) error { webPushPrivateKey := c.String("web-push-private-key") webPushPublicKey := c.String("web-push-public-key") webPushSubscriptionsFile := c.String("web-push-subscriptions-file") + webPushExpiryWarningDuration := c.Duration("web-push-expiry-warning-duration") + webPushExpiryDuration := c.Duration("web-push-expiry-duration") webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") @@ -197,6 +201,8 @@ func execServe(c *cli.Context) error { return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") + } else if webPushEnabled && (webPushExpiryWarningDuration < 24*time.Hour || (webPushExpiryDuration-webPushExpiryWarningDuration < 24*time.Hour)) { + return errors.New("web push expiry warning duration must be at least 1 day, expire duration must be at least 1 day later") } else if managerInterval < 5*time.Second { return errors.New("manager interval cannot be lower than five seconds") } else if cacheDuration > 0 && cacheDuration < managerInterval { @@ -364,6 +370,8 @@ func execServe(c *cli.Context) error { conf.WebPushPublicKey = webPushPublicKey conf.WebPushSubscriptionsFile = webPushSubscriptionsFile conf.WebPushEmailAddress = webPushEmailAddress + conf.WebPushExpiryDuration = webPushExpiryDuration + conf.WebPushExpiryWarningDuration = webPushExpiryWarningDuration // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/docs/config.md b/docs/config.md index 7e1ef6c6..cfd14034 100644 --- a/docs/config.md +++ b/docs/config.md @@ -827,6 +827,11 @@ web-push-email-address: sysadmin@example.com # don't forget to set the required base-url for web push notifications base-url: https://ntfy.example.com + +# you can also set custom expiry and warning durations +# the minimum is 1 day for warning, and 1 day after warning for expiry +web-push-expiry-warning-duration: 168h +web-push-expiry-duration: 192h ``` The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push @@ -1339,6 +1344,8 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | | `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | +| `web-push-expiry-warning-duration` | `NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION` | *duration* | 1 week | Web Push: Time before expiry warning is sent (min 1 day) | +| `web-push-expiry-duration` | `NTFY_WEB_PUSH_EXPIRY_DURATION` | *duration* | 1 week + 1 day | Web Push: Time before subscription is expired (min 1 day after warning) | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. @@ -1436,5 +1443,8 @@ OPTIONS: --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] + --web-push-expiry-warning-duration value, --web_push_expiry_warning_duration value duration after last update to send a warning notification (default: 168h0m0s) [$NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION] + --web-push-expiry-duration value, --web_push_expiry_duration value duration after last update to expire subscription (default: 192h0m0s) [$NTFY_WEB_PUSH_EXPIRY_DURATION] --help, -h show help + ``` diff --git a/docs/subscribe/web.md b/docs/subscribe/web.md index e073bec9..465a53ee 100644 --- a/docs/subscribe/web.md +++ b/docs/subscribe/web.md @@ -2,15 +2,9 @@ You can use the Web UI to subscribe to topics as well. Simply type in the topic name and click the *Subscribe* button. -While subscribing, you have the option to enable desktop notifications, as well as background notifications. When you -enable them for the first time, you will be prompted to allow notifications on your browser. +While subscribing, you have the option to enable background notifications on supported browsers. -- **Sound only** - - If you don't enable browser notifications, a sound will play when a new notification comes in, and the tab title - will show the number of new notifications. - -- **Browser Notifications** +- If background notifications are off: This requires an active ntfy tab to be open to receive notifications. These are typically instantaneous, and will appear as a system notification. If you don't see these, check that your browser is allowed to show notifications @@ -19,7 +13,7 @@ enable them for the first time, you will be prompted to allow notifications on y If you don't want to enable background notifications, pinning the ntfy tab on your browser is a good solution to leave it running. -- **Background Notifications** +- If background notifications are on: This uses the [Web Push API](https://caniuse.com/push-api). You don't need an active ntfy tab open, but in some cases you may need to keep your browser open. @@ -27,6 +21,9 @@ enable them for the first time, you will be prompted to allow notifications on y Background notifications are only supported on the same server hosting the web app. You cannot use another server, but can instead subscribe on the other server itself. + If the ntfy app is not opened for more than a week, background notifications will be paused. You can resume them + by opening the app again, and will get a warning notification before they are paused. + | Browser | Platform | Browser Running | Browser Not Running | Restrictions | | ------- | -------- | --------------- | ------------------- | ------------------------------------------------------- | | Chrome | Desktop | ✅ | ❌ | | diff --git a/server/config.go b/server/config.go index d5c87672..e26ee0dd 100644 --- a/server/config.go +++ b/server/config.go @@ -23,6 +23,12 @@ const ( DefaultStripePriceCacheDuration = 3 * time.Hour // Time to keep Stripe prices cached in memory before a refresh is needed ) +// Defines default web push settings +const ( + DefaultWebPushExpiryWarningDuration = 7 * 24 * time.Hour + DefaultWebPushExpiryDuration = DefaultWebPushExpiryWarningDuration + 24*time.Hour +) + // Defines all global and per-visitor limits // - message size limit: the max number of bytes for a message // - total topic limit: max number of topics overall @@ -152,6 +158,8 @@ type Config struct { WebPushPublicKey string WebPushSubscriptionsFile string WebPushEmailAddress string + WebPushExpiryDuration time.Duration + WebPushExpiryWarningDuration time.Duration } // NewConfig instantiates a default new server config @@ -238,5 +246,7 @@ func NewConfig() *Config { WebPushPublicKey: "", WebPushSubscriptionsFile: "", WebPushEmailAddress: "", + WebPushExpiryDuration: DefaultWebPushExpiryDuration, + WebPushExpiryWarningDuration: DefaultWebPushExpiryWarningDuration, } } diff --git a/server/log.go b/server/log.go index c638ed97..9f922b6a 100644 --- a/server/log.go +++ b/server/log.go @@ -29,6 +29,7 @@ const ( tagResetter = "resetter" tagWebsocket = "websocket" tagMatrix = "matrix" + tagWebPush = "web_push" ) var ( diff --git a/server/server.yml b/server/server.yml index 6b921bbd..e59c8336 100644 --- a/server/server.yml +++ b/server/server.yml @@ -47,6 +47,8 @@ # web-push-private-key: # web-push-subscriptions-file: # web-push-email-address: +# web-push-expiry-warning-duration: 168h +# web-push-expiry-duration: 192h # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. diff --git a/server/server_manager.go b/server/server_manager.go index 52e3621e..a8626bd5 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,6 +15,9 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() + if s.config.WebPushEnabled { + s.expireOrNotifyOldSubscriptions() + } // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index fcf0dad6..d7c28955 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -43,6 +43,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") + return } @@ -50,42 +51,61 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { go func(i int, sub webPushSubscription) { ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} - payload := &webPushPayload{ - SubscriptionID: fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), - Message: *m, - } - jsonPayload, err := json.Marshal(payload) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ - Subscriber: s.config.WebPushEmailAddress, - VAPIDPublicKey: s.config.WebPushPublicKey, - VAPIDPrivateKey: s.config.WebPushPrivateKey, - // Deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, - }) - - if err != nil { - logvm(v, m).Err(err).Fields(ctx).Debug("Unable to publish web push message") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - return - } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - logvm(v, m).Fields(ctx).Field("response", resp).Debug("Unable to publish web push message") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - logvm(v, m).Err(err).Fields(ctx).Warn("Unable to expire subscription") - } - return - } + s.sendWebPushNotification(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), *m), &sub, &ctx) }(i, xi) } } + +func (s *Server) expireOrNotifyOldSubscriptions() { + subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") + + return + } + + for i, xi := range subscriptions { + go func(i int, sub webPushSubscription) { + ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint} + + s.sendWebPushNotification(newWebPushSubscriptionExpiringPayload(), &sub, &ctx) + }(i, xi) + } + + log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) +} + +func (s *Server) sendWebPushNotification(payload any, sub *webPushSubscription, ctx *log.Context) { + jsonPayload, err := json.Marshal(payload) + + if err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + return + } + + resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ + Subscriber: s.config.WebPushEmailAddress, + VAPIDPublicKey: s.config.WebPushPublicKey, + VAPIDPrivateKey: s.config.WebPushPrivateKey, + // Deliverability on iOS isn't great with lower urgency values, + // and thus we can't really map lower ntfy priorities to lower urgency values + Urgency: webpush.UrgencyHigh, + }) + + if err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + } + return + } + + // May want to handle at least 429 differently, but for now treat all errors the same + if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { + log.Tag(tagWebPush).Fields(*ctx).Field("response", resp).Debug("Unable to publish web push message") + if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + } + return + } +} diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 75746918..0086b794 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -157,8 +157,42 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { requireSubscriptionCount(t, s, "test-topic-abc", 0) } +func TestServer_WebPush_Expiry(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + var received atomic.Bool + + upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _, err := io.ReadAll(r.Body) + require.Nil(t, err) + w.WriteHeader(200) + w.Write([]byte(``)) + received.Store(true) + })) + defer upstreamServer.Close() + + addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + requireSubscriptionCount(t, s, "test-topic", 1) + + _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") + require.Nil(t, err) + + s.expireOrNotifyOldSubscriptions() + requireSubscriptionCount(t, s, "test-topic", 1) + + waitFor(t, func() bool { + return received.Load() + }) + + _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") + require.Nil(t, err) + + s.expireOrNotifyOldSubscriptions() + requireSubscriptionCount(t, s, "test-topic", 0) +} + func payloadForTopics(t *testing.T, topics []string) string { - topicsJson, err := json.Marshal(topics) + topicsJSON, err := json.Marshal(topics) require.Nil(t, err) return fmt.Sprintf(`{ @@ -170,7 +204,7 @@ func payloadForTopics(t *testing.T, topics []string) string { "auth": "auth-key" } } - }`, topicsJson) + }`, topicsJSON) } func addSubscription(t *testing.T, s *Server, topic string, url string) { diff --git a/server/types.go b/server/types.go index f1f15735..3ddfcbba 100644 --- a/server/types.go +++ b/server/types.go @@ -468,10 +468,29 @@ type apiStripeSubscriptionDeletedEvent struct { } type webPushPayload struct { + Event string `json:"event"` SubscriptionID string `json:"subscription_id"` Message message `json:"message"` } +func newWebPushPayload(subscriptionID string, message message) webPushPayload { + return webPushPayload{ + Event: "message", + SubscriptionID: subscriptionID, + Message: message, + } +} + +type webPushControlMessagePayload struct { + Event string `json:"event"` +} + +func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { + return webPushControlMessagePayload{ + Event: "subscription_expiring", + } +} + type webPushSubscription struct { BrowserSubscription webpush.Subscription UserID string diff --git a/server/web_push.go b/server/web_push.go index c48920d8..a98d6ad8 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -3,6 +3,7 @@ package server import ( "database/sql" "fmt" + "time" "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver @@ -18,7 +19,8 @@ const ( endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + warning_sent BOOLEAN DEFAULT FALSE ); CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); @@ -32,8 +34,12 @@ const ( deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` + deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + + updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` ) @@ -72,7 +78,6 @@ func setupNewSubscriptionsDB(db *sql.DB) error { } func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { - fmt.Printf("AAA") tx, err := c.db.Begin() if err != nil { return err @@ -121,6 +126,49 @@ func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webP return data, nil } +func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { + tx, err := c.db.Begin() + if err != nil { + return nil, err + } + defer tx.Rollback() + + _, err = tx.Exec(deleteWebPushSubscriptionsByAgeQuery, fmt.Sprintf("-%.2f seconds", expiryDuration.Seconds())) + if err != nil { + return nil, err + } + + rows, err := tx.Query(selectWebPushSubscriptionsExpiringSoonQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) + if err != nil { + return nil, err + } + defer rows.Close() + + var data []webPushSubscription + for rows.Next() { + i := webPushSubscription{} + err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh) + fmt.Printf("%v+", i) + if err != nil { + return nil, err + } + data = append(data, i) + } + + // also set warning as sent + _, err = tx.Exec(updateWarningSentQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) + if err != nil { + return nil, err + } + + err = tx.Commit() + if err != nil { + return nil, err + } + + return data, nil +} + func (c *webPushStore) RemoveByEndpoint(endpoint string) error { _, err := c.db.Exec( deleteWebPushSubscriptionByEndpointQuery, @@ -136,6 +184,7 @@ func (c *webPushStore) RemoveByUserID(userID string) error { ) return err } + func (c *webPushStore) Close() error { return c.db.Close() } diff --git a/web/public/sw.js b/web/public/sw.js index 70ad9a7d..dba350fa 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -32,35 +32,50 @@ self.addEventListener("push", (event) => { const data = event.data.json(); console.log("[ServiceWorker] Received Web Push Event", { event, data }); - const { subscription_id: subscriptionId, message } = data; - broadcastChannel.postMessage(message); - event.waitUntil( (async () => { - const db = await getDbAsync(); - - await Promise.all([ - (async () => { - await db.notifications.add({ - ...message, - subscriptionId, - // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation - new: 1, - }); - const badgeCount = await db.notifications.where({ new: 1 }).count(); - console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); - self.navigator.setAppBadge?.(badgeCount); - })(), - db.subscriptions.update(subscriptionId, { - last: message.id, - }), - self.registration.showNotification(formatTitleWithDefault(message, message.topic), { - tag: subscriptionId, - body: formatMessage(message), + if (data.event === "subscription_expiring") { + await self.registration.showNotification("Notifications will be paused", { + body: "Open ntfy to continue receiving notifications", icon: "/static/images/ntfy.png", data, - }), - ]); + }); + } else if (data.event === "message") { + const { subscription_id: subscriptionId, message } = data; + broadcastChannel.postMessage(message); + + const db = await getDbAsync(); + + await Promise.all([ + (async () => { + await db.notifications.add({ + ...message, + subscriptionId, + // New marker (used for bubble indicator); cannot be boolean; Dexie index limitation + new: 1, + }); + const badgeCount = await db.notifications.where({ new: 1 }).count(); + console.log("[ServiceWorker] Setting new app badge count", { badgeCount }); + self.navigator.setAppBadge?.(badgeCount); + })(), + db.subscriptions.update(subscriptionId, { + last: message.id, + }), + self.registration.showNotification(formatTitleWithDefault(message, message.topic), { + tag: subscriptionId, + body: formatMessage(message), + icon: "/static/images/ntfy.png", + data, + }), + ]); + } else { + // We can't ignore the push, since permission can be revoked by the browser + await self.registration.showNotification("Unknown notification received from server", { + body: "You may need to update ntfy by opening the web app", + icon: "/static/images/ntfy.png", + data, + }); + } })() ); }); @@ -68,33 +83,38 @@ self.addEventListener("push", (event) => { self.addEventListener("notificationclick", (event) => { event.notification.close(); - const { message } = event.notification.data; - - if (message.click) { - self.clients.openWindow(message.click); - return; - } - - const rootUrl = new URL(self.location.origin); - const topicUrl = new URL(message.topic, self.location.origin); - event.waitUntil( (async () => { const clients = await self.clients.matchAll({ type: "window" }); - const topicClient = clients.find((client) => client.url === topicUrl.toString()); - if (topicClient) { - topicClient.focus(); - return; - } - + const rootUrl = new URL(self.location.origin); const rootClient = clients.find((client) => client.url === rootUrl.toString()); - if (rootClient) { - rootClient.focus(); - return; - } - self.clients.openWindow(topicUrl); + if (event.notification.data.event !== "message") { + if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(rootUrl); + } + } else { + const { message } = event.notification.data; + + if (message.click) { + self.clients.openWindow(message.click); + return; + } + + const topicUrl = new URL(message.topic, self.location.origin); + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + + if (topicClient) { + topicClient.focus(); + } else if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(topicUrl); + } + } })() ); }); diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 45078352..22f767af 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -42,4 +42,5 @@ class Prefs { } } -export default new Prefs(getDb()); +const prefs = new Prefs(getDb()); +export default prefs; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 1fb66cb5..400ca08c 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -57,7 +57,6 @@ import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; import theme from "./theme"; import session from "../app/Session"; -import subscriptionManager from "../app/SubscriptionManager"; const Account = () => { if (!session.exists()) { diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 148c3ac2..f19710d8 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -58,9 +58,7 @@ const App = () => { const updateTitle = (newNotificationsCount) => { document.title = newNotificationsCount > 0 ? `(${newNotificationsCount}) ntfy` : "ntfy"; - if ("setAppBadge" in window.navigator) { - window.navigator.setAppBadge(newNotificationsCount); - } + window.navigator.setAppBadge?.(newNotificationsCount); }; const Layout = () => { diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index eb40e443..815f0596 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -10,7 +10,6 @@ import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; -import notifier from "../app/Notifier"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection From 46f34ca1e3e844f31ca8ac8e78142651a3c3283b Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 2 Jun 2023 16:52:35 +0200 Subject: [PATCH 042/305] Add push service allowlist and topic limit --- server/errors.go | 2 ++ server/server_web_push.go | 27 ++++++++++++++ server/server_web_push_test.go | 66 +++++++++++++++++++++++----------- 3 files changed, 74 insertions(+), 21 deletions(-) diff --git a/server/errors.go b/server/errors.go index d13e2969..c8d96edb 100644 --- a/server/errors.go +++ b/server/errors.go @@ -115,6 +115,8 @@ var ( errHTTPBadRequestPhoneNumberVerifyChannelInvalid = &errHTTP{40036, http.StatusBadRequest, "invalid request: verification channel must be 'sms' or 'call'", "https://ntfy.sh/docs/publish/#phone-calls", nil} errHTTPBadRequestDelayNoCall = &errHTTP{40037, http.StatusBadRequest, "delayed call notifications are not supported", "", nil} errHTTPBadRequestWebPushSubscriptionInvalid = &errHTTP{40038, http.StatusBadRequest, "invalid request: web push payload malformed", "", nil} + errHTTPBadRequestWebPushEndpointUnknown = &errHTTP{40039, http.StatusBadRequest, "invalid request: web push endpoint unknown", "", nil} + errHTTPBadRequestWebPushTopicCountTooHigh = &errHTTP{40040, http.StatusBadRequest, "invalid request: too many web push topic subscriptions", "", nil} errHTTPNotFound = &errHTTP{40401, http.StatusNotFound, "page not found", "", nil} errHTTPUnauthorized = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication", nil} errHTTPForbidden = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication", nil} diff --git a/server/server_web_push.go b/server/server_web_push.go index d7c28955..caccce92 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -4,18 +4,45 @@ import ( "encoding/json" "fmt" "net/http" + "regexp" "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" "heckel.io/ntfy/user" ) +// test: https://regexr.com/7eqvl +// example urls: +// +// https://android.googleapis.com/XYZ +// https://fcm.googleapis.com/XYZ +// https://updates.push.services.mozilla.com/XYZ +// https://updates-autopush.stage.mozaws.net/XYZ +// https://updates-autopush.dev.mozaws.net/XYZ +// https://AAA.notify.windows.com/XYZ +// https://AAA.push.apple.com/XYZ +const ( + webPushEndpointAllowRegexStr = `^https:\/\/(android\.googleapis\.com|fcm\.googleapis\.com|updates\.push\.services\.mozilla\.com|updates-autopush\.stage\.mozaws\.net|updates-autopush\.dev\.mozaws\.net|.*\.notify\.windows\.com|.*\.push\.apple\.com)\/.*$` + webPushTopicSubscribeLimit = 50 +) + +var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) + func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) + if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid } + if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + return errHTTPBadRequestWebPushEndpointUnknown + } + + if len(payload.Topics) > webPushTopicSubscribeLimit { + return errHTTPBadRequestWebPushTopicCountTooHigh + } + u := v.User() topics, err := s.topicsFromIDs(payload.Topics...) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 0086b794..29d91f7e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -16,10 +16,14 @@ import ( "heckel.io/ntfy/util" ) +const ( + defaultEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" +) + func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -27,19 +31,40 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].BrowserSubscription.Endpoint, "https://example.com/webpush") + require.Equal(t, subs[0].BrowserSubscription.Endpoint, defaultEndpoint) require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") require.Equal(t, subs[0].UserID, "") } +func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + require.Equal(t, 400, response.Code) + require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) +} + +func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { + s := newTestServer(t, newTestConfigWithWebPush(t)) + + topicList := make([]string, 51) + for i := range topicList { + topicList[i] = util.RandomString(5) + } + + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, topicList, defaultEndpoint), nil) + require.Equal(t, 400, response.Code) + require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) +} + func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - addSubscription(t, s, "test-topic", "https://example.com/webpush") + addSubscription(t, s, "test-topic", defaultEndpoint) requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -54,7 +79,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -71,7 +96,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), nil) + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -84,7 +109,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}), map[string]string{ + response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -105,7 +130,7 @@ func TestServer_WebPush_Publish(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) require.Equal(t, "/push-receive", r.URL.Path) @@ -113,9 +138,9 @@ func TestServer_WebPush_Publish(t *testing.T) { require.Equal(t, "", r.Header.Get("Topic")) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") request(t, s, "PUT", "/test-topic", "web push test", nil) @@ -129,18 +154,17 @@ func TestServer_WebPush_PublishExpire(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) // Gone w.WriteHeader(410) - w.Write([]byte(``)) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") - addSubscription(t, s, "test-topic-abc", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") + addSubscription(t, s, "test-topic-abc", pushService.URL+"/push-receive") requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) @@ -162,16 +186,16 @@ func TestServer_WebPush_Expiry(t *testing.T) { var received atomic.Bool - upstreamServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) w.WriteHeader(200) w.Write([]byte(``)) received.Store(true) })) - defer upstreamServer.Close() + defer pushService.Close() - addSubscription(t, s, "test-topic", upstreamServer.URL+"/push-receive") + addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") requireSubscriptionCount(t, s, "test-topic", 1) _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") @@ -191,20 +215,20 @@ func TestServer_WebPush_Expiry(t *testing.T) { requireSubscriptionCount(t, s, "test-topic", 0) } -func payloadForTopics(t *testing.T, topics []string) string { +func payloadForTopics(t *testing.T, topics []string, endpoint string) string { topicsJSON, err := json.Marshal(topics) require.Nil(t, err) return fmt.Sprintf(`{ "topics": %s, "browser_subscription":{ - "endpoint": "https://example.com/webpush", + "endpoint": "%s", "keys": { "p256dh": "p256dh-key", "auth": "auth-key" } } - }`, topicsJSON) + }`, topicsJSON, endpoint) } func addSubscription(t *testing.T, s *Server, topic string, url string) { From 03aa67ed6851678d47f557314ed49763ece09f2a Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:36:20 +0200 Subject: [PATCH 043/305] Remove `webPushDefaultEnabled` --- web/public/static/langs/en.json | 5 ---- web/src/app/Prefs.js | 9 ------- web/src/app/SubscriptionManager.js | 4 --- web/src/components/Preferences.jsx | 32 ------------------------ web/src/components/SubscribeDialog.jsx | 18 +------------ web/src/components/SubscriptionPopup.jsx | 20 ++++++--------- 6 files changed, 8 insertions(+), 80 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 2d58311a..80994504 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -369,11 +369,6 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_default_title": "Enable web push notifications by default", - "prefs_notifications_web_push_default_description": "This affects the initial state in the subscribe dialog, as well as the default state for synced topics", - "prefs_notifications_web_push_default_initial": "Unset", - "prefs_notifications_web_push_default_enabled": "Enabled", - "prefs_notifications_web_push_default_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 22f767af..75ac3ab5 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -31,15 +31,6 @@ class Prefs { const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } - - async webPushDefaultEnabled() { - const obj = await this.db.prefs.get("webPushDefaultEnabled"); - return obj?.value ?? "initial"; - } - - async setWebPushDefaultEnabled(enabled) { - await this.db.prefs.put({ key: "webPushDefaultEnabled", value: enabled ? "enabled" : "disabled" }); - } } const prefs = new Prefs(getDb()); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 3cdaa85e..6b82531d 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -78,16 +78,12 @@ class SubscriptionManager { async syncFromRemote(remoteSubscriptions, remoteReservations) { console.log(`[SubscriptionManager] Syncing subscriptions from remote`, remoteSubscriptions); - const webPushEnabled = (await prefs.webPushDefaultEnabled()) === "enabled"; - // Add remote subscriptions const remoteIds = await Promise.all( remoteSubscriptions.map(async (remote) => { const reservation = remoteReservations?.find((r) => remote.base_url === config.base_url && remote.topic === r.topic) || null; const local = await this.add(remote.base_url, remote.topic, { - // only if same-origin subscription - webPushEnabled: webPushEnabled && remote.base_url === config.base_url, displayName: remote.display_name, // May be undefined reservation, // May be null! }); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 37f9f772..4afc0f80 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,7 +48,6 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; -import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -86,7 +85,6 @@ const Notifications = () => { - {notifier.pushPossible() && } ); @@ -234,36 +232,6 @@ const DeleteAfter = () => { ); }; -const WebPushDefaultEnabled = () => { - const { t } = useTranslation(); - const labelId = "prefWebPushDefaultEnabled"; - const defaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleChange = async (ev) => { - await prefs.setWebPushDefaultEnabled(ev.target.value); - }; - - // while loading - if (defaultEnabled == null) { - return null; - } - - return ( - - - - - - ); -}; - const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index ad311d5e..8c5d7e45 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -14,7 +14,6 @@ import { Switch, } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; @@ -30,7 +29,6 @@ import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; import notifier from "../app/Notifier"; -import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; @@ -55,8 +53,6 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const webPushDefaultEnabled = useLiveQuery(async () => prefs.webPushDefaultEnabled()); - const handleSuccess = async (webPushEnabled) => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; @@ -64,20 +60,9 @@ const SubscribeDialog = (props) => { webPushEnabled, }); poller.pollInBackground(subscription); // Dangle! - - // if the user hasn't changed the default web push setting yet, set it to enabled - if (webPushEnabled && webPushDefaultEnabled === "initial") { - await prefs.setWebPushDefaultEnabled(true); - } - props.onSuccess(subscription); }; - // wait for liveQuery load - if (webPushDefaultEnabled === undefined) { - return <>; - } - return ( {!showLoginPage && ( @@ -90,7 +75,6 @@ const SubscribeDialog = (props) => { onCancel={props.onCancel} onNeedsLogin={() => setShowLoginPage(true)} onSuccess={handleSuccess} - webPushDefaultEnabled={webPushDefaultEnabled} /> )} {showLoginPage && setShowLoginPage(false)} onSuccess={handleSuccess} />} @@ -115,7 +99,7 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(props.webPushDefaultEnabled === "enabled"); + const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(false); const handleBackgroundNotificationsChanged = (e) => { setBackgroundNotificationsEnabled(e.target.checked); diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 429c2a9f..67a96da7 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -169,7 +169,7 @@ export const SubscriptionPopup = (props) => { return ( <> - + {notifier.pushPossible() && } @@ -367,18 +367,12 @@ const NotificationToggle = ({ subscription }) => { } return ( - <> - {notifier.pushPossible() && ( - <> - - {subscription.webPushEnabled === 1 && checkedItem} - - {t("notification_toggle_background")} - - - - )} - + + {subscription.webPushEnabled === 1 && checkedItem} + + {t("notification_toggle_background")} + + ); }; From 18edff9afe230732445f5f5d1a7f69161ec2f018 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 20:44:28 +0200 Subject: [PATCH 044/305] Add TODO comment about Safari 17 PWA --- docs/subscribe/desktop.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/subscribe/desktop.md b/docs/subscribe/desktop.md index b13d11a4..b9ba02d9 100644 --- a/docs/subscribe/desktop.md +++ b/docs/subscribe/desktop.md @@ -8,6 +8,8 @@ push notifications, and an app badge with the unread notification count. To receive background notifications, either the browser or the installed web app must be open. + + Web app installation is supported on Chrome and Edge on desktop, as well as Chrome on Android and Safari on iOS. Look at the [compatibility table](https://caniuse.com/web-app-manifest) for more info. From f3db0e083e40f70465927b669dcfc511decf0259 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:11:31 +0200 Subject: [PATCH 045/305] Add release notes --- docs/releases.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/releases.md b/docs/releases.md index 0e93b677..eec09358 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1222,6 +1222,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ### ntfy server v2.6.0 (UNRELEASED) +**Features:** + +* The web app now supports web push, and is installable on Chrome, Edge, Android, and iOS. Look at the [web app docs](https://docs.ntfy.sh/subscribe/web/) for more information ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) + **Bug fixes:** * Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) From a8db08c7d4602c009481247274222b0a94bde989 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:40:35 +0200 Subject: [PATCH 046/305] Use attachment URL for image & add timestamp --- web/public/sw.js | 9 ++++++++- web/src/app/Notifier.js | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/web/public/sw.js b/web/public/sw.js index dba350fa..96e5bf51 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -46,6 +46,8 @@ self.addEventListener("push", (event) => { const db = await getDbAsync(); + const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; + await Promise.all([ (async () => { await db.notifications.add({ @@ -61,11 +63,14 @@ self.addEventListener("push", (event) => { db.subscriptions.update(subscriptionId, { last: message.id, }), + // Please update the desktop notification in Notifier.js to match any changes self.registration.showNotification(formatTitleWithDefault(message, message.topic), { tag: subscriptionId, body: formatMessage(message), - icon: "/static/images/ntfy.png", + icon: image ?? "/static/images/ntfy.png", + image, data, + timestamp: message.time * 1_000, }), ]); } else { @@ -81,6 +86,8 @@ self.addEventListener("push", (event) => { }); self.addEventListener("notificationclick", (event) => { + console.log("[ServiceWorker] NotificationClick"); + event.notification.close(); event.waitUntil( diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 428b8979..4b8b832c 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -17,13 +17,17 @@ class Notifier { const displayName = topicDisplayName(subscription); const message = formatMessage(notification); const title = formatTitleWithDefault(notification, displayName); + const image = notification.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? notification.attachment.url : undefined; // Show notification console.log(`[Notifier, ${shortUrl}] Displaying notification ${notification.id}: ${message}`); + // Please update sw.js if formatting changes const n = new Notification(title, { body: message, tag: subscription.id, - icon: logo, + icon: image ?? logo, + image, + timestamp: message.time * 1_000, }); if (notification.click) { n.onclick = () => openUrl(notification.click); From 46798ac322827bc941b3e9e32860af33f23e25ab Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 09:22:56 +0200 Subject: [PATCH 047/305] Make web push toggle global --- web/public/static/langs/en.json | 5 ++ web/src/app/ConnectionManager.js | 14 ++---- web/src/app/Notifier.js | 5 ++ web/src/app/Prefs.js | 9 ++++ web/src/app/SubscriptionManager.js | 20 ++++---- web/src/app/getDb.js | 2 +- web/src/components/App.jsx | 12 ++++- web/src/components/Preferences.jsx | 31 +++++++++++++ web/src/components/SubscribeDialog.jsx | 34 ++------------ web/src/components/SubscriptionPopup.jsx | 58 ++++++++---------------- 10 files changed, 99 insertions(+), 91 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 80994504..d776ac05 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -95,6 +95,7 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", + "notification_toggle_mute": "Mute", "notification_toggle_unmute": "Unmute", "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", @@ -369,6 +370,10 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", + "prefs_notifications_web_push_title": "Enable web push notifications", + "prefs_notifications_web_push_description": "Enable this to receive notifications in the background even when ntfy isn't running", + "prefs_notifications_web_push_enabled": "Enabled", + "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/app/ConnectionManager.js b/web/src/app/ConnectionManager.js index 7cb12e90..ea7ed15e 100644 --- a/web/src/app/ConnectionManager.js +++ b/web/src/app/ConnectionManager.js @@ -45,15 +45,11 @@ class ConnectionManager { return; } console.log(`[ConnectionManager] Refreshing connections`); - const subscriptionsWithUsersAndConnectionId = subscriptions - .map((s) => { - const [user] = users.filter((u) => u.baseUrl === s.baseUrl); - const connectionId = makeConnectionId(s, user); - return { ...s, user, connectionId }; - }) - // background notifications don't need this as they come over web push. - // however, if they are muted, we again need the ws while the page is active - .filter((s) => !s.webPushEnabled && s.mutedUntil !== 1); + const subscriptionsWithUsersAndConnectionId = subscriptions.map((s) => { + const [user] = users.filter((u) => u.baseUrl === s.baseUrl); + const connectionId = makeConnectionId(s, user); + return { ...s, user, connectionId }; + }); console.log(); const targetIds = subscriptionsWithUsersAndConnectionId.map((s) => s.connectionId); diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 4b8b832c..ddf68f5b 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -114,6 +114,11 @@ class Notifier { return this.pushSupported() && this.contextSupported() && this.granted() && !this.iosSupportedButInstallRequired(); } + async pushEnabled() { + const enabled = await prefs.webPushEnabled(); + return this.pushPossible() && enabled; + } + /** * Returns true if this is a HTTPS site, or served over localhost. Otherwise the Notification API * is not supported, see https://developer.mozilla.org/en-US/docs/Web/API/notification diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 75ac3ab5..1f1a6d80 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -31,6 +31,15 @@ class Prefs { const deleteAfter = await this.db.prefs.get("deleteAfter"); return deleteAfter ? Number(deleteAfter.value) : 604800; // Default is one week } + + async webPushEnabled() { + const obj = await this.db.prefs.get("webPushEnabled"); + return obj?.value ?? false; + } + + async setWebPushEnabled(enabled) { + await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); + } } const prefs = new Prefs(getDb()); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 6b82531d..1521aedf 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -21,8 +21,16 @@ class SubscriptionManager { } async webPushTopics() { - const subscriptions = await this.db.subscriptions.where({ webPushEnabled: 1, mutedUntil: 0 }).toArray(); - return subscriptions.map(({ topic }) => topic); + // the Promise.resolve wrapper is not superfluous, without it the live query breaks: + // https://dexie.org/docs/dexie-react-hooks/useLiveQuery()#calling-non-dexie-apis-from-querier + if (!(await Promise.resolve(notifier.pushEnabled()))) { + return []; + } + + const subscriptions = await this.db.subscriptions.where({ mutedUntil: 0, baseUrl: config.base_url }).toArray(); + + // internal is currently a bool, it could be a 0/1 to be indexable, but for now just filter them out here + return subscriptions.filter(({ internal }) => !internal).map(({ topic }) => topic); } async get(subscriptionId) { @@ -49,7 +57,6 @@ class SubscriptionManager { * @param {string} topic * @param {object} opts * @param {boolean} opts.internal - * @param {boolean} opts.webPushEnabled * @returns */ async add(baseUrl, topic, opts = {}) { @@ -67,7 +74,6 @@ class SubscriptionManager { topic, mutedUntil: 0, last: null, - webPushEnabled: opts.webPushEnabled ? 1 : 0, }; await this.db.subscriptions.put(subscription); @@ -211,12 +217,6 @@ class SubscriptionManager { }); } - async toggleBackgroundNotifications(subscription) { - await this.db.subscriptions.update(subscription.id, { - webPushEnabled: subscription.webPushEnabled === 1 ? 0 : 1, - }); - } - async setDisplayName(subscriptionId, displayName) { await this.db.subscriptions.update(subscriptionId, { displayName, diff --git a/web/src/app/getDb.js b/web/src/app/getDb.js index 92b62c43..e52932c7 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/getDb.js @@ -14,7 +14,7 @@ const getDbBase = (username) => { const db = new Dexie(dbName); db.version(2).stores({ - subscriptions: "&id,baseUrl,[webPushEnabled+mutedUntil]", + subscriptions: "&id,baseUrl,[baseUrl+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", prefs: "&key", diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index f19710d8..56d5a765 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -69,6 +69,16 @@ const Layout = () => { const [sendDialogOpenMode, setSendDialogOpenMode] = useState(""); const users = useLiveQuery(() => userManager.all()); const subscriptions = useLiveQuery(() => subscriptionManager.all()); + const webPushTopics = useLiveQuery(() => subscriptionManager.webPushTopics()); + + const websocketSubscriptions = useMemo( + () => (subscriptions && webPushTopics ? subscriptions.filter((s) => !webPushTopics.includes(s.topic)) : []), + // websocketSubscriptions should stay stable unless the list of subscription ids changes. + // without the memoization, the connection listener calls a refresh for no reason. + // this isn't a problem due to the makeConnectionId, but it triggers an + // unnecessary recomputation for every received message. + [JSON.stringify({ subscriptions: subscriptions?.map(({ id }) => id), webPushTopics })] + ); const subscriptionsWithoutInternal = subscriptions?.filter((s) => !s.internal); const newNotificationsCount = subscriptionsWithoutInternal?.reduce((prev, cur) => prev + cur.new, 0) || 0; const [selected] = (subscriptionsWithoutInternal || []).filter( @@ -77,7 +87,7 @@ const Layout = () => { (config.base_url === s.baseUrl && params.topic === s.topic) ); - useConnectionListeners(account, subscriptions, users); + useConnectionListeners(account, websocketSubscriptions, users); useAccountListener(setAccount); useBackgroundProcesses(); useEffect(() => updateTitle(newNotificationsCount), [newNotificationsCount]); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 4afc0f80..7ef5a01e 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -48,6 +48,7 @@ import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; +import notifier from "../app/Notifier"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -85,6 +86,7 @@ const Notifications = () => { + ); @@ -232,6 +234,35 @@ const DeleteAfter = () => { ); }; +const WebPushEnabled = () => { + const { t } = useTranslation(); + const labelId = "prefWebPushEnabled"; + const defaultEnabled = useLiveQuery(async () => prefs.webPushEnabled()); + const handleChange = async (ev) => { + await prefs.setWebPushEnabled(ev.target.value); + }; + + // while loading + if (defaultEnabled == null) { + return null; + } + + if (!notifier.pushPossible()) { + return null; + } + + return ( + + + + + + ); +}; + const Users = () => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 8c5d7e45..fedccc39 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -28,7 +28,6 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; -import notifier from "../app/Notifier"; const publicBaseUrl = "https://ntfy.sh"; @@ -53,12 +52,10 @@ const SubscribeDialog = (props) => { const [showLoginPage, setShowLoginPage] = useState(false); const fullScreen = useMediaQuery(theme.breakpoints.down("sm")); - const handleSuccess = async (webPushEnabled) => { + const handleSuccess = async () => { console.log(`[SubscribeDialog] Subscribing to topic ${topic}`); const actualBaseUrl = baseUrl || config.base_url; - const subscription = await subscribeTopic(actualBaseUrl, topic, { - webPushEnabled, - }); + const subscription = await subscribeTopic(actualBaseUrl, topic, {}); poller.pollInBackground(subscription); // Dangle! props.onSuccess(subscription); }; @@ -99,12 +96,6 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); - const [backgroundNotificationsEnabled, setBackgroundNotificationsEnabled] = useState(false); - - const handleBackgroundNotificationsChanged = (e) => { - setBackgroundNotificationsEnabled(e.target.checked); - }; - const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -142,15 +133,12 @@ const SubscribePage = (props) => { } console.log(`[SubscribeDialog] Successful login to ${topicUrl(baseUrl, topic)} for user ${username}`); - props.onSuccess(backgroundNotificationsEnabled); + props.onSuccess(); }; const handleUseAnotherChanged = (e) => { props.setBaseUrl(""); setAnotherServerVisible(e.target.checked); - if (e.target.checked) { - setBackgroundNotificationsEnabled(false); - } }; const subscribeButtonEnabled = (() => { @@ -256,22 +244,6 @@ const SubscribePage = (props) => { )} )} - {notifier.pushPossible() && !anotherServerVisible && ( - - - } - label={t("subscribe_dialog_subscribe_enable_background_notifications_label")} - /> - - )} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 67a96da7..ee162972 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -15,19 +15,17 @@ import { MenuItem, IconButton, ListItemIcon, - ListItemText, - Divider, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { - Check, Clear, ClearAll, Edit, EnhancedEncryption, Lock, LockOpen, + Notifications, NotificationsOff, RemoveCircle, Send, @@ -44,7 +42,6 @@ import api from "../app/Api"; import { AccountContext } from "./App"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; -import notifier from "../app/Notifier"; export const SubscriptionPopup = (props) => { const { t } = useTranslation(); @@ -169,8 +166,8 @@ export const SubscriptionPopup = (props) => { return ( <> - {notifier.pushPossible() && } - + + @@ -334,44 +331,27 @@ const DisplayNameDialog = (props) => { ); }; -const checkedItem = ( - - - -); - const NotificationToggle = ({ subscription }) => { const { t } = useTranslation(); - const handleToggleBackground = async () => { - try { - await subscriptionManager.toggleBackgroundNotifications(subscription); - } catch (e) { - console.error("[NotificationToggle] Error setting notification type", e); - } + const handleToggleMute = async () => { + const mutedUntil = subscription.mutedUntil ? 0 : 1; // Make this a timestamp in the future + await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); }; - const unmute = async () => { - await subscriptionManager.setMutedUntil(subscription.id, 0); - }; - - if (subscription.mutedUntil === 1) { - return ( - - - - - {t("notification_toggle_unmute")} - - ); - } - - return ( - - {subscription.webPushEnabled === 1 && checkedItem} - - {t("notification_toggle_background")} - + return subscription.mutedUntil ? ( + + + + + {t("notification_toggle_unmute")} + + ) : ( + + + + + {t("notification_toggle_mute")} ); }; From 2f5acee79899d68975755dba7d5943a743a5d919 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 10:55:11 +0200 Subject: [PATCH 048/305] Call pushManager.subscribe only if enabled --- web/src/app/Notifier.js | 23 ++++++++++++++++++----- web/src/app/SubscriptionManager.js | 9 ++++++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index ddf68f5b..b157ef46 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -55,13 +55,26 @@ class Notifier { const pushManager = await this.pushManager(); - return ( - (await pushManager.getSubscription()) ?? - pushManager.subscribe({ + const existingSubscription = await pushManager.getSubscription(); + + if (existingSubscription) { + return existingSubscription; + } + + // create a new subscription only if web push is enabled + // it is possible that web push was previously enabled and then disabled again + // in which case there would be an existingSubscription. + // but if it was _not_ enabled previously, we reach here, and only create a new + // subscription if it is now enabled. + + if (await this.pushEnabled()) { + return pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), - }) - ); + }); + } + + return undefined; } async pushManager() { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 1521aedf..74488bc0 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -114,7 +114,14 @@ class SubscriptionManager { async refreshWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); - await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription()); + const browserSubscription = await notifier.getBrowserSubscription(); + + if (!browserSubscription) { + console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping."); + return; + } + + await api.updateWebPushSubscriptions(topics, browserSubscription); } async updateState(subscriptionId, state) { From 75a4b5bd888e7211af8d8018544404c7b5b07847 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 12:20:12 -0400 Subject: [PATCH 049/305] Small refactor --- server/errors.go | 1 + server/log.go | 2 +- server/server_web_push.go | 95 +++++++++++------------- server/types.go | 18 +++-- server/web_push.go | 26 ++++--- web/public/static/langs/en.json | 10 +-- web/src/components/Preferences.jsx | 7 +- web/src/components/SubscriptionPopup.jsx | 52 +++++-------- 8 files changed, 98 insertions(+), 113 deletions(-) diff --git a/server/errors.go b/server/errors.go index c8d96edb..27ba3df0 100644 --- a/server/errors.go +++ b/server/errors.go @@ -141,5 +141,6 @@ var ( errHTTPInternalError = &errHTTP{50001, http.StatusInternalServerError, "internal server error", "", nil} errHTTPInternalErrorInvalidPath = &errHTTP{50002, http.StatusInternalServerError, "internal server error: invalid path", "", nil} errHTTPInternalErrorMissingBaseURL = &errHTTP{50003, http.StatusInternalServerError, "internal server error: base-url must be be configured for this feature", "https://ntfy.sh/docs/config/", nil} + errHTTPInternalErrorWebPushUnableToPublish = &errHTTP{50004, http.StatusInternalServerError, "internal server error: unable to publish web push message", "", nil} errHTTPInsufficientStorageUnifiedPush = &errHTTP{50701, http.StatusInsufficientStorage, "cannot publish to UnifiedPush topic without previously active subscriber", "", nil} ) diff --git a/server/log.go b/server/log.go index 9f922b6a..978d0593 100644 --- a/server/log.go +++ b/server/log.go @@ -29,7 +29,7 @@ const ( tagResetter = "resetter" tagWebsocket = "websocket" tagMatrix = "matrix" - tagWebPush = "web_push" + tagWebPush = "webpush" ) var ( diff --git a/server/server_web_push.go b/server/server_web_push.go index caccce92..6b3e4adc 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -30,27 +30,19 @@ var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } - - if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + } else if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown - } - - if len(payload.Topics) > webPushTopicSubscribeLimit { + } else if len(payload.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh } - - u := v.User() - topics, err := s.topicsFromIDs(payload.Topics...) if err != nil { return err } - if s.userManager != nil { + u := v.User() for _, t := range topics { if err := s.userManager.Authorize(u, t.ID, user.PermissionRead); err != nil { logvr(v, r).With(t).Err(err).Debug("Access to topic %s not authorized", t.ID) @@ -58,11 +50,9 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { return err } - return s.writeJSON(w, newSuccessResponse()) } @@ -70,69 +60,68 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { logvm(v, m).Err(err).Warn("Unable to publish web push messages") - return } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint, "username": sub.UserID, "topic": m.Topic, "message_id": m.ID} - - s.sendWebPushNotification(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), *m), &sub, &ctx) - }(i, xi) + payload, err := json.Marshal(newWebPushPayload(fmt.Sprintf("%s/%s", s.config.BaseURL, m.Topic), m)) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") + return + } + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} + if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish web push message") + } } } +// TODO this should return error +// TODO the updated_at field is not actually updated ever + func (s *Server) expireOrNotifyOldSubscriptions() { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") - + return + } else if len(subscriptions) == 0 { return } - - for i, xi := range subscriptions { - go func(i int, sub webPushSubscription) { - ctx := log.Context{"endpoint": sub.BrowserSubscription.Endpoint} - - s.sendWebPushNotification(newWebPushSubscriptionExpiringPayload(), &sub, &ctx) - }(i, xi) + payload, err := json.Marshal(newWebPushSubscriptionExpiringPayload()) + if err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") + return } - - log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + go func() { + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} + if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") + } + } + }() + log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) } -func (s *Server) sendWebPushNotification(payload any, sub *webPushSubscription, ctx *log.Context) { - jsonPayload, err := json.Marshal(payload) - - if err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") - return - } - - resp, err := webpush.SendNotification(jsonPayload, &sub.BrowserSubscription, &webpush.Options{ +func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { + resp, err := webpush.SendNotification(message, &sub.BrowserSubscription, &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, - // Deliverability on iOS isn't great with lower urgency values, - // and thus we can't really map lower ntfy priorities to lower urgency values - Urgency: webpush.UrgencyHigh, + Urgency: webpush.UrgencyHigh, // iOS requires this to ensure delivery }) - if err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message") + log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + return err } - return + return err } - - // May want to handle at least 429 differently, but for now treat all errors the same - if !(200 <= resp.StatusCode && resp.StatusCode <= 299) { - log.Tag(tagWebPush).Fields(*ctx).Field("response", resp).Debug("Unable to publish web push message") + if (resp.StatusCode < 200 || resp.StatusCode > 299) && resp.StatusCode != 429 { + log.Tag(tagWebPush).Fields(*ctx).Field("response_code", resp.StatusCode).Debug("Unable to publish web push message, unexpected response") if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { - log.Tag(tagWebPush).Err(err).Fields(*ctx).Warn("Unable to expire subscription") + return err } - return + return errHTTPInternalErrorWebPushUnableToPublish.Fields(*ctx) } + return nil } diff --git a/server/types.go b/server/types.go index 3ddfcbba..a8a01301 100644 --- a/server/types.go +++ b/server/types.go @@ -467,15 +467,21 @@ type apiStripeSubscriptionDeletedEvent struct { Customer string `json:"customer"` } +// List of possible Web Push events +const ( + webPushMessageEvent = "message" + webPushExpiringEvent = "subscription_expiring" +) + type webPushPayload struct { - Event string `json:"event"` - SubscriptionID string `json:"subscription_id"` - Message message `json:"message"` + Event string `json:"event"` + SubscriptionID string `json:"subscription_id"` + Message *message `json:"message"` } -func newWebPushPayload(subscriptionID string, message message) webPushPayload { +func newWebPushPayload(subscriptionID string, message *message) webPushPayload { return webPushPayload{ - Event: "message", + Event: webPushMessageEvent, SubscriptionID: subscriptionID, Message: message, } @@ -487,7 +493,7 @@ type webPushControlMessagePayload struct { func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { return webPushControlMessagePayload{ - Event: "subscription_expiring", + Event: webPushExpiringEvent, } } diff --git a/server/web_push.go b/server/web_push.go index a98d6ad8..0bea0857 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -63,11 +63,11 @@ func newWebPushStore(filename string) (*webPushStore, error) { func setupSubscriptionsDB(db *sql.DB) error { // If 'subscriptions' table does not exist, this must be a new database - rowsMC, err := db.Query(selectWebPushSubscriptionsCountQuery) + rows, err := db.Query(selectWebPushSubscriptionsCountQuery) if err != nil { return setupNewSubscriptionsDB(db) } - return rowsMC.Close() + return rows.Close() } func setupNewSubscriptionsDB(db *sql.DB) error { @@ -83,7 +83,6 @@ func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subsc return err } defer tx.Rollback() - if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { return err } @@ -107,26 +106,35 @@ func (c *webPushStore) AddSubscription(topic string, userID string, subscription return err } -func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []*webPushSubscription, err error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - var data []webPushSubscription + var data []*webPushSubscription for rows.Next() { - i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh, &i.UserID) - if err != nil { + var userID, endpoint, auth, p256dh string + if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, i) + data = append(data, &webPushSubscription{ + UserID: userID, + BrowserSubscription: webpush.Subscription{ + Endpoint: endpoint, + Keys: webpush.Keys{ + Auth: auth, + P256dh: p256dh, + }, + }, + }) } return data, nil } func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { + // TODO this should be two functions tx, err := c.db.Begin() if err != nil { return nil, err diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index d776ac05..9571272f 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -29,6 +29,8 @@ "action_bar_reservation_limit_reached": "Limit reached", "action_bar_send_test_notification": "Send test notification", "action_bar_clear_notifications": "Clear all notifications", + "action_bar_mute_notifications": "Mute notifications", + "action_bar_unmute_notifications": "Unmute notifications", "action_bar_unsubscribe": "Unsubscribe", "action_bar_toggle_mute": "Mute/unmute notifications", "action_bar_toggle_action_menu": "Open/close action menu", @@ -95,9 +97,6 @@ "notifications_no_subscriptions_description": "Click the \"{{linktext}}\" link to create or subscribe to a topic. After that, you can send messages via PUT or POST and you'll receive notifications here.", "notifications_example": "Example", "notifications_more_details": "For more information, check out the website or documentation.", - "notification_toggle_mute": "Mute", - "notification_toggle_unmute": "Unmute", - "notification_toggle_background": "Background notifications", "display_name_dialog_title": "Change display name", "display_name_dialog_description": "Set an alternative name for a topic that is displayed in the subscription list. This helps identify topics with complicated names more easily.", "display_name_dialog_placeholder": "Display name", @@ -170,7 +169,6 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_enable_background_notifications_label": "Enable background notifications (web push)", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -370,8 +368,8 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_title": "Enable web push notifications", - "prefs_notifications_web_push_description": "Enable this to receive notifications in the background even when ntfy isn't running", + "prefs_notifications_web_push_title": "Background notifications", + "prefs_notifications_web_push_description": "Receive notifications in the background via Web Push, even when app is not running", "prefs_notifications_web_push_enabled": "Enabled", "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 7ef5a01e..7944f9be 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -242,11 +242,6 @@ const WebPushEnabled = () => { await prefs.setWebPushEnabled(ev.target.value); }; - // while loading - if (defaultEnabled == null) { - return null; - } - if (!notifier.pushPossible()) { return null; } @@ -254,7 +249,7 @@ const WebPushEnabled = () => { return ( - {t("prefs_notifications_web_push_enabled")} {t("prefs_notifications_web_push_disabled")} diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index ee162972..74438f9a 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -142,6 +142,10 @@ export const SubscriptionPopup = (props) => { await subscriptionManager.deleteNotifications(props.subscription.id); }; + const handleSetMutedUntil = async (mutedUntil) => { + await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); + }; + const handleUnsubscribe = async () => { console.log(`[SubscriptionPopup] Unsubscribing from ${props.subscription.id}`, props.subscription); await subscriptionManager.remove(props.subscription); @@ -166,8 +170,6 @@ export const SubscriptionPopup = (props) => { return ( <> - - @@ -198,7 +200,6 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_reservation_edit")} )} @@ -207,7 +208,6 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_reservation_delete")} )} @@ -215,21 +215,34 @@ export const SubscriptionPopup = (props) => { - {t("action_bar_send_test_notification")} - {t("action_bar_clear_notifications")} + {!!subscription.mutedUntil && ( + handleSetMutedUntil(0)}> + + + + {t("action_bar_unmute_notifications")} + + )} + {!subscription.mutedUntil && ( + handleSetMutedUntil(1)}> + + + + {t("action_bar_mute_notifications")} + + )} - {t("action_bar_unsubscribe")} @@ -331,31 +344,6 @@ const DisplayNameDialog = (props) => { ); }; -const NotificationToggle = ({ subscription }) => { - const { t } = useTranslation(); - - const handleToggleMute = async () => { - const mutedUntil = subscription.mutedUntil ? 0 : 1; // Make this a timestamp in the future - await subscriptionManager.setMutedUntil(subscription.id, mutedUntil); - }; - - return subscription.mutedUntil ? ( - - - - - {t("notification_toggle_unmute")} - - ) : ( - - - - - {t("notification_toggle_mute")} - - ); -}; - export const ReserveLimitChip = () => { const { account } = useContext(AccountContext); if (account?.role === Role.ADMIN || account?.stats.reservations_remaining > 0) { From 4ce6fdcc5acbf2afa73eff7c8937b33806ff1c3d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 8 Jun 2023 20:12:41 +0200 Subject: [PATCH 050/305] Implement http actions in service worker These are only supported in Chrome-based browsers via the service worker and not for regular desktop notifications. --- web/public/sw.js | 69 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 14 deletions(-) diff --git a/web/public/sw.js b/web/public/sw.js index 96e5bf51..39d60a8a 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -48,6 +48,13 @@ self.addEventListener("push", (event) => { const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; + const actions = message.actions + ?.filter(({ action }) => action === "view" || action === "http") + .map(({ label }) => ({ + action: label, + title: label, + })); + await Promise.all([ (async () => { await db.notifications.add({ @@ -71,6 +78,7 @@ self.addEventListener("push", (event) => { image, data, timestamp: message.time * 1_000, + actions, }), ]); } else { @@ -88,8 +96,6 @@ self.addEventListener("push", (event) => { self.addEventListener("notificationclick", (event) => { console.log("[ServiceWorker] NotificationClick"); - event.notification.close(); - event.waitUntil( (async () => { const clients = await self.clients.matchAll({ type: "window" }); @@ -97,29 +103,64 @@ self.addEventListener("notificationclick", (event) => { const rootUrl = new URL(self.location.origin); const rootClient = clients.find((client) => client.url === rootUrl.toString()); - if (event.notification.data.event !== "message") { + if (event.notification.data?.event !== "message") { if (rootClient) { rootClient.focus(); } else { self.clients.openWindow(rootUrl); } + event.notification.close(); } else { const { message } = event.notification.data; - if (message.click) { + if (event.action) { + const action = event.notification.data.message.actions.find(({ label }) => event.action === label); + + if (action.action === "view") { + self.clients.openWindow(action.url); + + if (action.clear) { + event.notification.close(); + } + } else if (action.action === "http") { + try { + const response = await fetch(action.url, { + method: action.method ?? "POST", + headers: action.headers ?? {}, + body: action.body, + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status} ${response.statusText}`); + } + + if (action.clear) { + event.notification.close(); + } + } catch (e) { + console.error("[ServiceWorker] Error performing http action", e); + self.registration.showNotification(`Unsuccessful action ${action.label} (${action.action})`, { + body: e.message, + }); + } + } + } else if (message.click) { self.clients.openWindow(message.click); - return; - } - const topicUrl = new URL(message.topic, self.location.origin); - const topicClient = clients.find((client) => client.url === topicUrl.toString()); - - if (topicClient) { - topicClient.focus(); - } else if (rootClient) { - rootClient.focus(); + event.notification.close(); } else { - self.clients.openWindow(topicUrl); + const topicUrl = new URL(message.topic, self.location.origin); + const topicClient = clients.find((client) => client.url === topicUrl.toString()); + + if (topicClient) { + topicClient.focus(); + } else if (rootClient) { + rootClient.focus(); + } else { + self.clients.openWindow(topicUrl); + } + + event.notification.close(); } } })() From d3ac976d05e8052fea2f4c8d7d2ad3c995db4534 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 14:30:19 -0400 Subject: [PATCH 051/305] Remove web-push-(enabled|duration*), change endpoint, other cosmetic changes --- cmd/serve.go | 13 +------- cmd/web_push.go | 25 ++++------------ cmd/web_push_test.go | 6 ++-- docs/config.md | 48 ++++++++++++------------------ server/config.go | 2 -- server/server.go | 10 +++---- server/server.yml | 5 +--- server/server_manager.go | 2 +- server/server_middleware.go | 2 +- server/server_test.go | 3 +- server/server_web_push.go | 2 +- server/server_web_push_test.go | 14 ++++----- server/web_push.go | 10 +++---- web/src/app/Api.js | 4 +-- web/src/app/Notifier.js | 7 ++--- web/src/app/SubscriptionManager.js | 1 - web/src/app/utils.js | 2 +- 17 files changed, 55 insertions(+), 101 deletions(-) diff --git a/cmd/serve.go b/cmd/serve.go index a77227e6..6d1b111a 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -94,13 +94,10 @@ var flagsServe = append( altsrc.NewBoolFlag(&cli.BoolFlag{Name: "enable-metrics", Aliases: []string{"enable_metrics"}, EnvVars: []string{"NTFY_ENABLE_METRICS"}, Value: false, Usage: "if set, Prometheus metrics are exposed via the /metrics endpoint"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "metrics-listen-http", Aliases: []string{"metrics_listen_http"}, EnvVars: []string{"NTFY_METRICS_LISTEN_HTTP"}, Usage: "ip:port used to expose the metrics endpoint (implicitly enables metrics)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "profile-listen-http", Aliases: []string{"profile_listen_http"}, EnvVars: []string{"NTFY_PROFILE_LISTEN_HTTP"}, Usage: "ip:port used to expose the profiling endpoints (implicitly enables profiling)"}), - altsrc.NewBoolFlag(&cli.BoolFlag{Name: "web-push-enabled", Aliases: []string{"web_push_enabled"}, EnvVars: []string{"NTFY_WEB_PUSH_ENABLED"}, Usage: "enable web push (requires public and private key)"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-public-key", Aliases: []string{"web_push_public_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PUBLIC_KEY"}, Usage: "public key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-private-key", Aliases: []string{"web_push_private_key"}, EnvVars: []string{"NTFY_WEB_PUSH_PRIVATE_KEY"}, Usage: "private key used for web push notifications"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-subscriptions-file", Aliases: []string{"web_push_subscriptions_file"}, EnvVars: []string{"NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE"}, Usage: "file used to store web push subscriptions"}), altsrc.NewStringFlag(&cli.StringFlag{Name: "web-push-email-address", Aliases: []string{"web_push_email_address"}, EnvVars: []string{"NTFY_WEB_PUSH_EMAIL_ADDRESS"}, Usage: "e-mail address of sender, required to use browser push services"}), - altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-warning-duration", Aliases: []string{"web_push_expiry_warning_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION"}, Value: server.DefaultWebPushExpiryWarningDuration, Usage: "duration after last update to send a warning notification"}), - altsrc.NewDurationFlag(&cli.DurationFlag{Name: "web-push-expiry-duration", Aliases: []string{"web_push_expiry_duration"}, EnvVars: []string{"NTFY_WEB_PUSH_EXPIRY_DURATION"}, Value: server.DefaultWebPushExpiryDuration, Usage: "duration after last update to expire subscription"}), ) var cmdServe = &cli.Command{ @@ -136,12 +133,9 @@ func execServe(c *cli.Context) error { keyFile := c.String("key-file") certFile := c.String("cert-file") firebaseKeyFile := c.String("firebase-key-file") - webPushEnabled := c.Bool("web-push-enabled") webPushPrivateKey := c.String("web-push-private-key") webPushPublicKey := c.String("web-push-public-key") webPushSubscriptionsFile := c.String("web-push-subscriptions-file") - webPushExpiryWarningDuration := c.Duration("web-push-expiry-warning-duration") - webPushExpiryDuration := c.Duration("web-push-expiry-duration") webPushEmailAddress := c.String("web-push-email-address") cacheFile := c.String("cache-file") cacheDuration := c.Duration("cache-duration") @@ -197,12 +191,10 @@ func execServe(c *cli.Context) error { // Check values if firebaseKeyFile != "" && !util.FileExists(firebaseKeyFile) { return errors.New("if set, FCM key file must exist") - } else if webPushEnabled && (webPushPrivateKey == "" || webPushPublicKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { + } else if webPushPublicKey != "" && (webPushPrivateKey == "" || webPushSubscriptionsFile == "" || webPushEmailAddress == "" || baseURL == "") { return errors.New("if web push is enabled, web-push-private-key, web-push-public-key, web-push-subscriptions-file, web-push-email-address, and base-url should be set. run 'ntfy web-push generate-keys' to generate keys") } else if keepaliveInterval < 5*time.Second { return errors.New("keepalive interval cannot be lower than five seconds") - } else if webPushEnabled && (webPushExpiryWarningDuration < 24*time.Hour || (webPushExpiryDuration-webPushExpiryWarningDuration < 24*time.Hour)) { - return errors.New("web push expiry warning duration must be at least 1 day, expire duration must be at least 1 day later") } else if managerInterval < 5*time.Second { return errors.New("manager interval cannot be lower than five seconds") } else if cacheDuration > 0 && cacheDuration < managerInterval { @@ -365,13 +357,10 @@ func execServe(c *cli.Context) error { conf.MetricsListenHTTP = metricsListenHTTP conf.ProfileListenHTTP = profileListenHTTP conf.Version = c.App.Version - conf.WebPushEnabled = webPushEnabled conf.WebPushPrivateKey = webPushPrivateKey conf.WebPushPublicKey = webPushPublicKey conf.WebPushSubscriptionsFile = webPushSubscriptionsFile conf.WebPushEmailAddress = webPushEmailAddress - conf.WebPushExpiryDuration = webPushExpiryDuration - conf.WebPushExpiryWarningDuration = webPushExpiryWarningDuration // Set up hot-reloading of config go sigHandlerConfigReload(config) diff --git a/cmd/web_push.go b/cmd/web_push.go index 8b09762c..94f45c77 100644 --- a/cmd/web_push.go +++ b/cmd/web_push.go @@ -14,7 +14,7 @@ func init() { } var cmdWebPush = &cli.Command{ - Name: "web-push", + Name: "webpush", Usage: "Generate keys, in the future manage web push subscriptions", UsageText: "ntfy web-push [generate-keys]", Category: categoryServer, @@ -22,7 +22,7 @@ var cmdWebPush = &cli.Command{ Subcommands: []*cli.Command{ { Action: generateWebPushKeys, - Name: "generate-keys", + Name: "keys", Usage: "Generate VAPID keys to enable browser background push notifications", UsageText: "ntfy web-push generate-keys", Category: categoryServer, @@ -36,28 +36,15 @@ func generateWebPushKeys(c *cli.Context) error { return err } - fmt.Fprintf(c.App.ErrWriter, `Keys generated. + fmt.Fprintf(c.App.ErrWriter, `Web Push keys generated. Add the following lines to your config file: -VAPID Public Key: -%s - -VAPID Private Key: -%s - ---- - -Add the following lines to your config file: - -web-push-enabled: true web-push-public-key: %s web-push-private-key: %s -web-push-subscriptions-file: +web-push-subscriptions-file: /var/cache/ntfy/webpush.db # or similar web-push-email-address: -Look at the docs for other methods (e.g. command line flags & environment variables). - -You will also need to set a base-url. -`, publicKey, privateKey, publicKey, privateKey) +See https://ntfy.sh/docs/config/#web-push for details. +`, publicKey, privateKey) return nil } diff --git a/cmd/web_push_test.go b/cmd/web_push_test.go index 3241ea43..1b364701 100644 --- a/cmd/web_push_test.go +++ b/cmd/web_push_test.go @@ -10,15 +10,15 @@ import ( func TestCLI_WebPush_GenerateKeys(t *testing.T) { app, _, _, stderr := newTestApp() - require.Nil(t, runWebPushCommand(app, server.NewConfig(), "generate-keys")) - require.Contains(t, stderr.String(), "Keys generated.") + require.Nil(t, runWebPushCommand(app, server.NewConfig(), "keys")) + require.Contains(t, stderr.String(), "Web Push keys generated.") } func runWebPushCommand(app *cli.App, conf *server.Config, args ...string) error { webPushArgs := []string{ "ntfy", "--log-level=ERROR", - "web-push", + "webpush", } return app.Run(append(webPushArgs, args...)) } diff --git a/docs/config.md b/docs/config.md index cfd14034..b15b8022 100644 --- a/docs/config.md +++ b/docs/config.md @@ -791,9 +791,18 @@ it'll show `New message` as a popup. ## Web Push notifications [Web Push](https://developer.mozilla.org/en-US/docs/Web/API/Push_API) ([RFC8030](https://datatracker.ietf.org/doc/html/rfc8030)) -is supported, but needs a little configuration to enable it. Since there is no central server (other than the browser's push endpoint), -you have to configure your own [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keys. These identify the publisher, -and are used to encrypt the messages before sending them to the push endpoint. +allows ntfy to receive push notifications, even when the ntfy web app (or even the browser, depending on the platform) is closed. +When enabled, the user can enable **background notifications** for their topics in the wep app under Settings. Once enabled by the +user, ntfy will forward published messages to the push endpoint (browser-provided, e.g. fcm.googleapis.com), which will then +forward it to the browser. + +To configure Web Push, you need to generate and configure a [VAPID](https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid) keypair (via `ntfy webpush keys`), +a database to keep track of the browser's subscriptions, and an admin email address (you): + +- `web-push-public-key` is the generated VAPID public key, e.g. AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +- `web-push-private-key` is the generated VAPID private key, e.g. AA2BB1234567890abcdefzxcvbnm1234567890 +- `web-push-subscriptions-file` is a database file to keep track of browser subscription endpoints, e.g. `/var/cache/ntfy/webpush.db` +- `web-push-email-address` is the admin email address send to the push provider, e.g. `sysadmin@example.com` Limitations: @@ -806,32 +815,17 @@ Limitations: To configure VAPID keys, first generate them: ```sh -$ ntfy web-push generate-keys -Keys generated. - -VAPID Public Key: -AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 - -VAPID Private Key: -AA2BB1234567890abcdefzxcvbnm1234567890 +$ ntfy webpush keys +Web Push keys generated. ``` Then copy the generated values into your `server.yml` or use the corresponding environment variables or command line arguments: ```yaml -web-push-enabled: true web-push-public-key: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 web-push-private-key: AA2BB1234567890abcdefzxcvbnm1234567890 -web-push-subscriptions-file: /var/cache/ntfy/subscriptions.db +web-push-subscriptions-file: /var/cache/ntfy/webpush.db web-push-email-address: sysadmin@example.com - -# don't forget to set the required base-url for web push notifications -base-url: https://ntfy.example.com - -# you can also set custom expiry and warning durations -# the minimum is 1 day for warning, and 1 day after warning for expiry -web-push-expiry-warning-duration: 168h -web-push-expiry-duration: 192h ``` The `web-push-subscriptions-file` is used to store the push subscriptions. Subscriptions do not ever expire automatically, unless the push @@ -840,7 +834,7 @@ gateway returns an error (e.g. 410 Gone when a user has unsubscribed). The web app refreshes subscriptions on start and regularly on an interval, but this file should be persisted across restarts. If the subscription file is deleted or lost, any web apps that aren't open will not receive new web push notifications until you open then. -Changing your public/private keypair is NOT recommended. Browsers only allow one server identity (public key) per origin, and +Changing your public/private keypair is **not recommended**. Browsers only allow one server identity (public key) per origin, and if you change them the clients will not be able to subscribe via web push until the user manually clears the notification permission. ## Tiers @@ -1340,12 +1334,10 @@ variable before running the `ntfy` command (e.g. `export NTFY_LISTEN_HTTP=:80`). | `stripe-webhook-key` | `NTFY_STRIPE_WEBHOOK_KEY` | *string* | - | Payments: Key required to validate the authenticity of incoming webhooks from Stripe | | `billing-contact` | `NTFY_BILLING_CONTACT` | *email address* or *website* | - | Payments: Email or website displayed in Upgrade dialog as a billing contact | | `web-push-enabled` | `NTFY_WEB_PUSH_ENABLED` | *boolean* (`true` or `false`) | - | Web Push: Enable/disable (requires private and public key below). | -| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy web-push generate-keys` to generate | -| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy web-push generate-keys` to generate | -| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | +| `web-push-public-key` | `NTFY_WEB_PUSH_PUBLIC_KEY` | *string* | - | Web Push: Public Key. Run `ntfy webpush generate-keys` to generate | +| `web-push-private-key` | `NTFY_WEB_PUSH_PRIVATE_KEY` | *string* | - | Web Push: Private Key. Run `ntfy webpush generate-keys` to generate | +| `web-push-subscriptions-file` | `NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE` | *string* | - | Web Push: Subscriptions file | | `web-push-email-address` | `NTFY_WEB_PUSH_EMAIL_ADDRESS` | *string* | - | Web Push: Sender email address | -| `web-push-expiry-warning-duration` | `NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION` | *duration* | 1 week | Web Push: Time before expiry warning is sent (min 1 day) | -| `web-push-expiry-duration` | `NTFY_WEB_PUSH_EXPIRY_DURATION` | *duration* | 1 week + 1 day | Web Push: Time before subscription is expired (min 1 day after warning) | The format for a *duration* is: `(smh)`, e.g. 30s, 20m or 1h. The format for a *size* is: `(GMK)`, e.g. 1G, 200M or 4000k. @@ -1443,8 +1435,6 @@ OPTIONS: --web-push-private-key value, --web_push_private_key value private key used for web push notifications [$NTFY_WEB_PUSH_PRIVATE_KEY] --web-push-subscriptions-file value, --web_push_subscriptions_file value file used to store web push subscriptions [$NTFY_WEB_PUSH_SUBSCRIPTIONS_FILE] --web-push-email-address value, --web_push_email_address value e-mail address of sender, required to use browser push services [$NTFY_WEB_PUSH_EMAIL_ADDRESS] - --web-push-expiry-warning-duration value, --web_push_expiry_warning_duration value duration after last update to send a warning notification (default: 168h0m0s) [$NTFY_WEB_PUSH_EXPIRY_WARNING_DURATION] - --web-push-expiry-duration value, --web_push_expiry_duration value duration after last update to expire subscription (default: 192h0m0s) [$NTFY_WEB_PUSH_EXPIRY_DURATION] --help, -h show help ``` diff --git a/server/config.go b/server/config.go index e26ee0dd..3d779fba 100644 --- a/server/config.go +++ b/server/config.go @@ -153,7 +153,6 @@ type Config struct { EnableMetrics bool AccessControlAllowOrigin string // CORS header field to restrict access from web clients Version string // injected by App - WebPushEnabled bool WebPushPrivateKey string WebPushPublicKey string WebPushSubscriptionsFile string @@ -241,7 +240,6 @@ func NewConfig() *Config { EnableReservations: false, AccessControlAllowOrigin: "*", Version: "", - WebPushEnabled: false, WebPushPrivateKey: "", WebPushPublicKey: "", WebPushSubscriptionsFile: "", diff --git a/server/server.go b/server/server.go index a3170817..c9b95ba6 100644 --- a/server/server.go +++ b/server/server.go @@ -94,7 +94,7 @@ var ( apiAccountSettingsPath = "/v1/account/settings" apiAccountSubscriptionPath = "/v1/account/subscription" apiAccountReservationPath = "/v1/account/reservation" - apiAccountWebPushPath = "/v1/account/web-push" + apiAccountWebPushPath = "/v1/account/webpush" apiAccountPhonePath = "/v1/account/phone" apiAccountPhoneVerifyPath = "/v1/account/phone/verify" apiAccountBillingPortalPath = "/v1/account/billing/portal" @@ -157,7 +157,7 @@ func New(conf *Config) (*Server, error) { return nil, err } var webPush *webPushStore - if conf.WebPushEnabled { + if conf.WebPushPublicKey != "" { webPush, err = newWebPushStore(conf.WebPushSubscriptionsFile) if err != nil { return nil, err @@ -574,7 +574,7 @@ func (s *Server) handleWebConfig(w http.ResponseWriter, _ *http.Request, _ *visi EnableCalls: s.config.TwilioAccount != "", EnableEmails: s.config.SMTPSenderFrom != "", EnableReservations: s.config.EnableReservations, - EnableWebPush: s.config.WebPushEnabled, + EnableWebPush: s.config.WebPushPublicKey != "", BillingContact: s.config.BillingContact, WebPushPublicKey: s.config.WebPushPublicKey, DisallowedTopics: s.config.DisallowedTopics, @@ -792,7 +792,7 @@ func (s *Server) handlePublishInternal(r *http.Request, v *visitor) (*message, e if s.config.UpstreamBaseURL != "" && !unifiedpush { // UP messages are not sent to upstream go s.forwardPollRequest(v, m) } - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { go s.publishToWebPushEndpoints(v, m) } } else { @@ -1724,7 +1724,7 @@ func (s *Server) sendDelayedMessage(v *visitor, m *message) error { if s.config.UpstreamBaseURL != "" { go s.forwardPollRequest(v, m) } - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { go s.publishToWebPushEndpoints(v, m) } if err := s.messageCache.MarkPublished(m); err != nil { diff --git a/server/server.yml b/server/server.yml index e59c8336..0afd4b43 100644 --- a/server/server.yml +++ b/server/server.yml @@ -40,15 +40,12 @@ # Enable web push # -# Run "ntfy web-push generate-keys" to generate the keys +# Run "ntfy webpush keys" to generate the keys # -# web-push-enabled: false # web-push-public-key: # web-push-private-key: # web-push-subscriptions-file: # web-push-email-address: -# web-push-expiry-warning-duration: 168h -# web-push-expiry-duration: 192h # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. diff --git a/server/server_manager.go b/server/server_manager.go index a8626bd5..97572a55 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,7 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - if s.config.WebPushEnabled { + if s.config.WebPushPublicKey != "" { s.expireOrNotifyOldSubscriptions() } diff --git a/server/server_middleware.go b/server/server_middleware.go index 41c2706c..b9d1bb88 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -60,7 +60,7 @@ func (s *Server) ensureWebEnabled(next handleFunc) handleFunc { func (s *Server) ensureWebPushEnabled(next handleFunc) handleFunc { return func(w http.ResponseWriter, r *http.Request, v *visitor) error { - if !s.config.WebPushEnabled { + if s.config.WebPushPublicKey == "" { return errHTTPNotFound } return next(w, r, v) diff --git a/server/server_test.go b/server/server_test.go index 76f83eea..2c361e3b 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -2622,8 +2622,7 @@ func newTestConfigWithWebPush(t *testing.T) *Config { conf := newTestConfig(t) privateKey, publicKey, err := webpush.GenerateVAPIDKeys() require.Nil(t, err) - conf.WebPushEnabled = true - conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "subscriptions.db") + conf.WebPushSubscriptionsFile = filepath.Join(t.TempDir(), "webpush.db") conf.WebPushEmailAddress = "testing@example.com" conf.WebPushPrivateKey = privateKey conf.WebPushPublicKey = publicKey diff --git a/server/server_web_push.go b/server/server_web_push.go index 6b3e4adc..20bd4e7c 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -76,7 +76,7 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { } // TODO this should return error -// TODO the updated_at field is not actually updated ever +// TODO rate limiting func (s *Server) expireOrNotifyOldSubscriptions() { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 29d91f7e..57c52a0d 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -23,7 +23,7 @@ const ( func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -40,7 +40,7 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) } @@ -53,7 +53,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, topicList, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, defaultEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -64,7 +64,7 @@ func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { addSubscription(t, s, "test-topic", defaultEndpoint) requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, defaultEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -79,7 +79,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -96,7 +96,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -109,7 +109,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/web-push", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) diff --git a/server/web_push.go b/server/web_push.go index 0bea0857..6a6b5ee3 100644 --- a/server/web_push.go +++ b/server/web_push.go @@ -31,10 +31,9 @@ const ( INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` - deleteWebPushSubscriptionByTopicAndEndpointQuery = `DELETE FROM subscriptions WHERE topic = ? AND endpoint = ?` - deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` + deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` @@ -169,8 +168,7 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du return nil, err } - err = tx.Commit() - if err != nil { + if err = tx.Commit(); err != nil { return nil, err } diff --git a/web/src/app/Api.js b/web/src/app/Api.js index b763346b..d4281d33 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -6,7 +6,7 @@ import { topicUrlAuth, topicUrlJsonPoll, topicUrlJsonPollWithSince, - webPushSubscriptionsUrl, + accountWebPushUrl, } from "./utils"; import userManager from "./UserManager"; import { fetchOrThrow } from "./errors"; @@ -117,7 +117,7 @@ class Api { async updateWebPushSubscriptions(topics, browserSubscription) { const user = await userManager.get(config.base_url); - const url = webPushSubscriptionsUrl(config.base_url); + const url = accountWebPushUrl(config.base_url); console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); const response = await fetch(url, { diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index b157ef46..8ef1a1ae 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -52,17 +52,14 @@ class Notifier { if (!this.pushPossible()) { throw new Error("Unsupported or denied"); } - const pushManager = await this.pushManager(); - const existingSubscription = await pushManager.getSubscription(); - if (existingSubscription) { return existingSubscription; } - // create a new subscription only if web push is enabled - // it is possible that web push was previously enabled and then disabled again + // Create a new subscription only if web push is enabled. + // It is possible that web push was previously enabled and then disabled again // in which case there would be an existingSubscription. // but if it was _not_ enabled previously, we reach here, and only create a new // subscription if it is now enabled. diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 74488bc0..592db6f9 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -113,7 +113,6 @@ class SubscriptionManager { async refreshWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); - const browserSubscription = await notifier.getBrowserSubscription(); if (!browserSubscription) { diff --git a/web/src/app/utils.js b/web/src/app/utils.js index d5b3e976..8a1026d7 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -21,7 +21,6 @@ export const topicUrlJsonPoll = (baseUrl, topic) => `${topicUrlJson(baseUrl, top export const topicUrlJsonPollWithSince = (baseUrl, topic, since) => `${topicUrlJson(baseUrl, topic)}?poll=1&since=${since}`; export const topicUrlAuth = (baseUrl, topic) => `${topicUrl(baseUrl, topic)}/auth`; export const topicShortUrl = (baseUrl, topic) => shortUrl(topicUrl(baseUrl, topic)); -export const webPushSubscriptionsUrl = (baseUrl) => `${baseUrl}/v1/account/web-push`; export const accountUrl = (baseUrl) => `${baseUrl}/v1/account`; export const accountPasswordUrl = (baseUrl) => `${baseUrl}/v1/account/password`; export const accountTokenUrl = (baseUrl) => `${baseUrl}/v1/account/token`; @@ -33,6 +32,7 @@ export const accountBillingSubscriptionUrl = (baseUrl) => `${baseUrl}/v1/account export const accountBillingPortalUrl = (baseUrl) => `${baseUrl}/v1/account/billing/portal`; export const accountPhoneUrl = (baseUrl) => `${baseUrl}/v1/account/phone`; export const accountPhoneVerifyUrl = (baseUrl) => `${baseUrl}/v1/account/phone/verify`; +export const accountWebPushUrl = (baseUrl) => `${baseUrl}/v1/account/webpush`; export const validUrl = (url) => url.match(/^https?:\/\/.+/); From 9d38aeb863551d939efdf27f5c751fe14d481230 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 21:45:52 -0400 Subject: [PATCH 052/305] Docs in server.yml, schemaVersion table, refactoring --- cmd/{web_push.go => webpush.go} | 0 cmd/{web_push_test.go => webpush_test.go} | 0 server/server.yml | 28 ++++++++++++------- server/server_manager.go | 4 +-- server/server_web_push.go | 33 +++++++++++++++-------- server/server_web_push_test.go | 13 +++++---- server/{web_push.go => webpush_store.go} | 33 ++++++++++++++++------- 7 files changed, 74 insertions(+), 37 deletions(-) rename cmd/{web_push.go => webpush.go} (100%) rename cmd/{web_push_test.go => webpush_test.go} (100%) rename server/{web_push.go => webpush_store.go} (81%) diff --git a/cmd/web_push.go b/cmd/webpush.go similarity index 100% rename from cmd/web_push.go rename to cmd/webpush.go diff --git a/cmd/web_push_test.go b/cmd/webpush_test.go similarity index 100% rename from cmd/web_push_test.go rename to cmd/webpush_test.go diff --git a/server/server.yml b/server/server.yml index 0afd4b43..37efb74a 100644 --- a/server/server.yml +++ b/server/server.yml @@ -38,15 +38,6 @@ # # firebase-key-file: -# Enable web push -# -# Run "ntfy webpush keys" to generate the keys -# -# web-push-public-key: -# web-push-private-key: -# web-push-subscriptions-file: -# web-push-email-address: - # If "cache-file" is set, messages are cached in a local SQLite database instead of only in-memory. # This allows for service restarts without losing messages in support of the since= parameter. # @@ -153,6 +144,25 @@ # smtp-server-domain: # smtp-server-addr-prefix: +# Web Push support (background notifications for browsers) +# +# If enabled, allows ntfy to receive push notifications, even when the ntfy web app is closed. When enabled, the user +# can enable background notifications. Once enabled by the user, ntfy will forward published messages to the push +# endpoint, which will then forward it to the browser. +# +# You must configure all settings below to enable Web Push. +# Run "ntfy webpush keys" to generate the keys. +# +# - web-push-public-key is the generated VAPID public key, e.g. AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890 +# - web-push-private-key is the generated VAPID private key, e.g. AA2BB1234567890abcdefzxcvbnm1234567890 +# - web-push-subscriptions-file is a database file to keep track of browser subscription endpoints, e.g. `/var/cache/ntfy/webpush.db` +# - web-push-email-address is the admin email address send to the push provider, e.g. `sysadmin@example.com` +# +# web-push-public-key: +# web-push-private-key: +# web-push-subscriptions-file: +# web-push-email-address: + # If enabled, ntfy can perform voice calls via Twilio via the "X-Call" header. # # - twilio-account is the Twilio account SID, e.g. AC12345beefbeef67890beefbeef122586 diff --git a/server/server_manager.go b/server/server_manager.go index 97572a55..b065aff1 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,9 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - if s.config.WebPushPublicKey != "" { - s.expireOrNotifyOldSubscriptions() - } + s.pruneOrNotifyWebPushSubscriptions() // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index 20bd4e7c..37754db2 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -78,28 +78,39 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { // TODO this should return error // TODO rate limiting -func (s *Server) expireOrNotifyOldSubscriptions() { +func (s *Server) pruneOrNotifyWebPushSubscriptions() { + if s.config.WebPushPublicKey == "" { + return + } + go func() { + if err := s.pruneOrNotifyWebPushSubscriptionsInternal(); err != nil { + log.Tag(tagWebPush).Err(err).Warn("Unable to prune or notify web push subscriptions") + } + }() +} + +func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") - return + return err } else if len(subscriptions) == 0 { - return + return nil } payload, err := json.Marshal(newWebPushSubscriptionExpiringPayload()) if err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") - return + return err } - go func() { - for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} - if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { - log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") - } + for _, subscription := range subscriptions { + ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} + if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") + return err } - }() + } log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + return nil } func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 57c52a0d..3255662c 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -149,7 +149,7 @@ func TestServer_WebPush_Publish(t *testing.T) { }) } -func TestServer_WebPush_PublishExpire(t *testing.T) { +func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool @@ -201,7 +201,7 @@ func TestServer_WebPush_Expiry(t *testing.T) { _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") require.Nil(t, err) - s.expireOrNotifyOldSubscriptions() + s.pruneOrNotifyWebPushSubscriptions() requireSubscriptionCount(t, s, "test-topic", 1) waitFor(t, func() bool { @@ -211,8 +211,12 @@ func TestServer_WebPush_Expiry(t *testing.T) { _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") require.Nil(t, err) - s.expireOrNotifyOldSubscriptions() - requireSubscriptionCount(t, s, "test-topic", 0) + s.pruneOrNotifyWebPushSubscriptions() + waitFor(t, func() bool { + subs, err := s.webPush.SubscriptionsForTopic("test-topic") + require.Nil(t, err) + return len(subs) == 0 + }) } func payloadForTopics(t *testing.T, topics []string, endpoint string) string { @@ -246,6 +250,5 @@ func addSubscription(t *testing.T, s *Server, topic string, url string) { func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { subs, err := s.webPush.SubscriptionsForTopic("test-topic") require.Nil(t, err) - require.Len(t, subs, expectedLength) } diff --git a/server/web_push.go b/server/webpush_store.go similarity index 81% rename from server/web_push.go rename to server/webpush_store.go index 6a6b5ee3..86d9eea1 100644 --- a/server/web_push.go +++ b/server/webpush_store.go @@ -22,11 +22,16 @@ const ( updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, warning_sent BOOLEAN DEFAULT FALSE ); + CREATE TABLE IF NOT EXISTS schemaVersion ( + id INT PRIMARY KEY, + version INT NOT NULL + ); CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); COMMIT; ` + insertWebPushSubscriptionQuery = ` INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) VALUES (?, ?, ?, ?, ?) @@ -39,8 +44,13 @@ const ( selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` +) - selectWebPushSubscriptionsCountQuery = `SELECT COUNT(*) FROM subscriptions` +// Schema management queries +const ( + currentWebPushSchemaVersion = 1 + insertWebPushSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)` + selectWebPushSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1` ) type webPushStore struct { @@ -52,7 +62,7 @@ func newWebPushStore(filename string) (*webPushStore, error) { if err != nil { return nil, err } - if err := setupSubscriptionsDB(db); err != nil { + if err := setupWebPushDB(db); err != nil { return nil, err } return &webPushStore{ @@ -60,33 +70,38 @@ func newWebPushStore(filename string) (*webPushStore, error) { }, nil } -func setupSubscriptionsDB(db *sql.DB) error { - // If 'subscriptions' table does not exist, this must be a new database - rows, err := db.Query(selectWebPushSubscriptionsCountQuery) +func setupWebPushDB(db *sql.DB) error { + // If 'schemaVersion' table does not exist, this must be a new database + rows, err := db.Query(selectWebPushSchemaVersionQuery) if err != nil { - return setupNewSubscriptionsDB(db) + return setupNewWebPushDB(db) } return rows.Close() } -func setupNewSubscriptionsDB(db *sql.DB) error { +func setupNewWebPushDB(db *sql.DB) error { if _, err := db.Exec(createWebPushSubscriptionsTableQuery); err != nil { return err } + if _, err := db.Exec(insertWebPushSchemaVersion, currentWebPushSchemaVersion); err != nil { + return err + } return nil } +// UpdateSubscriptions updates the subscriptions for the given topics and user ID. It always first deletes all +// existing entries for a given endpoint. func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if err = c.RemoveByEndpoint(subscription.Endpoint); err != nil { + if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, subscription.Endpoint); err != nil { return err } for _, topic := range topics { - if err := c.AddSubscription(topic, userID, subscription); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, subscription.Endpoint, subscription.Keys.Auth, subscription.Keys.P256dh); err != nil { return err } } From 966ffe1669a799978de7399a292bc98d16d12970 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 8 Jun 2023 23:09:38 -0400 Subject: [PATCH 053/305] More refactor --- server/server_account.go | 2 +- server/server_web_push.go | 27 ++++++------ server/server_web_push_test.go | 68 +++++++++++------------------ server/types.go | 26 ++++++++--- server/webpush_store.go | 79 +++++++++++++--------------------- server/webpush_store_test.go | 12 ++++++ web/src/app/Api.js | 22 +++++----- web/src/app/Notifier.js | 4 +- 8 files changed, 110 insertions(+), 130 deletions(-) create mode 100644 server/webpush_store_test.go diff --git a/server/server_account.go b/server/server_account.go index b42496db..c9ebc702 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -171,7 +171,7 @@ func (s *Server) handleAccountDelete(w http.ResponseWriter, r *http.Request, v * return errHTTPBadRequestIncorrectPasswordConfirmation } if s.webPush != nil { - if err := s.webPush.RemoveByUserID(u.ID); err != nil { + if err := s.webPush.RemoveSubscriptionsByUserID(u.ID); err != nil { logvr(v, r).Err(err).Warn("Error removing web push subscriptions for %s", u.Name) } } diff --git a/server/server_web_push.go b/server/server_web_push.go index 37754db2..1adf5580 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -29,15 +29,15 @@ const ( var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { - payload, err := readJSONWithLimit[webPushSubscriptionPayload](r.Body, jsonBodyBytesLimit, false) - if err != nil || payload.BrowserSubscription.Endpoint == "" || payload.BrowserSubscription.Keys.P256dh == "" || payload.BrowserSubscription.Keys.Auth == "" { + req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) + if err != nil || req.Endpoint == "" || req.P256dh == "" || req.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } else if !webPushEndpointAllowRegex.MatchString(payload.BrowserSubscription.Endpoint) { + } else if !webPushEndpointAllowRegex.MatchString(req.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown - } else if len(payload.Topics) > webPushTopicSubscribeLimit { + } else if len(req.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh } - topics, err := s.topicsFromIDs(payload.Topics...) + topics, err := s.topicsFromIDs(req.Topics...) if err != nil { return err } @@ -50,7 +50,7 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpdateSubscriptions(payload.Topics, v.MaybeUserID(), payload.BrowserSubscription); err != nil { + if err := s.webPush.UpsertSubscription(req.Endpoint, req.Topics, v.MaybeUserID(), req.Auth, req.P256dh); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) @@ -68,16 +68,13 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { return } for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} + ctx := log.Context{"endpoint": subscription.Endpoint, "username": subscription.UserID, "topic": m.Topic, "message_id": m.ID} if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish web push message") } } } -// TODO this should return error -// TODO rate limiting - func (s *Server) pruneOrNotifyWebPushSubscriptions() { if s.config.WebPushPublicKey == "" { return @@ -103,8 +100,8 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { return err } for _, subscription := range subscriptions { - ctx := log.Context{"endpoint": subscription.BrowserSubscription.Endpoint} - if err := s.sendWebPushNotification(payload, &subscription, &ctx); err != nil { + ctx := log.Context{"endpoint": subscription.Endpoint} + if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") return err } @@ -114,7 +111,7 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { } func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscription, ctx *log.Context) error { - resp, err := webpush.SendNotification(message, &sub.BrowserSubscription, &webpush.Options{ + resp, err := webpush.SendNotification(message, sub.ToSubscription(), &webpush.Options{ Subscriber: s.config.WebPushEmailAddress, VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, @@ -122,14 +119,14 @@ func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscriptio }) if err != nil { log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + if err := s.webPush.RemoveSubscriptionsByEndpoint(sub.Endpoint); err != nil { return err } return err } if (resp.StatusCode < 200 || resp.StatusCode > 299) && resp.StatusCode != 429 { log.Tag(tagWebPush).Fields(*ctx).Field("response_code", resp.StatusCode).Debug("Unable to publish web push message, unexpected response") - if err := s.webPush.RemoveByEndpoint(sub.BrowserSubscription.Endpoint); err != nil { + if err := s.webPush.RemoveSubscriptionsByEndpoint(sub.Endpoint); err != nil { return err } return errHTTPInternalErrorWebPushUnableToPublish.Fields(*ctx) diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 3255662c..c60ceaad 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -3,27 +3,25 @@ package server import ( "encoding/json" "fmt" + "github.com/stretchr/testify/require" + "heckel.io/ntfy/user" + "heckel.io/ntfy/util" "io" "net/http" "net/http/httptest" "strings" "sync/atomic" "testing" - - "github.com/SherClockHolmes/webpush-go" - "github.com/stretchr/testify/require" - "heckel.io/ntfy/user" - "heckel.io/ntfy/util" ) const ( - defaultEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" + testWebPushEndpoint = "https://updates.push.services.mozilla.com/wpush/v1/AAABBCCCDDEEEFFF" ) func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -31,9 +29,9 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { require.Nil(t, err) require.Len(t, subs, 1) - require.Equal(t, subs[0].BrowserSubscription.Endpoint, defaultEndpoint) - require.Equal(t, subs[0].BrowserSubscription.Keys.P256dh, "p256dh-key") - require.Equal(t, subs[0].BrowserSubscription.Keys.Auth, "auth-key") + require.Equal(t, subs[0].Endpoint, testWebPushEndpoint) + require.Equal(t, subs[0].P256dh, "p256dh-key") + require.Equal(t, subs[0].Auth, "auth-key") require.Equal(t, subs[0].UserID, "") } @@ -53,7 +51,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -61,10 +59,10 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - addSubscription(t, s, "test-topic", defaultEndpoint) + addSubscription(t, s, testWebPushEndpoint, "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -79,7 +77,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -96,7 +94,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), nil) + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -109,7 +107,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, defaultEndpoint), map[string]string{ + response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -129,7 +127,6 @@ func TestServer_WebPush_Publish(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool - pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) @@ -140,8 +137,7 @@ func TestServer_WebPush_Publish(t *testing.T) { })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") - + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") request(t, s, "PUT", "/test-topic", "web push test", nil) waitFor(t, func() bool { @@ -153,19 +149,15 @@ func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) var received atomic.Bool - pushService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { _, err := io.ReadAll(r.Body) require.Nil(t, err) - // Gone - w.WriteHeader(410) + w.WriteHeader(http.StatusGone) received.Store(true) })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") - addSubscription(t, s, "test-topic-abc", pushService.URL+"/push-receive") - + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic", "test-topic-abc") requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) @@ -195,7 +187,7 @@ func TestServer_WebPush_Expiry(t *testing.T) { })) defer pushService.Close() - addSubscription(t, s, "test-topic", pushService.URL+"/push-receive") + addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") @@ -225,30 +217,18 @@ func payloadForTopics(t *testing.T, topics []string, endpoint string) string { return fmt.Sprintf(`{ "topics": %s, - "browser_subscription":{ - "endpoint": "%s", - "keys": { - "p256dh": "p256dh-key", - "auth": "auth-key" - } - } + "endpoint": "%s", + "p256dh": "p256dh-key", + "auth": "auth-key" }`, topicsJSON, endpoint) } -func addSubscription(t *testing.T, s *Server, topic string, url string) { - err := s.webPush.AddSubscription(topic, "", webpush.Subscription{ - Endpoint: url, - Keys: webpush.Keys{ - // connected to a local test VAPID key, not a leak! - Auth: "kSC3T8aN1JCQxxPdrFLrZg", - P256dh: "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", - }, - }) - require.Nil(t, err) +func addSubscription(t *testing.T, s *Server, endpoint string, topics ...string) { + require.Nil(t, s.webPush.UpsertSubscription(endpoint, topics, "", "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE")) // Test auth and p256dh } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { - subs, err := s.webPush.SubscriptionsForTopic("test-topic") + subs, err := s.webPush.SubscriptionsForTopic(topic) require.Nil(t, err) require.Len(t, subs, expectedLength) } diff --git a/server/types.go b/server/types.go index a8a01301..99f1c4f7 100644 --- a/server/types.go +++ b/server/types.go @@ -1,6 +1,7 @@ package server import ( + "github.com/SherClockHolmes/webpush-go" "net/http" "net/netip" "time" @@ -8,7 +9,6 @@ import ( "heckel.io/ntfy/log" "heckel.io/ntfy/user" - "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/util" ) @@ -467,6 +467,13 @@ type apiStripeSubscriptionDeletedEvent struct { Customer string `json:"customer"` } +type apiWebPushUpdateSubscriptionRequest struct { + Endpoint string `json:"endpoint"` + Auth string `json:"auth"` + P256dh string `json:"p256dh"` + Topics []string `json:"topics"` +} + // List of possible Web Push events const ( webPushMessageEvent = "message" @@ -498,11 +505,18 @@ func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { } type webPushSubscription struct { - BrowserSubscription webpush.Subscription - UserID string + Endpoint string + Auth string + P256dh string + UserID string } -type webPushSubscriptionPayload struct { - BrowserSubscription webpush.Subscription `json:"browser_subscription"` - Topics []string `json:"topics"` +func (w *webPushSubscription) ToSubscription() *webpush.Subscription { + return &webpush.Subscription{ + Endpoint: w.Endpoint, + Keys: webpush.Keys{ + Auth: w.Auth, + P256dh: w.P256dh, + }, + } } diff --git a/server/webpush_store.go b/server/webpush_store.go index 86d9eea1..774772be 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "github.com/SherClockHolmes/webpush-go" _ "github.com/mattn/go-sqlite3" // SQLite driver ) @@ -41,7 +40,7 @@ const ( deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` ) @@ -89,65 +88,48 @@ func setupNewWebPushDB(db *sql.DB) error { return nil } -// UpdateSubscriptions updates the subscriptions for the given topics and user ID. It always first deletes all +// UpsertSubscription adds or updates Web Push subscriptions for the given topics and user ID. It always first deletes all // existing entries for a given endpoint. -func (c *webPushStore) UpdateSubscriptions(topics []string, userID string, subscription webpush.Subscription) error { +func (c *webPushStore) UpsertSubscription(endpoint string, topics []string, userID, auth, p256dh string) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, subscription.Endpoint); err != nil { + if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint); err != nil { return err } for _, topic := range topics { - if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, subscription.Endpoint, subscription.Keys.Auth, subscription.Keys.P256dh); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, endpoint, auth, p256dh); err != nil { return err } } return tx.Commit() } -func (c *webPushStore) AddSubscription(topic string, userID string, subscription webpush.Subscription) error { - _, err := c.db.Exec( - insertWebPushSubscriptionQuery, - topic, - userID, - subscription.Endpoint, - subscription.Keys.Auth, - subscription.Keys.P256dh, - ) - return err -} - -func (c *webPushStore) SubscriptionsForTopic(topic string) (subscriptions []*webPushSubscription, err error) { +func (c *webPushStore) SubscriptionsForTopic(topic string) ([]*webPushSubscription, error) { rows, err := c.db.Query(selectWebPushSubscriptionsForTopicQuery, topic) if err != nil { return nil, err } defer rows.Close() - - var data []*webPushSubscription + subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - var userID, endpoint, auth, p256dh string + var endpoint, auth, p256dh, userID string if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, &webPushSubscription{ - UserID: userID, - BrowserSubscription: webpush.Subscription{ - Endpoint: endpoint, - Keys: webpush.Keys{ - Auth: auth, - P256dh: p256dh, - }, - }, + subscriptions = append(subscriptions, &webPushSubscription{ + Endpoint: endpoint, + Auth: auth, + P256dh: p256dh, + UserID: userID, }) } - return data, nil + return subscriptions, nil } -func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) (subscriptions []webPushSubscription, err error) { +func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) ([]*webPushSubscription, error) { // TODO this should be two functions tx, err := c.db.Begin() if err != nil { @@ -166,15 +148,18 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du } defer rows.Close() - var data []webPushSubscription + subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - i := webPushSubscription{} - err = rows.Scan(&i.BrowserSubscription.Endpoint, &i.BrowserSubscription.Keys.Auth, &i.BrowserSubscription.Keys.P256dh) - fmt.Printf("%v+", i) - if err != nil { + var endpoint, auth, p256dh, userID string + if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } - data = append(data, i) + subscriptions = append(subscriptions, &webPushSubscription{ + Endpoint: endpoint, + Auth: auth, + P256dh: p256dh, + UserID: userID, + }) } // also set warning as sent @@ -187,22 +172,16 @@ func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Du return nil, err } - return data, nil + return subscriptions, nil } -func (c *webPushStore) RemoveByEndpoint(endpoint string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByEndpointQuery, - endpoint, - ) +func (c *webPushStore) RemoveSubscriptionsByEndpoint(endpoint string) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint) return err } -func (c *webPushStore) RemoveByUserID(userID string) error { - _, err := c.db.Exec( - deleteWebPushSubscriptionByUserIDQuery, - userID, - ) +func (c *webPushStore) RemoveSubscriptionsByUserID(userID string) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByUserIDQuery, userID) return err } diff --git a/server/webpush_store_test.go b/server/webpush_store_test.go new file mode 100644 index 00000000..28068ebe --- /dev/null +++ b/server/webpush_store_test.go @@ -0,0 +1,12 @@ +package server + +import ( + "github.com/stretchr/testify/require" + "testing" +) + +func newTestWebPushStore(t *testing.T, filename string) *webPushStore { + webPush, err := newWebPushStore(filename) + require.Nil(t, err) + return webPush +} diff --git a/web/src/app/Api.js b/web/src/app/Api.js index d4281d33..43b20a74 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -115,22 +115,22 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async updateWebPushSubscriptions(topics, browserSubscription) { + async updateWebPushSubscriptions(topics, pushSubscription) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); - console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: browserSubscription.endpoint }); - - const response = await fetch(url, { + console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: pushSubscription.endpoint }); + console.log(`[Api] Sending Web Push Subscriptions`, { pushSubscription }); + const serializedSubscription = JSON.parse(JSON.stringify(pushSubscription)); // Ugh ... https://stackoverflow.com/a/40525434/1440785 + await fetchOrThrow(url, { method: "PUT", headers: maybeWithAuth({}, user), - body: JSON.stringify({ topics, browser_subscription: browserSubscription }), + body: JSON.stringify({ + endpoint: serializedSubscription.endpoint, + auth: serializedSubscription.keys.auth, + p256dh: serializedSubscription.keys.p256dh, + topics + }), }); - - if (response.ok) { - return true; - } - - throw new Error(`Unexpected server response ${response.status}`); } } diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 8ef1a1ae..04d51281 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -58,7 +58,7 @@ class Notifier { return existingSubscription; } - // Create a new subscription only if web push is enabled. + // Create a new subscription only if web push is enabled. // It is possible that web push was previously enabled and then disabled again // in which case there would be an existingSubscription. // but if it was _not_ enabled previously, we reach here, and only create a new @@ -76,11 +76,9 @@ class Notifier { async pushManager() { const registration = await navigator.serviceWorker.getRegistration(); - if (!registration) { throw new Error("No service worker registration found"); } - return registration.pushManager; } From 9e4eafe8d5180133f5bf2bcb96dbf6623ae92c17 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 9 Jun 2023 10:03:11 +0200 Subject: [PATCH 054/305] Format --- web/src/app/Api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 43b20a74..43bfe283 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -128,7 +128,7 @@ class Api { endpoint: serializedSubscription.endpoint, auth: serializedSubscription.keys.auth, p256dh: serializedSubscription.keys.p256dh, - topics + topics, }), }); } From 4704b2a0e4d413a3cdc5e7de73418e8d5d9c6212 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 9 Jun 2023 11:32:44 +0200 Subject: [PATCH 055/305] Set default TTL for web push to the cache duration --- server/server_web_push.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/server_web_push.go b/server/server_web_push.go index 1adf5580..0b9ac808 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -116,6 +116,7 @@ func (s *Server) sendWebPushNotification(message []byte, sub *webPushSubscriptio VAPIDPublicKey: s.config.WebPushPublicKey, VAPIDPrivateKey: s.config.WebPushPrivateKey, Urgency: webpush.UrgencyHigh, // iOS requires this to ensure delivery + TTL: int(s.config.CacheDuration.Seconds()), }) if err != nil { log.Tag(tagWebPush).Err(err).Fields(*ctx).Debug("Unable to publish web push message, removing endpoint") From 2e8292a65f5de5354869fb28f5a226ef66c9ff8a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 9 Jun 2023 14:32:34 -0400 Subject: [PATCH 056/305] No real changes, just renames --- web/public/sw.js | 5 ++--- web/src/app/Prefs.js | 4 ++-- web/src/app/Session.js | 6 ++++-- web/src/app/SessionReplica.js | 17 +++++++---------- web/src/app/SubscriptionManager.js | 4 ++-- web/src/app/UserManager.js | 4 ++-- web/src/app/WebPushWorker.js | 2 +- web/src/app/{getDb.js => db.js} | 16 +++++++--------- web/src/components/Account.jsx | 4 ++-- web/src/components/ActionBar.jsx | 4 ++-- 10 files changed, 31 insertions(+), 35 deletions(-) rename web/src/app/{getDb.js => db.js} (64%) diff --git a/web/public/sw.js b/web/public/sw.js index 39d60a8a..6e834367 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -3,7 +3,7 @@ import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; -import { getDbAsync } from "../src/app/getDb"; +import { dbAsync } from "../src/app/db"; import { formatMessage, formatTitleWithDefault } from "../src/app/notificationUtils"; // See WebPushWorker, this is to play a sound on supported browsers, @@ -44,8 +44,7 @@ self.addEventListener("push", (event) => { const { subscription_id: subscriptionId, message } = data; broadcastChannel.postMessage(message); - const db = await getDbAsync(); - + const db = await dbAsync(); const image = message.attachment?.name.match(/\.(png|jpe?g|gif|webp)$/i) ? message.attachment.url : undefined; const actions = message.actions diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 1f1a6d80..ac1d82db 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,4 +1,4 @@ -import getDb from "./getDb"; +import db from "./db"; class Prefs { constructor(db) { @@ -42,5 +42,5 @@ class Prefs { } } -const prefs = new Prefs(getDb()); +const prefs = new Prefs(db()); export default prefs; diff --git a/web/src/app/Session.js b/web/src/app/Session.js index 8affa53c..bc50864b 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,5 +1,9 @@ import sessionReplica from "./SessionReplica"; +/** + * Manages the logged-in user's session and access token. + * The session replica is stored in IndexedDB so that the service worker can access it. + */ class Session { constructor(replica) { this.replica = replica; @@ -8,14 +12,12 @@ class Session { store(username, token) { localStorage.setItem("user", username); localStorage.setItem("token", token); - this.replica.store(username, token); } reset() { localStorage.removeItem("user"); localStorage.removeItem("token"); - this.replica.reset(); } diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js index 808833f6..a68d4c70 100644 --- a/web/src/app/SessionReplica.js +++ b/web/src/app/SessionReplica.js @@ -1,24 +1,21 @@ import Dexie from "dexie"; -// Store to IndexedDB as well so that the -// service worker can access it -// TODO: Probably make everything depend on this and not use localStorage, -// but that's a larger refactoring effort for another PR - +/** + * Replica of the session in IndexedDB. This is used by the service + * worker to access the session. This is a bit of a hack. + */ class SessionReplica { constructor() { const db = new Dexie("session-replica"); - db.version(1).stores({ - keyValueStore: "&key", + kv: "&key", }); - this.db = db; } async store(username, token) { try { - await this.db.keyValueStore.bulkPut([ + await this.db.kv.bulkPut([ { key: "user", value: username }, { key: "token", value: token }, ]); @@ -36,7 +33,7 @@ class SessionReplica { } async username() { - return (await this.db.keyValueStore.get({ key: "user" }))?.value; + return (await this.db.kv.get({ key: "user" }))?.value; } } diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 592db6f9..88b95e7b 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -1,7 +1,7 @@ import api from "./Api"; import notifier from "./Notifier"; import prefs from "./Prefs"; -import getDb from "./getDb"; +import db from "./db"; import { topicUrl } from "./utils"; class SubscriptionManager { @@ -244,4 +244,4 @@ class SubscriptionManager { } } -export default new SubscriptionManager(getDb()); +export default new SubscriptionManager(db()); diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index a3dee0a3..412e41da 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -1,4 +1,4 @@ -import getDb from "./getDb"; +import db from "./db"; import session from "./Session"; class UserManager { @@ -47,4 +47,4 @@ class UserManager { } } -export default new UserManager(getDb()); +export default new UserManager(db()); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPushWorker.js index 4ba0f9e1..b0d319c7 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPushWorker.js @@ -26,7 +26,7 @@ export const useWebPushUpdateWorker = () => { }, [topics, lastTopics]); }; -const intervalMillis = 5 * 60 * 1_000; // 5 minutes +const intervalMillis = 13 * 60 * 1_000; // 13 minutes const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour class WebPushRefreshWorker { diff --git a/web/src/app/getDb.js b/web/src/app/db.js similarity index 64% rename from web/src/app/getDb.js rename to web/src/app/db.js index e52932c7..6a192011 100644 --- a/web/src/app/getDb.js +++ b/web/src/app/db.js @@ -8,12 +8,11 @@ import sessionReplica from "./SessionReplica"; // Notes: // - As per docs, we only declare the indexable columns, not all columns -const getDbBase = (username) => { - // The IndexedDB database name is based on the logged-in user - const dbName = username ? `ntfy-${username}` : "ntfy"; +const createDatabase = (username) => { + const dbName = username ? `ntfy-${username}` : "ntfy"; // IndexedDB database is based on the logged-in user const db = new Dexie(dbName); - db.version(2).stores({ + db.version(1).stores({ subscriptions: "&id,baseUrl,[baseUrl+mutedUntil]", notifications: "&id,subscriptionId,time,new,[subscriptionId+new]", // compound key for query performance users: "&baseUrl,username", @@ -23,12 +22,11 @@ const getDbBase = (username) => { return db; }; -export const getDbAsync = async () => { +export const dbAsync = async () => { const username = await sessionReplica.username(); - - return getDbBase(username); + return createDatabase(username); }; -const getDb = () => getDbBase(session.username()); +export const db = () => createDatabase(session.username()); -export default getDb; +export default db; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 400ca08c..47449515 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -48,7 +48,7 @@ import routes from "./routes"; import { formatBytes, formatShortDate, formatShortDateTime, openUrl } from "../app/utils"; import accountApi, { LimitBasis, Role, SubscriptionInterval, SubscriptionStatus } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; -import getDb from "../app/getDb"; +import db from "../app/db"; import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import DialogFooter from "./DialogFooter"; @@ -1078,7 +1078,7 @@ const DeleteAccountDialog = (props) => { const handleSubmit = async () => { try { await accountApi.delete(password); - await getDb().delete(); + await db().delete(); console.debug(`[Account] Account deleted`); session.resetAndRedirect(routes.app); } catch (e) { diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index f0b031a3..a8cb18ce 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -13,7 +13,7 @@ import session from "../app/Session"; import logo from "../img/ntfy.svg"; import subscriptionManager from "../app/SubscriptionManager"; import routes from "./routes"; -import getDb from "../app/getDb"; +import db from "../app/db"; import { topicDisplayName } from "../app/utils"; import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; @@ -121,7 +121,7 @@ const ProfileIcon = () => { const handleLogout = async () => { try { await accountApi.logout(); - await getDb().delete(); + await db().delete(); } finally { session.resetAndRedirect(routes.app); } From 1abcc88fce53c041767f025fa89734ab5ed685ed Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 9 Jun 2023 23:17:48 -0400 Subject: [PATCH 057/305] Add subscription_topic table, change updated_at type to INT, split expire function --- server/config.go | 4 +- server/server_manager.go | 2 +- server/server_web_push.go | 25 +++-- server/server_web_push_test.go | 11 ++- server/types.go | 1 + server/webpush_store.go | 169 ++++++++++++++++++++------------- 6 files changed, 131 insertions(+), 81 deletions(-) diff --git a/server/config.go b/server/config.go index 3d779fba..3bdda835 100644 --- a/server/config.go +++ b/server/config.go @@ -23,10 +23,10 @@ const ( DefaultStripePriceCacheDuration = 3 * time.Hour // Time to keep Stripe prices cached in memory before a refresh is needed ) -// Defines default web push settings +// Defines default Web Push settings const ( DefaultWebPushExpiryWarningDuration = 7 * 24 * time.Hour - DefaultWebPushExpiryDuration = DefaultWebPushExpiryWarningDuration + 24*time.Hour + DefaultWebPushExpiryDuration = 9 * 24 * time.Hour ) // Defines all global and per-visitor limits diff --git a/server/server_manager.go b/server/server_manager.go index b065aff1..66d449de 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -15,7 +15,7 @@ func (s *Server) execManager() { s.pruneTokens() s.pruneAttachments() s.pruneMessages() - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() // Message count per topic var messagesCached int diff --git a/server/server_web_push.go b/server/server_web_push.go index 0b9ac808..30a2cd02 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -50,7 +50,7 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * } } } - if err := s.webPush.UpsertSubscription(req.Endpoint, req.Topics, v.MaybeUserID(), req.Auth, req.P256dh); err != nil { + if err := s.webPush.UpsertSubscription(req.Endpoint, req.Auth, req.P256dh, v.MaybeUserID(), req.Topics); err != nil { return err } return s.writeJSON(w, newSuccessResponse()) @@ -75,21 +75,25 @@ func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { } } -func (s *Server) pruneOrNotifyWebPushSubscriptions() { +func (s *Server) pruneAndNotifyWebPushSubscriptions() { if s.config.WebPushPublicKey == "" { return } go func() { - if err := s.pruneOrNotifyWebPushSubscriptionsInternal(); err != nil { + if err := s.pruneAndNotifyWebPushSubscriptionsInternal(); err != nil { log.Tag(tagWebPush).Err(err).Warn("Unable to prune or notify web push subscriptions") } }() } -func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { - subscriptions, err := s.webPush.ExpireAndGetExpiringSubscriptions(s.config.WebPushExpiryWarningDuration, s.config.WebPushExpiryDuration) +func (s *Server) pruneAndNotifyWebPushSubscriptionsInternal() error { + // Expire old subscriptions + if err := s.webPush.RemoveExpiredSubscriptions(s.config.WebPushExpiryDuration); err != nil { + return err + } + // Notify subscriptions that will expire soon + subscriptions, err := s.webPush.SubscriptionsExpiring(s.config.WebPushExpiryWarningDuration) if err != nil { - log.Tag(tagWebPush).Err(err).Warn("Unable to publish expiry imminent warning") return err } else if len(subscriptions) == 0 { return nil @@ -99,14 +103,19 @@ func (s *Server) pruneOrNotifyWebPushSubscriptionsInternal() error { log.Tag(tagWebPush).Err(err).Warn("Unable to marshal expiring payload") return err } + warningSent := make([]*webPushSubscription, 0) for _, subscription := range subscriptions { ctx := log.Context{"endpoint": subscription.Endpoint} if err := s.sendWebPushNotification(payload, subscription, &ctx); err != nil { log.Tag(tagWebPush).Err(err).Fields(ctx).Warn("Unable to publish expiry imminent warning") - return err + continue } + warningSent = append(warningSent, subscription) } - log.Tag(tagWebPush).Debug("Expiring old subscriptions and published %d expiry imminent warnings", len(subscriptions)) + if err := s.webPush.MarkExpiryWarningSent(warningSent); err != nil { + return err + } + log.Tag(tagWebPush).Debug("Expired old subscriptions and published %d expiry imminent warnings", len(subscriptions)) return nil } diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index c60ceaad..82ad7215 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -12,6 +12,7 @@ import ( "strings" "sync/atomic" "testing" + "time" ) const ( @@ -190,20 +191,20 @@ func TestServer_WebPush_Expiry(t *testing.T) { addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - _, err := s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-7 days')") + _, err := s.webPush.db.Exec("UPDATE subscription SET updated_at = ?", time.Now().Add(-7*24*time.Hour).Unix()) require.Nil(t, err) - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() requireSubscriptionCount(t, s, "test-topic", 1) waitFor(t, func() bool { return received.Load() }) - _, err = s.webPush.db.Exec("UPDATE subscriptions SET updated_at = datetime('now', '-8 days')") + _, err = s.webPush.db.Exec("UPDATE subscription SET updated_at = ?", time.Now().Add(-9*24*time.Hour).Unix()) require.Nil(t, err) - s.pruneOrNotifyWebPushSubscriptions() + s.pruneAndNotifyWebPushSubscriptions() waitFor(t, func() bool { subs, err := s.webPush.SubscriptionsForTopic("test-topic") require.Nil(t, err) @@ -224,7 +225,7 @@ func payloadForTopics(t *testing.T, topics []string, endpoint string) string { } func addSubscription(t *testing.T, s *Server, endpoint string, topics ...string) { - require.Nil(t, s.webPush.UpsertSubscription(endpoint, topics, "", "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE")) // Test auth and p256dh + require.Nil(t, s.webPush.UpsertSubscription(endpoint, "kSC3T8aN1JCQxxPdrFLrZg", "BMKKbxdUU_xLS7G1Wh5AN8PvWOjCzkCuKZYb8apcqYrDxjOF_2piggBnoJLQYx9IeSD70fNuwawI3e9Y8m3S3PE", "u_123", topics)) // Test auth and p256dh } func requireSubscriptionCount(t *testing.T, s *Server, topic string, expectedLength int) { diff --git a/server/types.go b/server/types.go index 99f1c4f7..90995878 100644 --- a/server/types.go +++ b/server/types.go @@ -505,6 +505,7 @@ func newWebPushSubscriptionExpiringPayload() webPushControlMessagePayload { } type webPushSubscription struct { + ID string Endpoint string Auth string P256dh string diff --git a/server/webpush_store.go b/server/webpush_store.go index 774772be..6dc1ddef 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -2,47 +2,68 @@ package server import ( "database/sql" - "fmt" + "heckel.io/ntfy/util" "time" _ "github.com/mattn/go-sqlite3" // SQLite driver ) +const ( + subscriptionIDPrefix = "wps_" + subscriptionIDLength = 10 +) + const ( createWebPushSubscriptionsTableQuery = ` BEGIN; - CREATE TABLE IF NOT EXISTS subscriptions ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - topic TEXT NOT NULL, - user_id TEXT, + CREATE TABLE IF NOT EXISTS subscription ( + id TEXT PRIMARY KEY, endpoint TEXT NOT NULL, key_auth TEXT NOT NULL, key_p256dh TEXT NOT NULL, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, - warning_sent BOOLEAN DEFAULT FALSE + user_id TEXT NOT NULL, + updated_at INT NOT NULL, + warned_at INT NOT NULL DEFAULT 0 ); + CREATE UNIQUE INDEX IF NOT EXISTS idx_endpoint ON subscription (endpoint); + CREATE TABLE IF NOT EXISTS subscription_topic ( + subscription_id TEXT NOT NULL, + topic TEXT NOT NULL, + PRIMARY KEY (subscription_id, topic), + FOREIGN KEY (subscription_id) REFERENCES subscription (id) ON DELETE CASCADE + ); + CREATE INDEX IF NOT EXISTS idx_topic ON subscription_topic (topic); CREATE TABLE IF NOT EXISTS schemaVersion ( id INT PRIMARY KEY, version INT NOT NULL - ); - CREATE INDEX IF NOT EXISTS idx_topic ON subscriptions (topic); - CREATE INDEX IF NOT EXISTS idx_endpoint ON subscriptions (endpoint); - CREATE UNIQUE INDEX IF NOT EXISTS idx_topic_endpoint ON subscriptions (topic, endpoint); + ); COMMIT; ` - - insertWebPushSubscriptionQuery = ` - INSERT OR REPLACE INTO subscriptions (topic, user_id, endpoint, key_auth, key_p256dh) - VALUES (?, ?, ?, ?, ?) + builtinStartupQueries = ` + PRAGMA foreign_keys = ON; ` - deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscriptions WHERE endpoint = ?` - deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscriptions WHERE user_id = ?` - deleteWebPushSubscriptionsByAgeQuery = `DELETE FROM subscriptions WHERE warning_sent = 1 AND updated_at <= datetime('now', ?)` - selectWebPushSubscriptionsForTopicQuery = `SELECT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE topic = ?` - selectWebPushSubscriptionsExpiringSoonQuery = `SELECT DISTINCT endpoint, key_auth, key_p256dh, user_id FROM subscriptions WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + selectWebPushSubscriptionIDByEndpoint = `SELECT id FROM subscription WHERE endpoint = ?` + selectWebPushSubscriptionsForTopicQuery = ` + SELECT id, endpoint, key_auth, key_p256dh, user_id + FROM subscription_topic st + JOIN subscription s ON s.id = st.subscription_id + WHERE st.topic = ? + ` + selectWebPushSubscriptionsExpiringSoonQuery = `SELECT id, endpoint, key_auth, key_p256dh, user_id FROM subscription WHERE warned_at = 0 AND updated_at <= ?` + insertWebPushSubscriptionQuery = ` + INSERT INTO subscription (id, endpoint, key_auth, key_p256dh, user_id, updated_at, warned_at) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON CONFLICT (endpoint) + DO UPDATE SET key_auth = excluded.key_auth, key_p256dh = excluded.key_p256dh, user_id = excluded.user_id, updated_at = excluded.updated_at, warned_at = excluded.warned_at + ` + updateWebPushSubscriptionWarningSentQuery = `UPDATE subscription SET warned_at = ? WHERE id = ?` + deleteWebPushSubscriptionByEndpointQuery = `DELETE FROM subscription WHERE endpoint = ?` + deleteWebPushSubscriptionByUserIDQuery = `DELETE FROM subscription WHERE user_id = ?` + deleteWebPushSubscriptionByAgeQuery = `DELETE FROM subscription WHERE updated_at <= ?` // Full table scan! - updateWarningSentQuery = `UPDATE subscriptions SET warning_sent = true WHERE warning_sent = 0 AND updated_at <= datetime('now', ?)` + insertWebPushSubscriptionTopicQuery = `INSERT INTO subscription_topic (subscription_id, topic) VALUES (?, ?)` + deleteWebPushSubscriptionTopicAllQuery = `DELETE FROM subscription_topic WHERE subscription_id = ?` ) // Schema management queries @@ -64,6 +85,9 @@ func newWebPushStore(filename string) (*webPushStore, error) { if err := setupWebPushDB(db); err != nil { return nil, err } + if err := runWebPushStartupQueries(db); err != nil { + return nil, err + } return &webPushStore{ db: db, }, nil @@ -88,19 +112,47 @@ func setupNewWebPushDB(db *sql.DB) error { return nil } +func runWebPushStartupQueries(db *sql.DB) error { + _, err := db.Exec(builtinStartupQueries) + return err +} + // UpsertSubscription adds or updates Web Push subscriptions for the given topics and user ID. It always first deletes all // existing entries for a given endpoint. -func (c *webPushStore) UpsertSubscription(endpoint string, topics []string, userID, auth, p256dh string) error { +func (c *webPushStore) UpsertSubscription(endpoint string, auth, p256dh, userID string, topics []string) error { tx, err := c.db.Begin() if err != nil { return err } defer tx.Rollback() - if _, err := tx.Exec(deleteWebPushSubscriptionByEndpointQuery, endpoint); err != nil { + // Read existing subscription ID for endpoint (or create new ID) + rows, err := tx.Query(selectWebPushSubscriptionIDByEndpoint, endpoint) + if err != nil { + return err + } + defer rows.Close() + var subscriptionID string + if rows.Next() { + if err := rows.Scan(&subscriptionID); err != nil { + return err + } + } else { + subscriptionID = util.RandomStringPrefix(subscriptionIDPrefix, subscriptionIDLength) + } + if err := rows.Close(); err != nil { + return err + } + // Insert or update subscription + updatedAt, warnedAt := time.Now().Unix(), 0 + if _, err = tx.Exec(insertWebPushSubscriptionQuery, subscriptionID, endpoint, auth, p256dh, userID, updatedAt, warnedAt); err != nil { + return err + } + // Replace all subscription topics + if _, err := tx.Exec(deleteWebPushSubscriptionTopicAllQuery, subscriptionID); err != nil { return err } for _, topic := range topics { - if _, err = tx.Exec(insertWebPushSubscriptionQuery, topic, userID, endpoint, auth, p256dh); err != nil { + if _, err = tx.Exec(insertWebPushSubscriptionTopicQuery, subscriptionID, topic); err != nil { return err } } @@ -113,65 +165,47 @@ func (c *webPushStore) SubscriptionsForTopic(topic string) ([]*webPushSubscripti return nil, err } defer rows.Close() - subscriptions := make([]*webPushSubscription, 0) - for rows.Next() { - var endpoint, auth, p256dh, userID string - if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { - return nil, err - } - subscriptions = append(subscriptions, &webPushSubscription{ - Endpoint: endpoint, - Auth: auth, - P256dh: p256dh, - UserID: userID, - }) - } - return subscriptions, nil + return c.subscriptionsFromRows(rows) } -func (c *webPushStore) ExpireAndGetExpiringSubscriptions(warningDuration time.Duration, expiryDuration time.Duration) ([]*webPushSubscription, error) { - // TODO this should be two functions - tx, err := c.db.Begin() - if err != nil { - return nil, err - } - defer tx.Rollback() - - _, err = tx.Exec(deleteWebPushSubscriptionsByAgeQuery, fmt.Sprintf("-%.2f seconds", expiryDuration.Seconds())) - if err != nil { - return nil, err - } - - rows, err := tx.Query(selectWebPushSubscriptionsExpiringSoonQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) +func (c *webPushStore) SubscriptionsExpiring(warnAfter time.Duration) ([]*webPushSubscription, error) { + rows, err := c.db.Query(selectWebPushSubscriptionsExpiringSoonQuery, time.Now().Add(-warnAfter).Unix()) if err != nil { return nil, err } defer rows.Close() + return c.subscriptionsFromRows(rows) +} +func (c *webPushStore) MarkExpiryWarningSent(subscriptions []*webPushSubscription) error { + tx, err := c.db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + for _, subscription := range subscriptions { + if _, err := tx.Exec(updateWebPushSubscriptionWarningSentQuery, time.Now().Unix(), subscription.ID); err != nil { + return err + } + } + return tx.Commit() +} + +func (c *webPushStore) subscriptionsFromRows(rows *sql.Rows) ([]*webPushSubscription, error) { subscriptions := make([]*webPushSubscription, 0) for rows.Next() { - var endpoint, auth, p256dh, userID string - if err = rows.Scan(&endpoint, &auth, &p256dh, &userID); err != nil { + var id, endpoint, auth, p256dh, userID string + if err := rows.Scan(&id, &endpoint, &auth, &p256dh, &userID); err != nil { return nil, err } subscriptions = append(subscriptions, &webPushSubscription{ + ID: id, Endpoint: endpoint, Auth: auth, P256dh: p256dh, UserID: userID, }) } - - // also set warning as sent - _, err = tx.Exec(updateWarningSentQuery, fmt.Sprintf("-%.2f seconds", warningDuration.Seconds())) - if err != nil { - return nil, err - } - - if err = tx.Commit(); err != nil { - return nil, err - } - return subscriptions, nil } @@ -185,6 +219,11 @@ func (c *webPushStore) RemoveSubscriptionsByUserID(userID string) error { return err } +func (c *webPushStore) RemoveExpiredSubscriptions(expireAfter time.Duration) error { + _, err := c.db.Exec(deleteWebPushSubscriptionByAgeQuery, time.Now().Add(-expireAfter).Unix()) + return err +} + func (c *webPushStore) Close() error { return c.db.Close() } From 9d5556c7f554877d38f1ac5f85f4ec51490bd1b0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 20:42:02 -0400 Subject: [PATCH 058/305] Rename things, add comments --- web/src/app/Prefs.js | 4 +-- web/src/app/SubscriptionManager.js | 9 +++--- web/src/app/{WebPushWorker.js => WebPush.js} | 33 ++++++++++++-------- web/src/components/hooks.js | 8 ++--- 4 files changed, 30 insertions(+), 24 deletions(-) rename web/src/app/{WebPushWorker.js => WebPush.js} (69%) diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index ac1d82db..b4cef0ac 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -33,8 +33,8 @@ class Prefs { } async webPushEnabled() { - const obj = await this.db.prefs.get("webPushEnabled"); - return obj?.value ?? false; + const webPushEnabled = await this.db.prefs.get("webPushEnabled"); + return webPushEnabled?.value ?? false; } async setWebPushEnabled(enabled) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 88b95e7b..67b9faa3 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -20,16 +20,15 @@ class SubscriptionManager { ); } + /** List of topics for which Web Push is enabled, excludes internal topics; returns empty list if Web Push is disabled */ async webPushTopics() { // the Promise.resolve wrapper is not superfluous, without it the live query breaks: // https://dexie.org/docs/dexie-react-hooks/useLiveQuery()#calling-non-dexie-apis-from-querier - if (!(await Promise.resolve(notifier.pushEnabled()))) { + const pushEnabled = await Promise.resolve(notifier.pushEnabled()); + if (!pushEnabled) { return []; } - const subscriptions = await this.db.subscriptions.where({ mutedUntil: 0, baseUrl: config.base_url }).toArray(); - - // internal is currently a bool, it could be a 0/1 to be indexable, but for now just filter them out here return subscriptions.filter(({ internal }) => !internal).map(({ topic }) => topic); } @@ -111,7 +110,7 @@ class SubscriptionManager { ); } - async refreshWebPushSubscriptions(presetTopics) { + async updateWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); const browserSubscription = await notifier.getBrowserSubscription(); diff --git a/web/src/app/WebPushWorker.js b/web/src/app/WebPush.js similarity index 69% rename from web/src/app/WebPushWorker.js rename to web/src/app/WebPush.js index b0d319c7..1a9b59eb 100644 --- a/web/src/app/WebPushWorker.js +++ b/web/src/app/WebPush.js @@ -3,21 +3,26 @@ import { useLiveQuery } from "dexie-react-hooks"; import notifier from "./Notifier"; import subscriptionManager from "./SubscriptionManager"; -export const useWebPushUpdateWorker = () => { +const intervalMillis = 13 * 60 * 1_000; // 13 minutes +const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour + +/** + * Updates the Web Push subscriptions when the list of topics changes. + */ +export const useWebPushTopicListener = () => { const topics = useLiveQuery(() => subscriptionManager.webPushTopics()); const [lastTopics, setLastTopics] = useState(); useEffect(() => { - if (!notifier.pushPossible() || JSON.stringify(topics) === JSON.stringify(lastTopics)) { + const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); + if (!notifier.pushPossible() || !topicsChanged) { return; } (async () => { try { console.log("[useWebPushUpdateWorker] Refreshing web push subscriptions"); - - await subscriptionManager.refreshWebPushSubscriptions(topics); - + await subscriptionManager.updateWebPushSubscriptions(topics); setLastTopics(topics); } catch (e) { console.error("[useWebPushUpdateWorker] Error refreshing web push subscriptions", e); @@ -26,10 +31,13 @@ export const useWebPushUpdateWorker = () => { }, [topics, lastTopics]); }; -const intervalMillis = 13 * 60 * 1_000; // 13 minutes -const updateIntervalMillis = 60 * 60 * 1_000; // 1 hour - -class WebPushRefreshWorker { +/** + * Helper class for Web Push that does three things: + * 1. Updates the Web Push subscriptions on a schedule + * 2. Updates the Web Push subscriptions when the window is minimised / app switched + * 3. Listens to the broadcast channel from the service worker to play a sound when a message comes in + */ +class WebPushWorker { constructor() { this.timer = null; this.lastUpdate = null; @@ -43,7 +51,6 @@ class WebPushRefreshWorker { } this.timer = setInterval(() => this.updateSubscriptions(), intervalMillis); - this.broadcastChannel = new BroadcastChannel("web-push-broadcast"); this.broadcastChannel.addEventListener("message", this.messageHandler); @@ -60,7 +67,7 @@ class WebPushRefreshWorker { } onMessage() { - notifier.playSound(); + notifier.playSound(); // Service Worker cannot play sound, so we do it here! } onVisibilityChange() { @@ -75,10 +82,10 @@ class WebPushRefreshWorker { } if (!this.lastUpdate || Date.now() - this.lastUpdate > updateIntervalMillis) { - await subscriptionManager.refreshWebPushSubscriptions(); + await subscriptionManager.updateWebPushSubscriptions(); this.lastUpdate = Date.now(); } } } -export const webPushRefreshWorker = new WebPushRefreshWorker(); +export const webPush = new WebPushWorker(); diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 815f0596..8da8fdf0 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -9,7 +9,7 @@ import pruner from "../app/Pruner"; import session from "../app/Session"; import accountApi from "../app/AccountApi"; import { UnauthorizedError } from "../app/errors"; -import { webPushRefreshWorker, useWebPushUpdateWorker } from "../app/WebPushWorker"; +import { webPush, useWebPushTopicListener } from "../app/WebPush"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -134,18 +134,18 @@ const stopWorkers = () => { poller.stopWorker(); pruner.stopWorker(); accountApi.stopWorker(); - webPushRefreshWorker.stopWorker(); + webPush.stopWorker(); }; const startWorkers = () => { poller.startWorker(); pruner.startWorker(); accountApi.startWorker(); - webPushRefreshWorker.startWorker(); + webPush.startWorker(); }; export const useBackgroundProcesses = () => { - useWebPushUpdateWorker(); + useWebPushTopicListener(); useEffect(() => { console.log("[useBackgroundProcesses] mounting"); From eb220544a371617e2cdb25bd7675fe5141f0ac4b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 20:51:24 -0400 Subject: [PATCH 059/305] Change wording in prefs based on setting --- web/public/static/langs/en.json | 9 +++++---- web/src/components/Preferences.jsx | 6 +++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 9571272f..89ca8931 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -330,6 +330,11 @@ "prefs_notifications_delete_after_one_day_description": "Notifications are auto-deleted after one day", "prefs_notifications_delete_after_one_week_description": "Notifications are auto-deleted after one week", "prefs_notifications_delete_after_one_month_description": "Notifications are auto-deleted after one month", + "prefs_notifications_web_push_title": "Background notifications", + "prefs_notifications_web_push_enabled_description": "Notifications are received when web app is not running via Web Push", + "prefs_notifications_web_push_disabled_description": "Notification are only received when web app is running", + "prefs_notifications_web_push_enabled": "Enabled", + "prefs_notifications_web_push_disabled": "Disabled", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", @@ -368,10 +373,6 @@ "prefs_reservations_dialog_description": "Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_dialog_topic_label": "Topic", "prefs_reservations_dialog_access_label": "Access", - "prefs_notifications_web_push_title": "Background notifications", - "prefs_notifications_web_push_description": "Receive notifications in the background via Web Push, even when app is not running", - "prefs_notifications_web_push_enabled": "Enabled", - "prefs_notifications_web_push_disabled": "Disabled", "reservation_delete_dialog_description": "Removing a reservation gives up ownership over the topic, and allows others to reserve it. You can keep, or delete existing messages and attachments.", "reservation_delete_dialog_action_keep_title": "Keep cached messages and attachments", "reservation_delete_dialog_action_keep_description": "Messages and attachments that are cached on the server will become publicly visible for people with knowledge of the topic name.", diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 7944f9be..5cac0c5a 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -237,7 +237,7 @@ const DeleteAfter = () => { const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; - const defaultEnabled = useLiveQuery(async () => prefs.webPushEnabled()); + const enabled = useLiveQuery(async () => prefs.webPushEnabled()); const handleChange = async (ev) => { await prefs.setWebPushEnabled(ev.target.value); }; @@ -247,9 +247,9 @@ const WebPushEnabled = () => { } return ( - + - {t("prefs_notifications_web_push_enabled")} {t("prefs_notifications_web_push_disabled")} From 58992fc795dc0367c4081071190a1441457a1fae Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 21:09:01 -0400 Subject: [PATCH 060/305] Make DELETE endpoint, add different UI description --- server/server.go | 6 ++++-- server/server_web_push.go | 11 +++++++++++ server/server_web_push_test.go | 18 +++++++++--------- web/src/app/Api.js | 21 +++++++++++++++++---- web/src/app/SubscriptionManager.js | 7 ++++++- 5 files changed, 47 insertions(+), 16 deletions(-) diff --git a/server/server.go b/server/server.go index c9b95ba6..d053b3d3 100644 --- a/server/server.go +++ b/server/server.go @@ -490,6 +490,10 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.ensureUser(s.ensureCallsEnabled(s.withAccountSync(s.handleAccountPhoneNumberAdd)))(w, r, v) } else if r.Method == http.MethodDelete && r.URL.Path == apiAccountPhonePath { return s.ensureUser(s.ensureCallsEnabled(s.withAccountSync(s.handleAccountPhoneNumberDelete)))(w, r, v) + } else if r.Method == http.MethodPost && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) + } else if r.Method == http.MethodDelete && apiAccountWebPushPath == r.URL.Path { + return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushDelete))(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiStatsPath { return s.handleStats(w, r, v) } else if r.Method == http.MethodGet && r.URL.Path == apiTiersPath { @@ -524,8 +528,6 @@ func (s *Server) handleInternal(w http.ResponseWriter, r *http.Request, v *visit return s.limitRequests(s.authorizeTopicRead(s.handleSubscribeWS))(w, r, v) } else if r.Method == http.MethodGet && authPathRegex.MatchString(r.URL.Path) { return s.limitRequests(s.authorizeTopicRead(s.handleTopicAuth))(w, r, v) - } else if r.Method == http.MethodPut && apiAccountWebPushPath == r.URL.Path { - return s.ensureWebPushEnabled(s.limitRequests(s.handleWebPushUpdate))(w, r, v) } else if r.Method == http.MethodGet && (topicPathRegex.MatchString(r.URL.Path) || externalTopicPathRegex.MatchString(r.URL.Path)) { return s.ensureWebEnabled(s.handleTopic)(w, r, v) } diff --git a/server/server_web_push.go b/server/server_web_push.go index 30a2cd02..d0da147f 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -56,6 +56,17 @@ func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v * return s.writeJSON(w, newSuccessResponse()) } +func (s *Server) handleWebPushDelete(w http.ResponseWriter, r *http.Request, _ *visitor) error { + req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) + if err != nil || req.Endpoint == "" { + return errHTTPBadRequestWebPushSubscriptionInvalid + } + if err := s.webPush.RemoveSubscriptionsByEndpoint(req.Endpoint); err != nil { + return err + } + return s.writeJSON(w, newSuccessResponse()) +} + func (s *Server) publishToWebPushEndpoints(v *visitor, m *message) { subscriptions, err := s.webPush.SubscriptionsForTopic(m.Topic) if err != nil { diff --git a/server/server_web_push_test.go b/server/server_web_push_test.go index 82ad7215..7db82b8e 100644 --- a/server/server_web_push_test.go +++ b/server/server_web_push_test.go @@ -22,7 +22,7 @@ const ( func TestServer_WebPush_TopicAdd(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -39,7 +39,7 @@ func TestServer_WebPush_TopicAdd(t *testing.T) { func TestServer_WebPush_TopicAdd_InvalidEndpoint(t *testing.T) { s := newTestServer(t, newTestConfigWithWebPush(t)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, "https://ddos-target.example.com/webpush"), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40039,"http":400,"error":"invalid request: web push endpoint unknown"}`+"\n", response.Body.String()) } @@ -52,7 +52,7 @@ func TestServer_WebPush_TopicAdd_TooManyTopics(t *testing.T) { topicList[i] = util.RandomString(5) } - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, topicList, testWebPushEndpoint), nil) require.Equal(t, 400, response.Code) require.Equal(t, `{"code":40040,"http":400,"error":"invalid request: too many web push topic subscriptions"}`+"\n", response.Body.String()) } @@ -63,7 +63,7 @@ func TestServer_WebPush_TopicUnsubscribe(t *testing.T) { addSubscription(t, s, testWebPushEndpoint, "test-topic") requireSubscriptionCount(t, s, "test-topic", 1) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{}, testWebPushEndpoint), nil) require.Equal(t, 200, response.Code) require.Equal(t, `{"success":true}`+"\n", response.Body.String()) @@ -78,7 +78,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Allowed(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) require.Equal(t, 200, response.Code) @@ -95,7 +95,7 @@ func TestServer_WebPush_TopicSubscribeProtected_Denied(t *testing.T) { config.AuthDefault = user.PermissionDenyAll s := newTestServer(t, config) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), nil) require.Equal(t, 403, response.Code) requireSubscriptionCount(t, s, "test-topic", 0) @@ -108,7 +108,7 @@ func TestServer_WebPush_DeleteAccountUnsubscribe(t *testing.T) { require.Nil(t, s.userManager.AddUser("ben", "ben", user.RoleUser)) require.Nil(t, s.userManager.AllowAccess("ben", "test-topic", user.PermissionReadWrite)) - response := request(t, s, "PUT", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ + response := request(t, s, "POST", "/v1/account/webpush", payloadForTopics(t, []string{"test-topic"}, testWebPushEndpoint), map[string]string{ "Authorization": util.BasicAuth("ben", "ben"), }) @@ -139,7 +139,7 @@ func TestServer_WebPush_Publish(t *testing.T) { defer pushService.Close() addSubscription(t, s, pushService.URL+"/push-receive", "test-topic") - request(t, s, "PUT", "/test-topic", "web push test", nil) + request(t, s, "POST", "/test-topic", "web push test", nil) waitFor(t, func() bool { return received.Load() @@ -162,7 +162,7 @@ func TestServer_WebPush_Publish_RemoveOnError(t *testing.T) { requireSubscriptionCount(t, s, "test-topic", 1) requireSubscriptionCount(t, s, "test-topic-abc", 1) - request(t, s, "PUT", "/test-topic", "web push test", nil) + request(t, s, "POST", "/test-topic", "web push test", nil) waitFor(t, func() bool { return received.Load() diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 43bfe283..8b7fc79b 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -115,14 +115,13 @@ class Api { throw new Error(`Unexpected server response ${response.status}`); } - async updateWebPushSubscriptions(topics, pushSubscription) { + async updateWebPush(pushSubscription, topics) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); - console.log(`[Api] Sending Web Push Subscriptions`, { url, topics, endpoint: pushSubscription.endpoint }); - console.log(`[Api] Sending Web Push Subscriptions`, { pushSubscription }); + console.log(`[Api] Updating Web Push subscription`, { url, topics, endpoint: pushSubscription.endpoint }); const serializedSubscription = JSON.parse(JSON.stringify(pushSubscription)); // Ugh ... https://stackoverflow.com/a/40525434/1440785 await fetchOrThrow(url, { - method: "PUT", + method: "POST", headers: maybeWithAuth({}, user), body: JSON.stringify({ endpoint: serializedSubscription.endpoint, @@ -132,6 +131,20 @@ class Api { }), }); } + + + async deleteWebPush(pushSubscription) { + const user = await userManager.get(config.base_url); + const url = accountWebPushUrl(config.base_url); + console.log(`[Api] Deleting Web Push subscription`, { url, endpoint: pushSubscription.endpoint }); + await fetchOrThrow(url, { + method: "DELETE", + headers: maybeWithAuth({}, user), + body: JSON.stringify({ + endpoint: pushSubscription.endpoint + }), + }); + } } const api = new Api(); diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 67b9faa3..b9e5d083 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -119,7 +119,12 @@ class SubscriptionManager { return; } - await api.updateWebPushSubscriptions(topics, browserSubscription); + if (topics.length > 0) { + await api.updateWebPush(browserSubscription, topics); + } else { + await api.deleteWebPush(browserSubscription); + } + } async updateState(subscriptionId, state) { From 1dbcfe3c6e184fdd452f17589747df68b6408945 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 10 Jun 2023 21:11:48 -0400 Subject: [PATCH 061/305] Thank you @KevinWang15 for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cebf55be..f0617bdb 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + I'd also like to thank JetBrains for providing their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/) to me for free, and [DigitalOcean](https://m.do.co/c/442b929528db) (*referral link*) for supporting the project: From e6c83b6efbfd60f231940b16dd3e9c9763801792 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 08:48:51 -0400 Subject: [PATCH 062/305] Add Lemmy, etc. --- README.md | 4 ++-- docs/integrations.md | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f0617bdb..cff77e3d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![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) -[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/ntfy?color=%23317f6f&label=-%20r%2Fntfy&style=social)](https://www.reddit.com/r/ntfy/) +[![Lemmy](https://img.shields.io/badge/Lemmy-discuss-green)](https://discuss.ntfy.sh/) [![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) @@ -47,7 +47,7 @@ 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 -* [Reddit r/ntfy](https://www.reddit.com/r/ntfy/) - asynchronous forum (_new as of October 2022_) +* [Lemmy discussion board](https://discuss.ntfy.sh/) - asynchronous forum (_new as of June 2023_) * [GitHub issues](https://github.com/binwiederhier/ntfy/issues) - questions, features, bugs * [Email](https://heckel.io/about) - reach me directly (_I usually prefer the other methods_) diff --git a/docs/integrations.md b/docs/integrations.md index e6113ed7..bc996019 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -55,6 +55,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [ntfy-for-delphi](https://github.com/hazzelnuts/ntfy-for-delphi) - A friendly library to push instant notifications ntfy (Delphi) - [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) ## CLIs + GUIs @@ -121,6 +122,9 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [ntfyd](https://github.com/joachimschmidt557/ntfyd) - ntfy desktop daemon (Zig) - [ntfy-browser](https://github.com/johman10/ntfy-browser) - browser extension to receive notifications without having the page open (TypeScript) - [ntfy-electron](https://github.com/xdpirate/ntfy-electron) - Electron wrapper for the ntfy web app (JS) +- [systemd-ntfy-poweronoff](https://github.com/stendler/systemd-ntfy-poweronoff) - Systemd services to send notifications on system startup and shutdown (Go) +- [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) ## Blog + forum posts From a8def0aed2ef4267f7b6e80c1493b2981d607b49 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:01:43 -0400 Subject: [PATCH 063/305] Make allowed endpoints a list of patterns --- server/server_web_push.go | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index d0da147f..2a0b548a 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -5,34 +5,44 @@ import ( "fmt" "net/http" "regexp" + "strings" "github.com/SherClockHolmes/webpush-go" "heckel.io/ntfy/log" "heckel.io/ntfy/user" ) -// test: https://regexr.com/7eqvl -// example urls: -// -// https://android.googleapis.com/XYZ -// https://fcm.googleapis.com/XYZ -// https://updates.push.services.mozilla.com/XYZ -// https://updates-autopush.stage.mozaws.net/XYZ -// https://updates-autopush.dev.mozaws.net/XYZ -// https://AAA.notify.windows.com/XYZ -// https://AAA.push.apple.com/XYZ const ( - webPushEndpointAllowRegexStr = `^https:\/\/(android\.googleapis\.com|fcm\.googleapis\.com|updates\.push\.services\.mozilla\.com|updates-autopush\.stage\.mozaws\.net|updates-autopush\.dev\.mozaws\.net|.*\.notify\.windows\.com|.*\.push\.apple\.com)\/.*$` - webPushTopicSubscribeLimit = 50 + webPushTopicSubscribeLimit = 50 ) -var webPushEndpointAllowRegex = regexp.MustCompile(webPushEndpointAllowRegexStr) +var ( + webPushAllowedEndpointsPatterns = []string{ + "https://*.google.com/", + "https://*.googleapis.com/", + "https://*.mozilla.com/", + "https://*.mozaws.net/", + "https://*.windows.com/", + "https://*.microsoft.com/", + "https://*.apple.com/", + } + webPushAllowedEndpointsRegex *regexp.Regexp +) + +func init() { + for i, pattern := range webPushAllowedEndpointsPatterns { + webPushAllowedEndpointsPatterns[i] = strings.ReplaceAll(strings.ReplaceAll(pattern, ".", "\\."), "*", ".+") + } + allPatterns := fmt.Sprintf("^(%s)", strings.Join(webPushAllowedEndpointsPatterns, "|")) + fmt.Println(allPatterns) + webPushAllowedEndpointsRegex = regexp.MustCompile(allPatterns) +} func (s *Server) handleWebPushUpdate(w http.ResponseWriter, r *http.Request, v *visitor) error { req, err := readJSONWithLimit[apiWebPushUpdateSubscriptionRequest](r.Body, jsonBodyBytesLimit, false) if err != nil || req.Endpoint == "" || req.P256dh == "" || req.Auth == "" { return errHTTPBadRequestWebPushSubscriptionInvalid - } else if !webPushEndpointAllowRegex.MatchString(req.Endpoint) { + } else if !webPushAllowedEndpointsRegex.MatchString(req.Endpoint) { return errHTTPBadRequestWebPushEndpointUnknown } else if len(req.Topics) > webPushTopicSubscribeLimit { return errHTTPBadRequestWebPushTopicCountTooHigh From 2d0c043dfd6a5df9908d6f4b3d21113271c78053 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:03:49 -0400 Subject: [PATCH 064/305] Derp --- server/server_web_push.go | 1 - 1 file changed, 1 deletion(-) diff --git a/server/server_web_push.go b/server/server_web_push.go index 2a0b548a..dee88f4f 100644 --- a/server/server_web_push.go +++ b/server/server_web_push.go @@ -34,7 +34,6 @@ func init() { webPushAllowedEndpointsPatterns[i] = strings.ReplaceAll(strings.ReplaceAll(pattern, ".", "\\."), "*", ".+") } allPatterns := fmt.Sprintf("^(%s)", strings.Join(webPushAllowedEndpointsPatterns, "|")) - fmt.Println(allPatterns) webPushAllowedEndpointsRegex = regexp.MustCompile(allPatterns) } From ae3e8a00947db188c15f87f3fa6149fb33edab6a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 12 Jun 2023 21:13:05 -0400 Subject: [PATCH 065/305] Blog post --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index bc996019..ce3bb32b 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -128,6 +128,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [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 - [ntfy: des notifications instantanées](https://blogmotion.fr/diy/ntfy-notification-push-domotique-20708) - blogmotion.fr - 5/2023 - [桌面通知:ntfy](https://www.cnblogs.com/xueweihan/archive/2023/05/04/17370060.html) - cnblogs.com - 5/2023 From 8073bb4e248fd6891718e72886f8bf98fc5749a7 Mon Sep 17 00:00:00 2001 From: Laur Date: Mon, 12 Jun 2023 08:08:16 +0000 Subject: [PATCH 066/305] Translated using Weblate (Romanian) Currently translated at 26.7% (102 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ro/ --- web/public/static/langs/ro.json | 94 ++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ro.json b/web/public/static/langs/ro.json index d9cb66e3..f2d76c6e 100644 --- a/web/public/static/langs/ro.json +++ b/web/public/static/langs/ro.json @@ -9,5 +9,97 @@ "message_bar_type_message": "Scrie un mesaj aici", "message_bar_error_publishing": "Eroare la publicarea notificării", "action_bar_profile_title": "Profil", - "action_bar_profile_settings": "Setări" + "action_bar_profile_settings": "Setări", + "nav_button_settings": "Setări", + "nav_button_connecting": "conectare", + "notifications_attachment_file_video": "fișier video", + "publish_dialog_priority_default": "Prioritate default", + "publish_dialog_priority_high": "Prioritate înaltă", + "publish_dialog_priority_max": "Max. prioritate", + "publish_dialog_message_placeholder": "Introdu un mesaj aici", + "nav_button_subscribe": "Abonează-te la topic", + "nav_upgrade_banner_label": "Upgrade la ntfy Pro", + "nav_upgrade_banner_description": "Rezervă topic-uri, mai multe mesaje și email-uri, și atașamente mai mari", + "common_back": "Înapoi", + "nav_button_account": "Cont", + "nav_button_documentation": "Documentație", + "nav_button_publish_message": "Publică notificarea", + "alert_grant_title": "Notificările sunt dezactivate", + "alert_grant_button": "Permite acum", + "alert_not_supported_title": "Notificările nu sunt acceptate", + "alert_not_supported_description": "Notificările nu sunt acceptate în browser.", + "alert_grant_description": "Permite browser-ului să afișeze notificări.", + "notifications_list": "Lista de notificări", + "notifications_list_item": "Notificare", + "notifications_mark_read": "Marchează ca citit", + "notifications_delete": "Șterge", + "notifications_copied_to_clipboard": "Copiat în clipboard", + "notifications_tags": "Tag-uri", + "notifications_new_indicator": "Notificare nouă", + "notifications_attachment_image": "Imagine atașament", + "notifications_attachment_copy_url_title": "Copiază URL-ul atașamentului în clipboard", + "notifications_attachment_copy_url_button": "Copiază URL", + "notifications_attachment_open_title": "Mergi la {{url}}", + "notifications_attachment_link_expires": "link-ul expiră {{date}}", + "notifications_actions_not_supported": "Acțiune neacceptată în aplicația web", + "notifications_actions_http_request_title": "Trimite {{method}} HTTP la {{url}}", + "notifications_none_for_topic_title": "N-ați primit încă notificări pe acest subiect.", + "notifications_none_for_topic_description": "Pentru a trimite notificări pe acest subiect, setați PUT sau POST pe URL-ul subiectului.", + "notifications_none_for_any_title": "N-ați primit nici o notificare.", + "notifications_none_for_any_description": "Pentru a trimite notificări pe acest subiect, setează PUT sau POST pe URL-ul subiectului. Uite un exemplu cu unul dintre subiectele tale.", + "notifications_no_subscriptions_title": "Se pare că nu ai nici o înscriere.", + "notifications_no_subscriptions_description": "Click pe link-ul \"{{linktext}}\" ca sa creezi o înscriere la un subiect. După aceea, poți trimite mesaje via PUT sau POST și vei primi notificări aici.", + "notifications_example": "Exemplu", + "notifications_more_details": "Pentru mai multe informații, vezi site-ul web sau documentația.", + "display_name_dialog_title": "Schimbă numele afișat", + "display_name_dialog_description": "Setează un nume alternativ pentru subiect care este afișat în lista de înscrieri. Va ajuta la ușurarea identificării subiectelor cu nume complexe.", + "display_name_dialog_placeholder": "Nume afișat", + "reserve_dialog_checkbox_label": "Rezervă subiectul și configurează accesul", + "publish_dialog_progress_uploading": "Încărcare…", + "publish_dialog_progress_uploading_detail": "Încărcare {{loaded}}/{{total}} ({{percent}}%) …", + "publish_dialog_message_published": "Notificare publicată", + "publish_dialog_attachment_limits_file_and_quota_reached": "depășește {{fileSizeLimit}} limita fișierului și cota, {{remainingBytes}} mai rămân", + "publish_dialog_attachment_limits_file_reached": "depășește {{fileSizeLimit}} limita fișierului", + "publish_dialog_attachment_limits_quota_reached": "depășește cota, {{remainingBytes}} mai rămân", + "publish_dialog_priority_min": "Min. prioritate", + "publish_dialog_base_url_label": "URL serviciu", + "publish_dialog_base_url_placeholder": "URL serviciu, ex: https://example.com", + "publish_dialog_topic_label": "Nume subiect", + "publish_dialog_topic_placeholder": "Nume subiect, ex: alerte_phil", + "publish_dialog_topic_reset": "Resetare subiect", + "publish_dialog_title_label": "Titlu", + "publish_dialog_title_placeholder": "Titlu notificare, ex: Alerta spațiu disc", + "publish_dialog_message_label": "Mesaj", + "publish_dialog_tags_label": "Tag-uri", + "publish_dialog_tags_placeholder": "Lista de tag-uri separate prin virgula, ex: avertizare,srv1-backup", + "publish_dialog_priority_label": "Prioritate", + "publish_dialog_click_label": "Click URL", + "publish_dialog_click_placeholder": "URL deschis când notificarea este selectată", + "publish_dialog_click_reset": "Șterge URL selecție", + "publish_dialog_email_label": "E-mail", + "signup_form_confirm_password": "Confirmă parola", + "action_bar_account": "Cont", + "action_bar_change_display_name": "Schimbă numele afișat", + "action_bar_reservation_limit_reached": "Limita atinsă", + "common_cancel": "Anulează", + "common_save": "Salvează", + "common_add": "Adaugă", + "signup_form_password": "Parolă", + "publish_dialog_title_topic": "Publică în {{topic}}", + "publish_dialog_title_no_topic": "Publică notificare", + "nav_button_all_notifications": "Toate notificările", + "notifications_priority_x": "Prioritate {{priority}}", + "notifications_attachment_file_image": "fișier imagine", + "notifications_attachment_open_button": "Deschide atașament", + "notifications_attachment_file_audio": "fișier audio", + "notifications_actions_open_url_title": "Mergi la {{url}}", + "notifications_attachment_file_document": "alt document", + "notifications_attachment_link_expired": "link-ul de descărcare expirat", + "notifications_attachment_file_app": "fișier aplicație Android", + "notifications_click_copy_url_title": "Copiază URL-ul în clipboard", + "notifications_click_copy_url_button": "Copiază link", + "notifications_click_open_button": "Deschide link", + "publish_dialog_emoji_picker_show": "Alege un emoji", + "notifications_loading": "Încărcare notificări…", + "publish_dialog_priority_low": "Prioritate joasă" } From 8ccfa5c3fb35be628b0f4e6b8375b8d2f4c7acb6 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:00:51 +0200 Subject: [PATCH 067/305] Fix session replica behaviour (merge with session) The harder-to-refactor parts are the places where exists/username/token are called within a React component. However, `resetAndRedirect` and `store` are already called from async contexts, so adding an `await` is simple. This thus merges the logic, keeping localStorage for the components to call, but making sure reset/store behaviour works correctly for the replica. --- web/src/app/AccountApi.js | 2 +- web/src/app/Session.js | 29 ++++++++++------- web/src/app/SessionReplica.js | 41 ------------------------ web/src/app/db.js | 3 +- web/src/components/Account.jsx | 18 +++++------ web/src/components/ActionBar.jsx | 2 +- web/src/components/Login.jsx | 2 +- web/src/components/Preferences.jsx | 2 +- web/src/components/PublishDialog.jsx | 2 +- web/src/components/ReserveDialogs.jsx | 6 ++-- web/src/components/Signup.jsx | 2 +- web/src/components/SubscribeDialog.jsx | 4 +-- web/src/components/SubscriptionPopup.jsx | 4 +-- web/src/components/UpgradeDialog.jsx | 2 +- web/src/components/hooks.js | 2 +- 15 files changed, 43 insertions(+), 78 deletions(-) delete mode 100644 web/src/app/SessionReplica.js diff --git a/web/src/app/AccountApi.js b/web/src/app/AccountApi.js index 572764fe..d9380438 100644 --- a/web/src/app/AccountApi.js +++ b/web/src/app/AccountApi.js @@ -367,7 +367,7 @@ class AccountApi { } catch (e) { console.log(`[AccountApi] Error fetching account`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } return undefined; } diff --git a/web/src/app/Session.js b/web/src/app/Session.js index bc50864b..82249b06 100644 --- a/web/src/app/Session.js +++ b/web/src/app/Session.js @@ -1,29 +1,36 @@ -import sessionReplica from "./SessionReplica"; +import Dexie from "dexie"; /** * Manages the logged-in user's session and access token. * The session replica is stored in IndexedDB so that the service worker can access it. */ class Session { - constructor(replica) { - this.replica = replica; + constructor() { + const db = new Dexie("session-replica"); + db.version(1).stores({ + kv: "&key", + }); + this.db = db; } - store(username, token) { + async store(username, token) { + await this.db.kv.bulkPut([ + { key: "user", value: username }, + { key: "token", value: token }, + ]); localStorage.setItem("user", username); localStorage.setItem("token", token); - this.replica.store(username, token); } - reset() { + async resetAndRedirect(url) { + await this.db.delete(); localStorage.removeItem("user"); localStorage.removeItem("token"); - this.replica.reset(); + window.location.href = url; } - resetAndRedirect(url) { - this.reset(); - window.location.href = url; + async usernameAsync() { + return (await this.db.kv.get({ key: "user" }))?.value; } exists() { @@ -39,5 +46,5 @@ class Session { } } -const session = new Session(sessionReplica); +const session = new Session(); export default session; diff --git a/web/src/app/SessionReplica.js b/web/src/app/SessionReplica.js deleted file mode 100644 index a68d4c70..00000000 --- a/web/src/app/SessionReplica.js +++ /dev/null @@ -1,41 +0,0 @@ -import Dexie from "dexie"; - -/** - * Replica of the session in IndexedDB. This is used by the service - * worker to access the session. This is a bit of a hack. - */ -class SessionReplica { - constructor() { - const db = new Dexie("session-replica"); - db.version(1).stores({ - kv: "&key", - }); - this.db = db; - } - - async store(username, token) { - try { - await this.db.kv.bulkPut([ - { key: "user", value: username }, - { key: "token", value: token }, - ]); - } catch (e) { - console.error("[Session] Error replicating session to IndexedDB", e); - } - } - - async reset() { - try { - await this.db.delete(); - } catch (e) { - console.error("[Session] Error resetting session on IndexedDB", e); - } - } - - async username() { - return (await this.db.kv.get({ key: "user" }))?.value; - } -} - -const sessionReplica = new SessionReplica(); -export default sessionReplica; diff --git a/web/src/app/db.js b/web/src/app/db.js index 6a192011..357f4e96 100644 --- a/web/src/app/db.js +++ b/web/src/app/db.js @@ -1,6 +1,5 @@ import Dexie from "dexie"; import session from "./Session"; -import sessionReplica from "./SessionReplica"; // Uses Dexie.js // https://dexie.org/docs/API-Reference#quick-reference @@ -23,7 +22,7 @@ const createDatabase = (username) => { }; export const dbAsync = async () => { - const username = await sessionReplica.username(); + const username = await session.usernameAsync(); return createDatabase(username); }; diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 47449515..a6a624b8 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -164,7 +164,7 @@ const ChangePasswordDialog = (props) => { if (e instanceof IncorrectPasswordError) { setError(t("account_basics_password_dialog_current_password_incorrect")); } else if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -245,7 +245,7 @@ const AccountType = () => { } catch (e) { console.log(`[Account] Error opening billing portal`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setShowPortalError(true); } @@ -371,7 +371,7 @@ const PhoneNumbers = () => { } catch (e) { console.log(`[Account] Error deleting phone number`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } }; @@ -447,7 +447,7 @@ const AddPhoneNumberDialog = (props) => { } catch (e) { console.log(`[Account] Error sending verification`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -464,7 +464,7 @@ const AddPhoneNumberDialog = (props) => { } catch (e) { console.log(`[Account] Error confirming verification`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -946,7 +946,7 @@ const TokenDialog = (props) => { } catch (e) { console.log(`[Account] Error creating token`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -1003,7 +1003,7 @@ const TokenDeleteDialog = (props) => { } catch (e) { console.log(`[Account] Error deleting token`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } @@ -1080,13 +1080,13 @@ const DeleteAccountDialog = (props) => { await accountApi.delete(password); await db().delete(); console.debug(`[Account] Account deleted`); - session.resetAndRedirect(routes.app); + await session.resetAndRedirect(routes.app); } catch (e) { console.log(`[Account] Error deleting account`, e); if (e instanceof IncorrectPasswordError) { setError(t("account_basics_password_dialog_current_password_incorrect")); } else if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index a8cb18ce..a16022e4 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -123,7 +123,7 @@ const ProfileIcon = () => { await accountApi.logout(); await db().delete(); } finally { - session.resetAndRedirect(routes.app); + await session.resetAndRedirect(routes.app); } }; diff --git a/web/src/components/Login.jsx b/web/src/components/Login.jsx index 489eee0f..4efec255 100644 --- a/web/src/components/Login.jsx +++ b/web/src/components/Login.jsx @@ -24,7 +24,7 @@ const Login = () => { try { const token = await accountApi.login(user); console.log(`[Login] User auth for user ${user.username} successful, token is ${token}`); - session.store(user.username, token); + await session.store(user.username, token); window.location.href = routes.app; } catch (e) { console.log(`[Login] User auth for user ${user.username} failed`, e); diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 5cac0c5a..5a68a8ed 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -59,7 +59,7 @@ const maybeUpdateAccountSettings = async (payload) => { } catch (e) { console.log(`[Preferences] Error updating account settings`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } }; diff --git a/web/src/components/PublishDialog.jsx b/web/src/components/PublishDialog.jsx index eb0af0dd..0929a5e9 100644 --- a/web/src/components/PublishDialog.jsx +++ b/web/src/components/PublishDialog.jsx @@ -211,7 +211,7 @@ const PublishDialog = (props) => { } catch (e) { console.log(`[PublishDialog] Retrieving attachment limits failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setAttachFileError(""); // Reset error (rely on server-side checking) } diff --git a/web/src/components/ReserveDialogs.jsx b/web/src/components/ReserveDialogs.jsx index 3dc370e6..e413657a 100644 --- a/web/src/components/ReserveDialogs.jsx +++ b/web/src/components/ReserveDialogs.jsx @@ -43,7 +43,7 @@ export const ReserveAddDialog = (props) => { } catch (e) { console.log(`[ReserveAddDialog] Error adding topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else if (e instanceof TopicReservedError) { setError(t("subscribe_dialog_error_topic_already_reserved")); return; @@ -99,7 +99,7 @@ export const ReserveEditDialog = (props) => { } catch (e) { console.log(`[ReserveEditDialog] Error updating topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; @@ -136,7 +136,7 @@ export const ReserveDeleteDialog = (props) => { } catch (e) { console.log(`[ReserveDeleteDialog] Error deleting topic reservation.`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; diff --git a/web/src/components/Signup.jsx b/web/src/components/Signup.jsx index 3b82cd61..2e97956f 100644 --- a/web/src/components/Signup.jsx +++ b/web/src/components/Signup.jsx @@ -27,7 +27,7 @@ const Signup = () => { await accountApi.create(user.username, user.password); const token = await accountApi.login(user); console.log(`[Signup] User signup for user ${user.username} successful, token is ${token}`); - session.store(user.username, token); + await session.store(user.username, token); window.location.href = routes.app; } catch (e) { console.log(`[Signup] Signup for user ${user.username} failed`, e); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index fedccc39..e777d873 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -39,7 +39,7 @@ export const subscribeTopic = async (baseUrl, topic, opts) => { } catch (e) { console.log(`[SubscribeDialog] Subscribing to topic ${topic} failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } @@ -124,7 +124,7 @@ const SubscribePage = (props) => { } catch (e) { console.log(`[SubscribeDialog] Error reserving topic`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else if (e instanceof TopicReservedError) { setError(t("subscribe_dialog_error_topic_already_reserved")); return; diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 74438f9a..7d154ef5 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -155,7 +155,7 @@ export const SubscriptionPopup = (props) => { } catch (e) { console.log(`[SubscriptionPopup] Error unsubscribing`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } @@ -298,7 +298,7 @@ const DisplayNameDialog = (props) => { } catch (e) { console.log(`[SubscriptionSettingsDialog] Error updating subscription`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); return; diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index a554f1f8..6d569fa2 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -140,7 +140,7 @@ const UpgradeDialog = (props) => { } catch (e) { console.log(`[UpgradeDialog] Error changing billing subscription`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } else { setError(e.message); } diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 8da8fdf0..792a1126 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -114,7 +114,7 @@ export const useAutoSubscribe = (subscriptions, selected) => { } catch (e) { console.log(`[Hooks] Auto-subscribing failed`, e); if (e instanceof UnauthorizedError) { - session.resetAndRedirect(routes.login); + await session.resetAndRedirect(routes.login); } } } From 390d42c6076934a25205d5e3a98f1fd74de35ecd Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:02:54 +0200 Subject: [PATCH 068/305] Format & fix lint --- web/src/app/Api.js | 3 +-- web/src/app/Prefs.js | 4 ++-- web/src/app/SubscriptionManager.js | 5 ++--- web/src/app/UserManager.js | 4 ++-- web/src/app/db.js | 2 +- web/src/components/Preferences.jsx | 6 +++++- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/web/src/app/Api.js b/web/src/app/Api.js index 8b7fc79b..afe59c7c 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -132,7 +132,6 @@ class Api { }); } - async deleteWebPush(pushSubscription) { const user = await userManager.get(config.base_url); const url = accountWebPushUrl(config.base_url); @@ -141,7 +140,7 @@ class Api { method: "DELETE", headers: maybeWithAuth({}, user), body: JSON.stringify({ - endpoint: pushSubscription.endpoint + endpoint: pushSubscription.endpoint, }), }); } diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index b4cef0ac..4826e061 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,8 +1,8 @@ import db from "./db"; class Prefs { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } async setSound(sound) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index b9e5d083..5b876ae1 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -5,8 +5,8 @@ import db from "./db"; import { topicUrl } from "./utils"; class SubscriptionManager { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } /** All subscriptions, including "new count"; this is a JOIN, see https://dexie.org/docs/API-Reference#joining */ @@ -124,7 +124,6 @@ class SubscriptionManager { } else { await api.deleteWebPush(browserSubscription); } - } async updateState(subscriptionId, state) { diff --git a/web/src/app/UserManager.js b/web/src/app/UserManager.js index 412e41da..b53b1da8 100644 --- a/web/src/app/UserManager.js +++ b/web/src/app/UserManager.js @@ -2,8 +2,8 @@ import db from "./db"; import session from "./Session"; class UserManager { - constructor(db) { - this.db = db; + constructor(dbImpl) { + this.db = dbImpl; } async all() { diff --git a/web/src/app/db.js b/web/src/app/db.js index 357f4e96..77ac2562 100644 --- a/web/src/app/db.js +++ b/web/src/app/db.js @@ -26,6 +26,6 @@ export const dbAsync = async () => { return createDatabase(username); }; -export const db = () => createDatabase(session.username()); +const db = () => createDatabase(session.username()); export default db; diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 5a68a8ed..eeb6ee0c 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -247,7 +247,11 @@ const WebPushEnabled = () => { } return ( - + - {t("prefs_notifications_web_push_enabled")} + {t("prefs_notifications_web_push_enabled", { server: shortUrl(config.base_url) })} {t("prefs_notifications_web_push_disabled")} From 95cfe16676976e10f52d5afbc3410a5e86562dd9 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 08:57:57 +0200 Subject: [PATCH 133/305] Add background notif text to subscribe dialog only when web push is enabled --- web/public/static/langs/en.json | 1 + web/src/components/SubscribeDialog.jsx | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 296124de..45ea629a 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -171,6 +171,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", + "subscribe_dialog_subscribe_use_another_background_info": "Note: Background notifications are not supported on other servers", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index e777d873..09879e33 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -14,6 +14,7 @@ import { Switch, } from "@mui/material"; import { useTranslation } from "react-i18next"; +import { useLiveQuery } from "dexie-react-hooks"; import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; @@ -28,6 +29,7 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { AccountContext } from "./App"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; import { ReserveLimitChip } from "./SubscriptionPopup"; +import prefs from "../app/Prefs"; const publicBaseUrl = "https://ntfy.sh"; @@ -96,6 +98,8 @@ const SubscribePage = (props) => { const reserveTopicEnabled = session.exists() && (account?.role === Role.ADMIN || (account?.role === Role.USER && (account?.stats.reservations_remaining || 0) > 0)); + const webPushEnabled = useLiveQuery(() => prefs.webPushEnabled()); + const handleSubscribe = async () => { const user = await userManager.get(baseUrl); // May be undefined const username = user ? user.username : t("subscribe_dialog_error_user_anonymous"); @@ -233,12 +237,19 @@ const SubscribePage = (props) => { inputValue={props.baseUrl} onInputChange={updateBaseUrl} renderInput={(params) => ( - + <> + + {webPushEnabled && ( +
+ {t("subscribe_dialog_subscribe_use_another_background_info")} +
+ )} + )} /> )} From 9216dbe28a189d86ad98512d43056098a0b3c066 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 10:38:02 +0200 Subject: [PATCH 134/305] Add Safari IndexedDB known issue --- docs/known-issues.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/known-issues.md b/docs/known-issues.md index 681ad070..401d82a1 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -1,5 +1,5 @@ # Known issues -This is an incomplete list of known issues with the ntfy server, Android app, and iOS app. You can find a complete +This is an incomplete list of known issues with the ntfy server, web app, Android app, and iOS app. You can find a complete list [on GitHub](https://github.com/binwiederhier/ntfy/labels/%F0%9F%AA%B2%20bug), but I thought it may be helpful to have the prominent ones here to link to. @@ -27,7 +27,7 @@ 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 -## Firefox on Android not automatically subscribing to web push +## 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 @@ -36,3 +36,7 @@ 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 iOS 17 / Safari 17, which will be released later in 2023. + +## PWA on iOS sometimes crashes with an IndexedDB error (see [#787](https://github.com/binwiederhier/ntfy/issues/787)) +When resuming the installed PWA from the background, it sometimes crashes with an error from IndexedDB/Dexie, due to a +[WebKit bug]( https://bugs.webkit.org/show_bug.cgi?id=197050). A reload will fix it until a permanent fix is found. From 9dbac2cb33149618a8853c77ef41f3ef70c67826 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 15:34:55 +0200 Subject: [PATCH 135/305] Update wording --- web/public/static/langs/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 45ea629a..330d4dd1 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -171,7 +171,7 @@ "subscribe_dialog_subscribe_description": "Topics may not be password-protected, so choose a name that's not easy to guess. Once subscribed, you can PUT/POST notifications.", "subscribe_dialog_subscribe_topic_placeholder": "Topic name, e.g. phil_alerts", "subscribe_dialog_subscribe_use_another_label": "Use another server", - "subscribe_dialog_subscribe_use_another_background_info": "Note: Background notifications are not supported on other servers", + "subscribe_dialog_subscribe_use_another_background_info": "Notifications from other servers will not be received when the web app is not open", "subscribe_dialog_subscribe_base_url_label": "Service URL", "subscribe_dialog_subscribe_button_generate_topic_name": "Generate name", "subscribe_dialog_subscribe_button_cancel": "Cancel", @@ -334,8 +334,8 @@ "prefs_notifications_delete_after_one_week_description": "Notifications are auto-deleted after one week", "prefs_notifications_delete_after_one_month_description": "Notifications are auto-deleted after one month", "prefs_notifications_web_push_title": "Background notifications", - "prefs_notifications_web_push_enabled_description": "Notifications are received even when web app is not running (via Web Push)", - "prefs_notifications_web_push_disabled_description": "Notification are received when web app is running (via WebSocket)", + "prefs_notifications_web_push_enabled_description": "Notifications are received even when the web app is not running (via Web Push)", + "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", "prefs_users_title": "Manage users", From f3932e4b656b00ed3378b06b5abb218c6f4d191e Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 10:38:11 -0400 Subject: [PATCH 136/305] Bump deps --- go.mod | 12 ++++----- go.sum | 12 +++++++++ web/package-lock.json | 58 +++++++++++++++++++++---------------------- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index 1d9aa101..ab327b70 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.10.0 // indirect + cloud.google.com/go/firestore v1.11.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect @@ -19,7 +19,7 @@ require ( golang.org/x/sync v0.3.0 golang.org/x/term v0.9.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.128.0 + google.golang.org/api v0.129.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -69,10 +69,10 @@ require ( 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.3 // indirect - google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 // indirect google.golang.org/grpc v1.56.1 // indirect - google.golang.org/protobuf v1.30.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 fb4a7172..a4017570 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/firestore v1.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= +cloud.google.com/go/firestore v1.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= @@ -232,6 +234,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= +google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= +google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -244,10 +248,16 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= +google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= +google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= 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= @@ -271,6 +281,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +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= diff --git a/web/package-lock.json b/web/package-lock.json index c36388fe..0b7c0daf 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -41,6 +41,15 @@ "vite-plugin-pwa": "^0.15.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -2721,9 +2730,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3157,9 +3166,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001507", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", - "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", "dev": true, "funding": [ { @@ -3432,9 +3441,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.440", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", - "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==", + "version": "1.4.442", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", + "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", "dev": true }, "node_modules/emoji-regex": { @@ -5498,17 +5507,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -6007,9 +6016,9 @@ } }, "node_modules/rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6398,9 +6407,9 @@ } }, "node_modules/terser": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.1.tgz", - "integrity": "sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6783,15 +6792,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workbox-background-sync": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", From 8db569e8a54352f83e5a3e6bd5060fe271c9da9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=80=AA=E7=9B=97kidou?= Date: Tue, 27 Jun 2023 14:43:51 +0000 Subject: [PATCH 137/305] Translated using Weblate (Chinese (Simplified)) Currently translated at 94.5% (361 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/zh_Hans/ --- web/public/static/langs/zh_Hans.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index 2db95f56..52e0a1b8 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -352,5 +352,12 @@ "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月计费。", "account_upgrade_dialog_tier_price_billed_yearly": "{{价格}} 按年计费。节省 {{save}}。", "account_upgrade_dialog_billing_contact_email": "有关账单问题,请直接联系我们 。", - "account_upgrade_dialog_billing_contact_website": "有关账单问题,请参考我们的网站 。" + "account_upgrade_dialog_billing_contact_website": "有关账单问题,请参考我们的网站 。", + "publish_dialog_call_item": "拨打电话 {{number}}", + "publish_dialog_call_label": "拨号", + "publish_dialog_chip_call_label": "拨号", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "未验证的手机号", + "account_basics_phone_numbers_title": "电话号码", + "account_basics_phone_numbers_description": "电话通知", + "account_basics_phone_numbers_dialog_description": "要使用来电通知功能,您需要添加并验证至少一个电话号码。可以通过短信或电话进行验证。" } From 4f39c7c155f0a26ecb5832e36285b291ea24348f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 16:45:40 +0200 Subject: [PATCH 138/305] Implement dark mode Resolves #206 --- web/src/components/Account.jsx | 6 ++- web/src/components/App.jsx | 19 ++++++++-- web/src/components/Preferences.jsx | 3 +- web/src/components/PublishDialog.jsx | 4 +- web/src/components/ReserveDialogs.jsx | 5 ++- web/src/components/SubscribeDialog.jsx | 3 +- web/src/components/SubscriptionPopup.jsx | 3 +- web/src/components/UpgradeDialog.jsx | 3 +- web/src/components/styles.js | 5 +-- web/src/components/theme.js | 47 ++++++++++++++++-------- 10 files changed, 69 insertions(+), 29 deletions(-) diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 977bf161..8b1931db 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -33,6 +33,7 @@ import { IconButton, MenuItem, DialogContentText, + useTheme, } from "@mui/material"; import EditIcon from "@mui/icons-material/Edit"; import { Trans, useTranslation } from "react-i18next"; @@ -55,7 +56,6 @@ import DialogFooter from "./DialogFooter"; import { Paragraph } from "./styles"; import { IncorrectPasswordError, UnauthorizedError } from "../app/errors"; import { ProChip } from "./SubscriptionPopup"; -import theme from "./theme"; import session from "../app/Session"; const Account = () => { @@ -147,6 +147,7 @@ const ChangePassword = () => { }; const ChangePasswordDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [currentPassword, setCurrentPassword] = useState(""); @@ -430,6 +431,7 @@ const PhoneNumbers = () => { }; const AddPhoneNumberDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [phoneNumber, setPhoneNumber] = useState(""); @@ -928,6 +930,7 @@ const TokensTable = (props) => { }; const TokenDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [label, setLabel] = useState(props.token?.label || ""); @@ -1069,6 +1072,7 @@ const DeleteAccount = () => { }; const DeleteAccountDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); const [error, setError] = useState(""); diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 9b939ea5..9c5e8f79 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -1,11 +1,11 @@ import * as React from "react"; import { createContext, Suspense, useContext, useEffect, useState, useMemo } from "react"; -import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress } from "@mui/material"; -import { ThemeProvider } from "@mui/material/styles"; +import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery } from "@mui/material"; +import { ThemeProvider, createTheme } from "@mui/material/styles"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; -import theme from "./theme"; +import themeOptions, { darkPalette, lightPalette } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; import notifier from "../app/Notifier"; @@ -29,6 +29,19 @@ const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); + const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); + + const theme = React.useMemo( + () => + createTheme({ + ...themeOptions, + palette: { + ...(prefersDarkMode ? darkPalette : lightPalette), + }, + }), + [prefersDarkMode] + ); + return ( }> diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 6de67d7c..0911d69e 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -26,6 +26,7 @@ import { DialogTitle, DialogContent, DialogActions, + useTheme, } from "@mui/material"; import EditIcon from "@mui/icons-material/Edit"; import CloseIcon from "@mui/icons-material/Close"; @@ -34,7 +35,6 @@ import { useLiveQuery } from "dexie-react-hooks"; import { useTranslation } from "react-i18next"; import { Info } from "@mui/icons-material"; import { useOutletContext } from "react-router-dom"; -import theme from "./theme"; import userManager from "../app/UserManager"; import { playSound, shortUrl, shuffle, sounds, validUrl } from "../app/utils"; import session from "../app/Session"; @@ -400,6 +400,7 @@ const UserTable = (props) => { }; const UserDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [baseUrl, setBaseUrl] = useState(""); const [username, setUsername] = useState(""); diff --git a/web/src/components/PublishDialog.jsx b/web/src/components/PublishDialog.jsx index 0929a5e9..6cea1a9c 100644 --- a/web/src/components/PublishDialog.jsx +++ b/web/src/components/PublishDialog.jsx @@ -19,6 +19,7 @@ import { IconButton, MenuItem, Box, + useTheme, } from "@mui/material"; import InsertEmoticonIcon from "@mui/icons-material/InsertEmoticon"; import { Close } from "@mui/icons-material"; @@ -34,7 +35,6 @@ import DialogFooter from "./DialogFooter"; import api from "../app/Api"; import userManager from "../app/UserManager"; import EmojiPicker from "./EmojiPicker"; -import theme from "./theme"; import session from "../app/Session"; import routes from "./routes"; import accountApi from "../app/AccountApi"; @@ -42,6 +42,7 @@ import { UnauthorizedError } from "../app/errors"; import { AccountContext } from "./App"; const PublishDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); const [baseUrl, setBaseUrl] = useState(""); @@ -806,6 +807,7 @@ const AttachmentBox = (props) => { }; const ExpandingTextField = (props) => { + const theme = useTheme(); const invisibleFieldRef = useRef(); const [textWidth, setTextWidth] = useState(props.minWidth); const determineTextWidth = () => { diff --git a/web/src/components/ReserveDialogs.jsx b/web/src/components/ReserveDialogs.jsx index e413657a..7eb893cd 100644 --- a/web/src/components/ReserveDialogs.jsx +++ b/web/src/components/ReserveDialogs.jsx @@ -14,10 +14,10 @@ import { MenuItem, ListItemIcon, ListItemText, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { Check, DeleteForever } from "@mui/icons-material"; -import theme from "./theme"; import { validTopic } from "../app/utils"; import DialogFooter from "./DialogFooter"; import session from "../app/Session"; @@ -27,6 +27,7 @@ import ReserveTopicSelect from "./ReserveTopicSelect"; import { TopicReservedError, UnauthorizedError } from "../app/errors"; export const ReserveAddDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [topic, setTopic] = useState(props.topic || ""); @@ -87,6 +88,7 @@ export const ReserveAddDialog = (props) => { }; export const ReserveEditDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [everyone, setEveryone] = useState(props.reservation?.everyone || Permission.DENY_ALL); @@ -124,6 +126,7 @@ export const ReserveEditDialog = (props) => { }; export const ReserveDeleteDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const [error, setError] = useState(""); const [deleteMessages, setDeleteMessages] = useState(false); diff --git a/web/src/components/SubscribeDialog.jsx b/web/src/components/SubscribeDialog.jsx index 09879e33..f7a24f5e 100644 --- a/web/src/components/SubscribeDialog.jsx +++ b/web/src/components/SubscribeDialog.jsx @@ -12,10 +12,10 @@ import { FormGroup, useMediaQuery, Switch, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useLiveQuery } from "dexie-react-hooks"; -import theme from "./theme"; import api from "../app/Api"; import { randomAlphanumericString, topicUrl, validTopic, validUrl } from "../app/utils"; import userManager from "../app/UserManager"; @@ -49,6 +49,7 @@ export const subscribeTopic = async (baseUrl, topic, opts) => { }; const SubscribeDialog = (props) => { + const theme = useTheme(); const [baseUrl, setBaseUrl] = useState(""); const [topic, setTopic] = useState(""); const [showLoginPage, setShowLoginPage] = useState(false); diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 24ce9cbc..17b12504 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -15,6 +15,7 @@ import { MenuItem, IconButton, ListItemIcon, + useTheme, } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; @@ -30,7 +31,6 @@ import { RemoveCircle, Send, } from "@mui/icons-material"; -import theme from "./theme"; import subscriptionManager from "../app/SubscriptionManager"; import DialogFooter from "./DialogFooter"; import accountApi, { Role } from "../app/AccountApi"; @@ -281,6 +281,7 @@ export const SubscriptionPopup = (props) => { }; const DisplayNameDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { subscription } = props; const [error, setError] = useState(""); diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index 6d569fa2..4bf0244d 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -21,6 +21,7 @@ import { Box, DialogContentText, DialogActions, + useTheme, } from "@mui/material"; import { Trans, useTranslation } from "react-i18next"; import { Check, Close } from "@mui/icons-material"; @@ -31,7 +32,6 @@ import { AccountContext } from "./App"; import routes from "./routes"; import session from "../app/Session"; import accountApi, { SubscriptionInterval } from "../app/AccountApi"; -import theme from "./theme"; const Feature = (props) => {props.children}; @@ -61,6 +61,7 @@ const Banner = { }; const UpgradeDialog = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const { account } = useContext(AccountContext); // May be undefined! const [error, setError] = useState(""); diff --git a/web/src/components/styles.js b/web/src/components/styles.js index edcfb46e..db0690bc 100644 --- a/web/src/components/styles.js +++ b/web/src/components/styles.js @@ -1,19 +1,18 @@ import { Typography, Container, Backdrop, styled } from "@mui/material"; -import theme from "./theme"; export const Paragraph = styled(Typography)({ paddingTop: 8, paddingBottom: 8, }); -export const VerticallyCenteredContainer = styled(Container)({ +export const VerticallyCenteredContainer = styled(Container)(({ theme }) => ({ display: "flex", flexGrow: 1, flexDirection: "column", justifyContent: "center", alignContent: "center", color: theme.palette.text.primary, -}); +})); export const LightboxBackdrop = styled(Backdrop)({ backgroundColor: "rgba(0, 0, 0, 0.8)", // was: 0.5 diff --git a/web/src/components/theme.js b/web/src/components/theme.js index ca77cdc8..c833e631 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -1,18 +1,7 @@ -import { red } from "@mui/material/colors"; -import { createTheme } from "@mui/material/styles"; +import { grey, red } from "@mui/material/colors"; -const theme = createTheme({ - palette: { - primary: { - main: "#338574", - }, - secondary: { - main: "#6cead0", - }, - error: { - main: red.A400, - }, - }, +/** @type {import("@mui/material").ThemeOptions} */ +const themeOptions = { components: { MuiListItemIcon: { styleOverrides: { @@ -31,6 +20,32 @@ const theme = createTheme({ }, }, }, -}); +}; -export default theme; +/** @type {import("@mui/material").ThemeOptions['palette']} */ +export const lightPalette = { + mode: "light", + primary: { + main: "#338574", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: red.A400, + }, +}; + +/** @type {import("@mui/material").ThemeOptions['palette']} */ +export const darkPalette = { + ...lightPalette, + mode: "dark", + background: { + paper: grey["800"], + }, + primary: { + main: "#6cead0", + }, +}; + +export default themeOptions; From d790ad91e2a06773d8802d85888898797dd35405 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 10:58:52 -0400 Subject: [PATCH 139/305] Bump --- go.sum | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/go.sum b/go.sum index a4017570..61584efa 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,6 @@ cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZN cloud.google.com/go/compute v1.20.1/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.10.0 h1:FG5C49ukKKqyljY+XNRZGae1HZaiVe7aoqi2BipnBuM= -cloud.google.com/go/firestore v1.10.0/go.mod h1:eAeoQCV8F35Mcy4k8ZrQbcSYZOayIwoiU7ZJ6xzH1+o= cloud.google.com/go/firestore v1.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= @@ -232,8 +230,6 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T 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.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= -google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -246,16 +242,10 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA 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-20230530153820-e85fd2cbaebc h1:8DyZCyvI8mE1IdLy/60bS+52xfymkE72wv1asokgtao= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc h1:kVKPf/IiYSBWEWtkIn6wZXwWGCnLKcC8oWfZvXjsGnM= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -279,8 +269,6 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= 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= From e607944ad1db49ca49871bbbecf7d1687d3867c0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 17:20:01 +0200 Subject: [PATCH 140/305] Update colors --- web/src/components/ActionBar.jsx | 5 +++-- web/src/components/theme.js | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index a16022e4..6a36cdb6 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -1,4 +1,4 @@ -import { AppBar, Toolbar, IconButton, Typography, Box, MenuItem, Button, Divider, ListItemIcon } from "@mui/material"; +import { AppBar, Toolbar, IconButton, Typography, Box, MenuItem, Button, Divider, ListItemIcon, useTheme } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import * as React from "react"; import { useState } from "react"; @@ -21,6 +21,7 @@ import PopupMenu from "./PopupMenu"; import { SubscriptionPopup } from "./SubscriptionPopup"; const ActionBar = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const location = useLocation(); let title = "ntfy"; @@ -43,7 +44,7 @@ const ActionBar = (props) => { Date: Wed, 28 Jun 2023 17:39:40 +0200 Subject: [PATCH 141/305] Add preference --- web/public/static/langs/en.json | 4 ++++ web/src/app/Prefs.js | 15 +++++++++++++++ web/src/components/App.jsx | 21 +++++++++++++++++++-- web/src/components/Preferences.jsx | 24 +++++++++++++++++++++++- 4 files changed, 61 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 330d4dd1..fa0a3b0f 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -338,6 +338,10 @@ "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", + "prefs_ui_mode_title": "UI Mode", + "prefs_ui_mode_system": "System (default)", + "prefs_ui_mode_dark": "Dark", + "prefs_ui_mode_light": "Light", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index a9510dd2..006e8bf5 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,5 +1,11 @@ import db from "./db"; +export const UI_MODE = { + DARK: "dark", + LIGHT: "light", + SYSTEM: "system", +}; + class Prefs { constructor(dbImpl) { this.db = dbImpl; @@ -40,6 +46,15 @@ class Prefs { async setWebPushEnabled(enabled) { await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); } + + async uiMode() { + const uiMode = await this.db.prefs.get("uiMode"); + return uiMode?.value ?? UI_MODE.SYSTEM; + } + + async setUIMode(mode) { + await this.db.prefs.put({ key: "uiMode", value: mode }); + } } const prefs = new Prefs(db()); diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 9c5e8f79..38343785 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -22,24 +22,41 @@ import Login from "./Login"; import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! +import prefs, { UI_MODE } from "../app/Prefs"; export const AccountContext = createContext(null); +const darkModeEnabled = (prefersDarkMode, uiModePreference) => { + switch (uiModePreference) { + case UI_MODE.DARK: + return true; + + case UI_MODE.LIGHT: + return false; + + case UI_MODE.SYSTEM: + default: + return prefersDarkMode; + } +}; + const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); + const uiModePreference = useLiveQuery(() => prefs.uiMode()); + const theme = React.useMemo( () => createTheme({ ...themeOptions, palette: { - ...(prefersDarkMode ? darkPalette : lightPalette), + ...(darkModeEnabled(prefersDarkMode, uiModePreference) ? darkPalette : lightPalette), }, }), - [prefersDarkMode] + [prefersDarkMode, uiModePreference] ); return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 0911d69e..42b04b4d 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -43,7 +43,7 @@ import accountApi, { Permission, Role } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; import { AccountContext } from "./App"; import { Paragraph } from "./styles"; -import prefs from "../app/Prefs"; +import prefs, { UI_MODE } from "../app/Prefs"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; @@ -86,6 +86,7 @@ const Notifications = () => { {t("prefs_notifications_title")} + @@ -237,6 +238,27 @@ const DeleteAfter = () => { ); }; +const UIMode = () => { + const { t } = useTranslation(); + const labelId = "prefUIMode"; + const enabled = useLiveQuery(async () => prefs.uiMode()); + const handleChange = async (ev) => { + await prefs.setUIMode(ev.target.value); + }; + + return ( + + + + + + ); +}; + const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; From 48a5a55e2fbf08afcf04c2366484e938b54199a5 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 12:54:13 -0400 Subject: [PATCH 142/305] Release notes --- docs/releases.md | 49 +++++++++++++++++++++++++------------------ user/manager.go | 1 + web/package-lock.json | 12 ++++++----- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 6b2e5a93..cd7e37da 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,6 +2,35 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). +### ntfy server v2.6.0 +Released June 28, 2023 + +With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) +with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar +to a native app (__even on iOS!__ 🥳), and get basic push notification support (without any battery drain). + +Installing the PWA gives ntfy web its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux, +home screen icon on iOS, and launcher icon on Android), a standalone window, push notifications, and an app badge with +the unread notification count. + +**Features:** + +* The web app now supports Web Push, and is installable as a [progressive web app (PWA)](https://docs.ntfy.sh/subscribe/pwa/) on Chrome, Edge, Android, and iOS ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) + +**Bug fixes:** + +* Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) +* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) +* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) +* Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) + +**Maintenance:** + +* Improved GitHub Actions flow ([#745](https://github.com/binwiederhier/ntfy/pull/745), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Add JS formatter "prettier" ([#746](https://github.com/binwiederhier/ntfy/pull/746), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) + ## ntfy server v2.5.0 Released May 18, 2023 @@ -1219,23 +1248,3 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Additional languages:** * Swedish (thanks to [@hellbown](https://hosted.weblate.org/user/hellbown/)) - -### ntfy server v2.6.0 (UNRELEASED) - -**Features:** - -* The web app now supports web push, and is installable on Chrome, Edge, Android, and iOS. Look at the [web app docs](https://docs.ntfy.sh/subscribe/web/) for more information ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) - -**Bug fixes:** - -* Support encoding any header as RFC 2047 ([#737](https://github.com/binwiederhier/ntfy/issues/737), thanks to [@cfouche3005](https://github.com/cfouche3005) for reporting) -* Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) -* Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) -* Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) - -**Maintenance:** - -* Improved GitHub Actions flow ([#745](https://github.com/binwiederhier/ntfy/pull/745), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Add JS formatter "prettier" ([#746](https://github.com/binwiederhier/ntfy/pull/746), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) diff --git a/user/manager.go b/user/manager.go index 3307134a..87b385e6 100644 --- a/user/manager.go +++ b/user/manager.go @@ -126,6 +126,7 @@ const ( ON CONFLICT (id) DO NOTHING; COMMIT; ` + builtinStartupQueries = ` PRAGMA foreign_keys = ON; ` diff --git a/web/package-lock.json b/web/package-lock.json index 0b7c0daf..c4994367 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5166,13 +5166,15 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" From e359499e79a38e6b7a59e4d3bbd69cc6ec56f4c2 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 12:59:30 -0400 Subject: [PATCH 143/305] Bump install.md --- docs/install.md | 60 ++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/docs/install.md b/docs/install.md index e4469f52..d61454b1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_x86_64.tar.gz - tar zxvf ntfy_2.5.0_linux_x86_64.tar.gz - sudo cp -a ntfy_2.5.0_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_x86_64.tar.gz + tar zxvf ntfy_2.6.0_linux_x86_64.tar.gz + sudo cp -a ntfy_2.6.0_linux_x86_64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.tar.gz - tar zxvf ntfy_2.5.0_linux_armv6.tar.gz - sudo cp -a ntfy_2.5.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.tar.gz + tar zxvf ntfy_2.6.0_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.0_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.tar.gz - tar zxvf ntfy_2.5.0_linux_armv7.tar.gz - sudo cp -a ntfy_2.5.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.tar.gz + tar zxvf ntfy_2.6.0_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.0_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.tar.gz - tar zxvf ntfy_2.5.0_linux_arm64.tar.gz - sudo cp -a ntfy_2.5.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.5.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.tar.gz + tar zxvf ntfy_2.6.0_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.0_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_macOS_all.tar.gz > ntfy_2.5.0_macOS_all.tar.gz -tar zxvf ntfy_2.5.0_macOS_all.tar.gz -sudo cp -a ntfy_2.5.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz > ntfy_2.6.0_macOS_all.tar.gz +tar zxvf ntfy_2.6.0_macOS_all.tar.gz +sudo cp -a ntfy_2.6.0_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.5.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.5.0/ntfy_2.5.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). From 64ac111d55383c4d73adcf8cd2a52e2d5e4df625 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 13:30:51 -0400 Subject: [PATCH 144/305] Rename UI_MODE to THEME --- docs/releases.md | 15 +++++++++++---- web/public/static/langs/en.json | 8 ++++---- web/src/app/Prefs.js | 12 ++++++------ web/src/components/App.jsx | 21 +++++++++------------ web/src/components/Preferences.jsx | 20 ++++++++++---------- 5 files changed, 40 insertions(+), 36 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index cd7e37da..475b03fd 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -7,15 +7,22 @@ Released June 28, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar -to a native app (__even on iOS!__ 🥳), and get basic push notification support (without any battery drain). +to a native app (__even on iOS!__ 🥳). Installing the PWA gives ntfy web its own launcher, a standalone window, +push notifications, and an app badge with the unread notification count. -Installing the PWA gives ntfy web its own launcher (e.g. shortcut on Windows, app on macOS, launcher shortcut on Linux, -home screen icon on iOS, and launcher icon on Android), a standalone window, push notifications, and an app badge with -the unread notification count. +On top of that, this release also brings **dark mode** 🧛🌙 to the web app. + +🙏 A huge thanks for this release goes to [@nimbleghost](https://github.com/nimbleghost), for basically implementing the +Web Push / PWA and dark mode feature by himself. I'm really grateful for your contributions. + +❤️ If you like ntfy, **please consider sponsoring us** via [GitHub Sponsors](https://github.com/sponsors/binwiederhier) +and [Liberapay](https://en.liberapay.com/ntfy/), or buying a [paid plan via the web app](https://ntfy.sh/app) (20% off +if you use promo code `MYTOPIC`). ntfy will always remain open source. **Features:** * The web app now supports Web Push, and is installable as a [progressive web app (PWA)](https://docs.ntfy.sh/subscribe/pwa/) on Chrome, Edge, Android, and iOS ([#751](https://github.com/binwiederhier/ntfy/pull/751), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Support for dark mode in the web app ([#206](https://github.com/binwiederhier/ntfy/issues/206), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Bug fixes:** diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index fa0a3b0f..0b74c6e2 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -338,10 +338,6 @@ "prefs_notifications_web_push_disabled_description": "Notification are received when the web app is running (via WebSocket)", "prefs_notifications_web_push_enabled": "Enabled for {{server}}", "prefs_notifications_web_push_disabled": "Disabled", - "prefs_ui_mode_title": "UI Mode", - "prefs_ui_mode_system": "System (default)", - "prefs_ui_mode_dark": "Dark", - "prefs_ui_mode_light": "Light", "prefs_users_title": "Manage users", "prefs_users_description": "Add/remove users for your protected topics here. Please note that username and password are stored in the browser's local storage.", "prefs_users_description_no_sync": "Users and passwords are not synchronized to your account.", @@ -359,6 +355,10 @@ "prefs_users_dialog_password_label": "Password", "prefs_appearance_title": "Appearance", "prefs_appearance_language_title": "Language", + "prefs_appearance_theme_title": "Theme", + "prefs_appearance_theme_system": "System (default)", + "prefs_appearance_theme_dark": "Dark mode", + "prefs_appearance_theme_light": "Light mode", "prefs_reservations_title": "Reserved topics", "prefs_reservations_description": "You can reserve topic names for personal use here. Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_limit_reached": "You reached your reserved topics limit.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 006e8bf5..4f28f87e 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -1,6 +1,6 @@ import db from "./db"; -export const UI_MODE = { +export const THEME = { DARK: "dark", LIGHT: "light", SYSTEM: "system", @@ -47,13 +47,13 @@ class Prefs { await this.db.prefs.put({ key: "webPushEnabled", value: enabled }); } - async uiMode() { - const uiMode = await this.db.prefs.get("uiMode"); - return uiMode?.value ?? UI_MODE.SYSTEM; + async theme() { + const theme = await this.db.prefs.get("theme"); + return theme?.value ?? THEME.SYSTEM; } - async setUIMode(mode) { - await this.db.prefs.put({ key: "uiMode", value: mode }); + async setTheme(mode) { + await this.db.prefs.put({ key: "theme", value: mode }); } } diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 38343785..6c4761f1 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -22,19 +22,19 @@ import Login from "./Login"; import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! -import prefs, { UI_MODE } from "../app/Prefs"; +import prefs, { THEME } from "../app/Prefs"; export const AccountContext = createContext(null); -const darkModeEnabled = (prefersDarkMode, uiModePreference) => { - switch (uiModePreference) { - case UI_MODE.DARK: +const darkModeEnabled = (prefersDarkMode, themePreference) => { + switch (themePreference) { + case THEME.DARK: return true; - case UI_MODE.LIGHT: + case THEME.LIGHT: return false; - case UI_MODE.SYSTEM: + case THEME.SYSTEM: default: return prefersDarkMode; } @@ -43,20 +43,17 @@ const darkModeEnabled = (prefersDarkMode, uiModePreference) => { const App = () => { const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); - const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); - - const uiModePreference = useLiveQuery(() => prefs.uiMode()); - + const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( () => createTheme({ ...themeOptions, palette: { - ...(darkModeEnabled(prefersDarkMode, uiModePreference) ? darkPalette : lightPalette), + ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkPalette : lightPalette), }, }), - [prefersDarkMode, uiModePreference] + [prefersDarkMode, themePreference] ); return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index 42b04b4d..add9b8c0 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -43,7 +43,7 @@ import accountApi, { Permission, Role } from "../app/AccountApi"; import { Pref, PrefGroup } from "./Pref"; import { AccountContext } from "./App"; import { Paragraph } from "./styles"; -import prefs, { UI_MODE } from "../app/Prefs"; +import prefs, { THEME } from "../app/Prefs"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./ReserveDialogs"; import { UnauthorizedError } from "../app/errors"; @@ -86,7 +86,6 @@ const Notifications = () => { {t("prefs_notifications_title")} - @@ -238,21 +237,21 @@ const DeleteAfter = () => { ); }; -const UIMode = () => { +const Theme = () => { const { t } = useTranslation(); - const labelId = "prefUIMode"; - const enabled = useLiveQuery(async () => prefs.uiMode()); + const labelId = "prefTheme"; + const enabled = useLiveQuery(async () => prefs.theme()); const handleChange = async (ev) => { - await prefs.setUIMode(ev.target.value); + await prefs.setTheme(ev.target.value); }; return ( - + @@ -511,6 +510,7 @@ const Appearance = () => { {t("prefs_appearance_title")} + From 9ce35459015a16ff7786d9ac6926a2415de3a71a Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 20:26:54 +0200 Subject: [PATCH 145/305] Fix refreshing things when permission is granted We refreshed some things but not everything, this makes it more responsive if you have the settings page open when granting permissions, for example. --- web/src/components/App.jsx | 4 --- web/src/components/Navigation.jsx | 15 +++------ web/src/components/Preferences.jsx | 5 +-- web/src/components/hooks.js | 53 +++++++++++++++++------------- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 6c4761f1..e174ccc4 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -8,7 +8,6 @@ import { AllSubscriptions, SingleSubscription } from "./Notifications"; import themeOptions, { darkPalette, lightPalette } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; -import notifier from "../app/Notifier"; import Preferences from "./Preferences"; import subscriptionManager from "../app/SubscriptionManager"; import userManager from "../app/UserManager"; @@ -91,7 +90,6 @@ const Layout = () => { const params = useParams(); const { account, setAccount } = useContext(AccountContext); const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false); - const [notificationsGranted, setNotificationsGranted] = useState(notifier.granted()); const [sendDialogOpenMode, setSendDialogOpenMode] = useState(""); const users = useLiveQuery(() => userManager.all()); const subscriptions = useLiveQuery(() => subscriptionManager.all()); @@ -115,10 +113,8 @@ const Layout = () => { setMobileDrawerOpen(!mobileDrawerOpen)} - onNotificationGranted={setNotificationsGranted} onPublishMessageClick={() => setSendDialogOpenMode(PublishDialog.OPEN_MODE_DEFAULT)} />
diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index fe1cf8be..ad671d99 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -43,6 +43,7 @@ import UpgradeDialog from "./UpgradeDialog"; import { AccountContext } from "./App"; import { PermissionDenyAll, PermissionRead, PermissionReadWrite, PermissionWrite } from "./ReserveIcons"; import { SubscriptionPopup } from "./SubscriptionPopup"; +import { useNotificationPermissionListener } from "./hooks"; const navWidth = 280; @@ -109,17 +110,12 @@ const NavList = (props) => { const isPaid = account?.billing?.subscription; const showUpgradeBanner = config.enable_payments && !isAdmin && !isPaid; const showSubscriptionsList = props.subscriptions?.length > 0; - const [showNotificationPermissionRequired, setShowNotificationPermissionRequired] = useState(notifier.notRequested()); - const [showNotificationPermissionDenied, setShowNotificationPermissionDenied] = useState(notifier.denied()); + const showNotificationPermissionRequired = useNotificationPermissionListener(() => notifier.notRequested()); + const showNotificationPermissionDenied = useNotificationPermissionListener(() => notifier.denied()); const showNotificationIOSInstallRequired = notifier.iosSupportedButInstallRequired(); const showNotificationBrowserNotSupportedBox = !showNotificationIOSInstallRequired && !notifier.browserSupported(); const showNotificationContextNotSupportedBox = notifier.browserSupported() && !notifier.contextSupported(); // Only show if notifications are generally supported in the browser - const refreshPermissions = () => { - setShowNotificationPermissionRequired(notifier.notRequested()); - setShowNotificationPermissionDenied(notifier.denied()); - }; - const alertVisible = showNotificationPermissionRequired || showNotificationPermissionDenied || @@ -131,7 +127,7 @@ const NavList = (props) => { <> - {showNotificationPermissionRequired && } + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } {showNotificationContextNotSupportedBox && } @@ -354,11 +350,10 @@ const SubscriptionItem = (props) => { ); }; -const NotificationPermissionRequired = ({ refreshPermissions }) => { +const NotificationPermissionRequired = () => { const { t } = useTranslation(); const requestPermission = async () => { await notifier.maybeRequestPermission(); - refreshPermissions(); }; return ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index add9b8c0..a24ccd96 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -49,7 +49,7 @@ import { ReserveAddDialog, ReserveDeleteDialog, ReserveEditDialog } from "./Rese import { UnauthorizedError } from "../app/errors"; import { subscribeTopic } from "./SubscribeDialog"; import notifier from "../app/Notifier"; -import { useIsLaunchedPWA } from "./hooks"; +import { useIsLaunchedPWA, useNotificationPermissionListener } from "./hooks"; const maybeUpdateAccountSettings = async (payload) => { if (!session.exists()) { @@ -79,6 +79,7 @@ const Preferences = () => ( const Notifications = () => { const { t } = useTranslation(); const isLaunchedPWA = useIsLaunchedPWA(); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); return ( @@ -89,7 +90,7 @@ const Notifications = () => { - {!isLaunchedPWA && notifier.pushPossible() && } + {!isLaunchedPWA && pushPossible && } ); diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 5ff375d2..6d5f3d51 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -136,8 +136,31 @@ export const useAutoSubscribe = (subscriptions, selected) => { }; const webPushBroadcastChannel = new BroadcastChannel("web-push-broadcast"); -const matchMedia = window.matchMedia("(display-mode: standalone)"); -const isIOSStandalone = window.navigator.standalone === true; + +/** + * Hook to return a value that's refreshed when the notification permission changes + */ +export const useNotificationPermissionListener = (query) => { + const [result, setResult] = useState(query()); + + useEffect(() => { + const handler = () => { + setResult(query()); + }; + + if ("permissions" in navigator) { + navigator.permissions.query({ name: "notifications" }).then((permission) => { + permission.addEventListener("change", handler); + + return () => { + permission.removeEventListener("change", handler); + }; + }); + } + }, []); + + return result; +}; /** * Updates the Web Push subscriptions when the list of topics changes, @@ -146,10 +169,11 @@ const isIOSStandalone = window.navigator.standalone === true; */ const useWebPushListener = (topics) => { const [lastTopics, setLastTopics] = useState(); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); useEffect(() => { const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); - if (!notifier.pushPossible() || !topicsChanged) { + if (!pushPossible || !topicsChanged) { return; } @@ -183,25 +207,7 @@ const useWebPushListener = (topics) => { * automatically. */ export const useWebPushTopics = () => { - const [pushPossible, setPushPossible] = useState(notifier.pushPossible()); - - useEffect(() => { - const handler = () => { - const newPushPossible = notifier.pushPossible(); - console.log(`[useWebPushTopics] Notification Permission changed`, { pushPossible: newPushPossible }); - setPushPossible(newPushPossible); - }; - - if ("permissions" in navigator) { - navigator.permissions.query({ name: "notifications" }).then((permission) => { - permission.addEventListener("change", handler); - - return () => { - permission.removeEventListener("change", handler); - }; - }); - } - }); + const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); const topics = useLiveQuery( async () => subscriptionManager.webPushTopics(pushPossible), @@ -214,6 +220,9 @@ export const useWebPushTopics = () => { return topics; }; +const matchMedia = window.matchMedia("(display-mode: standalone)"); +const isIOSStandalone = window.navigator.standalone === true; + /* * Watches the "display-mode" to detect if the app is running as a standalone app (PWA). */ From d838790b8fbca371750d3c51c4d38bb841fe7ef0 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 20:42:34 +0200 Subject: [PATCH 146/305] Fix ntfy upgrade banner in dark mode --- web/src/components/ActionBar.jsx | 5 ++++- web/src/components/Navigation.jsx | 22 +++++++++++++++++----- web/src/components/theme.js | 2 -- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 6a36cdb6..62a16286 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -44,7 +44,10 @@ const ActionBar = (props) => { { Navigation.width = navWidth; const NavList = (props) => { + const theme = useTheme(); const { t } = useTranslation(); const navigate = useNavigate(); const location = useLocation(); @@ -190,7 +192,11 @@ const NavList = (props) => { - {showUpgradeBanner && } + {showUpgradeBanner && ( + // The text background gradient didn't seem to do well with switching between light/dark mode, + // So adding a `key` forces React to replace the entire component when the theme changes + + )} { ); }; -const UpgradeBanner = () => { +const UpgradeBanner = ({ mode }) => { const { t } = useTranslation(); const [dialogKey, setDialogKey] = useState(0); const [dialogOpen, setDialogOpen] = useState(false); @@ -220,13 +226,16 @@ const UpgradeBanner = () => { width: `${Navigation.width - 1}px`, bottom: 0, mt: "auto", - background: "linear-gradient(150deg, rgba(196, 228, 221, 0.46) 0%, rgb(255, 255, 255) 100%)", + background: + mode === "light" + ? "linear-gradient(150deg, rgba(196, 228, 221, 0.46) 0%, rgb(255, 255, 255) 100%)" + : "linear-gradient(150deg, #203631 0%, #2a6e60 100%)", }} > - + { style: { fontWeight: 500, fontSize: "1.1rem", - background: "-webkit-linear-gradient(45deg, #09009f, #00ff95 80%)", + background: + mode === "light" + ? "-webkit-linear-gradient(45deg, #09009f, #00ff95 80%)" + : "-webkit-linear-gradient(45deg,rgb(255, 255, 255), #00ff95 80%)", WebkitBackgroundClip: "text", WebkitTextFillColor: "transparent", }, diff --git a/web/src/components/theme.js b/web/src/components/theme.js index f789a0c5..cdfaf07d 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -34,7 +34,6 @@ export const lightPalette = { error: { main: "#c30000", }, - actionBarBackground: "linear-gradient(150deg, #338574 0%, #56bda8 100%)", }; /** @type {import("@mui/material").ThemeOptions['palette']} */ @@ -52,7 +51,6 @@ export const darkPalette = { error: { main: "#fe4d2e", }, - actionBarBackground: "linear-gradient(150deg, #203631 0%, #2a6e60 100%)", }; export default themeOptions; From 0d231d8bd9f4783367548043b60198b202af3716 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 21:18:04 +0200 Subject: [PATCH 147/305] Fix snackbars in dark mode --- web/src/components/App.jsx | 10 ++---- web/src/components/theme.js | 70 +++++++++++++++++++++++-------------- 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 6c4761f1..70d6936a 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -5,7 +5,7 @@ import { ThemeProvider, createTheme } from "@mui/material/styles"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; -import themeOptions, { darkPalette, lightPalette } from "./theme"; +import { darkTheme, lightTheme } from "./theme"; import Navigation from "./Navigation"; import ActionBar from "./ActionBar"; import notifier from "../app/Notifier"; @@ -46,13 +46,7 @@ const App = () => { const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( - () => - createTheme({ - ...themeOptions, - palette: { - ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkPalette : lightPalette), - }, - }), + () => createTheme(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), [prefersDarkMode, themePreference] ); diff --git a/web/src/components/theme.js b/web/src/components/theme.js index cdfaf07d..64217eee 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -1,5 +1,5 @@ /** @type {import("@mui/material").ThemeOptions} */ -const themeOptions = { +const baseThemeOptions = { components: { MuiListItemIcon: { styleOverrides: { @@ -22,35 +22,53 @@ const themeOptions = { // https://github.com/binwiederhier/ntfy-android/blob/main/app/src/main/res/values/colors.xml -/** @type {import("@mui/material").ThemeOptions['palette']} */ -export const lightPalette = { - mode: "light", - primary: { - main: "#338574", +/** @type {import("@mui/material").ThemeOptions} */ +export const lightTheme = { + ...baseThemeOptions, + components: { + ...baseThemeOptions.components, }, - secondary: { - main: "#6cead0", - }, - error: { - main: "#c30000", + palette: { + mode: "light", + primary: { + main: "#338574", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: "#c30000", + }, }, }; -/** @type {import("@mui/material").ThemeOptions['palette']} */ -export const darkPalette = { - mode: "dark", - background: { - paper: "#1b2124", +/** @type {import("@mui/material").ThemeOptions} */ +export const darkTheme = { + ...baseThemeOptions, + components: { + ...baseThemeOptions.components, + MuiSnackbarContent: { + styleOverrides: { + root: { + color: "#000", + backgroundColor: "#aeaeae", + }, + }, + }, }, - primary: { - main: "#65b5a3", - }, - secondary: { - main: "#6cead0", - }, - error: { - main: "#fe4d2e", + palette: { + mode: "dark", + background: { + paper: "#1b2124", + }, + primary: { + main: "#65b5a3", + }, + secondary: { + main: "#6cead0", + }, + error: { + main: "#fe4d2e", + }, }, }; - -export default themeOptions; From 365a0b28323d330eae7a80131e809895df2523ac Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Wed, 28 Jun 2023 23:38:57 +0200 Subject: [PATCH 148/305] Fix preferences warnings --- web/src/components/Pref.jsx | 10 +++++----- web/src/components/Preferences.jsx | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/web/src/components/Pref.jsx b/web/src/components/Pref.jsx index 5e64c41f..4da17381 100644 --- a/web/src/components/Pref.jsx +++ b/web/src/components/Pref.jsx @@ -11,14 +11,14 @@ const PrefRow = styled("div")` display: flex; flex-direction: row; - > :first-child { + > div:first-of-type { flex: 1 0 40%; display: flex; flex-direction: column; justify-content: ${(props) => (props.alignTop ? "normal" : "center")}; } - > :last-child { + > div:last-of-type { flex: 1 0 calc(60% - 50px); display: flex; flex-direction: column; @@ -29,12 +29,12 @@ const PrefRow = styled("div")` flex-direction: column; gap: 10px; - > :first-child, - > :last-child { + > :div:first-of-type, + > :div:last-of-type { flex: unset; } - > :last-child { + > div:last-of-type { .MuiFormControl-root { margin: 0; } diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index a24ccd96..a93032ce 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -241,7 +241,7 @@ const DeleteAfter = () => { const Theme = () => { const { t } = useTranslation(); const labelId = "prefTheme"; - const enabled = useLiveQuery(async () => prefs.theme()); + const theme = useLiveQuery(async () => prefs.theme()); const handleChange = async (ev) => { await prefs.setTheme(ev.target.value); }; @@ -249,7 +249,7 @@ const Theme = () => { return ( - {t("prefs_appearance_theme_system")} {t("prefs_appearance_theme_dark")} {t("prefs_appearance_theme_light")} From e8216ae9e7eacdce9f84b295e3f51b13a4acb98f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 00:02:18 +0200 Subject: [PATCH 149/305] Fix resubscribing when notifications are re-granted (case: from denied to granted) --- web/public/static/langs/en.json | 6 +++--- web/src/app/Notifier.js | 3 --- web/src/app/SubscriptionManager.js | 9 +++++---- web/src/components/hooks.js | 10 +++++----- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 0b74c6e2..3f2947e4 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -55,14 +55,14 @@ "nav_upgrade_banner_label": "Upgrade to ntfy Pro", "nav_upgrade_banner_description": "Reserve topics, more messages & emails, and larger attachments", "alert_notification_permission_required_title": "Notifications are disabled", - "alert_notification_permission_required_description": "Grant your browser permission to display desktop notifications.", + "alert_notification_permission_required_description": "Grant your browser permission to display desktop notifications", "alert_notification_permission_required_button": "Grant now", "alert_notification_permission_denied_title": "Notifications are blocked", - "alert_notification_permission_denied_description": "Please re-enable them in your browser and refresh the page to receive notifications", + "alert_notification_permission_denied_description": "Please re-enable them in your browser", "alert_notification_ios_install_required_title": "iOS install required", "alert_notification_ios_install_required_description": "Click on the Share icon and Add to Home Screen to enable notifications on iOS", "alert_not_supported_title": "Notifications not supported", - "alert_not_supported_description": "Notifications are not supported in your browser.", + "alert_not_supported_description": "Notifications are not supported in your browser", "alert_not_supported_context_description": "Notifications are only supported over HTTPS. This is a limitation of the Notifications API.", "notifications_list": "Notifications list", "notifications_list_item": "Notification", diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index 7f394ae9..4089746a 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -44,9 +44,6 @@ class Notifier { } async webPushSubscription(hasWebPushTopics) { - if (!this.pushPossible()) { - throw new Error("Unsupported or denied"); - } const pushManager = await this.pushManager(); const existingSubscription = await pushManager.getSubscription(); if (existingSubscription) { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 28beb455..de99b642 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -27,7 +27,7 @@ class SubscriptionManager { * It is important to note that "mutedUntil" must be part of the where() query, otherwise the Dexie live query * will not react to it, and the Web Push topics will not be updated when the user mutes a topic. */ - async webPushTopics(pushPossible = notifier.pushPossible()) { + async webPushTopics(pushPossible) { if (!pushPossible) { return []; } @@ -120,13 +120,14 @@ class SubscriptionManager { ); } - async updateWebPushSubscriptions(presetTopics) { - const topics = presetTopics ?? (await this.webPushTopics()); + async updateWebPushSubscriptions(topics) { const hasWebPushTopics = topics.length > 0; const browserSubscription = await notifier.webPushSubscription(hasWebPushTopics); if (!browserSubscription) { - console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping."); + console.log( + "[SubscriptionManager] No browser subscription currently exists, so web push was never enabled or the notification permission was removed. Skipping." + ); return; } diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index 6d5f3d51..519d4c6a 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -168,12 +168,12 @@ export const useNotificationPermissionListener = (query) => { * the service worker, since the service worker cannot play sounds. */ const useWebPushListener = (topics) => { - const [lastTopics, setLastTopics] = useState(); + const [prevUpdate, setPrevUpdate] = useState(); const pushPossible = useNotificationPermissionListener(() => notifier.pushPossible()); useEffect(() => { - const topicsChanged = JSON.stringify(topics) !== JSON.stringify(lastTopics); - if (!pushPossible || !topicsChanged) { + const nextUpdate = JSON.stringify({ topics, pushPossible }); + if (topics === undefined || nextUpdate === prevUpdate) { return; } @@ -181,12 +181,12 @@ const useWebPushListener = (topics) => { try { console.log("[useWebPushListener] Refreshing web push subscriptions", topics); await subscriptionManager.updateWebPushSubscriptions(topics); - setLastTopics(topics); + setPrevUpdate(nextUpdate); } catch (e) { console.error("[useWebPushListener] Error refreshing web push subscriptions", e); } })(); - }, [topics, lastTopics]); + }, [topics, pushPossible, prevUpdate]); useEffect(() => { const onMessage = () => { From 6b4c04c390c45b16b72729ba1f7ac8198bd2fc10 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 00:22:58 +0200 Subject: [PATCH 150/305] Make action bar match theme colour when run as PWA --- web/src/components/ActionBar.jsx | 24 ++++++++++++++++++++---- web/src/components/Navigation.jsx | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/web/src/components/ActionBar.jsx b/web/src/components/ActionBar.jsx index 62a16286..1f41aac0 100644 --- a/web/src/components/ActionBar.jsx +++ b/web/src/components/ActionBar.jsx @@ -19,11 +19,14 @@ import Navigation from "./Navigation"; import accountApi from "../app/AccountApi"; import PopupMenu from "./PopupMenu"; import { SubscriptionPopup } from "./SubscriptionPopup"; +import { useIsLaunchedPWA } from "./hooks"; const ActionBar = (props) => { const theme = useTheme(); const { t } = useTranslation(); const location = useLocation(); + const isLaunchedPWA = useIsLaunchedPWA(); + let title = "ntfy"; if (props.selected) { title = topicDisplayName(props.selected); @@ -32,6 +35,22 @@ const ActionBar = (props) => { } else if (location.pathname === routes.account) { title = t("action_bar_account"); } + + const getActionBarBackground = () => { + if (isLaunchedPWA) { + return "#317f6f"; + } + + switch (theme.palette.mode) { + case "dark": + return "linear-gradient(150deg, #203631 0%, #2a6e60 100%)"; + + case "light": + default: + return "linear-gradient(150deg, #338574 0%, #56bda8 100%)"; + } + }; + return ( { { return ( <> - + {showNotificationPermissionRequired && } {showNotificationPermissionDenied && } {showNotificationBrowserNotSupportedBox && } From 8e1e0b37404492aaa7744d06e56c90b5111e1836 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 20:17:49 -0400 Subject: [PATCH 151/305] Overflow auto --- web/src/components/Account.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/Account.jsx b/web/src/components/Account.jsx index 8b1931db..541a008d 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -787,7 +787,7 @@ const Tokens = () => { }} /> -
{tokens?.length > 0 && }
+
{tokens?.length > 0 && }
From 5784b07f149c9a7df706af3925196d39f9ce8d26 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 28 Jun 2023 20:23:10 -0400 Subject: [PATCH 152/305] Bump --- docs/install.md | 60 +++++++++++++++++++++---------------------- docs/releases.md | 3 ++- go.mod | 8 +++--- go.sum | 8 ++++++ web/package-lock.json | 6 ++--- 5 files changed, 47 insertions(+), 38 deletions(-) diff --git a/docs/install.md b/docs/install.md index d61454b1..729cfd99 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_x86_64.tar.gz - tar zxvf ntfy_2.6.0_linux_x86_64.tar.gz - sudo cp -a ntfy_2.6.0_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_x86_64.tar.gz + tar zxvf ntfy_2.6.1_linux_x86_64.tar.gz + sudo cp -a ntfy_2.6.1_linux_x86_64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_x86_64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.tar.gz - tar zxvf ntfy_2.6.0_linux_armv6.tar.gz - sudo cp -a ntfy_2.6.0_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.tar.gz + tar zxvf ntfy_2.6.1_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.1_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.tar.gz - tar zxvf ntfy_2.6.0_linux_armv7.tar.gz - sudo cp -a ntfy_2.6.0_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.tar.gz + tar zxvf ntfy_2.6.1_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.1_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.tar.gz - tar zxvf ntfy_2.6.0_linux_arm64.tar.gz - sudo cp -a ntfy_2.6.0_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.0_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.tar.gz + tar zxvf ntfy_2.6.1_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.1_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_macOS_all.tar.gz > ntfy_2.6.0_macOS_all.tar.gz -tar zxvf ntfy_2.6.0_macOS_all.tar.gz -sudo cp -a ntfy_2.6.0_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz > ntfy_2.6.1_macOS_all.tar.gz +tar zxvf ntfy_2.6.1_macOS_all.tar.gz +sudo cp -a ntfy_2.6.1_macOS_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.6.0_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.0/ntfy_2.6.0_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_windows_x86_64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 475b03fd..426ce360 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.0 +### ntfy server v2.6.1 Released June 28, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) @@ -30,6 +30,7 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Do not forward poll requests for UnifiedPush messages (no ticket, thanks to NoName for reporting) * Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) * Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) +* The .1 release fixes a few visual issues with dark mode, and other web app updates ([#791](https://github.com/binwiederhier/ntfy/pull/791), [#793](https://github.com/binwiederhier/ntfy/pull/793), [#792](https://github.com/binwiederhier/ntfy/pull/792), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Maintenance:** diff --git a/go.mod b/go.mod index ab327b70..88d09d01 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( cloud.google.com/go/firestore v1.11.0 // indirect - cloud.google.com/go/storage v1.30.1 // indirect + cloud.google.com/go/storage v1.31.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.16.0 @@ -69,9 +69,9 @@ require ( 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.3 // indirect - google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 // indirect + google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 // indirect google.golang.org/grpc v1.56.1 // 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 61584efa..b3094d21 100644 --- a/go.sum +++ b/go.sum @@ -14,6 +14,8 @@ cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tE cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= +cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= @@ -244,10 +246,16 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 h1:Wdfp5Hc1bqGCWYZNrir4A1Jb+SmVaV2j1DL/pbMMTGI= +google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 h1:iI5Fmsfz4zDINYxJLxn2YChI//ypkHM/KuVSvlN7ZXk= +google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 h1:6b+zGQBiXFlAMpQr+cCarAdrZD4QgXSG7uUZadYysgg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= 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= diff --git a/web/package-lock.json b/web/package-lock.json index c4994367..40dff80d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -3441,9 +3441,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.442", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.442.tgz", - "integrity": "sha512-RkrZF//Ya+0aJq2NM3OdisNh5ZodZq1rdXOS96G8DdDgpDKqKE81yTbbQ3F/4CKm1JBPsGu1Lp/akkna2xO06Q==", + "version": "1.4.444", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.444.tgz", + "integrity": "sha512-/AjkL4syRvOpowXWy3N4OHmVbFdWQpfSKHh0sCVYipDeEAtMce3rLjMJi/27Ia9jNIbw6P1JuPN32pSWybXXEQ==", "dev": true }, "node_modules/emoji-regex": { From abb1baeecdc9677f4f9d4352ee2b9a292ddcbbcd Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 12:20:42 +0200 Subject: [PATCH 153/305] =?UTF-8?q?Don=E2=80=99t=20include=20mp3=20due=20t?= =?UTF-8?q?o=20Firefox=20sw=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/vite.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/vite.config.js b/web/vite.config.js index 22d17d9b..86e17646 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -25,7 +25,7 @@ export default defineConfig(({ mode }) => ({ navigateFallback: "index.html", }, injectManifest: { - globPatterns: ["**/*.{js,css,html,mp3,ico,png,svg,json}"], + globPatterns: ["**/*.{js,css,html,ico,png,svg,json}"], globIgnores: ["config.js"], manifestTransforms: [ (entries) => ({ From 55eed868faf2e8092d864c6dd777ada4feae2e4d Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 13:02:17 +0200 Subject: [PATCH 154/305] Reduce padding on mobile / narrow screens --- web/src/components/App.jsx | 5 ++--- web/src/components/Notifications.jsx | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 2951a2bc..2ad7f419 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -1,7 +1,6 @@ import * as React from "react"; import { createContext, Suspense, useContext, useEffect, useState, useMemo } from "react"; -import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery } from "@mui/material"; -import { ThemeProvider, createTheme } from "@mui/material/styles"; +import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery, ThemeProvider, createTheme } from "@mui/material"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; @@ -133,7 +132,7 @@ const Main = (props) => ( display: "flex", flexGrow: 1, flexDirection: "column", - padding: 3, + padding: { xs: 0, md: 3 }, width: { sm: `calc(100% - ${Navigation.width}px)` }, height: "100dvh", overflow: "auto", diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index fe9fcc48..85ced743 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -184,7 +184,7 @@ const NotificationItem = (props) => { const hasUserActions = notification.actions && notification.actions.length > 0; const showActions = hasAttachmentActions || hasClickAction || hasUserActions; return ( - + From 9fa1288dbc8610405fa23adfa2d6d975ed43081f Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:07:18 +0200 Subject: [PATCH 155/305] Fix update behaviour --- web/public/sw.js | 3 +++ web/src/index.jsx | 28 ++++++++++++++++++++++++++++ web/vite.config.js | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/web/public/sw.js b/web/public/sw.js index d3967441..33154628 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -2,6 +2,7 @@ import { cleanupOutdatedCaches, createHandlerBoundToURL, precacheAndRoute } from "workbox-precaching"; import { NavigationRoute, registerRoute } from "workbox-routing"; import { NetworkFirst } from "workbox-strategies"; +import { clientsClaim } from "workbox-core"; import { dbAsync } from "../src/app/db"; @@ -224,6 +225,8 @@ precacheAndRoute( self.__WB_MANIFEST ); +// Claim all open windows +clientsClaim(); // Delete any cached old dist files from previous service worker versions cleanupOutdatedCaches(); diff --git a/web/src/index.jsx b/web/src/index.jsx index d60c05a4..040f94b5 100644 --- a/web/src/index.jsx +++ b/web/src/index.jsx @@ -1,6 +1,34 @@ import * as React from "react"; import { createRoot } from "react-dom/client"; +// eslint-disable-next-line import/no-unresolved +import { registerSW } from "virtual:pwa-register"; import App from "./components/App"; +// fetch new sw every hour, i.e. update app every hour while running +const intervalMS = 60 * 60 * 1000; + +// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html +registerSW({ + onRegisteredSW(swUrl, registration) { + if (!registration) { + return; + } + + setInterval(async () => { + if (registration.installing || navigator?.onLine === false) return; + + const resp = await fetch(swUrl, { + cache: "no-store", + headers: { + cache: "no-store", + "cache-control": "no-cache", + }, + }); + + if (resp?.status === 200) await registration.update(); + }, intervalMS); + }, +}); + const root = createRoot(document.querySelector("#root")); root.render(); diff --git a/web/vite.config.js b/web/vite.config.js index 86e17646..4df6ef9d 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -16,7 +16,7 @@ export default defineConfig(({ mode }) => ({ react(), VitePWA({ registerType: "autoUpdate", - injectRegister: "inline", + injectRegister: null, strategies: "injectManifest", devOptions: { enabled: true, From 57bd37ef2fc9444cd1df3a71cc21591c623655af Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:22:59 +0200 Subject: [PATCH 156/305] Fix sidebar colour on mobile --- web/src/components/theme.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 64217eee..0ce693a6 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -55,6 +55,13 @@ export const darkTheme = { }, }, }, + MuiPaper: { + styleOverrides: { + root: { + backgroundImage: "none", + }, + }, + }, }, palette: { mode: "dark", From 0b918464c191b892517908b069565a5ccbc6f7f3 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Fri, 30 Jun 2023 08:59:20 +0200 Subject: [PATCH 157/305] Move registerSW out --- web/src/components/theme.js | 1 + web/src/index.jsx | 29 ++--------------------------- web/src/registerSW.js | 31 +++++++++++++++++++++++++++++++ web/vite.config.js | 1 + 4 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 web/src/registerSW.js diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 0ce693a6..9cf6649f 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -58,6 +58,7 @@ export const darkTheme = { MuiPaper: { styleOverrides: { root: { + // for the sidebar on narrow (xs) screens backgroundImage: "none", }, }, diff --git a/web/src/index.jsx b/web/src/index.jsx index 040f94b5..1a123a8a 100644 --- a/web/src/index.jsx +++ b/web/src/index.jsx @@ -1,34 +1,9 @@ import * as React from "react"; import { createRoot } from "react-dom/client"; -// eslint-disable-next-line import/no-unresolved -import { registerSW } from "virtual:pwa-register"; import App from "./components/App"; +import registerSW from "./registerSW"; -// fetch new sw every hour, i.e. update app every hour while running -const intervalMS = 60 * 60 * 1000; - -// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html -registerSW({ - onRegisteredSW(swUrl, registration) { - if (!registration) { - return; - } - - setInterval(async () => { - if (registration.installing || navigator?.onLine === false) return; - - const resp = await fetch(swUrl, { - cache: "no-store", - headers: { - cache: "no-store", - "cache-control": "no-cache", - }, - }); - - if (resp?.status === 200) await registration.update(); - }, intervalMS); - }, -}); +registerSW(); const root = createRoot(document.querySelector("#root")); root.render(); diff --git a/web/src/registerSW.js b/web/src/registerSW.js new file mode 100644 index 00000000..adef4746 --- /dev/null +++ b/web/src/registerSW.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line import/no-unresolved +import { registerSW as viteRegisterSW } from "virtual:pwa-register"; + +// fetch new sw every hour, i.e. update app every hour while running +const intervalMS = 60 * 60 * 1000; + +// https://vite-pwa-org.netlify.app/guide/periodic-sw-updates.html +const registerSW = () => + viteRegisterSW({ + onRegisteredSW(swUrl, registration) { + if (!registration) { + return; + } + + setInterval(async () => { + if (registration.installing || navigator?.onLine === false) return; + + const resp = await fetch(swUrl, { + cache: "no-store", + headers: { + cache: "no-store", + "cache-control": "no-cache", + }, + }); + + if (resp?.status === 200) await registration.update(); + }, intervalMS); + }, + }); + +export default registerSW; diff --git a/web/vite.config.js b/web/vite.config.js index 4df6ef9d..a4fd5a31 100644 --- a/web/vite.config.js +++ b/web/vite.config.js @@ -16,6 +16,7 @@ export default defineConfig(({ mode }) => ({ react(), VitePWA({ registerType: "autoUpdate", + // see registerSW.js imported by index.jsx injectRegister: null, strategies: "injectManifest", devOptions: { From 7581058c9398124506918bafe224aa3d8a541bc7 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 08:45:28 -0400 Subject: [PATCH 158/305] Bump Go version in pipelines --- .github/workflows/build.yaml | 2 +- .github/workflows/release.yaml | 2 +- .github/workflows/test.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0076c0fa..de22292a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -11,7 +11,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index f709332a..b61e3361 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,7 +14,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7473567b..f76862a9 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -11,7 +11,7 @@ jobs: name: Install Go uses: actions/setup-go@v4 with: - go-version: '1.19.x' + go-version: '1.20.x' - name: Install node uses: actions/setup-node@v3 From 7d3d697a203175207f8a6bab564d1d23bc6333eb Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 09:30:36 -0400 Subject: [PATCH 159/305] Fix goreleaser --- .goreleaser.yml | 6 ------ go.mod | 8 ++++---- go.sum | 24 ++++++++---------------- web/package-lock.json | 24 ++++++++++-------------- 4 files changed, 22 insertions(+), 40 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 131a302a..d3e71df2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -119,8 +119,6 @@ archives: - server/ntfy.service - client/client.yml - client/ntfy-client.service - replacements: - amd64: x86_64 - id: ntfy_windows builds: @@ -131,8 +129,6 @@ archives: - LICENSE - README.md - client/client.yml - replacements: - amd64: x86_64 - id: ntfy_darwin builds: @@ -142,8 +138,6 @@ archives: - LICENSE - README.md - client/client.yml - replacements: - darwin: macOS universal_binaries: - id: ntfy_darwin_all diff --git a/go.mod b/go.mod index 88d09d01..35d6b293 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( firebase.google.com/go/v4 v4.11.0 github.com/SherClockHolmes/webpush-go v1.2.0 github.com/prometheus/client_golang v1.16.0 - github.com/stripe/stripe-go/v74 v74.23.0 + github.com/stripe/stripe-go/v74 v74.24.0 ) require ( @@ -69,9 +69,9 @@ require ( 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.3 // indirect - google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 // indirect + google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 // indirect google.golang.org/grpc v1.56.1 // 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 b3094d21..77b79db0 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/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.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= @@ -145,8 +143,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.23.0 h1:9spORjBMhg8SieRrlrqQdlrw+JllpL6gZnD3QGsCN6Q= -github.com/stripe/stripe-go/v74 v74.23.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/stripe/stripe-go/v74 v74.24.0 h1:h+hXEI5avC5moAh2YLtphMFTBnp11TfXTcP4suuWDLk= +github.com/stripe/stripe-go/v74 v74.24.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -244,18 +242,12 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA 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-20230626202813-9b080da550b3 h1:Yofj1/U0xc/Zi5KEpoIxm51I2f85X+eGyY4YzAujRdw= -google.golang.org/genproto v0.0.0-20230626202813-9b080da550b3/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 h1:Wdfp5Hc1bqGCWYZNrir4A1Jb+SmVaV2j1DL/pbMMTGI= -google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3 h1:wl7z+A0jkB3Rl8Hz74SqGDlnnn5VlL2CV+9UTdZOo00= -google.golang.org/genproto/googleapis/api v0.0.0-20230626202813-9b080da550b3/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 h1:iI5Fmsfz4zDINYxJLxn2YChI//ypkHM/KuVSvlN7ZXk= -google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3 h1:QJuqz7YzNTyKDspkp2lrzqtq4lf2AhUSpXTsGP5SbLw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230626202813-9b080da550b3/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 h1:6b+zGQBiXFlAMpQr+cCarAdrZD4QgXSG7uUZadYysgg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUFd6UsOUNmA5kCcWOfORaT3tpAsKQs= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= 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= diff --git a/web/package-lock.json b/web/package-lock.json index 40dff80d..a6aa129e 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2381,14 +2381,10 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", + "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", + "dev": true }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", @@ -3441,9 +3437,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.444", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.444.tgz", - "integrity": "sha512-/AjkL4syRvOpowXWy3N4OHmVbFdWQpfSKHh0sCVYipDeEAtMce3rLjMJi/27Ia9jNIbw6P1JuPN32pSWybXXEQ==", + "version": "1.4.446", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.446.tgz", + "integrity": "sha512-4Gnw7ztEQ/E0eOt5JWfPn9jjeupfUlKoeW5ETKP9nLdWj+4spFoS3Stj19fqlKIaX28UQs0fNX+uKEyoLCBnkw==", "dev": true }, "node_modules/emoji-regex": { @@ -6018,9 +6014,9 @@ } }, "node_modules/rollup": { - "version": "3.25.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", - "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz", + "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" From 26c835cdd1932fec6fb9e7a406dac0902d1d43fe Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 09:58:56 -0400 Subject: [PATCH 160/305] Install notes, background change for xs dark mode drawer --- docs/install.md | 60 +++++++++++++++---------------- docs/releases.md | 13 +++++-- web/src/components/Navigation.jsx | 2 +- web/src/components/theme.js | 8 ----- 4 files changed, 42 insertions(+), 41 deletions(-) diff --git a/docs/install.md b/docs/install.md index 729cfd99..c156f42c 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_x86_64.tar.gz - tar zxvf ntfy_2.6.1_linux_x86_64.tar.gz - sudo cp -a ntfy_2.6.1_linux_x86_64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_x86_64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.tar.gz + tar zxvf ntfy_2.6.2_linux_amd64.tar.gz + sudo cp -a ntfy_2.6.2_linux_amd64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_amd64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.tar.gz - tar zxvf ntfy_2.6.1_linux_armv6.tar.gz - sudo cp -a ntfy_2.6.1_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.tar.gz + tar zxvf ntfy_2.6.2_linux_armv6.tar.gz + sudo cp -a ntfy_2.6.2_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.tar.gz - tar zxvf ntfy_2.6.1_linux_armv7.tar.gz - sudo cp -a ntfy_2.6.1_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.tar.gz + tar zxvf ntfy_2.6.2_linux_armv7.tar.gz + sudo cp -a ntfy_2.6.2_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.tar.gz - tar zxvf ntfy_2.6.1_linux_arm64.tar.gz - sudo cp -a ntfy_2.6.1_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.1_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.tar.gz + tar zxvf ntfy_2.6.2_linux_arm64.tar.gz + sudo cp -a ntfy_2.6.2_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -192,18 +192,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_macOS_all.tar.gz > ntfy_2.6.1_macOS_all.tar.gz -tar zxvf ntfy_2.6.1_macOS_all.tar.gz -sudo cp -a ntfy_2.6.1_macOS_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz > ntfy_2.6.2_darwin_all.tar.gz +tar zxvf ntfy_2.6.2_darwin_all.tar.gz +sudo cp -a ntfy_2.6.2_darwin_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.6.1_macOS_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.6.2_darwin_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -221,7 +221,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.1/ntfy_2.6.1_windows_x86_64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_windows_amd64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 426ce360..129e0b9e 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,8 +2,8 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.1 -Released June 28, 2023 +### ntfy server v2.6.2 +Released June 30, 2023 With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar @@ -31,6 +31,7 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Fix `ntfy pub %` segfaulting ([#760](https://github.com/binwiederhier/ntfy/issues/760), thanks to [@clesmian](https://github.com/clesmian) for reporting) * Newly created access tokens are now lowercase only to fully support `+@` email syntax ([#773](https://github.com/binwiederhier/ntfy/issues/773), thanks to gingervitiz for reporting) * The .1 release fixes a few visual issues with dark mode, and other web app updates ([#791](https://github.com/binwiederhier/ntfy/pull/791), [#793](https://github.com/binwiederhier/ntfy/pull/793), [#792](https://github.com/binwiederhier/ntfy/pull/792), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* The .2 release fixes issues with the service worker in Firefox and adds automatic service worker updates ([#795](https://github.com/binwiederhier/ntfy/pull/795), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Maintenance:** @@ -39,6 +40,14 @@ if you use promo code `MYTOPIC`). ntfy will always remain open source. * Web: Add eslint with eslint-config-airbnb ([#748](https://github.com/binwiederhier/ntfy/pull/748), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Web: Switch to Vite ([#749](https://github.com/binwiederhier/ntfy/pull/749), thanks to [@nimbleghost](https://github.com/nimbleghost)) +**Changes in tarball/zip naming:** +Due to a [change in GoReleaser](https://goreleaser.com/deprecations/#archivesreplacements), some of the binary release +archives now have slightly different names. My apologies if this causes issues in the downstream projects that use ntfy: + +- `ntfy_v${VERSION}_windows_x86_64.zip` -> `ntfy_v${VERSION}_windows_amd64.zip` +- `ntfy_v${VERSION}_linux_x86_64.tar.gz` -> `ntfy_v${VERSION}_linux_amd64.tar.gz` +- `ntfy_v${VERSION}_macOS_all.tar.gz` -> `ntfy_v${VERSION}_darwin_all.tar.gz` + ## ntfy server v2.5.0 Released May 18, 2023 diff --git a/web/src/components/Navigation.jsx b/web/src/components/Navigation.jsx index 9025222e..7e30931a 100644 --- a/web/src/components/Navigation.jsx +++ b/web/src/components/Navigation.jsx @@ -61,7 +61,7 @@ const Navigation = (props) => { ModalProps={{ keepMounted: true }} // Better open performance on mobile. sx={{ display: { xs: "block", sm: "none" }, - "& .MuiDrawer-paper": { boxSizing: "border-box", width: navWidth }, + "& .MuiDrawer-paper": { boxSizing: "border-box", width: navWidth, backgroundImage: "none" }, }} > {navigationList} diff --git a/web/src/components/theme.js b/web/src/components/theme.js index 9cf6649f..64217eee 100644 --- a/web/src/components/theme.js +++ b/web/src/components/theme.js @@ -55,14 +55,6 @@ export const darkTheme = { }, }, }, - MuiPaper: { - styleOverrides: { - root: { - // for the sidebar on narrow (xs) screens - backgroundImage: "none", - }, - }, - }, }, palette: { mode: "dark", From 88eb728fe396a599ff1f2d339bdd6b4e5a18fb22 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 21:51:03 -0400 Subject: [PATCH 161/305] Changelog --- docs/install.md | 4 ++- docs/releases.md | 5 +-- docs/subscribe/pwa.md | 2 ++ web/package-lock.json | 78 +++++++++++++++++++++---------------------- 4 files changed, 47 insertions(+), 42 deletions(-) diff --git a/docs/install.md b/docs/install.md index c156f42c..c7febac1 100644 --- a/docs/install.md +++ b/docs/install.md @@ -170,7 +170,9 @@ Manually installing the .deb file: ``` ## Arch Linux -ntfy can be installed using an [AUR package](https://aur.archlinux.org/packages/ntfysh-bin/). You can use an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers) like `paru`, `yay` or others to download, build and install ntfy and keep it up to date. +ntfy can be installed using an [AUR package](https://aur.archlinux.org/packages/ntfysh-bin/). +You can use an [AUR helper](https://wiki.archlinux.org/title/AUR_helpers) like `paru`, `yay` or others to download, +build and install ntfy and keep it up to date. ``` paru -S ntfysh-bin ``` diff --git a/docs/releases.md b/docs/releases.md index 129e0b9e..e6bfb7bf 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -5,10 +5,11 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ### ntfy server v2.6.2 Released June 30, 2023 -With this release, the ntfy web app now contains a **[progressive web app](https://docs.ntfy.sh/subscribe/pwa/) (PWA) +With this release, the ntfy web app now contains a **[progressive web app](subscribe/pwa.md) (PWA) with Web Push support**, which means you'll be able to **install the ntfy web app on your desktop or phone** similar to a native app (__even on iOS!__ 🥳). Installing the PWA gives ntfy web its own launcher, a standalone window, -push notifications, and an app badge with the unread notification count. +push notifications, and an app badge with the unread notification count. Note that for self-hosted servers, +[Web Push](config.md#web-push) must be configured. On top of that, this release also brings **dark mode** 🧛🌙 to the web app. diff --git a/docs/subscribe/pwa.md b/docs/subscribe/pwa.md index f60583f5..582cb5ae 100644 --- a/docs/subscribe/pwa.md +++ b/docs/subscribe/pwa.md @@ -12,6 +12,8 @@ Web app installation is **supported on** (see [compatibility table](https://cani - **Firefox:** Android, as well as on Windows/Linux [via an extension](https://addons.mozilla.org/en-US/firefox/addon/pwas-for-firefox/) - **Edge:** Windows +Note that for self-hosted servers, [Web Push](../config.md#web-push) must be configured for the PWA to work. + ## Installation ### Chrome on Desktop diff --git a/web/package-lock.json b/web/package-lock.json index a6aa129e..8ee2635d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2257,14 +2257,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2307,9 +2307,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2694,9 +2694,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.0.tgz", - "integrity": "sha512-Eu1V3kz3mV0wUpVTiFHuaT8UD1gj/0VnoFHQYX35xlslQUpe8CuYoKFn9d4WZFHm3yDywz6ALZuGdnUPKrNeAw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", + "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", "engines": { "node": ">=14" } @@ -2726,9 +2726,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", - "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3437,9 +3437,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.446", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.446.tgz", - "integrity": "sha512-4Gnw7ztEQ/E0eOt5JWfPn9jjeupfUlKoeW5ETKP9nLdWj+4spFoS3Stj19fqlKIaX28UQs0fNX+uKEyoLCBnkw==", + "version": "1.4.447", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", + "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", "dev": true }, "node_modules/emoji-regex": { @@ -3610,15 +3610,15 @@ } }, "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3630,7 +3630,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "espree": "^9.6.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3650,7 +3650,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -4039,12 +4039,12 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -4110,9 +4110,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5824,11 +5824,11 @@ } }, "node_modules/react-router": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.0.tgz", - "integrity": "sha512-OD+vkrcGbvlwkspUFDgMzsu1RXwdjNh83YgG/28lBnDzgslhCgxIqoExLlxsfTpIygp7fc+Hd3esloNwzkm2xA==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", + "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", "dependencies": { - "@remix-run/router": "1.7.0" + "@remix-run/router": "1.7.1" }, "engines": { "node": ">=14" @@ -5838,12 +5838,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.0.tgz", - "integrity": "sha512-YEwlApKwzMMMbGbhh+Q7MsloTldcwMgHxUY/1g0uA62+B1hZo2jsybCWIDCL8zvIDB1FA0pBKY9chHbZHt+2dQ==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", + "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", "dependencies": { - "@remix-run/router": "1.7.0", - "react-router": "6.14.0" + "@remix-run/router": "1.7.1", + "react-router": "6.14.1" }, "engines": { "node": ">=14" From 4267c0d9b62b11fbd3f9d421817d9be3b7ae8869 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 30 Jun 2023 21:54:27 -0400 Subject: [PATCH 162/305] Update docs --- docs/subscribe/phone.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/subscribe/phone.md b/docs/subscribe/phone.md index 440dbbe3..e88ff0fb 100644 --- a/docs/subscribe/phone.md +++ b/docs/subscribe/phone.md @@ -12,6 +12,9 @@ You can get the Android app from both [Google Play](https://play.google.com/stor from [F-Droid](https://f-droid.org/en/packages/io.heckel.ntfy/). Both are largely identical, with the one exception that the F-Droid flavor does not use Firebase. The iOS app can be downloaded from the [App Store](https://apps.apple.com/us/app/ntfy/id1625396347). +Alternatively, you may also want to consider using the **[progressive web app (PWA)](pwa.md)** instead of the native app. +The PWA is a website that you can add to your home screen, and it will behave just like a native app. + ## Overview A picture is worth a thousand words. Here are a few screenshots showing what the app looks like. It's all pretty straight forward. You can add topics and as soon as you add them, you can [publish messages](../publish.md) to them. From 67603e58bf6eae6238fe2b79b81d73c88910e5d4 Mon Sep 17 00:00:00 2001 From: Nicola Rizzo Date: Sat, 1 Jul 2023 13:51:18 +0000 Subject: [PATCH 163/305] Translated using Weblate (Italian) Currently translated at 70.1% (268 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index 95c4b5b1..62fc950c 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -259,5 +259,12 @@ "account_usage_emails_title": "Email inviate", "account_usage_cannot_create_portal_session": "Impossibile aprire il portale di pagamento", "account_delete_title": "Elimina account", - "account_basics_username_description": "Hey, sei tu ❤" + "account_basics_username_description": "Hey, sei tu ❤", + "publish_dialog_call_item": "Chiama numero {{number}}", + "common_copy_to_clipboard": "Copia negli appunti", + "publish_dialog_call_label": "Chiamata telefonica", + "publish_dialog_call_reset": "Rimuovi chiamata telefonica", + "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" } From 9f255aee252e429740b8aab192ec3007e5180435 Mon Sep 17 00:00:00 2001 From: Nicola Rizzo Date: Sat, 1 Jul 2023 13:53:40 +0000 Subject: [PATCH 164/305] Translated using Weblate (Italian) Currently translated at 70.4% (269 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index 62fc950c..a895e1a6 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -266,5 +266,6 @@ "publish_dialog_call_reset": "Rimuovi chiamata telefonica", "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_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." } From 7a1488fcd3f02f9d0828fc813f984d48c9b4b9d9 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:10:37 +0200 Subject: [PATCH 165/305] Web app: add RTL support Ref: https://mui.com/material-ui/guides/right-to-left https://m2.material.io/design/usability/bidirectionality.html --- web/package-lock.json | 40 ++++++++++++++++-- web/package.json | 5 ++- web/src/components/App.jsx | 56 +++++++++++++++---------- web/src/components/RTLCacheProvider.jsx | 22 ++++++++++ 4 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 web/src/components/RTLCacheProvider.jsx diff --git a/web/package-lock.json b/web/package-lock.json index 8ee2635d..ef9680be 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -8,6 +8,7 @@ "name": "ntfy", "version": "1.0.0", "dependencies": { + "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", @@ -25,7 +26,9 @@ "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.0.0", @@ -1765,6 +1768,11 @@ "stylis": "4.2.0" } }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", @@ -1777,6 +1785,11 @@ "stylis": "4.2.0" } }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", @@ -3314,6 +3327,14 @@ "node": ">=8" } }, + "node_modules/cssjanus": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cssjanus/-/cssjanus-2.1.0.tgz", + "integrity": "sha512-kAijbny3GmdOi9k+QT6DGIXqFvL96aksNlGr4Rhk9qXDZYWUojU4bRc3IHWxdaLNOqgEZHuXoe5Wl2l7dxLW5g==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", @@ -6351,9 +6372,20 @@ } }, "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/stylis-plugin-rtl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz", + "integrity": "sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg==", + "dependencies": { + "cssjanus": "^2.0.1" + }, + "peerDependencies": { + "stylis": "4.x" + } }, "node_modules/supports-color": { "version": "5.5.0", diff --git a/web/package.json b/web/package.json index 2e52635a..400a090a 100644 --- a/web/package.json +++ b/web/package.json @@ -11,6 +11,7 @@ "lint": "eslint --report-unused-disable-directives --ext .js,.jsx ./src/" }, "dependencies": { + "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.0", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.4.2", @@ -28,7 +29,9 @@ "react-infinite-scroll-component": "^6.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", - "stacktrace-js": "^2.0.2" + "stacktrace-js": "^2.0.2", + "stylis": "^4.3.0", + "stylis-plugin-rtl": "^2.1.1" }, "devDependencies": { "@vitejs/plugin-react": "^4.0.0", diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 2ad7f419..8b60b3e8 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -3,6 +3,7 @@ import { createContext, Suspense, useContext, useEffect, useState, useMemo } fro import { Box, Toolbar, CssBaseline, Backdrop, CircularProgress, useMediaQuery, ThemeProvider, createTheme } from "@mui/material"; import { useLiveQuery } from "dexie-react-hooks"; import { BrowserRouter, Outlet, Route, Routes, useParams } from "react-router-dom"; +import { useTranslation } from "react-i18next"; import { AllSubscriptions, SingleSubscription } from "./Notifications"; import { darkTheme, lightTheme } from "./theme"; import Navigation from "./Navigation"; @@ -21,6 +22,7 @@ import Signup from "./Signup"; import Account from "./Account"; import "../app/i18n"; // Translations! import prefs, { THEME } from "../app/Prefs"; +import RTLCacheProvider from "./RTLCacheProvider"; export const AccountContext = createContext(null); @@ -39,37 +41,47 @@ const darkModeEnabled = (prefersDarkMode, themePreference) => { }; const App = () => { + const { i18n } = useTranslation(); + const languageDir = i18n.dir(); + const [account, setAccount] = useState(null); const accountMemo = useMemo(() => ({ account, setAccount }), [account, setAccount]); const prefersDarkMode = useMediaQuery("(prefers-color-scheme: dark)"); const themePreference = useLiveQuery(() => prefs.theme()); const theme = React.useMemo( - () => createTheme(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), - [prefersDarkMode, themePreference] + () => createTheme({ ...(darkModeEnabled(prefersDarkMode, themePreference) ? darkTheme : lightTheme), direction: languageDir }), + [prefersDarkMode, themePreference, languageDir] ); + useEffect(() => { + document.documentElement.setAttribute("lang", i18n.language); + document.dir = languageDir; + }, [i18n.language, languageDir]); + return ( }> - - - - - - - } /> - } /> - }> - } /> - } /> - } /> - } /> - } /> - - - - - - + + + + + + + + } /> + } /> + }> + } /> + } /> + } /> + } /> + } /> + + + + + + + ); }; diff --git a/web/src/components/RTLCacheProvider.jsx b/web/src/components/RTLCacheProvider.jsx new file mode 100644 index 00000000..a85fced6 --- /dev/null +++ b/web/src/components/RTLCacheProvider.jsx @@ -0,0 +1,22 @@ +import React from "react"; + +import rtlPlugin from "stylis-plugin-rtl"; +import { CacheProvider } from "@emotion/react"; +import createCache from "@emotion/cache"; +import { prefixer } from "stylis"; +import { useTranslation } from "react-i18next"; + +// https://mui.com/material-ui/guides/right-to-left + +const cacheRtl = createCache({ + key: "muirtl", + stylisPlugins: [prefixer, rtlPlugin], +}); + +const RTLCacheProvider = ({ children }) => { + const { i18n } = useTranslation(); + + return i18n.dir() === "rtl" ? {children} : children; +}; + +export default RTLCacheProvider; From 311ffc36727146030b116b42234bb75fef4f17e2 Mon Sep 17 00:00:00 2001 From: nimbleghost <132819643+nimbleghost@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:24:13 +0200 Subject: [PATCH 166/305] Format datetimes using i18n lang --- web/src/app/utils.js | 7 ++++--- web/src/components/Account.jsx | 15 +++++++-------- web/src/components/Notifications.jsx | 8 ++++---- web/src/components/SubscriptionPopup.jsx | 10 ++++++++-- web/src/components/UpgradeDialog.jsx | 4 ++-- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 244d3321..39e7a3b2 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -130,13 +130,14 @@ export const hashCode = (s) => { return hash; }; -export const formatShortDateTime = (timestamp) => - new Intl.DateTimeFormat("default", { +export const formatShortDateTime = (timestamp, language) => + new Intl.DateTimeFormat(language, { dateStyle: "short", timeStyle: "short", }).format(new Date(timestamp * 1000)); -export const formatShortDate = (timestamp) => new Intl.DateTimeFormat("default", { dateStyle: "short" }).format(new Date(timestamp * 1000)); +export const formatShortDate = (timestamp, language) => + 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/Account.jsx b/web/src/components/Account.jsx index 541a008d..319353df 100644 --- a/web/src/components/Account.jsx +++ b/web/src/components/Account.jsx @@ -39,7 +39,6 @@ import EditIcon from "@mui/icons-material/Edit"; import { Trans, useTranslation } from "react-i18next"; import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined"; -import i18n from "i18next"; import humanizeDuration from "humanize-duration"; import CelebrationIcon from "@mui/icons-material/Celebration"; import CloseIcon from "@mui/icons-material/Close"; @@ -224,7 +223,7 @@ const ChangePasswordDialog = (props) => { }; const AccountType = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); const [upgradeDialogKey, setUpgradeDialogKey] = useState(0); const [upgradeDialogOpen, setUpgradeDialogOpen] = useState(false); @@ -283,7 +282,7 @@ const AccountType = () => { {account.billing?.paid_until && !account.billing?.cancel_at && ( @@ -328,7 +327,7 @@ const AccountType = () => { {account.billing?.cancel_at > 0 && ( {t("account_basics_tier_canceled_subscription", { - date: formatShortDate(account.billing.cancel_at), + date: formatShortDate(account.billing.cancel_at, i18n.language), })} )} @@ -556,7 +555,7 @@ const AddPhoneNumberDialog = (props) => { }; const Stats = () => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); if (!account) { @@ -798,7 +797,7 @@ const Tokens = () => { }; const TokensTable = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const [snackOpen, setSnackOpen] = useState(false); const [upsertDialogKey, setUpsertDialogKey] = useState(0); const [upsertDialogOpen, setUpsertDialogOpen] = useState(false); @@ -872,11 +871,11 @@ const TokensTable = (props) => { {token.token !== session.token() && (token.label || "-")} - {token.expires ? formatShortDateTime(token.expires) : {t("account_tokens_table_never_expires")}} + {token.expires ? formatShortDateTime(token.expires, i18n.language) : {t("account_tokens_table_never_expires")}}
- {formatShortDateTime(token.last_access)} + {formatShortDateTime(token.last_access, i18n.language)} { }; const NotificationItem = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { notification } = props; const { attachment } = notification; - const date = formatShortDateTime(notification.time); + const date = formatShortDateTime(notification.time, i18n.language); const otherTags = unmatchedTags(notification.tags); const tags = otherTags.length > 0 ? otherTags.join(", ") : null; const handleDelete = async () => { @@ -277,7 +277,7 @@ const NotificationItem = (props) => { }; const Attachment = (props) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { attachment } = props; const expired = attachment.expires && attachment.expires < Date.now() / 1000; const expires = attachment.expires && attachment.expires > Date.now() / 1000; @@ -296,7 +296,7 @@ const Attachment = (props) => { if (expires) { infos.push( t("notifications_attachment_link_expires", { - date: formatShortDateTime(attachment.expires), + date: formatShortDateTime(attachment.expires, i18n.language), }) ); } diff --git a/web/src/components/SubscriptionPopup.jsx b/web/src/components/SubscriptionPopup.jsx index 17b12504..1a6a689c 100644 --- a/web/src/components/SubscriptionPopup.jsx +++ b/web/src/components/SubscriptionPopup.jsx @@ -117,10 +117,16 @@ export const SubscriptionPopup = (props) => { ])[0]; const nowSeconds = Math.round(Date.now() / 1000); const message = shuffle([ - `Hello friend, this is a test notification from ntfy web. It's ${formatShortDateTime(nowSeconds)} right now. Is that early or late?`, + `Hello friend, this is a test notification from ntfy web. It's ${formatShortDateTime( + nowSeconds, + "en-US" + )} right now. Is that early or late?`, `So I heard you like ntfy? If that's true, go to GitHub and star it, or to the Play store and rate it. Thanks! Oh yeah, this is a test notification.`, `It's almost like you want to hear what I have to say. I'm not even a machine. I'm just a sentence that Phil typed on a random Thursday.`, - `Alright then, it's ${formatShortDateTime(nowSeconds)} already. Boy oh boy, where did the time go? I hope you're alright, friend.`, + `Alright then, it's ${formatShortDateTime( + nowSeconds, + "en-US" + )} already. Boy oh boy, where did the time go? I hope you're alright, friend.`, `There are nine million bicycles in Beijing That's a fact; It's a thing we can't deny. I wonder if that's true ...`, `I'm really excited that you're trying out ntfy. Did you know that there are a few public topics, such as ntfy.sh/stats and ntfy.sh/announcements.`, `It's interesting to hear what people use ntfy for. I've heard people talk about using it for so many cool things. What do you use it for?`, diff --git a/web/src/components/UpgradeDialog.jsx b/web/src/components/UpgradeDialog.jsx index 4bf0244d..712c47ec 100644 --- a/web/src/components/UpgradeDialog.jsx +++ b/web/src/components/UpgradeDialog.jsx @@ -62,7 +62,7 @@ const Banner = { const UpgradeDialog = (props) => { const theme = useTheme(); - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const { account } = useContext(AccountContext); // May be undefined! const [error, setError] = useState(""); const [tiers, setTiers] = useState(null); @@ -233,7 +233,7 @@ const UpgradeDialog = (props) => { From 911fe9e9f85b8298d482516f24970c98a8e0c386 Mon Sep 17 00:00:00 2001 From: waclaw66 Date: Mon, 3 Jul 2023 07:23:17 +0000 Subject: [PATCH 167/305] Translated using Weblate (Czech) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/cs/ --- web/public/static/langs/cs.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/cs.json b/web/public/static/langs/cs.json index 6b967c87..d45857a2 100644 --- a/web/public/static/langs/cs.json +++ b/web/public/static/langs/cs.json @@ -365,5 +365,20 @@ "account_basics_phone_numbers_no_phone_numbers_yet": "Zatím žádná telefonní čísla", "account_basics_phone_numbers_copied_to_clipboard": "Telefonní číslo zkopírováno do schránky", "publish_dialog_chip_call_no_verified_numbers_tooltip": "Žádná ověřená telefonní čísla", - "publish_dialog_call_item": "Vytočit číslo {{number}}" + "publish_dialog_call_item": "Vytočit číslo {{number}}", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_title": "Přidat telefonní číslo", + "account_basics_phone_numbers_dialog_number_label": "Telefonní číslo", + "account_basics_phone_numbers_dialog_code_placeholder": "např. 123456", + "account_basics_phone_numbers_dialog_code_label": "Ověřovací kód", + "account_usage_calls_none": "S tímto účtem nelze uskutečňovat žádné telefonní hovory", + "account_basics_phone_numbers_dialog_check_verification_button": "Potvrdit kód", + "account_basics_phone_numbers_dialog_number_placeholder": "např. +1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "Odeslat SMS", + "account_basics_phone_numbers_dialog_verify_button_call": "Zavolat mi", + "account_basics_phone_numbers_dialog_channel_call": "Zavolat", + "account_usage_calls_title": "Uskutečněné telefonáty", + "account_upgrade_dialog_tier_features_no_calls": "Žádné telefonní hovory", + "account_upgrade_dialog_tier_features_calls_one": "{{calls}} denní telefonní hovor", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} denních telefonních hovorů" } From d01ed355e06846319abe4d41810178bb9bdbebae Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 14:23:44 -0400 Subject: [PATCH 168/305] Changelog --- docs/releases.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index e6bfb7bf..a49234df 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.6.2 +## ntfy server v2.6.2 Released June 30, 2023 With this release, the ntfy web app now contains a **[progressive web app](subscribe/pwa.md) (PWA) @@ -1251,6 +1251,16 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet +### ntfy server v2.6.2 (UNRELEASED) + +**Features:** + +* Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) + +**Bug fixes + maintenance:** + +* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) + ### ntfy Android app v1.16.1 (UNRELEASED) **Features:** From 35cb4606f6460af0053f4a26d1b058cc2cd73eb8 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:10:17 -0400 Subject: [PATCH 169/305] FAQ --- README.md | 2 +- docs/faq.md | 10 ++++++++++ docs/releases.md | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 59047eed..3e8f74a8 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![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/) +[![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) diff --git a/docs/faq.md b/docs/faq.md index d7977a5f..68643938 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -80,3 +80,13 @@ a proper backend. So as long as you secure your backend with ACLs, exposing the 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 appreciated. + +## Can I email you? Can I DM you on Discord/Matrix? +While I love chatting on [Discord](https://discord.gg/cT7ECsZj9w), [Matrix](https://matrix.to/#/#ntfy-space:matrix.org), +or on [Lemmy](https://discuss.ntfy.sh/c/ntfy), I generally **do not respond to emails about ntfy or direct messages** +about ntfy, unless you are paying for a [ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business +opportunities. + +I am sorry, but answering individual questions about ntfy on a 1-on-1 basis is not scalable. Answering your questions +in the above-mentioned forums benefits others, since I can link to the discussion at a later point in time, or other users +may be able to help out. I hope you understand. diff --git a/docs/releases.md b/docs/releases.md index a49234df..35e049c4 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1251,7 +1251,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet -### ntfy server v2.6.2 (UNRELEASED) +### ntfy server v2.7.0 (UNRELEASED) **Features:** From 77cc52e4acef722d920c01e4341f27961298c58f Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:11:45 -0400 Subject: [PATCH 170/305] Remove email --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 3e8f74a8..4c4f6645 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,8 @@ 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/) - asynchronous forum (_new as of June 2023_) +* [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 -* [Email](https://heckel.io/about) - reach me directly (_I usually prefer the other methods_) ## Announcements / beta testers For announcements of new releases and cutting-edge beta versions, please subscribe to the [ntfy.sh/announcements](https://ntfy.sh/announcements) From 53f13fd811111ded896b0fee90d3f556fb6a22dd Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:47:19 -0400 Subject: [PATCH 171/305] FAQ --- docs/faq.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 68643938..8844566f 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -83,9 +83,9 @@ appreciated. ## Can I email you? Can I DM you on Discord/Matrix? While I love chatting on [Discord](https://discord.gg/cT7ECsZj9w), [Matrix](https://matrix.to/#/#ntfy-space:matrix.org), -or on [Lemmy](https://discuss.ntfy.sh/c/ntfy), I generally **do not respond to emails about ntfy or direct messages** -about ntfy, unless you are paying for a [ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business -opportunities. +[Lemmy](https://discuss.ntfy.sh/c/ntfy), or [GitHub](https://github.com/binwiederhier/ntfy/issues), I generally +**do not respond to emails about ntfy or direct messages** about ntfy, unless you are paying for a +[ntfy Pro](https://ntfy.sh/#pricing) plan, or you are inquiring about business opportunities. I am sorry, but answering individual questions about ntfy on a 1-on-1 basis is not scalable. Answering your questions in the above-mentioned forums benefits others, since I can link to the discussion at a later point in time, or other users From cd38511ad418e7d1ca0eded4419821f5a838e8e1 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 4 Jul 2023 20:52:39 -0400 Subject: [PATCH 172/305] Update deps --- go.mod | 4 +- go.sum | 4 + web/package-lock.json | 225 ++++++++++++++++++++++-------------------- 3 files changed, 125 insertions(+), 108 deletions(-) diff --git a/go.mod b/go.mod index 35d6b293..7c53b10a 100644 --- a/go.mod +++ b/go.mod @@ -64,8 +64,8 @@ require ( github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/net v0.11.0 // indirect - golang.org/x/sys v0.9.0 // indirect - golang.org/x/text v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.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.3 // indirect diff --git a/go.sum b/go.sum index 77b79db0..d5685ee8 100644 --- a/go.sum +++ b/go.sum @@ -204,6 +204,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.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.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= @@ -216,6 +218,8 @@ 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.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.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= diff --git a/web/package-lock.json b/web/package-lock.json index ef9680be..de8aac16 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -78,35 +78,35 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", + "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.6", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", + "@babel/traverse": "^7.22.6", "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.2" }, "engines": { "node": ">=6.9.0" @@ -156,16 +156,16 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", + "@babel/compat-data": "^7.22.6", "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" }, "engines": { "node": ">=6.9.0" @@ -175,9 +175,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", - "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", + "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -187,8 +187,8 @@ "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "semver": "^6.3.0" + "@babel/helper-split-export-declaration": "^7.22.6", + "@nicolo-ribaudo/semver-v6": "^6.3.3" }, "engines": { "node": ">=6.9.0" @@ -198,14 +198,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", - "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", + "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.0" + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -388,9 +388,9 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" @@ -440,13 +440,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dev": true, "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", + "@babel/traverse": "^7.22.6", "@babel/types": "^7.22.5" }, "engines": { @@ -467,9 +467,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", + "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -887,19 +887,19 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", - "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "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.5", + "@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.5", - "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { @@ -1295,9 +1295,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", - "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", + "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1576,13 +1576,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", - "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz", + "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1613,7 +1613,7 @@ "@babel/plugin-transform-block-scoping": "^7.22.5", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", "@babel/plugin-transform-destructuring": "^7.22.5", "@babel/plugin-transform-dotall-regex": "^7.22.5", @@ -1638,7 +1638,7 @@ "@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.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.5", @@ -1656,11 +1656,11 @@ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", "babel-plugin-polyfill-corejs2": "^0.4.3", "babel-plugin-polyfill-corejs3": "^0.8.1", "babel-plugin-polyfill-regenerator": "^0.5.0", - "core-js-compat": "^3.30.2", - "semver": "^6.3.0" + "core-js-compat": "^3.31.0" }, "engines": { "node": ">=6.9.0" @@ -1692,9 +1692,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -1717,9 +1717,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", + "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.5", @@ -1727,8 +1727,8 @@ "@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.5", - "@babel/parser": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.6", "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" @@ -2394,10 +2394,14 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.4.tgz", - "integrity": "sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==", - "dev": true + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", @@ -2422,14 +2426,14 @@ "dev": true }, "node_modules/@mui/base": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.5.tgz", - "integrity": "sha512-vy3TWLQYdGNecTaufR4wDNQFV2WEg6wRPi6BVbx6q1vP3K1mbxIn1+XOqOzfYBXjFHvMx0gZAo2TgWbaqfgvAA==", + "version": "5.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.6.tgz", + "integrity": "sha512-jcHy6HwOX7KzRhRtL8nvIvUlxvLx2Fl6NMRCyUSQSvMTyfou9kndekz0H4HJaXvG1Y4WEifk23RYedOlrD1kEQ==", "dependencies": { "@babel/runtime": "^7.22.5", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "@popperjs/core": "^2.11.8", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -2454,20 +2458,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.4", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.4.tgz", - "integrity": "sha512-yFrMWcrlI0TqRN5jpb6Ma9iI7sGTHpytdzzL33oskFHNQ8UgrtPas33Y1K7sWAMwCrr1qbWDrOHLAQG4tAzuSw==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.7.tgz", + "integrity": "sha512-/suIo4WoeL/OyO3KUsFVpdOmKiSAr6NpWXmQ4WLSxwKrTiha1FJxM6vwAki5W/5kR9WnVLw5E8JC4oHHsutT8w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.13.7.tgz", + "integrity": "sha512-zoVtkb9jYVUGfI7CobOdDBEAlpg3XESiO6cWqSDGwEma69+CBDIAwGpnO5truvQDJHBGSAfzFj3nObwxjkyA7Q==", "dependencies": { - "@babel/runtime": "^7.21.0" + "@babel/runtime": "^7.22.5" }, "engines": { "node": ">=12.0.0" @@ -2488,16 +2492,16 @@ } }, "node_modules/@mui/material": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.6.tgz", - "integrity": "sha512-/c2ZApeQm2sTYdQXjqEnldaBMBcUEiyu2VRS6bS39ZeNaAcCLBQbYocLR46R+f0S5dgpBzB0T4AsOABPOFYZ5Q==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.7.tgz", + "integrity": "sha512-+n453jDDm88zZM3b5YK29nZ7gXY+s+rryH9ovDbhmfSkOlFtp+KSqbXy5cTaC/UlDqDM7sYYJGq8BmJov3v9Tg==", "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.5", - "@mui/core-downloads-tracker": "^5.13.4", - "@mui/system": "^5.13.6", + "@mui/base": "5.0.0-beta.6", + "@mui/core-downloads-tracker": "^5.13.7", + "@mui/system": "^5.13.7", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "@types/react-transition-group": "^4.4.6", "clsx": "^1.2.1", "csstype": "^3.1.2", @@ -2532,12 +2536,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", + "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", + "@babel/runtime": "^7.22.5", + "@mui/utils": "^5.13.7", "prop-types": "^15.8.1" }, "engines": { @@ -2589,15 +2593,15 @@ } }, "node_modules/@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.7.tgz", + "integrity": "sha512-7R2KdI6vr8KtnauEfg9e9xQmPk6Gg/1vGNiALYyhSI+cYztxN6WmlSqGX4bjWn/Sygp1TUE1jhFEgs7MWruhkQ==", "dependencies": { "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", + "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", + "@mui/utils": "^5.13.7", "clsx": "^1.2.1", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2641,13 +2645,13 @@ } }, "node_modules/@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "version": "5.13.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.7.tgz", + "integrity": "sha512-/3BLptG/q0u36eYED7Nhf4fKXmcKb6LjjT7ZMwhZIZSdSxVqDqSTmATW3a56n3KEPQUXCU9TpxAfCBQhs6brVA==", "dependencies": { "@babel/runtime": "^7.22.5", "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2662,6 +2666,15 @@ "react": "^17.0.0 || ^18.0.0" } }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -3175,9 +3188,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", "dev": true, "funding": [ { @@ -3458,9 +3471,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==", + "version": "1.4.450", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", + "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", "dev": true }, "node_modules/emoji-regex": { From 56ed4f0515de2b9a45cae41e23e2f228491c02c6 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 5 Jul 2023 08:45:26 -0400 Subject: [PATCH 173/305] Blog post --- docs/integrations.md | 1 + go.sum | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/integrations.md b/docs/integrations.md index ce3bb32b..3a38fb10 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -128,6 +128,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [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 - [ntfy: des notifications instantanées](https://blogmotion.fr/diy/ntfy-notification-push-domotique-20708) - blogmotion.fr - 5/2023 diff --git a/go.sum b/go.sum index d5685ee8..b96c581d 100644 --- a/go.sum +++ b/go.sum @@ -202,8 +202,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w 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.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -216,8 +214,6 @@ 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.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= -golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= From 8d9fa31f3d9e118499da5063713d7a2d9635bc8f Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Tue, 4 Jul 2023 20:19:20 +0000 Subject: [PATCH 174/305] Translated using Weblate (Bulgarian) Currently translated at 83.7% (320 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/bg/ --- web/public/static/langs/bg.json | 39 +++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/web/public/static/langs/bg.json b/web/public/static/langs/bg.json index a040b015..1d1066f6 100644 --- a/web/public/static/langs/bg.json +++ b/web/public/static/langs/bg.json @@ -3,7 +3,7 @@ "alert_grant_description": "Разрешете на мрежовия четец да показва известия.", "notifications_attachment_copy_url_title": "Копиране на адреса на прикачения файл", "notifications_example": "Пример", - "notifications_no_subscriptions_title": "Липсват абонаменти", + "notifications_no_subscriptions_title": "Липсват абонаменти.", "nav_topics_title": "Абонаменти", "action_bar_send_test_notification": "Пробно известие", "action_bar_unsubscribe": "Отписване", @@ -60,8 +60,8 @@ "notifications_click_copy_url_button": "Копиране на препратка", "notifications_click_open_button": "Отваряне", "notifications_click_copy_url_title": "Копиране на препратката в междинната памет", - "notifications_none_for_topic_title": "Липсват известия в темата", - "notifications_none_for_any_title": "Липсват известия", + "notifications_none_for_topic_title": "Липсват известия в темата.", + "notifications_none_for_any_title": "Липсват известия.", "notifications_none_for_topic_description": "За да изпратите известия в тази тема направете заявка чрез методите PUT или POST към адреса й.", "notifications_none_for_any_description": "За да изпратите известия в тема направете заявка чрез методите PUT или POST към адреса ѝ. Ето пример с една от вашите теми.", "notifications_no_subscriptions_description": "Щракнете върху „{{linktext}}“, за да създадете тема или да се абонирате. След това като направите заявка чрез методите PUT или POST ще ги получите тук.", @@ -287,5 +287,36 @@ "account_upgrade_dialog_cancel_warning": "Това действие ще прекрати абонамента и ще промени профила ви на неплатен на {{date}}. На тази дата резервираните теми, както и пазените на сървъра съобщения, ще бъдат премахнати.", "account_upgrade_dialog_proration_info": "Преизчисляване на плащания: При надграждане между платени планове разликата в цената ще бъде начислена незабавно. При преминаване към по-евтин план надплатената сума ще бъде използвана за плащане за бъдещи периоди.", "account_basics_tier_manage_billing_button": "Управление на плащанията", - "account_basics_tier_canceled_subscription": "Абонаментът е прекратен и профилът ще бъде променен на неплатен на {{date}}." + "account_basics_tier_canceled_subscription": "Абонаментът е прекратен и профилът ще бъде променен на неплатен на {{date}}.", + "account_basics_phone_numbers_dialog_verify_button_sms": "Изпращане на SMS", + "account_basics_phone_numbers_dialog_verify_button_call": "Обаждане до мен", + "account_upgrade_dialog_tier_features_calls_other": "{{calls}} телефонни обаждания на ден", + "common_copy_to_clipboard": "Копиране в междинната памет", + "publish_dialog_call_label": "Телефонно обаждане", + "publish_dialog_call_reset": "Премахване на телефонно обаждане", + "publish_dialog_chip_call_label": "Телефонно обаждане", + "account_basics_phone_numbers_dialog_description": "За да възползвате от услугата известяване чрез телефонно обаждане, трябва да добавите и потвърдите поне един телефонен номер. Проверката може да бъде извършена чрез SMS или телефонно обаждане.", + "account_basics_phone_numbers_title": "Телефонни номера", + "account_basics_phone_numbers_dialog_number_placeholder": "напр. +1222333444", + "account_basics_phone_numbers_dialog_number_label": "Телефонен номер", + "account_basics_phone_numbers_dialog_title": "Добавяне на телефонен номер", + "account_basics_phone_numbers_copied_to_clipboard": "Телефонният номер е копиран в междинната памет", + "account_basics_phone_numbers_no_phone_numbers_yet": "Все още няма телефонни номера", + "account_basics_phone_numbers_description": "За известяване чрез телефонно обаждане", + "publish_dialog_call_item": "Обаждане на телефонен номер {{number}}", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "Няма потвърдени телефонни номера", + "account_basics_phone_numbers_dialog_channel_call": "Обаждане", + "account_basics_phone_numbers_dialog_channel_sms": "SMS", + "account_basics_phone_numbers_dialog_check_verification_button": "Код за потвърждаване", + "account_basics_phone_numbers_dialog_code_placeholder": "напр. 123456", + "account_basics_phone_numbers_dialog_code_label": "Код за потвърждение", + "account_usage_calls_none": "С този профил не могат да се извършват телефонни обаждания", + "account_usage_calls_title": "Извършени телефонни обаждания", + "account_upgrade_dialog_tier_features_no_calls": "Без телефонни обаждания", + "account_upgrade_dialog_tier_features_messages_one": "{{messages}} съобщение на ден", + "account_upgrade_dialog_tier_features_messages_other": "{{messages}} съобщения на ден", + "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}}" } From faadb5148f34b3222f79735b1dd4bf42fce963ad Mon Sep 17 00:00:00 2001 From: Brian Lee Date: Wed, 5 Jul 2023 14:50:01 -0700 Subject: [PATCH 175/305] Add new integration ansible-role-ntfy-alertmanager --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 3a38fb10..155daaa7 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -125,6 +125,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [systemd-ntfy-poweronoff](https://github.com/stendler/systemd-ntfy-poweronoff) - Systemd services to send notifications on system startup and shutdown (Go) - [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 ## Blog + forum posts From f989fd0743c6b5373364cac21f1756dcbda82d77 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Wed, 5 Jul 2023 19:33:45 +0200 Subject: [PATCH 176/305] Web app: implement markdown support --- web/package-lock.json | 550 ++++++++++++++++++++++++++- web/package.json | 1 + web/public/static/langs/en.json | 3 + web/src/app/Prefs.js | 9 + web/src/app/utils.js | 6 +- web/src/components/Notifications.jsx | 66 +++- web/src/components/Preferences.jsx | 21 + 7 files changed, 648 insertions(+), 8 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index de8aac16..5be9ea1c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -24,6 +24,7 @@ "react-dom": "latest", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", + "react-remark": "^2.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", "stacktrace-js": "^2.0.2", @@ -2425,6 +2426,17 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, + "node_modules/@mapbox/hast-util-table-cell-style": { + "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" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@mui/base": { "version": "5.0.0-beta.6", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.6.tgz", @@ -2751,6 +2763,14 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/mdast": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", + "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/node": { "version": "20.3.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", @@ -2813,6 +2833,11 @@ "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", "dev": true }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, "node_modules/@vitejs/plugin-react": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", @@ -3088,6 +3113,15 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3228,6 +3262,33 @@ "node": ">=0.8.0" } }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -3249,6 +3310,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -3363,7 +3433,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4137,6 +4206,11 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4567,6 +4641,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -4686,6 +4778,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -4700,6 +4797,28 @@ "node": ">= 0.4" } }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -4747,6 +4866,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -4785,6 +4926,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4806,6 +4956,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -4866,6 +5025,14 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5320,6 +5487,121 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", + "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5335,6 +5617,25 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5372,8 +5673,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { "version": "3.3.6", @@ -5596,6 +5896,23 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -5750,6 +6067,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -5857,6 +6186,27 @@ "node": ">=0.10.0" } }, + "node_modules/react-remark": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-remark/-/react-remark-2.1.0.tgz", + "integrity": "sha512-7dEPxRGQ23sOdvteuRGaQAs9cEOH/BOeCN4CqsJdk3laUDIDYRCWnM6a3z92PzXHUuxIRLXQNZx7SiO0ijUcbw==", + "dependencies": { + "rehype-react": "^6.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "unified": "^9.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/react-router": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", @@ -5989,6 +6339,43 @@ "jsesc": "bin/jsesc" } }, + "node_modules/rehype-react": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-6.2.1.tgz", + "integrity": "sha512-f9KIrjktvLvmbGc7si25HepocOg4z0MuNOtweigKzBcDjiGSTGhyz6VSgaV5K421Cq1O+z4/oxRJ5G9owo0KVg==", + "dependencies": { + "@mapbox/hast-util-table-cell-style": "^0.2.0", + "hast-to-hyperscript": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz", + "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==", + "dependencies": { + "mdast-util-to-hast": "^10.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -6224,6 +6611,15 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/stack-generator": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", @@ -6384,6 +6780,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, "node_modules/stylis": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", @@ -6506,6 +6910,15 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", @@ -6623,6 +7036,23 @@ "node": ">=4" } }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -6635,6 +7065,75 @@ "node": ">=8" } }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -6693,6 +7192,34 @@ "punycode": "^2.1.0" } }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { "version": "4.3.9", "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", @@ -6770,6 +7297,15 @@ "node": ">=0.10.0" } }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -7226,6 +7762,14 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/web/package.json b/web/package.json index 400a090a..bb84ff16 100644 --- a/web/package.json +++ b/web/package.json @@ -27,6 +27,7 @@ "react-dom": "latest", "react-i18next": "^11.16.2", "react-infinite-scroll-component": "^6.1.0", + "react-remark": "^2.1.0", "react-router-dom": "^6.2.2", "stacktrace-gps": "^3.0.4", "stacktrace-js": "^2.0.2", diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 3f2947e4..3d85b757 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -359,6 +359,9 @@ "prefs_appearance_theme_system": "System (default)", "prefs_appearance_theme_dark": "Dark mode", "prefs_appearance_theme_light": "Light mode", + "prefs_appearance_markdown_always_enabled_title": "Format all messages as Markdown", + "prefs_appearance_markdown_always_enabled_on": "Enabled", + "prefs_appearance_markdown_always_enabled_off": "Disabled", "prefs_reservations_title": "Reserved topics", "prefs_reservations_description": "You can reserve topic names for personal use here. Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_limit_reached": "You reached your reserved topics limit.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 4f28f87e..9d9ed0d5 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -55,6 +55,15 @@ class Prefs { async setTheme(mode) { await this.db.prefs.put({ key: "theme", value: mode }); } + + async markdownAlwaysEnabled() { + const record = await this.db.prefs.get("markdownAlwaysEnabled"); + return record?.value ?? false; + } + + async setMarkdownAlwaysEnabled(enabled) { + await this.db.prefs.put({ key: "markdownAlwaysEnabled", value: enabled }); + } } const prefs = new Prefs(db()); diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 39e7a3b2..d0ae15ce 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -89,15 +89,15 @@ export const maybeWithAuth = (headers, user) => { return headers; }; -export const maybeAppendActionErrors = (message, notification) => { +export const maybeActionErrors = (notification) => { const actionErrors = (notification.actions ?? []) .map((action) => action.error) .filter((action) => !!action) .join("\n"); if (actionErrors.length === 0) { - return message; + return undefined; } - return `${message}\n\n${actionErrors}`; + return actionErrors; }; export const shuffle = (arr) => { diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index ea0cbc14..610d5256 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -24,7 +24,9 @@ import { useLiveQuery } from "dexie-react-hooks"; import InfiniteScroll from "react-infinite-scroll-component"; import { Trans, useTranslation } from "react-i18next"; import { useOutletContext } from "react-router-dom"; -import { formatBytes, formatShortDateTime, maybeAppendActionErrors, openUrl, shortUrl, topicShortUrl, unmatchedTags } from "../app/utils"; +import { useRemark } from "react-remark"; +import styled from "@emotion/styled"; +import { formatBytes, formatShortDateTime, maybeActionErrors, openUrl, shortUrl, topicShortUrl, unmatchedTags } from "../app/utils"; import { formatMessage, formatTitle } from "../app/notificationUtils"; import { LightboxBackdrop, Paragraph, VerticallyCenteredContainer } from "./styles"; import subscriptionManager from "../app/SubscriptionManager"; @@ -35,6 +37,7 @@ import priority5 from "../img/priority-5.svg"; import logoOutline from "../img/ntfy-outline.svg"; import AttachmentIcon from "./AttachmentIcon"; import { useAutoSubscribe } from "./hooks"; +import prefs from "../app/Prefs"; const priorityFiles = { 1: priority1, @@ -159,6 +162,63 @@ const autolink = (s) => { return <>{parts}; }; +const MarkdownContainer = styled("div")` + line-height: 1; + + h1, + h2, + h3, + h4, + h5, + h6, + p, + pre, + ul, + ol { + margin: 0; + } + + p { + line-height: 1.2; + } + + blockquote { + margin: 0; + padding-inline: 1rem; + background: ${(theme) => (theme.mode === "light" ? "#f1f1f1" : "#aeaeae")}; + } + + ul, + ol { + padding-inline: 1rem; + } +`; + +const MarkdownContent = ({ content }) => { + const [reactContent, setMarkdownSource] = useRemark(); + + useEffect(() => { + setMarkdownSource(content); + }, [content]); + + return {reactContent}; +}; + +const NotificationBody = ({ notification }) => { + const markdownAlwaysEnabled = useLiveQuery(async () => prefs.markdownAlwaysEnabled()); + + // TODO: check notification content-type when implemented on the server + const displayAsMarkdown = markdownAlwaysEnabled; + + const formatted = formatMessage(notification); + + if (displayAsMarkdown) { + return ; + } + + return autolink(formatted); +}; + const NotificationItem = (props) => { const { t, i18n } = useTranslation(); const { notification } = props; @@ -183,6 +243,7 @@ const NotificationItem = (props) => { const hasClickAction = notification.click; const hasUserActions = notification.actions && notification.actions.length > 0; const showActions = hasAttachmentActions || hasClickAction || hasUserActions; + return ( @@ -230,7 +291,8 @@ const NotificationItem = (props) => { )} - {autolink(maybeAppendActionErrors(formatMessage(notification), notification))} + + {maybeActionErrors(notification)} {attachment && } {tags && ( diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index a93032ce..f28c3da3 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -259,6 +259,26 @@ const Theme = () => { ); }; +const MarkdownAlwaysEnabled = () => { + const { t } = useTranslation(); + const labelId = "prefMarkdown"; + const enabled = useLiveQuery(async () => prefs.markdownAlwaysEnabled()); + const handleChange = async (ev) => { + await prefs.setMarkdownAlwaysEnabled(ev.target.value); + }; + + return ( + + + + + + ); +}; + const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; @@ -513,6 +533,7 @@ const Appearance = () => { + ); From b7679c7826b45643a15c62103aead00df36d4af8 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 8 Jul 2023 15:14:35 -0400 Subject: [PATCH 177/305] Remove setting, add persistence --- server/message_cache.go | 80 ++++++++++++++++++---------- server/server_firebase_test.go | 2 + web/public/static/langs/en.json | 3 -- web/src/app/Prefs.js | 9 ---- web/src/components/Notifications.jsx | 12 ++--- web/src/components/Preferences.jsx | 21 -------- 6 files changed, 60 insertions(+), 67 deletions(-) diff --git a/server/message_cache.go b/server/message_cache.go index 140271fe..8a613ff1 100644 --- a/server/message_cache.go +++ b/server/message_cache.go @@ -45,6 +45,7 @@ const ( attachment_deleted INT NOT NULL, sender TEXT NOT NULL, user TEXT NOT NULL, + content_type TEXT NOT NULL, encoding TEXT NOT NULL, published INT NOT NULL ); @@ -63,43 +64,43 @@ const ( COMMIT; ` insertMessageQuery = ` - INSERT INTO messages (mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, attachment_deleted, sender, user, encoding, published) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + INSERT INTO messages (mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, attachment_deleted, sender, user, content_type, encoding, published) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ` deleteMessageQuery = `DELETE FROM messages WHERE mid = ?` updateMessagesForTopicExpiryQuery = `UPDATE messages SET expires = ? WHERE topic = ?` selectRowIDFromMessageID = `SELECT id FROM messages WHERE mid = ?` // Do not include topic, see #336 and TestServer_PollSinceID_MultipleTopics selectMessagesByIDQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE mid = ? ` selectMessagesSinceTimeQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE topic = ? AND time >= ? AND published = 1 ORDER BY time, id ` selectMessagesSinceTimeIncludeScheduledQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE topic = ? AND time >= ? ORDER BY time, id ` selectMessagesSinceIDQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE topic = ? AND id > ? AND published = 1 ORDER BY time, id ` selectMessagesSinceIDIncludeScheduledQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE topic = ? AND (id > ? OR published = 0) ORDER BY time, id ` selectMessagesDueQuery = ` - SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, encoding + SELECT mid, time, expires, topic, message, title, priority, tags, click, icon, actions, attachment_name, attachment_type, attachment_size, attachment_expires, attachment_url, sender, user, content_type, encoding FROM messages WHERE time <= ? AND published = 0 ORDER BY time, id @@ -121,7 +122,7 @@ const ( // Schema management queries const ( - currentSchemaVersion = 11 + currentSchemaVersion = 12 createSchemaVersionTableQuery = ` CREATE TABLE IF NOT EXISTS schemaVersion ( id INT PRIMARY KEY, @@ -240,6 +241,11 @@ const ( ); INSERT INTO stats (key, value) VALUES ('messages', 0); ` + + // 11 -> 12 + migrate11To12AlterMessagesTableQuery = ` + ALTER TABLE messages ADD COLUMN content_type TEXT NOT NULL DEFAULT(''); + ` ) var ( @@ -255,6 +261,7 @@ var ( 8: migrateFrom8, 9: migrateFrom9, 10: migrateFrom10, + 11: migrateFrom11, } ) @@ -384,6 +391,7 @@ func (c *messageCache) addMessages(ms []*message) error { attachmentDeleted, // Always zero sender, m.User, + m.ContentType, m.Encoding, published, ) @@ -656,7 +664,7 @@ func readMessages(rows *sql.Rows) ([]*message, error) { func readMessage(rows *sql.Rows) (*message, error) { var timestamp, expires, attachmentSize, attachmentExpires int64 var priority int - var id, topic, msg, title, tagsStr, click, icon, actionsStr, attachmentName, attachmentType, attachmentURL, sender, user, encoding string + var id, topic, msg, title, tagsStr, click, icon, actionsStr, attachmentName, attachmentType, attachmentURL, sender, user, contentType, encoding string err := rows.Scan( &id, ×tamp, @@ -676,6 +684,7 @@ func readMessage(rows *sql.Rows) (*message, error) { &attachmentURL, &sender, &user, + &contentType, &encoding, ) if err != nil { @@ -706,22 +715,23 @@ func readMessage(rows *sql.Rows) (*message, error) { } } return &message{ - ID: id, - Time: timestamp, - Expires: expires, - Event: messageEvent, - Topic: topic, - Message: msg, - Title: title, - Priority: priority, - Tags: tags, - Click: click, - Icon: icon, - Actions: actions, - Attachment: att, - Sender: senderIP, // Must parse assuming database must be correct - User: user, - Encoding: encoding, + ID: id, + Time: timestamp, + Expires: expires, + Event: messageEvent, + Topic: topic, + Message: msg, + Title: title, + Priority: priority, + Tags: tags, + Click: click, + Icon: icon, + Actions: actions, + Attachment: att, + Sender: senderIP, // Must parse assuming database must be correct + User: user, + ContentType: contentType, + Encoding: encoding, }, nil } @@ -929,7 +939,7 @@ func migrateFrom9(db *sql.DB, cacheDuration time.Duration) error { return tx.Commit() } -func migrateFrom10(db *sql.DB, cacheDuration time.Duration) error { +func migrateFrom10(db *sql.DB, _ time.Duration) error { log.Tag(tagMessageCache).Info("Migrating cache database schema: from 10 to 11") tx, err := db.Begin() if err != nil { @@ -944,3 +954,19 @@ func migrateFrom10(db *sql.DB, cacheDuration time.Duration) error { } return tx.Commit() } + +func migrateFrom11(db *sql.DB, _ time.Duration) error { + log.Tag(tagMessageCache).Info("Migrating cache database schema: from 11 to 12") + tx, err := db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + if _, err := tx.Exec(migrate11To12AlterMessagesTableQuery); err != nil { + return err + } + if _, err := tx.Exec(updateSchemaVersion, 12); err != nil { + return err + } + return tx.Commit() +} diff --git a/server/server_firebase_test.go b/server/server_firebase_test.go index f18abe13..fb27ea05 100644 --- a/server/server_firebase_test.go +++ b/server/server_firebase_test.go @@ -182,6 +182,7 @@ func TestToFirebaseMessage_Message_Normal_Allowed(t *testing.T) { "title": "some title", "message": "this is a message", "actions": `[{"id":"123","action":"view","label":"Open page","clear":true,"url":"https://ntfy.sh"},{"id":"456","action":"http","label":"Close door","clear":false,"url":"https://door.com/close","method":"PUT","headers":{"really":"yes"}}]`, + "content_type": "", "encoding": "", "attachment_name": "some file.jpg", "attachment_type": "image/jpeg", @@ -203,6 +204,7 @@ func TestToFirebaseMessage_Message_Normal_Allowed(t *testing.T) { "title": "some title", "message": "this is a message", "actions": `[{"id":"123","action":"view","label":"Open page","clear":true,"url":"https://ntfy.sh"},{"id":"456","action":"http","label":"Close door","clear":false,"url":"https://door.com/close","method":"PUT","headers":{"really":"yes"}}]`, + "content_type": "", "encoding": "", "attachment_name": "some file.jpg", "attachment_type": "image/jpeg", diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 3d85b757..3f2947e4 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -359,9 +359,6 @@ "prefs_appearance_theme_system": "System (default)", "prefs_appearance_theme_dark": "Dark mode", "prefs_appearance_theme_light": "Light mode", - "prefs_appearance_markdown_always_enabled_title": "Format all messages as Markdown", - "prefs_appearance_markdown_always_enabled_on": "Enabled", - "prefs_appearance_markdown_always_enabled_off": "Disabled", "prefs_reservations_title": "Reserved topics", "prefs_reservations_description": "You can reserve topic names for personal use here. Reserving a topic gives you ownership over the topic, and allows you to define access permissions for other users over the topic.", "prefs_reservations_limit_reached": "You reached your reserved topics limit.", diff --git a/web/src/app/Prefs.js b/web/src/app/Prefs.js index 9d9ed0d5..4f28f87e 100644 --- a/web/src/app/Prefs.js +++ b/web/src/app/Prefs.js @@ -55,15 +55,6 @@ class Prefs { async setTheme(mode) { await this.db.prefs.put({ key: "theme", value: mode }); } - - async markdownAlwaysEnabled() { - const record = await this.db.prefs.get("markdownAlwaysEnabled"); - return record?.value ?? false; - } - - async setMarkdownAlwaysEnabled(enabled) { - await this.db.prefs.put({ key: "markdownAlwaysEnabled", value: enabled }); - } } const prefs = new Prefs(db()); diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index 610d5256..ccd2deb9 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -192,6 +192,10 @@ const MarkdownContainer = styled("div")` ol { padding-inline: 1rem; } + + img { + max-width: 100%; + } `; const MarkdownContent = ({ content }) => { @@ -205,17 +209,11 @@ const MarkdownContent = ({ content }) => { }; const NotificationBody = ({ notification }) => { - const markdownAlwaysEnabled = useLiveQuery(async () => prefs.markdownAlwaysEnabled()); - - // TODO: check notification content-type when implemented on the server - const displayAsMarkdown = markdownAlwaysEnabled; - + const displayAsMarkdown = notification.content_type === "text/markdown"; const formatted = formatMessage(notification); - if (displayAsMarkdown) { return ; } - return autolink(formatted); }; diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index f28c3da3..a93032ce 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -259,26 +259,6 @@ const Theme = () => { ); }; -const MarkdownAlwaysEnabled = () => { - const { t } = useTranslation(); - const labelId = "prefMarkdown"; - const enabled = useLiveQuery(async () => prefs.markdownAlwaysEnabled()); - const handleChange = async (ev) => { - await prefs.setMarkdownAlwaysEnabled(ev.target.value); - }; - - return ( - - - - - - ); -}; - const WebPushEnabled = () => { const { t } = useTranslation(); const labelId = "prefWebPushEnabled"; @@ -533,7 +513,6 @@ const Appearance = () => { - ); From 499b2fb0d6e03a19a1a82b195f76857b18364c0e Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 8 Jul 2023 15:48:08 -0400 Subject: [PATCH 178/305] Docs, tests --- docs/publish.md | 30 ++++++++++++++++++ server/server.go | 5 ++- server/server_test.go | 46 ++++++++++++++++++++++++++++ server/types.go | 1 + web/src/components/Notifications.jsx | 2 +- 5 files changed, 82 insertions(+), 2 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index 11e33e61..905508fe 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -623,6 +623,35 @@ them with a comma, e.g. `tag1,tag2,tag3`. as [RFC 2047](https://datatracker.ietf.org/doc/html/rfc2047#section-2), e.g. `tag1,=?UTF-8?B?8J+HqfCfh6o=?=` ([base64](https://en.wikipedia.org/wiki/Base64)), or `=?UTF-8?Q?=C3=84pfel?=,tag2` ([quoted-printable](https://en.wikipedia.org/wiki/Quoted-printable)). +## Markdown +_Supported on:_ :material-firefox: + +You can format messages using [Markdown](https://www.markdownguide.org/basic-syntax/). 🤩 + +By default, messages sent to ntfy are rendered as plain text. To enable Markdown, set the `X-Markdown` header (or any of +its aliases: `Markdown`, or `md`) to `true` (or `1` or `yes`), or set the `Content-Type` header to `text/markdown`. + +Supported Markdown features: + +- **bold** (`**bold**`) +- *italic* (`*italic*`) +- [links](https://www.markdownguide.org/basic-syntax/#links) (`[links](https://www.markdownguide.org/basic-syntax/#links)`) +- [images](https://www.markdownguide.org/basic-syntax/#images) (`![images](https://www.markdownguide.org/basic-syntax/#images)`) +- [code blocks](https://www.markdownguide.org/basic-syntax/#code-blocks) (`` `code blocks` ``) +- [inline code](https://www.markdownguide.org/basic-syntax/#inline-code) (`` `inline code` ``) +- [headings](https://www.markdownguide.org/basic-syntax/#headings) (`# headings`) +- [lists](https://www.markdownguide.org/basic-syntax/#lists) (`- lists`) +- [blockquotes](https://www.markdownguide.org/basic-syntax/#blockquotes) (`> blockquotes`) +- [horizontal rules](https://www.markdownguide.org/basic-syntax/#horizontal-rules) (`---`) + +XXXXXXXXXXXXXXXXXXXXXx +- examples +- supported only on Web for now + +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx + + + ## Scheduled delivery _Supported on:_ :material-android: :material-apple: :material-firefox: @@ -1004,6 +1033,7 @@ all the supported fields: | `actions` | - | *JSON array* | *(see [action buttons](#action-buttons))* | Custom [user action buttons](#action-buttons) for notifications | | `click` | - | *URL* | `https://example.com` | Website opened when notification is [clicked](#click-action) | | `attach` | - | *URL* | `https://example.com/file.jpg` | URL of an attachment, see [attach via URL](#attach-file-from-url) | +| `markdown` | - | *bool* | `true` | Set to true if the `message` is Markdown-formatted | | `icon` | - | *string* | `https://example.com/icon.png` | URL to use as notification [icon](#icons) | | `filename` | - | *string* | `file.jpg` | File name of the attachment | | `delay` | - | *string* | `30min`, `9am` | Timestamp or duration for delayed delivery | diff --git a/server/server.go b/server/server.go index 60a2fb30..0ab36524 100644 --- a/server/server.go +++ b/server/server.go @@ -1010,7 +1010,7 @@ func (s *Server) parsePublishParams(r *http.Request, m *message) (cache bool, fi return false, false, "", "", false, errHTTPBadRequestActionsInvalid.Wrap(e.Error()) } } - contentType, markdown := readParam(r, "content-type"), readBoolParam(r, false, "x-markdown", "markdown", "md") + contentType, markdown := readParam(r, "content-type", "content_type"), readBoolParam(r, false, "x-markdown", "markdown", "md") if markdown || strings.ToLower(contentType) == "text/markdown" { m.ContentType = "text/markdown" } @@ -1789,6 +1789,9 @@ func (s *Server) transformBodyJSON(next handleFunc) handleFunc { if m.Icon != "" { r.Header.Set("X-Icon", m.Icon) } + if m.Markdown { + r.Header.Set("X-Markdown", "yes") + } if len(m.Actions) > 0 { actionsStr, err := json.Marshal(m.Actions) if err != nil { diff --git a/server/server_test.go b/server/server_test.go index e9ff6fcb..46751acd 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -1518,6 +1518,39 @@ func TestServer_PublishActions_AndPoll(t *testing.T) { require.Equal(t, "target_temp_f=65", m.Actions[1].Body) } +func TestServer_PublishMarkdown(t *testing.T) { + s := newTestServer(t, newTestConfig(t)) + response := request(t, s, "PUT", "/mytopic", "_underline this_", map[string]string{ + "Content-Type": "text/markdown", + }) + require.Equal(t, 200, response.Code) + + m := toMessage(t, response.Body.String()) + require.Equal(t, "_underline this_", m.Message) + require.Equal(t, "text/markdown", m.ContentType) +} + +func TestServer_PublishMarkdown_QueryParam(t *testing.T) { + s := newTestServer(t, newTestConfig(t)) + response := request(t, s, "PUT", "/mytopic?md=1", "_underline this_", nil) + require.Equal(t, 200, response.Code) + + m := toMessage(t, response.Body.String()) + require.Equal(t, "_underline this_", m.Message) + require.Equal(t, "text/markdown", m.ContentType) +} + +func TestServer_PublishMarkdown_NotMarkdown(t *testing.T) { + s := newTestServer(t, newTestConfig(t)) + response := request(t, s, "PUT", "/mytopic", "_underline this_", map[string]string{ + "Content-Type": "not-markdown", + }) + require.Equal(t, 200, response.Code) + + m := toMessage(t, response.Body.String()) + require.Equal(t, "", m.ContentType) +} + func TestServer_PublishAsJSON(t *testing.T) { s := newTestServer(t, newTestConfig(t)) body := `{"topic":"mytopic","message":"A message","title":"a title\nwith lines","tags":["tag1","tag 2"],` + @@ -1535,12 +1568,25 @@ func TestServer_PublishAsJSON(t *testing.T) { require.Equal(t, "google.pdf", m.Attachment.Name) require.Equal(t, "http://ntfy.sh", m.Click) require.Equal(t, "https://ntfy.sh/static/img/ntfy.png", m.Icon) + require.Equal(t, "", m.ContentType) require.Equal(t, 4, m.Priority) require.True(t, m.Time > time.Now().Unix()+29*60) require.True(t, m.Time < time.Now().Unix()+31*60) } +func TestServer_PublishAsJSON_Markdown(t *testing.T) { + s := newTestServer(t, newTestConfig(t)) + body := `{"topic":"mytopic","message":"**This is bold**","markdown":true}` + response := request(t, s, "PUT", "/", body, nil) + require.Equal(t, 200, response.Code) + + m := toMessage(t, response.Body.String()) + require.Equal(t, "mytopic", m.Topic) + require.Equal(t, "**This is bold**", m.Message) + require.Equal(t, "text/markdown", m.ContentType) +} + func TestServer_PublishAsJSON_RateLimit_MessageDailyLimit(t *testing.T) { // Publishing as JSON follows a different path. This ensures that rate // limiting works for this endpoint as well diff --git a/server/types.go b/server/types.go index 279f4ce8..eeb566fc 100644 --- a/server/types.go +++ b/server/types.go @@ -101,6 +101,7 @@ type publishMessage struct { Icon string `json:"icon"` Actions []action `json:"actions"` Attach string `json:"attach"` + Markdown bool `json:"markdown"` Filename string `json:"filename"` Email string `json:"email"` Call string `json:"call"` diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index ccd2deb9..bd319dc5 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -192,7 +192,7 @@ const MarkdownContainer = styled("div")` ol { padding-inline: 1rem; } - + img { max-width: 100%; } From 2b5a1a7a1c0ab9c1bf633412cff4650aa804d0cc Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 8 Jul 2023 21:45:03 -0400 Subject: [PATCH 179/305] Documentation --- client/options.go | 5 ++ cmd/publish.go | 5 ++ docs/publish.md | 114 ++++++++++++++++++++++----- docs/static/img/web-markdown.png | Bin 0 -> 285056 bytes web/src/components/Notifications.jsx | 21 +++-- 5 files changed, 118 insertions(+), 27 deletions(-) create mode 100644 docs/static/img/web-markdown.png diff --git a/client/options.go b/client/options.go index dbca8c0e..7f6232f8 100644 --- a/client/options.go +++ b/client/options.go @@ -72,6 +72,11 @@ func WithAttach(attach string) PublishOption { return WithHeader("X-Attach", attach) } +// WithMarkdown instructs the server to interpret the message body as Markdown +func WithMarkdown() PublishOption { + return WithHeader("X-Markdown", "yes") +} + // WithFilename sets a filename for the attachment, and/or forces the HTTP body to interpreted as an attachment func WithFilename(filename string) PublishOption { return WithHeader("X-Filename", filename) diff --git a/cmd/publish.go b/cmd/publish.go index 0179f9fa..390e5f67 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -31,6 +31,7 @@ var flagsPublish = append( &cli.StringFlag{Name: "icon", Aliases: []string{"i"}, EnvVars: []string{"NTFY_ICON"}, Usage: "URL to use as notification icon"}, &cli.StringFlag{Name: "actions", Aliases: []string{"A"}, EnvVars: []string{"NTFY_ACTIONS"}, Usage: "actions JSON array or simple definition"}, &cli.StringFlag{Name: "attach", Aliases: []string{"a"}, EnvVars: []string{"NTFY_ATTACH"}, Usage: "URL to send as an external attachment"}, + &cli.BoolFlag{Name: "markdown", Aliases: []string{"md"}, EnvVars: []string{"NTFY_MARKDOWN"}, Usage: "Message is formatted as Markdown"}, &cli.StringFlag{Name: "filename", Aliases: []string{"name", "n"}, EnvVars: []string{"NTFY_FILENAME"}, Usage: "filename for the attachment"}, &cli.StringFlag{Name: "file", Aliases: []string{"f"}, EnvVars: []string{"NTFY_FILE"}, Usage: "file to upload as an attachment"}, &cli.StringFlag{Name: "email", Aliases: []string{"mail", "e"}, EnvVars: []string{"NTFY_EMAIL"}, Usage: "also send to e-mail address"}, @@ -95,6 +96,7 @@ func execPublish(c *cli.Context) error { icon := c.String("icon") actions := c.String("actions") attach := c.String("attach") + markdown := c.Bool("attach") filename := c.String("filename") file := c.String("file") email := c.String("email") @@ -140,6 +142,9 @@ func execPublish(c *cli.Context) error { if attach != "" { options = append(options, client.WithAttach(attach)) } + if markdown { + options = append(options, client.WithMarkdown()) + } if filename != "" { options = append(options, client.WithFilename(filename)) } diff --git a/docs/publish.md b/docs/publish.md index 905508fe..b20f66e6 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -138,7 +138,7 @@ a [title](#message-title), and [tag messages](#tags-emojis) 🥳 🎉. Here's an Tags = "warning,skull" } Body = "Remote access to phils-laptop detected. Act right away." - } + } Invoke-RestMethod @Request ``` @@ -623,34 +623,108 @@ them with a comma, e.g. `tag1,tag2,tag3`. as [RFC 2047](https://datatracker.ietf.org/doc/html/rfc2047#section-2), e.g. `tag1,=?UTF-8?B?8J+HqfCfh6o=?=` ([base64](https://en.wikipedia.org/wiki/Base64)), or `=?UTF-8?Q?=C3=84pfel?=,tag2` ([quoted-printable](https://en.wikipedia.org/wiki/Quoted-printable)). -## Markdown +## Markdown formatting _Supported on:_ :material-firefox: -You can format messages using [Markdown](https://www.markdownguide.org/basic-syntax/). 🤩 +You can format messages using [Markdown](https://www.markdownguide.org/basic-syntax/) 🤩. That means you can use +**bold**, *italicized*, or _underlined text_, links, images, and more. Supported Markdown features (web app only for now): -By default, messages sent to ntfy are rendered as plain text. To enable Markdown, set the `X-Markdown` header (or any of -its aliases: `Markdown`, or `md`) to `true` (or `1` or `yes`), or set the `Content-Type` header to `text/markdown`. +- [Emphasis](https://www.markdownguide.org/basic-syntax/#emphasis) such as **bold** (`**bold**`), *italic* (`*italic*`), _underline_ (`_underline_`) +- [Links](https://www.markdownguide.org/basic-syntax/#links) (`[some tool](https://ntfy.sh)`) +- [Images](https://www.markdownguide.org/basic-syntax/#images) (`![some image](https://bing.com/logo.png)`) +- [Code blocks](https://www.markdownguide.org/basic-syntax/#code-blocks) (` ```code blocks``` `) and [inline code](https://www.markdownguide.org/basic-syntax/#inline-code) (`` `inline code` ``) +- [Headings](https://www.markdownguide.org/basic-syntax/#headings) (`# headings`, `## headings`, etc.) +- [Lists](https://www.markdownguide.org/basic-syntax/#lists) (`- lists`, `1. lists`, etc.) +- [Blockquotes](https://www.markdownguide.org/basic-syntax/#blockquotes) (`> blockquotes`) +- [Horizontal rules](https://www.markdownguide.org/basic-syntax/#horizontal-rules) (`---`) -Supported Markdown features: +By default, messages sent to ntfy are rendered as plain text. To enable Markdown, set the `X-Markdown` header (or any of +its aliases: `Markdown`, or `md`) to `true` (or `1` or `yes`), or set the `Content-Type` header to `text/markdown`. +As of today, **Markdown is only supported in the web app.** Here's an example of how to enable Markdown formatting: -- **bold** (`**bold**`) -- *italic* (`*italic*`) -- [links](https://www.markdownguide.org/basic-syntax/#links) (`[links](https://www.markdownguide.org/basic-syntax/#links)`) -- [images](https://www.markdownguide.org/basic-syntax/#images) (`![images](https://www.markdownguide.org/basic-syntax/#images)`) -- [code blocks](https://www.markdownguide.org/basic-syntax/#code-blocks) (`` `code blocks` ``) -- [inline code](https://www.markdownguide.org/basic-syntax/#inline-code) (`` `inline code` ``) -- [headings](https://www.markdownguide.org/basic-syntax/#headings) (`# headings`) -- [lists](https://www.markdownguide.org/basic-syntax/#lists) (`- lists`) -- [blockquotes](https://www.markdownguide.org/basic-syntax/#blockquotes) (`> blockquotes`) -- [horizontal rules](https://www.markdownguide.org/basic-syntax/#horizontal-rules) (`---`) +=== "Command line (curl)" + ``` + curl \ + -d "Look ma, **bold text**, *italics*, _underlined text_, ..." \ + -H "Markdown: yes" \ + ntfy.sh/mytopic + ``` -XXXXXXXXXXXXXXXXXXXXXx -- examples -- supported only on Web for now +=== "ntfy CLI" + ``` + ntfy publish \ + mytopic \ + --markdown \ + "Look ma, **bold text**, *italics*, _underlined text_, ..." + ``` -XXXXXXXXXXXXXXXXXXXXXXXXXXXXXxx +=== "HTTP" + ``` http + POST /mytopic HTTP/1.1 + Host: ntfy.sh + Markdown: yes + Look ma, **bold text**, *italics*, _underlined text_, ... + ``` +=== "JavaScript" + ``` javascript + fetch('https://ntfy.sh/mytopic', { + method: 'POST', // PUT works too + body: 'Look ma, **bold text**, *italics*, _underlined text_, ...', + headers: { 'Markdown': 'yes' } + }) + ``` + +=== "Go" + ``` go + http.Post("https://ntfy.sh/mytopic", "text/markdown", + strings.NewReader("Look ma, **bold text**, *italics*, _underlined text_, ...")) + + // or + req, _ := http.NewRequest("POST", "https://ntfy.sh/mytopic", + strings.NewReader("Look ma, **bold text**, *italics*, _underlined text_, ...")) + req.Header.Set("Markdown", "yes") + http.DefaultClient.Do(req) + ``` + +=== "PowerShell" + ``` powershell + $Request = @{ + Method = "POST" + URI = "https://ntfy.sh/mytopic" + Body = "Look ma, **bold text**, *italics*, _underlined text_, ..." + Headers = @{ + Markdown = "yes" + } + } + Invoke-RestMethod @Request + ``` + +=== "Python" + ``` python + requests.post("https://ntfy.sh/mytopic", + data="Look ma, **bold text**, *italics*, _underlined text_, ..." + headers={ "Markdown": "yes" })) + ``` + +=== "PHP" + ``` php-inline + file_get_contents('https://ntfy.sh/mytopic', false, stream_context_create([ + 'http' => [ + 'method' => 'POST', // PUT also works + 'header' => 'Content-Type: text/markdown', // ! + 'content' => 'Look ma, **bold text**, *italics*, _underlined text_, ...' + ] + ])); + ``` + +Here's what that looks like in the web app: + +
+ ![markdown](static/img/web-markdown.png){ width=500 } +
Markdown formatting in the web app
+
## Scheduled delivery _Supported on:_ :material-android: :material-apple: :material-firefox: diff --git a/docs/static/img/web-markdown.png b/docs/static/img/web-markdown.png new file mode 100644 index 0000000000000000000000000000000000000000..4e914fe8720bf32299fe6ed8bbd49349c213c6fe GIT binary patch literal 285056 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∓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

-}*1-h=iusQp|O_ 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∓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

XqL7`Bw)e_FE1T|+Y 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 D Date: Sun, 9 Jul 2023 10:28:07 +0200 Subject: [PATCH 182/305] =?UTF-8?q?Web=20app:=20add=20a=20=E2=80=9Cpublish?= =?UTF-8?q?=20as=20markdown=E2=80=9D=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/public/static/langs/en.json | 1 + web/src/components/PublishDialog.jsx | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/web/public/static/langs/en.json b/web/public/static/langs/en.json index 3f2947e4..3ad04ea7 100644 --- a/web/public/static/langs/en.json +++ b/web/public/static/langs/en.json @@ -160,6 +160,7 @@ "publish_dialog_button_cancel_sending": "Cancel sending", "publish_dialog_button_cancel": "Cancel", "publish_dialog_button_send": "Send", + "publish_dialog_checkbox_markdown": "Format as Markdown", "publish_dialog_checkbox_publish_another": "Publish another", "publish_dialog_attached_file_title": "Attached file:", "publish_dialog_attached_file_filename_placeholder": "Attachment filename", diff --git a/web/src/components/PublishDialog.jsx b/web/src/components/PublishDialog.jsx index 6cea1a9c..f18eec8d 100644 --- a/web/src/components/PublishDialog.jsx +++ b/web/src/components/PublishDialog.jsx @@ -61,6 +61,7 @@ const PublishDialog = (props) => { const [call, setCall] = useState(""); const [delay, setDelay] = useState(""); const [publishAnother, setPublishAnother] = useState(false); + const [markdownEnabled, setMarkdownEnabled] = useState(false); const [showTopicUrl, setShowTopicUrl] = useState(""); const [showClickUrl, setShowClickUrl] = useState(false); @@ -148,6 +149,10 @@ const PublishDialog = (props) => { if (attachFile && message.trim()) { url.searchParams.append("message", message.replaceAll("\n", "\\n").trim()); } + if (markdownEnabled) { + url.searchParams.append("markdown", "true"); + } + const body = attachFile || message; try { const user = await userManager.get(baseUrl); @@ -353,6 +358,20 @@ const PublishDialog = (props) => { "aria-label": t("publish_dialog_message_label"), }} /> + setMarkdownEnabled(ev.target.checked)} + inputProps={{ + "aria-label": t("publish_dialog_checkbox_markdown"), + }} + /> + } + />

+### 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/web/src/app/Notifier.js b/web/src/app/Notifier.js index 4089746a..77bbdb1e 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -124,9 +124,17 @@ 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() { - // no PushManager when not installed, but it _is_ supported. - return config.enable_web_push && "serviceWorker" in navigator && window.navigator.standalone === false; + 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 + ); } } From 5913142389d8b6718b8f4f12277afa36a18aa751 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Wed, 27 Sep 2023 23:29:39 +0200 Subject: [PATCH 264/305] fix: remove deprecated nodesource script --- Dockerfile-build | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Dockerfile-build b/Dockerfile-build index 62a60bd8..6e96c7d4 100644 --- a/Dockerfile-build +++ b/Dockerfile-build @@ -2,13 +2,17 @@ FROM golang:1.20-bullseye as builder ARG VERSION=dev ARG COMMIT=unknown +ARG NODE_MAJOR=18 -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 +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/* WORKDIR /app ADD Makefile . From d33eded060a55d0956fb043c78045da668d0fce9 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Wed, 27 Sep 2023 23:42:42 +0200 Subject: [PATCH 265/305] docs: remove Safari sound warning iOS 17 does indeed play sounds. --- docs/known-issues.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/known-issues.md b/docs/known-issues.md index 190e2bce..6b5567e6 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -40,10 +40,6 @@ Android has an [open bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1796434) 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 -iOS 17 / Safari 17, which will be released later in 2023. - ## PWA on iOS sometimes crashes with an IndexedDB error (see [#787](https://github.com/binwiederhier/ntfy/issues/787)) When resuming the installed PWA from the background, it sometimes crashes with an error from IndexedDB/Dexie, due to a [WebKit bug]( https://bugs.webkit.org/show_bug.cgi?id=197050). A reload will fix it until a permanent fix is found. From 4dc0183901e6a12350cb4a76956576f21ecc6039 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Wed, 27 Sep 2023 23:42:05 +0200 Subject: [PATCH 266/305] docs: remove firefox-android known issue Closes #789 Firefox released a bug fix with v116. --- docs/known-issues.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/known-issues.md b/docs/known-issues.md index 190e2bce..cdb95bb6 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -34,12 +34,6 @@ your iOS device and your ntfy server are either on the same network, or that you 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 iOS 17 / Safari 17, which will be released later in 2023. From 66e96244ef2cf87051a56ba05a9f488cde4380e0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 27 Sep 2023 23:16:24 -0400 Subject: [PATCH 267/305] Thank you @alexandzors for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 670ffd7c..220f82cb 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 26b31acbaefe609c338f97048b3a9703ffeefff4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Wed, 27 Sep 2023 23:19:31 -0400 Subject: [PATCH 268/305] Thank you @dkramer95 for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 220f82cb..0fae8469 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 2e58f0db1094a22990d95e3734b020485daf6103 Mon Sep 17 00:00:00 2001 From: James Fitzgerald Date: Thu, 28 Sep 2023 07:01:28 -0400 Subject: [PATCH 269/305] Fix typo "aliase" -> "alias" --- docs/publish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/publish.md b/docs/publish.md index c03cc4a4..6df859cf 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -2288,7 +2288,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 aliase `Click`). +To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its alias `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. From 5dafd7e4a7799dbb00925890c13f0965eff83a07 Mon Sep 17 00:00:00 2001 From: Mazurky Date: Thu, 28 Sep 2023 12:10:35 +0000 Subject: [PATCH 270/305] Translated using Weblate (Slovak) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sk/ --- web/public/static/langs/sk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/sk.json b/web/public/static/langs/sk.json index 8ea1b45f..0e3f57a7 100644 --- a/web/public/static/langs/sk.json +++ b/web/public/static/langs/sk.json @@ -231,7 +231,7 @@ "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": "Odstrániť rezerváciu", + "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", From af037b9d7079f90c715ddd7afa6ac0ac607b4c1e Mon Sep 17 00:00:00 2001 From: Octelly Date: Fri, 29 Sep 2023 17:50:27 +0200 Subject: [PATCH 271/305] Update config.md Field is "healthy", not "health" --- docs/config.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/config.md b/docs/config.md index 03a624e8..2662a537 100644 --- a/docs/config.md +++ b/docs/config.md @@ -1180,10 +1180,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 `health` field is `false` the ntfy service should be considered as unhealthy. +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. ```json -{"health":true} +{"healthy":true} ``` See [Installation for Docker](install.md#docker) for an example of how this could be used in a `docker-compose` environment. From aaf01b98d289e658b78d2bc2f48c54f05fc0fcb3 Mon Sep 17 00:00:00 2001 From: Jordan Munch O'Hare Date: Sat, 30 Sep 2023 16:10:01 +0000 Subject: [PATCH 272/305] docs: ios shortcut --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 6da0f63f..c5e1fad1 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -129,6 +129,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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 From a3efbb3466ac78801e9fc029e4b7e62cb4d25344 Mon Sep 17 00:00:00 2001 From: Mahesh Babu <43287976+MaheshBabu11@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:27:42 +0530 Subject: [PATCH 273/305] Adding ntfy-java package to libraries built around ntfy --- docs/integrations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/integrations.md b/docs/integrations.md index 6da0f63f..f88de42e 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -57,7 +57,8 @@ 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) +- [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) ## CLIs + GUIs From b7f37138f863dc12aa7f928ddd6d7ed736383b1a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 2 Oct 2023 11:49:27 -0400 Subject: [PATCH 274/305] Release notes --- docs/releases.md | 1 + go.mod | 8 +- go.sum | 8 + web/package-lock.json | 352 ++++++++++++++++++++++++------------------ 4 files changed, 213 insertions(+), 156 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 4d125a97..15fdd114 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1290,6 +1290,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * 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)) ### ntfy Android app v1.16.1 (UNRELEASED) diff --git a/go.mod b/go.mod index 05fb154b..6a2cffea 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( golang.org/x/sync v0.3.0 golang.org/x/term v0.12.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.142.0 + google.golang.org/api v0.143.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -28,9 +28,9 @@ 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.0 + firebase.google.com/go/v4 v4.12.1 github.com/SherClockHolmes/webpush-go v1.2.0 - github.com/prometheus/client_golang v1.16.0 + github.com/prometheus/client_golang v1.17.0 github.com/stripe/stripe-go/v74 v74.30.0 ) @@ -58,7 +58,7 @@ require ( github.com/kr/text v0.2.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.4.0 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect diff --git a/go.sum b/go.sum index 97512a78..bf112048 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,8 @@ cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X cloud.google.com/go/storage v1.33.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= +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= 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= @@ -107,9 +109,13 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 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_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_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 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/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/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.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= @@ -205,6 +211,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY= google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA= +google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= +google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= 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= diff --git a/web/package-lock.json b/web/package-lock.json index d4ba68bf..3ce24105 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -89,22 +89,22 @@ } }, "node_modules/@babel/core": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", - "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", + "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.20", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.0", + "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.20", - "@babel/types": "^7.22.19", - "convert-source-map": "^1.7.0", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -118,13 +118,19 @@ "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.22.15", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", - "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -239,13 +245,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "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==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -264,12 +270,12 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", - "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", + "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==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -287,9 +293,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", - "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", + "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==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -436,14 +442,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", - "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -463,9 +469,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -819,9 +825,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", - "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -906,9 +912,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", - "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1094,12 +1100,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "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==", + "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==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1110,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", - "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", + "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==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1127,15 +1133,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "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==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1275,9 +1281,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", - "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1670,9 +1676,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1695,19 +1701,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", - "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", + "@babel/generator": "^7.23.0", "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.16", - "@babel/types": "^7.22.19", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1716,12 +1722,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.19", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", - "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.19", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2239,9 +2245,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2336,9 +2342,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" + "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.11", @@ -2443,14 +2449,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.16", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.16.tgz", - "integrity": "sha512-OYxhC81c9bO0wobGcM8rrY5bRwpCXAI21BL0P2wz/2vTv4ek7ALz9+U5M8wgdmtRNUhmCmAB4L2WRwFRf5Cd8Q==", + "version": "5.0.0-beta.17", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.17.tgz", + "integrity": "sha512-xNbk7iOXrglNdIxFBN0k3ySsPIFLWCnFxqsAYl7CIcDkD9low4kJ7IUuy6ctwx/HAy2fenrT3KXHr1sGjAMgpQ==", "dependencies": { "@babel/runtime": "^7.22.15", "@floating-ui/react-dom": "^2.0.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.10", + "@mui/utils": "^5.14.11", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1" @@ -2474,18 +2480,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.10.tgz", - "integrity": "sha512-kPHu/NhZq1k+vSZR5wq3AyUfD4bnfWAeuKpps0+8PS7ZHQ2Lyv1cXJh+PlFdCIOa0PK98rk3JPwMzS8BMhdHwQ==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.11.tgz", + "integrity": "sha512-uY8FLQURhXe3f3O4dS5OSGML9KDm9+IE226cBu78jarVIzdQGPlXwGIlSI9VJR8MvZDA6C0+6XfWDhWCHruC5Q==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.9.tgz", - "integrity": "sha512-xTRQbDsogsJo7tY5Og8R9zbuG2q+KIPVIM6JQoKxtJlz9DPOw1u0T2fGrvwD+XAOVifQf6epNMcGCDLfJAz4Nw==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.11.tgz", + "integrity": "sha512-aHReLasBuS/+hhPzbZCgZ0eTcZ2QRnoC2WNK7XvdAf3l+LjC1flzjh6GWw1tZJ5NHnZ+bivdwtLFQ8XTR96JkA==", "dependencies": { "@babel/runtime": "^7.22.15" }, @@ -2508,16 +2514,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.10.tgz", - "integrity": "sha512-ejFMppnO+lzBXpzju+N4SSz0Mhmi5sihXUGcr5FxpgB6bfUP0Lpe32O0Sw/3s8xlmLEvG1fqVT0rRyAVMlCA+A==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.11.tgz", + "integrity": "sha512-DnSdJzcR7lwG12JA5L2t8JF+RDzMygu5rCNW+logWb/KW2/TRzwLyVWO+CorHTBjBRd38DBxnwOCDiYkDd+N3A==", "dependencies": { "@babel/runtime": "^7.22.15", - "@mui/base": "5.0.0-beta.16", - "@mui/core-downloads-tracker": "^5.14.10", - "@mui/system": "^5.14.10", + "@mui/base": "5.0.0-beta.17", + "@mui/core-downloads-tracker": "^5.14.11", + "@mui/system": "^5.14.11", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.10", + "@mui/utils": "^5.14.11", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", @@ -2552,12 +2558,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.10.tgz", - "integrity": "sha512-f67xOj3H06wWDT9xBg7hVL/HSKNF+HG1Kx0Pm23skkbEqD2Ef2Lif64e5nPdmWVv+7cISCYtSuE2aeuzrZe78w==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.11.tgz", + "integrity": "sha512-MSnNNzTu9pfKLCKs1ZAKwOTgE4bz+fQA0fNr8Jm7NDmuWmw0CaN9Vq2/MHsatE7+S0A25IAKby46Uv1u53rKVQ==", "dependencies": { "@babel/runtime": "^7.22.15", - "@mui/utils": "^5.14.10", + "@mui/utils": "^5.14.11", "prop-types": "^15.8.1" }, "engines": { @@ -2578,9 +2584,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.10.tgz", - "integrity": "sha512-EJckxmQHrsBvDbFu1trJkvjNw/1R7jfNarnqPSnL+jEQawCkQIqVELWLrlOa611TFtxSJGkdUfCFXeJC203HVg==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.11.tgz", + "integrity": "sha512-jdUlqRgTYQ8RMtPX4MbRZqar6W2OiIb6J5KEFbIu4FqvPrk44Each4ppg/LAqp1qNlBYq5i+7Q10MYLMpDxX9A==", "dependencies": { "@babel/runtime": "^7.22.15", "@emotion/cache": "^11.11.0", @@ -2609,15 +2615,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.10.tgz", - "integrity": "sha512-QQmtTG/R4gjmLiL5ECQ7kRxLKDm8aKKD7seGZfbINtRVJDyFhKChA1a+K2bfqIAaBo1EMDv+6FWNT1Q5cRKjFA==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.11.tgz", + "integrity": "sha512-yl8xV+y0k7j6dzBsHabKwoShmjqLa8kTxrhUI3JpqLG358VRVMJRW/ES0HhvfcCi4IVXde+Tc2P3K1akGL8zoA==", "dependencies": { "@babel/runtime": "^7.22.15", - "@mui/private-theming": "^5.14.10", - "@mui/styled-engine": "^5.14.10", + "@mui/private-theming": "^5.14.11", + "@mui/styled-engine": "^5.14.11", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.10", + "@mui/utils": "^5.14.11", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2661,9 +2667,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.10", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.10.tgz", - "integrity": "sha512-Rn+vYQX7FxkcW0riDX/clNUwKuOJFH45HiULxwmpgnzQoQr3A0lb+QYwaZ+FAkZrR7qLoHKmLQlcItu6LT0y/Q==", + "version": "5.14.11", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.11.tgz", + "integrity": "sha512-fmkIiCPKyDssYrJ5qk+dime1nlO3dmWfCtaPY/uVBqCRMBZ11JhddB9m8sjI2mgqQQwRJG5bq3biaosNdU/s4Q==", "dependencies": { "@babel/runtime": "^7.22.15", "@types/prop-types": "^15.7.5", @@ -2751,6 +2757,47 @@ "string.prototype.matchall": "^4.0.6" } }, + "node_modules/@types/babel__core": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "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.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "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", @@ -2764,17 +2811,17 @@ "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", - "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", + "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/node": { - "version": "20.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.4.tgz", - "integrity": "sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==", + "version": "20.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz", + "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==", "dev": true }, "node_modules/@types/parse-json": { @@ -2783,14 +2830,14 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prop-types": { - "version": "15.7.7", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", - "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==" + "version": "15.7.8", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", + "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==" }, "node_modules/@types/react": { - "version": "18.2.22", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", - "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", + "version": "18.2.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.24.tgz", + "integrity": "sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2798,9 +2845,9 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz", + "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==", "dependencies": { "@types/react": "*" } @@ -2815,9 +2862,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "version": "0.16.4", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", + "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==" }, "node_modules/@types/trusted-types": { "version": "2.0.4", @@ -2831,14 +2878,15 @@ "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" }, "node_modules/@vitejs/plugin-react": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", - "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz", + "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==", "dev": true, "dependencies": { - "@babel/core": "^7.22.9", + "@babel/core": "^7.22.20", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "@types/babel__core": "^7.20.2", "react-refresh": "^0.14.0" }, "engines": { @@ -3192,9 +3240,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.11", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", - "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -3211,8 +3259,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001538", - "electron-to-chromium": "^1.4.526", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.13" }, @@ -3263,9 +3311,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001538", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", - "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", + "version": "1.0.30001542", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", + "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==", "dev": true, "funding": [ { @@ -3393,12 +3441,12 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.32.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", - "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", + "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", "dev": true, "dependencies": { - "browserslist": "^4.21.10" + "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", @@ -3596,9 +3644,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.528", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz", - "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==", + "version": "1.4.537", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz", + "integrity": "sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==", "dev": true }, "node_modules/emoji-regex": { @@ -6198,9 +6246,9 @@ } }, "node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -6664,9 +6712,9 @@ } }, "node_modules/rollup": { - "version": "3.29.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", - "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" From ba0cc7fbf97b6ee8a9b1d8d16ce79bf9f8c5b94e Mon Sep 17 00:00:00 2001 From: noman <27938023+noman-land@users.noreply.github.com> Date: Sun, 8 Oct 2023 15:58:29 -0400 Subject: [PATCH 275/305] fix: Remove errant word from Action buttons docs --- docs/publish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/publish.md b/docs/publish.md index 6df859cf..41370778 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -1131,7 +1131,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 that a notification with actions can look like: +Here's an example of what a notification with actions can look like:
![notification with actions](static/img/android-screenshot-notification-actions.png){ width=500 } From 73d2b3363ba78e7598b9bdf96557919020bae449 Mon Sep 17 00:00:00 2001 From: "Carlos M. Silva" Date: Fri, 13 Oct 2023 20:57:06 +0000 Subject: [PATCH 276/305] Translated using Weblate (Portuguese (Brazil)) Currently translated at 57.5% (220 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/pt_BR/ --- web/public/static/langs/pt_BR.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/pt_BR.json b/web/public/static/langs/pt_BR.json index 1bb0cd92..89a01d89 100644 --- a/web/public/static/langs/pt_BR.json +++ b/web/public/static/langs/pt_BR.json @@ -192,7 +192,7 @@ "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_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", From 2f2918bd3b9c6549a5274878791cc806831dd81c Mon Sep 17 00:00:00 2001 From: PW Date: Mon, 16 Oct 2023 02:51:18 +0000 Subject: [PATCH 277/305] Translated using Weblate (Chinese (Traditional)) Currently translated at 73.0% (279 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/zh_Hant/ --- web/public/static/langs/zh_Hant.json | 36 +++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/zh_Hant.json b/web/public/static/langs/zh_Hant.json index 0d7f3f48..6d351930 100644 --- a/web/public/static/langs/zh_Hant.json +++ b/web/public/static/langs/zh_Hant.json @@ -243,5 +243,39 @@ "account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼簿", "account_basics_phone_numbers_dialog_number_label": "電話號碼", "account_basics_phone_numbers_dialog_channel_call": "通話", - "account_usage_calls_title": "已播出電話" + "account_usage_calls_title": "已播出電話", + "account_tokens_dialog_title_create": "建立存取權杖", + "account_upgrade_dialog_tier_current_label": "目前", + "account_tokens_table_token_header": "權杖", + "account_upgrade_dialog_interval_yearly_discount_save_up_to": "節省高達{{discount}}%", + "account_tokens_dialog_expires_never": "權杖永遠不會過期", + "account_delete_title": "刪除帳戶", + "account_delete_dialog_label": "密碼", + "account_upgrade_dialog_interval_monthly": "每月", + "account_tokens_table_never_expires": "永不過期", + "account_tokens_delete_dialog_title": "删除存取權杖", + "account_upgrade_dialog_button_cancel": "取消", + "account_tokens_table_label_header": "標籤", + "account_upgrade_dialog_button_cancel_subscription": "取消訂閱", + "account_tokens_dialog_title_edit": "編輯存取權杖", + "account_delete_dialog_button_cancel": "取消", + "account_tokens_table_copied_to_clipboard": "已複製存取權杖", + "account_upgrade_dialog_title": "更改帳戶方案", + "account_tokens_delete_dialog_submit_button": "永久删除權杖", + "account_delete_description": "永久刪除你的帳戶", + "account_tokens_title": "存取權杖", + "account_delete_dialog_button_submit": "永久刪除帳戶", + "account_tokens_dialog_title_delete": "删除存取權杖", + "account_upgrade_dialog_interval_yearly": "每年", + "account_upgrade_dialog_button_redirect_signup": "立即註冊", + "account_tokens_dialog_button_cancel": "取消", + "account_tokens_dialog_button_update": "更新權杖", + "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} 總儲存空間", + "account_tokens_table_cannot_delete_or_edit": "無法編輯或刪除當前階段權杖", + "account_tokens_table_current_session": "目前瀏覽器階段", + "account_upgrade_dialog_button_pay_now": "立即付款及訂閱", + "account_upgrade_dialog_tier_selected_label": "已選擇", + "account_upgrade_dialog_button_update_subscription": "更改訂閱", + "account_tokens_dialog_button_create": "建立權杖", + "account_tokens_table_create_token_button": "建立存取權杖" } From 7516d25bc6fdc34179a5eb4fed189ae8da506c0e Mon Sep 17 00:00:00 2001 From: Rhodri Date: Sun, 15 Oct 2023 21:03:05 +0000 Subject: [PATCH 278/305] Translated using Weblate (Welsh) Currently translated at 12.0% (46 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/cy/ --- web/public/static/langs/cy.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/cy.json b/web/public/static/langs/cy.json index 68846b8f..da6c9b41 100644 --- a/web/public/static/langs/cy.json +++ b/web/public/static/langs/cy.json @@ -39,5 +39,10 @@ "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" + "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!" } From 483edb70bfc6c0e6b06777258597d02078c06495 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Wed, 18 Oct 2023 09:52:18 +0200 Subject: [PATCH 279/305] doc/integrations: link RouterOS Scripts ... which has a module to send notifications to Ntfy. --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index fcc51248..5375314a 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -133,6 +133,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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 ## Blog + forum posts From ef45ea5a50ffd010685e4dfb116f355783fc7daa Mon Sep 17 00:00:00 2001 From: imkero Date: Thu, 19 Oct 2023 07:48:06 +0000 Subject: [PATCH 280/305] fix(i18n): correct usage of language str having underline --- web/src/app/utils.js | 10 ++++++++-- web/src/components/App.jsx | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/web/src/app/utils.js b/web/src/app/utils.js index d0ae15ce..6b3849f5 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -130,14 +130,20 @@ 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(language, { + new Intl.DateTimeFormat(getKebabCaseLangStr(language), { dateStyle: "short", timeStyle: "short", }).format(new Date(timestamp * 1000)); export const formatShortDate = (timestamp, language) => - new Intl.DateTimeFormat(language, { dateStyle: "short" }).format(new Date(timestamp * 1000)); + new Intl.DateTimeFormat(getKebabCaseLangStr(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 d22ec66f..7f84b7de 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 } from "../app/utils"; +import { expandUrl, getKebabCaseLangStr } 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", i18n.language); + document.documentElement.setAttribute("lang", getKebabCaseLangStr(i18n.language)); document.dir = languageDir; }, [i18n.language, languageDir]); From e7c03650798cc54f74797f7c357d2ecce24454b9 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 19 Oct 2023 07:15:42 -0400 Subject: [PATCH 281/305] Changelog --- docs/releases.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases.md b/docs/releases.md index 15fdd114..cac34a3c 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1291,6 +1291,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * 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)) +* Correct usage of language str having underline ([#922](https://github.com/binwiederhier/ntfy/pull/922), thanks to [@imkero](https://github.com/imkero)) ### ntfy Android app v1.16.1 (UNRELEASED) From 70b084457ae1ca7aff9aaeb82bdaef2aee4ff148 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 19 Oct 2023 07:18:03 -0400 Subject: [PATCH 282/305] Bump deps --- go.mod | 43 +++-- go.sum | 56 ++++++ web/package-lock.json | 432 +++++++++++++++++++++--------------------- 3 files changed, 299 insertions(+), 232 deletions(-) diff --git a/go.mod b/go.mod index 6a2cffea..27ee4332 100644 --- a/go.mod +++ b/go.mod @@ -6,20 +6,20 @@ require ( cloud.google.com/go/firestore v1.13.0 // indirect cloud.google.com/go/storage v1.33.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/emersion/go-smtp v0.18.0 - github.com/gabriel-vasile/mimetype v1.4.2 + github.com/gabriel-vasile/mimetype v1.4.3 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.13.0 - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sync v0.3.0 - golang.org/x/term v0.12.0 + golang.org/x/crypto v0.14.0 + golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/sync v0.4.0 + golang.org/x/term v0.13.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.143.0 + google.golang.org/api v0.147.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -29,17 +29,17 @@ require github.com/pkg/errors v0.9.1 // indirect require ( firebase.google.com/go/v4 v4.12.1 - github.com/SherClockHolmes/webpush-go v1.2.0 + github.com/SherClockHolmes/webpush-go v1.3.0 github.com/prometheus/client_golang v1.17.0 github.com/stripe/stripe-go/v74 v74.30.0 ) require ( cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute v1.23.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.2 // indirect - cloud.google.com/go/longrunning v0.5.1 // indirect + cloud.google.com/go/iam v1.1.3 // indirect + cloud.google.com/go/longrunning v0.5.2 // 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,31 +50,32 @@ 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/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.3.1 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.1 // 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 v1.0.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect - github.com/prometheus/common v0.44.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/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.15.0 // indirect - golang.org/x/sys v0.12.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // 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-20230920204549-e6e6cdab5c13 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect - google.golang.org/grpc v1.58.2 // indirect + google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/grpc v1.59.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 bf112048..083a5423 100644 --- a/go.sum +++ b/go.sum @@ -3,14 +3,20 @@ cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= 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 v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0= +cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= 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.13.0 h1:/3S4RssUV4GO/kvgJZB+tayjhOfyAHs+KcpJgRVu/Qk= cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= 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/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc= +cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= 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/longrunning v0.5.2 h1:u+oFqfEwwU7F9dIELigxbe0XVnBAo9wqMuQLA50CZ5k= +cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= firebase.google.com/go/v4 v4.12.0 h1:I6dCkcWUMFNkFdWgzlf8SLWecQnKdFgJhMv5fT9l1qI= @@ -26,6 +32,8 @@ github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= 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/SherClockHolmes/webpush-go v1.3.0 h1:CAu3FvEE9QS4drc3iKNgpBWFfGqNthKlZhp5QpYnu6k= +github.com/SherClockHolmes/webpush-go v1.3.0/go.mod h1:AxRHmJuYwKGG1PVgYzToik1lphQvDnqFYDqimHvwhIw= 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= @@ -35,6 +43,8 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 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/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/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= @@ -50,6 +60,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 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/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/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= @@ -82,6 +94,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/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= @@ -101,6 +115,8 @@ github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6 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/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/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= @@ -116,8 +132,12 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +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.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +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/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -145,13 +165,17 @@ golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnf 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.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= 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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -162,18 +186,27 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY 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-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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +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/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.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= +golang.org/x/sync v0.4.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= @@ -183,17 +216,27 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w 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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.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.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -205,14 +248,19 @@ 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-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +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.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY= google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA= google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= +google.golang.org/api v0.147.0 h1:Can3FaQo9LlVqxJCodNmeZW/ib3/qKAY3rFeXiHo5gc= +google.golang.org/api v0.147.0/go.mod h1:pQ/9j83DcmPd/5C9e2nFOdjjNkDZ1G+zkbK2uvdkJMs= 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= @@ -224,10 +272,16 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0= google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= 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= @@ -235,6 +289,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +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/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= diff --git a/web/package-lock.json b/web/package-lock.json index 3ce24105..13d2357d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,18 +80,18 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", - "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", - "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -99,10 +99,10 @@ "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.0", + "@babel/helpers": "^7.23.2", "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", + "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -220,9 +220,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -442,13 +442,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", - "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", + "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0" }, "engines": { @@ -775,14 +775,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", - "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", + "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==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1562,12 +1562,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", - "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", + "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==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.20", + "@babel/compat-data": "^7.23.2", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.15", @@ -1593,15 +1593,15 @@ "@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.22.15", + "@babel/plugin-transform-async-generator-functions": "^7.23.2", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.15", + "@babel/plugin-transform-block-scoping": "^7.23.0", "@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-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.15", + "@babel/plugin-transform-destructuring": "^7.23.0", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", "@babel/plugin-transform-dynamic-import": "^7.22.11", @@ -1613,9 +1613,9 @@ "@babel/plugin-transform-literals": "^7.22.5", "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.15", - "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@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-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", @@ -1624,7 +1624,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-optional-chaining": "^7.23.0", "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.11", @@ -1641,10 +1641,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.22.19", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", + "@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", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1676,9 +1676,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", - "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1701,9 +1701,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", - "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", @@ -2277,9 +2277,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2304,9 +2304,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2428,9 +2428,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "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==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2449,14 +2449,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.17", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.17.tgz", - "integrity": "sha512-xNbk7iOXrglNdIxFBN0k3ySsPIFLWCnFxqsAYl7CIcDkD9low4kJ7IUuy6ctwx/HAy2fenrT3KXHr1sGjAMgpQ==", + "version": "5.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.20.tgz", + "integrity": "sha512-CS2pUuqxST7ch9VNDCklRYDbJ3rru20Tx7na92QvVVKfu3RL4z/QLuVIc8jYGsdCnauMaeUSlFNLAJNb0yXe6w==", "dependencies": { - "@babel/runtime": "^7.22.15", + "@babel/runtime": "^7.23.1", "@floating-ui/react-dom": "^2.0.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.11", + "@mui/types": "^7.2.6", + "@mui/utils": "^5.14.13", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1" @@ -2480,20 +2480,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.11.tgz", - "integrity": "sha512-uY8FLQURhXe3f3O4dS5OSGML9KDm9+IE226cBu78jarVIzdQGPlXwGIlSI9VJR8MvZDA6C0+6XfWDhWCHruC5Q==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.14.tgz", + "integrity": "sha512-Rw/xKiTOUgXD8hdKqj60aC6QcGprMipG7ne2giK6Mz7b4PlhL/xog9xLeclY3BxsRLkZQ05egFnIEY1CSibTbw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.11.tgz", - "integrity": "sha512-aHReLasBuS/+hhPzbZCgZ0eTcZ2QRnoC2WNK7XvdAf3l+LjC1flzjh6GWw1tZJ5NHnZ+bivdwtLFQ8XTR96JkA==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.14.tgz", + "integrity": "sha512-vwuaMsKvI7AWTeYqR8wYbpXijuU8PzMAJWRAq2DDIuOZPxjKyHlr8WQ25+azZYkIXtJ7AqnVb1ZmHdEyB4/kug==", "dependencies": { - "@babel/runtime": "^7.22.15" + "@babel/runtime": "^7.23.1" }, "engines": { "node": ">=12.0.0" @@ -2514,17 +2514,17 @@ } }, "node_modules/@mui/material": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.11.tgz", - "integrity": "sha512-DnSdJzcR7lwG12JA5L2t8JF+RDzMygu5rCNW+logWb/KW2/TRzwLyVWO+CorHTBjBRd38DBxnwOCDiYkDd+N3A==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.14.tgz", + "integrity": "sha512-cAmCwAHFQXxb44kWbVFkhKATN8tACgMsFwrXo8ro6WzYW73U/qsR5AcCiJIhCyYYg+gcftfkmNcpRaV3JjhHCg==", "dependencies": { - "@babel/runtime": "^7.22.15", - "@mui/base": "5.0.0-beta.17", - "@mui/core-downloads-tracker": "^5.14.11", - "@mui/system": "^5.14.11", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.11", - "@types/react-transition-group": "^4.4.6", + "@babel/runtime": "^7.23.1", + "@mui/base": "5.0.0-beta.20", + "@mui/core-downloads-tracker": "^5.14.14", + "@mui/system": "^5.14.14", + "@mui/types": "^7.2.6", + "@mui/utils": "^5.14.13", + "@types/react-transition-group": "^4.4.7", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", @@ -2558,12 +2558,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.11.tgz", - "integrity": "sha512-MSnNNzTu9pfKLCKs1ZAKwOTgE4bz+fQA0fNr8Jm7NDmuWmw0CaN9Vq2/MHsatE7+S0A25IAKby46Uv1u53rKVQ==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.14.tgz", + "integrity": "sha512-n77au3CQj9uu16hak2Y+rvbGSBaJKxziG/gEbOLVGrAuqZ+ycVSkorCfN6Y/4XgYOpG/xvmuiY3JwhAEOzY3iA==", "dependencies": { - "@babel/runtime": "^7.22.15", - "@mui/utils": "^5.14.11", + "@babel/runtime": "^7.23.1", + "@mui/utils": "^5.14.13", "prop-types": "^15.8.1" }, "engines": { @@ -2584,11 +2584,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.11.tgz", - "integrity": "sha512-jdUlqRgTYQ8RMtPX4MbRZqar6W2OiIb6J5KEFbIu4FqvPrk44Each4ppg/LAqp1qNlBYq5i+7Q10MYLMpDxX9A==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.14.tgz", + "integrity": "sha512-sF3DS2PVG+cFWvkVHQQaGFpL1h6gSwOW3L91pdxPLQDHDZ5mZ/X0SlXU5XA+WjypoysG4urdAQC7CH/BRvUiqg==", "dependencies": { - "@babel/runtime": "^7.22.15", + "@babel/runtime": "^7.23.1", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2615,15 +2615,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.11.tgz", - "integrity": "sha512-yl8xV+y0k7j6dzBsHabKwoShmjqLa8kTxrhUI3JpqLG358VRVMJRW/ES0HhvfcCi4IVXde+Tc2P3K1akGL8zoA==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.14.tgz", + "integrity": "sha512-y4InFmCgGGWXnz+iK4jRTWVikY0HgYnABjz4wgiUgEa2W1H8M4ow+27BegExUWPkj4TWthQ2qG9FOGSMtI+PKA==", "dependencies": { - "@babel/runtime": "^7.22.15", - "@mui/private-theming": "^5.14.11", - "@mui/styled-engine": "^5.14.11", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.11", + "@babel/runtime": "^7.23.1", + "@mui/private-theming": "^5.14.14", + "@mui/styled-engine": "^5.14.13", + "@mui/types": "^7.2.6", + "@mui/utils": "^5.14.13", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2654,11 +2654,11 @@ } }, "node_modules/@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.6.tgz", + "integrity": "sha512-7sjLQrUmBwufm/M7jw/quNiPK/oor2+pGUQP2CULRcFCArYTq78oJ3D5esTaL0UMkXKJvDqXn6Ike69yAOBQng==", "peerDependencies": { - "@types/react": "*" + "@types/react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -2667,12 +2667,12 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.11", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.11.tgz", - "integrity": "sha512-fmkIiCPKyDssYrJ5qk+dime1nlO3dmWfCtaPY/uVBqCRMBZ11JhddB9m8sjI2mgqQQwRJG5bq3biaosNdU/s4Q==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.14.tgz", + "integrity": "sha512-3AKp8uksje5sRfVrtgG9Q/2TBsHWVBUtA0NaXliZqGcXo8J+A+Agp0qUW2rJ+ivgPWTCCubz9FZVT2IQZ3bGsw==", "dependencies": { - "@babel/runtime": "^7.22.15", - "@types/prop-types": "^15.7.5", + "@babel/runtime": "^7.23.1", + "@types/prop-types": "^15.7.7", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2738,9 +2738,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", - "integrity": "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.10.0.tgz", + "integrity": "sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw==", "engines": { "node": ">=14.0.0" } @@ -2758,9 +2758,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "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", @@ -2771,18 +2771,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "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.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "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", @@ -2790,9 +2790,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "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" @@ -2811,33 +2811,36 @@ "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz", - "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.14.tgz", + "integrity": "sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/node": { - "version": "20.8.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz", - "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==", - "dev": true + "version": "20.8.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", + "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.25.1" + } }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", + "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" }, "node_modules/@types/prop-types": { - "version": "15.7.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", - "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==" + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" }, "node_modules/@types/react": { - "version": "18.2.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.24.tgz", - "integrity": "sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==", + "version": "18.2.29", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.29.tgz", + "integrity": "sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2845,9 +2848,9 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz", - "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==", + "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==", "dependencies": { "@types/react": "*" } @@ -2862,20 +2865,20 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==" + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" }, "node_modules/@types/trusted-types": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", - "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==", + "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==", "dev": true }, "node_modules/@types/unist": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.9.tgz", + "integrity": "sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==" }, "node_modules/@vitejs/plugin-react": { "version": "4.1.0", @@ -3164,13 +3167,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", + "@babel/helper-define-polyfill-provider": "^0.4.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -3178,12 +3181,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", - "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", + "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2", + "@babel/helper-define-polyfill-provider": "^0.4.3", "core-js-compat": "^3.32.2" }, "peerDependencies": { @@ -3191,12 +3194,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "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==", + "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==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.2" + "@babel/helper-define-polyfill-provider": "^0.4.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3311,9 +3314,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001542", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", - "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==", + "version": "1.0.30001551", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", + "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", "dev": true, "funding": [ { @@ -3550,9 +3553,9 @@ } }, "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", + "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", @@ -3644,9 +3647,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.537", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.537.tgz", - "integrity": "sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==", + "version": "1.4.559", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.559.tgz", + "integrity": "sha512-iS7KhLYCSJbdo3rUSkhDTVuFNCV34RKs2UaB9Ecr7VlqzjjWW//0nfsFF5dtDmyXlZQaDYYtID5fjtC/6lpRug==", "dev": true }, "node_modules/emoji-regex": { @@ -3844,15 +3847,15 @@ } }, "node_modules/eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.50.0", + "@eslint/js": "8.51.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -4132,12 +4135,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "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==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4226,9 +4229,9 @@ "dev": true }, "node_modules/eslint/node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4474,12 +4477,12 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -4538,9 +4541,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", @@ -4696,12 +4703,9 @@ "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" - }, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "engines": { "node": ">= 0.4.0" } @@ -5614,9 +5618,9 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "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" @@ -5978,9 +5982,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", + "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6465,11 +6469,11 @@ } }, "node_modules/react-router": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.16.0.tgz", - "integrity": "sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.17.0.tgz", + "integrity": "sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA==", "dependencies": { - "@remix-run/router": "1.9.0" + "@remix-run/router": "1.10.0" }, "engines": { "node": ">=14.0.0" @@ -6479,12 +6483,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.16.0.tgz", - "integrity": "sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.17.0.tgz", + "integrity": "sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ==", "dependencies": { - "@remix-run/router": "1.9.0", - "react-router": "6.16.0" + "@remix-run/router": "1.10.0", + "react-router": "6.17.0" }, "engines": { "node": ">=14.0.0" @@ -6663,9 +6667,9 @@ } }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7164,9 +7168,9 @@ } }, "node_modules/terser": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", - "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", + "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7357,6 +7361,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "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", @@ -7582,9 +7592,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", "dev": true, "dependencies": { "esbuild": "^0.18.10", From c6b8ea90b79841259b36e43670274612b85e813c Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 19 Oct 2023 07:32:39 -0400 Subject: [PATCH 283/305] Thank you @YezGotIt for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0fae8469..6e69d27d 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 7c3fd42a867d52a2d447144bfa9a2cbfb4022045 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 19 Oct 2023 07:33:40 -0400 Subject: [PATCH 284/305] Thank you @thomasskou for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6e69d27d..049b6910 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From ca6bc1dcb02602d4f1fb3609a528a794f5cedab9 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 19 Oct 2023 07:38:12 -0400 Subject: [PATCH 285/305] Thank you @surfernv for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 049b6910..c20c9971 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From b811da6b830efe52b5d83e8a6f37d0997f956aef Mon Sep 17 00:00:00 2001 From: FOSSMan <137928236+0xFOSSMan@users.noreply.github.com> Date: Fri, 20 Oct 2023 18:42:44 +0000 Subject: [PATCH 286/305] Added ntfy.fossman.de to docs/integrations.md/Alternative ntfy Servers --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 5375314a..2bd2344d 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -236,6 +236,7 @@ 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**. From 554547b431f462ea0df72d79e3680c7570f65080 Mon Sep 17 00:00:00 2001 From: Dan Lousqui Date: Mon, 23 Oct 2023 21:22:21 +0200 Subject: [PATCH 287/305] doc/integrations: link to ntfy-android-builder --- docs/integrations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/integrations.md b/docs/integrations.md index 5375314a..48d33abe 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -72,6 +72,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Projects + scripts +- [ntfy-android-builder](https://github.com/TheBlusky/ntfy-android-builder) - Script for building ntfy-android with custom Firebase configuration (Docker/Shell) - [Grafana-to-ntfy](https://github.com/kittyandrew/grafana-to-ntfy) - Grafana-to-ntfy alerts channel (Rust) - [Grafana-ntfy-webhook-integration](https://github.com/academo/grafana-alerting-ntfy-webhook-integration) - Integrates Grafana alerts webhooks (Go) - [Grafana-to-ntfy](https://gitlab.com/Saibe1111/grafana-to-ntfy) - Grafana-to-ntfy alerts channel (Node Js) From 6dbdabf9fd325a1010e6144a60b9bf7bdc9dc673 Mon Sep 17 00:00:00 2001 From: Dan Lousqui Date: Mon, 23 Oct 2023 22:15:01 +0200 Subject: [PATCH 288/305] doc/integrations: link to ntfy-android-builder --- docs/integrations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations.md b/docs/integrations.md index 48d33abe..6a9766b9 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -72,7 +72,6 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Projects + scripts -- [ntfy-android-builder](https://github.com/TheBlusky/ntfy-android-builder) - Script for building ntfy-android with custom Firebase configuration (Docker/Shell) - [Grafana-to-ntfy](https://github.com/kittyandrew/grafana-to-ntfy) - Grafana-to-ntfy alerts channel (Rust) - [Grafana-ntfy-webhook-integration](https://github.com/academo/grafana-alerting-ntfy-webhook-integration) - Integrates Grafana alerts webhooks (Go) - [Grafana-to-ntfy](https://gitlab.com/Saibe1111/grafana-to-ntfy) - Grafana-to-ntfy alerts channel (Node Js) @@ -135,6 +134,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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 From 27f8cc0e5282c2861f0e2f48041becaa914ebd8d Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Sat, 28 Oct 2023 19:04:56 +0200 Subject: [PATCH 289/305] Adding changedetection.io integration guide --- docs/examples.md | 16 ++++++++++++++++ docs/integrations.md | 1 + docs/static/img/cdio-setup.jpg | Bin 0 -> 158553 bytes 3 files changed, 17 insertions(+) create mode 100644 docs/static/img/cdio-setup.jpg diff --git a/docs/examples.md b/docs/examples.md index 8164e2bf..a0e121fe 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -135,6 +135,22 @@ 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 [https://github.com/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 watch then add the special NTFY 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/integrations.md b/docs/integrations.md index f5c5fe83..a8ffa6a9 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -24,6 +24,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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. diff --git a/docs/static/img/cdio-setup.jpg b/docs/static/img/cdio-setup.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f9e44cb2ff668da992555e9171229b7d8849836 GIT binary patch literal 158553 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%0DsB zTvMP1ZdSC8gtnPff0NxZMkhx2nQk4A`4JhmdBqrYaU6(Hpm6!F_R)@=woFNAvLRmc ze3?#U`E1q->8fs@AenOz$!Lv__eLkUvF&3i);MP3E+(a|XTYhE9sR75Nbz#h4A>!s zUlg3@Ql{TX^zE)?RZGH zsoABX{@|5sO;<+Uq2LeUO%X4fRU$Pr5X&%9(SDek#2zmbXg>l+vi(@~WwuKk!~0S} zGZM{MWfiT#rq6jwN{z|EY(BJPj5lkymMe}cV^bhy5H>ou`RgpDsTCmofzPq)`Fe{? zra^@cgvMPYX@0bO{!_c~Te8iH3i;g5ENv!voiReRa`OI%St}#@&uHKk7hLqz8=nkI zxdM9=ZyvTX9ox6{;G8sWA==Uf>B?AO)AW(VHim|#j~Dgq9aw^nV*t4UuLs?q^9?PBp$AD_iCUK7#|1U(kV#z7$widVb~EizhslXDs@f zNl1IN?%}F1>Q0?r>kti7f4;~|4=CAB$8-tT(1mp%jbm(%ivIZ7fU6l#@R92>sAd^$mvvo-`O_@6n4rOG#W7iwN@ zrq4+7gS1=LOh?Mx${+dBG6=8U6`eVjNaM%xHmztip(T(3jJfNe&VY%rV0`2FolCDC zN^dj}&0~A^uLITmD4~Aa=+{K4#p-41BO4myu(#LSzThATrLKq|hQRi;#9KWya`elL zvph6Ezv&)e`KtC)?B&Wo}??t$J%>JM&5)P~Kvu{}JhR z-{8HwGk$5GSDj{(AkR!nx1gsr$uvR|Ec-+Qb6}@QFGMe!6S6BP&Cz6J&;sokL{}bv z?#>4cZBYE_oN}$N!@bz!=6L~+(wN*mL;FYsfu}W+P~QRB*S`X9HM%-6UJg7Lz=3PZ z5A1Yb+H+WD7)60T6wkB&4Jscx^RN7HCHh#lVGNyRau+=O4z;6D;_pM-eL(MTdsQtd zfVS(N9GLtc-Jybi?t<`t^jeHJewp4EOa_>kPMvyg4^6`2i2kx=;g5V<>BN~D?3s}O zNX4Mr)|@0B^V>Rvf;pt2=;22mU$SFg|8BNu099+U_JC^XD(k{i%yI@SBQ^o0*GVZ4 zM+mkiI=suq1sPr7ARO@B%lNS>O--os3^f{62(&ucmOu;%6?bK#&c zn1eK(yyotu=0@c1X-EDcde(ktj+7)FWy8tFu>?^+D9o6A#dh@e)iY0o~k?} zWz@Ba$4S)uK2012!OVW5Tc27P$D6R$v3dKRTKgN~#SU5844P7JKOSTr5HcUA&crdDKS1qJ5t}M{yjIpL8L;yvQ{EtsC(RvfUON z{j46X+0PV?Eo1BjyAtND#p_p;%UD#I(J%rP!iqMaWE7w#g`*4m-+ z?oS$C3Wn}&9@I)HX$(!fW=x2)8;;BNO@>}NK|<6-E*0kxrDEC4#N9{cJ6XO@dqYMg z9>jiy{dv%pOvbR8y~yp}Zl+6xydy*0k9O9H@bAw07(~F*hkXUm<>b*lqtr;3_Oj&> zIt=r?sfCGe{hG2en~b|g&se@w?I)`nDhz2gdc(dXdmOxAIn3d^&mA56Z*dv;Ru~Y3 zTfnQ}XP{?WB;##$#2W>^PS>1%XIre=zmy>i`BNW8++2)tf|riWcj6_<(Z8m-yVc09 z3(wjO*+Zl-MNcvAbk3Z|69m?zW=10G_5xD_k+?y0URURKRJEwy$gB2!D2P#gML>A` z8QW_?W1W5H8n{Nu#7eIYn~oyMlU1Z&cw2;XdBldZg_tT3ED|Sznl~k%jI?nIHLU%_ zd7j8ZdpY?YIpt|ljVj4kzbXa3aq}^9p1$L;h&4^kI+}gj>(=tpkhXauVVt(Io>sQ_ z@_E7a1&9y* z^U!HwIPOw^7OuMD6t!a367og*q8)z@jjj0)ext)99-08!lBHo+_azjLYp5BQ1R$P^ z_EL248~|y`_8XI9-Is9cHPz%-7JWY^;1iDy%4p(fXMd5k`pi@E`t+;cwzU|s0bAB3Mj;NekM$1e9YJCl& zR}WQzcV3)Mybo6%t$&Kfz+0$8HnJ~GCPl}^SyCZZgpFS=KHtnV3h0_z|HO?!nTMAy zK}z#FN?UTDExPjY;JoiOBkguFVvn)S&n0)9g4YLIh4b2UEHUwuPn0LgZA&F7os2fI z9+&#j;;zu^ep4^zTV|K7FZ^t4ilyMV-+*s^h=-97J$zp+w(BcUu8k>!y6(LF=dqI* z8WUu3v#$O;b`8P1!4Hro-5B6eRTgF;)=P~2XQ;szKOU@c?4jBu!C*(wqWmi-j4Owr z8cVOX9_*fHO!0V2&i$+JU#ljt@(gAOxf3J|J`(Q0T@!m15=#3KSg|zk*a?^xh7L?z z;(s$=0yNJ^ijb}qnpUZKNyxkEQuh){tiX9?LQVZ#2iDyV{UjEhEm^vd`rd?Ur6t(L zEK4XNoh0K99~;IUj;AX@Fk*=++vuk0@}aCzeIzD0zQawsSU66FP$HC_KkXo)(&=*; zElbk2IDMFxk^m z4dd;@WVy7f2G925KVGE@OEk~~biQda!Yf9je#fDpG9aGxH=7fy_k zA4_4zIw0dVjia?U$fjd)nia4`RrpC{MIu}x(hHVbp!I4hs_83-&<4L7OkAWH@PaTM zlTZ*Q=sy!KMDM(u+NM6c6Gkhda2ptFrojiI9ecJUfm{qPrz_0$4ojIxyXBMJ5XUhSy?}Bw(XZ(KyuC$>~-pYV0B_ZBoOKIODh%K&Dx z3SVU1!JNxu59yDq=zN{Ws+9)Oqvi7nHK(}W%a4m~3u`@BaeelwqfjPXM~IFHaLl{r zh$Ru!69(pT78jS3ya6N#R;(T8+$gqlsEG{&d+cA0hdd5qj`|vGL!q|3ydIf^JU%p< zsney6`BHkO2<0CuJZT@g*l%Qxr<4lzitM(u{H;t3+53tBc~2G$FnZ zU-3dx@t58)^-?4a;4=>-$1-J8BN0<#;qb5!QKK=E z08i-)S#jfXRk0u&qob!5bk+F%4I+zo9$7D>Y1Rx>2%CMDQ1G*@Vv*n*aW!``BC+R~Ad5+h&tB8FR+0rpd{~WheqsjH&29-H>)3|% z!5>sHBSqR66`IKkH7}{e^re=a$DTtS)3}Yzv+C>e=6uNSY}rwvn_f~#THYv78)q4# zjJu%{(tT92{V_?FxXwBOU9_*&)O@jR>?F1c!2xpika@YZ8|T>2V`ktouW@coGphk* zm<3)3$TEkue2-I-;Dj!6`8Z0k#u z_TD-uuBiJGZ6vq^g1a>C);IwY++7-XYuud#g1c)H+?~cDxRc=S?h+(urazgP?>DdB zd-Yz;pHtOUU3KeJ-_!e^d(Pf#ue~;krDHyeR%3FCr(*rqNDD*3^RXOB5bJn#Bl-*EDM^j3vUJ>agA2Pm z=cR+XTQuER<;w${dTyR?lC~$N?5E}M=5s8Q>kUBQ$&*~d;_IoG=szu z{^KgYMvcUR6v;oO>o82@3+j#U8C=E=sonPh-CLI`3m2BM>9KnMp?Ak+CC>66!zM+% zG=*9|v$|G`zb8o_RzjK>_0fVF)g6~HWL`#bCG)EmdGKo!B0skO#~Yvg+8E^9XoN!b zr|vS;H<#;J-ACb^@0oh`kFc@5^_ zPRmSBS);ArjuFAtNU~zX0IBqJ&IetOh0AaqfN#S@PtgB|Y*FK3SOXAYo|jpYvK z0!;KBVtgc}CJg%XxUvMd)!wT@pxj|ge&l2$ELa;^k8~@f@lo#X`VKzISXe`^-l~I0 zl)r!_pw5?@aM^@0v_j~ofI|Kga_PqCqCWFrk8)g$}SLs*L*BhVoxKcH^SvLslA_d9Yb`LqvTqHV>$g!86^=M@Xauz)@k}~W}HTX zC0aOaeSJoyZn_W4|CAPi1HxP#tz2G}0Z-l9cC6T_@7Bog*Dq+atWgSsE{q(fIp<3Y zZOmoYyG6hrib;rVR0` zn8E(hId>GkX>@$kcgf-5Yx;+3bB&)F)_`Y437-IL`$OWD!mNM?n_#vREac#-Z5&FQmsSVZokO?qIm zRr6D*!bFMYi@kYQ)Z<2Qtszy-e$DG&)%fYuTuo&(s`*ox5>v3q75-?V^CD;oM%y#} z#PAWHU03wVy(5ji z_haI{D2-$YbWq&n@q1&ti6&woJ+0@#L4IHT+w`eyWuT@&ZZNla*|om26}siNpm9Vs zU2v*JTLv*gQh9f*YS2q&Av%Xn zHKsv7d1;)T*i5PYIvNIuwid=yv_?`{R*u8pyqO&snYAbrOs8jM_lovyJC?nS5^)+{ z@li9MPFq_sdMh1IY;L&*Wi3f=FYvGj&I2VGEfOq}45Hn^I4iQ1)LKbAG^Yo+oCr5V z5@%J?1p|Y51T&3^0_o{}9s|vu(-I;?a@)NYkg98n&XstGU5_j<358S*0xGaUAxB(s zDVr=&YG6Xi)dG%DDOLT@U2h5$E_$0QBF8{u@YzBZA-K%+T3B|L@8&l|duYM5`!Pne z)5 zT=KMYMZhW+`>Dkq2~48H*=meg3a@UQO26i6@qydE+j_d6&pHL+bWJ7SMC`x5ydIBA zJ3B93t4Q@cGahcrkvfU}nn)mJ*BW`UReO^v6Jx)Z$ioanqZQbh$L^pJ@{+ICWGfy~ClQWgH_wTa?TSe{DF)~5?tY98O*|0klWoiL)F0i7 z_sm$s%X^EhbW)&S&4cX?T+XWOPZ0kokw}Bi+m+?$pJV%CLB3^8{IBWcYr#Qk;f*id z|Ld+qdE$NdwR!j7M_)J0-5bHa{|i8PaiW;Hd(P@!eA@XPOL(kt`at~(;~fW8?JNgw zB>xMs%71|&R>1cg&)Byeekv>1c7Flp7x9z4#$_rEyWvl;tn_PhyzNt<(!boyXqcPn zpYRtDboqY%>g>JK$iJPmKv-CoM0xRw{J8!f%a!Awc!n>+UjR54=W=LL!G7zQ+`$+5 z0fCY(eRlBRf6iI;tM%9fdFuc9{O_>9SN4A$TT+jqPu&S^{ytObqpx-Pp~*=!%#JjV?`fu z2`Ic$TW0p+@1or`BV*x>hCG*wES7*8@$-#JpA6sJ)=2m^jF zGI$xHti@SaMwOX6dC*!Xcnq5qHG7U)ld$g1WW- zsG;qi16{G1*9-%X;}oGbQ^Z^zR5wnY!e?lq#AFGvYwn|=yY0iwGAsHKE5Jp7UZzr6 zsKuIh1(U|2ZDJwf8ORPk57b$@HbPxnUq=7zt;t2N(xmQJ4D+xS`>f&t#F+n zRJI7OPWVN$aKt~I>r>j=LR$p3A62r~;rsxPNC>?ysqQ?kAR>A;lfaX2*<8+=;Jmua z-E5NeNNgQs6%&D4cp?~(6wsUan}O{IGwyols@;30fNyQvh3iQYRPa));kdpW^1x&t z)&4LL#d=ME!`O9A>=g*P{F&J$PMC>vXUIc2;b>YaVzEIXcA{oZb|nb`Yc_40-7Apy zB9B^di3!oKv`fa#Jn}>8OOCxrJlVgW&!DURxFCz4F+#^<+lg)7X&sb-WG;VlABjUf4D;RPNVqFz14W+i{}Y+Gsxmz@oF-uV}sEYeD7VVgy>ck(Jk;6(Il_; zJSGogCr(5)KZsqn=4j@w`Bm6WSez6)MD%ZeV8RTtCc(}PabSz=GSn_kXP3-T0j|Gj zSLP{(nBmdjdbzC0uPAg<-1HTTkZH-xCQs+L9X^|_`PB9 zGCFRMn{pKgV%r`TO9vb|v;tRFG^7iq6PFyXxY|kjY`a;Jfs1(+(*l7CQ1tf5zW_;S z$cVzfW~+ujs#LIL@@1zcKTh4!llr4g|M^Z^a(bG5)@D()=o}Q&yKam_%Q1QXz!MR} z_gJRgl~CA3f+n$W1l1sFbM>p^*<55`MM7c7nJ8uAf8V&ji(QN$r`v#(0##H-2#Oi+ z=0A{9QBlM`y`+jvA4S?)sME-?9s+g(+rG$Y+afy7$J@tbB+jEe*(p*nQMWrRD@Kad z+ac?%>zO&gvZS~^D=+&{1wz`v=rcz)ll!x(q=Dh9;()4wN{W{zj`#MB)=Lm&EbcA) zl>j@UqiEVnZSg;e_LsL&v8(bYWa+x&X~|@eN#v`NYb8|A(Vz6z>vo2?J!yJxvZ-U^ zja8In733r9KI+6twhug3$Up==KdFO}$U28oJ06cgLV~GjPt#gh-CeWlj+%S2=ihn} zK)&uV!F@@6mm3Ocw}wJ8>6J#I^Vfd3&A00XL4@4NC^6-=y9p`*ypp2D`bw#@(MTH` z`q2!6TeRMXO(z5WfY<`iQbbcE!;0^;?3KJ8JDqjb)A072KbmS8cb2?^>>617M#rho z2K}DGoH4zpj@VmDY#n+1Y%gAXm4m|JOKnX9aiaM2#j-K9R5M?-piQbr2m*1G{2xG6zP4yni(f0i);3;DsxS@>$rK z`JGz29xua_28tuzsLPN+)cV;PEcGmn^)H`=nS~{%muhx52#s}1=`$^}$rcdPQ2`8| zm*Q2zr=B*nelfr6Sg}dwsEs70k4iR%*j{=Ihg6`;`7WlGRN$Zo&EZEMdOfl$+(M^LD9_} zVaS-f=Nl(wcUgMCQG*b@R&&o2Tsu^HIjer59kP~|)-_j@d|VL=DyZPz=v~$?3&KV=_THXvw_IIkoCblTc@H}J+F0Jnmv^~&;30y@jW-+etmuxTV zXmbN#ogP0XKRUN*W?Iv^p+4&2)a8--WjKnz?(Tyd(a z_Zu_%8RpTVT?DQyb!vA zXT&e-xAUbEOf&-%N}=%Atm$`-Fjd*ECW&_m<(}}*x}}ui7vBX8pbk-WtGeI7#w#7O z1M`#DJS(R!^HmrYx@Fw5zF9+8d?dNNnZ4Q3cBty}hlJ-!E!m(B52VP;y~y#^h}_d@fO5ZlvqS>8YK7mnxO z5Rt5-l}p7@DKUKfA_Ctvl5=c^%|anrz7^70O&b7RNS|8cV>X zH=|hh4d?{9e`Xd*PH6Lp;TxjJ%H0WvG-<)r6M#MD8k+n8--+8j&v?$4Re>!~yM3TOGgYsGsALy%cUmqYX6C z%wOqjVMUc7ERK74VhlMRq2pFv?8oTf+d?F=v{r_*GR%6*&v>`c>!5&&fday03)+j4 z9%*zG&5fZ{*Z0n47Ktt?S&k?wY42X%c*u+OAP=s;ufRzHeW40P$f`mly?= zeoXa>tPcEFY8MO-30QYQsDL{`Kvw%qLzeirOVl| zTQDP-ePBYQv;>vXo9J$@W+iLw;D~Uo?~#$e7< z%Ub^v!=;&T?FUlQ`Df9w?%dO=g6Io0eD5SLI5i7yZUHH+9p5OxlpN1+srk>8=A$Mh z5?+=1rc1vB--yGKD8a2H%>$aI;S$+{FEa6Y<@YRSB}q(MNxTO_EmWE@e4P04d2VE1 zA)DwdJ|#5__7f5K=X70CrgL%WeC@Si7rQ1nj{ZKk0!$; zLl~xD9*!W4rjs#N4`mTyE-20;MhQ7Qlx z5{M!PK@oncGIqNULVQ<#7JrmYo*J=7p#0OxpokeI;cGfqJjA;vSp`ku^==dS{$`eQ z$vKHW-8P_i{-X5vta!Gvl`@ji=wWpf^cYvDCOO?w;P^IvO>cOy%DR!tGAt^4qkIl& z%oiqYFd|Evq=FV2-nEk19&BXX}?BXa_|5dN}19cmS zZ3Luo!q>nt+6CNpz}EVs8JH^T;;|`Ij-2oEyGla9l zttdBNyc_*iqu&Z{ z`T?DMKEHM(8P4ymL~~bN;xLuLl3c&4sG&qClIzHszs_Sxb2FUgf)iyi=W@&&XBb`q>aN`RT;9fH1EsG^vew zhc*H4QoHG>qo~ecQeK9kW&td)c;HZH$qc!ulBCHkq?ThXA>S{A6ovYqrbIcQwq0qf z7y8A@f4a)p(;e|%9=t0B*-3U(ky;fxBe&Jcv%Z3!ujWWPBfpd`R1H6tTUbVA;NA|7rmoaWOxJzPz?whUPK5uNboTn6WmS zj~;`Lsz`*D|Bv*bM)}SbCrzP&&nt$fob0imGkt&t-Tp=9!j%e(=;&Ja-I9nY$ zN`e&8m$Zf|wxS7_AlINP;TNA3hrP@qgIBKQ&RO*rpf9s2wrqlPXRbzCP0E?^i9h?g zW-yBWE1n99NU>kEBP@b_WYOR`+>0ZWGW>4Q%)oJGT-=l-FbJ^$BK($Wg)hEJwz82^ zXaQN#z(|_`c9XrHSxO0gs#C6?nqDn=&x)5=j?Ds+@mtXN>*|_cOBJb>BW~kC!#JMm z(3Zn0v4R25c^+fs%4Wsoow$pa`A@>zrePP|$*HqpqUK)br3astScRYwObycJqz_er z@s^SmST0S!lUYp9kG^G7(uUo&y5H*8EE{{_(d)81ZEhLq}aWlK@{ zb4=C{ahawZF5Gk#A8nb5?R*2@Hg8}6?SAA*o2A=5zM)Frx$|+JFSqA+}=x}~d z_S*Tv?RKE3X3|0NdFLKhj7fCzZ(NBpE(@onAk%fubu}}8-Sd+*4PdGIH33;=HFk9e zX%g5x&F_yRA4$fpO?^sAlmX_LBY!tqxct;9R4SX>b$G-1&Z*4UJkkZ5f%?}1-xjO- zlSzxyPFoXanfnBLyqD1W*u ziBGq{aybp@MfX-GWbh}!%wFTVpm2p0Yi$Fs^3uBf`U{o2b{?W6ogN1b3qXGLl8<_E zeK~BF(bg#)b^z3S=L4fl^$_LzXpr@`^m7`|c=f}vkBFH60=(T9!rX!da$C_Rei9Uq zD^O&kBW8*3zvc_EfE&Uc_?Q8LaFI>Tv#oBPE~Sp`XqQFFKdDf=`m?j11Reg@cSXwz>Q%0Whg2jN_M+nR@do0O!-V`))X;V4hg{?Bz=E3 zbBqYo%Xc9*bu)2%AK={+jZq@~BhmRA`7O+BdcZdU{)sxAtuTtt8CgcU_A!4Ap)Odt zzRU59-l6+I-_}^gUeeq_ws!r!=do*6XDLN(Na%=3Uo_~rn@-DpK!K~a69!DTOVz(} z^ls*Pl{a}yWsTM?RSRJ~W~O?XlecOQSG;r5QlRgZRnRrkgT@5;l>LZ0UXIwqcCp8B zy3=&Y7!AwP$Q?q$G=DnAxS2)@^SLNxZEk9%d6_MmvFdjMum2n?!=6btI+%QgF{r00Z1Fhc5M)nI0yqxO#&%!@fYY`@i=h!6j`1|1t!QGdn9 zE95>yk^otJZMgrHDxWdjWk^s)W>~9u)ra=W|kU0dnFS-~}CzMg_NEEKQ znOe3oEXm(@$-MoJrE}*}RliiwbpA$Kfvu33sadK;4Hgbr`JVWXvK;VMnqc5GHi*Xop%dOtgfHMv?cf=221XaHQU%c z|8mLF5y8jEQJ;0Sd+=3Ju1Yd3OIGTy20Xg=BVr-iQn9oJqpJEnNsNL zdq30lt5hO!1Z8bOu~b>1<5OWk6A*?}NdtGkGemZy5hlSb%=}La)8~FL!~^MOJKfIi zc0z?Wys)yC()n8m`xoDxY=K!H^vwO0`H#ENOy3doFJ7x0cnS~TV931{aRvv`R=j+L z)pPuM{VzBWI?cXXpPA^bNIPrl&7TX}#KG?g)qCNjkM|mY67u}SIDtiQywdR>|C1}q z>5bDetYOC5>+T|TJ7bsR)KjCVWr4<|oSzk?+AYOj?HUG43psbp2b+Z4qan@W`HErT z4CJ?^u(FUHvlwCvG%oBto+KJ{2GBeuUPzE(n-Nx&4IXj z&t6BYB$f{kCYkx9ZDW%R+w5Ujj3t+L6nNCQ29XT9`S4%uI7TmjOE}6L?WtoVc5;~+ z3L~d|3$$7E4dLZL>a#`|>I`R!IBb>@iN%R~w2bSI6FyStVQm$UjB(qFL?{VD%h(FF zq}AF8gfGhE-M6rjMCT+u_dPVnjM#4^i$ijlTlCf>V!;cPR&YTvkb&C#-&H5)@0tx^x2 zw8kE7**Y#;v8=t8z~ga?(>W|7cAu7EpkMJBOKUJ%RgxT1sYmB-ipHoiA8b5jZ7WO& zCEQ6Ay}#G6r3GDk!`r_rTGA~cAOx8PdDsCX!30aciI7ZCJ1aD7C{uy1jJB@A5iPAE zw(uM*HnC32_~n{YjoESv75m=pZen(6=4ww~5cdswZLGl8AH>CG}23ciuh3jdfqe|sAWWgVH$ipdM zSWVNVg9?l&i1{hKRgzt3$ha+T>S`Av;J@t2ZT8l}Rh{2sHrzH2fqp{%{A5FUAJ&>M zO;!R{H&^%}D^!BoDmJ)@Q_`{H1Cz$niS1Vg(XR-TomJrffwQZltmZs)B%7<7IEC~- z+0xC*MtUa>qj?!D$FqgSW?eNith9R&6&toSwzGcx2y?)H%?wy#ySx4>t%EyuOG>u!r5v zEWWEhP7d&dtwb}pyUz_SgX>Ji`kGaw(2mF81uY&pi?MtzgxGtm6lz{F(?}5rgc59X zsQIV}$rqmkHRvwhD!^F!&JMP6eqRg*(O`S>ahJKV>KLv7Uj|EK}EfU$DVpY;?X#7zby}oJ@^9X$DUCgPObL7<( z1Uaz2g=Iqub0u5B!2@13#`SeF8)h=V;DGSr(5T%4QntiaqluLhTT(;&WCm#+OJ$kThbX1>Dt2J=iX@^A;Pmb?rCMNqG$=wN6Up3h_ z-T*ngx?<245?lb}>yPeZDbbk}H8)JkzZOgVLV*C-Pu_kOdqv!K5G@J*b`51#77?-| zk9!)Ybv~9LZL2^G)P8bRifxNmlF7+zr=J-aTp2Q~uy%vwE!aj5t}lCz1jCL^B2tg3 z16c`GNhXnVe5!;Uv~3P^|9F`t?ePs({sMGLqqDjCpQ&jgGyi!0^gj;vLLnZY9lI`z z>sq2Rei%x?LA}F5gQ%_mo|6jA{sh4~kJ7PqsLcFq-uFUcDd}oNol^F4TP}w+NhH2* zZl8RXzc2X>1msSTxKkS$U0yOIO%5bnYx{@g4lD}&7>9Z61z^QE!^U%VSquagb);1u zBJUIDUVm=jkD7GN7`gj3FA#_wKdhzxY;M${mvSN38XOmw#4@!`X0y{ohgGE zaX))~TCX#+(-9{_@G!?I;#PY*TYMR?M!)0wwL-F!di)!hDYS&SyjbCG| zZpkbPUoV{X%UHpZxrAFv2jH;#z{h0K@*dNu$({^~+@1WE zAiOarzvn0Yjo1%lSw5sz_sh8weY27qm!;8w$PFo9aOZH4u^a;Ntfe=6a4nlY607}5KAYWs+%Uhu@q8Jc6Gph8| zV(*U1C9-yV^+_mpSm&62+Q*id1Eg1A!q90UYxlFi-0R%A9rxuJ+omQ9-XAj=qpP;O zsV&NARy*#lm!~q`)uoSiY=Ma8~TYP2^Xat zmL{m+8%j$%y?pmL@sL zm6g*D;kCNi(J&eI!_>QXjjcn%Mr(vk|Lb2P^sr#J ze-$pbmU^he-{`M+XXgW@7tRQlrn$p(wO3yuX3(p0U| z&TnY!{fPMC*vWaG?XUR5XVZNfMqKqv>lOlagaCx@`}rg}n$$dyu(WM8W)C6!U6WK6n4B@@;;0h^ z<`2u(8B>p#ICT}Ky1PO=yl#}iVqI(i;o5I8ywZ^W6ByCs|Pp7#Bm_r{vsF0&;z%CPDt2|`8y(BYCWl`wJ zoAnv#qa53|Hemw=A93#lYitwvw;D_{6m71WoSJ5xzuG6L#uAp&%>G!8UA^Cg%WOP4 zL=*kHZb#Y;Yw~(v*o?#S2v)@ogIOG$H-4=)P{{CiNh{-7~+ha-|G{sf0aJ&N8e$hpvp_ z={b^0!{4G$E*t4&*|K#nDHJB@s%wKUOxXIoE{Z~mLaZEd(ugTN9G>&07lw-G2)?3^ zP%$`fBFlX*>b>}45z>Nvd#54mqS`)25#<@@ZJ~L9@3(VSz^#JbD==J*79W6VktD$@ z>w|%o3uDmTF2s0`lVXt?42m|^pV2NgRX#ZKu_l+=q&oI4bXxQ3vFJKfxyo%aYWF!| zE#EEebD!1-Qrz{$PafaRwt1IC7R4<0gtK_uJC(#SZKclSlrGR@BT4sfJ9v{Mf+SXy z`_jf*_}ZAAzb!NLv40BCYD}CK7$R^pVYXe{jv|5ye-l42Ecnih;L3<_w|)2j3y@vJ zfklVwHs8mbm-%YcZ1?jRcb!$3f}5KIfE>IEEWcHuzt6vy@bof>(6Ei377$sCqo;OV zsU4m9kSm-YB2>qvEjVY^ks)jGA}8Xx?4J$?uH&6$s(z+T!fCIDE;M>}F6u|bej23a zCP)IUb+~(IMp*30bl#J)$u4cbHEd8XUVl^v#d@K}O;n4{m!w2*3wY#}Uxg5+j3MAS zVy3pt&=)9|u7DDqlc^x*MY+#eDdQXYxp!%(_Pd4T&-|KJP>EySuCSnsujmT^g+ETv2Ij z=Os&H-SAsc+2ERm^D^G?Y(-6iQJ%=NvYk(Cc|CJVJJkG%8|olWoZt28*cBe2@jT^i zV)?{#-VYxdB+}X9&IVH(Cn&1ieq`kRnVM^~)RoEm85>K#_FOCo;^IUAPj5)7OT zA?fw$a=rY;TG@(AEK12Pb2`_>bL3Kl8b&kP=ripPlqf+k_50!O;Z?^9g+0QW;u=!px##NeTh#kNS&?>$di!hN zK$%$w>3p6-o8e&$QNKqPB`UpjL0+|9ZSve9!{3J+Q~Jc}gt@e#z4MmCZeH0d<oNb(! z&acbJgTm(z!cDquO5#aP2!jkydJ_gpy7XHn*LM<4!dKLWwhye@=5xl9R^9~}KHBSf z>kbGb<9=clq|&|UmNIQfW5X>{vx-aTtw_@@X*zcHfLZ*LH?n_=pBAo z@J`xmT+~k$vNFNLMK=4_1U{xKOSRxvE*H<8_8PAp{apWVv1Pj(`FvY{z6Owg zEFf-TYc%mihA{@q`*lUo%H@s_v;GSWMWeSp^H+#Ee>BlwKs2ujfsw~hbq5W!E;Xh2 z6@<`MXgMQCmXi%RVAr4UbKy<$t`?Aw{i2YG5U*6BLXwOp0gc&Sm4SP0t58E>6LD>m z%cPbS#ApG3)7rAr*B;ds3lpNu$WToxMj*uA zPyYoFrrThoC83I&dUn^(0bO02kXT6Fvo-Y>&4eO$!%3L{ad}xWEd+1PWJLvyX0tN3 zd15nT$`epF0<+YQMaDjx|48eskk1xVw>1K-3-+U>3p{X;xK;~<*lSm!)awBw=c?J- z7GS#5S}oU#tbg_*`3Vopj7@=bl_Hg`buatHkqM*Z@+nCDv+JBdob#o#+GW41HT{TR zhRYxTOrH)HvnECwAc!S5xN_{@fv;J_(y$lW{nfhkc*QMaA?X5*P^A3fcHr9c^C0Fm2{cxH9j@qV=pU zr!D7-6_fj+az2{^0F@~}ma@Ie@YrI>S-)TNB5KKT_Hog;ftlnuR`7c>o8^gN&Z5qA(3n=*uNDNAD`-iFwEK$t#{Y5fh zV^}6#hM-=2J`$+vHLH<3Mpp;tsM4Y?ri1Ng7Mi>2rJl6##;uJBvgX&K!2~%*AXA0y zf>|I$lvyr+%;p(~Kh^)-Y579pu85(ysOG{0vB+dATXC>l@KCHZdBj%l9DSy#BCYu3 z?(Ob(rR3~sZr8}`aMEbn}TzWIB zLKph;Z8E;3_&GlMMC&>iEuti3m2oIxm|Z5h1*?4u=L-JLf~9>!eQ<>roqJGF#D~9_ z=FF09|0nYrxOrCj1I7ZYr$x3On+^s#-nbb|Hh%4gPVACrHhEDShg}ep10ih!t(Vbb z;?@R@`ADMtm8djS@49~QPqs0P;mN^tAg8(3A4P}xgDzm_frUAY{KEq~PR93rz3^o9ZmhxeKGntHH5nf${Ynw8dj72J+vRPo-&VeDJG(oyIr}8UTT2OI)74rSwRX;O!*69GpQBVb|011;lobYvKrOD`GMf1d@6XZYvKEfy&Wm z&hxgkjw;8yRIx|%_|V6|WpbE!WnbOT7h*-kli!@xE-jO1ya{K7!F5dt*1&Misobh$ z@|CJUvE`)qgd-N&wvAQLN*j^A3OB(zqaqhTEGG!Ozw7^T^ThR);oWLjV zr*4we-ZUatu<-MRrBs@p?4B0|84E7SmfA?yj-TVpEsyDM{U0k{%xjubg`Q^fgDX|X zO>8|57Cq@4I`xUep2%=f2?9?QSZWRidjYH2_x@QID^K0D4TIBE_17@g2J^VG3|DMh zrw8ANExzXEDu?_T_jeOn#JI-|7Dr}m+MCXs-OgMId&dp)v+naMzTmFKPcn__sAv^8 zyfB@6yP4Cv-(#-Nzq@ynZ%a-ofgwNk1XN)hqQUCJ1yWw-?B*TqIy$XtM?r&j56zm$ z0rYEvz7T}+N;k!kA$H;LhPD)dhP&6Mle3Bzq;k{TpZoO}8AMu48_xCix04*L5g$(M zn(*RH2#hVe6sNc;*VpWU-wwA6D^KyABa0w+wIVPNB>2YaUyw@Vh~Aq)UNnbOPYNrb z_B+xSGwph=`GYq7+7!5P%n`9{ic@;qef+MDH7o1;Zcs&~Hsp$${77d3>T+`tmR;qG62t(&VcOnpBWS_bu zBV?N!OY5Hbov0Ze^63L5%$|6f(Ks!0HSOi~ zxWlAjzxm>v;t%)Q>Tv}eJ7OKvB)Xn*V7$?I)4mj&w8X{S!81LprNGqtd9W?_R+`m~ z^xUa;Oe|cZSplr|(D$!0jW5O7qung=j2BhuZ?;?S?V1+&Z!$#v5 zwBR}2q1~DLSD8=UduC6cck2krr8@~I3-AwXUx;d?!Vd?0S>H>uOqo7%8AW4HMcwEI z#^~ht-I)Eq4brC4^-yC_79E%JiLYL}-4|7J?l1<<^jkNHtlXEoBo&3n%+riof#`@;lySqN7t z7vBFnNE*FfUO!&ldy%jo>7RHxoBP@C!G5tT@_!iyYn;>%V0{Y*fQN^Je}njs?qP5M z000hvL(L_jX8P78B=M5!d(V}49jD3Emb2==TZ6&9hfQTOvh<|z2!yQ>Q2aH&>*r&} zS-R|+LGrH+ry6#lZ=zNiOe$F!5r+^>&}9brxOYN?89!wjn_tdyfj9mZ;nxuBnOp9s4yxnoT% z=gq&-%)Pg=3r9Eh9{)vx`pai>e5W1RI}GJoH#*xH z%$O9v^w0eleiLJ;@;?0#G86DJw1ZG?ZmyeLPJMJa@y&j_{qZi72;bo=OLtK(K)*vg zL^4=!?bcU5t=8<3+zd|vo+8yHf4b#<5N4q~|eJ4sw zb=I9@oLDu%?c>-ImquLOHtg6LxIa8BmQgG}>GIDzY=wy;AHKgBnfO$x=O(d^$7En2 zS$O^B^$^@RE;+Q)^Fo}3q-C;9>fx)|9Ic`{+odHe6gpm6P|-*{Eb$@ndW~$VI)RFy zxBp}_Gu4rOO8*Z1K>fLqAYC)OhBZD2gT}h4ezr9%hVS;3c<;bBH8bGyL3& zGgr@k)c|e6=g=@|RH2-sZ*uSoJgM$ABYZ$cZ46f*JE3C~d%n9-o8ATWukGNoh#-iP z92$ObYt?M%-d?=!cOq>1hDj0RRG4Hy%Q-b&p+SrgR&P#31H_IaJ$Itt1Xk>a`3U3u zq*LJGQ3O{iVC>;o5o27oWm96t)T1{$&+s9lhvQu%gkLs7#S z%E37i876&oK@?uGIAY(=ph7XRwe2;z>?bK$;h4perNGD;rjYp`y7#R=L&~M+@`g0W z=Yxgi_1vCIgUZgmg6-|RS*mRUuj1fCL!2~p>v=!KW>yavI}gd{`liMgZ2O9{|6&lF znQfTYZL>z}n$4<++Mi7O*|>U-ZZd$ffY#m@qwVI;k&aL8<2R;; zfmf`TeXe>C4wuBt%XJoA7zKPlN8~3d~3#zHz1}xy5_?bIVv4f9kzTad14hD5?-Q$uxPiuD-6jh5O>I~ z62+$U8N96jokKMAGY}KOH|{y|xSal^;IiFb zB-;5h-O2d=&9@&x!d%pd44S9`BjSwhiwL&YG)xeay5-X$EKd~W(m1~a!h<@W=J_#x zw){VG4!Ur8r^FL(`#LtJ1fS}f%os9R3gDD5i2yu3H_eO~DSYCwKJw3M_G(H+&Mt!N zmM4t0R}PSGHC<-Q^#P5UXBpDKf;9fXUy`4SQzs(k2erF6wY8tJ2c)*CWetBJh^hBP z<5T3+u2354r z_LgcV?0(ay3yH~spGl{Z!0vE)SJjf;%o|1HRqD&v)veORLM}@<|BbtM46^KL_e6Ku z?6T2iTU}O{xy!a~+v+mAY}>ZkW!rXlRnPvvXWlvI-1%_h#*O(hktK*1+_94n zeotw;iXiQzwdoV<^hn~5lH=6iEeBhDf$zUM!MLsNT&^3jJ|iB{(4OPnGZdp?Lbl%2 z-hFW{P7lvE08~;JeL@u5DD0=xUxjFgoa*j^zOUbdNpq4 z;ZX?1uQ%wbqcPuR`uMSPKhc~RL!chuj%9Awt7vfU0=!Tj!;!x-c&}6|lJp;pTy1o^ z9YrhT_BtI+j&65@e4e>oB~ir_u^UWpbv#*ZbsDA6sn=rAij6mzPX6RJ_zV)vi$5oS zKmF_wER8=qc-QzW5iE~CHGju_Hotsz{0k5joSS`Q`#}5;>WSq;)?bBqY4l%&Hu1vf zWBtcBe+A;j(Z{?0Nj%+sxcKW5uSh=4g9sq;FUcpR4@iGu;yKAjwEsr@;X)?hcG!D3 znM`BUX?HTc)p%uE80`l|`b)3$KGhwYjphW)#T!BFY%9!XX{~+P9TPhcegNo?% z7W<{#^rjP%w4niWO8NgWyRivFkz=rb{###@GjN1`#!}?qm zcb#a`K8ov={$PrlEgLN! zmw!bc`+j$V9)YUKF98(@-U>TZS4q#Bzv(|3{MH0bavKyj{v*NUUkMhuEeadtkCP2u z&@EbfzZK&BsAhY=9PC6s+zh?F?ECz_6Yzb_75Jl&`>%|XoyfbJp;z~PldxY3*B-bg zZlJoKBY%tit5S>DMaGj`c$`5GEwdSvHW^i`s_Z>`w`BJrLQibppfOT|ZL29d%(XLm z3`!${xP2iRI;$x%%7Ql0R??#UBcD8a#{uQTv6Duao3ZlHUab`f&460}LoW zus`YEV~)8Thzx;$NTtnEZV=oRQeid)XLvK*$#;zd1RAwKiGQ5Zu=_#(*KZRji-|jo zD+Fs__5IfkQUp9*e?3wV+`>(toJ$0h*N9ShNej&RaB@P??QgD^-N&yv3D6rFK9|LT z3yV*SVwwiX6}#Cqs^DJmGBIG#KMu}*&%WS#ywKyAMqI!hQe(ADz+)H~q*^hBBN^89 zY4;3GY#2Cn*B6^2mT1jeI{xa@&zCn)rl1_{2ZzF}L}#JfE?cS6K&a4!Ue0X|fMP(Z zo$Jw4IexmuPtxLX%`+W_O&!rNzFtDVLWm(Z{eVFozV^amxRkD8-3w*o!n$o;I1HeQ zcDhLM8eNBXe)5<6{Y^>w#1Q^MB&MtJpd+2mNB32Il#T(2RDC$?OncPdaAq;sO#+iu zQeO)2AqpVK9HscT8j+W{qWPY=9$Hq|j(U?sc!#0p1`rE5-2TPO(*h0#X zAuKSXn8Nj!G)W&MR_HV7=$G$8Bz@Z~%V2Vx^KVl@beG+zl^z0ag(Q_@IAR5r!^6C#SfWa87`FaYq=a1S3YI@SioZ9rA0KzMp!x*aurZO zoD!$~$b|WoA6JfW^Gme$CSKF!S`87Ft<}unIkXSoeqw zaeRB)pa40h~W5={NaDC~v% zH^+%Q&0NKSpWWI8Roa2zYk^rh^?Cj}@vaVEp)N)Cl3<*v`-0fP^+basCEWf31}Gbs zO;PSSeW7AQb?_dxsR80PG^35Lxeb}6R+unzW$2E$X{F)O;7 z69>mv8@gtmr_da55}_6-B_i`=)Qz%^#{g9ayKut)=%=AR3E*YSRv2hUrCHL!S=buS z@HGp$@I|G7U+S2|uiSd|5+r*8Zh9r5b*~znDO-r|69^?`wkLYTX17*YAW&IT=5^Sa znKFckKJlszH|qsz+O(B8FeOE8zW$xFGdL)(uc7`;xZ=S+16W=%4)Em2iv%-KV4DsT zh@NZWfY6#|rPUMoo+tFgnmMf@N8qr$aXqoI!RmOTVzJZq zxHkWM;tnuzCArqUJ1>Rkm4OLd4eFMUBeTuxJjKJnXYBN?d9$`y0@B5G3;sFD!S4@f zAEXLH<6an$g@R);1<8+QP{SqyE(|x|vhex&>fTEnOJeiHZt702>M6Bj-U$k55Iyv` z8ctxcIBl-ZmuG3|-ci~Yfd{&(J(gqKvb+)`Uznr>v3av&xgNs_sPxAd5hJIojG)rz8 z_>4pG;Em^4A)qi?JP<{?gL+%;STD@*yWiR;H;8NVvfI0BzESw;n(GOAn)pzNA3hUc z(%%Ek)q;t$Pk#Z8uQ$QF!|!%jg+ZbDApaRhgW-E5ZSeNsezn$VHnrw-f-;xk_lZW( z&T2B9#d(#*X}8tsb`=DE#^?;7tJftWK2#lv#bGws3&sIKxPCdEFO<*WWw%Vx2~HI! z>h13>_7SiL$&vzsUYQpC1i2PJhx+Y8$&Z}(^)v36re4#IePkX4DBg0>|I9}EnGf}{ z{Xa4SelWv)kOWAK=I#a!zvH~pzxL!py{Ugi6?!BOlQGJ8`d5eX7z@Csu8bvb8T9eC~1u8^auUc2dT}$%-2e3C(Ueoh3tX6JK=3K z4u{oFS#j)-k*&*#0IP|#sY!dGaQC2UO}T!8Ih@t1IPA|T6%n@~)mI;vP<_oPWNtZ% zT>HW(r^~s{o+1MBYzm_U;T37 zaqCo5GEK)<0xm6tTo{bQLK;h`D}_T_`6SEuZzcm#Z+6 z=T&r_6ptPVuv7{QkFul&m15H=8CA5WN6~xqMcYqd(@k1993V`3FhXs%vDMKlv2(?4qYD@~8msNMV4DFg}rQEbzbTf|g=0>f!K?to3n@nj4+M+@C zqpWkGrL5Qw=1OD~Ut}RlVz91}_X2A=bX&S43DjbunOceJmETzNv>F(knIT5#Y#5)W zRh#;?fF;WQg?S{=)mSam%y--DgtcY3$4ySN4SF{PrC~jG!KGh>5Ah6AQE)mO+q=KQ zQ&@1D%cFP73_QkUGo%!xg@3oe$DLlsf9B{KSgstljCM5yC_Jyx zGd((MFH6wXHms$ea-+*uPE+?_N;Wb%lrawd#lV*2KOl~I`>!Lw?UvxBpzWT9{x_}eZ2{5hOS~>Bw2FFs3ChUugg6aX(Z$vVJYH~@O%W*%jcUc zG`FI5(ue-5lw_m@)~^AY;{d2MJphf}`GL_>8{%!CW3_SpV<<%7%&Qt;N%aQn2{ZUJ~662;NFW0 zGSOgtFf5^^dUaBBZE0EyQ)4xkr@3ccJHby(;WI9;(Dv-nxWH}C$T=O)r;)bfFLEwO z59%CCL&PgvrSL#?&x)2?XD%;WT+v|HtkN8ZaC znw^D_jjm_pua!DhVxXGxPL@?l18}-zQaYRo4_BG%^FIqXg%e2>g!~Fx8VIi^Qh2O$|Ezwf^GCiICxJB>!Q;NBXs{#@D~tDuaHIU*8Kgj z-C94xYL{^|YnutCUsh4qvR0s>+(O4sCbfqd#7JD{hcsuBry*(*<8KV0(-X6+%)T&K z6z*uHQA>!wR1WI)KO}Jv49(Y_FQFMA(&+RVLUE+)domeK?obqwp;KqYUEnnJCTjqC z_L}tq^cAYEtl{Tk3`@YY#o7K+-Tr3l?flqSiIW3MiNq$rK zgT5_}vefBp>R;+K+V7)J9CLPC#EV@)#cAF*Ckwyt4DiYS&UeVDI~thPI;L;=W+4M* z`tUOhQ&*`9b4YhxSlv>Z@;*g#^huH}Zzxl#SMxcfSS0C6B^r!{E4gAuu)_Yc#M5Tz zH?DP`tlThdWBhqWs`O59wcjZgUa&4e1?x2QkozM^%|h%qBY{Tg&p?xEY(}D{3HR|s zq7t$?)FPJ&W|bv!@Nh<{XB<vz4t9PL)(w4x3jl#=E9Neg?^3UeF$!98lF?0O@iv|%5TGJTT!Rh z@yJOU6*VKhF07FvD+Vg?kU{lY+^R&>Ti)LyeL9dw$F-kB`ukuZG>sTEY0!J3GC8w; zI{np+L;{JdG4oPyhVUh*}G*=mhQ zv>Z=wI)iT?^|Y9fEyYQ>A);Tx?6+5*t4?t;tWr6lH%h?`9lW7c>y%BUfXKN)<&5az zC`I%YvK3EO!}pdR3Xy2ru1L+#wTR=ok50Ux@)#yu zNdl|wsxL!w&LV5QEps(6ym6Y=MG0gO&sa?v*rZq-f@agZ1F`U&ER}Ms zkji0fVVQnFu12SH<`vqw9k9>_FjoDt?K(GqJ0-`qGw{qzof7^kA8wpKbU6lSmcGfg zoYk@|IHmmyfbn<+`kjZOkjA2@Tw*GIu~*cXSR0y)o5nkQU?V_A6m-FFPx5qJfal0o z1%YAPOVHZug_{DchC4%IqQ2$>+14l-o!!!Dj=VWe;8QoY`ifnDwyx{5s1iqRL_EFX ztpSsF%t+!njw39!NA7g`=L9Hf!X%?Y(2}pbkXu9mFs`5oHpms&0*J;FN zobuD~BXP`}F=IKHg-hWPvJGf1unVrc)XSIanLU$bb`1`ndKRs~8q0x}1>q6QQ6RiB zD7O?t)37ulJ+BE>r5`H!)+9#A;Y6W*wKN*ffyx1lE*-Yr;!{I7uv$u$RO!+)jBvKU zqHT7lCYO~EO}J!{!&^N)D6@b~hFz{H5lj`!X_t=7DqaL$YTIo$FhZ}X9k@ias1hp8 zmz;WrJf#tsfRekepADf1RoH>ZOcpzj`3d+XP8Wk9&dz-gqJHfzuMavb2g2}5W^M$y{s^)CCs}^GalB!Yp8tL%E<8dR5^+?z9E^@s~ z=XpdTMf+F~F>Rf;cKi^vrSC{>h)0Z)FN%?*9gcilV1I_8UV0+Uk0 zBfsIFFZ&r!DFp+qi>+voWHuQfP?Lvj5!8F!_RguwBO4gejxRbS>RzLp0pgtTiuA`F z6D{>8K^@1CX-T9&tYwbyF1H&EIb{zenI&N=daNOeQB$*&y6@Fqtnz94>IBShu& z?$9@}>I?f{f?zjv@`Gl|Zr<8 zPMmQ`GA!IXt%|<`tj@+;vjYE2gTpoApNs$)>>SHv?5;M^fBN4ME}_YpuaLjeb5OQgXlmIz0gCc}NxQ4VQAmZU zc?(GaV{4$jyox~h7vQcs@RN-|gU^yNqV8k}vQiryNBR8a5!sU=*tF(z2zH}fS5oJp zeErk=yLkGWMIXd8Hjyht9%G-j-keT^5S5ok#v}URqPDIfqpQgL5v|Uzic$S5u^zg| zo%j)#R|NfURFZ*CFlD~`kZo(aYH3A|8%VK*a~uN1$!IQOmM}IX))Vu0@#ivzBpppt zV>U}^eVU_xf`XvY%1Y%18e-*k=sU%6(WyAyzat;2(wBp0GExMYVj|J|l?s&S3|%D} z`L>%chJXI%HAjcBHu!qg*CG})Riu+Sac#aXywJ5P80np|TPoK!J-u!hjRX*Ah}{JitTaM%kUygYzQ>qsHTNm z43rUhe2EC09ZXSS3-ukmOj&2RfB+7#%+lo&hMI1rOPHsBr^)<^L!98>`o#~?hZrRc zwB~|?cVm4nWZwJ**rI>^{)0>`^8Zkja3tc;huPpzrE>R&OdWI}#4jC^5jwPSb(iID zhJlvp;zm6N-i`;X+urk=c0sHiX=ew za~qc@oU2iWFV0gokl4sQlGV--r8hf~r$UK}+ELt|G?lNk(gY1pHS`bM-jK~UVJ%=Y zSIRJqVAeK}*$p}LPt_e~Y+^{7U}xCnS}IK{tCr2G9T$2A&KC+JWCNHO7goP#$O)Of zN_}WRxaUmBS8kS9NaLMXhIg-6wQxF4@pxnLXJiZRIn8ef=M_LRw7cobgxMLJ&_k+j z=tys@0q@e(;xq9Z!pxB9-%fo^3$sLe4xz4mi}5k{7$AS;oE~ejp2(kvR&oO&nd&77 zMobRP9jaxK?^K2d+lQvlf9M4`nL9-<1rOt~ni|K9m|k+^QA(fnKI$&+gCw6p(yz4( zjYl0mVr)={rZzqE?|vZ1MI(?)_haDoQqQ3yA`P6$tAs!25XvsDh`MH)F}$fR^%QN= zy?NuwFDae5U?+dt&2G~_v2h%Qe+PIE;5fD+q5Z0C_iGluR-?K3 zR?2d2l}2MRIMT5wMQs~K&oxB3-tvYzuSU08j}jAo%u%`HaFW}w>_#eP5 zhK!^+UcKDyzX0(q0jAnlf+`=TGkug)ke-gi7nj$b-iHTAA1p!f*FP%?zXP&Lhe6DY z+>~46JwF6uXdm_el?Id6f7gqji@Er@OL=zZ>)&VkuHJ9->Vy5iO5~)01SfZIjJYph zTnf<_e*t`SyFCc|y^`Y~E!H-;4j+B}+YFFs#ZSAm{~3Hc-B4{@zNl1LrJQCd`CQtS zf;TZo>i@=s@caNy+GrjL7^B!h;JoXf&PIE0pPk*r;amNZlaa?)Ffp{fLNjOR_tjoBVS$6ab1=o-dy+KlRLgpJa<%e&ac`=SSJ9m(GwtzVPTR}|TL zeV(aZLx82E7kqd`I`FsfD>3jTrtiuw7Ui39$_fJ{e9wDtz5p;)?d2fYm7LV(k1Fkz zD-Eum`k>m**bQ;iARS|#R`@6sXz2!RVF>pqx|FfphTWp_eg~*pTn}ci7NmCA&&Nt4 zS6o)D*e8z~P%siwQ+p1|S7N~#1qF9W+IKn_Rq}Bx!;aXN3SkBVv>K?y7PF0rGxuts zvtiJ1BKpEi*nqH8eYzryXogmH_t_*0$#=rbTaZxTs#p(--1R1Kp>CI;Ru@Gtb~ ztdDiw#S8@X8Eh01bW@bf)z{b~>m@WVOjeB76SBDRNHWB*4h9)-dHMA_T`AFlm*+Q> zNG2B>+~ET{pETXuBP->!?ZJ+}I?M@h1$x{ELzUx|J*TNkiGx+9wh=~!mlv+!eIupwye*LM$1CHGLKu%CRvV&+EHaV_LM1~)Amm{XBHiX{XncJ4aHPT&_= zXLYM5u8eu9rBTvK(24zUD- z$==s;Tk4&g*xiVpuk9(QL1IJ*Avj%LM#X&-M(Y`e=`?}JUz9{^ryimlXz@nWjZ>O5 zMy%V7#Djwu9^fJ79W{StPI zJ=N-kWKJ0hiy4mX;NS@VF84(XDzUuV3@I1UxKj86!m`6)Agksxp<|I&z8H_Mu~Z1J zL#S5O-xwbLy-ulny3{-oz9CM5uUjmd$=S0)Ic-w;0c+A$`gZ|yfMlX!D!Zuvmu6%M z5ds!xU@~pLwcLrK%`+HaLpWq2U2EW)b06`@1q1Rv$Zf_~337aM2ovH4?xJs7D>cou zDqa;6JAVIH6CD3s4 z91V7IuNq+7kz~$rC=mdkcaBA1DI6rZFuLc4L8Dl=b#my;3J%gXQBR{_+=$Tz%Uh$} zyS^)n(O6^H21Zx3dl<-7T<;h?(PW5jHOF-&X;!TbEY(71DB)ZEj7#D|^cr7Q!P8mQ zYmIw}G750q&l`1W);;E(1TR{~I#aOx`LP5iDibz0A#$3ZsT^0+Xkf58U(s!dWwrvV zp2gUqYKokS4s38-BV6t=#vDV~yssvDvDl(Pf%Y9KDwA z)=NMZ3UY{z7cI&EdeG&JMNIa@a395zO0e@y2Mu?V50>^fRkD1|Mk0%0^~f(Rn{?kP zPu%0SBgNl|0i21j%@8psC3`_>)(r!;S_T1aXZ4TjUklGCp^9`nPAo%eV;30sa#Hqr z)v|;0O&#OR%>Lk8)k}m_r8C&9Dkw@^tA!F_Q^xWHg5f5M(BZSWWeq1qJOo7pc1r~w z91iKKUK$x)JcV#vv1eJIvgB>@1B!7=w@snBNRk|s^cPeC40Xo6nh{y(>hs?G$7b9z z6X1Iudd&=~=*>3gwwtZ6VFAEg;|n}EPu*K;%rMWi&XnMejznzIE?ZP>%(49?S z=Rqs=H?!*LaI_9x1Ec5n^?0otckN=2ZduL@MHe9?-41sK3}l+R*e1>58~ibYGNoq_ z6cjsOnn$I51*f&t53o6EPxq`6ega+J2xx5+vll)>isX76cKl=KhO~eGX6AUI#05rx%O$g3qr6x3@_Y%k8E2jgZ62Yy#3FmKQ`ywkq4l!) z#|FfiV4xLfC)p!NH~(lQay}DMR~CwuxPF-##1)^=UQXxnhLCm(5@^RA6|Vq*X@t&x zb@0^^LurPSgad{yj~NSAN)5X9#ohxZ>m^v#wbXE^bvk^t4i%endn_fPSo+CWyNBr1 zW|LeC^yLUb*t*{mJm?X0Qx?Y^>D6O{wzx8rrTzkhIGo`PS#%=}Q;ncA!I!{tHfW_; z8JKhdwMK{yun=h$Y!x`2ZbX=~en|=>e*v6GNx}h4Bm^=8EwC>Z`&OO4daeh{@RXR7 z0pI6_3A)vcarU~7j#;aj8XxtyZEaMQF=johBIyJ!q9kloF}rI~%~e_4F2B+J{2*Hy zpq3DJtLe(HeX_{JT1mEkk_e|}(iHwOd~YkB9vP$7%UYI`%;h;U$B6u-PRGn-3OE6si`NcsUdO(bOB3A))lYJT>W8uMjy3n*&WIi94TGms^gn} zfq~`FTNNySIhT^pi&FDN@d!C%SPh=j4t)>r5ol0owqF{s`mgnp7*$6ep(5RNwZmee z7#Bx7l8erA4$9DbAX7{(;?SI|1P`BwFlK6t6QP4L`v4Uo!6C?P$1W>17{V=x^8L*? zBcX~6D#tXiyDjClSsNRE#RQr{C4>*tw>^TLr}w)UI?5H&mr{fWalA-ji)OWg%-XaX z5YPjJzo3cJippW8l-p9@kxH#tCDhn8)M)VxJRt9|U-b&`Zmg{~XYJcceI*XIiS1hf z>8fbm9TUQ)ZMbiX*AWWroQjvjqO+}7DiUUVqQ-KMy@RV&0!QI?|25y;v+{BVKhdSN zuBhl9yHxRvRYtcoIZ_GU9J(TyBe6HN<)_i59b@eXr(ojV^eSi&_Xt$!SG#cmYp$mp(tHq0ES84D6*}jkRlgy2mFH9P*pE zzL0I@VO!yS+p|GE%%;HJ!q{+O<$B4m@o>5Tb8%hjunEx-zCY+1IqQKsr3rUp`2K!O zjm9rzr_^oT`#AZBWLS*Fh=s1B#T04Edqt+ppG`kpV#bcskYQ;4%(4}=+A zNnG&94usATt~5fow}Z_5N`pX*% zXS!+%q&dV^!QV#54!vm-XR`($KN@1UmJT?AHyulhKQm@KYfb{YMf9W)SgdRASsP(X zPtzfcY<=U*s~cY@z;&uy~08V_Wnn-g_T3Q(I1i z*e4(avW_8w?^q0uQ#*_APp2-E{#XnMi-yO<$z#BzqyJ%YpFJT>q>a=Xc$~KElq1Fi z?S3P&kL$$lJ|iV78wXons-;wR&%P6|aPJ0m9)eQe!o`G=NQt*tzGZRf#85e|`wK9z zxZwm(19Chqodx0n^>l{Ote^1u=L2=fH!%27>**O5vPVQ32hl^}1Mxh8!)pwRn+jb8 zsICG_%GJ0to|y{(W}NfJ7%SLksbA44)0Os3z$OfJ;BiJGrv+T?;efrZ-Jn2XVY69Sca=D-C_e^2Berk8IsTmXrFsiM;pK z%D&fCL8p~2U=*tlN3prBzsB>QOY6AzL)pPVw|ja`2w0}^KDei$iMN)VfBbBu9;F~kA~!oMO)+*RJ4|2E1+i#_#aI{PtA z>>i*qndkkSf!tz}-Nbv$Y)Skplz~gWhN|rOmMwYelGH*2Ia_gh=m;*b@#_c+%F8{* z1yhj(>blo>issHCnc6_VRt{NngKPa&Ko+L65i8$ z*l*mi7+VmW(;Yo@L`pa~%8d|eUKFqRj9ASaZl{_ab83c?&&+bjW_yXS>4VCT5P{R2 zHL5s@Osq}lFPq5E&k_t?61Ui89FDpnUwk!uzX&m_x&Mkz`_?GYLOQA)HS=3P7!!Up zyNqH4vA;)3f6)=1^eWYi2wa=PW{r2*P-MOU2Djx2^?tj3sBRniXxC^7{Uv~HnR6;j ze$P!if_ByxNjPf{S}QyU?56#DD5R?9!tCz)2f}_2G5P!>^Vi~_*3>N{07Hwow>fh^ z9Ce_%?$D|yjrPI`Jd~MB=IEjPRs@u957e10B>c(BS&*l2$I92ky^*9IMW2( zaDRR36=*%EGqpHZhdNGk5)XC86$T7*G{#HX+kN#!Bz#orWi!U<%ZF>EzA@zqyC@_#pM7)2zaw0Ia5`&6jBSb4R>fQfWn! z@mTYYjR;-Vj$-R0_w!b>Cbc0RZwVP~Gx1pl*G7g#6i<-Y!&_ccoM1*U#S%GddP_BP z=p*M9q=Qp2_>)k$X#!3CUkRTahl+Z4=gY{OL$%%}x+31Av=U&}0P%1e_w zpLN4Mww?o;K8)zSF_)c>f}g`-oScK7K6DTv==&Ws=vI^iwAB^~0)WTGm#0K96G!U@ zCOuYfmxP8}Q!>aJD6)+cyh`uXW>uM>BBk)yPyR;cr)muL_6jss8jb9jHTOuWs04=ef#;JryO+#YIwuw!t~6EfF;eY zi*I_Rdh3ohR0s@9k+yTL>x4CDb_btx+Rmum^(({~5f#j`VLfXPnm+;9Wxt`&iUTME zY%T=fn3HgzDyBPzcg>zG@{Q`@^2t2*uWxQFwq>9hh-6GbIgF z8DX7gOU933F&MzDgQC9f;hz(0@;SKStwupDFo`3C`+gyoDU-elmHlI31&nW8%EMeb zgW>PS*UC|r;ht;dXCUA&(M{D!8rS=ZVnu{?$Fj?SRM~TscH3ipMKYx;b(iM(Sk+@E zAQ*E`bHjcpb1xh--hiR50ex!mD0vb>MMv@?{8%bNao0_gCACU|^;jGAn01rHXgJ3a zjfBXwcDi0sH@M7jV#)95W5sH?G)epeN4wUqHhq#e8W~`~rT)&_*Fkwy2nF`&bFVMu0|t9SVI@FVcMJqFh|v zdF^nZ#moDm?UKP60*kCvamPg|YeR(OC+Yzo=mvVh3)}^O(rbtL!THbgCeQ=p-YNY#X;r{ogu?~ zfmKxD{Im=liO%V-3rEor4K=A3(&W&2QTAd&T{Fkx38YGO)KAh1omNU2|8}oXUJU&D z$>{qCsMDx?G{(0xnw)CtDb3!d?{%qlP-@pzgC%CPce@Oy9foH6^FSReHr|mKstvbwc(~SdK)+_q?<&$ zY)GH3`Rwg*U~Pof>BAuY{ujLhNFqmA6O|~9GDY`{H8Y+KS5LEcv@?JmK%^~yD~zao z;EN|Wu;W@<2l>tVpFu6C$Oq8Epud)0WX3kCiY~3HL5@jzVkr;6D#b1dSelq0&&mT{ zgL_2}byk%`%a^Mn*>Mw{N~%vxWgQ^|WVtsr2-hqqsX zC%xXiOTC$&kk>p{Fl(6_0l87d;|21OQ7t}AWNQl5IgztB*}Pc~B+1}1)QgTCZpJwt zmt|9YSgJzP!A zQK#6;4ER4AZZkH+KuLMocuZQXJwMv9uBT)z@wHg)zW~*GTZH}Z9~l-L)bLLsEw2}7 z^m~?-;wKZlI5%XLqwj^Q#etK;=SxU?->x$|+?BqkD}m8>s1>BaNey&;%&E$wk}3L& zDbD4gZGn5olx2raSL4L2brqIcNh&`8Qv_T?RT^>13BpaqVY5}fg?kP($vRbIu7f7x zCOjhB4itU6A`U1nr#r=M~)`+YDV>x*GUTU(ZCH+Tv zqvZ<|ibsmpVLO9Db~H?@(G~+et>JN+6WBNZNEI98CJ7pQ@(;?+vGI*rF5j_X{yF_rq$`=W3!z)Mb%%D_ zUqBPq<`9#O>*%o&ZOj+a+7_Q>^8l!Gfqt=`AF_nfTh7s$RV}8MY|E%t%w}no*P>J1 zehmUg0iS=e=&X>g>xZmiFWYP6Sy-mfJUHp!lTTCx(lkX{EEf5VY9iOMq*Zi}EB2(C zUB~Cbn+kM-J?kEA+lnh~C4boAmuxE6l3s~A2*DLn+@7i|n@b#BBwcGp!AY_b-U@36 z_Sfj?)t3XH*cr7~s^BY=G3&miGT(fWTK!OR-!kbopw9Q$+cq?Q6QZ0VOjHM2Y5oP& zi4$l7?LpSm(;2}vyzJ~xX;=5uw_4#V%X+ri+!50DKjjme_!^{uc9X}=ES?-P5F9gP z|7MaM(UTkvEmR*qhx^Dij;`>NI%D2_|D)pnT5!vi3IU8)%z`%?IVJAmZsvESYO(y; z2qUz^y0dBYk!Efm$m5>8B1{9}&2u4mBcQ#VpzB+^9iFsJQV(xK| zG?ND$-z&Dn5xHt66l6{B&)k2+DX%KWhTHS_3Pnmb>n^NFP$(N=D7k^(=4@o&LQ0nR z`xO7XWl;oS9;9ILwTj8Eh}Gi!j*;gQ=Y61deHE{QRY5v@3dCX#GbLuy0H6l~CNFC}GVAEn zj%a2zhByMe0R+YdQz*$U$w!xBOG{V9L7e5Aw%uJ-rZ(`cvPO7)`~k=;bwkN$)LVbk~CzKl~%MVBI zx+tu2!bT_`@3PC^&_*|*`$#}ByH_>bSY{BKtedD%8Dq>R%r7tNWzqzy%yE!9EVfyh z^LLA#<*axl{HnWAnIrlO*dwlWN+)lssr{vXIe9}2GkH4g^W=E>zB25W8+rQ9<54}C zZ)fP$68mBIy5w(CuBoK$cIqs(-nFTKAx|ZJ{4Ot=N)4V> z*_6syWT|cYqhsPJok30P;79j6fm=pCl{{q7m@fZ_^^o?7@X!|2q*DD2t+O;dgG?F4 z+f?bK9OBjRO8Rhz<)@)R(y5koHMAYU`XDttr0r5*-ZIv8XnW|GI4NIU4`l)WNt(6c zy*H%aMdYr*F0aab8dpSmnVwEH>gfO-e4cYluBC$lN9_ds4sWEBw~bbTmOB}p9HlDH zEGlEEs1PAGm2$#hKL(Fg4C|#d`J^0JxdnW|^hJ_xB(iSihRBj_%g!tpv;h?3Pi|v~EXfvSGt=8L$4DXZi9YN5rIr=|p|8lsK@~2I z+Q2oqjNtS+EcfATk%JIC=aJ0PxOrX$`@AD^vNh?Uir#IJEOkJtE}f$Ktk=dw97|jJ z#&71ZoYgn1hO?sJxcdWNt)jq}F|cak?J!n}p%)oK+HYxQ(b z5lg`Ouooj*V668$*0CDfIf~|Nk-u1ZhLUde+;KV)vOHK5|Myq`W6*dGaiYLqz!PrJ zlorkfUMFh1D*tSu7I^W3<-;dkK&YbCiv4Y#h&Z0qcYQ<9UbD)pohVo2bq6Fp_xi>g z$D)t?>KNYFHk~B{jA^fQFrt*qUSKb^D?ZQ)mTnkmt|PqeE*9?5479Y6#WS+z?g*`g z@MVKvwTQDd-$i|*IVV%|b$U?YxR5G;{0QOx@GFqZYpe{8PbzZ_2%a+y36zJTWPIoFoq^5ncWW~1lf;ii0>Dadm=^oD>i ze_>{nYB^(t_?qPgEhZ8d_PaK`*WP(TZ4|iY$ z*MW-@{ESb@n1PUOoM$GaQXaDKsAledp2Fnscuo{6M6M;%x)ciVHEjQgta}+4wd;E$ zj3!QI5?hrvnnSYWi-3(1CCI>Jhi^h%0J~zdwYco3jA9jFMOk79yGT=KjiXcg*78NJ zr;GXqvx#rw?J{7iU{)QQEv$A8Vv-5uEg8!Z*>x1MM)_&mDXvU%@+Q<4IlSMM*n-r_P8$cvPy^ zFQS9JM3l*6@ITy_5fFt+nNAN1sX+B9TkK>y5sR`U72Y-zD*Fajb$8;C7QJ?!2u5;% zro>pM<^(jK{EE(QjRSHmTwyl|+@u_G5^!Wav)ZP>eL`aqhh235!q^v(gp};2f*+~z zlUE3V>xOE&wzujHEx#Er1Lft?XAo3M*Oi~&(2Fg&mKUK9uA3@p#aZ?4y(Vu*oPyLV z14FD*vE0dNDM$$mG8wW=5ixFSrJKBU$bZsGtXAjj8V1mUOSvInOVltT4ZyGtbR#x+ zv;a2LlTwm#Y-r?~1dNHak~6ui6xCUGEA*od!OT4;U~Hvn!clxBZosX6G~Yhz^q5t< zCq~2gief1R&;2;(pxuNDp1LUe@v2~DaxKX@oTZo+SbeNF6S(VBqg!L(t6`&AWu4*S zizk~5vXB~1K5Uw|)4vVtdz&Wt7Jpw6xZd{M_~lXMaS;^eHl8@4aRBfTl79jDP@v=d ztA70CqlYVjQ4itm0ZPzj%5=;w?`8Om7iQ)h_2VGRw=ZtVKp4%^ZF6DpZ}z6C4>J@P zyM(;airpJm^mrv$4G(Tkf(IZdcHQGt2@2CDSx8jO;hV1t)kd z*jH*Pv1?>8IIY-7i&o}=wu;hMW#Mjy9xM{ns}h6mJ=P`xcnk+BmKA-5$%SJj@iI`? z7;PLE4y_qKEd!`iE|OY{_~MLtLR8-3B!HpPeh^lC=fiyq~lyV*2XS=(ogW4!b=e z+-K}nA{48aHE>Aya#vY)@hpjd9})r|V_E(!j@u>HSp3X!fy|(wBXyN&UUkg+*8V%~ zLksF3tr~2m(Svuvewn_iX%OD)yXAii78yN!9%DX(Q<$wSX~uw->LCxTK4ECkhSqlwEbVRS{M_&QCQ0cGhlEq*xXcsS79%^0)F$!lx;Y?CHmb8zxM~|Hld~CtKzu>V zka}6Jq~E5uO4tb&7lh^+@RU-TI~FR~@If0uURSd`Y&>z(TE*=|pIL?X80_8pTYY?^ z7bMSVo~E-$3l*^|@c8lF_4mq8RWT8Etdja{BSpg|8@sN2A$(muKkwAy?c2%vA+Z!I zg!yi_EOb_ijvp>1G8p$1B^o79iPsXlxqkH$%hIzlI(KMI$pI?Go6u!t5*~y-Q_}gNvq?K0dIr1*_X&uV5-y15LZMedbDZh>>w*nh3 zG^2Sq^JVCsZrEQCnPw(OAjj)$LQYD=B#~9mJ*VkE?f3k?w%_v8}Xw z3=WW^>b}5&0x+0`z2#@l35%}le(YwEL*$!($iwve(500o9m;HYWrOgdb{6w-b73`R z6a1*g{l6UcM&9cWy)o_kq}>U~yn=eSLgMHDmLdEa4xj)GF^A3|too1s&z_BE9`mEZ zHst^9-T(g4h~`C%m5mQ+s9OzA#&Cgg#|!Jf0JKK=g`H1?0zgfCMkHoO*7xI~zlYGy~Nj5V%lVnadA221cBUK-t!S9$exWv_3 zS~?UC<)7Z=*i4URygIkx31>}*oKldnFEJrVOAfYfw7IlIZYbaw@agZ~4m_vbZlR2@ zgbTQ31Qg#O*kdPF3U6;uv48Ivd^=A7upX{vHYO0`L|h=pI+}V(C`ZZ5_-0c7bPZXz+Jc20AiV-uM$A#Rvl_!@JOX z$=)DZh8Vj1ct2+eaB5@_Z{`Tz)kUs3m5F^OPI477i)n#!y{sNKpmVS9@dL2UGZv>O zPcK?-QM9@4`9`j5C$aavEM76tO<*xQ!u0sLBW4`CE-taBPR4ThCV%x2OW1IOfV|M% zH7cdn#Bk3f!Hg{ImH%+$%J<2^E!!B=yOF>x1vdjv+6E-}p9GB;7aij#lAg~4fzru_ z1lzV5)#yGjSelG=Q{;+NBKSC})A%~Er#}xH?&h30|1=1uxykRRLTR|Wm!?UC>z@Xt z${%#502Pc~tg24qb-b+NcY}=xlyq%?G^#wMy^}wUEP0`d9-AshrDODkbFO?6m(~BP zk^RqRhxb?ub(_@v!XW=VXBCq$Jz z|1RzSPz(wq`ymUAghl(*S@?fr{#{!1H63+RXUzqD|CpJ#teNTyWA=a3e>EO z@$|)2JO!MRX4VTBYxn;y_CF{fiyW)pQ#(AR3WMZbz(9)pU$6jaNku&oC*GmckwUwq z|LPBhGJ701i75Nyb^M!d8ACKXRzy-*>JaovJjnkp$lqe%a~l2NszVwMJO~9ZReXB?$wA?n%evi$_+J|288mLUX9|5CYF6r{@hl|!MGlqy@;|57<1yuWIaVOatl&Hb#*f7K44AS@+C1@HPDQsHec z(*IUB5vr#AhsV!NHj{&~hJ5pRbNz4NJn`ltI(eOV&q>=b2u7X1eYLUbC0d^N+VnE( zORl9ApeJ@VY5cfZn+2P*3u%N0@tqQ`?N^jVV|&pd93=;W6b90ljr!Q+>QbgAix7JX zhB8;qQA^bv??`}r{}%IL8k*!ycZKfo1m)mIVT*LN;UP{J-1-}s(2au_C{M!B&`Vt`1Hotfi?CClUBao?8k2JrBvRUbbXWblq4rOEKinaVvi?H0KN8qg7zv#0QM#K zt=g`$*!O1GV7gfp0Bo2sKx}nQV|Gi#_B$)A(@XQ^R1PetvG}KfL5mg*Z4knIzHy}T zqBQKUoYe;q$AIhK$G{*SWr@?6qEa z5>+3R4q>=cxV}-XAo3;G0u5$ zAf0M3dzqh%#ZN(FA!LK;>w$btc0q5u*Rmphsz`r9=3xBNTi}w1mdm}x=3Z6C5{>@V zBK=g@3SV&yl7GFZC_twA3f?n^1``A;C$*x`TD#e$UaKY;>-FLR;@fC3Xi=Op`qC9{ z!X;KnS~ldZ4Y92AQK71InU*-(SWU{|Lm64L@*XY7=Z7P+vI~shv&NMuo^p#mSp$NA ziVO7|>Z;7HwUP>w2*tSIBn%VX58$QWS+PBFf*vTHg&U;MRIKxZ@dSO{b@i@i6|I>A z|Il(@E3wKT7H)rbuD~qxs{H^|VckX&ZtA!bc9EY7{M6e$V?D@&_^N1Wa>EL({^ z0+fZT7-{RP{&QoxhYm-zbX;Ccy9xFEHW7qaVzJ$1PHTM0>y%Lhi&rEk`Vl&0AK1~` z-enxByHt;MEFxy3D15!NqtjkfYQ>uN z)8p7$Elw#$`=X-dSU8h)6-S%rQamcZ^+th^N$o&fg;PPXbm+ccrud`3oBLxvT=?gE zD<$Wb;~h>jH6P$$MSV0hhoHdmgB{61O5T3#3XFQ z?0m=avD#>FPUp%Dbujj7RL513Fi;M7@?^BFpj+c%Ya#}^B|J?m_joPuyg&3PFy*0j zw-~b?oLx%qo9a=<(E0^vlGWSrm@2gb#!BI9)$>c5-I9PCYMNwK$7mw>d-XIP3bpI@ zqZ#odT@GKXxwZ=do>T{q#+R;E!K^}z5?8saWwdsaaHnVysDsL+qCY5_B+ubeI0T9vGa-BGo5%c+L17`87DIJaW6=v_Q z;Lg?P^d3P#tj)LXd2saYp8U#T{@B$t*^7ZNh38s4z8AezaV^t%aufYJNvQOSTc3o) zG8{6R#(^7jC?9f=fT`)IW|pVB6+GmzM!NWs?z?R~vvgPJ{pU>DU-ET7*2wBMlu2GI z?6^Nd0?U{cegQZmWhEkl6}eY<^P{l|HhpF!2NRx*_S8PxoV|^LI+lKL-)PUct0?ql zI9LsRR@&%LyQ`S~$#DJdUx+Ixfxgip_xmdVhN}wbXW$zh26q*6?F`qaq0e3$9eQ^a zGr|m4N}U;4%Of%!@m^nC&P8eADAJua6cJN|AhUY4F4LAe=__P{z^Uk z$p8%p{}PUVGW;!gGaUU1d)|VuUvOx1BwrNGNPXi{`4)9qW+fv=r9uy$R?Kz5&dz}E z@C5*nu1S#mo|M)+GLih&Jo?WB(KksjpOp3m(c$i)QBO*6ozS?yAKtb8ojCm$z_}pB z9SM!!nh)@~|N4&{sLVBwe;j-`{w9MCF<-S9Is_o%W4z|^7UJ>t$@$^8?04C}#ooOg z`MY$qCtm4I@AORp&V^*GGu({Pra_c&ZH`k7R8-;(AL6p6=kJ~6c#SqejXLY)^lRnx z8)pc;4s*DUntu=Kgo21&dhdJxSLl*u_dtQBbm`&#kD$7kUngh1R&4j@!k!R%&iNCS zAZHB?K{-X%um2pPVC?C4JvI58-hZD%)njs~>;8Kl6g0l->gvDCM#85|E0UQDg7ruh z+aav}`bmVUg1{u3`v>%!=6JlGZG(#3sckzTe z*em@(ue;XakwuvqH<`$Jl{QpqG1tR7_lM6x{u=9VKm4Q#L`}?o-w-22hlP>VPvgs$ z(BFnisHf`N9Jd$+$ESkg^yIwIsVx3ug_Hzz!!egLDflwdG$$nJ=jToR zSG49q)eo6-kC%j4}xe5<&LNN!$h^Zry@zP*AkCLGoeJEw{ z$lyNC7bSILAMmU9!xk?MHzM_y6HyWuEm}tKhYJuDV`J9H`GjeqduLqAsot1(PR$dy zSZb8Z9x;ekzet_4Co5uthDP?44wKWgNn5K`+g5kwKG$zRu`-D|A2-IA+gtwGT*dE03es!Ig`LuN3@I(5^HRrIFyMWNEgP5& zM8n(+XxbBRRSgNXO<@RD0MyYm5YYc1t-&Lo7*+6H#DNG$R1g-ze&@%Tllvl{;4d1| z+FesFOGhe$rOOYK5dO6cp;5UMuM)^MH-%SFV_B&)g50lvFcoONj!l#pm{E5&D2Y6j zcdRW1vye12c7+)9QKI`>>Yz9&n?$!U+t-*XsYdpi%E)`t-j~*l@Lg4Qy3?gcx4HZS zZ1y+4odhn8`>SL3xlFK|M?{+@Hdo&%HII#<9iIN^uhw%M5l~GxV*kn?e0v7gZSuVJ| zu!lQAPK^pcVZXa7*d`}{sQR%~wf@RW_;6uyz78uMV9HKm)0Y?C6#9`7ZY1}~fAcbq zDzJ&FD)*z};)JQUXkIpY+QjUa85b5*mt%vhRnZzf>`otjrqB==G6w+LoADUM7z{XY z?8TCSB`*0G)^~laOqWz{v0Xe2VBJ;yRH`4m1sf%d<&<#7QR~wiZ@E3`dQg1t zHj=17T_ARAFRfcW=SRjJp-q{9aHP@JkUdD=wkx{HxTdDQmDUN8QEUJbkwLXQz!f+b zjrLk>td=O7{(;nN(RE{SqS*moB#56dTz=X$-o<*A|D1m)K*VN7eC&R-KE@cud@M(V zcpypRhnxxpJinHS>mk(Wk)KcDkC*L|CW0@x($B`fGNePK7wG1$y5HrbI@aWun2+G@ z#f1;~+6f(pIC~fQ77+2+CG03%_ey)DTPUSXcB|eq+$EAu!YCkrewTkH#U-}~+k6r~ zqxeGG0`Bu*_aF#n0H(^JKk@#oOY0L1I)E5WeQ-H?zG*PHP0I{=XVvKzR``1a;AbTzYZHYY zm{&Km4UOXAD$oUwz{$bI0KDE|G?#R@0@X#$7OV&Ll%PC>8cUY8+<0AgZkFi~uL){> zz{ch_?EBgi46VM&kRnH|zTlYkxLy?}X;5G=%)HSKUzybTYY97o$Z6R^SUlFP{XSYw zX|zPf9$g!&P>y7?V;ST_)tVup5l>ZcgR{xAJZBEG%&|FdS12PmpPqb|n`WHTNYFGg z%`JD}Ao8HyX!sh_y`N|3Y#2~A91cwSsOg;isaX}hGHk|!Jaj~(~pbf{Apel({k;jk-wy!Zuxe=`A&u&jK^=(3bwrB=u> z*;{`sj&^%Gh3lI1kDmPA;p%4#dZ3S}R>%6_Gt#YPnE}%IyOa&J&@QO!(T#uh+`q4$ zAroYS#gGn%Pnsv_q0fHjhK<4uw@AI-Yj+ikZ*d=?wv**2HK+UFUKFI{PnxGt%=)=u ztuVt)aIg2oUzmW6f3k~k96-6?Hrk<*jPA-U3VWS|gc)M?&-J2|LbpMmGzFlSr%Iu_ zpM@DRuI|d+r#6}lp(%fn`GhxrMN31Y-ztS}L8DWkC<`c=^%offCI6QCH>N)_R{xTb z08Q0|f}!ND_f5I`skJ7Q45#|dbZWf?jj}kk-uc_fCZ=4fX>r#kqgSMI)xzJDg>T_TJ&rtfm?1q0@ z5W)ROH`3Q6Z;h*-J|3|Oeua1HmC2uX>8>BSDh}YoT34u@z83V|+CiKwWM9=KK>HXp zi9aa99`iX8iN$L|b&b8p{^pj4b|{*1E3Kd3fMq4H1{h2mcF!0|M{2%-uh@Dnn!uW= z8FH`%;mS4d@PDw(eCflPHw#~qXAbI6 z(0+}v7i6$_C}N{ZjAb09#7>8)#_w7Qsu5EhX%GGuAAm^~=b^WGvKGc@5p-r{YuhT1 zOR7xpvMSS~3F=Ewkb|vomt;HvAHMtPI;!KNMovdyR_1g__u6hZ(i74p!yfm$Ph`&&`>-Guh=OANlRzWk4$)^G7M^@*E|v_LEa;=B2p;r zk`EI7`sCKG$;soiW0RHvrMOu7euGroLi#WK7chF*kpe;~uQ+MW^_&Eq>RkhQAOY!g)Gn6r-sSEy5LkUUd-B> zoxD=?`@GXz;*do-d{-yZV|;u2YC0GOE+?-*_w#(Y1I6LnaOGHIwOI71C%P;I=i*m$ zUL2w`*|!|8n=(R7EW6xn$C5IrpUEfFCSz@QmTtZq7|`m0P0mf2D%m5qiz>$&T;jXA z!C~LmbtF@M0f3QQlRRKZu*P_^R}6JxFCp4)>$6-aOnb5Q|R z)f4_Y@SOEa|7DjycZmLOr2T&x=|1igwjPEXj5DwE4A{%cJ{^$ml}r0T|GklJT`P@ML}B=3}Lg3spleOiMtC3oTg@_Pwbsusgk4U&tCv}^<4K} zcG%7nWg)syPW+)@0^nt7DK)VIiOHi>4b*LU|I_&IyX)#1u|M!>oiHp$rAh-j(VNI= z7obzZ^2PsXL0AJc8AXaP!ZgKps3FFXf&3LkKI^mXPGTZTAhN^xO2YhA2Gt(ILjlHxi~qFyap5q_8QZ9 zonng`a&Y*VKLmdS-&EJE8pC-pbB*wz+-s&Q#(v#BS4M@(&u_esKO0tm>rc)9t#tz3 z!p<>CPY482-W?<#T)gBTWe-+$2vLfi6qyz%-u5%pHCZ6|SQPKqTrfz!iii_|5tvEBoL zM1^{W3X=K*E9k7kj@)+#Go$AN50Q&iRdPn3+yG~oVTSn@V<(tz^28#a)EwjRb0$%F zB3-(vfHy*mC4>%K*^Hl%^KvQbPB}R+EPU}I(v*BjK?h5rCtbg(xT(M;FVp+|f){=U zhX{A^wJ7m&vs3~md{aTFJ@dI~*uHYOcF2Rw4b1-UpZ2*Q{PZ)xwEJCN@9;I*S&2L= zU1cM5RO3(s)pz{!!*m1B;A;7m7LxSqC7YEnWSdOTG(jy}Ub1Nf-QXBa0Ft%39FEbZ zbpT!vXB?ViKK*b+QCHs#BGV)k5}L$~$=^3sXIuE$8X---FIEpUx>F|kY~AHRujRt& zukqSy8)%Y43y?Fjyk2P#t)nikQKH{!``B`uAFr3l%klBH;L_b@R|atHJO_Fo(<*J( ztc#<=JSzC@)no)^ZzCi5tW+{^+!@`#dSiiaw+tY;P?&%r zN8fkysw=>2{1?Cn{YlzyLlb(N>b%KyjZGjT_{@-;+!hzV7%1_*V6<_e0H8~+PY}g< zSsa+8SwP|}tfm|;Q~!)}-L+^{{1G`*%rGSnLwAV(b$L=9yfG?YZ_}P@rVR0sN9opIF!B+0zNkT9&x;!?@w_58lTgR{&E3TOJf zdqXkEnYCX?Z9X{@IEoeFscQ+oP`+F&vsBzcy0RMxtuno-yR@IZS~vuK7I^Q+SU7?` znYlb6^*UrLRv=Fagt4c(Mk+Y_DuG+?&3q)5XAy!6i3K`v7jG0n2Y&Gvz?f)M=9zQE9~=KGPMtdou8pw{9)JD7e|W|H9RmurlEA0l3YW3 zPaGdK9zV-CU=V}!v^wkiVh5zde!EyIS>+XBFnP%1SLKkjC8TgEf;=q5o8;bTuM$iu zlxi^jlTtTOAZ*&{q8PCFX@(vOJL52~&^Mcc^pl@5%GSaG=HJ={d2SeSu zWmYYIM5Ln(`u0#ao=-bsbrtMS{@iz=0h*4yq6fl@8J;5#+7P&5&L52i zEbvmZTvMFU<%5?R$&p6EKv*{f$d>@@$X@`(EBMg8E3vA*3sv@Vlv(Zk0I0(67U9I5 zV}B~#_rjMLpXi_2g_7Hb95XC*$m>kYjZk>KNF38}l*fnpK7Wy<)5aftFOh!O9Z@`# z{0o3S(zf{vkP`6wec`UX+w>Q}!aoYG^Cu1X*~j>|-O&4Nar4~QAAp(rS^QFDqIc98 zW!m$s#y9!^>p=~rtlC9RZ@Ht*!KjTa#M8-fBUXOL<|`8Gi0gDHAx+=OfV3$3D3d$K z)T_tG$#G6YF~{5X7mc0>iz>$;TR)S4WF@M1xQ^+PR~8>rXB&lCq#PUGT{d>Cz59B? zEr`X|>}x|cQCJjgTB4P*P%G|TmRZ3WLg}v`I6Rqg;KYZ7MwrWi>DqXmO~}KnPD!2P z!81E6agvklJ6ONEErN#ROhWmUf6_x&{;DRYm)WEfACF*fz^;H+-tQE)0wjTudx{GB z9Gg-g8q*m2dAXP{5MMbAT~F!r>z4@~*b+HuLI>A&OUKmdAGk&?p4^YciM{NcD3^_e z%SHxhO0fl@PRt#B%set_{GNn2O}m=4Y}3-X96ekh4WhasOR|4;E$Z5gj%6(?g_m5H zc^FjHyX98}4M21`-TW{I&A9pmSk9yfrcftm7(oL5*LJGCv)R$cgKeTh@~NJxbZVLf zKkRIFe90(O<4?9{>%~Rlp>tYeYtZ>{=v}>R>vMFb0=1SN+c!;n1MA(hauyd*)hJ!G zKxx(~VYA0s+#L0dSwV@Tarw!3tYV>fVDmYDU4*#N!G&SR#WYY0zx8lcNiSPD`>NRO z7S<)3CB5UB)N4Tb8s~J5FO~wTb2Iy9YV3K`^Uj=Q{L9HrOxhk`Q|zBxr95fvo`3MEc)4BtlDKB%RVb|>SG zotz;ByBb7DT0))lh z#}6uCs=$(sgPgavf3NC=MD8D~R$Wj|}Tr_x=`Kr3uM(IoSf!cuZ5ZlXajA`ip zv1k&3TxPX`vF(T5hE`!iG>uG=Y`CAT(G%9z8*SWiJ(w7)zExi(9*JsV8_Q41KFA@t z=}x8a5^*LgHtH&EgnM)me?dxh-^r!JGu46Tj3dJ>GU!$lkoW z@sU=#hwerJX^UF-T+S5vX+;)^G^*5J_IjUaiFfS5UYy-dBDq{YnvxgMLNs5o24xXo zA}=yV)s|~kJZmf}jZ#k7vV^!~>cv^$!Kd+no(?@(}vMu=B+R%fi5mDWc%> zV}7PH9bp{^ISQxvuE8VIa~m>yLZgH6BCwh=#wwTNV|*pKANChjf+m=p403;*mChH< z^9Y~5ouL|>EwP($aE~%jJ9v8TQq>lT%SE*v5IM7rNRQ83ccw0-uuIvM&ma)}h@?1u zy;T6im%%k<|_zcrUHoT>VKulb#*YNGj*O>EN4PaPf`8-<&a z5-fpYG8**C&dxG!XzsLpI=L@K0%L?0O<^!jH7~F71db_@Sexf-a{lOGwm3XC`FB17 zTrRXgzgSi{21*H5JyIRq7vGr)85^g=RD-K?5MmPQa$(u9871XNkYnOrzy^L0$xWT2y9vDkfr(ShH%WdEgYC$i@r!FxMW8 zA$i*$RXB}u9Is={m|W(QLS@%K!7vBH4;Eu@L8O4RFpTD1H7`qd@+2ygQ7MB0z^xmH z#^4bk3VwCl_A$3DZ{9p-I6DxWDYS~CS+lI`O1Nx z1&#>JJ8N=9Yo}bfV}h!mf#R@Et7}H#;2OJ51)s>2lAq)bkOqh{62_BO4J8lu8qxQ> z^!rN-R6cCZyAOU67+^^lF!jxB5Iwd72dQ|hEYNxY**b@mun~#MZUoKWcU@V;UG2_m z+#dNX>iAt&zSrCDKX~M(Wu9=Vbwq--l-SZ-*cAG@$dx4A!>Zk>uhO8lau-Y$8^R{G zh`_>&84hemlrMu-8cg&X0QEQyKUlr^5k7VEjJY`zE{Q8IoNX@hvV@EEr=uBc0(os2c^z}we$l`=4m;klX@-?{O19H& z%`5g(iy9dk`#91}oxTLz>SONc%t@J#4^tM!y>vvrH?>i6J&vIm5d*qfVT|sx{56t+ zhwg|-b7jTq{Uo*kpQ?PSoWkaD^PDsmafYECzGAJl`>M#8LvhD1+vs(454?h69@0PB zZ$r9Boza9y99xv(Eo)jrg2$h8(b8GWLM~>x+Nms~2WHQtQoAP#JHY%=F?V@114u0# z5MMirS>09%(=<()lA@<^;X0~nDhSE89#`qUeRHaN`w46pxij)x)wyoBG75HK5#dzj zH(fK}3ri`!7kpIvXsZh)`N{Bj6TxBTM{KxG%OIG$oJjmiF<24Qz?Iuz>&_>UtKIYey7ygB#*K%i<c1lb2x0O2_3eH^C$uM8cWOBXq;^mMa z(UwxFP-aFhT4eYhYzh=-@)yU&>y!X3OAY1rJY&2*Z2~qd{;|N}KKkqK_+;jKxiGA8 zSqy3pcy!Y6K4#ld;&Xv{6uYia9LM>k4zDkTL~1fT^zp0%%qswARjqP-*myaA7nxd1 z9j74>{I?Z^FE6Q+$nntfFsX3hEnXI}4VMjzyy=qcDO2S2L<f*?Ve#6jQi;=^QO`LH>& zGf!*Rb(4Ie?a-wM8Fd*rzf-J&ap+~3tw}|Gt_0#$N|y-c#&x;`J{!%LpOi;pwPi{2 z+OB$6+VZFjTAVS4(TneSRWIO2brHd={%oE>a^H2P6>wN#=(x>l6MXAOsVOl(gr-oy zc@D#?&dHDt;=3Z7H?o(vO}Ygan11P{=1)W=o)a zY(UQ0l)?x{mPt%8GwX%b^@R`APBDt3u_@gaUc0ed>R<6v`8^{1B%E;MgFG$PJJA7B z>QweiPX0lI=}jF5>p-gn93`Rh%@LyEOy4b4O0)(!Y>2A!4pj?O^G~4+OJ;^nor=6IQW9bc%d|9F#i>0nTm)o@lHfEe)9`kl}JRY~%uxd7;hJ6|T5y^)riGFK51mv#) z`t&qo8JFG;tHIVWa7LLe()4~q?_;VRHBH8AjzLv(*yD+lo+admEJpNaN)y(26dD36 zKWw2R@J``2#-^Q_rWGwI z^-DZ!CH6n~?T-l-6CxsCBGp*nAeo!C9q-+%k_y}}g-?F6+iDSxpk>Gr%C*ST_#Aix z&WzEpD9LH58U`8AidLNS5Emm@YBl6xlE7kf%}_k2u>1z?c$I%tqz;+ze&>eEKS$=6#A|1FxQm1ysA{&p#=zzT7;|?SpWfHAxnk4}n<>-|dxU6@KQ}72gpGKq;9Sf}9)c>~5kHO11azF#uVCl_1xE&a zy;`*x{Ds>xq5Nzs)O_{RvGv`_Pp6tvrEcT#tJbm0o5^8U9rKpe?43t+$9JO^If7D` zAv<}=r52JJtBo6AunYO+(>WaO_Mk zOcg~qiS6{iUaAIu!2T96Q^o+d@C<)beCR$b*JO`%EchO5QFc??JIW!WfzYk08$pd{ z4w)4?E^8Y;ZYj3zIdm7TY0dm`a4X+ZLV8ToU|mPFv7veq?{I3}^bx6XbYtRrBiD+u zo@iv{qAk}_cB8wPB7Q|LrGUIsY~RIb7Fmx_C%V(X$nOwk<)(;{OdvY5n50$_GnpSP zaT^;*ER(Wo(TJ9e(rt-a996ZaFW`Wt;r-tf25Ej{+ z>zvP45in9V?$_oCdI6V34wvRM~`dTRiu^F+*sF@4p?RcL~)3d`!ZN7Zt|)OuP~n_MpH7p zIpEo)gh_dcMv=d1$`haJ(*TKPz6w_Fo2rX8W9Hu7w+s+*uE_I_FonW=WR7f4q3JvY zczd?;Xm``eF%Fu99lrjup$X&Q329xIg%ZGwo5IgR&R{)zI(TW%^!G7Uo|VItKkSKL z_9_x|Bx?w~YZj|uJ{Hb@gKx~=cgkQv*?Z8#>!p8m|Guk-MDk#}nbky1^Sllq7f3vi z3E@hu?uC%?AM0wH2#C3c8llZ!+~s1KwYz}R&8=w{4Za)7CbM_d1rj$LKFp-ZgS>fi zNVO2IG)QXlf*4E(P*zsb)MyFeZOHK5ypxJV?U16um-j_M$l#2|&^NU(uNMrGGLB^s z2d;7NX#>}gJbhy0SQ9CoFd=VK&B6w6QLdUU4GsOG%D&Ojf!mWm5T<}PoFz}@+r&r` zAy1ML9$F`rC(>CuDu~^sz`cj}=O(YVo@O?zgRNc>`|uQF=!;k3A4u35LukWC;)*(j zlQ?Q8B7ASyG>OU9u^!_W*Ng{+a?)<=P$-;Bfro8+&TSGTW?qw=ro&`7C8d5IK?YuS zax_Z&n-*o?rnA^;#>AgWM5p=bqj(F}U4)kU2^LFjnK#d!k|TEOQE%U=Nx+-ES*z_P zI>$`K9S?54fqIMj{o-x1mEGvxtTh9PWbINVNxRAEK_Snfs(@_Y)8XyG$6j%jD@ur& zZ%OP(M7~Zu|Hc)uQLTbHLE7=YLE5^@oT^eD8@jN?Beuwf*@=M5mtF#m@@9p5C;b(* z3qtrMlEwl-T0t!?I+8nF_0a?!pBDcyZ>lx*OGDR9PD(`aoTeRYZ#Ag~AGP)$hX)Wx z0r!&PoZui6;>MN9SZKzA^ImD{Y=ZrubfT(N3-ftvf;Xk^i;jZIp-3!vqvzJE{$BQX zhf>W_=07;v(`JhnQCx>u~F+PfAVGnT~+{``N~a*fnsTz zM3Dy0ty{?`Uclly)=zt&ALPPLxe)2f6UtoBb51lyUaL#9IsQrgYX1?s{A|m70V(6a z4Pl2OCgd_VzxwB`wjbav1!-`*jR?Z=LU)Rk5f z?~mhDWmhq!4!6-Fc|P#5Pf+wrs9E5~KUaOsn^7P?Gdy_rxcak7O4i@PaR1g|bO}RC6g)BJ^c2s!Y$<0t0=}?J`x<`V{Y>NU96MsaIus}g% z&i284I#!}az5$dyHg_m3mQg5YU^8JRwov7_h&{Lxkl|-%F6ZrKeombv68T|oyzSeQ zLWvc&4-BN?r3RIg;xOZdQ6!sukcxipb|m#jc@ynCO>&l)lLSwqR~sE% z4*BzBJ6vlg{RLPX8KpI!Ou@-?`l$n3!Ie4qK%peh)s+ftpj*I?T&s>cmJ82m@YzUm zZ8u&ACSeXKrnwiR*Jv(hsUkOrlT-M8T@H>`c&$T={36p=5Xkw(lS2C5VBNQoOpea$ z5M7fM^}7JO&7+%83asrFvba3s(1<`;kZilz{Y2|`T*!A_eT&zcF4E&`(=mZGeB?s6 zwJNCc;$O)@31s6+uDV0DFQ~=SU)vCeqI2Rv_9Iih=_o{Gc@$dg%V`JpEh?Jgmh%Gf z0CDpV)rzUpJNB^ODj$({HO%s3Ty_P2ierM$)Rb*yGBIUCP(D-DNEr3A^3B7)*9 z{O{TN(*SRethC5-m~XteP(F{IM6@=m#x`=VzJ-T)ydj zMGC}4Ve(F58I)-dp-jptb8;fb<{_tHr*xQZh)^lD$Bhj!@I!bgYZlNzWn=O;%G5Ib z+LMbU?5$k}KMl3e@>wZR+~0{l6nWYmpzI}JA?i9($AvDSNShc+MI=?POPlKh0+U*sqXZCHVkkyRE-2KDd2~AxwKe4{~vHgKqTfVtnWY5>AUHyt_tP zC>j3|uVm*AiN~GDT)J@5Nn`F!U4Oh9QYCah*l^3VUfU9HM)v$tZ`~j58Fp7hdcYF< zHcQsKnq=#Cu+AJJoSDlXFK>u-j)ToS)4Gp3`R66UMt$*An#6-IALB@9;jU~&$WcHs zPBpSF@==jG$HEJ0v8I~RsoW+_F%@gEZ}2Yk7QaD0QMscZ+WRnTBDfDQ-<*zq^S$o* zbv5*vu(D96rD?fan4v@bo^P)$yx_c-TNmci=>B3ki=C!czD0X3BQ>p6h)^&sp2~%4 zNx|zDVmT)>vQ*$c1zNVlOf&CKH|651b*%ZD27wq?i`&bU`l^I5jinTuAK}-Auy)2toG+1hxH32&^O_$k$7R^hPo^f#^Yx# z!vP-`9uJfvA4qgqrZgF($QK7-u*1j8h<=%+NaLifvYLL`BU9sHTs zOWcTQ0k$`V<#H-REfC=ro7k}I1w~Uk=(sMBBTAg4{1+h9MP8y{g4LyQWMjUKmZ1P- z54rF4V$oBaqPAXeMt2l;yX>VTgV2-|8gS@D&UYT8 zY@LcH`cmjJKrY*g3|OU$oxsHWLw+Sc5| zr(tV|zgHEHNP&n@Xw@B;0lNxkzC<#Wn#cQflHAe+zXGX?1Y&+Jl$j$u*7~a3I=O4d z;=h%qs}|RqzlR+EV%H{MPmR|)2|QKxaT@b=@Tjo;4>HXpw=C5lVkLIqJ|sRp)NPn& zzh?x;eBELHE!%e5THgHpP1GQ5NG;V5ibXJ*=rK~SW0rm9_-8t9W6%ghpH>Hy;gURh z(6{DJ{lG5mwHT-j-FwV*@UoE74k;cI(}->(bJZ$MP#ot_-=kNxs+Kp(if4cPmOY=N zGbvZPjncp>b4$i?VPo328Q(FfNfOSt!g%Y$N=jw*3S|d+0%0uK!58?;o>VoG%7l&g zch+Ll0iVG4#kKLwu62=>vi%_PG1Nxz_I!YB3PL=&dq759*|{cWNaRLGhCt8E!}=>M zlo>>JHTy{AN-4#P-wlie z7t!mqQ3hb5WiSr%NNaL2!rO7cjX2UpI5Q~A1x9=IORZmsU0;4b!|cO1YLjdsH(2o( zqb9%ha3eG8vY`d&T&(nlI(`?E$&NumoNM7ODb9vJ#!CudBF3xpNT_B8V(iu1DP(_$ zMu-N)w>H$D@X7#ju*gUkZ_TIWF+Hf=;2Yf9UYx;v3{8icyNake0-;awav!s}?yTXd zkqDXRAzUqO4KnYi@#+R&g*$a)D)VL?JWaKRi5_BsgcCUBJ7ub1mrD7M(`KTo-IOm8 z%Yd5`z59J0C7Pb~H&wIjJv#A-2+gm4Fxgdb=5Dg`qj!1DOw7_~WA17Zun{AOkJiQ7 z^A@?TWm;r2-QPqc*-?B z)8?y|t?nQO$7o00KJYZ01yM7JoQsOS3JcW%W>IKHx|dKGO<896;2PB#U1&nz9_)1@ zR$^F+yi+A%b(UZ156l?=LH@y-;%*7|QXYpQDz+aca*L8jn&I_5z?pPm;jn5U{hCrG zB*eJfDG(ZP$Ym@~9H?&au|buJJ9J)g<_p)uqd}QR@Cr?ul7wqXh7l-^*o0)K2GB@5 zL&@yC$9OC&r>LLDF_RZq`9AFXPdtzgjSHQKAg@aah1o_L>7jGJmSQO}*x*ZWd?}K9 z4E{-_i(7W2L>tAy{&G&bZJRh-hxP0J)rMXj4y9~(h3nL~m#SX&U3Snup)iDfjC9W0 zt};qPu<1Cyh({T=4c1VW0JmY><{|nvU-t!#h42&*FrXaCok`)@qZ)7^T_lvqmk-++ z;3o8_lFaygRS00LUyUr)4_AlDiEF}g%le!eMAL8x!jt+&ECaoTvZ%B5hE}n^c84mr zzm* z>fXEBi4Sp=Ocv{s^CHxmqWFBjUoJF4S-c25yMK$fvdY3=;wf`rPKoS;V}k9K#{6== zAE#OoTf%}#e+QhsuUv|augH7?shT*FWbr4#<=be(i4dQQc2r0G{8{o;~p=bi#M^8UK6+XZ#d1>Ya+) zMtxk{-`wiI;%01Jo|_|!5qHpLybf0-i?p%yj&t^1@PjdoBB*J z@_r1NRzHt)wlv!J9gEW48x1aA!paUdtIR8(Lph${ z)t9S)fDaYgC$G;Do`+K-up`xy6`&>^;%4;i^5?7a`(~DU$;q4*7&FFg^&FNElgRf$ zXm}3Q9IK=Gh|lG(AlgM2Z`)mf4kr*j$`7sOIlLWAuTo?q!F(lS@$;S&28-{pW!jmc zqicTJ1Z`!R7C(*Uc)WARvP40lS2;5sjkKbV;pjsQ#h(ut{P;0*KWU6GKo)L}P8lN# zc4{0|4=NW*C=zS%P4n0m1dO*>-|!dUh{KtqHcF+J%L(t`R0ewvpbjE{YInFEKWAbV zaY!sSNFcSFTWmgfUu~zC5w8pLp}WEbnW;r*)x=U%b2;cWuf(pLZBTsDW?6Z|Pp$V> z$s#2@p1@v`InJnpuO60drZ6bJ+xK8_HE)CpaVF#f-@8`&m!W?gCv9dUtXbMr&uTU^ z+*`;N_A^dvDuo%vtJP^X|E~G*-FKxMlF@yp!$FHBc)j|8JjrTF@Jjlc`q`dUj;kigmLzr`}nsq2MF~!Y7lQpGt*vD?WSc4h~vv$34=|tTZA@ z-*a|WPZSBwJP>c0fjTw{B|F|{I=V7kjrc!RlgB=>KK%jcyxV&AJ}{rFx4e77tAT*_ z2cY--D(d8kG!$k6!+rM)7LUfd0e}poXXX$>0w50_}O1Nw@t0f?4~COV}Hg~ilY@?9lW%m+>s5D9{sWesq4lC zvUnl{4^Ef_f||}oUs?J&W!FU{asV6<9mp(BX!E6c&rmc=Q5B_Vz=pT+3|B&32vDG} ztYZ~Y76y(txM)oSqia-T;zf9ps3wEcDchx;k2n6~PADc84l&kI)|T|(Tq=lT1)vb4 zT3Y*0$ac7GipKm!GPWeg39xiiu-(2UR>V<{zOpGq@iLp=1G?#VE2tSWfcV%TA&{17KAez1-%r8GFZhBHJMmYByC^a-HBWz6S5Ty58lW( zrz}WLCRauB+2#-N64A<{?l~`8#jIM`jxNzzs{RmivWRA{+k{IN3XJR|tudi1O{fS( zpwD{XARc@5@qRshe2KMP*nv%_f2iNyY-n!h#SuCqthNg@Df@;I{9BS$IB7J`BD+Y@ z>?MH?wcL^bPWnmn9;*B+caxAdp5P?BTe3`)uN6fo--S8DfT)ftlPA83DK<1ir4XUI zxfm%rrNlkV*N)jcLGLnWdDaHi!WyACf;rxYNt*BXgM-`6Q1URNq}`khRprsM)(fVQ ziw$k~jgWWvS?jz!iwY72QRZ5}moetu#~@-12DwmV)wm@EB8xOuUOxO1+R!8cZc{lp z&w|g>OM;DoyQlYyqFHU?tva^|k8<)@5B*p6QA z<3f2RsLkEetMV5kgRqlF4#_vDi|=IXkYLrsu2IX4=|;|B1a0(}Mj$0;ga( zW){bu{~4@~uj#1g!}V4lAI0lczkERduK134uUIoquwobr4TlyCVUwG`up~$?6(1w2 z3E$81C0}HZloD+iLyB!-k~D`6r`uc7hPijsYxHXctl5{^=(=F6YeX#Tv7Tt?l-#&*^n)}1~+ z*~!RDHk%Mr`MYcf%SXWe5%F*q*WVMG;++*6pduw%T!|pc9TbQ zO&ehJX^dhn6@GMlaFC1*BW4Yr#<84>NgNh?ZZdj{(zz$j!sPsX7lUg5LvMi>^wKnx(J=^al`|LcZA7;DETV^D%s0lyEH|ca8_u&qdebYbaAk?S+O)bhtrm z4m`?qsXr^lLR_>gW0i=i5^J*zA@Lsok+Y5wT~a;!=c1i#gP1{wcuU~^EIj#7$^-D7 zpreC0>A<0S;0AL^_>07MQEf#(^4L`GPHpCb+3LAW`qHKyI%GCHU4x66AsHh%U0YjrxJP@=1{gRQthAAnq40yloy~%bA#8TTL?e z4bsBKP;YQL`FS1jh2%QP^2RkpEq=A%w%RM|OYTeEi|L;EXoS!mKYZ%c_CcVmCK2P- z&^{IteEW;s>6tH%K|u>WKKr_Ibsr6%b`|0zOE2&^xfmp)7RL8cI>AtM2B(~Mu&U>a zJZl)ED6N><@sO-2A_yOF>ipASRC4P{Jmo?m&gjq|Fm12x?$5ee!9p|IDN%O1h@2LI(ru57?daw40e zWfqlmyYfCi+w#I5Z{dr;GfadiF!l8l$qv--ek?xHy(f6mqV)J`fzd%3XGD|Fqmir_ z6`Bcw{aJPf2eY%(B+zEt{8dUNaeE4lebtU56?Pw$xe@b;+20rS8qrepPHzdNqcErU zs@T5Oey*X{N#blmMI`kMD?qYu@q!dcyl5SLdHwFz&Xb|Jed2my2%jcuymCa_L4sz>2M6eIJMExSFY7;$!qFXu!nLDNS1>w$1giD4CQs(2Nh95)aE6dU1F zTu6I952XN${w$eA!2duc8=zZlevSX*4+cI${K!v$Cip%UqA`e0Y+_{EdKXjJ==qcIKyNNNse}HA9|$#MD)htGk)g?tw5O`@ z%qmV%yrEy8)=5#mXxU&zMaBE&G}mP3GRz!s6_@k}fS?;19Z4FpVmgVwLbxFJ-WswP z7KHZs*`7{Y_@q$=5n1j1A3&}}WO^XQGQyGFks3Rl_@MvX^Q;O7e4AG%J5!^X4dO&m zRHW|BFlkIzq*WK#!E9mM&Q`2fJh)Wzy^2_002?XzuH$0g5Smr=!@B9Bbx}_b&#(8> z1**YJWKJK+x8Mjgrw)4vEP0h~mNa3r8KG*RRh21FMjEkgDeorVmZ7wLkLP-?v`;di zd&8ivj^^4F&b~_WpPu}O^-lW#%izlRa5m7tfBy>fKR6O5{r_jHo%H|jb~fq%pLR6q z|9`Z#N&mlF&ZPhUg~8)K{*ML^@b@q||5xe%?_>S_Lh$f^cl_rOUU2y7|DpKs=Tt;} zU^5XVls7NC+LLr?s&`*o@?mLC!r_2g;3^^eK>;2l*pGSq$pgzLDqgP(Oz$4Uq)p{O zkpKePP2L#QeV<|CY$n-;eq2e{;mZ*x|1Hc8A;=_x7(p*>h`@|2q65G5nG9 zCc@dho}mAgWrnsX+{tkMEq8xq4gEWuE@*XcN2>e*1%h?`0#~QFEyBw)DD_8$$ma(@ zyt4{fsD&MlTqu%vKYf#H7H?mCiAs#}BYhB(h5GN@+NadnEqIj&+ev>cD&hY;4krTr z0i>9-)=|%S&xv7o&-?+bNB4ikmx~zZi12DA3!onCvfe}6vr9k>_qZN0h)(xp9b zXUhD&ecdaI#1d3n)IL(bKoDPH4>e|A)>NH6com9S-^_#y?kk0kH@U-I$ z!2Az@1_CvsZrA~6spmN( z2NyA>A_EJRW+sLXP)_So7tx0N)W?(%P;dR@Uc9ITZSj4|J70)M$J@~1Ek>O`(a9bC z>w<8ZNUu^ge9Vi0dX+31kThpF7ew1sPL>HTG%wOBtD?REm>Gk{p$+L{(b8L3)fKwua%g3y*wa`Hp`P3`SL@cM^sr?lq z@nI3|*a4RiQ>qrmAo$!^HD|9N9ka0t>JtfD6s;>F(pld_tg%3mKL`|zf^+ecO|W#) z7{*t9*a)Qf16{m#VKE2MM02$MM<^fOM4Y3wnQu!=Q!G1om+6U=z7a1_uGf>S`?4rwaMXn|7;`ZQH5b|8$@TY3qWO#o zvaL?;xO|8|3j1mhh+W6%7iMW2+4>sJEJGb-_a6oDn5uz6}k!FcC+ao1#7r&7oG`MQ}zQzZUfVJp6eAWQ4!vH(0k&? zO2HBYcHEok%gLvYV;m66)nfd(lDkTpMXF0F8^{MwInuWlg%*{yp#i)-jIRra8=$6hq~T0!~nCv zn@Pf+K}os1Lxye5;XszCKBmDF?0;Zkq~;|7z7!Z@a-TR8$p@Fx=kA)Ez^4_aV@V&{ zp^@wD@`kOGhf8=<`gwa`zeN~IZaaEbR(7JQtdI-V=6#-r98vtoAjts_&NnW4>X;2a zS@BGT50Pj2jg!J6-yJbL&l0D#A;2ex>NkCZUChnV?i2&dKhB8YpNcuerjfR=eYg#;-6R4oEF!zPGJsi;X(EKaK0(NY8?Yrm-H433U^3!@r>Hh&-PAXghKPLUg_9}bOW8Z#y zQ=jlq`wZ0xQuR49t-G%+|FAS8;c!JQ@PM2BfHvum1RrBBO(pLO%&w^UQ+q=8dI~R1 zHU1WELBipXTHyLG;4tY=zxNlSP`rmK-uweh{QJMZPzFrG;pp#yM<)F(_j>C820yC) z0YCW3#UuV}csMHgEAhW)LgqiN3eO$fY}?z5qfN@G7u^5-)M5YsBiw&@ z{71@jb?_3tMNtCnj_f$|L9gnJDISz!&-r%+o&rYWm&Z39HV308xOpLtW~Y5|f>kL|#uK z8(@=Wdf)K7K((pfUle_zujIre4X;Wu8i@BdVciGmjEofn@^AS24Fe6e364Y_S&s=Q ziCuSrl@79lT9cuYC-BDW8 zU16gy6RLXy^sskC#qV#$#{)s$1v9jab3nQ|bC$nmsDPvqZicfO#tiPfaUq%es^$tYg&^=E!A!4A*N>kG_FEZ3 z=v_G{Em&mL3HVrMY0|knk_enB!c|El+ii5BNVI4o@jX>0H3%}@6QY^+9y5 zbSje!V~%v|MOC)_sL2(ejT)(v!9in;=I_x!eyK!y&)up}vqt=9st@pr{l>2IdBC!i zTZW$%6D%{M{_*^%CaqDM$h<(I?3t_MsHWqnWbCuRH(5`B#G8bqU(X{aLLb+k6~-T_ zOE#Vf3J{b7(fLVOp^~8+Sj%Tlnj6j*yI<%Vjrkx|udXFHQs#)@i$rKVhsji&U64Nj zp)6=Wf(iU<)xmq3Ys*XJcHEt{1+*|CaoiQQaUPR?-PXG^07;P9ZIK2>pS@6HqqAp? zQAkw^({{wCT}k)81M8PNpa+9wqG#VmcIYvcac9djH=jxb3@)3TDo@=gZ#~;A$KXZ!=5WGfoi5Z(3YwL!YKy9Hk(wr%aufVU6z9ONz1ID@A=!g&C0r2>=0b3-x zZ5UC&P*Xi6SD9=9oMp|ir=M*rg-VHHb!<~HG53-ld+sgHTFzC)H(S-dn2E-rBE-Cb zXs>sYxAXz^GOwgC*E3xwY6b9j9}`?#3Pn898yP!@Jr5+!Nt7Bx8X3*%6j;Y*>gz%I zKe-wOJ-Iv&WZm(<%@$I76uu3z;8N05614FRd{h+}G&5sDm{oeeMAF8bVr8Ff+VD|1 z?Ja#h*&ca(|A1>a&E9D(KaUTC`wO*Sh-X6MijHNrG*n$@GDa91)Y?R{>$V5iM7njw zhhgax&w7oQ& zW@qG0Ikc!5bidXQe^Ek1$ytNEIpRByG+xxpOa+^L5!qqwBOuQr_mpVxYI{rS<0jVO z5NG#u1}7^13qH)N-0EBSaRG&(31pTy$?6BjJS|*j=boDTI3UI6Zp4%j$wpE3Sz_V% zlM~y{a>?tgh-j|2thh|mFHwiTt$eq4R@W8xIaBQ)vkb9-%h}k$C{rd$h122~#}}6% zh^TfLB3lNjyIy5_?&|!=lxNip<9XK=YP$HM1Igay7GEuu+=oxEJK~xum|T_MaT{x{ z-#g`fJ~H>1l*9&8DJw4<934q&BvtSUQmMtKHEdj0XLXtyeCxGxS`9>q$=8eWY3|Ub zCRA5`$xbPJ(DDKS6CwY$*RXZB_EF%vLZO1;2uJCs0goFyxk^T5&Gl#$GZuv7qM6pb z&eoH^GHV0w?=sblrO#ojNBwRN$+l3}P5<&{;{K2>V0;o~Bh+Zg zuLF8kb43bbXZ0pR1LGZD$_OB-EZMq3fUludSVo?`DT91NfW%VKAC^Y%_hOmWO}v}nf+XG`i%u*k zIw#{&aI2yaVk-5T2`&bXNt#-MILolef6Y zr*wWsz0C;2{f&a=md=;p1!WT80sB6-T*$lq`-`(7WhO;$qU*j~Kj0!iw69{;qg-$0t`xDy}T+LO;~_ z7P~0VJy57o2$&7m*{j4&kB-6W)JGMPw6j^M5*i^SSuHTi;azp~RP_oj#d#sR zte$h?IGNpNA-bipmNkh%>p8q^Ts0*`H~7CRN;F3pl?A7N1ZedFzLfaSCMvJ|lG$Jw zPx_o!3RW@{YlyNZ^S+{CvjF1O2@9+qjNBver`57JBHIMqVIQRU)(;IGMV7jGdWZSV z8JijZXwKub4~kTf#`AguZoacIOHdP2HO)u%ltO#f`n(W!?(d>0*@lMGs6)Q3)+mv6 zru&l)vhYEu_1(RyAqD%DUA~+0t#&*wAH|xVib>8Hx_H9d=!O%&%1) z7E^9!ImiW6^UbXowkj~HK-Gm$bH>Dq~`R?N9VCssZ}`$HDF%yzLop%`Goe(Ex1xq^_Z)sl<>J7?}1r@Jt&s?ZSfxflNVI9`n-Ud zj?%gmV8&%8`HgXlf1<9e3+0x>V0H6q0qo1QK22vS!ct%rerwHa^J}waz2fz2yOONU zSk&I@Cn>nx)2F{c#Zy}JUS5i7!0IiaeR~G#kde^ ze8-yC)F_BB!wh}k?W;8XL8m2){53yIdY0n^Wfo3$_* zS-|yh*iw!BuVENtPrSm~8;t=Zlk@s96XzE*@6VO@ldSG3!jb|0w$qNOuF?Kq12sa$ zP?=|6#VLJOw2gn;U>UE3IX-8GJ~F1me!S*eu7=8(KGwR&x+$13uPvICqL6ErNhFG0 z9Qg-eeE;e1<0S`W1(kvaxaDmWOt8A>!jN_Fh~nLnm1R(U{ahgafak1_9jf!BIEyy+ z`HuH$HA>wWxlntf_fr!Bjt?vhf82Ue(Dut(4fShm%UwKDNJcbG460{pX9Ze_@5Lrrijw z&#gWBnGnh|>kC;Y_ICx5uxXd33##Uy$4`K3c|nxvXx=zicy`~@aR$PNXiAdY(SZe{ z$AX;b4Rye2EZp=4Oxx=0AXPaOk*J7l8DYzHwA9L}9iODC?M$EgW@!_}3G1vn2a8+G zoLNGZTt&{DFE>8Ifm;@kWP0?8NFsT=nWY$0fmVj@tRv4@89o{<{>JM(&3cTkJydps zFA}X0;^@;A!j-fYQyBZ>;F}bKW-(Pxt0+qgpEOdoOD{fhg8=Ti+IxORPabxRT)9$% zMZ@yUu$we_&&=$mWhzxkwBRmGDvPTDr^pGXq;iv(80%nqqA;NsB1A~fx?98yaQWtbYa;8*`3RSq`BIg z+mN)T&cA>rcCfD6*($Of2}`sn+mvoVt|dKNG{qs0K0CONQjc!pwW5;~LwOSKYd$F| z3o^WUh+i^$QIkwl?CNYa3)FYZLIdo{otjBu2Upsra8}HTyOFgTc~F?R|7dxg(>ocI ztXdflj^)#8aFHq!O?`8$y4Y0~ILl6+m)umV)ij;AxtB>-wC5gabVqoC4s=q4ZY`q zlV@mRfuY?|*aB^4OeiLbD2cx+_PE?Yfbvq8^Syq_>iaGNkVNnBr5I~?es67Y%Dt6Neh~UuHaAV-dXjvHS?CW$oH_%2yTL^SuTaA- z#>ryhqD1Fpuc%jWb#$*X;r?20lq=MARgTzo&zD-WpC^yZ(RI1*f{pdEQ+Ss}TYqiLgtm4<(0!l1R30HY5IZ z*H1t4!8<(IKRUeYgzxYt@t^;l!8<|yzdFGlIH&`kJ${<{`_nr8DE6;-weT=*{|qyH zc4zda`0hi6`%9d_>Ecz^CI_MBV|}Ma8*mcsX7agSrdeuPre||&X$y}vtBD0zB*sD2 z(d?^M*WiQ)F)St1AroEo;pePjJy|kOUXg$fTR%orE|w}xwba8t`244=f+mBS@|GUR zky0(C`|t@9ohxR`FFTHfU|5!fY4Uyq(!fBbjl8qZ4Lw{Tr|$5G>|u>^%XrmkiM>yv zX*pDO`+=m~G%_F6Wp4WL-D2d_;Lcr7&OGByqF--MV^BrLCbpw`)dLzM&Di+zS7-7e zMd>fEhhv?lSbmt@DxDGY9csz@;KT&2zArcThO_qh&!o9e4Jm$7Q8EmbwL)6t^}RJ7 zEYo+(WeN3f%&(lJktF?udyl_$OTTsK^75<-`+UX6cEcUrR!_EkxRZ}=aA9{>Xt1jB zeEYO>1x3Bsm~(smZd54#rnOz}co9v%acPQ8X=5jcnc>XoC%$6pKIUvH#86y_&5k4V z2Jb1q*@A==PM@)V^7I0Q|E?^zSqUIiyH`S-VP!|XD1dP%4&yNf2nK@_DYInhfH~2I zhHD0jU);fpWX^T4o61NaU*M5f?xYy$hi!t4fkd>O5~Aor;SWb9#UMylF?kq zFPW95Qe)&+BaKO&x5LxlI#nPDs`y3-wr!y%y;mM2&7$EJ(sQCHDnNg!Arr1wu_Uk zHaE6L2h+aNLI68Bic8ky5=iVKfbkMPQGmpZA(Gf0W;--@5~bwJSX}mwR_ZMcOGO<& z+p@|R+FxmDRP&t@D><_BNlGI4eNdW)Ju|*;J{qfu$Q0sOBlj&8%^@bUoJ|=XMUW8e z(=woyfs&&@tmNPKsN4lhO;&X zL0PX8swyv+hcT=p%7OhNoe)(6Gp5{xV*-)}zLsHOmezhbM=?tmSeQz?dH``mMXp24 z)Is7!94EwAqOfL_q=L$*uT1loDf={P`4BLTmJba(@}}Cr+l2VvYN8r@!#V z)C1gDdSpfWDw`zU&mM7lV33RUEP}J&$$Hv2P}dqgBaL z(E(nF4dbZk*&PqUF4m=k@LiU*VIfHvL>yd3gNEH`SiHH3b&_BY;+T1}G2*sB1w`3a zLR|uk5LO>VZkn&M4ze$Z39UgEH&}1SYXs9TfsnpU)h<*aiy4S$O(WPs zCMRhxU4^(JNXIXq3XKE=$~z*?b*Nq0A%OATVZLxStkU{Y!%?20QV~@y4ccDU5f-uc zspoS2<(8w}WyaC~=xg*-BulOIMeS$n!$&d?LAg}1#SE^i{y^L-Na1xlq-jgO^za7GGb|#=Pt(&Jl!j{%0z$2lOSsU36=Bi8GC8eOc&z}zz6QkR(1Iwd$PPM&_*Awi#$hg+ zz{!*FCa(gT;R;a}J@yg@XC*!X=E>G%m#cnsLEiEvpluCflq|mY|2!q)Jabm8MAw(t-S(g}xuC zTY>KT@A|x$TbQAa%uaR$mhYNdoQ69!-FMM43Y5(ZW7rq}e2hOy~C zHVad%ElXb10@%NFS8{3QvrS3=JE5jk`brk;HOmzDR3=a6=BNYK0OdYCo;>ba`=PqA z`E~uRW@AidqD?U|ugOaE7P@IR@5l=C{iXSPFx5Ns%+^x88}Wf54%$j1Za(tw;**Wi z1nbl_4d7IP#QeecqLb(a2ZJ4ON^mRpXUFSi%k{zq3(={p;a!V=xlH184zsWywR+5@ z4xeNmQVAl&zXQ8uqJ~r_O<3#nTvlU}9mVq?9;HnyaN_f2WVb{jw*oHx2t{hNyI&%3 z>4={RwaRC$maG`#GmgG`5)^+CIH4c6W+_0-FJbwkvcihRbIYEXz_AwL(LRekZNk8k zVzQ!b)Y&aTztuhvbw?o@aHk#vX4#!U@C$uh4b|&Yclr)g4cb6TV~9IBsMb@LZ#*!$ z4?uYOLdIlAv}f5~unp&axV}%w@qj8*rSD%h(@M=pdFHAU>B?Fh8?&1XTh~pLbJ{z_tux5Zo8t5|Gi}szKKr335!D_ZS zgFMf3K$QTQK+l`m1amg>EBn!TA*rgm{OQI{31veU{f=9cNfo;y)$UNEzfgtr3E|*m z$4X1~k5Y!^=mR@-(FT;RkBSFFP69HCn&aUFfe*(%4B-y4}BLxtYjC4i;EDu^VR5djqw!n)kWI5&~V&;|x(YdFib zSRuMuH-iooe2VjKGmQz7K|#ntibhz7KwH-{1FbnS&}u zt6^fz?=Bkwv;2a`CuK8;3#l8`KN{hTMd%IvdS^EA4Zc9&fL)01Ue##+h~X?;7#2ge zBtwz}2H)8<+NtH6*S9UpGkw8yFLRT`SLDs_>lZqYz1!@c(Gz$QDu~_suOlpKEs1kR zFDB_hJShwqSO$pn2Ev^ocEXZ)J#8;!$iTwEWIwgJFlR)*Tm^2~iCJ8G)Fi)t;m3M2 zseejB^-gFO?})q>L?0}Q2l9%cLt9b4DS01wjSFh&#_%!;OX-deZ^z~gLICf84p*WZ z7JPV-eNuo8PLiF@$MKv(o$>a+?9LMN>5JJ2YUyPmR8qRx4X&~ z!l~XFz3DZ$ns!Yv?WpVO*+uJ)$d+tl1AmX{m`VqdEQgr+p)EL^2;|g>xH7|LTe$T* zk&X$EY}ZK2;!^Sp2Hm$aVY%8itebZV&kIWSHe2QC6kqt5wo@Ygt)h0Ay9{cUg8j1g zr;QIJjq_H;*A0TL5CsXfy<@j4G?Np7tOP)_(OrY`c#2n{O4qGV-Fn7oR$IrH_I?N% zrOee2B9(7vC2l^5Ll(VPL$lzdD%1T zj!5|Ia2q0uVVWv_Bx2^Qb=XYVWNGrTS!Vos@v_ekpJWmD{w*5V_!4JAB4e&p)pNjm zzvRSmqRt?YhwtgbKUz92Co+5yU2^koHRXkSkY&xns;oi(Rx{2ZW!*>(+Y61XRQXHN z5*bq0{b2`=UCJsIDuF{S&4$8GGKh)jJdz0QFg_QfZk2}GkKv`YTB1@;bMkVhp$D=k zHV#q#NK&|d88c&roFj5)_(e7^zB_X#;e4*x3|^@a?8P&5?8H1k}U-M!&4czG9 zl|i;dQrF!A&OJmv#xOBA{N)gYcZz0{VXpud_w=)xt!=(8}k)6DY+=d zyM#Bn^jb2~57jR2AxOM=Z)rQ{dVG8*Tqxf~4&ZP80dxww{B9y3Pe)RJ3ebfwr?zdt zx5?Ux#bn_X3i6z>8%XveqiJq*N_P;CEq13k$$o_?Xu|-Ix8viO6j%X?33~eNT-ys| zXq)?Y3U*5wwSJI0)|BxD|2rkWN|Q9Bc{v*#Xsw z)6661i_B(P#LW^wJZU;a4uHwx!b{UNd>|6-%0qMY21PGl_L}rAW--#9_w}?z-9G52 zQCy}_dq_lPkaC-fw2_2zNb`Hjkp|e4W>^OT44gFF)1-g=;8_%G9w8*hbkhRX1|~^q zZQ!6xo472hUfl`UM^#?XleiBGi-|l#nbA>3O(A608&MHF%Px-O#b}TG}qu zRM<942;st>@F&ZCq~n&BKi)j&H7=Ker(lSvrkEQcsxehzcr4%jliY?Vz1ulpd#O2( zXt5J6lPeAyE@efkMfdxB)1|e@xX%8etXU9y*StzGk6HS07WpTOr@-aM$IO-^GS$JR z(xUXaZAkFZD+~#OHttk51w+tfcB3-O0~%P(7gnnBc0XJp=0~mu9TUPl;G_ScGDl09 z@Wge?sf*l{t|gYTOVKt?R$*Wls(>VDKRNhqa$wA@`G%jYNy%iSZ{+v}*Cf9VJ`P?) zA(7ng;G6I>-Xy|mQhJP9#R&MCNm>4{mQ_qonE9$LSGwwB!XyDoiY|*_9y!1akmne6 zL{bAX6ZkQ&I92U{KHj|b(tdM13pYhg1(Q%4P1ZD!0A?_w5DMIA*?KZf zgTFI575eyPw;%_zIg(V(Kqk>k3`EEzI#UaS)Qy-?jvvkP9h^i+KtFF_Z2v!|75dC{PoXy ztSP#yLhQ1Zy`PN87!~5xA3d(@-rA|neMprhX`?cv?1X?r`xfCy^gF*o)h={w4e!=b z%Oaz>9lKTZU8k%`)T{Vww>neVfVK+!0!Yf6$g?4IXXMkP)^78d$w%3qz-h%ASJ48p zTWF|&L)a;{vvQtO>_b}rC6Hv;t)){#>sL=uaH7@jv9%DkMJjop%DnG{HdOF;e(p|` z3W7xAvBC!uav|G9g*-x`9=kLvF+jwm5w@(T6hMG{x?70;>U zlW_d9PFYhz;Z?HL7L|!XQ?lXkyYjQF^`mAMfxwK?i_C&@kB@K|9U)&})dV`Am=sh2 zovM?SjybvRw=mo7B{K@(#6Okpl8+tL`-yX#mWTH9FWYTN6(s)b1T2d4YP#x;VzPgMploDH3-Rik3y{XyzsF<?}R#VHW$jK5rv_H@xukW6$dwj2pP8+OwQ6oh@;0>o_~O6-JM=n*uk`Q3=|U42 zUVXa`FHBJI&udgxs6w*@RbTa~SXDP?p?CLdtqx~hv+M1Nors_G{B6i_vYl9OwslsQ zHhHo!(g6R^Jd|<97n^>5!@es&N~Kq6A*OP!gJH61yLVOHx?nf@^5{4BI{c+Uu$w$e zDj7vzhb{m1n0RcW!Ai@xK>o01JNC^aE=mqxGJu{xD;=DDTuPNADt-ZJCLjOI)3cFd zQc$Bd*Kpl*Oyp%%IAMJ{t|C2Gb&jy7*y^xAL}nbb^PuIe?lv+YUi+3r3P&;+as(^w z7>t^T{Ao*fgk5I}^+ezTkzO(elOJ6u!FJ0D*3op&v1!7kJ^uhcTaf{- zEA{IS+#h&7ze|U_5T$w2z?N*JB3;unVaGT3qw!nGIf{0Ssx6Va79GNz9D+1zRB4EX z;tyEodq~oKW#;qRwBQ)rLocF!fvbH(E~)T#b-YWki1my9EUD4N>-32xbmxs^YHZmy zJh6oBgcsOkX!LzHkllnRSdKjI)l?#y} zvj}GkSzZO<7CK(4t;BcDdg)d-QYR$&bMJzpvleCMv_RKoyc;cR7%7DKIFwC{R6k!A z$x}Vc!+E(cw|8LMrl)tNy60C_-BmK_s@5l6g9b6<*wV2(^hzCS4+4*$T70^1EwNWdtI51vb-F^|nEol;CI? zCnmUVa1%=Mij`(ve}Z+Hkz}`Hm-K|t_}CNFFI9|PPVA{jYP+0}pJMQ&H7}!RQLo?d zG2XB*^idvE@}|24H`UETA$Qg~_Dwv0XKC7ePgVgG+F3i1+f`z)xP{*lDjIUH_+Dw* zPAHK)&qK}&em|>o)(DON6a2&i&Uw@P*Bqdz>X%fkK%JH253zx?rv3;Ep7bRhrmV!p z3I##Px0c-~l9wV7t37fhZ2QgjHrWU2E2rp$-mF8-Zc@##(T|N--+FE>yijJ5CIn~( z?uY{))WID|xJZ7Y$FqmRbTC&MxjLDBxwG{B_e6{n9iLj&P@=o;Qp00XN37VZ^1oc= zaa<{CHa#0u@i_;~?soVFEBZCawgX7IN* z-p!qxB1k5bHv?WUI~I(n4IG~`C$vI&7OMOGQNHMkWXv6xah7gDdO2MYRP~SIqN}HIwS4qc!CQ~vZg|RM1&MM?!gp(H-g{0jpgJ`5zX^tnvyh2hF3ec;|Gc(V^Xas zCyFQYUDE^!y;xMfyj66>JoONkwTX@7Q|DQHr5zw~dI5;|7#cJ!d{-KqIZ}7w56zbP z(%We@09~G)GBVn{BLT9F3!`JKb3bD6DbCnLy%~fVIwkUqTntj1sR)U+Sy5B66DO!9 z2qxch6VJ{rNBn&!w_~e-8Tvr`fO|3UA9;~F(T4zh7EzK1-HH+)gNCn!t15?Gk?(ih zp!6W`IErJWkWz`{++7ZGqY*TFEAtTHXJwI(+mY|Qe_1}X0i_-!D@o@;nGb&f8_z8P zn7qR8P976BFB^;#nti&6-te@jMSqMlrGg}5BgMv{7^>a8bxWwQg}bU#?Y5uZC+bdCu3%26M9ULx-WBhP=-8M= zduwMl7VeL-NH}W?xex!)VC|E@HzB|mou1pM(4~@KeqykQ(HU|sp!46trM4d*LjNq( zHq6IhFXH4nyQ%71h`P3!j~)>gTeQ`duz0-B9=2N(bmR|~wODL+$T6HTo7N_i;!;+s zm{0v=?Y$6i!L1C>A%G(qeP3#ujHCd)8<9zyGJxpGWzgqI>%S=<+ms3h6t z%On+|vP#g4{76P~#B#PnaAvy5HOIx*9Tx?`MJI=2@L(BCST>0z(IQy=wXun@)H*+a z)@`Rm4#mFKT=?pf@lMJH#GArm>5hAaht^dtfgj|m%A|`T?cdM2!GtzmZe_4f;hQ7W z97z+Fze_5t-fIdZDWLOIkYN0(Vf41o+%NNrFMfJ*YlPXw&OZg(i#tX6S|N~Q2C40K z^;Y;TmNwD`BQhI3C_7!PXdp~Tm#Y5`dfz1Krj7=8MH#-`k7;@;Wz{V?Qd&`LI_UYi z51Y!XLgf(CjD6%2Ezz~T>uH{D8)v)ZW0}v1UN^vt_Db%RraR=1gWi4O;FQg?Zij=?;FOWzy!F)adHTfk@T(!qd{Z2ym(}pL-^+v8{@Y}hQk;iGPfd$$*@0}zDZRm z2MqAX>sn94WKKL+7aJ^MBnkv+MxXy-_4HYFnNwO5@59i`GApleuN-85aHR;k?#;#L zfNQLI42C>gMJIanTFwme+7D^SpWp<_P+^|!5DZoi?BSFs*>TL5Enz$H+_w4ZmSI~G zUo;UMN;>1g%(JZHE^>75U`}g)Dl&NgV|GkZH~#Fcn_;o7d9IWLcl^g zUCuyi4X2DaedDpv&Fkexo(%j<)t{X!ldH23Azm+iBKLkzh)WP}39AInhl#NGZh?GKNczaBa1hZYtfpd#D%Tnv}9s~hdh#}6grq0)X!GUwW?JVP>lnS@a zzg|6goiv$fCMM>4Y$s`Pm96uo-sIi53&}8pKf*0PzaT>}DWPljmj2F1NySIoVN1g5 z$OG>Ow9Zz$yvCTI(!n`95eibHPounZ7>a}rB3`S>k#%LSiG60vs6+jtun^h94C#&E zOrNxJ3@8E`Ry~E!xTg7Bg&{#X^`7V+Y{=sshBt{JXfZ(_T29Kltofte^neS=(+>?IUGIu&9=jtgqJ<^~t_a4*R%52Rpk~bxX zH}7&zAT`bAM&sIsaG7#8QDZVR`Z@m;itI=ctuUw3-vAq>uroScX*pL0vEq(T^2B!4 zgdEdXEaDd)af&1d>?k_bf6wsE`!>F?zi@(%R_#Z-N;mYHBCQGj`kVKuiDqG!lA8mU zrM!wp?)xG-o%Ilf<17o;Z;~05DF_x&mCv;Au~RA}dxcgIh1VTS3O=TyThY)A@^W^Q zr)M`Kco5-XS`%mHB$#rOKpb>`VCyX@45-?034IN>mF9EYvzKjvt=mFbbm9EOOhyBP zj~KTQ7{dKs@S8+g6E7^=J5-ES*DHdeAhESI>#ICR3XU5xp|F$NPM-DkdU}`$pJjfN z78h+Q|DugbF`J7lyycG6(sx7UKfQSqMUT>1CXDeYd3^oUXRcmF!3S92C@qZrBg06A zWvn3dxBY9@q&^0RWan_rr{IX{ujyLb<;f#H|#n8gM^)K->QCL!AEA1DtVFk*YWh6B77_SzCE}9QvejWkfnUe9r0qlaj zTibaP54zt-`>Am7>`sQ0d!zN^tGlt7(zGS(->I(x0)jh@Rz5Hpry%n;c>4~TPslH^ zeBaP|%ihzeZVo_s-<8HZ+{9Yhk5EX0GQQz~8DWQd@3%Mi1AI%$)7cF-1|+g& z8kG&rCcK?+4Z6u?Q%AQ=CDyfb)A1|^I(x0t``uxC&vdmQ(g7QN{e8iT#_*x^V2QN1 zLzV?arn9iE--hm7gpJ1+gNAHpAj}euOwRQ2ltiub+d+=6MZ5bV4x=Fu`SQ@SKF zgJEROo{PobvR$S0wSw*|rx3Voj47LkT}t(_+Y-^ma2J!Mdp~{qx|$l@Ri@J&@xVL5 zkt+o>V*6l{Np43l8cD@1Qe;GJdVBd7P&468zc;sEn$XN6-Ww@Ym-cJAtLPTKp~orz zt&8R*_uF5;TI^Iw)NN6G3n7Ae4&4gN6XOW+=JqQE7#2@)4u2fQT=YH<^Q{z+$FX3j~z%tR`XI&QfUH2+xL$DB@ z=%Z)PCnT^1ue-FU<7*yG0_dq)X8RXCo=Wtjx!2qNSee1uB%zcZ_m^6noO$;9CD;m| zY@-_z(8-%i3sjCEbt`kdydP_MJzH&!h07Pb?!cy&c9-pEE5;`b$0SBSxMw@{*m`yE$6X( zB4}>E=ji8a&);<&flKRR|M!B~^xWy`04)3m;LzLPtJei0dWZklgqoplY&se1|ESIX zeKACQLA@t!N4C`motVh;K#H4{Js+5vA`_C+UxnwMSo;j1k?L2tx}C;Gn_@RF1`GaU zrU(oN2Y`o%1Hudy0pVcr|1whqHotF$Xjs4-`DedMGVZAY1J0#Z|P$AZMdkJ@4g3e_w{mLB)OQ0DWj zYuqt}_!!kU>ZKaVT84Z3Fvku5Xo#g>fLDC+j3XKGc*E7`H*pB-W58qpokK$AEJX`7 z8!8@w9XnO65mU)Yw(FlsELxH|vcIxuri&Z4wYWcx-nXpXeN=qK<%+oA z&zaQiNQ*H~>R_F+sPigFz-x#btLt}i^Y_u6tA&DJQA$7B+%ZwNpK;V04@dTg5p|6S zZy_HXzw7)?TcN0>&o-^^j49R!2E{J(Yazh%_^K6}hcz6AG)X3oV4!R^MMv}%JQ;<4 zAI#qp8nX;2r zNZujN$32&Er%9M*aCRrQ2;qt8@JAn~V}}1hE^To%=waWZS&fFT>=%V+$T@hUwZTqfk<;ufb-N(SUuAh~qsAN#HY&lTcS7xFQc&3BJ6zOB{Q}s!}yXHmZr&KD720k2Gg9nKm+J`Z;yw=`t zYbdDnedQCo8=Ac;Up2*K+jC=oT2G5yS8#YB^ANCtUqCrEzZHu@k3b<+HF@)Gb;Y?1 zZqRX8-^#C>Xf9L{?o|0dwJc0N{}ua*dO z(=G||tFO`C=p*j$|J@lkr3HyVAHynMXZ+|#+LHa=uGfLIA&FbXX3VeWC`lHREu6_H zhOtRdF&tpF^JXa$OJB`(DeDQugKW{997h;zeG#+6t#)xiR_cW2=Po{EXNd^(I;n|U zxo>3PO6~AhS8EqGn3oX)2!?^bN#_uvoF0u|mHHRK#Wf3vZOWa#k_w2qrr}2ixQYvi zW8h1EzS{Un_cr;bL>Ew6M9?u!qJ3TaqYb$>A2&QhZ@|iiK`Lg^vrHdO3%LAC_ZB(2 z3{Kb$^59~TL5qK{1eka~upZ%~eaJZq*{Yp|q3yD!N>4J@DizGjDq3uFyfm%JOzqK7 zKgg~mJds|lZ`PkD8@_t5-;(?IV0FtVpydMhp1p;x#tht_6;4!-bnF1cB zw3-1qipFWJBls0>rJb_z?1{?`}vb3|dH(h-QDWtf@7K|9@2Gph-z=>Zwth*b!DHmT3eskV11>ak^m-^jxLGo5KN0AS0hH=(&ezn-JY>4^icTF5rlK3xBc z42oz-iWPm;#lNr&fMh772p^zE#^;4fz;oAfN46+_MG;%LDc^tXY7_+w zK`ikHD=iOkPlCjg+MAGQ1li=8OsC#c@ww`4rBmg7)9R^!!^XV z<6`{*M~z%|tbUw{fC9Z5-<%6@n|*G4qMufj4qG1|NCP> zGFhH!uON|R&v7R%q8o0pO9GAApp=q)=#`K?Tmb;EJ1fHkfl~yq70?}yjELw&O#w(E zfl+w$e*xX}nGQ}{2xtWL7$%{8nHFn zWhg1ehuJawmLAQd+M*~rS0JB6<_iXfp@dNcG6Hd#C0i^U4Y|&SD=nl^=O)6Kyc8pq zJ~BXu?C)$hPqznj&zFB4oh(t*tq9qw|Iro4PwId7sEEg)UMQuS&t*N)d4FNrZ9f!8 zDAw(Nd-Bi!cSiaSP&`zK7p>hy%%AXWHBy&OURXXHcSF-75F z8?24~-H5n2LIQ!8HeK7gK|?R+CX%tSv9U|ISw;*EjbIWI7PK|ITzmkQ96DrUd#UWY z{ZGeW=fc9YSlGO%)XVYT5m9AW>K0vk?H#_x-JLwiUqB>}8MKK?nvK;T?ceqbVAt;n z-Pw&8y7{M(f4cz7+1YtOi%a}B@85gS|B@3I_n&M3o9FyW0`?>aQY0jov8#$NbZ zW`gY9t?ysJDQth~%#Y(0}>_XJHwo?}&C^ z&%qLlu*9c#M1KMP&z$0CZU?upeBn#H*2BlvS1aQ2&u7m~ zkDni=PB%})o8HyDBp*IM3_Q|bMcupXidVm@f&CG^GkoU$C;RhNIBti`Vj=-bZ*u-$15xx#?0u;$)6~Mq3jnD9UAIoNYR>5yA2Iys>?5bfDz%) z5T~1)H5(j+O29}HtMPpSAf(q~XU!lk4wnCKaK{GAmGfqE+>wz=Kso#OhDKf}=-;xJ zYivr6A`&L2{dRLliP-u6hxl#Up;+29hdo19EY^JjjMa_M8ByqmSy`M=uz(l2U%uIn z;@|)R=WkJCX?LZbwr_}tf{-fz0#Ny<+5bbyJI_(FK#)2}k3>zmAWrL#z{}vA&`^yW zS28jtx7dBcy54!NV=*RGkO>y{Lzr)ihG-*E!TN1%Y`7cA^ut%qnoa!ZW~i6DVImoV z)kF3U5!V(jUjTL!UIMAPixpDGdvjT%UPg=rqb|#R3Wgu5c`w7}^~_lu6`w&$rDmbN z-gi2%yLNgo0Jh~fLrS879;H^5`~mHw$A+_inEW$`nG-fAYp|_J8x{k90jY!CV*4&x z!L%-i*<=h(!t73~CxYBST&Q--(6rfgsgJ(Y=Ov5>0#O?ex`U7=u?&b##BQ zA14*@8x&WDI5Jc@H$6dw)h;4oc|O&1K^KB?yE#zk#MWu}et`fRE7f`gWJU3Q zKX_Djy0ofV05a$}0=O{aj^_)7JPjloQf-8bdW8;RPJCUI8Ova3 zM!~Me0^Gc|Tt6^L?ulY~tLq-S<#+O*Z3Yd@;GU`d_pkeiizGpE9%{KEiu+*s|1DW`1B&gIA}8gkxgS9UhWE+=ITH4cNQ2>8FeG;9EK5kiw59vFu}MAT=UU$ z#h!hk6MR1q=xQzzT0^Kut*M0$al88O1P+9}s*6x!A&ca@4BbwVlc(mh?;Z3Q?RY?_ zOeW@>otV1tox!iZpxDL4MYr;U5EGXi*=E^hoIxcj<}T=D9iYn43#;#L7Ngyim&$Xl z)daU>F-Ga}$&kJJh2c1TzhF*3><%OJAL(WGRIQ6kth+pjpa!OULcKlhf97(=a+Q3hA z_(i6e+fyKn#7pZ)TY6^=C<*ztYqKf>#1-QM(ZF>uvSL*fL01rv?Lo5|mY62_S|?5f1ErH(peLbKfm??e2`W*;nUyk_PA-P=N5hpS@3*NiU2 zluj?Vnx01tt|XXI5iZj&(?A$iBCo@<1jF9DpcpfIiu zJaE(doY7m@SkhTO{eEAdNM{-4bY$4s9sotCXd6^SNtJy96+99T_ab*?z5#(cWF@}b zd?ca7gL;m^|M1MWxeaRbkE;Cl4SmDLUeI6xn+##$2{Rrqnn#v8o{1ImUf?f)jf-ee z+!o8ND}~s%StmVX20cT9 zXz1b9-q4e&e%n(YXLvjrT#qY+0iimA>0Wd7KD=~{q5slRu57SAcE!_dXYKNe@BUJMWkGNAcv&A`>h_wooYU z(W)9v1g6&q?|Sn%ijn}r2S(>Rv7qIl%hPVbJhNb93I!|VQP*DWKHY1|$!o!((HIT* z(@#SX@j=Dn^16d0nR$v`muwq?Sa{(?U0ain0r#w<+vRH@;<3e`ZleK%LW{x(f(#PW)j%$MwQk3ZmAT_=iEqi*9 zWS8(t;~u9(_|pa=516bdkt&R6k$S|UssT=C+9R45pN>~j*ptY`-|4f_D4LGxTK=S) zGKnyb!C8J?_z^;y`L~ZmsoZvesvXROPYzfcGVa0e;V5y3nI_yd`#YIpj4_y##u)ob z=PxEPcZ}p0tg-?~Hv~mWwHHhm9uQxL9h2c;o9*FN=GFXhDEPdZKGA6}L^r?h$vaAB zveKcZEyG#+o!-UeK5649ph1?aQh}LyV0@RbfLz~os948C*DMz0Xij3m*2Oo3J~`Vw z)FJ)Y96I=`#j<;ob;GIk!f=~wh}kE9YgW-bgjBIXWf$k+t`u6hhyU}2v$6rPC?KZ9 zbBlHtnNP%Pll1^RVxb-!EurZVOTwa4xUl%S=#Z0^t3p9bqZ$!3KSXQTsq=t`rS%^a zElNnn#_|uwZ)^L~KJ$WVtYL^8hRLU41BU(l`d`HSf?HoEf7qzX{s$p^hULuI6nrWE z{!eY#KbD~p7`TVw>^MU9ne0~*Hy@&=-^~(T-e46BESTMJ++wN!bLhmy>36 zJ*EMJlEFWarKb8xk7S4n zD8!HEpU$T9gc_k{yy9M0M#Opp4P{Z>sf^{a;)pOh!mBHK&v?Y76r>yUczN{AJnNRr z_QW5CFBhKty)W$ZlHO04a+j*k4eelw-_+*&-(D=$Ex{HR^aT1|4L~{O6H}fAXWz6Z zQhuj$4*GIRA?kmBF!e>YW$}sn&$}IycK6ejCfS5WhKl8I*B>fVpa0={#$T|JE9};J=Iz}Swz0P2UwLyfiAhDVq|nL5)Ko^0vmYXx01utB-I=cVMi-e9Deej z!^*UBozfa@!3=YN0L{14W6@N0D@2*$)%}Yor4ohT>T*ALDVXwY00AmTN?M?{qwN}J zccTbdQqSl!Dc{yer;3n5yLxhcwxYO}{j5Dr2w-TkRXF_(9==Mhoqm_c_izm48b0_6 ztFpB{W1)hKJ1yTNgr)!zkz9p~Nf$aeWw>&lT_%(;_^rjffPPEYKCaME^8ATyt-e6u zMhhUOn~m6kYfZvni!THTwZsc9V1rc+8|Tbj@GIqT*9gO18oGlDz667!F+cWLg;TGF zaD2R!U4W$K7H$Z&46p#hl4L6a461%cy%-m0#7aRTXn)A4McbM4cpnXaG>bw$gnUPR z1L3bwonj0;y{+=0TW7G(C(J@?M3mJ51vA|qW(0E}qhcVVt&;EXxx-U$-_Vj%lz+bj zF5eFR!$r=x1%Y6IJ(2KLfeLQ8#x^LTz`&qR6?Ky*6+j9(^@@7RgEJhGw4L1d^+288 zD3Ol-*(zOz{u@J*2Q}ajNLHvogKs1uxZxP|%DAyxLH>R)sX8nNX~3X^q~6G7l|v;z z2f&)15&bP?aqBR|bF0M&Am!Ifim*w?ZDQ%%x=liNbK=rJuRYSugwz8@J4UKRE;%XX zCD-#PU{;oy4gNXJH<3XcA^g?aYZw!^KRH+zU!&)0?Krvclo9F;z>h{eXQR_$0&rg> z(;$p^L}{4HrNxCKFVKUhp+5ku;d1~;gIr&l2bwgvOaZxbd3z(A zWUWAM-Toz`-Bm@JvXHDlUY%gkUR@SM!IZHSeGekX%Bo0vjVGg zL-6tiXOshtja;Jh14G7FYAnM7QnsZbH2X#>@x79l}HlFm@j{8HrUv z%7q00NEq6?m;#Y`ID`PbUN+mI=z4WVsGW*OJgph3JA7yfsuM?ki-QahPbyGA0dY>< zhlVBD=-Yf=I1|eda;iAiFXcfYZ9s^5Ra6g9SX~`eB5~)#bGUX{N8bo5ZTHtM!XHW- z2;7$X6y8CiCu6?7&_tQz5l9eQ7t-)#A34cL=)~&o#w!GB!UcBZbdui;Ow!~P??--c z#+*JrqzNQ}*%W$dX>RB#QR6rzX_5w>iLNt^xO&fALr@OchBfISd6vj69n!cdwhIIJ z0J-ceY^ASqpq8F68OCRjy#Gh2f31MY%OpMoo2MS;oXnJ$p#?*s5o5vrAw{0s5uBv* z=)&&-6DF=w8B)Dy?n~9kvvL?bYD0rcxN{q!*K}d=F5eZadW^Lgs546#Gs8wv2@=dV zgw7z_X7D$&KWu?2u}XNthXdi;wW762DHUq$3eK`oBt`Z}j^a!+GVNvnUlL=xfsgg< zwT7RzP2;fFDBv7e!}dP)_GcnPaA6iBHb`9+-879cgaS@~!RMXs$u$}7rqiT>44W~6 z!GcO*@Kq@2COODirx?Az?YRuHJ%zsVH1%Rb2>ic?4RwoFB%DXioqHkU+FjpKJ=VJ9 z*}1w#^NbiFedNn?Q1GbFLG6gzq@4KsfYQD$OIh!+f zBdldNxdS-_!4XCQBR*IvK91TpqFatWUk!R$I=xOqpL%=Y!$TY$`i4R^2@}%s#HG-H zo03cQpEs#OOHS>CmF;Kh(L;i9r7dET{#4^I>OgJ$eKxQ@F~%LB&0G(ChFC64-0p1w z?6POA=H!_HNTi(Sngh8kOhD`Dveeb%a!HQ@{is%nE&B;*B#W8IskzyiZBYb9Gohgo zc>0e}A&6`hDg2v8FEltIeHP7{$|gqmwV{ONOeVax5O=bUXO2rj%P1Nghl*mZ-XDZC z;PeAlp_`in!Hf8y!7a$(@OnrR%0N{1fpBgl0V$p7Q`Jjo!|^(=FT^gvxetws`O_bn znZxdjjgTX3S50d{=(iwKE$JI`GMgG)DFinliv~@SMrXmp8%Ht+ zDp@FeA$lCtf6pWvGOV4W31hpU0=6Rny>ma8nZ%5fIa>KGxAbzJbdXju5(ZJ{rh8X; zV-8<-+(U{aB?vG2dZ%yR)E4j|8B>UJ8ivS`x5a+bYI3_MA#UJiArFMr1v3cyOj3{n zfg!^}iCjOCBxdQY;lq8xGzt^}yn#Q26YE#CqndJY)Zj=!(`&94I*dl5pD_Lc?s_AG zpR^>V>j!RZal0bKGX}ne2fHFn*s%W0vj*scM4-8j6!m~atfkz-VR2^N36SJ8tb?rZ zqF|1CbuDg>)s`BHnG{1h&}omS_Yi8tOpG?K{$PN*+cYsRD>(uK3#$7ZX9ZkXxC97q z`DgUU>Ts$FaCrF8CwRqnYr?BEvDIZ+DjQsO!9ky|FeUg5Z`_bF&JWe7vkx@U%{j$s zQ+d8x&_wOR%dPm}^i{;N`_T2Zn7kC<#cvXoqc)TeaX&YU(U)*{D7v5kdT!WbJrtE% zw19~#6A4}*oN4_-Bi`p^mHeNX-yEzn zQy|9KPCVO8#@3OyV?8}5iRLYBL1Y5vDzUg;22v+}-L&eZw%w*>;ZH=gIo5WPKL2%s zyGVnDD@{@+gbS|9d(t>fzDe7WxLMTbY&ySSAzyKlaDP-U>V^2U&=D0w%3?JXkEL}L#*f5R&tP*wG@Rh97RefHK2w2~Kk=lrZq8)xWjJ(2R>o8m zyvH=)SGQ${sy>7|OsGn`7j(}i9apcLlOf{-ENjuEx)C_Rb+@*s(?qTGwuDQBt|r5M zf-mBakXfrB$VM&l1^QJvl_98nV@$0k1Sfjvyu320i3L$Wi zXj{Ue^BQjHwhoTa0;;OVj#ka1OzF?hCo=(rh2#{JN&QNO({CjMCQyr2>r1A80j0E! z@pzUpp@+VGlcSg^d6?c`Z7T|zFPLSw-^BX>nq^x{wmWhAgNq6mcV$1*4-oWn9L|F# z_n%A8>oYhyK3V)q)WX+*x@VYoElzF~8p`q1z^VNO2qfRWum?9VX*=vK{Sr1_@5Vs@SFF zA`Ud0t1+p^I@Q(F~;Tq<(bRDv~Taj z?|YJRITu#eoXedl8ilSh@G>t_jXf60Xu=(?&w@>vWfQ~v$^}>BvJsqI< zku`Qd(>4w(9I6Z>FFMHpa*JR_K&}q|#O&z-0{Ub!s<+lFof!BAsX{$oc)71OUat^m zZ$+@bHhy4x4ortn@#isIMnxRA5$9R2Oo@=|Q0f7PXsG}OuV8}zsh@8GvtM*#<1j|>g5V$8es(na@c@Kz z-*jwj%rD53jpc@L@q2SbHW-V!dkePD2YGC?Us_w?m6WNhC(L)F459llj=JouTvuv| z!B8YfY=2i3!#r7*y@t(+BRE_^GW8pWEhoELWo&#hQ3B-rkr3}Jo+gA8qcT8%Ef!ym zN;^H5KQHvtAf9So#91UMDqaa50i*goXM#qrD*&^@IB=XmQ6$7pCNUl`wG7h7e}wNQ zZb{z(R}2<;JWG8&_Ww`~)4To4-}V&sGEmvx=SV0p8;QzBh2N)H1b9QRq+~zV%8T$% zzF{fx-6fq2V$D+{eP_vF&`ohLx+ao(8_wtdI916+PUXOg!wx6J1oCMO_C}Ibtr5jMEmz`a2eUcilrc@H8_=LugG@D*J+~NVG{C!XxYB4$Y-k zpHD6Zb=PD2QIq!*5pSWB-#H!m1%!(fT=Ys0^Q1}jqP4(cAtF;%XeQ12QQ9kKosb6a9I zbYxoWS7doCL&nR9^{#PRF#TEg7DsRubiG$r4Pgye(1f04sH$Kt~LC%NJ=DjS~`^hU31?>{p*#BpfG+L(*A5M&C*;0=?D?}pR5SjwEP)|*Ji&-!Kvf{ zcxZf(?c#_o&5Esf2(v=mP4+@go(V#YijydpUXcbOeV*8oYI9|g>_X6_!vTB`9Hl0q z6J@>D53TiJ3}pF;NIjA4y!8S)ZyuAL3zBbQCXI?lv}fhAP6N=@{$zIggBgLHEg zj|xU?M47_a_51on3CU@^A$(@GChy=&ohAJq?(}haC{>4iHZz#BJQMD<8D~GUb~II3 z269Yjxu9$4d?|~kHo8Q@S9OWQvQPw@=C+n*hc(*y{vb;^9gI@~0L)1?5oS6@C8zxQF|uH^bH&~U`1%c38-{%L zJcMYMg90T;^s7 zT3^MF{0n$_DiVI8YU&S!)B67`#|Q%5UOW=Wz1sWI^ftNeLwV(~)d)-(+yGND!xk)z zJjGEbU2m>@ff_4|qW|-e8LEMu83c-pTX=VBK=v;4dEx=Sh$0fH@I}H{3mcjGZ7(g~ zy8PF<>iRDO7sgP)iwKK<{yl3O6^1h_b)04dm}k9+I=rSdPj zKwL4Dj|fwt|6gVR;V+Y(%>eL7aK|xGg;9mKFlAlaHf&wc$T6AU`XgDcPk{d}f^d-c zqzNsBSB?cWD#*OXi4Wr{#4i8=86bfTmj3qBV)O8aU|ZD|?4gkrGD z^(fH>q01s0jja&UTMKGh9*tf1u;2VYY(dL0*E(@ z##LV%ZgG^PG1EBWk^@KLV3>-|h}A*f1whOrXeb}nXGj<}z~q2;J2G`Dr6ddKTNuwq@k`|SnGcG-YX7CF51YD zb7ZECyp)P)Se6@pgQuCVvKI&ZV|7%!LeU0~2`v0Ah+47o07pn2yZ#H0v5qc?2^jbT zBUl$1KAE}ytl#YJ!>=dS$ovyr6)b>0m8jy$+90Ayi0&*2=4=%y{P1#7im1kSj5p+o zeDXY4G=dv>xusfPJejrmX!{z|g%=AYJcY<)zl0F6Vx_HRf3*webWl`;q%?A#3?86= zf-k0MSLUQgm7KuVqfBVc1AC}R*oG;lYwt5mY{ zzsDZ_+@<}In+8~<%-r-Oaa0*sDNU%9Sp5drQA+l@3Jy(|fq+jf-y4j|_z`4a&v9q+ z?5VVQ&J%>kA?r7un~$LmWh15U@ww1lNbO^UZ+r-s)OhfYrW!Lsj{ab7-Z(BA&RJaU zfv4M{eT>d0L8`w%Fy$mrLZ2N*XiO%@{xKoWYs-F27Xm> z9juM4S*NcqIrmlf@vGe_vjqGFzO8FXw4?@^*a?()kx)_a7ls%afzOwoABaN;8+Jq{ zB7EU|)fkpnNS1Q+^-hWK%f{+?UYrUmzZhtmNRRrXiDw*wRT6(KEYVfM+O98&%0!JN zjh!x5Ke`GjMnI(s_=&I3Bv`>&lLWVgc{R2${cLIOg7-Oi@;9XB!yr~Gkt??jl!~QV zQui|a4yG#b!fR0-myOdE;Jl%VQ8`gYWX(fNha9ORsnX~(Qv;X1uQnu|KYE6v01^nY zSKP50k(D$Q{4V=;pX!i_bV>493OZJyizyP1NIi~sPTfw>TmoF*4U4tW78%6RfTOQ0 z_8z^xBoiITgd`0zvWd)D7M{AmtYor4DD8p6CnL@b8Tm0#HzAX^jlW++_B1HCskZ>3 zGp!o|An*EE4K)5944zHT`iP#+fTE|tPOcPH8-rPjj#u?&1MBHw1Ecm>e$QHa4{@DJ z9g=Nv6~6#5UayhBNua*@M|`hz$YL70GY(rI807o>=kwb^kr)&HnW&{op3-{Ys77VsVtLMJKOr zj&+eYjjYV{bjdENjMktDoDzWJiUV@X=h!eq%2c9iJqds z*O5$K-@>w}nwj-CHC`nBY$X>207M{=Bp!s9uZ+w%kj=ZjnxutP2YwSgITtt*lWMOs zLp!bg%2i_!CHu{UCVo(AON8nqMzcIQ0q|D|E(^x4pRD`fUE&%q>iqEHTaKNxK|yQ| zyc{tPr^bo&V-5-~z;LFtQ*~IXUgW~yFaY9*Cy90z>$h2>;o*bNdjOqp5|Fu*p5Lh@ zzL|jd5#Uv|m2NcqBKD!C-R`U>8fNAwM(Ci#tU>})u%|Qp7`sw24~0hRNWg~8y_{MB z5RPGa{sGNT7#1p(3qiEJ2hc(;Pr zrS=cKtvS*oxwJxGOi-eCmaQR^&m1^Ao@fwUk} zS0)aotOBQ;iD8e~186!{N4?$#}UM3boR~2?fmuPx(6+6u?V@N@Lus7FXf;ElSm{!0*&IU^J zqO$bS2r|J3Q;{pJ_{3lGwx#S~H*jKNaAAGnTXc%uq7>2!*?qdUeHtq8H?C>dCod+C zXtWiWGb2B2vI02$P`i~Job+-@vJK6$_6fbWDDs_P1kr^3CTY@$w4jwK6t9pU9CteB znxt$$+&9LHP5Q@X8--nKD)bs_2h6XD4zZfEnR7UF$ae;GHL?6H)x<3QloyYKn{b>= z+3E|O+VHe`69h!eoFZj9s3Idg+BeXVI+lSL;UD87%h1tos*8|Zz7!11}QF~%mu>Og8ZHW#@R95fQ2BV$D zVbiUYjrr_iGs%3INWU0H&A@|4apC!}%mxw4*R8g${_LwQ*9j!wt{P6_XJak24Xij~ zET44p6yJ(#j1fAzKpXnLd*&EQbF7v>n{_zM(D7Ch(6=qEGKAuzT+z32a}_>P~?!93#?3C5hnpM5v& z2&P4_Q|pP>GTDxx3fKUPngia7b??rmigx-5ckS2sKp$jTC6zN3}f`*PX0YR!r zZvxVhDpf#0ioKn4bI$wS@4aK(F`mDB>>qotXU($ZbmV4p;GTozAptz zOhv995M2~4=KVDcId=2oEI7Yvd6^B@ zhY+x}77Gt3zRo$M0Wc#08qo`Uwm>^SgtxMcV@JIkCc08r(}?PQo!k6KOdV5(eXP0X z2QyjHDeRiG0X?+72UQ?>n~~vd0w~-fw&!TD3B=FC)P;l{n9yHny`#zJK|Q`*08=)= z&h$8Za4<*yN^N%j2B{Dj2;`u8V8+vgqW4QqoxuReFlAV)tJ@&NG>o%~$kC%9rr_45 zIpLY1UV5q3>X0#+{Y2XU(F}kO9Oei=W~Inl&})3CjFJcpGMOI9d#8f`i+D;iajmAZeI$&v(wo@5xALsf3=09Ce9C6%8EU15=>&WsHjAg6rtmpzD2;4` zY4!yRiQgaLqYkP30LE*@s6!r>Y~B|sX%c{yb5g)SP`eu-3uG-s+n+6+G-&BObfC(m zom7pk$I>Y=@MmpQohYR8jG`=K(o1+y^$}wA?qQtMG}POs(ITWu3My?>(|qjn;(7;R zDExtsjAsuj8G$vs)GRrA(~;=Q?VNL?@X=kOH4kXUT23QTl(AKUJa0{JzVE5YivZF9 zig(2vte--U%6!)%ZtIA}^E%+-v}_SRh`N}11!ya=P&N@wvI6lvPw2B~SA~Z8VclIb zXiLo!vkE0&qP(Y`3Eci>$uhAOn6*KRgdf5U2%F8fiuB|06N~ig&%WBRzF1b#*l;iI z^2eI=$DOq6h&KLFW}Z<{3H0=>?H@wuX(yUxF;Vzb$Ghup7(X^5v89Sr=2<|0WX!B*<{%ADYk4rvCztN1{!r`ea1@Y_oD<*em+5jOv@4ietZX~;wG1*?)p&43U$>Z;ohGEg|fm)UdB!EO9GT-{W!-|it3J} z!Ue-i#Z~9Nh271_fz- zYCiwU-deIHDV75YQ_A5Pw~1Z4YD#lBB4Y#8nx-o`Ni*p;N4)o-xo<0H|XFGB34#k0spG`Ey2@iQ7a1Moi4 zr!%>E7>)e5+gT9vgeK%^qLjLeOy8}asXIu3U1ZRptUWfun6p7x~Prk&#v_A3f)3@!pQKx3+g<{N@j0>?Rg@fdg%+Ycjv(Ja;m z`eE|rWUy*U#XEjZ#Z=bxDHc70c%jF#f$qwH6-A1C151FkLYH=Rj%sj^s7j7V)l!1C zXfCp6t#~(?!~nB5mlogGUZblJn&DVA06Zh$YhB-K);PLP=twqU zd^0w}=|8Bb?e^o~f@^~QeM;k5g&-q^wOf>D@0f;=1ywt8+V8jpEGS!CB#XqnWm?vs zmhV^1XB{YoTDq*Xx7;4#DB&ohl2;V=6|j$rsj`K|Hambvt_XPYp=eFi-6lIZPMiU=y)=QVeBGncm zaBYe<>>Pj>qyV3AaD>`q zKGcTipw=D(npZwG(CDh?;#{7$g?s~@RA_tx0-d*ayYabU-n~37{W92xK$eXq%jOY^ zV-($JA&63;_3HRDdoluHCX<~0ksL{pUYTSka5VXv(-%xcj@?g+aM(bgTzi$Cket$s z`&Q9jl}y3U{MuPv@jr;D;A*;Nsj*PSqiH_D;_bI82=Zc_fR=M%(!$A+W zxivLiSOd76Em=PZRVHi#8Rs_8PHE501TTazhW#}NHbO4HAQ5am##^IzYyx#o_7v?dnz=Lo8?zAqBd_w4d#rtZ~XS8y*9ke zeiz>U9hz3dx;|{bKVi+pOPn~DiS`47^qWh&%`zhRZjPT27ArP!{^p|?3Uthd*~y5C ztSg2wn&wOJtw$)Xf_Df7zKAIhM>=q~ai$oq128wdWnMv{s~NzIekD8|XI?c_00(Ga zgW+WcJ`!_njI+ZoWZp5{GJ5S3Olzf>5trca3|+kXqQ(da&%jI?_JU2mB-})%r3jPe znq4Q@?^f#yfM}Cx+dVnPQD|~+B&j##=QfnGhEY{Eo3cTMnVAp5Ha6n&kiONL87fYt znb5Xo^Tv=9r8?rC>Xtatg?-=h5-bKpfMkei910Yx zw`!Klckig*(~{#r5oJ?7iEu{EaJ*ou~9ioa4wr4nb}CmP2Cw$i?( zS3ILqG+JydDW|2;F3=4hQ04_N)7QAjPc%M%F zLLu`1Z&8u=6t&3_V0l36mB-%+%7v`alqJWUAe5iwTOjB7!wP$q&76=Z;;S2vU8to^ z+DP<|gMYySch#0HcE`jUv$UA8_S}g3r(D?@q(~l0zl2Q1-!n@nO zE%)y^zH;N%YAim)ZW#|%n?#w&$TZhMB`16*Lyks^!h`JP4r14b?D^Wnl{OIowMVL& zB|OVdu6_-!H&OUy`W!~z?r3r$ajjE=Zz@&B@uSngmH1zS2Mhw~W^i0o+_51mz*JGq zV%gn8wqf|TrUnHrbX&S0YC>~icQvOGBjW`+4dDlz95b>A`)RKIoNu@r7L`-h5Vt{i@c7ObUumY6HeOEQ5O7@}T3nMWeiz z?_FtaA|WYP@APMmxMX8yb^UiNY*ppTy})mot$6AZ@;q95BL~LrueLDToNGek-Z+Uz z>HlI=(SS+GfusB%+u`E}E~c~ni&fzo%1ANQHf14jRLrDhjDa7C)U$0PtpHSVR68Ne zWWyBN@R@A_VFMgP0bi15Dh!zSY}*t2C^+I$_T1m>CyJoH)BB!lh+l;&$H6`PNb zYUsNV@))Zc3M2sw1{BejZ`7>ILmiRSa%oWzP{)J=Mgast*0;gi+Mz<}B+9o{iY}FHfOUegNp@Aluqkm2~5+>mssMLNzEp zZs&U+RZDkz)A}K$>M|0NV`A~?V&lo@nJ2%@jc2>}357gUe*=`eM3o%ngVM~3L_4(2 z0!&w%(#*I{{*sk)RZ&+`e6dmPJYYJg%q0~Pq!N@-D=iWP60gC z*`m^aZu~fC_|B&qD;DMzSXq`Qv%lLuW9wFnQ?5TaLQ6MqY*l)zNcuxEAzxuzWaXiN zY!veoPtDKotD4757Ez6Qa2t~9;fG%w_kZ7K_`W15;kJ9oy1;s+V$YSbo?}6?^78TR zq{>iZi@U`qgV90PG2NVsv8`Hf3M`kJP|`fU2!H##Xf3)a-!XTYa}JW;@uFtmnUcy1-Ez=RxA7ou2!Yf+z7!5mEoZ9 zeo`xxGNP(Ku70t<%v-LR8^GyV`T8KJ2Z}X(t#e@i@@zTjB>sfO>wO+k!u{j72tn2) z3VkzxRSiJ2YplcAoXJKj&%px#F#*w!X;By#4fEvDYx~9MC1gw5GAHWMs6sd*P+n0= z5i98Mh!7pXBh9A`_Q7tX!EQ7Sf=f0Ts;>7 zkcXk!$r=u0Vrt8#+rMxGSX)r%{4rJs@GuG_)dzs%p%~>E;np$MP-^b~Ns)c+%ukLv z)3YoT_+qLT7F}~KL{&D!pC_f~2!+S0R=MHSK`S0Qe94KW-W4$v(BwGd1CE5(F63cB z4@SM)6xBOHj2!EA_9YRH6zQ#`yNC%_1gSo<4ZPB+oI}+(1=j}x%;(=6(g%%#5$AXQ2$tY_0VbWU3D-3RzNuYj+hNnfz3o1iYX{BL1k`hTG{b#ja^L2(_8|#j0tpc>J;gpb=gkOhl3PtU@rEZG9#581ZLXQSfKzFN4mV;Zb2b;9cM1m<>Eg?m56tWObswMC{;9)@6R4m za0MwJeb_FMydU-8FT8f$#(@#1&iT2mT|@|LnX($tN&{kF-f_s)fr{` zQ2zWS2&mW;qx)c5_(4zv=P4K61VJ(&YB}dgiRZRJT6Gi+p1-^BmnwTe*@eW#3ZdG@ znfT+07mqw`3-gA)mnzUO9dK1L`XZDB=2|YT$~kW#AlV^l^^iIcASsWwi;qkC%tE4=4vJI*;+TNgK zHhM*mW#x!lwJ2QD#6bN)@XBE!Y>btukg{V&a0ZVH)Yw1$ul9^OfWpV17Y5Fsq!a7Z z;-Erocpb;~ho zfm=GSAfIU*x_*lqD?}qgZ_!NVdL>}>tKJRPi`*g1!+KZ;#h(l!qbfBj$_Ha8<{v4} zAR*0*np|i5LyDEaa%7=je-+`-kg4SPv?L5NkOG!l4K#ujOGxZ;fEq$@qpClGU`H6- zu%PhLvl}tpD+hjKCF-F{2UgUM`Z49q)2W8W+@8?f>k1rssKjc!XzI{$8SNM7q4DiL zfDaglE7ea4xi>3Uop`w=JcavqPc0VAxW7~ohsobQbR6%kU$U<~Qt*8TP)%!_cn@`t zcEg{OFI#gF%o5$FwI~1r>etZ7u8|*W&8VYwmL>{VnO$4hai3YS)~3s9;TJ9U&k*x{ zo`HWjWgBhD9UOc@m%!VGEPT$cceOzuVY(9Ag);ur94FvE5y+m34`S6JupKvEZG?MR zIB4RH|6B@Cmt{G&U)4x*{BK_ek}&z1_!#=R?-^2mOa4Ohj)|_RbBGeIm04wt&e4M1 zT^q?F`8QyjE&&aCz_em?XMV!^XT&%q{S>!==?D$qzSqb5J)%rv6~8-w75yZu^vEMJ zvcyFu=-w0lf!gx>WTzS==5Zz>P&8w80{OlVkX%AYSsMP4B6(pF-@il^n_olvn8G-& zi%j%0J49<@t$eKb6@z5`OZCA9W7h0n!I4mawXLG^T~?=9Qa90Sb)z1j5$@zZnkr{J zS9Zvzj9!G-M*8sgJld@D6sK>4^R)@$?*D2YZpP8(({0p>oe`P^5?-((=6FiK4n@|$ z_fUxlC0zwu(kEybr!sSc3z3R1D^@sx%C3iAC@cWg)->Hr>cNMI=-wI;AEPPC7su#} zb@(y6&>w&2E4u(gU83PKg>vA)wScX8<;aEHCf195Q_DD$CCA2u zTUx(X84z2>HrCW64?ZDmU{sv2>gTZ??Tc6@?H0iarH}qSW=n+mU=!jykkwZyB}n5} zW_ZX#GE*QD3vpr|GYQzAjmQ}NApNY>2g;hLq}um>w+{47KM?I3(Lh^^msE@`4@^lb zyH_LGPl`-pmlvVehI@RDzi~sHcloe20Fu(n^_JghDn$S(w#;t88cOB*{t@#+@Q+S3 z4RgdUzuq^SJWOeA?0S`c5XMh~*I>*tl6nus39;gi4wsFQ+Pk+z$sleY%GgGhQuF%F{jv;1EguHilseMnWjRCUZrNQHy$axThepT>z z`UyiAQ!*V3ybd_jOWyygfpY^Rmr%C!6mjU*#_x*tR=mm!I7iXh^(tj04%zcQyK|24 z`dfKCFTr#Y(x+D~4JOQ^T73bcw2#VM)a?t&9u;NY!| z>`Pl-wb9~1Hi-17iCNfTMci*4TFGU$WMp6HpFF|twNSmL*b2G4zbNuVtCobXts^H` z{q{I(#1+2$rZ24wudY1&b9u>YdGmh3L8dl&3>5J%DlY>6V0*w`MVzh)2IVp(AxuCs;c6G9+~i+#M(H0#OVm{+FO?{i_qp<$Mr z&TL?j(|uG7{33tO&*+7@asfx44t$8_$i!u0Is4N_L;XV@?ZU#_kqMQtp?m&QICR(^ zni==h*e-{i@spBAuql_E60+m?cDHW&k3mxqAY1JuTAd&h$A@0VwuVG!QYUAuKHoGhXVtL@U^rGMZQnAyIiyxy#dU+QVpeK#Qgu z+RT3ow93HN3*Io$^^!%=*oswWL1Ls?jXMmO5cmY1Evwb=bU&?wm%uxn3&-@_M;Xs| ze4<|NE#=195umjEr!t?Lxc+BQO&N{+Jmk4PKlDcGlA>7xM+=tIK z|G0F*&qaKlG0k9+KtgwOHl%u=d2U7Dk$J#a_x1`7cyj&s(z~z)@TJ%1>tDzk%>O91Z&pi8NH&{tr|^#0?LQr&1Hgd! zyFybGTV*!`NR6I!P$DzYkekWm^Y&xA%r7v(qoe={e@jk`-D5x-G7Zf;S8GY`9Bi6{ zc?H>EC{fiu`<-6RBq(c6fD!c9ZOPaewHPBZZO$xp+M%U_%XL$;Ji;nRcQCSgy~NG9 zMOkz6=487n6Q8#%tb(yg;z*Z}-B-B^*9ar=bF-#7*l`poprgSto)<;~QPf_7^mIUA z`hz;)%@L&F%K_jsr>7(5ov-oinR9^7@5VoJHj0&&xY}qo^}r>AXEHZY z{c@s4qM^pxjR)t=B_D%I~gp=pnNe+Q*=7cIJ9!P}kZ>)!*E*x0}oS}QSk z2m9oJUSxPXmj$BJ-m2e{fG~eqn(}0 zT85g(*rroP6;6M48Rh~H9PKB6{~Mr#=Iv0TP#jOUcj=$isaj9Hh?7wwVu-EK46Vus z_bAOM%{xIq#M)GRFadC35Po|LBAlJhvIb{UfqOIfY0y-a!AIr1MwI<^(mR8QF%Xk1 zRV^#r)R%A9Nz9AS?uaEdy#mr3txTnN6VOMApB*bP-%KLcjH=d3wajr|3ha}gRyR0R0{Q^b3CoW+&xpX72 zrR_TUQIOZSOde7KyPN6;l&d_5z#z4RlPVDGPos`%P3tzo;AwM3@f}k@ zw~TbVyn?j+TUSMs`JA*m+CDAFp*u~iV5IropU`u>ka@eSN#OS$KgWOe|75UoDc!jF z-QY`_XvJ%sPhf8d2ZR6fIj=uwG|YA|^#cHSLhk3i_(#Y|uKp;7A1Hoa ziaTi%&LA(<7Wo^XNw2h<@t-3dx}e9dzX|}J@=_%ip`%-S#>ga^*{P{zml@6|Q&WTRZ_Kcf_UL%hx1>#}~U2S0d<;`8Y2 zQUD-F`qhiPk_*NiDYw{I1Pho6Q-@APsxhKmB`KWG9Yk6FlNYQAHO;3FMTWhs4*j)nRS7-AWKqlJhg#$1)o=2 zUl9bavnXz^#zyF;rbvi+=DQ!HJt{Mq9(&oNO-k&am=$QnH~vynkC2PLSKUJi+;&cr zU|PK_nsP|AjaUW&E@PKNEz=*a*rw{S=>=<d;!z`Z0G z)L~ph>iVEvCWK%q7B*FnyAi$}(HoEn0zAH@r=d zW3eGl1%LM3VeXHj#=> z4-=L-;cgE1EFa5t`xXEtfvl`GKVBX7)M&5QNw(mYw%~;;l)jWmf(2g71Z~|2XHaDr zB~2Msz~x2z{Ff~{nr5KfxdNiVlt`aOpR$1AY?T=6r4}$;cb=B;mG6~Osv%cZ^;^rq zjR`e@9A;~Oeik}?YI9#?IYwDiY3U`kWD3=T7*SMm%5r%sPi&OX?+kvyM7Y~^;zv4* zCY~N)k-O{ESCKMs3jp9EjioWk!`Tw2hG(#gz~&almam-k{Jyydd%w!W2Y_Q|pP`*zOMbF@Mtd6jaudJ3!)2Bs%v(Mp zTv>FAtPKePV~J2SWv=7AV^=?TRSN)FvQAT+5@)AMiZzl!BPn7``=oY%Yq$M7>AceYbV5qt?1^;*X-H)ev|ut`>&4&dyB^B=SHl1ENG#yonvYxf`jF#I>|MyuQ^qG`Wr1Xqqh#B& zx4Ylm132RD-6R`pZTJ(brGA3rwZ0sG&U}Y<=2ARg`S}QAI$wQ2?mFQstVPM2Q>eP$ I{k`&k0NcX>(f|Me literal 0 HcmV?d00001 From 03e7a3ea65030423df4f1a2b811c5ee92fb1544c Mon Sep 17 00:00:00 2001 From: dgtlmoon Date: Sat, 28 Oct 2023 19:08:14 +0200 Subject: [PATCH 290/305] lower case --- docs/examples.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/examples.md b/docs/examples.md index a0e121fe..9f951422 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -136,21 +136,20 @@ You can send a message during a workflow run with curl. Here is an example sendi ``` ## Changedetection.io -NTFY is an excellent choice for getting notifications when a website has a change sent to your mobile (or desktop), +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 [https://github.com/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 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 watch then add the special NTFY URL -to the Notification List. +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. From e2097e856ea7f523c6ac8320b4ec978a7469b750 Mon Sep 17 00:00:00 2001 From: Mike Taylor Date: Sat, 28 Oct 2023 13:33:39 -0400 Subject: [PATCH 291/305] Update install.md Add macOS client.yml location to the list of locations given --- docs/install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install.md b/docs/install.md index ed101554..c1a621d7 100644 --- a/docs/install.md +++ b/docs/install.md @@ -14,7 +14,7 @@ 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) 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), `~/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)) 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) From 2afe1fbeedea74065f3ba1d1b8aa8679e76cc742 Mon Sep 17 00:00:00 2001 From: Mike Taylor Date: Sat, 28 Oct 2023 13:35:52 -0400 Subject: [PATCH 292/305] Update cli.md Add macOS client location to the options listed --- docs/subscribe/cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/subscribe/cli.md b/docs/subscribe/cli.md index 59cfc8e7..7f589d3c 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), or `/etc/ntfy/client.yml` (for the root user). You +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 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**, From 7791901b2d32fa5a167de13c5b69c04980d31b54 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 12:10:35 -0400 Subject: [PATCH 293/305] Thank you @bear for your sponsorship. Awesome user name too! --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c20c9971..8c633163 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 6d451785f08147b06b847887cb1306b82a1b2de6 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 12:13:26 -0400 Subject: [PATCH 294/305] Thank you @richardleach for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8c633163..3b98ddf5 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + I'd also like to thank JetBrains for their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/), From a3663e43e4162e6aa3fc6f185fed48a5742a6555 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 12:14:07 -0400 Subject: [PATCH 295/305] Thank you for your donation @cminter --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3b98ddf5..1754ea5d 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From cad38573d76f8236c6eba53c1388135650564f26 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 12:15:20 -0400 Subject: [PATCH 296/305] Thank you for your donation @bahur142 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1754ea5d..bb8879af 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 8e0491220158aa86078f384391914f67894fa700 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 12:32:08 -0400 Subject: [PATCH 297/305] Fixing docs links --- docs/develop.md | 2 +- docs/emojis.md | 4 ++-- docs/examples.md | 4 ++-- docs/releases.md | 2 +- scripts/emoji-convert.sh | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/develop.md b/docs/develop.md index 05b55773..b090c8c5 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -429,7 +429,7 @@ steps: ### XCode setup -1. Follow step 4 of [https://firebase.google.com/docs/ios/setup](Add Firebase to your Apple project) to install the +1. Follow step 4 of [Add Firebase to your Apple project](https://firebase.google.com/docs/ios/setup) 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 fa01bb47..d801ae09 100644 --- a/docs/emojis.md +++ b/docs/emojis.md @@ -2,9 +2,9 @@ -You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically +You can [tag messages](publish.md#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/#tags-emojis). +[tagging and emojis page](publish.md#tags-emojis). diff --git a/docs/examples.md b/docs/examples.md index 9f951422..4e936d91 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -137,10 +137,10 @@ You can send a message during a workflow run with curl. Here is an example sendi ## 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 [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) +[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 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}` diff --git a/docs/releases.md b/docs/releases.md index cac34a3c..0cac2dea 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1273,7 +1273,7 @@ Released Dec 28, 2021 **Features & bug fixes:** -* [Publish messages via e-mail](ntfy.sh/docs/publish/#e-mail-publishing) #66 +* [Publish messages via e-mail](publish.md#e-mail-publishing) #66 * Server-side work to support [unifiedpush.org](https://unifiedpush.org) #64 * Fixing the Santa bug #65 diff --git a/scripts/emoji-convert.sh b/scripts/emoji-convert.sh index 61ad5f79..8cbe397b 100755 --- a/scripts/emoji-convert.sh +++ b/scripts/emoji-convert.sh @@ -25,9 +25,9 @@ elif [[ "$1" == *.md ]]; then -You can [tag messages](../publish/#tags-emojis) with emojis 🥳 🎉 and other relevant strings. Matching tags are automatically +You can [tag messages](publish.md#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/#tags-emojis). +[tagging and emojis page](publish.md#tags-emojis).
" > "$1" From b3534aecda1a557ce4149dd958c615ae89de1aa2 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 19:57:06 -0400 Subject: [PATCH 298/305] Format fixes --- Makefile | 12 ++++++------ web/src/app/utils.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 8cb75238..10624ed5 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-format - Run prettier on the web app" - @echo " make web-format-check - Run prettier on the web app, but don't change anything" + @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 @echo "Build documentation:" @echo " make docs - Build the documentation" @@ -151,10 +151,10 @@ web-deps: web-deps-update: cd web && npm update -web-format: +web-fmt: cd web && npm run format -web-format-check: +web-fmt-check: cd web && npm run format:check web-lint: @@ -248,7 +248,7 @@ cli-build-results: # Test/check targets -check: test web-format-check fmt-check vet web-lint lint staticcheck +check: test web-fmt-check fmt-check vet web-lint lint staticcheck test: .PHONY go test $(shell go list ./... | grep -vE 'ntfy/(test|examples|tools)') @@ -275,7 +275,7 @@ coverage-upload: # Lint/formatting targets -fmt: +fmt: web-fmt gofmt -s -w . fmt-check: diff --git a/web/src/app/utils.js b/web/src/app/utils.js index 6b3849f5..08710c1f 100644 --- a/web/src/app/utils.js +++ b/web/src/app/utils.js @@ -134,7 +134,7 @@ export const hashCode = (s) => { * 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 getKebabCaseLangStr = (language) => language.replace(/_/g, "-"); export const formatShortDateTime = (timestamp, language) => new Intl.DateTimeFormat(getKebabCaseLangStr(language), { From c332c132faf8c0ec2798ba89fdd8c17bca55fb7f Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 29 Oct 2023 20:04:37 -0400 Subject: [PATCH 299/305] Fix CI --- server/server_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/server_test.go b/server/server_test.go index d78533e9..d60c775a 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -512,6 +512,8 @@ 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) { From d3565c9b87440931992874aebf55e7d8db9e96d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Seppo=20Lehtim=C3=A4ki?= Date: Sat, 4 Nov 2023 19:39:29 +0100 Subject: [PATCH 300/305] Added translation using Weblate (Finnish) --- web/public/static/langs/fi.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/public/static/langs/fi.json diff --git a/web/public/static/langs/fi.json b/web/public/static/langs/fi.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/web/public/static/langs/fi.json @@ -0,0 +1 @@ +{} From 8dd4c3e3c0fffb4516bb313a54a979ea0174c77d Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 6 Nov 2023 05:48:47 -0500 Subject: [PATCH 301/305] Bump deps --- docs/releases.md | 2 +- go.mod | 38 ++-- go.sum | 127 ++++------- web/package-lock.json | 490 ++++++++++++++++++++++-------------------- 4 files changed, 314 insertions(+), 343 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 0cac2dea..73e5eb20 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1291,7 +1291,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * 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)) -* Correct usage of language str having underline ([#922](https://github.com/binwiederhier/ntfy/pull/922), thanks to [@imkero](https://github.com/imkero)) +* 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/go.mod b/go.mod index 27ee4332..95365372 100644 --- a/go.mod +++ b/go.mod @@ -3,23 +3,23 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.13.0 // indirect - cloud.google.com/go/storage v1.33.0 // indirect + cloud.google.com/go/firestore v1.14.0 // indirect + cloud.google.com/go/storage v1.34.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect github.com/emersion/go-smtp v0.18.0 github.com/gabriel-vasile/mimetype v1.4.3 - github.com/gorilla/websocket v1.5.0 - github.com/mattn/go-sqlite3 v1.14.17 + github.com/gorilla/websocket v1.5.1 + github.com/mattn/go-sqlite3 v1.14.18 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.4.0 + golang.org/x/sync v0.5.0 golang.org/x/term v0.13.0 - golang.org/x/time v0.3.0 - google.golang.org/api v0.147.0 + golang.org/x/time v0.4.0 + google.golang.org/api v0.149.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -35,11 +35,11 @@ require ( ) require ( - cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.1 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.3 // indirect - cloud.google.com/go/longrunning v0.5.2 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/longrunning v0.5.4 // 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,13 +50,11 @@ 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/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.3.1 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // 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 v1.0.4 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect @@ -67,14 +65,14 @@ require ( 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.13.0 // indirect - golang.org/x/text v0.13.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-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // 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 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 083a5423..d93f52d2 100644 --- a/go.sum +++ b/go.sum @@ -1,26 +1,18 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= -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 v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0= -cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +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/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.13.0 h1:/3S4RssUV4GO/kvgJZB+tayjhOfyAHs+KcpJgRVu/Qk= -cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= -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/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc= -cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= -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/longrunning v0.5.2 h1:u+oFqfEwwU7F9dIELigxbe0XVnBAo9wqMuQLA50CZ5k= -cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs= -cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= -cloud.google.com/go/storage v1.33.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= +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= github.com/AlekSi/pointer v1.2.0 h1:glcy/gc4h8HnG2Z3ZECSzZ1IX1x2JxRVuDzaJwQE0+w= @@ -30,8 +22,6 @@ 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.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA= -github.com/SherClockHolmes/webpush-go v1.2.0/go.mod h1:w6X47YApe/B9wUz2Wh8xukxlyupaxSSEbu6yKJcHN2w= github.com/SherClockHolmes/webpush-go v1.3.0 h1:CAu3FvEE9QS4drc3iKNgpBWFfGqNthKlZhp5QpYnu6k= github.com/SherClockHolmes/webpush-go v1.3.0/go.mod h1:AxRHmJuYwKGG1PVgYzToik1lphQvDnqFYDqimHvwhIw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -41,8 +31,6 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj 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.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -58,8 +46,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF 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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -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/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/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= @@ -92,29 +78,24 @@ 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.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +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/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.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= 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.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/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/olebedev/when v1.0.0 h1:T2DZCj8HxUhOVxcqaLOmzuTr+iZLtMHsZEim7mjIA2w= @@ -123,19 +104,11 @@ 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.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= 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_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -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/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= -github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= 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.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= 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= @@ -161,13 +134,10 @@ 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= -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.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -188,25 +158,18 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx 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.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= 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/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.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= -golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +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/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= @@ -218,16 +181,12 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc 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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.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/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.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= -golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= 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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -237,10 +196,10 @@ 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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.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/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/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= @@ -251,16 +210,10 @@ 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-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= 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.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY= -google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA= -google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= -google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= -google.golang.org/api v0.147.0 h1:Can3FaQo9LlVqxJCodNmeZW/ib3/qKAY3rFeXiHo5gc= -google.golang.org/api v0.147.0/go.mod h1:pQ/9j83DcmPd/5C9e2nFOdjjNkDZ1G+zkbK2uvdkJMs= +google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= 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= @@ -270,25 +223,17 @@ google.golang.org/appengine/v2 v2.0.5/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7 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-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0= -google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= -google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k= -google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +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/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.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= 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/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/web/package-lock.json b/web/package-lock.json index 13d2357d..7e3fcfdb 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -2245,18 +2245,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2304,9 +2304,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", + "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2347,12 +2347,12 @@ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -2374,9 +2374,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -2438,9 +2438,9 @@ } }, "node_modules/@mapbox/hast-util-table-cell-style": { - "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==", + "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==", "dependencies": { "unist-util-visit": "^1.4.1" }, @@ -2449,14 +2449,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.20.tgz", - "integrity": "sha512-CS2pUuqxST7ch9VNDCklRYDbJ3rru20Tx7na92QvVVKfu3RL4z/QLuVIc8jYGsdCnauMaeUSlFNLAJNb0yXe6w==", + "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==", "dependencies": { - "@babel/runtime": "^7.23.1", + "@babel/runtime": "^7.23.2", "@floating-ui/react-dom": "^2.0.2", - "@mui/types": "^7.2.6", - "@mui/utils": "^5.14.13", + "@mui/types": "^7.2.8", + "@mui/utils": "^5.14.16", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1" @@ -2480,20 +2480,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.14.tgz", - "integrity": "sha512-Rw/xKiTOUgXD8hdKqj60aC6QcGprMipG7ne2giK6Mz7b4PlhL/xog9xLeclY3BxsRLkZQ05egFnIEY1CSibTbw==", + "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==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.14.tgz", - "integrity": "sha512-vwuaMsKvI7AWTeYqR8wYbpXijuU8PzMAJWRAq2DDIuOZPxjKyHlr8WQ25+azZYkIXtJ7AqnVb1ZmHdEyB4/kug==", + "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==", "dependencies": { - "@babel/runtime": "^7.23.1" + "@babel/runtime": "^7.23.2" }, "engines": { "node": ">=12.0.0" @@ -2514,17 +2514,17 @@ } }, "node_modules/@mui/material": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.14.tgz", - "integrity": "sha512-cAmCwAHFQXxb44kWbVFkhKATN8tACgMsFwrXo8ro6WzYW73U/qsR5AcCiJIhCyYYg+gcftfkmNcpRaV3JjhHCg==", + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.16.tgz", + "integrity": "sha512-W4zZ4vnxgGk6/HqBwgsDHKU7x2l2NhX+r8gAwfg58Rhu3ikfY7NkIS6y8Gl3NkATc4GG1FNaGjjpQKfJx3U6Jw==", "dependencies": { - "@babel/runtime": "^7.23.1", - "@mui/base": "5.0.0-beta.20", - "@mui/core-downloads-tracker": "^5.14.14", - "@mui/system": "^5.14.14", - "@mui/types": "^7.2.6", - "@mui/utils": "^5.14.13", - "@types/react-transition-group": "^4.4.7", + "@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", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", @@ -2558,12 +2558,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.14.tgz", - "integrity": "sha512-n77au3CQj9uu16hak2Y+rvbGSBaJKxziG/gEbOLVGrAuqZ+ycVSkorCfN6Y/4XgYOpG/xvmuiY3JwhAEOzY3iA==", + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.16.tgz", + "integrity": "sha512-FNlL0pTSEBh8nXsVWreCHDSHk+jG8cBx1sxRbT8JVtL+PYbYPi802zfV4B00Kkf0LNRVRvAVQwojMWSR/MYGng==", "dependencies": { - "@babel/runtime": "^7.23.1", - "@mui/utils": "^5.14.13", + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.16", "prop-types": "^15.8.1" }, "engines": { @@ -2584,11 +2584,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.14.tgz", - "integrity": "sha512-sF3DS2PVG+cFWvkVHQQaGFpL1h6gSwOW3L91pdxPLQDHDZ5mZ/X0SlXU5XA+WjypoysG4urdAQC7CH/BRvUiqg==", + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.16.tgz", + "integrity": "sha512-FfvYvTG/Zd+KXMMImbcMYEeQAbONGuX5Vx3gBmmtB6KyA7Mvm9Pma1ly3R0gc44yeoFd+2wBjn1feS8h42HW5w==", "dependencies": { - "@babel/runtime": "^7.23.1", + "@babel/runtime": "^7.23.2", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2615,15 +2615,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.14.tgz", - "integrity": "sha512-y4InFmCgGGWXnz+iK4jRTWVikY0HgYnABjz4wgiUgEa2W1H8M4ow+27BegExUWPkj4TWthQ2qG9FOGSMtI+PKA==", + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.16.tgz", + "integrity": "sha512-uKnPfsDqDs8bbN54TviAuoGWOmFiQLwNZ3Wvj+OBkJCzwA6QnLb/sSeCB7Pk3ilH4h4jQ0BHtbR+Xpjy9wlOuA==", "dependencies": { - "@babel/runtime": "^7.23.1", - "@mui/private-theming": "^5.14.14", - "@mui/styled-engine": "^5.14.13", - "@mui/types": "^7.2.6", - "@mui/utils": "^5.14.13", + "@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", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2654,9 +2654,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.6.tgz", - "integrity": "sha512-7sjLQrUmBwufm/M7jw/quNiPK/oor2+pGUQP2CULRcFCArYTq78oJ3D5esTaL0UMkXKJvDqXn6Ike69yAOBQng==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.8.tgz", + "integrity": "sha512-9u0ji+xspl96WPqvrYJF/iO+1tQ1L5GTaDOeG3vCR893yy7VcWwRNiVMmPdPNpMDqx0WV1wtEW9OMwK9acWJzQ==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -2667,12 +2667,12 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.14", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.14.tgz", - "integrity": "sha512-3AKp8uksje5sRfVrtgG9Q/2TBsHWVBUtA0NaXliZqGcXo8J+A+Agp0qUW2rJ+ivgPWTCCubz9FZVT2IQZ3bGsw==", + "version": "5.14.16", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.16.tgz", + "integrity": "sha512-3xV31GposHkwRbQzwJJuooWpK2ybWdEdeUPtRjv/6vjomyi97F3+68l+QVj9tPTvmfSbr2sx5c/NuvDulrdRmA==", "dependencies": { - "@babel/runtime": "^7.23.1", - "@types/prop-types": "^15.7.7", + "@babel/runtime": "^7.23.2", + "@types/prop-types": "^15.7.9", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2738,9 +2738,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.10.0.tgz", - "integrity": "sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", + "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==", "engines": { "node": ">=14.0.0" } @@ -2819,12 +2819,12 @@ } }, "node_modules/@types/node": { - "version": "20.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", - "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", + "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.25.1" + "undici-types": "~5.26.4" } }, "node_modules/@types/parse-json": { @@ -2838,9 +2838,9 @@ "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" }, "node_modules/@types/react": { - "version": "18.2.29", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.29.tgz", - "integrity": "sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==", + "version": "18.2.35", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.35.tgz", + "integrity": "sha512-LG3xpFZ++rTndV+/XFyX5vUP7NI9yxyk+MQvBDq+CVs8I9DLSc3Ymwb1Vmw5YDoeNeHN4PDZa3HylMKJYT9PNQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2880,16 +2880,22 @@ "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 + }, "node_modules/@vitejs/plugin-react": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.0.tgz", - "integrity": "sha512-rM0SqazU9iqPUraQ2JlIvReeaxOoRj6n+PzB1C0cBzIbd8qP336nC39/R9yPi3wVcah7E7j/kdU1uCUqMEU4OQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", + "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", "dev": true, "dependencies": { - "@babel/core": "^7.22.20", + "@babel/core": "^7.23.2", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "@types/babel__core": "^7.20.2", + "@types/babel__core": "^7.20.3", "react-refresh": "^0.14.0" }, "engines": { @@ -2900,9 +2906,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3093,15 +3099,15 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "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==", "dev": true }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "node_modules/asynciterator.prototype": { @@ -3135,9 +3141,9 @@ } }, "node_modules/axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, "engines": { "node": ">=4" @@ -3181,13 +3187,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", + "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==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" + "core-js-compat": "^3.33.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3293,13 +3299,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3314,9 +3321,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001551", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", - "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", "dev": true, "funding": [ { @@ -3444,9 +3451,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", + "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==", "dev": true, "dependencies": { "browserslist": "^4.22.1" @@ -3601,9 +3608,9 @@ } }, "node_modules/dexie-react-hooks": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/dexie-react-hooks/-/dexie-react-hooks-1.1.6.tgz", - "integrity": "sha512-xSblWtmPwhafWNWMECsW7zMMmBu8goH3QqTxEfwBNoNG1mgsM0oFclippev7ss9HhKICqBwTjgqpscci5Ed4mA==", + "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==", "peerDependencies": { "@types/react": ">=16", "dexie": "^3.2 || ^4.0.1-alpha", @@ -3647,9 +3654,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.559", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.559.tgz", - "integrity": "sha512-iS7KhLYCSJbdo3rUSkhDTVuFNCV34RKs2UaB9Ecr7VlqzjjWW//0nfsFF5dtDmyXlZQaDYYtID5fjtC/6lpRug==", + "version": "1.4.576", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz", + "integrity": "sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==", "dev": true }, "node_modules/emoji-regex": { @@ -3675,26 +3682,26 @@ } }, "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", + "get-intrinsic": "^1.2.2", "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", @@ -3704,7 +3711,7 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", @@ -3718,7 +3725,7 @@ "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -3750,26 +3757,26 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "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==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -3847,18 +3854,19 @@ } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", + "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.53.0", + "@humanwhocodes/config-array": "^0.11.13", "@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", @@ -3999,26 +4007,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, @@ -4051,27 +4059,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "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==", + "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==", "dev": true, "dependencies": { - "@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", + "@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", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { "node": ">=4.0" @@ -4544,7 +4552,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4586,15 +4593,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4702,14 +4709,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "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", @@ -4728,12 +4727,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4778,6 +4777,17 @@ "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", @@ -4921,13 +4931,13 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -5053,11 +5063,11 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5633,12 +5643,15 @@ "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/leven": { @@ -5925,9 +5938,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -5982,9 +5995,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", - "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6341,9 +6354,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -6469,11 +6482,11 @@ } }, "node_modules/react-router": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.17.0.tgz", - "integrity": "sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA==", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", + "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", "dependencies": { - "@remix-run/router": "1.10.0" + "@remix-run/router": "1.11.0" }, "engines": { "node": ">=14.0.0" @@ -6483,12 +6496,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.17.0.tgz", - "integrity": "sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ==", + "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==", "dependencies": { - "@remix-run/router": "1.10.0", - "react-router": "6.17.0" + "@remix-run/router": "1.11.0", + "react-router": "6.18.0" }, "engines": { "node": ">=14.0.0" @@ -6832,6 +6845,21 @@ "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", @@ -7168,9 +7196,9 @@ } }, "node_modules/terser": { - "version": "5.22.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", - "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7362,9 +7390,9 @@ } }, "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "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": { @@ -7506,9 +7534,9 @@ "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -7771,13 +7799,13 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "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==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" From d4af2be7a00ea07260d8aaf51cfdc2a54f58ac51 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 6 Nov 2023 05:49:36 -0500 Subject: [PATCH 302/305] Thank you @pgwiebes for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bb8879af..339506dd 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From abe7275f0cfceecb7e3027f02c47f3823291cd50 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Mon, 6 Nov 2023 05:55:04 -0500 Subject: [PATCH 303/305] Remove Python version check --- Makefile | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 10624ed5..88c22033 100644 --- a/Makefile +++ b/Makefile @@ -111,18 +111,7 @@ build-deps-ubuntu: docs: docs-deps docs-build docs-build: .PHONY - @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 + mkdocs build docs-deps: .PHONY pip3 install -r requirements.txt From 668c472ee6310d635e3dc6f1c39d40325793d3fe Mon Sep 17 00:00:00 2001 From: astra Date: Sun, 12 Nov 2023 17:35:19 +0000 Subject: [PATCH 304/305] Append /v2 to module --- .goreleaser.yml | 2 +- README.md | 2 +- client/client.go | 4 ++-- client/client_test.go | 6 +++--- client/config_test.go | 2 +- client/options.go | 2 +- cmd/access.go | 4 ++-- cmd/access_test.go | 4 ++-- cmd/app.go | 2 +- cmd/app_test.go | 4 ++-- cmd/config_loader.go | 2 +- cmd/publish.go | 6 +++--- cmd/publish_test.go | 4 ++-- cmd/serve.go | 8 ++++---- cmd/serve_test.go | 6 +++--- cmd/subscribe.go | 6 +++--- cmd/tier.go | 4 ++-- cmd/tier_test.go | 4 ++-- cmd/token.go | 4 ++-- cmd/token_test.go | 4 ++-- cmd/user.go | 4 ++-- cmd/user_test.go | 6 +++--- cmd/webpush_test.go | 2 +- go.mod | 2 +- log/event.go | 2 +- main.go | 2 +- server/actions.go | 2 +- server/config.go | 2 +- server/config_test.go | 2 +- server/errors.go | 2 +- server/file_cache.go | 4 ++-- server/file_cache_test.go | 2 +- server/log.go | 4 ++-- server/message_cache.go | 4 ++-- server/server.go | 6 +++--- server/server_account.go | 6 +++--- server/server_account_test.go | 6 +++--- server/server_admin.go | 2 +- server/server_admin_test.go | 4 ++-- server/server_firebase.go | 4 ++-- server/server_firebase_test.go | 2 +- server/server_manager.go | 4 ++-- server/server_matrix.go | 2 +- server/server_middleware.go | 2 +- server/server_payments.go | 6 +++--- server/server_payments_test.go | 4 ++-- server/server_test.go | 6 +++--- server/server_twilio.go | 6 +++--- server/server_twilio_test.go | 4 ++-- server/server_webpush.go | 4 ++-- server/server_webpush_test.go | 4 ++-- server/smtp_sender.go | 4 ++-- server/topic.go | 4 ++-- server/types.go | 6 +++--- server/util.go | 2 +- server/visitor.go | 6 +++--- server/webpush_store.go | 2 +- test/server.go | 2 +- user/manager.go | 4 ++-- user/manager_test.go | 2 +- user/types.go | 2 +- util/batching_queue_test.go | 2 +- web/index.html | 4 ++-- 63 files changed, 116 insertions(+), 116 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 062cce1f..3c3aa490 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -71,7 +71,7 @@ builds: nfpms: - package_name: ntfy - homepage: https://heckel.io/ntfy + homepage: https://git.zio.sh/astra/ntfy/v2 maintainer: Philipp C. Heckel description: Simple pub-sub notification service license: Apache 2.0 diff --git a/README.md b/README.md index 339506dd..b9e0e51d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # 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) +[![Go Reference](https://pkg.go.dev/badge/git.zio.sh/astra/ntfy/v2.svg)](https://pkg.go.dev/git.zio.sh/astra/ntfy/v2) [![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) diff --git a/client/client.go b/client/client.go index 93cf7da5..191df260 100644 --- a/client/client.go +++ b/client/client.go @@ -7,8 +7,8 @@ import ( "encoding/json" "errors" "fmt" - "heckel.io/ntfy/log" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/util" "io" "net/http" "regexp" diff --git a/client/client_test.go b/client/client_test.go index f0b15a3f..7ab39db6 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 c85d3d49..f4c86bfb 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 630f1554..1bf48faf 100644 --- a/client/options.go +++ b/client/options.go @@ -2,7 +2,7 @@ package client import ( "fmt" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "net/http" "strings" "time" diff --git a/cmd/access.go b/cmd/access.go index 87f01d11..0dc4719e 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 359beb92..d872021a 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 edef5b47..27e876b6 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 ec27a67d..c5232050 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 9f0a5769..eab742e2 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 5ffe3adf..050184ca 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 a254f47d..fb4bbc70 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 87b83dda..1177af0c 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" - "heckel.io/ntfy/log" + "git.zio.sh/astra/ntfy/v2/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 774166c3..2fef0643 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 77a1b5f1..c9ed75e9 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 f1c8ddcb..76e273a1 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 1774aa27..b896d15f 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 ab9f4447..4fe7e541 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 40d7be7b..b5f0c0b4 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 a96c7089..21fe21af 100644 --- a/cmd/user.go +++ b/cmd/user.go @@ -6,13 +6,13 @@ import ( "crypto/subtle" "errors" "fmt" - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/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 1149285f..361a4288 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 1b364701..e2565214 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/go.mod b/go.mod index 95365372..a7395d5b 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module heckel.io/ntfy +module git.zio.sh/astra/ntfy/v2 go 1.18 diff --git a/log/event.go b/log/event.go index b4b8f59f..c4521674 100644 --- a/log/event.go +++ b/log/event.go @@ -3,7 +3,7 @@ package log import ( "encoding/json" "fmt" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "log" "os" "sort" diff --git a/main.go b/main.go index 5b1428d1..6aea6fa2 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/server/actions.go b/server/actions.go index 80065873..ce61395c 100644 --- a/server/actions.go +++ b/server/actions.go @@ -4,7 +4,7 @@ import ( "encoding/json" "errors" "fmt" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "regexp" "strings" "unicode/utf8" diff --git a/server/config.go b/server/config.go index 9815aa88..c7b09082 100644 --- a/server/config.go +++ b/server/config.go @@ -5,7 +5,7 @@ import ( "net/netip" "time" - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/user" ) // Defines default config settings (excluding limits, see below) diff --git a/server/config_test.go b/server/config_test.go index 14f028f1..23fbadf1 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 27ba3df0..f3d0d6b1 100644 --- a/server/errors.go +++ b/server/errors.go @@ -3,7 +3,7 @@ package server import ( "encoding/json" "fmt" - "heckel.io/ntfy/log" + "git.zio.sh/astra/ntfy/v2/log" "net/http" ) diff --git a/server/file_cache.go b/server/file_cache.go index c097aefb..499cca16 100644 --- a/server/file_cache.go +++ b/server/file_cache.go @@ -3,8 +3,8 @@ package server import ( "errors" "fmt" - "heckel.io/ntfy/log" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/util" "io" "os" "path/filepath" diff --git a/server/file_cache_test.go b/server/file_cache_test.go index 8f267a73..cdb534be 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 978d0593..23fdf5d5 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 8a613ff1..fafd6d9b 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 0ab36524..8610f443 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 f26cc2ff..32b6153f 100644 --- a/server/server_account.go +++ b/server/server_account.go @@ -2,9 +2,9 @@ package server import ( "encoding/json" - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/user" + "git.zio.sh/astra/ntfy/v2/util" "net/http" "net/netip" "strings" diff --git a/server/server_account_test.go b/server/server_account_test.go index 119efb16..fd51ac27 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 9380a5ff..5bfd1547 100644 --- a/server/server_admin.go +++ b/server/server_admin.go @@ -1,7 +1,7 @@ package server import ( - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/user" "net/http" ) diff --git a/server/server_admin_test.go b/server/server_admin_test.go index 1513ea40..a2a6f432 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 b8158d2f..eb1db971 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 fb27ea05..ca1147e3 100644 --- a/server/server_firebase_test.go +++ b/server/server_firebase_test.go @@ -4,7 +4,7 @@ import ( "encoding/json" "errors" "fmt" - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/user" "net/netip" "strings" "sync" diff --git a/server/server_manager.go b/server/server_manager.go index 66d449de..7a562a94 100644 --- a/server/server_manager.go +++ b/server/server_manager.go @@ -1,8 +1,8 @@ package server import ( - "heckel.io/ntfy/log" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/util" "strings" ) diff --git a/server/server_matrix.go b/server/server_matrix.go index c25a1b59..bf43a13f 100644 --- a/server/server_matrix.go +++ b/server/server_matrix.go @@ -4,7 +4,7 @@ import ( "bytes" "encoding/json" "fmt" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "io" "net/http" "strings" diff --git a/server/server_middleware.go b/server/server_middleware.go index b1428154..5d842b98 100644 --- a/server/server_middleware.go +++ b/server/server_middleware.go @@ -3,7 +3,7 @@ package server import ( "net/http" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" ) type contextKey int diff --git a/server/server_payments.go b/server/server_payments.go index 1e98d059..a4b51a11 100644 --- a/server/server_payments.go +++ b/server/server_payments.go @@ -4,6 +4,9 @@ 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" @@ -11,9 +14,6 @@ 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 ebd559e7..29a1b13d 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 d60c775a..85fdc211 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) { diff --git a/server/server_twilio.go b/server/server_twilio.go index 093abe63..231436a3 100644 --- a/server/server_twilio.go +++ b/server/server_twilio.go @@ -4,9 +4,9 @@ import ( "bytes" "encoding/xml" "fmt" - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/user" + "git.zio.sh/astra/ntfy/v2/util" "io" "net/http" "net/url" diff --git a/server/server_twilio_test.go b/server/server_twilio_test.go index af694a77..d6877527 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 bb0f5408..a0e33af5 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 c0db79c6..16e02cc8 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 9093687e..4c0d263e 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -11,8 +11,8 @@ import ( "sync" "time" - "heckel.io/ntfy/log" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/util" ) type mailer interface { diff --git a/server/topic.go b/server/topic.go index 5dfafbe3..3daac9a7 100644 --- a/server/topic.go +++ b/server/topic.go @@ -5,8 +5,8 @@ import ( "sync" "time" - "heckel.io/ntfy/log" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/util" ) const ( diff --git a/server/types.go b/server/types.go index eeb566fc..5c423216 100644 --- a/server/types.go +++ b/server/types.go @@ -5,10 +5,10 @@ import ( "net/netip" "time" - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/user" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" ) // List of possible events diff --git a/server/util.go b/server/util.go index 09536765..dea13ed5 100644 --- a/server/util.go +++ b/server/util.go @@ -3,7 +3,7 @@ package server import ( "context" "fmt" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "io" "mime" "net/http" diff --git a/server/visitor.go b/server/visitor.go index e4c06f66..d1ec1226 100644 --- a/server/visitor.go +++ b/server/visitor.go @@ -2,14 +2,14 @@ package server import ( "fmt" - "heckel.io/ntfy/log" - "heckel.io/ntfy/user" + "git.zio.sh/astra/ntfy/v2/log" + "git.zio.sh/astra/ntfy/v2/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 b2ab0d11..3781f250 100644 --- a/server/webpush_store.go +++ b/server/webpush_store.go @@ -3,7 +3,7 @@ package server import ( "database/sql" "errors" - "heckel.io/ntfy/util" + "git.zio.sh/astra/ntfy/v2/util" "net/netip" "time" diff --git a/test/server.go b/test/server.go index 0b9200a6..cabff94f 100644 --- a/test/server.go +++ b/test/server.go @@ -2,7 +2,7 @@ package test import ( "fmt" - "heckel.io/ntfy/server" + "git.zio.sh/astra/ntfy/v2/server" "math/rand" "net/http" "path/filepath" diff --git a/user/manager.go b/user/manager.go index 324b7684..0ff211cf 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 468dc36a..bebb0a07 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 11895785..140da216 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 b3c41a4c..08d812ed 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/web/index.html b/web/index.html index 462bbc1f..191e8c40 100644 --- a/web/index.html +++ b/web/index.html @@ -22,7 +22,7 @@ @@ -30,7 +30,7 @@ From a06577faacb02ab23400179b247e5fd0132ea4cc Mon Sep 17 00:00:00 2001 From: Astra Date: Sun, 12 Nov 2023 18:40:10 +0100 Subject: [PATCH 305/305] Update README.md --- README.md | 196 +----------------------------------------------------- 1 file changed, 1 insertion(+), 195 deletions(-) diff --git a/README.md b/README.md index b9e0e51d..b3d0c55e 100644 --- a/README.md +++ b/README.md @@ -1,203 +1,9 @@ -![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/git.zio.sh/astra/ntfy/v2.svg)](https://pkg.go.dev/git.zio.sh/astra/ntfy/v2) -[![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). -

- - - - - -

- -## [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 $5/month**. -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 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 +### This is a fork of [github.com/binwiederhier/ntfy](https://github.com/binwiederhier/ntfy) \ No newline at end of file
From 68f82b9182e0c20f1e93e84c9bfb8c5e5c92fab6 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 9 Jul 2023 07:36:36 -0400 Subject: [PATCH 183/305] Fix wording in tests --- server/server_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/server_test.go b/server/server_test.go index 46751acd..647268fb 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -1520,29 +1520,29 @@ func TestServer_PublishActions_AndPoll(t *testing.T) { func TestServer_PublishMarkdown(t *testing.T) { s := newTestServer(t, newTestConfig(t)) - response := request(t, s, "PUT", "/mytopic", "_underline this_", map[string]string{ + response := request(t, s, "PUT", "/mytopic", "**make this bold**", map[string]string{ "Content-Type": "text/markdown", }) require.Equal(t, 200, response.Code) m := toMessage(t, response.Body.String()) - require.Equal(t, "_underline this_", m.Message) + require.Equal(t, "**make this bold**", m.Message) require.Equal(t, "text/markdown", m.ContentType) } func TestServer_PublishMarkdown_QueryParam(t *testing.T) { s := newTestServer(t, newTestConfig(t)) - response := request(t, s, "PUT", "/mytopic?md=1", "_underline this_", nil) + response := request(t, s, "PUT", "/mytopic?md=1", "**make this bold**", nil) require.Equal(t, 200, response.Code) m := toMessage(t, response.Body.String()) - require.Equal(t, "_underline this_", m.Message) + require.Equal(t, "**make this bold**", m.Message) require.Equal(t, "text/markdown", m.ContentType) } func TestServer_PublishMarkdown_NotMarkdown(t *testing.T) { s := newTestServer(t, newTestConfig(t)) - response := request(t, s, "PUT", "/mytopic", "_underline this_", map[string]string{ + response := request(t, s, "PUT", "/mytopic", "**make this bold**", map[string]string{ "Content-Type": "not-markdown", }) require.Equal(t, 200, response.Code) From 2d1f2f319ffaa0e83b703091ef9e9592193a44f4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 9 Jul 2023 07:50:00 -0400 Subject: [PATCH 184/305] Changelog, CLI fix --- cmd/publish.go | 2 +- docs/publish.md | 2 +- docs/releases.md | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/publish.go b/cmd/publish.go index 390e5f67..5ffe3adf 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -96,7 +96,7 @@ func execPublish(c *cli.Context) error { icon := c.String("icon") actions := c.String("actions") attach := c.String("attach") - markdown := c.Bool("attach") + markdown := c.Bool("markdown") filename := c.String("filename") file := c.String("file") email := c.String("email") diff --git a/docs/publish.md b/docs/publish.md index 13e1597c..2de0ff73 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -653,8 +653,8 @@ As of today, **Markdown is only supported in the web app.** Here's an example of === "ntfy CLI" ``` ntfy publish \ - mytopic \ --markdown \ + mytopic \ "Look ma, **bold text**, *italics*, ..." ``` diff --git a/docs/releases.md b/docs/releases.md index 35e049c4..d7edcf4f 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1255,6 +1255,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Features:** +* Add support for [Markdown formatting](publish.md#markdown-formatting) in web app ([#310](https://github.com/binwiederhier/ntfy/issues/310), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) * Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) **Bug fixes + maintenance:** From 6a93dc9d5402e12b95e750765e6b59cd1fedd23c Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 9 Jul 2023 07:51:33 -0400 Subject: [PATCH 185/305] Bump packages --- go.mod | 26 ++-- go.sum | 26 ++++ web/package-lock.json | 354 +++++++++++++++++++++--------------------- 3 files changed, 219 insertions(+), 187 deletions(-) diff --git a/go.mod b/go.mod index 7c53b10a..1fc1e769 100644 --- a/go.mod +++ b/go.mod @@ -7,19 +7,19 @@ require ( cloud.google.com/go/storage v1.31.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/emersion/go-smtp v0.16.0 + github.com/emersion/go-smtp v0.17.0 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.10.0 - golang.org/x/oauth2 v0.9.0 // indirect + golang.org/x/crypto v0.11.0 + golang.org/x/oauth2 v0.10.0 // indirect golang.org/x/sync v0.3.0 - golang.org/x/term v0.9.0 + golang.org/x/term v0.10.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.129.0 + google.golang.org/api v0.130.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -29,11 +29,11 @@ require ( firebase.google.com/go/v4 v4.11.0 github.com/SherClockHolmes/webpush-go v1.2.0 github.com/prometheus/client_golang v1.16.0 - github.com/stripe/stripe-go/v74 v74.24.0 + github.com/stripe/stripe-go/v74 v74.25.0 ) require ( - cloud.google.com/go v0.110.3 // indirect + cloud.google.com/go v0.110.4 // indirect cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.1 // indirect @@ -52,7 +52,7 @@ require ( github.com/google/s2a-go v0.1.4 // 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.11.0 // 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 v1.0.4 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -63,16 +63,16 @@ require ( 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.11.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/sys v0.10.0 // indirect golang.org/x/text v0.11.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.3 // indirect - google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 // indirect - google.golang.org/grpc v1.56.1 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/grpc v1.56.2 // 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 b96c581d..61230150 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.110.3 h1:wwearW+L7sAPSomPIgJ3bVn6Ck00HGQnn5HMLwf0azo= cloud.google.com/go v0.110.3/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= @@ -50,6 +52,8 @@ github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8b github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubpa8= github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= +github.com/emersion/go-smtp v0.17.0 h1:tq90evlrcyqRfE6DSXaWVH54oX6OuZOQECEmhWBMEtI= +github.com/emersion/go-smtp v0.17.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= 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= @@ -104,6 +108,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvki github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w= github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +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.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= @@ -145,6 +151,8 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stripe/stripe-go/v74 v74.24.0 h1:h+hXEI5avC5moAh2YLtphMFTBnp11TfXTcP4suuWDLk= github.com/stripe/stripe-go/v74 v74.24.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/stripe/stripe-go/v74 v74.25.0 h1:mGJp9L1ymxjFvq5MlmG6ynv/fAGX6LLU8MyMVsiRAMY= +github.com/stripe/stripe-go/v74 v74.25.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -160,6 +168,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -181,10 +191,14 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= +golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= +golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= 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= @@ -208,6 +222,8 @@ golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -232,6 +248,8 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= +google.golang.org/api v0.130.0 h1:A50ujooa1h9iizvfzA4rrJr2B7uRmWexwbekQ2+5FPQ= +google.golang.org/api v0.130.0/go.mod h1:J/LCJMYSDFvAVREGCbrESb53n4++NMBDetSHGL5I5RY= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -244,10 +262,16 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUFd6UsOUNmA5kCcWOfORaT3tpAsKQs= google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= 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= @@ -258,6 +282,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= 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= diff --git a/web/package-lock.json b/web/package-lock.json index 5be9ea1c..cd434f5e 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -88,20 +88,20 @@ } }, "node_modules/@babel/core": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", - "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz", + "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", + "@babel/generator": "^7.22.7", "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-module-transforms": "^7.22.5", "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.6", + "@babel/parser": "^7.22.7", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", + "@babel/traverse": "^7.22.8", "@babel/types": "^7.22.5", "@nicolo-ribaudo/semver-v6": "^6.3.3", "convert-source-map": "^1.7.0", @@ -118,9 +118,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", + "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", "dev": true, "dependencies": { "@babel/types": "^7.22.5", @@ -216,17 +216,16 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", + "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0-0" @@ -468,9 +467,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", - "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -790,9 +789,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", - "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", + "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -1577,9 +1576,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.6.tgz", - "integrity": "sha512-IHr0AXHGk8oh8HYSs45Mxuv6iySUBwDTIzJSnXN7PURqHdxJVQlCoXmKJgyvSS9bcNf9NVRVE35z+LkCvGmi6w==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz", + "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", @@ -1608,7 +1607,7 @@ "@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.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", "@babel/plugin-transform-block-scoping": "^7.22.5", @@ -1658,9 +1657,9 @@ "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.22.5", "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", "core-js-compat": "^3.31.0" }, "engines": { @@ -1718,18 +1717,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", - "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", + "@babel/generator": "^7.22.7", "@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.22.6", + "@babel/parser": "^7.22.7", "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1895,9 +1894,9 @@ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", + "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", "cpu": [ "arm" ], @@ -1911,9 +1910,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", + "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", "cpu": [ "arm64" ], @@ -1927,9 +1926,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", + "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", "cpu": [ "x64" ], @@ -1943,9 +1942,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", + "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", "cpu": [ "arm64" ], @@ -1959,9 +1958,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", + "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", "cpu": [ "x64" ], @@ -1975,9 +1974,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", + "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", "cpu": [ "arm64" ], @@ -1991,9 +1990,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", + "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", "cpu": [ "x64" ], @@ -2007,9 +2006,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", + "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", "cpu": [ "arm" ], @@ -2023,9 +2022,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", + "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", "cpu": [ "arm64" ], @@ -2039,9 +2038,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", + "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", "cpu": [ "ia32" ], @@ -2055,9 +2054,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", + "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", "cpu": [ "loong64" ], @@ -2071,9 +2070,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", + "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", "cpu": [ "mips64el" ], @@ -2087,9 +2086,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", + "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", "cpu": [ "ppc64" ], @@ -2103,9 +2102,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", + "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", "cpu": [ "riscv64" ], @@ -2119,9 +2118,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", + "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", "cpu": [ "s390x" ], @@ -2135,9 +2134,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", + "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", "cpu": [ "x64" ], @@ -2151,9 +2150,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", + "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", "cpu": [ "x64" ], @@ -2167,9 +2166,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", + "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", "cpu": [ "x64" ], @@ -2183,9 +2182,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", + "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", "cpu": [ "x64" ], @@ -2199,9 +2198,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", + "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", "cpu": [ "arm64" ], @@ -2215,9 +2214,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", + "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", "cpu": [ "ia32" ], @@ -2231,9 +2230,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", + "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", "cpu": [ "x64" ], @@ -2772,9 +2771,9 @@ } }, "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz", + "integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==", "dev": true }, "node_modules/@types/parse-json": { @@ -2839,9 +2838,9 @@ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/@vitejs/plugin-react": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", - "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.2.tgz", + "integrity": "sha512-zbnVp3Esfg33zDaoLrjxG+p/dPiOtpvJA+1oOEQwSxMMTRL9zi1eghIcd2WtLjkcKnPsa3S15LzS/OzDn2BOCA==", "dev": true, "dependencies": { "@babel/core": "^7.22.5", @@ -2857,9 +2856,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "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" @@ -3075,39 +3074,39 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", + "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.1", + "@nicolo-ribaudo/semver-v6": "^6.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", + "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" + "@babel/helper-define-polyfill-provider": "^0.4.1", + "core-js-compat": "^3.31.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", + "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" + "@babel/helper-define-polyfill-provider": "^0.4.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3222,9 +3221,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "version": "1.0.30001514", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz", + "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==", "dev": true, "funding": [ { @@ -3352,12 +3351,12 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", + "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", "dev": true, "dependencies": { - "browserslist": "^4.21.5" + "browserslist": "^4.21.9" }, "funding": { "type": "opencollective", @@ -3540,9 +3539,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.450", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", - "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", + "version": "1.4.454", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz", + "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==", "dev": true }, "node_modules/emoji-regex": { @@ -3656,9 +3655,9 @@ } }, "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", + "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", "dev": true, "hasInstallScript": true, "bin": { @@ -3668,28 +3667,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/android-arm": "0.18.11", + "@esbuild/android-arm64": "0.18.11", + "@esbuild/android-x64": "0.18.11", + "@esbuild/darwin-arm64": "0.18.11", + "@esbuild/darwin-x64": "0.18.11", + "@esbuild/freebsd-arm64": "0.18.11", + "@esbuild/freebsd-x64": "0.18.11", + "@esbuild/linux-arm": "0.18.11", + "@esbuild/linux-arm64": "0.18.11", + "@esbuild/linux-ia32": "0.18.11", + "@esbuild/linux-loong64": "0.18.11", + "@esbuild/linux-mips64el": "0.18.11", + "@esbuild/linux-ppc64": "0.18.11", + "@esbuild/linux-riscv64": "0.18.11", + "@esbuild/linux-s390x": "0.18.11", + "@esbuild/linux-x64": "0.18.11", + "@esbuild/netbsd-x64": "0.18.11", + "@esbuild/openbsd-x64": "0.18.11", + "@esbuild/sunos-x64": "0.18.11", + "@esbuild/win32-arm64": "0.18.11", + "@esbuild/win32-ia32": "0.18.11", + "@esbuild/win32-x64": "0.18.11" } }, "node_modules/escalade": { @@ -5719,9 +5718,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/object-assign": { @@ -5989,9 +5988,9 @@ } }, "node_modules/postcss": { - "version": "8.4.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", - "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "version": "8.4.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", + "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", "dev": true, "funding": [ { @@ -6435,9 +6434,9 @@ } }, "node_modules/rollup": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz", - "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==", + "version": "3.26.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz", + "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7221,14 +7220,14 @@ } }, "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.2.tgz", + "integrity": "sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==", "dev": true, "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" + "esbuild": "^0.18.10", + "postcss": "^8.4.24", + "rollup": "^3.25.2" }, "bin": { "vite": "bin/vite.js" @@ -7236,12 +7235,16 @@ "engines": { "node": "^14.18.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@types/node": ">= 14", "less": "*", + "lightningcss": "^1.21.0", "sass": "*", "stylus": "*", "sugarss": "*", @@ -7254,6 +7257,9 @@ "less": { "optional": true }, + "lightningcss": { + "optional": true + }, "sass": { "optional": true }, From c7f85e6283f359f4bc24dada08e116d0ac0615f3 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Mon, 10 Jul 2023 20:10:45 +0200 Subject: [PATCH 186/305] fix(web-push): re-init i18n on each sw message --- web/public/sw.js | 19 ++++++++++++------- web/src/app/i18n.js | 33 +++++++++++++++++---------------- web/src/components/App.jsx | 4 +++- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/web/public/sw.js b/web/public/sw.js index 33154628..56d66f16 100644 --- a/web/public/sw.js +++ b/web/public/sw.js @@ -7,8 +7,7 @@ import { clientsClaim } from "workbox-core"; import { dbAsync } from "../src/app/db"; import { toNotificationParams, icon, badge } from "../src/app/notificationUtils"; - -import i18n from "../src/app/i18n"; +import initI18n from "../src/app/i18n"; /** * General docs for service workers and PWAs: @@ -67,8 +66,10 @@ const handlePushMessage = async (data) => { * Handle a received web push subscription expiring. */ const handlePushSubscriptionExpiring = async (data) => { - await self.registration.showNotification(i18n.t("web_push_subscription_expiring_title"), { - body: i18n.t("web_push_subscription_expiring_body"), + const t = await initI18n(); + + await self.registration.showNotification(t("web_push_subscription_expiring_title"), { + body: t("web_push_subscription_expiring_body"), icon, data, badge, @@ -80,8 +81,10 @@ const handlePushSubscriptionExpiring = async (data) => { * permission can be revoked by the browser. */ const handlePushUnknown = async (data) => { - await self.registration.showNotification(i18n.t("web_push_unknown_notification_title"), { - body: i18n.t("web_push_unknown_notification_body"), + const t = await initI18n(); + + await self.registration.showNotification(t("web_push_unknown_notification_title"), { + body: t("web_push_unknown_notification_body"), icon, data, badge, @@ -107,6 +110,8 @@ const handlePush = async (data) => { * This is also called when the user clicks on an action button. */ const handleClick = async (event) => { + const t = await initI18n(); + const clients = await self.clients.matchAll({ type: "window" }); const rootUrl = new URL(self.location.origin); @@ -147,7 +152,7 @@ const handleClick = async (event) => { } } catch (e) { console.error("[ServiceWorker] Error performing http action", e); - self.registration.showNotification(`${i18n.t("notifications_actions_failed_notification")}: ${action.label} (${action.action})`, { + self.registration.showNotification(`${t("notifications_actions_failed_notification")}: ${action.label} (${action.action})`, { body: e.message, icon, badge, diff --git a/web/src/app/i18n.js b/web/src/app/i18n.js index 2bc315c0..298f595c 100644 --- a/web/src/app/i18n.js +++ b/web/src/app/i18n.js @@ -1,4 +1,4 @@ -import i18n from "i18next"; +import i18next from "i18next"; import Backend from "i18next-http-backend"; import LanguageDetector from "i18next-browser-languagedetector"; import { initReactI18next } from "react-i18next"; @@ -11,19 +11,20 @@ import { initReactI18next } from "react-i18next"; // See example project here: // https://github.com/i18next/react-i18next/tree/master/example/react -i18n - .use(Backend) - .use(LanguageDetector) - .use(initReactI18next) - .init({ - fallbackLng: "en", - debug: true, - interpolation: { - escapeValue: false, // not needed for react as it escapes by default - }, - backend: { - loadPath: "/static/langs/{{lng}}.json", - }, - }); +const initI18n = () => + i18next + .use(Backend) + .use(LanguageDetector) + .use(initReactI18next) + .init({ + fallbackLng: "en", + debug: true, + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, + backend: { + loadPath: "/static/langs/{{lng}}.json", + }, + }); -export default i18n; +export default initI18n; diff --git a/web/src/components/App.jsx b/web/src/components/App.jsx index 8b60b3e8..d22ec66f 100644 --- a/web/src/components/App.jsx +++ b/web/src/components/App.jsx @@ -20,10 +20,12 @@ import Messaging from "./Messaging"; import Login from "./Login"; import Signup from "./Signup"; import Account from "./Account"; -import "../app/i18n"; // Translations! +import initI18n from "../app/i18n"; // Translations! import prefs, { THEME } from "../app/Prefs"; import RTLCacheProvider from "./RTLCacheProvider"; +initI18n(); + export const AccountContext = createContext(null); const darkModeEnabled = (prefersDarkMode, themePreference) => { From 86cc3b9607717b6108d180478281d29322db02d8 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Mon, 10 Jul 2023 20:14:29 +0200 Subject: [PATCH 187/305] chore(build): bump Dockerfile-build go version --- Dockerfile-build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile-build b/Dockerfile-build index f8af256b..62a60bd8 100644 --- a/Dockerfile-build +++ b/Dockerfile-build @@ -1,4 +1,4 @@ -FROM golang:1.19-bullseye as builder +FROM golang:1.20-bullseye as builder ARG VERSION=dev ARG COMMIT=unknown From c1576b5b1920b0640c7306e5e5c319d27dc30f78 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 11 Jul 2023 09:34:47 -0400 Subject: [PATCH 188/305] Blog posts --- docs/integrations.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/integrations.md b/docs/integrations.md index 155daaa7..57ae2c10 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -56,6 +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) ## CLIs + GUIs @@ -129,6 +130,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [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 @@ -155,6 +157,7 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [NTFY - système de notification hyper simple et complet](https://www.youtube.com/watch?v=UieZYWVVgA4) - youtube.com - 12/2022 - [ntfy.sh](https://paramdeo.com/til/ntfy-sh) - paramdeo.com - 11/2022 - [Using ntfy to warn me when my computer is discharging](https://ulysseszh.github.io/programming/2022/11/28/ntfy-warn-discharge.html) - ulysseszh.github.io - 11/2022 +- [Enabling SSH Login Notifications using Ntfy](https://paramdeo.com/blog/enabling-ssh-login-notifications-using-ntfy) - paramdeo.com - 11/2022 - [ntfy - Push Notification Service](https://dizzytech.de/posts/ntfy/) - dizzytech.de - 11/2022 - [Console #132](https://console.substack.com/p/console-132) ⭐ - console.substack.com - 11/2022 - [How to make my phone buzz*](https://evbogue.com/howtomakemyphonebuzz) - evbogue.com - 11/2022 From 8ba4b72b377725801d8912c98a94dae704642d31 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 11 Jul 2023 19:46:10 -0400 Subject: [PATCH 189/305] Changelog --- docs/releases.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases.md b/docs/releases.md index d7edcf4f..6fc0f510 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1261,6 +1261,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes + maintenance:** * Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) ### ntfy Android app v1.16.1 (UNRELEASED) From 76667ffcf9937cb4dd0428b5858710c218ee9f71 Mon Sep 17 00:00:00 2001 From: nisbet-hubbard <87453615+nisbet-hubbard@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:18:48 +0800 Subject: [PATCH 190/305] Use mod_proxy_http for websocket upgrade mod_proxy_wstunnel is deprecated as of httpd 2.4.47. It also uses more resources since it relies on mod_rewrite. See https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#protoupgrade. --- docs/config.md | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/docs/config.md b/docs/config.md index 9af79992..3577bb48 100644 --- a/docs/config.md +++ b/docs/config.md @@ -649,8 +649,8 @@ or the root domain: ServerName ntfy.sh - # Proxy connections to ntfy (requires "a2enmod proxy") - ProxyPass / http://127.0.0.1:2586/ + # Proxy connections to ntfy (requires "a2enmod proxy proxy_http") + ProxyPass / http://127.0.0.1:2586/ upgrade=websocket ProxyPassReverse / http://127.0.0.1:2586/ SetEnv proxy-nokeepalive 1 @@ -661,11 +661,6 @@ or the root domain: # Enable mod_rewrite (requires "a2enmod rewrite") RewriteEngine on - - # WebSockets support (requires "a2enmod rewrite proxy_wstunnel") - RewriteCond %{HTTP:Upgrade} websocket [NC] - RewriteCond %{HTTP:Connection} upgrade [NC] - RewriteRule ^/?(.*) "ws://127.0.0.1:2586/$1" [P,L] # Redirect HTTP to HTTPS, but only for GET topic addresses, since we want # it to work with curl without the annoying https:// prefix @@ -681,8 +676,8 @@ or the root domain: SSLCertificateKeyFile /etc/letsencrypt/live/ntfy.sh/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf - # Proxy connections to ntfy (requires "a2enmod proxy") - ProxyPass / http://127.0.0.1:2586/ + # Proxy connections to ntfy (requires "a2enmod proxy proxy_http") + ProxyPass / http://127.0.0.1:2586/ upgrade=websocket ProxyPassReverse / http://127.0.0.1:2586/ SetEnv proxy-nokeepalive 1 @@ -693,11 +688,7 @@ or the root domain: # Enable mod_rewrite (requires "a2enmod rewrite") RewriteEngine on - - # WebSockets support (requires "a2enmod rewrite proxy_wstunnel") - RewriteCond %{HTTP:Upgrade} websocket [NC] - RewriteCond %{HTTP:Connection} upgrade [NC] - RewriteRule ^/?(.*) "ws://127.0.0.1:2586/$1" [P,L] + ``` From e52132c85b1297a53911f97302546aab227097eb Mon Sep 17 00:00:00 2001 From: nisbet-hubbard <87453615+nisbet-hubbard@users.noreply.github.com> Date: Wed, 12 Jul 2023 19:48:51 +0800 Subject: [PATCH 191/305] Use mod_alias for redirection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’s a less resource-intensive alternative to mod_rewrite. --- docs/config.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/config.md b/docs/config.md index 3577bb48..af84dae9 100644 --- a/docs/config.md +++ b/docs/config.md @@ -658,14 +658,13 @@ or the root domain: # Higher than the max message size of 4096 bytes LimitRequestBody 102400 - - # Enable mod_rewrite (requires "a2enmod rewrite") - RewriteEngine on # Redirect HTTP to HTTPS, but only for GET topic addresses, since we want - # it to work with curl without the annoying https:// prefix - RewriteCond %{REQUEST_METHOD} GET - RewriteRule ^/([-_A-Za-z0-9]{0,64})$ https://%{SERVER_NAME}/$1 [R,L] + # it to work with curl without the annoying https:// prefix (requires "a2enmod alias") + + RedirectMatch permanent "^/([-_A-Za-z0-9]{0,64})$" "https://%{SERVER_NAME}/$1" + + @@ -685,9 +684,6 @@ or the root domain: # Higher than the max message size of 4096 bytes LimitRequestBody 102400 - - # Enable mod_rewrite (requires "a2enmod rewrite") - RewriteEngine on ``` From a534cc9ecacb5985c1de4b503ae435fe9973c768 Mon Sep 17 00:00:00 2001 From: nisbet-hubbard <87453615+nisbet-hubbard@users.noreply.github.com> Date: Wed, 12 Jul 2023 20:00:48 +0800 Subject: [PATCH 192/305] Add server.yml ex. when using proxy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This would help inexperienced sysadmins who may not realise that since TLS terminates at proxy, ntfy is actually listening on a TCP socket that’s using http rather than https. --- docs/config.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/config.md b/docs/config.md index af84dae9..bb7f7e1b 100644 --- a/docs/config.md +++ b/docs/config.md @@ -44,6 +44,14 @@ Here are a few working sample configs: attachment-cache-dir: "/var/cache/ntfy/attachments" ``` +=== "server.yml (behind proxy, with cache + attachments)" + ``` yaml + base-url: "http://ntfy.example.com" + listen-http: ":2586" + cache-file: "/var/cache/ntfy/cache.db" + attachment-cache-dir: "/var/cache/ntfy/attachments" + ``` + === "server.yml (ntfy.sh config)" ``` yaml # All the things: Behind a proxy, Firebase, cache, attachments, From 4e9eeb1fa168e0d27d6df013242aefc6e172fe5a Mon Sep 17 00:00:00 2001 From: nisbet-hubbard <87453615+nisbet-hubbard@users.noreply.github.com> Date: Wed, 12 Jul 2023 20:24:57 +0800 Subject: [PATCH 193/305] Add missing note on log file permissions --- server/server.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/server.yml b/server/server.yml index 6b2fc989..b044a914 100644 --- a/server/server.yml +++ b/server/server.yml @@ -342,6 +342,10 @@ # - "field -> level" to match any value, e.g. "time_taken_ms -> debug" # Warning: Using log-level-overrides has a performance penalty. Only use it for temporary debugging. # +# Check your permissions: +# If you are running ntfy with systemd, make sure this log file is owned by the +# ntfy user and group by running: chown ntfy.ntfy . +# # Example (good for production): # log-level: info # log-format: json From 384cabede52dc61ca57c1033bf6d4d27554d4ee2 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Fri, 14 Jul 2023 13:10:24 +0200 Subject: [PATCH 194/305] feat: check extension to display external images --- web/src/app/notificationUtils.js | 2 +- web/src/components/Notifications.jsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/app/notificationUtils.js b/web/src/app/notificationUtils.js index 35c85ce6..0bd5136d 100644 --- a/web/src/app/notificationUtils.js +++ b/web/src/app/notificationUtils.js @@ -35,7 +35,7 @@ export const formatMessage = (m) => { }; const imageRegex = /\.(png|jpe?g|gif|webp)$/i; -const isImage = (attachment) => { +export const isImage = (attachment) => { if (!attachment) return false; // if there's a type, only take that into account diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index d1cce0e8..0b8b2e7d 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -27,7 +27,7 @@ import { useOutletContext } from "react-router-dom"; import { useRemark } from "react-remark"; import styled from "@emotion/styled"; import { formatBytes, formatShortDateTime, maybeActionErrors, openUrl, shortUrl, topicShortUrl, unmatchedTags } from "../app/utils"; -import { formatMessage, formatTitle } from "../app/notificationUtils"; +import { formatMessage, formatTitle, isImage } from "../app/notificationUtils"; import { LightboxBackdrop, Paragraph, VerticallyCenteredContainer } from "./styles"; import subscriptionManager from "../app/SubscriptionManager"; import priority1 from "../img/priority-1.svg"; @@ -346,7 +346,7 @@ const Attachment = (props) => { const { attachment } = props; const expired = attachment.expires && attachment.expires < Date.now() / 1000; const expires = attachment.expires && attachment.expires > Date.now() / 1000; - const displayableImage = !expired && attachment.type && attachment.type.startsWith("image/"); + const displayableImage = !expired && isImage(attachment); // Unexpired image if (displayableImage) { From 4800bb05d2e2103924f67434882c833f2211097b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 3 Aug 2023 10:49:04 -0400 Subject: [PATCH 195/305] Thank you @darkmattercoder for your donation --- README.md | 3 +- go.mod | 26 +- go.sum | 27 ++ web/package-lock.json | 845 ++++++++++++++++++++++++------------------ 4 files changed, 531 insertions(+), 370 deletions(-) diff --git a/README.md b/README.md index 4c4f6645..f74a7ed9 100644 --- a/README.md +++ b/README.md @@ -141,8 +141,9 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + -I'd also like to thank JetBrains for providing their awesome [IntelliJ IDEA](https://www.jetbrains.com/idea/) to me for free, +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: diff --git a/go.mod b/go.mod index 1fc1e769..1f17fcac 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.11.0 // indirect + cloud.google.com/go/firestore v1.12.0 // indirect cloud.google.com/go/storage v1.31.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect @@ -19,22 +19,22 @@ require ( golang.org/x/sync v0.3.0 golang.org/x/term v0.10.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.130.0 + google.golang.org/api v0.134.0 gopkg.in/yaml.v2 v2.4.0 ) require github.com/pkg/errors v0.9.1 // indirect require ( - firebase.google.com/go/v4 v4.11.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.25.0 + github.com/stripe/stripe-go/v74 v74.28.0 ) require ( - cloud.google.com/go v0.110.4 // indirect - cloud.google.com/go/compute v1.20.1 // 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.1 // indirect cloud.google.com/go/longrunning v0.5.1 // indirect @@ -58,21 +58,21 @@ require ( github.com/pmezard/go-difflib v1.0.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.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.12.0 // indirect + golang.org/x/net v0.13.0 // indirect golang.org/x/sys v0.10.0 // indirect golang.org/x/text v0.11.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.3 // indirect - google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/grpc v1.56.2 // indirect + google.golang.org/appengine/v2 v2.0.4 // indirect + google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf // 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 61230150..6775fa86 100644 --- a/go.sum +++ b/go.sum @@ -4,12 +4,18 @@ cloud.google.com/go v0.110.3 h1:wwearW+L7sAPSomPIgJ3bVn6Ck00HGQnn5HMLwf0azo= cloud.google.com/go v0.110.3/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +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.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +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.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +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.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= @@ -18,6 +24,8 @@ cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdT cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= firebase.google.com/go/v4 v4.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= +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= @@ -135,6 +143,8 @@ github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdO github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.11.0 h1:5EAgkfkMl659uZPbe9AS2N68a7Cc1TJbPEuGzFuRbyk= github.com/prometheus/procfs v0.11.0/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +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= @@ -153,6 +163,8 @@ github.com/stripe/stripe-go/v74 v74.24.0 h1:h+hXEI5avC5moAh2YLtphMFTBnp11TfXTcP4 github.com/stripe/stripe-go/v74 v74.24.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/stripe/stripe-go/v74 v74.25.0 h1:mGJp9L1ymxjFvq5MlmG6ynv/fAGX6LLU8MyMVsiRAMY= github.com/stripe/stripe-go/v74 v74.25.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/stripe/stripe-go/v74 v74.28.0 h1:ItzPPy+cjMKbR3Oihknt/8dv6PANp3hTThUGZjhF9lc= +github.com/stripe/stripe-go/v74 v74.28.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -193,6 +205,8 @@ golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= @@ -250,12 +264,16 @@ google.golang.org/api v0.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= google.golang.org/api v0.130.0 h1:A50ujooa1h9iizvfzA4rrJr2B7uRmWexwbekQ2+5FPQ= google.golang.org/api v0.130.0/go.mod h1:J/LCJMYSDFvAVREGCbrESb53n4++NMBDetSHGL5I5RY= +google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= +google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine/v2 v2.0.3 h1:AyY/mipuqiyCIAqOevfmu5fMDc5/9P/QggWfCQYdkSA= google.golang.org/appengine/v2 v2.0.3/go.mod h1:2Z0TTdcXxnHdXzmp8drrmOExUDM2WQgyT33c6JDUlJM= +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= @@ -264,14 +282,20 @@ google.golang.org/genproto v0.0.0-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUF google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf h1:v5Cf4E9+6tawYrs/grq1q1hFpGtzlGFzgWHqwt6NFiU= +google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo= +google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf h1:guOdSPaeFgN+jEJwTo1dQ71hdBm+yKSCCKuTRkJzcVo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= 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= @@ -284,6 +308,8 @@ google.golang.org/grpc v1.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +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= @@ -295,6 +321,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= 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= diff --git a/web/package-lock.json b/web/package-lock.json index cd434f5e..f9ab3153 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -79,35 +79,35 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "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.22.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz", - "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", "@babel/helpers": "^7.22.6", "@babel/parser": "^7.22.7", "@babel/template": "^7.22.5", "@babel/traverse": "^7.22.8", "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" + "json5": "^2.2.2", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -118,9 +118,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", - "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dev": true, "dependencies": { "@babel/types": "^7.22.5", @@ -157,16 +157,16 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", + "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", + "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -176,9 +176,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", - "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", + "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -186,10 +186,10 @@ "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -199,14 +199,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", - "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", + "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", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "regexpu-core": "^5.3.1" + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -216,9 +216,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "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", @@ -228,7 +228,7 @@ "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { @@ -289,22 +289,22 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "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.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -329,15 +329,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "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.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-wrap-function": "^7.22.9" }, "engines": { "node": ">=6.9.0" @@ -347,20 +346,20 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "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.5", "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -425,14 +424,13 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", + "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { @@ -1576,13 +1574,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz", - "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1656,11 +1654,11 @@ "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", "babel-plugin-polyfill-corejs2": "^0.4.4", "babel-plugin-polyfill-corejs3": "^0.8.2", "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0" + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1670,9 +1668,9 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1682,7 +1680,7 @@ "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/regjsgen": { @@ -1894,9 +1892,9 @@ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/android-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", - "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", "cpu": [ "arm" ], @@ -1910,9 +1908,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", - "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", "cpu": [ "arm64" ], @@ -1926,9 +1924,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", - "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", "cpu": [ "x64" ], @@ -1942,9 +1940,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", - "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", "cpu": [ "arm64" ], @@ -1958,9 +1956,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", - "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", "cpu": [ "x64" ], @@ -1974,9 +1972,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", - "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", "cpu": [ "arm64" ], @@ -1990,9 +1988,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", - "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", "cpu": [ "x64" ], @@ -2006,9 +2004,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", - "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", "cpu": [ "arm" ], @@ -2022,9 +2020,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", - "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", "cpu": [ "arm64" ], @@ -2038,9 +2036,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", - "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", "cpu": [ "ia32" ], @@ -2054,9 +2052,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", - "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", "cpu": [ "loong64" ], @@ -2070,9 +2068,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", - "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", "cpu": [ "mips64el" ], @@ -2086,9 +2084,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", - "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", "cpu": [ "ppc64" ], @@ -2102,9 +2100,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", - "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", "cpu": [ "riscv64" ], @@ -2118,9 +2116,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", - "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", "cpu": [ "s390x" ], @@ -2134,9 +2132,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", - "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", "cpu": [ "x64" ], @@ -2150,9 +2148,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", - "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", "cpu": [ "x64" ], @@ -2166,9 +2164,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", - "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", "cpu": [ "x64" ], @@ -2182,9 +2180,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", - "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", "cpu": [ "x64" ], @@ -2198,9 +2196,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", - "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", "cpu": [ "arm64" ], @@ -2214,9 +2212,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", - "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", "cpu": [ "ia32" ], @@ -2230,9 +2228,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", - "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", "cpu": [ "x64" ], @@ -2261,18 +2259,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "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.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2320,9 +2318,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2437,16 +2435,16 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.6", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.6.tgz", - "integrity": "sha512-jcHy6HwOX7KzRhRtL8nvIvUlxvLx2Fl6NMRCyUSQSvMTyfou9kndekz0H4HJaXvG1Y4WEifk23RYedOlrD1kEQ==", + "version": "5.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", + "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.3", "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2469,20 +2467,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.13.7.tgz", - "integrity": "sha512-/suIo4WoeL/OyO3KUsFVpdOmKiSAr6NpWXmQ4WLSxwKrTiha1FJxM6vwAki5W/5kR9WnVLw5E8JC4oHHsutT8w==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.3.tgz", + "integrity": "sha512-QxvrcDqphZoXRjsAmCaQylmWjC/8/qKWwIde1MJMna5YIst3R9O0qhKRPu36/OE2d8AeTbCVjRcRvNqhhW8jyg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.13.7.tgz", - "integrity": "sha512-zoVtkb9jYVUGfI7CobOdDBEAlpg3XESiO6cWqSDGwEma69+CBDIAwGpnO5truvQDJHBGSAfzFj3nObwxjkyA7Q==", + "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.22.5" + "@babel/runtime": "^7.22.6" }, "engines": { "node": ">=12.0.0" @@ -2503,18 +2501,18 @@ } }, "node_modules/@mui/material": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.13.7.tgz", - "integrity": "sha512-+n453jDDm88zZM3b5YK29nZ7gXY+s+rryH9ovDbhmfSkOlFtp+KSqbXy5cTaC/UlDqDM7sYYJGq8BmJov3v9Tg==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.3.tgz", + "integrity": "sha512-dlu4SOcCp9Cy+wkcfZ/ns9ZkP40nr/WPgqxX0HmrE0o+dkE1ropY9BbHsLrTlYJCko8yzcC8bLghrD4xqZG1og==", "dependencies": { - "@babel/runtime": "^7.22.5", - "@mui/base": "5.0.0-beta.6", - "@mui/core-downloads-tracker": "^5.13.7", - "@mui/system": "^5.13.7", + "@babel/runtime": "^7.22.6", + "@mui/base": "5.0.0-beta.9", + "@mui/core-downloads-tracker": "^5.14.3", + "@mui/system": "^5.14.3", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", + "@mui/utils": "^5.14.3", "@types/react-transition-group": "^4.4.6", - "clsx": "^1.2.1", + "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", "react-is": "^18.2.0", @@ -2604,16 +2602,16 @@ } }, "node_modules/@mui/system": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.7.tgz", - "integrity": "sha512-7R2KdI6vr8KtnauEfg9e9xQmPk6Gg/1vGNiALYyhSI+cYztxN6WmlSqGX4bjWn/Sygp1TUE1jhFEgs7MWruhkQ==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.3.tgz", + "integrity": "sha512-b+C+j9+75+/iIYSa+1S4eCMc9MDNrj9hzWfExJqS2GffuNocRagjBZFyjtMqsLWLxMxQIX8Cg6j0hAioiw+WfQ==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.7", - "clsx": "^1.2.1", + "@mui/utils": "^5.14.3", + "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" }, @@ -2656,11 +2654,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.7.tgz", - "integrity": "sha512-/3BLptG/q0u36eYED7Nhf4fKXmcKb6LjjT7ZMwhZIZSdSxVqDqSTmATW3a56n3KEPQUXCU9TpxAfCBQhs6brVA==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", + "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", @@ -2677,15 +2675,6 @@ "react": "^17.0.0 || ^18.0.0" } }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2731,9 +2720,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", - "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", + "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", "engines": { "node": ">=14" } @@ -2763,17 +2752,17 @@ "dev": true }, "node_modules/@types/mdast": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", - "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "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": "*" + "@types/unist": "^2" } }, "node_modules/@types/node": { - "version": "20.4.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz", - "integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==", + "version": "20.4.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.6.tgz", + "integrity": "sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA==", "dev": true }, "node_modules/@types/parse-json": { @@ -2787,9 +2776,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", - "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "version": "18.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz", + "integrity": "sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2833,17 +2822,17 @@ "dev": true }, "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "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.0.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.2.tgz", - "integrity": "sha512-zbnVp3Esfg33zDaoLrjxG+p/dPiOtpvJA+1oOEQwSxMMTRL9zi1eghIcd2WtLjkcKnPsa3S15LzS/OzDn2BOCA==", + "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.22.5", + "@babel/core": "^7.22.9", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", "react-refresh": "^0.14.0" @@ -2959,6 +2948,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "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.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -3008,6 +3016,26 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/arraybuffer.prototype.slice": { + "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", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -3074,42 +3102,42 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "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.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "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.1", + "@babel/helper-define-polyfill-provider": "^0.4.2", "core-js-compat": "^3.31.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "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.1" + "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/bail": { @@ -3150,9 +3178,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "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": [ { @@ -3169,9 +3197,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -3221,9 +3249,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001514", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz", - "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==", + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "dev": true, "funding": [ { @@ -3289,9 +3317,9 @@ } }, "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } @@ -3351,9 +3379,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "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.21.9" @@ -3539,9 +3567,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.454", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz", - "integrity": "sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==", + "version": "1.4.482", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.482.tgz", + "integrity": "sha512-h+UqpfmEr1Qkk0zp7ej/jid7CXoq4m4QzW6wNTb0ELJ/BZCpA4wgUylBIMGCe621tnr4l5VmoHjdoSx2lbnNJA==", "dev": true }, "node_modules/emoji-regex": { @@ -3567,18 +3595,19 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "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.1", "available-typed-arrays": "^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.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -3598,14 +3627,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "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.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -3655,9 +3688,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", - "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", "dev": true, "hasInstallScript": true, "bin": { @@ -3667,28 +3700,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.11", - "@esbuild/android-arm64": "0.18.11", - "@esbuild/android-x64": "0.18.11", - "@esbuild/darwin-arm64": "0.18.11", - "@esbuild/darwin-x64": "0.18.11", - "@esbuild/freebsd-arm64": "0.18.11", - "@esbuild/freebsd-x64": "0.18.11", - "@esbuild/linux-arm": "0.18.11", - "@esbuild/linux-arm64": "0.18.11", - "@esbuild/linux-ia32": "0.18.11", - "@esbuild/linux-loong64": "0.18.11", - "@esbuild/linux-mips64el": "0.18.11", - "@esbuild/linux-ppc64": "0.18.11", - "@esbuild/linux-riscv64": "0.18.11", - "@esbuild/linux-s390x": "0.18.11", - "@esbuild/linux-x64": "0.18.11", - "@esbuild/netbsd-x64": "0.18.11", - "@esbuild/openbsd-x64": "0.18.11", - "@esbuild/sunos-x64": "0.18.11", - "@esbuild/win32-arm64": "0.18.11", - "@esbuild/win32-ia32": "0.18.11", - "@esbuild/win32-x64": "0.18.11" + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" } }, "node_modules/escalade": { @@ -3712,27 +3745,27 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3742,7 +3775,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -3754,7 +3786,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -3808,9 +3839,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -3866,26 +3897,29 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "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.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.7", - "eslint-module-utils": "^2.7.4", + "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.12.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "resolve": "^1.22.3", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" @@ -3915,6 +3949,23 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", + "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.12.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", @@ -3946,9 +3997,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", + "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -3964,7 +4015,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -4016,9 +4067,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -4032,9 +4083,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4141,9 +4192,9 @@ } }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -4217,9 +4268,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4680,9 +4731,9 @@ } }, "node_modules/humanize-duration": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.28.0.tgz", - "integrity": "sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==" + "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", @@ -5112,16 +5163,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -5142,6 +5189,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5362,9 +5415,9 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -5798,6 +5851,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "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.21.2", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", @@ -5988,9 +6053,9 @@ } }, "node_modules/postcss": { - "version": "8.4.25", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", - "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", + "version": "8.4.27", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", + "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", "dev": true, "funding": [ { @@ -6040,9 +6105,9 @@ } }, "node_modules/pretty-bytes": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", - "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", "dev": true, "engines": { "node": "^14.13.1 || >=16.0.0" @@ -6207,11 +6272,11 @@ } }, "node_modules/react-router": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", - "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", + "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", "dependencies": { - "@remix-run/router": "1.7.1" + "@remix-run/router": "1.7.2" }, "engines": { "node": ">=14" @@ -6221,12 +6286,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", - "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", + "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", "dependencies": { - "@remix-run/router": "1.7.1", - "react-router": "6.14.1" + "@remix-run/router": "1.7.2", + "react-router": "6.14.2" }, "engines": { "node": ">=14" @@ -6434,9 +6499,9 @@ } }, "node_modules/rollup": { - "version": "3.26.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz", - "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.1.tgz", + "integrity": "sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6472,6 +6537,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "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.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6515,9 +6598,9 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6853,9 +6936,9 @@ } }, "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "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", @@ -6966,6 +7049,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -7220,13 +7354,13 @@ } }, "node_modules/vite": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.2.tgz", - "integrity": "sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.8.tgz", + "integrity": "sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==", "dev": true, "dependencies": { "esbuild": "^0.18.10", - "postcss": "^8.4.24", + "postcss": "^8.4.26", "rollup": "^3.25.2" }, "bin": { @@ -7358,17 +7492,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "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.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" From 2e08c48742aa07934ada49a49d7e567341b755b5 Mon Sep 17 00:00:00 2001 From: Christian Meis Date: Thu, 3 Aug 2023 14:56:43 +0000 Subject: [PATCH 196/305] Translated using Weblate (German) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/de/ --- web/public/static/langs/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/de.json b/web/public/static/langs/de.json index 6343deec..d29760f1 100644 --- a/web/public/static/langs/de.json +++ b/web/public/static/langs/de.json @@ -310,7 +310,7 @@ "prefs_reservations_delete_button": "Zugriff auf Thema zurücksetzen", "prefs_reservations_table": "Übersicht reservierter Themen", "prefs_reservations_table_topic_header": "Thema", - "prefs_reservations_table_everyone_deny_all": "Nur kann veröffentlichen und lesen", + "prefs_reservations_table_everyone_deny_all": "Nur ich kann veröffentlichen und lesen", "prefs_reservations_table_everyone_write_only": "Ich kann veröffentlichen und lesen, jeder kann veröffentlichen", "prefs_reservations_table_not_subscribed": "Nicht abonniert", "prefs_reservations_table_click_to_subscribe": "Klicken um zu abonnieren", From 140fdcca816ed2dac7aa1284215f1251cf5a0f2a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 5 Aug 2023 21:13:48 -0400 Subject: [PATCH 197/305] Thank you @bmcgonag for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f74a7ed9..1081f4f2 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 8544733048d6f1bc001ea1e12793cab57a8b1416 Mon Sep 17 00:00:00 2001 From: Nguyen Loc Date: Mon, 7 Aug 2023 03:58:56 +0200 Subject: [PATCH 198/305] Added translation using Weblate (Vietnamese) --- web/public/static/langs/vi.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/public/static/langs/vi.json diff --git a/web/public/static/langs/vi.json b/web/public/static/langs/vi.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/web/public/static/langs/vi.json @@ -0,0 +1 @@ +{} From b80aec90d051c7c86b9d03c32fd78e1db7217a82 Mon Sep 17 00:00:00 2001 From: Hunter Kehoe Date: Sun, 6 Aug 2023 22:44:35 -0600 Subject: [PATCH 199/305] fixes #829 --- client/client.yml | 5 +++- client/config.go | 4 +-- client/config_test.go | 12 ++++----- client/options.go | 15 +++++++++++ cmd/subscribe.go | 15 +++++++---- cmd/subscribe_test.go | 60 +++++++++++++++++++++++++++++++++++++++++-- docs/releases.md | 1 + 7 files changed, 96 insertions(+), 16 deletions(-) diff --git a/client/client.yml b/client/client.yml index 1b81b80d..ebf4c281 100644 --- a/client/client.yml +++ b/client/client.yml @@ -7,7 +7,10 @@ # Default credentials will be used with "ntfy publish" and "ntfy subscribe" if no other credentials are provided. # You can set a default token to use or a default user:password combination, but not both. For an empty password, -# use empty double-quotes ("") +# use empty double-quotes (""). +# +# To override the default user:password combination or default token for a particular subscription (e.g., to send +# no Authorization header), set the user:pass/token for the subscription to empty double-quotes (""). # default-token: diff --git a/client/config.go b/client/config.go index d4337d47..bc46ab89 100644 --- a/client/config.go +++ b/client/config.go @@ -23,9 +23,9 @@ type Config struct { // Subscribe is the struct for a Subscription within Config type Subscribe struct { Topic string `yaml:"topic"` - User string `yaml:"user"` + User *string `yaml:"user"` Password *string `yaml:"password"` - Token string `yaml:"token"` + Token *string `yaml:"token"` Command string `yaml:"command"` If map[string]string `yaml:"if"` } diff --git a/client/config_test.go b/client/config_test.go index f22e6b20..c85d3d49 100644 --- a/client/config_test.go +++ b/client/config_test.go @@ -37,7 +37,7 @@ subscribe: require.Equal(t, 4, len(conf.Subscribe)) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "", conf.Subscribe[0].Command) - require.Equal(t, "phil", conf.Subscribe[0].User) + require.Equal(t, "phil", *conf.Subscribe[0].User) require.Equal(t, "mypass", *conf.Subscribe[0].Password) require.Equal(t, "echo-this", conf.Subscribe[1].Topic) require.Equal(t, `echo "Message received: $message"`, conf.Subscribe[1].Command) @@ -67,7 +67,7 @@ subscribe: require.Equal(t, 1, len(conf.Subscribe)) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "", conf.Subscribe[0].Command) - require.Equal(t, "phil", conf.Subscribe[0].User) + require.Equal(t, "phil", *conf.Subscribe[0].User) require.Equal(t, "", *conf.Subscribe[0].Password) } @@ -91,7 +91,7 @@ subscribe: require.Equal(t, 1, len(conf.Subscribe)) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "", conf.Subscribe[0].Command) - require.Equal(t, "phil", conf.Subscribe[0].User) + require.Equal(t, "phil", *conf.Subscribe[0].User) require.Nil(t, conf.Subscribe[0].Password) } @@ -113,7 +113,7 @@ subscribe: require.Equal(t, 1, len(conf.Subscribe)) require.Equal(t, "no-command-with-auth", conf.Subscribe[0].Topic) require.Equal(t, "", conf.Subscribe[0].Command) - require.Equal(t, "phil", conf.Subscribe[0].User) + require.Equal(t, "phil", *conf.Subscribe[0].User) require.Nil(t, conf.Subscribe[0].Password) } @@ -134,7 +134,7 @@ subscribe: require.Equal(t, "tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2", conf.DefaultToken) require.Equal(t, 1, len(conf.Subscribe)) require.Equal(t, "mytopic", conf.Subscribe[0].Topic) - require.Equal(t, "", conf.Subscribe[0].User) + require.Nil(t, conf.Subscribe[0].User) require.Nil(t, conf.Subscribe[0].Password) - require.Equal(t, "", conf.Subscribe[0].Token) + require.Nil(t, conf.Subscribe[0].Token) } diff --git a/client/options.go b/client/options.go index 7f6232f8..630f1554 100644 --- a/client/options.go +++ b/client/options.go @@ -97,6 +97,11 @@ func WithBearerAuth(token string) PublishOption { return WithHeader("Authorization", fmt.Sprintf("Bearer %s", token)) } +// WithEmptyAuth clears the Authorization header +func WithEmptyAuth() PublishOption { + return RemoveHeader("Authorization") +} + // WithNoCache instructs the server not to cache the message server-side func WithNoCache() PublishOption { return WithHeader("X-Cache", "no") @@ -187,3 +192,13 @@ func WithQueryParam(param, value string) RequestOption { return nil } } + +// RemoveHeader is a generic option to remove a header from a request +func RemoveHeader(header string) RequestOption { + return func(r *http.Request) error { + if header != "" { + delete(r.Header, header) + } + return nil + } +} diff --git a/cmd/subscribe.go b/cmd/subscribe.go index c85c4686..77a1b5f1 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -225,12 +225,17 @@ func doSubscribe(c *cli.Context, cl *client.Client, conf *client.Config, topic, } func maybeAddAuthHeader(s client.Subscribe, conf *client.Config) client.SubscribeOption { - // check for subscription token then subscription user:pass - if s.Token != "" { - return client.WithBearerAuth(s.Token) + // if an explicit empty token or empty user:pass is given, exit without auth + if (s.Token != nil && *s.Token == "") || (s.User != nil && *s.User == "" && s.Password != nil && *s.Password == "") { + return client.WithEmptyAuth() } - if s.User != "" && s.Password != nil { - return client.WithBasicAuth(s.User, *s.Password) + + // check for subscription token then subscription user:pass + if s.Token != nil && *s.Token != "" { + return client.WithBearerAuth(*s.Token) + } + if s.User != nil && *s.User != "" && s.Password != nil { + return client.WithBasicAuth(*s.User, *s.Password) } // if no subscription token nor subscription user:pass, check for default token then default user:pass diff --git a/cmd/subscribe_test.go b/cmd/subscribe_test.go index 0b3a0a47..08dbbf5d 100644 --- a/cmd/subscribe_test.go +++ b/cmd/subscribe_test.go @@ -330,7 +330,7 @@ default-token: tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 app, _, stdout, _ := newTestApp() - require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--config=" + filename, "mytopic"})) + require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--from-config", "--config=" + filename, "mytopic"})) require.Equal(t, message, strings.TrimSpace(stdout.String())) } @@ -355,7 +355,63 @@ default-password: mypass app, _, stdout, _ := newTestApp() - require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--config=" + filename, "mytopic"})) + require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--from-config", "--config=" + filename, "mytopic"})) + + require.Equal(t, message, strings.TrimSpace(stdout.String())) +} + +func TestCLI_Subscribe_Override_Default_UserPass_With_Empty_UserPass(t *testing.T) { + message := `{"id":"RXIQBFaieLVr","time":124,"expires":1124,"event":"message","topic":"mytopic","message":"triggered"}` + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "/mytopic/json", r.URL.Path) + require.Equal(t, "", r.Header.Get("Authorization")) + + w.WriteHeader(http.StatusOK) + w.Write([]byte(message)) + })) + defer server.Close() + + filename := filepath.Join(t.TempDir(), "client.yml") + require.Nil(t, os.WriteFile(filename, []byte(fmt.Sprintf(` +default-host: %s +default-user: philipp +default-password: mypass +subscribe: + - topic: mytopic + user: "" + password: "" +`, server.URL)), 0600)) + + app, _, stdout, _ := newTestApp() + + require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--from-config", "--config=" + filename})) + + require.Equal(t, message, strings.TrimSpace(stdout.String())) +} + +func TestCLI_Subscribe_Override_Default_Token_With_Empty_Token(t *testing.T) { + message := `{"id":"RXIQBFaieLVr","time":124,"expires":1124,"event":"message","topic":"mytopic","message":"triggered"}` + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "/mytopic/json", r.URL.Path) + require.Equal(t, "", r.Header.Get("Authorization")) + + w.WriteHeader(http.StatusOK) + w.Write([]byte(message)) + })) + defer server.Close() + + filename := filepath.Join(t.TempDir(), "client.yml") + require.Nil(t, os.WriteFile(filename, []byte(fmt.Sprintf(` +default-host: %s +default-token: tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 +subscribe: + - topic: mytopic + token: "" +`, server.URL)), 0600)) + + app, _, stdout, _ := newTestApp() + + require.Nil(t, app.Run([]string{"ntfy", "subscribe", "--poll", "--from-config", "--config=" + filename})) require.Equal(t, message, strings.TrimSpace(stdout.String())) } diff --git a/docs/releases.md b/docs/releases.md index 6fc0f510..a2ee1586 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1262,6 +1262,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) +* You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) ### ntfy Android app v1.16.1 (UNRELEASED) From a7dc3d84e0fbab199a1a1d0fc386681494c17967 Mon Sep 17 00:00:00 2001 From: wunter8 Date: Mon, 7 Aug 2023 22:59:24 -0600 Subject: [PATCH 200/305] fix typo --- docs/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index a2ee1586..4cdbb312 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1262,7 +1262,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) -* You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) +* You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) ### ntfy Android app v1.16.1 (UNRELEASED) From 17e634c56311ca093df09f103a9e1e63841569a7 Mon Sep 17 00:00:00 2001 From: Shjosan Date: Mon, 7 Aug 2023 09:14:48 +0000 Subject: [PATCH 201/305] Translated using Weblate (Swedish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sv/ --- web/public/static/langs/sv.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/sv.json b/web/public/static/langs/sv.json index bc4a5405..90647542 100644 --- a/web/public/static/langs/sv.json +++ b/web/public/static/langs/sv.json @@ -277,7 +277,7 @@ "publish_dialog_priority_low": "Låg prioritet", "publish_dialog_priority_default": "Standard prioritet", "publish_dialog_priority_high": "Hög prioritet", - "publish_dialog_priority_max": "Högsta prioritet", + "publish_dialog_priority_max": "Max. prioritet", "publish_dialog_base_url_label": "Service-URL", "publish_dialog_email_label": "E-post", "publish_dialog_attach_reset": "Ta bort URL för bifogade filer", From ea9f2c6e3549e5f5fb6f88c0a224d8664c4e3242 Mon Sep 17 00:00:00 2001 From: CaptB Date: Thu, 10 Aug 2023 10:00:55 +0000 Subject: [PATCH 202/305] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/zh_Hans/ --- web/public/static/langs/zh_Hans.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index 52e0a1b8..f6858715 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -359,5 +359,26 @@ "publish_dialog_chip_call_no_verified_numbers_tooltip": "未验证的手机号", "account_basics_phone_numbers_title": "电话号码", "account_basics_phone_numbers_description": "电话通知", - "account_basics_phone_numbers_dialog_description": "要使用来电通知功能,您需要添加并验证至少一个电话号码。可以通过短信或电话进行验证。" + "account_basics_phone_numbers_dialog_description": "要使用来电通知功能,您需要添加并验证至少一个电话号码。可以通过短信或电话进行验证。", + "account_basics_phone_numbers_dialog_code_label": "验证码", + "account_basics_phone_numbers_dialog_code_placeholder": "例如:123456", + "account_basics_phone_numbers_dialog_check_verification_button": "确认码", + "account_basics_phone_numbers_dialog_channel_sms": "短信", + "account_basics_phone_numbers_dialog_channel_call": "拨打", + "publish_dialog_call_reset": "清空拨号", + "account_basics_phone_numbers_no_phone_numbers_yet": "无可执行的电话号码", + "account_basics_phone_numbers_dialog_title": "添加电话号码", + "account_basics_phone_numbers_copied_to_clipboard": "电话号码已复制到剪贴板", + "account_basics_phone_numbers_dialog_number_label": "电话号码", + "account_basics_phone_numbers_dialog_number_placeholder": "例如:+1222333444", + "account_usage_calls_title": "已拨打电话", + "account_usage_calls_none": "此帐号无法拨打电话", + "account_upgrade_dialog_tier_features_reservations_one": "一条保留主题", + "account_upgrade_dialog_tier_features_emails_one": "一封每日邮件", + "account_upgrade_dialog_tier_features_calls_one": "一通每日电话", + "account_basics_phone_numbers_dialog_verify_button_sms": "发送信息", + "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": "无电话呼叫" } From f77958fc358dcd59122ad02318ada336d71bed7c Mon Sep 17 00:00:00 2001 From: Erik S Date: Tue, 15 Aug 2023 04:02:23 +0000 Subject: [PATCH 203/305] Translated using Weblate (Russian) Currently translated at 95.5% (365 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ru/ --- web/public/static/langs/ru.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ru.json b/web/public/static/langs/ru.json index 9633d97d..d2c8d7fc 100644 --- a/web/public/static/langs/ru.json +++ b/web/public/static/langs/ru.json @@ -352,5 +352,16 @@ "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} в год. Оплата помесячно.", "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} ежегодно. Сэкономьте {{save}}.", "account_upgrade_dialog_billing_contact_email": "По вопросам оплаты, пожалуйста свяжитесь с нами.", - "account_upgrade_dialog_billing_contact_website": "По вопросам оплаты, пожалуйста обратитесь к нашему сайту." + "account_upgrade_dialog_billing_contact_website": "По вопросам оплаты, пожалуйста обратитесь к нашему сайту.", + "publish_dialog_call_reset": "Удалить вызов", + "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", + "account_basics_phone_numbers_dialog_verify_button_sms": "Отправить SMS", + "account_usage_calls_title": "Совершённые вызовы", + "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": "Нет вызовов" } From 3e3b556108209eeab3410188e6f6cc14d425a4d8 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 21:42:40 +0200 Subject: [PATCH 204/305] Fix excess token deletion bug --- docs/releases.md | 3 +- go.mod | 30 +- go.sum | 30 ++ user/manager.go | 5 +- user/manager_test.go | 66 +++- web/package-lock.json | 837 +++++++++++++++++++++++++----------------- 6 files changed, 591 insertions(+), 380 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 4cdbb312..9cee59af 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1260,9 +1260,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release **Bug fixes + maintenance:** -* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) * You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) +* Fixes issue with tokens getting deleted in certain cases ([#838](https://github.com/binwiederhier/ntfy/issues/838)) ### ntfy Android app v1.16.1 (UNRELEASED) diff --git a/go.mod b/go.mod index 1f17fcac..d46c3deb 100644 --- a/go.mod +++ b/go.mod @@ -4,22 +4,22 @@ go 1.18 require ( cloud.google.com/go/firestore v1.12.0 // indirect - cloud.google.com/go/storage v1.31.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.2 // indirect - github.com/emersion/go-smtp v0.17.0 + github.com/emersion/go-smtp v0.18.0 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.11.0 - golang.org/x/oauth2 v0.10.0 // indirect + 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.10.0 + golang.org/x/term v0.11.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.134.0 + google.golang.org/api v0.137.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -29,14 +29,14 @@ require ( 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.28.0 + github.com/stripe/stripe-go/v74 v74.30.0 ) require ( 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.1 // 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 @@ -49,7 +49,7 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/google/s2a-go v0.1.4 // 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 @@ -63,15 +63,15 @@ require ( 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.13.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/text v0.11.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-20230731193218-e0aa005b6bdf // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf // 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 6775fa86..3c804522 100644 --- a/go.sum +++ b/go.sum @@ -18,10 +18,14 @@ cloud.google.com/go/firestore v1.12.0 h1:aeEA/N7DW7+l2u5jtkO8I0qv0D95YwjggD8kUHr cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +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.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= +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.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= firebase.google.com/go/v4 v4.12.0 h1:I6dCkcWUMFNkFdWgzlf8SLWecQnKdFgJhMv5fT9l1qI= @@ -62,6 +66,8 @@ github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubp github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emersion/go-smtp v0.17.0 h1:tq90evlrcyqRfE6DSXaWVH54oX6OuZOQECEmhWBMEtI= github.com/emersion/go-smtp v0.17.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= +github.com/emersion/go-smtp v0.18.0 h1:lrVQqB0JdxYjC8CsBt55pSwB756bRRN6vK0DSr0pXfM= +github.com/emersion/go-smtp v0.18.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= 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= @@ -109,6 +115,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +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.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -165,6 +173,8 @@ github.com/stripe/stripe-go/v74 v74.25.0 h1:mGJp9L1ymxjFvq5MlmG6ynv/fAGX6LLU8MyM github.com/stripe/stripe-go/v74 v74.25.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/stripe/stripe-go/v74 v74.28.0 h1:ItzPPy+cjMKbR3Oihknt/8dv6PANp3hTThUGZjhF9lc= github.com/stripe/stripe-go/v74 v74.28.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= +github.com/stripe/stripe-go/v74 v74.30.0 h1:0Kf0KkeFnY7iRhOwvTerX0Ia1BRw+eV1CVJ51mGYAUY= +github.com/stripe/stripe-go/v74 v74.30.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= @@ -182,6 +192,8 @@ golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +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= @@ -207,12 +219,16 @@ golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY= golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +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.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +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= @@ -232,12 +248,16 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +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= @@ -246,6 +266,8 @@ 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.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +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= @@ -266,6 +288,8 @@ google.golang.org/api v0.130.0 h1:A50ujooa1h9iizvfzA4rrJr2B7uRmWexwbekQ2+5FPQ= google.golang.org/api v0.130.0/go.mod h1:J/LCJMYSDFvAVREGCbrESb53n4++NMBDetSHGL5I5RY= google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= +google.golang.org/api v0.137.0 h1:QrKX6uNvzJLr0Fd3vWVqcyrcmFoYi036VUAsZbiF4+s= +google.golang.org/api v0.137.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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -284,18 +308,24 @@ google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIY google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf h1:v5Cf4E9+6tawYrs/grq1q1hFpGtzlGFzgWHqwt6NFiU= google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +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-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo= google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +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-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf h1:guOdSPaeFgN+jEJwTo1dQ71hdBm+yKSCCKuTRkJzcVo= google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +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= diff --git a/user/manager.go b/user/manager.go index 87b385e6..7f3b8b1d 100644 --- a/user/manager.go +++ b/user/manager.go @@ -262,7 +262,8 @@ const ( deleteExpiredTokensQuery = `DELETE FROM user_token WHERE expires > 0 AND expires < ?` deleteExcessTokensQuery = ` DELETE FROM user_token - WHERE (user_id, token) NOT IN ( + WHERE user_id = ? + AND (user_id, token) NOT IN ( SELECT user_id, token FROM user_token WHERE user_id = ? @@ -534,7 +535,7 @@ func (a *Manager) CreateToken(userID, label string, expires time.Time, origin ne if tokenCount >= tokenMaxCount { // This pruning logic is done in two queries for efficiency. The SELECT above is a lookup // on two indices, whereas the query below is a full table scan. - if _, err := tx.Exec(deleteExcessTokensQuery, userID, tokenMaxCount); err != nil { + if _, err := tx.Exec(deleteExcessTokensQuery, userID, userID, tokenMaxCount); err != nil { return nil, err } } diff --git a/user/manager_test.go b/user/manager_test.go index 85e3c428..3c30a716 100644 --- a/user/manager_test.go +++ b/user/manager_test.go @@ -580,46 +580,80 @@ func TestManager_Token_Extend(t *testing.T) { } func TestManager_Token_MaxCount_AutoDelete(t *testing.T) { + // Tests that tokens are automatically deleted when the maximum number of tokens is reached + a := newTestManager(t, PermissionDenyAll) require.Nil(t, a.AddUser("ben", "ben", RoleUser)) + require.Nil(t, a.AddUser("phil", "phil", RoleUser)) - // Try to extend token for user without token - u, err := a.User("ben") + ben, err := a.User("ben") require.Nil(t, err) - // Tokens + phil, err := a.User("phil") + require.Nil(t, err) + + // Create 2 tokens for phil + philTokens := make([]string, 0) + token, err := a.CreateToken(phil.ID, "", time.Now().Add(72*time.Hour), netip.IPv4Unspecified()) + require.Nil(t, err) + require.NotEmpty(t, token.Value) + philTokens = append(philTokens, token.Value) + + token, err = a.CreateToken(phil.ID, "", time.Unix(0, 0), netip.IPv4Unspecified()) + require.Nil(t, err) + require.NotEmpty(t, token.Value) + philTokens = append(philTokens, token.Value) + + // Create 22 tokens for ben (only 20 allowed!) baseTime := time.Now().Add(24 * time.Hour) - tokens := make([]string, 0) - for i := 0; i < 22; i++ { - token, err := a.CreateToken(u.ID, "", time.Now().Add(72*time.Hour), netip.IPv4Unspecified()) + benTokens := make([]string, 0) + for i := 0; i < 22; i++ { // + token, err := a.CreateToken(ben.ID, "", time.Now().Add(72*time.Hour), netip.IPv4Unspecified()) require.Nil(t, err) require.NotEmpty(t, token.Value) - tokens = append(tokens, token.Value) + benTokens = append(benTokens, token.Value) // Manually modify expiry date to avoid sorting issues (this is a hack) _, err = a.db.Exec(`UPDATE user_token SET expires=? WHERE token=?`, baseTime.Add(time.Duration(i)*time.Minute).Unix(), token.Value) require.Nil(t, err) } - _, err = a.AuthenticateToken(tokens[0]) + // Ben: The first 2 tokens should have been wiped and should not work anymore! + _, err = a.AuthenticateToken(benTokens[0]) require.Equal(t, ErrUnauthenticated, err) - _, err = a.AuthenticateToken(tokens[1]) + _, err = a.AuthenticateToken(benTokens[1]) require.Equal(t, ErrUnauthenticated, err) + // Ben: The other tokens should still work for i := 2; i < 22; i++ { - userWithToken, err := a.AuthenticateToken(tokens[i]) - require.Nil(t, err, "token[%d]=%s failed", i, tokens[i]) + userWithToken, err := a.AuthenticateToken(benTokens[i]) + require.Nil(t, err, "token[%d]=%s failed", i, benTokens[i]) require.Equal(t, "ben", userWithToken.Name) - require.Equal(t, tokens[i], userWithToken.Token) + require.Equal(t, benTokens[i], userWithToken.Token) } - var count int - rows, err := a.db.Query(`SELECT COUNT(*) FROM user_token`) + // Phil: All tokens should still work + for i := 0; i < 2; i++ { + userWithToken, err := a.AuthenticateToken(philTokens[i]) + require.Nil(t, err, "token[%d]=%s failed", i, philTokens[i]) + require.Equal(t, "phil", userWithToken.Name) + require.Equal(t, philTokens[i], userWithToken.Token) + } + + var benCount int + rows, err := a.db.Query(`SELECT COUNT(*) FROM user_token WHERE user_id=?`, ben.ID) require.Nil(t, err) require.True(t, rows.Next()) - require.Nil(t, rows.Scan(&count)) - require.Equal(t, 20, count) + require.Nil(t, rows.Scan(&benCount)) + require.Equal(t, 20, benCount) + + var philCount int + rows, err = a.db.Query(`SELECT COUNT(*) FROM user_token WHERE user_id=?`, phil.ID) + require.Nil(t, err) + require.True(t, rows.Next()) + require.Nil(t, rows.Scan(&philCount)) + require.Equal(t, 2, philCount) } func TestManager_EnqueueStats_ResetStats(t *testing.T) { diff --git a/web/package-lock.json b/web/package-lock.json index f9ab3153..735fc42b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -68,11 +68,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "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.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" @@ -88,21 +89,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "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.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", + "@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.6", - "@babel/parser": "^7.22.7", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^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", @@ -118,12 +119,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "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.22.5", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -145,21 +146,21 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "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.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "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", @@ -170,15 +171,12 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", + "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", @@ -424,40 +422,40 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", + "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.5", - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "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.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^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.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "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.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -465,9 +463,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "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" @@ -520,22 +518,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -787,14 +769,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "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.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -837,9 +819,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "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" @@ -924,9 +906,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "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" @@ -1293,9 +1275,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "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", @@ -1404,13 +1386,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1511,9 +1493,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1574,13 +1556,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", - "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "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.22.9", - "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", @@ -1605,15 +1587,15 @@ "@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.22.7", + "@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.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", "@babel/plugin-transform-class-properties": "^7.22.5", "@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.22.5", + "@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.5", @@ -1636,27 +1618,27 @@ "@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.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@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.5", "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@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" }, @@ -1668,14 +1650,12 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, @@ -1690,11 +1670,11 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "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.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1715,19 +1695,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "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.5", - "@babel/generator": "^7.22.7", + "@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.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1736,9 +1716,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "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.5", @@ -1892,9 +1872,9 @@ "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/android-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", - "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ "arm" ], @@ -1908,9 +1888,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", - "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ "arm64" ], @@ -1924,9 +1904,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", - "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], @@ -1940,9 +1920,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", - "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ "arm64" ], @@ -1956,9 +1936,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", - "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], @@ -1972,9 +1952,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", - "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], @@ -1988,9 +1968,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", - "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ "x64" ], @@ -2004,9 +1984,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", - "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ "arm" ], @@ -2020,9 +2000,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", - "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", "cpu": [ "arm64" ], @@ -2036,9 +2016,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", - "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", "cpu": [ "ia32" ], @@ -2052,9 +2032,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", - "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", "cpu": [ "loong64" ], @@ -2068,9 +2048,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", - "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", "cpu": [ "mips64el" ], @@ -2084,9 +2064,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", - "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", "cpu": [ "ppc64" ], @@ -2100,9 +2080,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", - "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", "cpu": [ "riscv64" ], @@ -2116,9 +2096,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", - "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", "cpu": [ "s390x" ], @@ -2132,9 +2112,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", - "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", "cpu": [ "x64" ], @@ -2148,9 +2128,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", - "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", "cpu": [ "x64" ], @@ -2164,9 +2144,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", - "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", "cpu": [ "x64" ], @@ -2180,9 +2160,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", - "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", "cpu": [ "x64" ], @@ -2196,9 +2176,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", - "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", "cpu": [ "arm64" ], @@ -2212,9 +2192,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", - "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", "cpu": [ "ia32" ], @@ -2228,9 +2208,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", - "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", "cpu": [ "x64" ], @@ -2268,9 +2248,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", + "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", @@ -2291,9 +2271,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "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" @@ -2318,9 +2298,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", + "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" @@ -2374,9 +2354,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -2408,21 +2388,15 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "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", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@mapbox/hast-util-table-cell-style": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.0.tgz", @@ -2435,14 +2409,14 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.9", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", - "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", + "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.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.3", + "@mui/utils": "^5.14.5", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1", @@ -2467,9 +2441,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.3.tgz", - "integrity": "sha512-QxvrcDqphZoXRjsAmCaQylmWjC/8/qKWwIde1MJMna5YIst3R9O0qhKRPu36/OE2d8AeTbCVjRcRvNqhhW8jyg==", + "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" @@ -2501,16 +2475,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.3.tgz", - "integrity": "sha512-dlu4SOcCp9Cy+wkcfZ/ns9ZkP40nr/WPgqxX0HmrE0o+dkE1ropY9BbHsLrTlYJCko8yzcC8bLghrD4xqZG1og==", + "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.22.6", - "@mui/base": "5.0.0-beta.9", - "@mui/core-downloads-tracker": "^5.14.3", - "@mui/system": "^5.14.3", + "@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.3", + "@mui/utils": "^5.14.5", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", @@ -2545,12 +2519,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", - "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", + "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.22.5", - "@mui/utils": "^5.13.7", + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.14.5", "prop-types": "^15.8.1" }, "engines": { @@ -2602,15 +2576,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.3.tgz", - "integrity": "sha512-b+C+j9+75+/iIYSa+1S4eCMc9MDNrj9hzWfExJqS2GffuNocRagjBZFyjtMqsLWLxMxQIX8Cg6j0hAioiw+WfQ==", + "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.22.6", - "@mui/private-theming": "^5.13.7", + "@mui/private-theming": "^5.14.5", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.3", + "@mui/utils": "^5.14.5", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2654,9 +2628,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", - "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", + "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.22.6", "@types/prop-types": "^15.7.5", @@ -2720,11 +2694,11 @@ } }, "node_modules/@remix-run/router": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", - "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", + "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" + "node": ">=14.0.0" } }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -2760,9 +2734,9 @@ } }, "node_modules/@types/node": { - "version": "20.4.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.6.tgz", - "integrity": "sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA==", + "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": { @@ -2776,9 +2750,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz", - "integrity": "sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==", + "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": "*", @@ -3048,6 +3022,15 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -3249,9 +3232,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001519", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", - "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", + "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": [ { @@ -3567,9 +3550,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.482", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.482.tgz", - "integrity": "sha512-h+UqpfmEr1Qkk0zp7ej/jid7CXoq4m4QzW6wNTb0ELJ/BZCpA4wgUylBIMGCe621tnr4l5VmoHjdoSx2lbnNJA==", + "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": { @@ -3647,6 +3630,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-iterator-helpers": { + "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.0", + "es-abstract": "^1.21.3", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -3688,9 +3693,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", - "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, "bin": { @@ -3700,28 +3705,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.17", - "@esbuild/android-arm64": "0.18.17", - "@esbuild/android-x64": "0.18.17", - "@esbuild/darwin-arm64": "0.18.17", - "@esbuild/darwin-x64": "0.18.17", - "@esbuild/freebsd-arm64": "0.18.17", - "@esbuild/freebsd-x64": "0.18.17", - "@esbuild/linux-arm": "0.18.17", - "@esbuild/linux-arm64": "0.18.17", - "@esbuild/linux-ia32": "0.18.17", - "@esbuild/linux-loong64": "0.18.17", - "@esbuild/linux-mips64el": "0.18.17", - "@esbuild/linux-ppc64": "0.18.17", - "@esbuild/linux-riscv64": "0.18.17", - "@esbuild/linux-s390x": "0.18.17", - "@esbuild/linux-x64": "0.18.17", - "@esbuild/netbsd-x64": "0.18.17", - "@esbuild/openbsd-x64": "0.18.17", - "@esbuild/sunos-x64": "0.18.17", - "@esbuild/win32-arm64": "0.18.17", - "@esbuild/win32-ia32": "0.18.17", - "@esbuild/win32-x64": "0.18.17" + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, "node_modules/escalade": { @@ -3745,15 +3750,15 @@ } }, "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", + "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.1", - "@eslint/js": "^8.46.0", + "@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", @@ -3764,7 +3769,7 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", + "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", @@ -3851,14 +3856,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -3949,23 +3954,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.12.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", @@ -3997,15 +3985,16 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", - "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", @@ -4083,9 +4072,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4144,9 +4133,9 @@ "dev": true }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "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" @@ -4888,6 +4877,21 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -4951,9 +4955,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -4994,6 +4998,33 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5015,6 +5046,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -5108,6 +5148,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -5177,6 +5226,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -5189,6 +5247,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -5201,6 +5272,19 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/iterator.prototype": { + "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.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" + } + }, "node_modules/jake": { "version": "10.8.7", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", @@ -6053,9 +6137,9 @@ } }, "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", "dev": true, "funding": [ { @@ -6272,29 +6356,29 @@ } }, "node_modules/react-router": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", - "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", + "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.7.2" + "@remix-run/router": "1.8.0" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", - "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", + "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.7.2", - "react-router": "6.14.2" + "@remix-run/router": "1.8.0", + "react-router": "6.15.0" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8", @@ -6316,6 +6400,26 @@ "react-dom": ">=16.6.0" } }, + "node_modules/reflect.getprototypeof": { + "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.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -6335,14 +6439,14 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -6450,11 +6554,11 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "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.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6499,9 +6603,9 @@ } }, "node_modules/rollup": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.1.tgz", - "integrity": "sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==", + "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" @@ -7354,14 +7458,14 @@ } }, "node_modules/vite": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.8.tgz", - "integrity": "sha512-LONawOUUjxQridNWGQlNizfKH89qPigK36XhMI7COMGztz8KNY0JHim7/xDd71CZwGT4HtSRgI7Hy+RlhG0Gvg==", + "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", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "postcss": "^8.4.27", + "rollup": "^3.27.1" }, "bin": { "vite": "bin/vite.js" @@ -7491,6 +7595,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", From 67459650d4a8a187f6ccd42eb17732365e1900e0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 21:59:24 +0200 Subject: [PATCH 205/305] Release notes --- docs/releases.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/releases.md b/docs/releases.md index 9cee59af..160c5d5d 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1265,6 +1265,10 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) * Fixes issue with tokens getting deleted in certain cases ([#838](https://github.com/binwiederhier/ntfy/issues/838)) +**Documentation:** + +* Update docs for Apache config ([#819](https://github.com/binwiederhier/ntfy/pull/819), thanks to [@nisbet-hubbard](https://github.com/nisbet-hubbard)) + ### ntfy Android app v1.16.1 (UNRELEASED) **Features:** From bc4d4f424a7b4f7d30e7c2fd4159e51dc2c1b290 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 22:05:51 +0200 Subject: [PATCH 206/305] Pin go-smtp v0.17.0 --- go.mod | 4 ++- go.sum | 86 ++-------------------------------------------------------- 2 files changed, 5 insertions(+), 85 deletions(-) diff --git a/go.mod b/go.mod index d46c3deb..1560c61d 100644 --- a/go.mod +++ b/go.mod @@ -19,10 +19,12 @@ require ( 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.137.0 + google.golang.org/api v0.138.0 gopkg.in/yaml.v2 v2.4.0 ) +replace github.com/emersion/go-smtp => github.com/emersion/go-smtp v0.17.0 // Pin version due to breaking changes, see #839 + require github.com/pkg/errors v0.9.1 // indirect require ( diff --git a/go.sum b/go.sum index 3c804522..c6761a56 100644 --- a/go.sum +++ b/go.sum @@ -1,33 +1,19 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.110.3 h1:wwearW+L7sAPSomPIgJ3bVn6Ck00HGQnn5HMLwf0azo= -cloud.google.com/go v0.110.3/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= 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.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= 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.11.0 h1:PPgtwcYUOXV2jFe1bV3nda3RCrOa8cvBjTOn2MQVfW8= -cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= 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.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= 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.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= -cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= 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.11.0 h1:szjBoiF33A2FavRLIDZjW1mw+OsW/XAtHoYNIqWOjRk= -firebase.google.com/go/v4 v4.11.0/go.mod h1:60c36dWLK4+j05Vw5XMllek3b3PCynU3BfI46OSwsUE= 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= @@ -62,12 +48,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8bnphprS1EoVRe2Q5CKCX8iDlpqjQ/Y= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= -github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubpa8= -github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emersion/go-smtp v0.17.0 h1:tq90evlrcyqRfE6DSXaWVH54oX6OuZOQECEmhWBMEtI= github.com/emersion/go-smtp v0.17.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= -github.com/emersion/go-smtp v0.18.0 h1:lrVQqB0JdxYjC8CsBt55pSwB756bRRN6vK0DSr0pXfM= -github.com/emersion/go-smtp v0.18.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= 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= @@ -113,8 +95,6 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= 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= @@ -122,8 +102,6 @@ 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.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= 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.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -149,8 +127,6 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo 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.0 h1:5EAgkfkMl659uZPbe9AS2N68a7Cc1TJbPEuGzFuRbyk= -github.com/prometheus/procfs v0.11.0/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= 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= @@ -167,12 +143,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stripe/stripe-go/v74 v74.24.0 h1:h+hXEI5avC5moAh2YLtphMFTBnp11TfXTcP4suuWDLk= -github.com/stripe/stripe-go/v74 v74.24.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= -github.com/stripe/stripe-go/v74 v74.25.0 h1:mGJp9L1ymxjFvq5MlmG6ynv/fAGX6LLU8MyMVsiRAMY= -github.com/stripe/stripe-go/v74 v74.25.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= -github.com/stripe/stripe-go/v74 v74.28.0 h1:ItzPPy+cjMKbR3Oihknt/8dv6PANp3hTThUGZjhF9lc= -github.com/stripe/stripe-go/v74 v74.28.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/stripe/stripe-go/v74 v74.30.0 h1:0Kf0KkeFnY7iRhOwvTerX0Ia1BRw+eV1CVJ51mGYAUY= github.com/stripe/stripe-go/v74 v74.30.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= @@ -188,10 +158,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk 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.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= -golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -213,20 +179,10 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v 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.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= -golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.13.0 h1:Nvo8UFsZ8X3BhAC9699Z1j7XQ3rsZnUUm7jfBEk1ueY= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.9.0 h1:BPpt2kU7oMRq3kCHAA1tbSEshXRw1LpG2ztgDwrzuAs= -golang.org/x/oauth2 v0.9.0/go.mod h1:qYgFZaFiu6Wg24azG8bdV52QJXJGbZzIIsRCdVKzbLw= -golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= 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= @@ -246,16 +202,10 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w 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.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= -golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -264,8 +214,6 @@ 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.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 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= @@ -282,48 +230,22 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T 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.129.0 h1:2XbdjjNfFPXQyufzQVwPf1RRnHH8Den2pfNE2jw7L8w= -google.golang.org/api v0.129.0/go.mod h1:dFjiXlanKwWE3612X97llhsoI36FAoIiRj3aTl5b/zE= -google.golang.org/api v0.130.0 h1:A50ujooa1h9iizvfzA4rrJr2B7uRmWexwbekQ2+5FPQ= -google.golang.org/api v0.130.0/go.mod h1:J/LCJMYSDFvAVREGCbrESb53n4++NMBDetSHGL5I5RY= -google.golang.org/api v0.134.0 h1:ktL4Goua+UBgoP1eL1/60LwZJqa1sIzkLmvoR3hR6Gw= -google.golang.org/api v0.134.0/go.mod h1:sjRL3UnjTx5UqNQS9EWr9N8p7xbHpy1k0XGRLCf3Spk= -google.golang.org/api v0.137.0 h1:QrKX6uNvzJLr0Fd3vWVqcyrcmFoYi036VUAsZbiF4+s= -google.golang.org/api v0.137.0/go.mod h1:4xyob8CxC+0GChNBvEUAk8VBKNvYOTWM9T3v3UfRxuY= +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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine/v2 v2.0.3 h1:AyY/mipuqiyCIAqOevfmu5fMDc5/9P/QggWfCQYdkSA= -google.golang.org/appengine/v2 v2.0.3/go.mod h1:2Z0TTdcXxnHdXzmp8drrmOExUDM2WQgyT33c6JDUlJM= 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-20230629202037-9506855d4529 h1:9JucMWR7sPvCxUFd6UsOUNmA5kCcWOfORaT3tpAsKQs= -google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf h1:v5Cf4E9+6tawYrs/grq1q1hFpGtzlGFzgWHqwt6NFiU= -google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= 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-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= -google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo= -google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= 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-20230629202037-9506855d4529 h1:DEH99RbiLZhMxrpEJCZ0A+wdTe0EOgou/poSLx9vWf4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf h1:guOdSPaeFgN+jEJwTo1dQ71hdBm+yKSCCKuTRkJzcVo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= 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= @@ -334,10 +256,6 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= 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.56.1 h1:z0dNfjIl0VpaZ9iSVjA6daGatAYwPGstTjt5vkRMFkQ= -google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= -google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= 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= From 2f0ec88f40418660e5b99a7ad589d661d8c4ff6f Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 22:17:07 +0200 Subject: [PATCH 207/305] Release bump --- docs/install.md | 60 ++++++++++++++++++++++++------------------------ docs/releases.md | 37 ++++++++++++++--------------- 2 files changed, 49 insertions(+), 48 deletions(-) diff --git a/docs/install.md b/docs/install.md index c7febac1..bc5b7a0d 100644 --- a/docs/install.md +++ b/docs/install.md @@ -29,37 +29,37 @@ deb/rpm packages. === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.tar.gz - tar zxvf ntfy_2.6.2_linux_amd64.tar.gz - sudo cp -a ntfy_2.6.2_linux_amd64/ntfy /usr/local/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_amd64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_amd64.tar.gz + tar zxvf ntfy_2.7.0_linux_amd64.tar.gz + sudo cp -a ntfy_2.7.0_linux_amd64/ntfy /usr/local/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.7.0_linux_amd64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.tar.gz - tar zxvf ntfy_2.6.2_linux_armv6.tar.gz - sudo cp -a ntfy_2.6.2_linux_armv6/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv6/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv6.tar.gz + tar zxvf ntfy_2.7.0_linux_armv6.tar.gz + sudo cp -a ntfy_2.7.0_linux_armv6/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.7.0_linux_armv6/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.tar.gz - tar zxvf ntfy_2.6.2_linux_armv7.tar.gz - sudo cp -a ntfy_2.6.2_linux_armv7/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_armv7/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv7.tar.gz + tar zxvf ntfy_2.7.0_linux_armv7.tar.gz + sudo cp -a ntfy_2.7.0_linux_armv7/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.7.0_linux_armv7/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.tar.gz - tar zxvf ntfy_2.6.2_linux_arm64.tar.gz - sudo cp -a ntfy_2.6.2_linux_arm64/ntfy /usr/bin/ntfy - sudo mkdir /etc/ntfy && sudo cp ntfy_2.6.2_linux_arm64/{client,server}/*.yml /etc/ntfy + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_arm64.tar.gz + tar zxvf ntfy_2.7.0_linux_arm64.tar.gz + sudo cp -a ntfy_2.7.0_linux_arm64/ntfy /usr/bin/ntfy + sudo mkdir /etc/ntfy && sudo cp ntfy_2.7.0_linux_arm64/{client,server}/*.yml /etc/ntfy sudo ntfy serve ``` @@ -109,7 +109,7 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_amd64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -117,7 +117,7 @@ Manually installing the .deb file: === "armv6" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv6.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -125,7 +125,7 @@ Manually installing the .deb file: === "armv7/armhf" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv7.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -133,7 +133,7 @@ Manually installing the .deb file: === "arm64" ```bash - wget https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.deb + wget https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_arm64.deb sudo dpkg -i ntfy_*.deb sudo systemctl enable ntfy sudo systemctl start ntfy @@ -143,28 +143,28 @@ Manually installing the .deb file: === "x86_64/amd64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_amd64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_amd64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv6" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv6.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv6.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "armv7/armhf" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_armv7.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_armv7.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` === "arm64" ```bash - sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_linux_arm64.rpm + sudo rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_linux_arm64.rpm sudo systemctl enable ntfy sudo systemctl start ntfy ``` @@ -194,18 +194,18 @@ NixOS also supports [declarative setup of the ntfy server](https://search.nixos. ## macOS The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on macOS as well. -To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz), +To install, please [download the tarball](https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_darwin_all.tar.gz), extract it and place it somewhere in your `PATH` (e.g. `/usr/local/bin/ntfy`). If run as `root`, ntfy will look for its config at `/etc/ntfy/client.yml`. For all other users, it'll look for it at `~/Library/Application Support/ntfy/client.yml` (sample included in the tarball). ```bash -curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_darwin_all.tar.gz > ntfy_2.6.2_darwin_all.tar.gz -tar zxvf ntfy_2.6.2_darwin_all.tar.gz -sudo cp -a ntfy_2.6.2_darwin_all/ntfy /usr/local/bin/ntfy +curl -L https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_darwin_all.tar.gz > ntfy_2.7.0_darwin_all.tar.gz +tar zxvf ntfy_2.7.0_darwin_all.tar.gz +sudo cp -a ntfy_2.7.0_darwin_all/ntfy /usr/local/bin/ntfy mkdir ~/Library/Application\ Support/ntfy -cp ntfy_2.6.2_darwin_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml +cp ntfy_2.7.0_darwin_all/client/client.yml ~/Library/Application\ Support/ntfy/client.yml ntfy --help ``` @@ -223,7 +223,7 @@ brew install ntfy ## Windows The [ntfy CLI](subscribe/cli.md) (`ntfy publish` and `ntfy subscribe` only) is supported on Windows as well. -To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.6.2/ntfy_2.6.2_windows_amd64.zip), +To install, please [download the latest ZIP](https://github.com/binwiederhier/ntfy/releases/download/v2.7.0/ntfy_2.7.0_windows_amd64.zip), extract it and place the `ntfy.exe` binary somewhere in your `%Path%`. The default path for the client config file is at `%AppData%\ntfy\client.yml` (not created automatically, sample in the ZIP file). diff --git a/docs/releases.md b/docs/releases.md index 160c5d5d..c907b43d 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,6 +2,25 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). +### ntfy server v2.7.0 +Released August 17, 2023 + +**Features:** + +* Add support for [Markdown formatting](publish.md#markdown-formatting) in web app ([#310](https://github.com/binwiederhier/ntfy/issues/310), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) +* Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) + +**Bug fixes + maintenance:** + +* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) +* Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) +* You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) +* Fixes issue with tokens getting deleted in certain cases ([#838](https://github.com/binwiederhier/ntfy/issues/838)) + +**Documentation:** + +* Update docs for Apache config ([#819](https://github.com/binwiederhier/ntfy/pull/819), thanks to [@nisbet-hubbard](https://github.com/nisbet-hubbard)) + ## ntfy server v2.6.2 Released June 30, 2023 @@ -1251,24 +1270,6 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet -### ntfy server v2.7.0 (UNRELEASED) - -**Features:** - -* Add support for [Markdown formatting](publish.md#markdown-formatting) in web app ([#310](https://github.com/binwiederhier/ntfy/issues/310), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) -* Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) - -**Bug fixes + maintenance:** - -* Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) -* Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) -* You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) -* Fixes issue with tokens getting deleted in certain cases ([#838](https://github.com/binwiederhier/ntfy/issues/838)) - -**Documentation:** - -* Update docs for Apache config ([#819](https://github.com/binwiederhier/ntfy/pull/819), thanks to [@nisbet-hubbard](https://github.com/nisbet-hubbard)) - ### ntfy Android app v1.16.1 (UNRELEASED) **Features:** From 5cf1da974accc3f7ef2f0f814a7b9832a6d968a7 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 22:20:29 +0200 Subject: [PATCH 208/305] Thank you @skorokithakis for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1081f4f2..99989a46 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 0d395249ff2968595624190d47fd5c8772bd3b27 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 22:21:06 +0200 Subject: [PATCH 209/305] Thank you @eenturk for your donation --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 99989a46..abaddf42 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 99eef493d246cea4797a1e6ad4b9b334b4696274 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 22:23:06 +0200 Subject: [PATCH 210/305] Thank you @spirossi for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index abaddf42..6cc1adbe 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From d7db3950161881928d8de6ccd2b048c9d685e5c5 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Thu, 17 Aug 2023 23:06:52 +0200 Subject: [PATCH 211/305] Release note details --- docs/releases.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index c907b43d..4cc9b0b0 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -5,17 +5,30 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ### ntfy server v2.7.0 Released August 17, 2023 +This release ships Markdown support for the web app (not in the Android app yet), and adds support for +right-to-left languages (RTL) in the web app. It also fixes a few issues around date/time formatting, +internationalization support, a CLI auth bug. + +Furthermore, it fixes a security issue around access tokens getting erroneously deleted for other users +in a specific scenario. This was a denial-of-service-type security issue, since it **effectively allowed a +single user to deny access to all other users of a ntfy instance**. Please note that while tokens were +erroneously deleted, **nobody but the token owner ever had access to it.** Please refer to [the ticket](https://github.com/binwiederhier/ntfy/issues/838) +for details. **Please upgrade your ntfy instance if you run a multi-user system.** + **Features:** * Add support for [Markdown formatting](publish.md#markdown-formatting) in web app ([#310](https://github.com/binwiederhier/ntfy/issues/310), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) * Add support for right-to-left languages (RTL) in the web app ([#663](https://github.com/binwiederhier/ntfy/issues/663), thanks to [@nimbleghost](https://github.com/nimbleghost)) +**Security:** ⚠️ + +* Fixes issue with access tokens getting deleted ([#838](https://github.com/binwiederhier/ntfy/issues/838)) + **Bug fixes + maintenance:** * Fix issues with date/time with different locales ([#700](https://github.com/binwiederhier/ntfy/issues/700), thanks to [@nimbleghost](https://github.com/nimbleghost)) * Re-init i18n on each service worker message to avoid missing translations ([#817](https://github.com/binwiederhier/ntfy/pull/817), thanks to [@nihalgonsalves](https://github.com/nihalgonsalves)) * You can now unset the default user:pass/token in `client.yml` for an individual subscription to remove the Authorization header ([#829](https://github.com/binwiederhier/ntfy/issues/829), thanks to [@tomeon](https://github.com/tomeon) for reporting and to [@wunter8](https://github.com/wunter8) for fixing) -* Fixes issue with tokens getting deleted in certain cases ([#838](https://github.com/binwiederhier/ntfy/issues/838)) **Documentation:** From a5f0670f7fd1bec255f1f784f14114f2f38cc29b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 18 Aug 2023 22:44:52 +0200 Subject: [PATCH 212/305] ACLs and underscores, resolves #840 --- user/manager.go | 60 ++++++++++--- user/manager_test.go | 205 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 248 insertions(+), 17 deletions(-) diff --git a/user/manager.go b/user/manager.go index 7f3b8b1d..324b7684 100644 --- a/user/manager.go +++ b/user/manager.go @@ -160,7 +160,7 @@ const ( SELECT read, write FROM user_access a JOIN user u ON u.id = a.user_id - WHERE (u.user = ? OR u.user = ?) AND ? LIKE a.topic + WHERE (u.user = ? OR u.user = ?) AND ? LIKE a.topic ESCAPE '\' ORDER BY u.user DESC ` @@ -235,7 +235,7 @@ const ( selectOtherAccessCountQuery = ` SELECT COUNT(*) FROM user_access - WHERE (topic = ? OR ? LIKE topic) + WHERE (topic = ? OR ? LIKE topic ESCAPE '\') AND (owner_user_id IS NULL OR owner_user_id != (SELECT id FROM user WHERE user = ?)) ` deleteAllAccessQuery = `DELETE FROM user_access` @@ -312,7 +312,7 @@ const ( // Schema management queries const ( - currentSchemaVersion = 4 + currentSchemaVersion = 5 insertSchemaVersion = `INSERT INTO schemaVersion VALUES (1, ?)` updateSchemaVersion = `UPDATE schemaVersion SET version = ? WHERE id = 1` selectSchemaVersionQuery = `SELECT version FROM schemaVersion WHERE id = 1` @@ -422,6 +422,11 @@ const ( FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE ); ` + + // 4 -> 5 + migrate4To5UpdateQueries = ` + UPDATE user_access SET topic = REPLACE(topic, '_', '\_'); + ` ) var ( @@ -429,6 +434,7 @@ var ( 1: migrateFrom1, 2: migrateFrom2, 3: migrateFrom3, + 4: migrateFrom4, } ) @@ -1123,7 +1129,7 @@ func (a *Manager) Reservations(username string) ([]Reservation, error) { return nil, err } reservations = append(reservations, Reservation{ - Topic: topic, + Topic: unescapeUnderscore(topic), Owner: NewPermission(ownerRead, ownerWrite), Everyone: NewPermission(everyoneRead.Bool, everyoneWrite.Bool), // false if null }) @@ -1133,7 +1139,7 @@ func (a *Manager) Reservations(username string) ([]Reservation, error) { // HasReservation returns true if the given topic access is owned by the user func (a *Manager) HasReservation(username, topic string) (bool, error) { - rows, err := a.db.Query(selectUserHasReservationQuery, username, topic) + rows, err := a.db.Query(selectUserHasReservationQuery, username, escapeUnderscore(topic)) if err != nil { return false, err } @@ -1168,7 +1174,7 @@ func (a *Manager) ReservationsCount(username string) (int64, error) { // ReservationOwner returns user ID of the user that owns this topic, or an // empty string if it's not owned by anyone func (a *Manager) ReservationOwner(topic string) (string, error) { - rows, err := a.db.Query(selectUserReservationsOwnerQuery, topic) + rows, err := a.db.Query(selectUserReservationsOwnerQuery, escapeUnderscore(topic)) if err != nil { return "", err } @@ -1263,7 +1269,7 @@ func (a *Manager) AllowReservation(username string, topic string) error { if (!AllowedUsername(username) && username != Everyone) || !AllowedTopic(topic) { return ErrInvalidArgument } - rows, err := a.db.Query(selectOtherAccessCountQuery, topic, topic, username) + rows, err := a.db.Query(selectOtherAccessCountQuery, escapeUnderscore(topic), escapeUnderscore(topic), username) if err != nil { return err } @@ -1328,10 +1334,10 @@ func (a *Manager) AddReservation(username string, topic string, everyone Permiss return err } defer tx.Rollback() - if _, err := tx.Exec(upsertUserAccessQuery, username, topic, true, true, username, username); err != nil { + if _, err := tx.Exec(upsertUserAccessQuery, username, escapeUnderscore(topic), true, true, username, username); err != nil { return err } - if _, err := tx.Exec(upsertUserAccessQuery, Everyone, topic, everyone.IsRead(), everyone.IsWrite(), username, username); err != nil { + if _, err := tx.Exec(upsertUserAccessQuery, Everyone, escapeUnderscore(topic), everyone.IsRead(), everyone.IsWrite(), username, username); err != nil { return err } return tx.Commit() @@ -1354,10 +1360,10 @@ func (a *Manager) RemoveReservations(username string, topics ...string) error { } defer tx.Rollback() for _, topic := range topics { - if _, err := tx.Exec(deleteTopicAccessQuery, username, username, topic); err != nil { + if _, err := tx.Exec(deleteTopicAccessQuery, username, username, escapeUnderscore(topic)); err != nil { return err } - if _, err := tx.Exec(deleteTopicAccessQuery, Everyone, Everyone, topic); err != nil { + if _, err := tx.Exec(deleteTopicAccessQuery, Everyone, Everyone, escapeUnderscore(topic)); err != nil { return err } } @@ -1484,12 +1490,24 @@ func (a *Manager) Close() error { return a.db.Close() } +// toSQLWildcard converts a wildcard string to a SQL wildcard string. It only allows '*' as wildcards, +// and escapes '_', assuming '\' as escape character. func toSQLWildcard(s string) string { - return strings.ReplaceAll(s, "*", "%") + return escapeUnderscore(strings.ReplaceAll(s, "*", "%")) } +// fromSQLWildcard converts a SQL wildcard string to a wildcard string. It converts '%' to '*', +// and removes the '\_' escape character. func fromSQLWildcard(s string) string { - return strings.ReplaceAll(s, "%", "*") + return strings.ReplaceAll(unescapeUnderscore(s), "%", "*") +} + +func escapeUnderscore(s string) string { + return strings.ReplaceAll(s, "_", "\\_") +} + +func unescapeUnderscore(s string) string { + return strings.ReplaceAll(s, "\\_", "_") } func runStartupQueries(db *sql.DB, startupQueries string) error { @@ -1627,6 +1645,22 @@ func migrateFrom3(db *sql.DB) error { return tx.Commit() } +func migrateFrom4(db *sql.DB) error { + log.Tag(tag).Info("Migrating user database schema: from 4 to 5") + tx, err := db.Begin() + if err != nil { + return err + } + defer tx.Rollback() + if _, err := tx.Exec(migrate4To5UpdateQueries); err != nil { + return err + } + if _, err := tx.Exec(updateSchemaVersion, 5); err != nil { + return err + } + return tx.Commit() +} + func nullString(s string) sql.NullString { if s == "" { return sql.NullString{} diff --git a/user/manager_test.go b/user/manager_test.go index 3c30a716..468dc36a 100644 --- a/user/manager_test.go +++ b/user/manager_test.go @@ -330,7 +330,7 @@ func TestManager_Reservations(t *testing.T) { a := newTestManager(t, PermissionDenyAll) require.Nil(t, a.AddUser("phil", "phil", RoleUser)) require.Nil(t, a.AddUser("ben", "ben", RoleUser)) - require.Nil(t, a.AddReservation("ben", "ztopic", PermissionDenyAll)) + require.Nil(t, a.AddReservation("ben", "ztopic_", PermissionDenyAll)) require.Nil(t, a.AddReservation("ben", "readme", PermissionRead)) require.Nil(t, a.AllowAccess("ben", "something-else", PermissionRead)) @@ -343,7 +343,7 @@ func TestManager_Reservations(t *testing.T) { Everyone: PermissionRead, }, reservations[0]) require.Equal(t, Reservation{ - Topic: "ztopic", + Topic: "ztopic_", Owner: PermissionReadWrite, Everyone: PermissionDenyAll, }, reservations[1]) @@ -352,6 +352,14 @@ func TestManager_Reservations(t *testing.T) { require.Nil(t, err) require.True(t, b) + b, err = a.HasReservation("ben", "ztopic_") + require.Nil(t, err) + require.True(t, b) + + b, err = a.HasReservation("ben", "ztopicX") // _ != X (used to be a SQL wildcard issue) + require.Nil(t, err) + require.False(t, b) + b, err = a.HasReservation("notben", "readme") require.Nil(t, err) require.False(t, b) @@ -371,11 +379,17 @@ func TestManager_Reservations(t *testing.T) { err = a.AllowReservation("phil", "readme") require.Equal(t, errTopicOwnedByOthers, err) + err = a.AllowReservation("phil", "ztopic_") + require.Equal(t, errTopicOwnedByOthers, err) + + err = a.AllowReservation("phil", "ztopicX") + require.Nil(t, err) + err = a.AllowReservation("phil", "not-reserved") require.Nil(t, err) // Now remove them again - require.Nil(t, a.RemoveReservations("ben", "ztopic", "readme")) + require.Nil(t, a.RemoveReservations("ben", "ztopic_", "readme")) count, err = a.ReservationsCount("ben") require.Nil(t, err) @@ -978,7 +992,44 @@ func TestUser_PhoneNumberAdd_Multiple_Users_Same_Number(t *testing.T) { require.Nil(t, a.AddPhoneNumber(ben.ID, "+1234567890")) } -func TestSqliteCache_Migration_From1(t *testing.T) { +func TestManager_Topic_Wildcard_With_Asterisk_Underscore(t *testing.T) { + f := filepath.Join(t.TempDir(), "user.db") + a := newTestManagerFromFile(t, f, "", PermissionDenyAll, DefaultUserPasswordBcryptCost, DefaultUserStatsQueueWriterInterval) + require.Nil(t, a.AllowAccess(Everyone, "*_", PermissionRead)) + require.Nil(t, a.AllowAccess(Everyone, "__*_", PermissionRead)) + require.Nil(t, a.Authorize(nil, "allowed_", PermissionRead)) + require.Nil(t, a.Authorize(nil, "__allowed_", PermissionRead)) + require.Nil(t, a.Authorize(nil, "_allowed_", PermissionRead)) // The "%" in "%\_" matches the first "_" + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "notallowed", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "_notallowed", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "__notallowed", PermissionRead)) +} + +func TestManager_Topic_Wildcard_With_Underscore(t *testing.T) { + f := filepath.Join(t.TempDir(), "user.db") + a := newTestManagerFromFile(t, f, "", PermissionDenyAll, DefaultUserPasswordBcryptCost, DefaultUserStatsQueueWriterInterval) + require.Nil(t, a.AllowAccess(Everyone, "mytopic_", PermissionReadWrite)) + require.Nil(t, a.Authorize(nil, "mytopic_", PermissionRead)) + require.Nil(t, a.Authorize(nil, "mytopic_", PermissionWrite)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "mytopicX", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "mytopicX", PermissionWrite)) +} + +func TestToFromSQLWildcard(t *testing.T) { + require.Equal(t, "up%", toSQLWildcard("up*")) + require.Equal(t, "up\\_%", toSQLWildcard("up_*")) + require.Equal(t, "foo", toSQLWildcard("foo")) + + require.Equal(t, "up*", fromSQLWildcard("up%")) + require.Equal(t, "up_*", fromSQLWildcard("up\\_%")) + require.Equal(t, "foo", fromSQLWildcard("foo")) + + require.Equal(t, "up*", fromSQLWildcard(toSQLWildcard("up*"))) + require.Equal(t, "up_*", fromSQLWildcard(toSQLWildcard("up_*"))) + require.Equal(t, "foo", fromSQLWildcard(toSQLWildcard("foo"))) +} + +func TestMigrationFrom1(t *testing.T) { filename := filepath.Join(t.TempDir(), "user.db") db, err := sql.Open("sqlite3", filename) require.Nil(t, err) @@ -1063,6 +1114,152 @@ func TestSqliteCache_Migration_From1(t *testing.T) { require.Equal(t, PermissionRead, everyoneGrants[0].Allow) } +func TestMigrationFrom4(t *testing.T) { + filename := filepath.Join(t.TempDir(), "user.db") + db, err := sql.Open("sqlite3", filename) + require.Nil(t, err) + + // Create "version 4" schema + _, err = db.Exec(` + BEGIN; + CREATE TABLE IF NOT EXISTS tier ( + id TEXT PRIMARY KEY, + code TEXT NOT NULL, + name TEXT NOT NULL, + messages_limit INT NOT NULL, + messages_expiry_duration INT NOT NULL, + emails_limit INT NOT NULL, + calls_limit INT NOT NULL, + reservations_limit INT NOT NULL, + attachment_file_size_limit INT NOT NULL, + attachment_total_size_limit INT NOT NULL, + attachment_expiry_duration INT NOT NULL, + attachment_bandwidth_limit INT NOT NULL, + stripe_monthly_price_id TEXT, + stripe_yearly_price_id TEXT + ); + CREATE UNIQUE INDEX idx_tier_code ON tier (code); + CREATE UNIQUE INDEX idx_tier_stripe_monthly_price_id ON tier (stripe_monthly_price_id); + CREATE UNIQUE INDEX idx_tier_stripe_yearly_price_id ON tier (stripe_yearly_price_id); + CREATE TABLE IF NOT EXISTS user ( + id TEXT PRIMARY KEY, + tier_id TEXT, + user TEXT NOT NULL, + pass TEXT NOT NULL, + role TEXT CHECK (role IN ('anonymous', 'admin', 'user')) NOT NULL, + prefs JSON NOT NULL DEFAULT '{}', + sync_topic TEXT NOT NULL, + stats_messages INT NOT NULL DEFAULT (0), + stats_emails INT NOT NULL DEFAULT (0), + stats_calls INT NOT NULL DEFAULT (0), + stripe_customer_id TEXT, + stripe_subscription_id TEXT, + stripe_subscription_status TEXT, + stripe_subscription_interval TEXT, + stripe_subscription_paid_until INT, + stripe_subscription_cancel_at INT, + created INT NOT NULL, + deleted INT, + FOREIGN KEY (tier_id) REFERENCES tier (id) + ); + CREATE UNIQUE INDEX idx_user ON user (user); + CREATE UNIQUE INDEX idx_user_stripe_customer_id ON user (stripe_customer_id); + CREATE UNIQUE INDEX idx_user_stripe_subscription_id ON user (stripe_subscription_id); + CREATE TABLE IF NOT EXISTS user_access ( + user_id TEXT NOT NULL, + topic TEXT NOT NULL, + read INT NOT NULL, + write INT NOT NULL, + owner_user_id INT, + PRIMARY KEY (user_id, topic), + FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE, + FOREIGN KEY (owner_user_id) REFERENCES user (id) ON DELETE CASCADE + ); + CREATE TABLE IF NOT EXISTS user_token ( + user_id TEXT NOT NULL, + token TEXT NOT NULL, + label TEXT NOT NULL, + last_access INT NOT NULL, + last_origin TEXT NOT NULL, + expires INT NOT NULL, + PRIMARY KEY (user_id, token), + FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE + ); + CREATE TABLE IF NOT EXISTS user_phone ( + user_id TEXT NOT NULL, + phone_number TEXT NOT NULL, + PRIMARY KEY (user_id, phone_number), + FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE + ); + CREATE TABLE IF NOT EXISTS schemaVersion ( + id INT PRIMARY KEY, + version INT NOT NULL + ); + INSERT INTO user (id, user, pass, role, sync_topic, created) + VALUES ('u_everyone', '*', '', 'anonymous', '', UNIXEPOCH()) + ON CONFLICT (id) DO NOTHING; + INSERT INTO schemaVersion (id, version) VALUES (1, 4); + COMMIT; + `) + require.Nil(t, err) + + // Insert a few ACL entries + _, err = db.Exec(` + BEGIN; + INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'mytopic_', 1, 1); + INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'up%', 1, 1); + INSERT INTO user_access (user_id, topic, read, write) values ('u_everyone', 'down_%', 1, 1); + COMMIT; + `) + require.Nil(t, err) + + // Create manager to trigger migration + a := newTestManagerFromFile(t, filename, "", PermissionDenyAll, bcrypt.MinCost, DefaultUserStatsQueueWriterInterval) + checkSchemaVersion(t, a.db) + + // Add another + require.Nil(t, a.AllowAccess(Everyone, "left_*", PermissionReadWrite)) + + // Check "external view" of grants + everyoneGrants, err := a.Grants(Everyone) + require.Nil(t, err) + + require.Equal(t, 4, len(everyoneGrants)) + require.Equal(t, "down_*", everyoneGrants[0].TopicPattern) + require.Equal(t, "left_*", everyoneGrants[1].TopicPattern) + require.Equal(t, "mytopic_", everyoneGrants[2].TopicPattern) + require.Equal(t, "up*", everyoneGrants[3].TopicPattern) + + // Check they are stored correctly in the database + rows, err := db.Query(`SELECT topic FROM user_access WHERE user_id = 'u_everyone' ORDER BY topic`) + require.Nil(t, err) + topicPatterns := make([]string, 0) + for rows.Next() { + var topicPattern string + require.Nil(t, rows.Scan(&topicPattern)) + topicPatterns = append(topicPatterns, topicPattern) + } + require.Nil(t, rows.Close()) + require.Equal(t, 4, len(topicPatterns)) + require.Equal(t, "down\\_%", topicPatterns[0]) + require.Equal(t, "left\\_%", topicPatterns[1]) + require.Equal(t, "mytopic\\_", topicPatterns[2]) + require.Equal(t, "up%", topicPatterns[3]) + + // Check that ACL works as excepted + require.Nil(t, a.Authorize(nil, "down_123", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "downX123", PermissionRead)) + + require.Nil(t, a.Authorize(nil, "left_abc", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "leftX123", PermissionRead)) + + require.Nil(t, a.Authorize(nil, "mytopic_", PermissionRead)) + require.Equal(t, ErrUnauthorized, a.Authorize(nil, "mytopicX", PermissionRead)) + + require.Nil(t, a.Authorize(nil, "up123", PermissionRead)) + require.Nil(t, a.Authorize(nil, "up", PermissionRead)) // % matches 0 or more characters +} + func checkSchemaVersion(t *testing.T, db *sql.DB) { rows, err := db.Query(`SELECT version FROM schemaVersion`) require.Nil(t, err) From 9015b278036a69b09d2ff5ccbf938be07c9cc4bd Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 18 Aug 2023 22:47:36 +0200 Subject: [PATCH 213/305] Release notes --- docs/releases.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 4cc9b0b0..70682131 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,7 +2,7 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). -### ntfy server v2.7.0 +## ntfy server v2.7.0 Released August 17, 2023 This release ships Markdown support for the web app (not in the Android app yet), and adds support for @@ -1283,6 +1283,12 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release ## Not released yet +### ntfy server v2.8.0 (UNRELEASED) + +**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) + ### ntfy Android app v1.16.1 (UNRELEASED) **Features:** From 02dd72ba5760d99c1e628e2c5442922ec70aebf3 Mon Sep 17 00:00:00 2001 From: Nguyen Loc Date: Fri, 18 Aug 2023 03:16:37 +0000 Subject: [PATCH 214/305] Translated using Weblate (Vietnamese) Currently translated at 4.9% (19 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/vi/ --- web/public/static/langs/vi.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/vi.json b/web/public/static/langs/vi.json index 0967ef42..b2f94441 100644 --- a/web/public/static/langs/vi.json +++ b/web/public/static/langs/vi.json @@ -1 +1,21 @@ -{} +{ + "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í" +} From 6f68c8cd1f67a51cf5df15ae9bfa4bc6cd54cf09 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Tue, 22 Aug 2023 11:24:35 +0200 Subject: [PATCH 215/305] Update publish.md fixed PowerShell examples --- docs/publish.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index 2de0ff73..c03cc4a4 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -457,6 +457,7 @@ 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" @@ -1033,7 +1034,7 @@ is the only required one: $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = @{ + Body = ConvertTo-JSON @{ Topic = "mytopic" Title = "Low disk space alert" Message = "Disk space is low at 5.1 GB" @@ -1042,7 +1043,7 @@ is the only required one: FileName = "diskspace.jpg" Tags = @("warning", "cd") Click = "https://homecamera.lan/xasds1h2xsSsa/" - Actions = ConvertTo-JSON @( + Actions = @( @{ Action = "view" Label = "Admin panel" @@ -1919,10 +1920,10 @@ And the same example using [JSON publishing](#publish-as-json): $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = @{ + Body = ConvertTo-Json -Depth 3 @{ Topic = "wifey" Message = "Your wife requested you send a picture of yourself." - Actions = ConvertTo-Json -Depth 3 @( + Actions = @( @{ Action = "broadcast" Label = "Take picture" @@ -2072,7 +2073,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?' ] ])); @@ -2199,10 +2200,10 @@ And the same example using [JSON publishing](#publish-as-json): $Request = @{ Method = "POST" URI = "https://ntfy.sh" - Body = @{ + Body = ConvertTo-Json -Depth 3 @{ Topic = "myhome" Message = "Garage door has been open for 15 minutes. Close it?" - Actions = ConvertTo-Json -Depth 3 @( + Actions = @( @{ Action = "http" Label = "Close door" From 115e6e9cf8483ee53560d20dde6cf989aab313f6 Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 24 Aug 2023 18:15:48 +0000 Subject: [PATCH 216/305] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 51.5% (197 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/nb_NO/ --- web/public/static/langs/nb_NO.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/nb_NO.json b/web/public/static/langs/nb_NO.json index 0dd9571b..bc7d387c 100644 --- a/web/public/static/langs/nb_NO.json +++ b/web/public/static/langs/nb_NO.json @@ -190,5 +190,10 @@ "error_boundary_unsupported_indexeddb_title": "Privat surfing støttes ikke", "action_bar_account": "Konto", "action_bar_profile_settings": "Innstillinger", - "nav_button_account": "Konto" + "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" } From 45ca20dec9d10f862025f3d9efc105c7b011cc5a Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 26 Aug 2023 09:26:54 +0200 Subject: [PATCH 217/305] Docs --- docs/integrations.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/integrations.md b/docs/integrations.md index 57ae2c10..740d8c40 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -23,6 +23,7 @@ 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 ## Integration via HTTP/SMTP/etc. @@ -130,7 +131,8 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts -- [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 +- [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 - [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 From 62c2ec0614f04a0f5256186fc296871326c27acc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= Date: Sat, 26 Aug 2023 12:37:53 +0000 Subject: [PATCH 218/305] Translated using Weblate (Galician) Currently translated at 33.2% (127 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/gl/ --- web/public/static/langs/gl.json | 130 +++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/gl.json b/web/public/static/langs/gl.json index 0967ef42..9c4efb18 100644 --- a/web/public/static/langs/gl.json +++ b/web/public/static/langs/gl.json @@ -1 +1,129 @@ -{} +{ + "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 de servizo" +} From 1d02933481bf1bd8d0b8d066aca1c5cae67a73ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= Date: Mon, 28 Aug 2023 04:08:45 +0000 Subject: [PATCH 219/305] Translated using Weblate (Galician) Currently translated at 42.4% (162 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/gl/ --- web/public/static/langs/gl.json | 37 ++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/gl.json b/web/public/static/langs/gl.json index 9c4efb18..efc418ff 100644 --- a/web/public/static/langs/gl.json +++ b/web/public/static/langs/gl.json @@ -125,5 +125,40 @@ "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 de servizo" + "publish_dialog_base_url_label": "URL de 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" } From 30a913c05c3d704bd71a9658f13f3e493542f2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20de=20Le=C3=B3n?= Date: Mon, 28 Aug 2023 23:20:04 -0600 Subject: [PATCH 220/305] Ignore Cloudflare Priority header With these changes, If the web request contains the new Priority header (RFC 9218), The server will ignore it and continue searching for other headers or query parameters. --- server/util.go | 23 +++++++++++++++++++++-- util/util.go | 5 ----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/server/util.go b/server/util.go index 03eb8661..ee87f2ed 100644 --- a/server/util.go +++ b/server/util.go @@ -9,6 +9,7 @@ import ( "net/http" "net/netip" "strings" + /*"regexp"*/ ) var mimeDecoder mime.WordDecoder @@ -129,7 +130,25 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) { func maybeDecodeHeader(header string) string { decoded, err := mimeDecoder.DecodeHeader(header) if err != nil { - return header + return cloudflarePriorityIgnore(header) } - return decoded + return cloudflarePriorityIgnore(decoded) +} + +// 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 the Priority header is set to "u=*, i" or "u=*" (by cloudflare), the header will be ignored. +// And continue searching for another header (x-priority, prio, p) or in the Query parameters. +func cloudflarePriorityIgnore(value string) string { + if strings.HasPrefix(value, "u=") { + return "" + } + + // The same but with regex + /* pattern := `^u=\d+\s*,\s*i|u=\d+$` + regex := regexp.MustCompile(pattern) + if regex.MatchString(value) { + return "" + } */ + return value } diff --git a/util/util.go b/util/util.go index 4a63e22f..d48487df 100644 --- a/util/util.go +++ b/util/util.go @@ -161,11 +161,6 @@ 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 } } From a1625c7f156a443e5d1d3ebb1ea1d9f9da7af97c Mon Sep 17 00:00:00 2001 From: Mazurky Date: Thu, 31 Aug 2023 22:13:26 +0200 Subject: [PATCH 221/305] Added translation using Weblate (Slovak) --- web/public/static/langs/sk.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 web/public/static/langs/sk.json diff --git a/web/public/static/langs/sk.json b/web/public/static/langs/sk.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/web/public/static/langs/sk.json @@ -0,0 +1 @@ +{} From c6964502c417c0683ee8c9fcd40952ac04ec746d Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 1 Sep 2023 15:31:52 -0400 Subject: [PATCH 222/305] Thank you @teomarcdhio and @MarcMichalsky for your donation/sponsorship --- README.md | 2 + go.mod | 10 +- go.sum | 10 + web/package-lock.json | 564 +++++++++++++++++++++++------------------- 4 files changed, 324 insertions(+), 262 deletions(-) diff --git a/README.md b/README.md index 6cc1adbe..95944639 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,8 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + + 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: diff --git a/go.mod b/go.mod index 1560c61d..8e493e3b 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( github.com/golang/protobuf v1.5.3 // 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/google/uuid v1.3.1 // 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 @@ -70,10 +70,10 @@ require ( 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/appengine/v2 v2.0.5 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // 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 c6761a56..173e8e9c 100644 --- a/go.sum +++ b/go.sum @@ -100,6 +100,8 @@ github.com/google/s2a-go v0.1.5/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkj github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/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= @@ -238,16 +240,24 @@ google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6 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/appengine/v2 v2.0.5 h1:4C+F3Cd3L2nWEfSmFEZDPjQvDwL8T0YCeZBysZifP3k= +google.golang.org/appengine/v2 v2.0.5/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-20230815205213-6bfd019c3878 h1:Iveh6tGCJkHAjJgEqUQYGDGgbwmhjoAOz8kO/ajxefY= google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/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/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/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/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/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= diff --git a/web/package-lock.json b/web/package-lock.json index 735fc42b..cb15d61f 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -68,11 +68,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.22.10", + "@babel/highlight": "^7.22.13", "chalk": "^2.4.2" }, "engines": { @@ -89,9 +89,9 @@ } }, "node_modules/@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -99,15 +99,15 @@ "@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/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -174,9 +174,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "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==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", + "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -436,23 +436,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", "dev": true, "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.4.2", @@ -463,9 +463,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.22.14", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", + "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -510,6 +510,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, "engines": { "node": ">=6.9.0" @@ -769,9 +770,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "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==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", + "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -850,12 +851,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "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==", + "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==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -952,9 +953,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -984,9 +985,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1032,9 +1033,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1063,9 +1064,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1110,12 +1111,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "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==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", + "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1127,13 +1128,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "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==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5" }, @@ -1192,9 +1193,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1208,9 +1209,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1224,13 +1225,13 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "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==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", + "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.22.5" @@ -1259,9 +1260,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1275,9 +1276,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "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==", + "version": "7.22.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", + "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1323,13 +1324,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1556,9 +1557,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "version": "7.22.14", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.14.tgz", + "integrity": "sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", @@ -1587,41 +1588,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.22.10", + "@babel/plugin-transform-async-generator-functions": "^7.22.11", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", "@babel/plugin-transform-block-scoping": "^7.22.10", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", "@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.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", "@babel/plugin-transform-for-of": "^7.22.5", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@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-commonjs": "^7.22.11", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", "@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.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^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.11", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.12", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -1635,7 +1636,7 @@ "@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.22.10", + "@babel/types": "^7.22.11", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", "babel-plugin-polyfill-regenerator": "^0.5.2", @@ -1670,9 +1671,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1695,9 +1696,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", + "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.10", @@ -1706,8 +1707,8 @@ "@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.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.22.11", + "@babel/types": "^7.22.11", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1716,9 +1717,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", @@ -2239,9 +2240,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", + "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2298,18 +2299,52 @@ } }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", + "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "dependencies": { + "@floating-ui/utils": "^0.1.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", + "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "dependencies": { + "@floating-ui/core": "^1.4.1", + "@floating-ui/utils": "^0.1.1" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", + "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2409,14 +2444,15 @@ } }, "node_modules/@mui/base": { - "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==", + "version": "5.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.13.tgz", + "integrity": "sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw==", "dependencies": { - "@babel/runtime": "^7.22.6", + "@babel/runtime": "^7.22.10", "@emotion/is-prop-valid": "^1.2.1", + "@floating-ui/react-dom": "^2.0.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.5", + "@mui/utils": "^5.14.7", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1", @@ -2441,20 +2477,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.5.tgz", - "integrity": "sha512-+wpGH1USwPcKMFPMvXqYPC6fEvhxM3FzxC8lyDiNK/imLyyJ6y2DPb1Oue7OGIKJWBmYBqrWWtfovrxd1aJHTA==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz", + "integrity": "sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.3", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.3.tgz", - "integrity": "sha512-XkxWPhageu1OPUm2LWjo5XqeQ0t2xfGe8EiLkRW9oz2LHMMZmijvCxulhgquUVTF1DnoSh+3KoDLSsoAFtVNVw==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.7.tgz", + "integrity": "sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A==", "dependencies": { - "@babel/runtime": "^7.22.6" + "@babel/runtime": "^7.22.10" }, "engines": { "node": ">=12.0.0" @@ -2475,16 +2511,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.5.tgz", - "integrity": "sha512-4qa4GMfuZH0Ai3mttk5ccXP8a3sf7aPlAJwyMrUSz6h9hPri6BPou94zeu3rENhhmKLby9S/W1y+pmficy8JKA==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.7.tgz", + "integrity": "sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A==", "dependencies": { - "@babel/runtime": "^7.22.6", - "@mui/base": "5.0.0-beta.11", - "@mui/core-downloads-tracker": "^5.14.5", - "@mui/system": "^5.14.5", + "@babel/runtime": "^7.22.10", + "@mui/base": "5.0.0-beta.13", + "@mui/core-downloads-tracker": "^5.14.7", + "@mui/system": "^5.14.7", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.5", + "@mui/utils": "^5.14.7", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", @@ -2519,12 +2555,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.5.tgz", - "integrity": "sha512-cC4C5RrpXpDaaZyH9QwmPhRLgz+f2SYbOty3cPkk4qPSOSfif2ZEcDD9HTENKDDd9deB+xkPKzzZhi8cxIx8Ig==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.7.tgz", + "integrity": "sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ==", "dependencies": { - "@babel/runtime": "^7.22.6", - "@mui/utils": "^5.14.5", + "@babel/runtime": "^7.22.10", + "@mui/utils": "^5.14.7", "prop-types": "^15.8.1" }, "engines": { @@ -2545,11 +2581,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.7.tgz", + "integrity": "sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==", "dependencies": { - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.22.10", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2576,15 +2612,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.5.tgz", - "integrity": "sha512-mextXZHDeGcR7E1kx43TRARrVXy+gI4wzpUgNv7MqZs1dvTVXQGVeAT6ydj9d6FUqHBPMNLGV/21vJOrpqsL+w==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.7.tgz", + "integrity": "sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==", "dependencies": { - "@babel/runtime": "^7.22.6", - "@mui/private-theming": "^5.14.5", - "@mui/styled-engine": "^5.13.2", + "@babel/runtime": "^7.22.10", + "@mui/private-theming": "^5.14.7", + "@mui/styled-engine": "^5.14.7", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.5", + "@mui/utils": "^5.14.7", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2628,11 +2664,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.5.tgz", - "integrity": "sha512-6Hzw63VR9C5xYv+CbjndoRLU6Gntal8rJ5W+GUzkyHrGWIyYPWZPa6AevnyGioySNETATe1H9oXS8f/7qgIHJA==", + "version": "5.14.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.7.tgz", + "integrity": "sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw==", "dependencies": { - "@babel/runtime": "^7.22.6", + "@babel/runtime": "^7.22.10", "@types/prop-types": "^15.7.5", "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", @@ -2734,9 +2770,9 @@ } }, "node_modules/@types/node": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.0.tgz", - "integrity": "sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q==", + "version": "20.5.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", + "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", "dev": true }, "node_modules/@types/parse-json": { @@ -2750,9 +2786,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/react": { - "version": "18.2.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.20.tgz", - "integrity": "sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2796,9 +2832,9 @@ "dev": true }, "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" }, "node_modules/@vitejs/plugin-react": { "version": "4.0.4", @@ -2923,16 +2959,16 @@ } }, "node_modules/array.prototype.findlastindex": { - "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==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -3232,9 +3268,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001521", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001521.tgz", - "integrity": "sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==", + "version": "1.0.30001525", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", + "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", "dev": true, "funding": [ { @@ -3362,12 +3398,12 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.32.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", - "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", "dev": true, "dependencies": { - "browserslist": "^4.21.9" + "browserslist": "^4.21.10" }, "funding": { "type": "opencollective", @@ -3550,9 +3586,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.495", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.495.tgz", - "integrity": "sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==", + "version": "1.4.508", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", + "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==", "dev": true }, "node_modules/emoji-regex": { @@ -3631,15 +3667,15 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", - "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", + "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.3", + "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.2.1", @@ -3750,15 +3786,15 @@ } }, "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", + "@eslint/js": "8.48.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -3902,9 +3938,9 @@ } }, "node_modules/eslint-plugin-import": { - "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==", + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -3916,13 +3952,12 @@ "eslint-import-resolver-node": "^0.3.7", "eslint-module-utils": "^2.8.0", "has": "^1.0.3", - "is-core-module": "^2.12.1", + "is-core-module": "^2.13.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "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" }, @@ -4381,16 +4416,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=12.0.0" } }, "node_modules/flatted": { @@ -4430,9 +4466,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -4449,15 +4485,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "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==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -5273,15 +5309,14 @@ "dev": true }, "node_modules/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", "reflect.getprototypeof": "^1.0.3" } }, @@ -5442,6 +5477,12 @@ "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", @@ -5513,6 +5554,15 @@ "node": ">=4.0" } }, + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "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", @@ -5905,28 +5955,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -5936,39 +5986,39 @@ } }, "node_modules/object.groupby": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", - "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1" } }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -6137,9 +6187,9 @@ } }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "dev": true, "funding": [ { @@ -6401,15 +6451,15 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -6603,9 +6653,9 @@ } }, "node_modules/rollup": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz", - "integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==", + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", + "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6847,18 +6897,18 @@ } }, "node_modules/string.prototype.matchall": { - "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==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", + "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", "side-channel": "^1.0.4" }, "funding": { @@ -7040,9 +7090,9 @@ } }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.19.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", + "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", From 60d5e66e34f51823cb89230a10ea62343a1ca0e7 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Fri, 1 Sep 2023 15:36:12 -0400 Subject: [PATCH 223/305] Integration links --- docs/integrations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/integrations.md b/docs/integrations.md index 740d8c40..68bc4c46 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -128,9 +128,11 @@ 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) ## Blog + forum posts +- [NetworkChunk - how did I NOT know about this?](https://www.youtube.com/watch?v=poDIT2ruQ9M) ⭐ - youtube.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 - [Basic website monitoring using cronjobs and ntfy.sh](https://burkhardt.dev/2023/website-monitoring-cron-ntfy/) - burkhardt.dev - 6/2023 From d999dbe0a0d09b8da4d8cd3b9f9a1794d68dc8dc Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Sat, 2 Sep 2023 22:29:45 +0900 Subject: [PATCH 224/305] Update releases.md suport -> support --- docs/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index 70682131..1e518c76 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 suport to encode the `X-Title`, +This release adds a tiny `v1/stats` endpoint to expose how many messages have been published, and adds support 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) From e2d7f2cf296c1078b14e399533ac85a8fed634b4 Mon Sep 17 00:00:00 2001 From: masterujjval Date: Sat, 2 Sep 2023 23:09:53 +0530 Subject: [PATCH 225/305] readme modified --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 95944639..a6e0e8da 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ notification service. With ntfy, you can **send notifications to your phone or d **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) +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). @@ -41,7 +41,7 @@ I now offer paid plans for [ntfy.sh](https://ntfy.sh/) if you don't want to self [Install / Self-hosting](https://ntfy.sh/docs/install/) | [Building](https://ntfy.sh/docs/develop/) -## Chat / forum +## 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: @@ -50,13 +50,13 @@ works best for you: * [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 +## 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 +I welcome any 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/). @@ -165,7 +165,7 @@ _Please be sure to read the complete [Code of Conduct](CODE_OF_CONDUCT.md)._ 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: +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 From 15fa3b7d9ffb7d1c53c973b5de320e99d3849e88 Mon Sep 17 00:00:00 2001 From: "vardy.ng" Date: Sat, 2 Sep 2023 15:54:29 -0400 Subject: [PATCH 226/305] =?UTF-8?q?break=20=E4=B8=AD=E6=96=87(Chinese)=20i?= =?UTF-8?q?nto=20=E7=B9=81=E9=AB=94=E4=B8=AD=E6=96=87(Traditional=20Chines?= =?UTF-8?q?e,=20zh=5FHant)=20and=20=E7=AE=80=E4=BD=93=E4=B8=AD=E6=96=87(Si?= =?UTF-8?q?mplified=20Chinese,=20zh=5FHans)=20in=20language=20drop=20down?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/Preferences.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/src/components/Preferences.jsx b/web/src/components/Preferences.jsx index a93032ce..546ecbe3 100644 --- a/web/src/components/Preferences.jsx +++ b/web/src/components/Preferences.jsx @@ -571,7 +571,8 @@ const Language = () => { Bahasa Indonesia Български Čeština - 中文 + 繁體中文 + 简体中文 Dansk Deutsch Español From c80f71bd9b6044037b935312e2d33b8ceaaa505b Mon Sep 17 00:00:00 2001 From: "vardy.ng" Date: Sat, 2 Sep 2023 17:30:34 -0400 Subject: [PATCH 227/305] update Simplified Chinese Translation, align with English translation by adding missing keys --- web/public/static/langs/zh_Hans.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index e2904e9e..f9a9fbcd 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -1,11 +1,13 @@ { "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": "发布消息", @@ -20,6 +22,10 @@ "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": "标记为已读", @@ -129,6 +135,11 @@ "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": "添加用户", @@ -140,6 +151,10 @@ "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": "默认", @@ -149,6 +164,7 @@ "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": "不支持隐私浏览", @@ -160,6 +176,7 @@ "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", @@ -168,12 +185,14 @@ "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": "三小时后", @@ -380,5 +399,9 @@ "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": "无电话呼叫" + "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" } From d0b7336da7331e7a4a752abbf27dd2603e530dee Mon Sep 17 00:00:00 2001 From: "vardy.ng" Date: Sat, 2 Sep 2023 17:31:07 -0400 Subject: [PATCH 228/305] completed Traditional Chinese Translation, aligned with Simplified Chinese and English translation --- web/public/static/langs/zh_Hant.json | 588 ++++++++++++++++++--------- 1 file changed, 388 insertions(+), 200 deletions(-) diff --git a/web/public/static/langs/zh_Hant.json b/web/public/static/langs/zh_Hant.json index 9b0dd372..ae32e765 100644 --- a/web/public/static/langs/zh_Hant.json +++ b/web/public/static/langs/zh_Hant.json @@ -1,220 +1,408 @@ { + "action_bar_show_menu": "顯示選單", "action_bar_logo_alt": "ntfy 標識", - "action_bar_unsubscribe": "取消訂閱", - "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_mute_notifications": "靜音", "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": "發佈通知時發生錯誤", + "action_bar_unsubscribe": "取消訂閱", + "action_bar_toggle_action_menu": "開啟或關閉操作選單", + "action_bar_unmute_notifications": "取消靜音", + "message_bar_type_message": "在此處輸入訊息", + "message_bar_show_dialog": "顯示發布對話框", + "message_bar_publish": "發布訊息", "nav_topics_title": "訂閱主題", - "nav_button_all_notifications": "所有通知", - "nav_button_settings": "設定", + "nav_button_all_notifications": "全部通知", + "nav_button_documentation": "文檔", + "nav_button_publish_message": "發布通知", "nav_button_subscribe": "訂閱主題", - "nav_button_connecting": "連線中", - "alert_notification_permission_required_title": "通知已關閉", - "alert_not_supported_title": "不支援通知", - "alert_not_supported_description": "瀏覽器不支援通知。", - "notifications_tags": "標籤", - "notifications_priority_x": "優先度 {{priority}}", + "nav_button_connecting": "正在連接", + "alert_notification_permission_required_title": "已禁用通知", + "alert_notification_permission_required_description": "授予瀏覽器顯示桌面通知的權限。", + "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": "標記為已讀", + "notifications_copied_to_clipboard": "複製到剪貼板", + "notifications_tags": "標記", + "notifications_priority_x": "優先級 {{priority}}", "notifications_new_indicator": "新通知", - "notifications_attachment_file_audio": "聲音檔案", - "notifications_delete": "刪除", + "notifications_attachment_open_button": "打開附件", "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_users_add_button": "新增使用者", - "prefs_users_dialog_password_label": "密碼", - "prefs_users_dialog_title_add": "新增使用者", - "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": "服務網址", + "notifications_attachment_link_expired": "下載連結已過期", + "notifications_attachment_file_image": "圖片文件", + "notifications_attachment_image": "附件圖片", + "notifications_attachment_file_video": "影片文件", + "notifications_attachment_file_audio": "聲音文件", + "notifications_attachment_file_app": "安卓應用程式", + "notifications_attachment_file_document": "其他文件", + "notifications_click_copy_url_title": "複製鏈結地址到剪貼板", + "notifications_click_copy_url_button": "複製鏈結", + "notifications_click_open_button": "打開鏈結", + "action_bar_toggle_mute": "通知靜音/解除通知靜音", + "nav_button_muted": "已暫停通知", + "notifications_actions_not_supported": "網頁應用程序不支援此操作", + "notifications_none_for_topic_title": "你尚未收到有關此主題的任何通知。", + "notifications_none_for_any_title": "你尚未收到任何通知。", + "notifications_none_for_any_description": "要向此主題發送通知,只需使用 PUT 或 POST 到主題鏈結即可。以下是使用你的主題的示例。", + "notifications_no_subscriptions_title": "看起來你還未有任何訂閱", + "notifications_example": "示例", + "notifications_more_details": "有關更多資訊,請查看網站文檔。", + "notifications_loading": "正在加載通知……", + "publish_dialog_title_topic": "發布到 {{topic}}", + "publish_dialog_title_no_topic": "發布通知", + "publish_dialog_progress_uploading": "正在上傳……", + "publish_dialog_progress_uploading_detail": "正在上傳 {{loaded}}/{{total}} ({{percent}}%) ……", + "publish_dialog_message_published": "已發布通知", + "publish_dialog_attachment_limits_file_and_quota_reached": "超過 {{fileSizeLimit}} 文件限制和配額,剩餘 {{remainingBytes}}", + "publish_dialog_emoji_picker_show": "選擇表情符號", + "publish_dialog_priority_min": "最低優先級", + "publish_dialog_priority_low": "低優先級", + "publish_dialog_priority_default": "默認優先級", + "publish_dialog_priority_high": "高優先級", + "publish_dialog_priority_max": "最高優先級", "publish_dialog_topic_label": "主題名稱", "publish_dialog_topic_placeholder": "主題名稱,例如 phil_alerts", "publish_dialog_topic_reset": "重置主題", - "publish_dialog_title_label": "標題", - "publish_dialog_title_placeholder": "通訊標題,例如 Disk space alert", + "publish_dialog_title_label": "主題", "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": "服務網址", + "publish_dialog_message_placeholder": "在此輸入訊息", + "publish_dialog_tags_label": "標記", + "publish_dialog_priority_label": "優先級", + "publish_dialog_base_url_label": "服務鏈結地址", + "publish_dialog_base_url_placeholder": "服務鏈結地址,例如 https://example.com", + "publish_dialog_click_label": "點擊鏈結地址", + "publish_dialog_click_placeholder": "點擊通知時打開鏈結地址", + "publish_dialog_email_placeholder": "將通知轉發到的地址,例如 phil@example.com", + "publish_dialog_email_reset": "移除電子郵件轉發", + "publish_dialog_filename_label": "文件名", + "publish_dialog_filename_placeholder": "附件文件名", + "publish_dialog_delay_label": "延期", + "publish_dialog_other_features": "其它功能:", + "publish_dialog_attach_placeholder": "使用鏈結地址附加文件,例如 https://f-droid.org/F-Droid.apk", + "publish_dialog_delay_reset": "刪除延期投遞", + "publish_dialog_attach_reset": "移除附件鏈結地址", + "publish_dialog_chip_click_label": "點擊鏈結地址", + "publish_dialog_chip_email_label": "轉發郵件", + "publish_dialog_chip_attach_file_label": "本地文件附件", + "publish_dialog_chip_topic_label": "變更主題", + "publish_dialog_button_cancel_sending": "取消發送", + "publish_dialog_checkbox_publish_another": "發布另一個", + "publish_dialog_attached_file_title": "附件文件:", + "publish_dialog_attached_file_filename_placeholder": "附件文件名", + "publish_dialog_attached_file_remove": "刪除附件文件", + "publish_dialog_drop_file_here": "將文件拖拽至此", + "emoji_picker_search_placeholder": "查找表情符號", + "emoji_picker_search_clear": "清除搜索", + "subscribe_dialog_subscribe_title": "訂閱主題", + "publish_dialog_chip_delay_label": "延期投遞", + "publish_dialog_chip_attach_url_label": "鏈結附件地址", + "subscribe_dialog_subscribe_use_another_label": "使用其他伺服器", + "subscribe_dialog_subscribe_button_subscribe": "訂閱", + "subscribe_dialog_login_title": "請登錄", + "subscribe_dialog_login_description": "本主題受密碼保護,請輸入用戶名和密碼以訂閱。", + "subscribe_dialog_login_username_label": "用戶名,例如 phil", + "subscribe_dialog_login_password_label": "密碼", + "common_back": "返回", + "subscribe_dialog_login_button_login": "登入", + "subscribe_dialog_error_user_not_authorized": "未授權 {{username}} 使用者", + "subscribe_dialog_error_user_anonymous": "匿名", + "prefs_notifications_title": "通知", + "prefs_notifications_sound_title": "通知提示音", + "prefs_notifications_sound_description_none": "收到通知時不播放任何聲音", + "prefs_notifications_sound_description_some": "收到通知時播放 {{sound}} 聲音", + "prefs_notifications_sound_no_sound": "靜音", + "prefs_notifications_sound_play": "播放選中聲音", + "prefs_notifications_min_priority_title": "最低優先級", + "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_max_only": "僅最高優先級", + "prefs_notifications_delete_after_never": "從不", + "prefs_notifications_delete_after_one_month": "一個月後", + "prefs_notifications_delete_after_one_week": "一周後", + "prefs_notifications_delete_after_never_description": "永不自動刪除通知", + "prefs_notifications_delete_after_three_hours_description": "三小時後自動刪除通知", + "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_enabled_description": "即使網頁程式未有運街亦會收到通知 (via Web Push)", + "prefs_notifications_web_push_disabled_description": "當網頁程式在運行時將會收到通知 (透過 WebSocket)", + "prefs_notifications_web_push_enabled": "己為 {{server}} 啟用", + "prefs_notifications_web_push_disabled": "己暫用", + "prefs_notifications_web_push_title": "背景通知", + "prefs_users_title": "管理使用者", + "prefs_users_description": "在此處新增/刪除受保護主題的使用者。請注意,使用者名和密碼將存儲在瀏覽器的本地存儲中。", + "prefs_users_add_button": "新增使用者", + "prefs_users_dialog_title_add": "新增使用者", + "prefs_users_dialog_title_edit": "編輯使用者", + "prefs_users_dialog_username_label": "使用者名,例如 phil", + "prefs_users_dialog_password_label": "密碼", + "common_cancel": "取消", + "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": "預設", + "priority_high": "高", + "priority_max": "最高", + "error_boundary_title": "天啊,ntfy 崩潰了", + "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": "不支援隱私瀏覽", + "error_boundary_unsupported_indexeddb_description": "Ntfy Web應用程式需要IndexedDB才能運行,且你的瀏覽器在隱私瀏覽模式下不支援IndexedDB。

儘管這很不幸,但在隱私瀏覽模式下使用ntfy Web應用程式也沒有多大意義,因為所有東西都存儲在瀏覽器存儲中。你可以在本GitHub問題中閱讀有關它的更多資訊,或者在DiscordMatrix上與我們交談。", + "message_bar_error_publishing": "發佈通知時出錯", + "nav_button_settings": "設定", + "notifications_delete": "刪除", + "notifications_attachment_copy_url_title": "將附件中連結地址複製到剪貼板", + "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", + "notifications_no_subscriptions_description": "點擊 \"{{linktext}}\" 連結以建立或訂閱主題。之後,你可以使用 PUT 或 POST 發送訊息,你將在這裡收到通知。", + "publish_dialog_attachment_limits_file_reached": "超過 {{fileSizeLimit}} 文件限制", + "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": "三小時後", + "prefs_users_delete_button": "刪除用戶", + "prefs_users_table_user_header": "用戶", + "common_add": "新增", + "prefs_notifications_delete_after_one_day": "一天後", + "error_boundary_description": "這顯然不應該發生。對此非常抱歉。
如果你有時間,請在GitHub上報告,或通過DiscordMatrix告訴我們。", + "prefs_users_table": "用戶表", + "prefs_users_edit_button": "編輯用戶", + "publish_dialog_tags_placeholder": "英文逗號分隔標記列表,例如 warning, srv1-backup", + "publish_dialog_details_examples_description": "有關所有發送功能的範例和詳細說明,請參閱文檔。", + "subscribe_dialog_subscribe_description": "主題可能不受密碼保護,因此請選擇一個不容易被猜中的名字。訂閱後,你可以使用 PUT/POST 通知。", + "publish_dialog_delay_placeholder": "延期投遞,例如 {{unixTimestamp}}、{{relativeTime}}或「{{naturalLanguage}}」(僅限英語)", + "account_usage_basis_ip_description": "此帳戶的使用統計資訊和限制基於你的 IP 地址,因此可能會與其他用戶共享。上面顯示的限制是基於現有速率限制的近似值。", + "account_usage_cannot_create_portal_session": "無法打開計費門戶", + "account_delete_title": "刪除帳戶", + "account_delete_description": "永久刪除你的帳戶", + "signup_error_username_taken": "用戶名 {{username}} 已被取用", + "signup_error_creation_limit_reached": "已達到帳戶創建限制", + "login_title": "請登錄你的 ntfy 帳戶", + "action_bar_change_display_name": "更改顯示名稱", + "action_bar_reservation_add": "保留主題", + "action_bar_reservation_delete": "移除保留", + "action_bar_reservation_limit_reached": "達到限制", + "action_bar_profile_title": "個人資料", + "action_bar_profile_settings": "設定", + "action_bar_profile_logout": "登出", + "action_bar_mute_notifications": "靜音", + "action_bar_sign_in": "登錄", + "action_bar_sign_up": "註冊", + "nav_button_account": "帳戶", + "nav_upgrade_banner_label": "升級到 ntfy Pro", + "nav_upgrade_banner_description": "保留主題,更多訊息和郵件,以及更大的附件", + "alert_not_supported_context_description": "通知僅支援 HTTPS。這是 Notifications API 的限制。", + "display_name_dialog_title": "更改顯示名稱", + "display_name_dialog_description": "為訂閱列表中顯示的主題設置一個替代名稱。這有助於更輕鬆地識別名稱複雜的主題。", + "display_name_dialog_placeholder": "顯示名稱", + "reserve_dialog_checkbox_label": "保留主題並配置訪問", "subscribe_dialog_subscribe_button_generate_topic_name": "生成名稱", - "subscribe_dialog_login_title": "需要登入", - "subscribe_dialog_login_username_label": "用戶名稱,例如 phil", - "subscribe_dialog_error_topic_already_reserved": "主題已被保留", + "account_basics_username_description": "嘿,那是你 ❤", + "account_basics_password_description": "更改你的帳戶密碼", + "account_basics_password_dialog_title": "更改密碼", + "account_basics_password_dialog_current_password_label": "當前密碼", + "account_basics_password_dialog_new_password_label": "新密碼", + "account_basics_password_dialog_confirm_password_label": "確認密碼", + "account_basics_password_dialog_button_submit": "更改密碼", + "account_basics_password_dialog_current_password_incorrect": "密碼錯誤", + "account_usage_title": "使用量", + "account_usage_of_limit": "{{limit}} 的", + "account_usage_unlimited": "無限", + "account_usage_limits_reset_daily": "使用限制每天午夜 (UTC) 重置", + "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": "升級到專業版", + "account_basics_tier_change_button": "改變", + "account_basics_tier_paid_until": "訂閱已支付至 {{date}},並將自動續訂", + "account_basics_tier_manage_billing_button": "管理計費", + "account_usage_messages_title": "已發布訊息", + "account_usage_emails_title": "已發送電子郵件", + "account_usage_reservations_title": "保留主題", + "account_usage_reservations_none": "此帳戶沒有保留主題", + "account_usage_attachment_storage_title": "附件存儲", + "account_usage_attachment_storage_description": "每個文件 {{filesize}},在 {{expiry}} 後刪除", + "account_upgrade_dialog_button_pay_now": "立即付款並訂閱", + "account_upgrade_dialog_button_cancel_subscription": "取消訂閱", + "account_upgrade_dialog_button_update_subscription": "更新訂閱", + "account_tokens_dialog_title_create": "創建訪問令牌", + "account_tokens_dialog_title_edit": "編輯訪問令牌", + "account_tokens_dialog_title_delete": "刪除訪問令牌", + "account_tokens_dialog_button_cancel": "取消", + "account_tokens_dialog_expires_label": "訪問令牌過期於", + "account_tokens_dialog_expires_unchanged": "保持過期日期不變", + "account_tokens_dialog_expires_x_hours": "令牌在 {{hours}} 小時後過期", + "account_tokens_dialog_expires_x_days": "令牌在 {{days}} 天後過期", + "account_tokens_dialog_expires_never": "令牌永不過期", + "account_tokens_delete_dialog_title": "刪除訪問令牌", + "account_tokens_delete_dialog_description": "在刪除訪問令牌之前,請確保沒有應用程序或腳本正在活躍使用它。 此操作無法撤銷。", + "account_tokens_delete_dialog_submit_button": "永久删除令牌", + "prefs_users_description_no_sync": "用戶和密碼不會同步到你的賬戶。", + "prefs_users_table_cannot_delete_or_edit": "無法刪除或編輯已登錄用戶", + "prefs_reservations_title": "保留主題", + "prefs_reservations_description": "你可以在此處保留主題名稱供個人使用。保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。", + "prefs_reservations_limit_reached": "你已達到保留主題限制。", + "prefs_reservations_add_button": "新增保留主題", + "prefs_reservations_edit_button": "編輯主題訪問", + "prefs_reservations_delete_button": "重置主題訪問", + "prefs_reservations_table": "保留主題表格", + "prefs_reservations_table_topic_header": "主題", + "prefs_reservations_table_access_header": "訪問", + "prefs_reservations_table_everyone_deny_all": "只有我可以發佈和訂閱", + "prefs_reservations_table_everyone_read_only": "我可以發佈和訂閱,每個人都可以訂閱", + "prefs_reservations_table_everyone_write_only": "我可以發佈和訂閱,每個人都可以發佈", + "prefs_reservations_table_everyone_read_write": "每個人都可以發佈和訂閱", + "prefs_reservations_table_not_subscribed": "未訂閱", + "prefs_reservations_table_click_to_subscribe": "點擊以訂閱", + "prefs_reservations_dialog_title_add": "保留主題", + "prefs_reservations_dialog_title_edit": "編輯保留主題", + "prefs_reservations_dialog_title_delete": "刪除主題保留", + "prefs_reservations_dialog_description": "保留主題使你擁有該主題的所有權,並允許你為其他用戶定義對該主題的訪問權限。", + "prefs_reservations_dialog_topic_label": "主題", + "prefs_reservations_dialog_access_label": "訪問", + "reservation_delete_dialog_description": "刪除保留會放棄對該主題的所有權,並允許其他人保留它。你可以保留或刪除現有郵件和附件。", + "reservation_delete_dialog_action_keep_title": "保留緩存的郵件和附件", + "reservation_delete_dialog_action_keep_description": "緩存在伺服器上的訊息和附件將對知道主題名稱的人公開可見。", + "reservation_delete_dialog_action_delete_title": "刪除緩存的郵件和附件", + "reservation_delete_dialog_action_delete_description": "緩存的郵件和附件將被永久刪除。此操作無法撤銷。", + "reservation_delete_dialog_submit_button": "刪除保留", + "account_delete_dialog_description": "這將永久刪除你的帳戶,包括存儲在伺服器上的所有數據。刪除後,你的用戶名將在 7 天內不可用。如果你真的想繼續,請在下面的框中使用你的密碼作確認。", + "account_delete_dialog_label": "密碼", + "account_delete_dialog_button_cancel": "取消", + "account_delete_dialog_button_submit": "永久刪除帳戶", + "account_delete_dialog_billing_warning": "刪除你的帳戶也會立即取消你的計費訂閱。你將無法再訪問計費儀錶板。", + "account_upgrade_dialog_title": "更改帳戶等級", + "account_upgrade_dialog_cancel_warning": "這將取消你的訂閱,並在 {{date}} 降級你的帳戶。在那一天,主題保留以及緩存在伺服器上的訊息將被刪除。", + "account_upgrade_dialog_proration_info": "按比例分配:在付費計劃之間升級時,差價將被立刻收取。在降級到較低級別時,餘額將被用於支付未來的賬單周期。", + "account_upgrade_dialog_reservations_warning_one": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,請至少刪除 1 項保留。你可以在設置中刪除保留。", + "account_upgrade_dialog_reservations_warning_other": "所選等級允許的保留主題少於當前等級。在更改你的等級之前,請至少刪除 {{count}} 項保留。你可以在設置中刪除保留。", + "account_upgrade_dialog_tier_features_reservations_other": "保留 {{reservations}} 條主題", + "account_upgrade_dialog_tier_features_messages_other": "每日 {{messages}} 條訊息", + "account_upgrade_dialog_tier_features_emails_other": "每日 {{emails}} 條郵件", + "account_upgrade_dialog_tier_features_attachment_file_size": "每個文件 {{filesize}} ", + "signup_form_confirm_password": "確認密碼", + "signup_form_button_submit": "註冊", + "signup_form_toggle_password_visibility": "切換密碼可見性", + "signup_title": "創建一個 ntfy 帳戶", + "signup_form_username": "用戶名", + "signup_form_password": "密碼", + "signup_already_have_account": "已有帳戶?登錄!", + "signup_disabled": "註冊已禁用", + "login_form_button_submit": "登錄", + "login_link_signup": "註冊", + "login_disabled": "登錄已禁用", + "action_bar_account": "帳戶", + "action_bar_reservation_edit": "更改保留", + "subscribe_dialog_error_topic_already_reserved": "主題已保留", "account_basics_title": "帳戶", - "account_basics_username_title": "用戶名稱", - "account_basics_username_description": "這就是你了❤", + "account_basics_username_title": "用戶名", "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_payment_overdue": "你的付款已逾期。請更新你的付款方式,否則你的帳戶將很快被降級。", + "account_basics_tier_canceled_subscription": "你的訂閱已取消,並將在 {{date}} 降級為免費帳戶。", + "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} 總存儲空間", + "account_upgrade_dialog_tier_selected_label": "已選", + "account_upgrade_dialog_tier_current_label": "當前", + "account_upgrade_dialog_button_cancel": "取消", + "account_upgrade_dialog_button_redirect_signup": "立即註冊", + "account_tokens_title": "訪問令牌", + "account_tokens_description": "通過 ntfy API 發布和訂閱時使用訪問令牌,因此你不必發送你的帳戶憑證。查看文檔以了解更多資訊。", + "account_tokens_table_token_header": "令牌", + "account_tokens_table_label_header": "標籤", + "account_tokens_table_last_access_header": "最後訪問", + "account_tokens_table_expires_header": "過期", + "account_tokens_table_never_expires": "永不過期", + "account_tokens_table_current_session": "當前瀏覽器會話", + "common_copy_to_clipboard": "複製到剪貼板", + "account_tokens_table_copied_to_clipboard": "已複製訪問令牌", + "account_tokens_table_cannot_delete_or_edit": "無法編輯或刪除當前會話令牌", + "account_tokens_table_create_token_button": "創建訪問令牌", + "account_tokens_table_last_origin_tooltip": "於IP地址 {{ip}},點擊查找", + "account_tokens_dialog_label": "標籤,例如:Radarr 通知", + "account_tokens_dialog_button_create": "創建令牌", + "account_tokens_dialog_button_update": "更新令牌", "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": "管理付款方式" + "account_upgrade_dialog_interval_monthly": "每月", + "account_upgrade_dialog_interval_yearly": "每年", + "account_upgrade_dialog_interval_yearly_discount_save": "節省 {{discount}}%", + "account_upgrade_dialog_interval_yearly_discount_save_up_to": "節省高達 {{discount}}%", + "account_upgrade_dialog_tier_features_no_reservations": "無保留主題", + "account_upgrade_dialog_tier_price_per_month": "月", + "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} 每年。按月計費。", + "account_upgrade_dialog_tier_price_billed_yearly": "{{價格}} 按年計費。節省 {{save}}。", + "account_upgrade_dialog_billing_contact_email": "有關賬單問題,請直接聯繫我們 。", + "account_upgrade_dialog_billing_contact_website": "有關賬單問題,請參考我們的網站 。", + "publish_dialog_call_item": "撥打電話 {{number}}", + "publish_dialog_call_label": "撥號", + "publish_dialog_chip_call_label": "撥號", + "publish_dialog_chip_call_no_verified_numbers_tooltip": "未驗證的電話號碼", + "account_basics_phone_numbers_title": "電話號碼", + "account_basics_phone_numbers_description": "電話通知", + "account_basics_phone_numbers_dialog_description": "要使用來電通知功能,你需要新增並驗證至少一個電話號碼。可以通過短信或電話驗證。", + "account_basics_phone_numbers_dialog_code_label": "驗證碼", + "account_basics_phone_numbers_dialog_code_placeholder": "例如:123456", + "account_basics_phone_numbers_dialog_check_verification_button": "確認碼", + "account_basics_phone_numbers_dialog_channel_sms": "短信", + "account_basics_phone_numbers_dialog_channel_call": "撥打", + "publish_dialog_call_reset": "清空撥號", + "account_basics_phone_numbers_no_phone_numbers_yet": "無可執行的電話號碼", + "account_basics_phone_numbers_dialog_title": "新增電話號碼", + "account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼板", + "account_basics_phone_numbers_dialog_number_label": "電話號碼", + "account_basics_phone_numbers_dialog_number_placeholder": "例如:+1222333444", + "account_usage_calls_title": "已撥打電話", + "account_usage_calls_none": "此帳號無法撥打電話", + "account_upgrade_dialog_tier_features_reservations_one": "保留一條主題", + "account_upgrade_dialog_tier_features_emails_one": "每日一封郵件", + "account_upgrade_dialog_tier_features_calls_one": "每日一通電話", + "account_basics_phone_numbers_dialog_verify_button_sms": "發送資訊", + "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" } From 1bd77a83bddf9fbc7aa4aa13559eb54cc573af63 Mon Sep 17 00:00:00 2001 From: "vardy.ng" Date: Sat, 2 Sep 2023 17:34:44 -0400 Subject: [PATCH 229/305] Updated translation for Traditional and Simplified Chinese, simplified translation for "higher" --- web/public/static/langs/zh_Hans.json | 6 +++--- web/public/static/langs/zh_Hant.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/public/static/langs/zh_Hans.json b/web/public/static/langs/zh_Hans.json index f9a9fbcd..e26e7f14 100644 --- a/web/public/static/langs/zh_Hans.json +++ b/web/public/static/langs/zh_Hans.json @@ -123,9 +123,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": "一月后", diff --git a/web/public/static/langs/zh_Hant.json b/web/public/static/langs/zh_Hant.json index ae32e765..a42b0292 100644 --- a/web/public/static/langs/zh_Hant.json +++ b/web/public/static/langs/zh_Hant.json @@ -123,9 +123,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": "一個月後", From 59bf3885341ab0da090ecab4cc9852ee817cc055 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 3 Sep 2023 07:13:04 -0400 Subject: [PATCH 230/305] FAQ --- docs/faq.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/faq.md b/docs/faq.md index 8844566f..6ff97cfe 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -76,6 +76,18 @@ 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 From 2305ebca244fb60aa784a3b79270ae6f33b8ee48 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 3 Sep 2023 09:33:54 -0400 Subject: [PATCH 231/305] Add known issues --- docs/known-issues.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/known-issues.md b/docs/known-issues.md index 401d82a1..190e2bce 100644 --- a/docs/known-issues.md +++ b/docs/known-issues.md @@ -27,6 +27,13 @@ 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. From 85740d810bf0f6c2e243ce70967c3a7a7981ed0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20de=20Le=C3=B3n?= Date: Sun, 3 Sep 2023 18:55:57 -0600 Subject: [PATCH 232/305] Fix cloudflarePriorityIgnore - Now, only if the header being processed is the "priority" header, the cloudflarePriorityIgnore function is called, solving problems with that header injected by CF - we make the check with regex now. --- server/util.go | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/server/util.go b/server/util.go index ee87f2ed..9cbae2e4 100644 --- a/server/util.go +++ b/server/util.go @@ -9,7 +9,7 @@ import ( "net/http" "net/netip" "strings" - /*"regexp"*/ + "regexp" ) var mimeDecoder mime.WordDecoder @@ -51,7 +51,7 @@ func readParam(r *http.Request, names ...string) string { func readHeaderParam(r *http.Request, names ...string) string { for _, name := range names { - value := maybeDecodeHeader(r.Header.Get(name)) + value := maybeDecodeHeader(r.Header.Get(name), name) if value != "" { return strings.TrimSpace(value) } @@ -127,12 +127,19 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) { return t, nil } -func maybeDecodeHeader(header string) string { +func maybeDecodeHeader(header string, name string) string { decoded, err := mimeDecoder.DecodeHeader(header) if err != nil { - return cloudflarePriorityIgnore(header) + if name == "priority"{ + return cloudflarePriorityIgnore(header) + } + return header } - return cloudflarePriorityIgnore(decoded) + + if name == "priority"{ + return cloudflarePriorityIgnore(decoded) + } + return decoded } // Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority) @@ -140,15 +147,10 @@ func maybeDecodeHeader(header string) string { // If the Priority header is set to "u=*, i" or "u=*" (by cloudflare), the header will be ignored. // And continue searching for another header (x-priority, prio, p) or in the Query parameters. func cloudflarePriorityIgnore(value string) string { - if strings.HasPrefix(value, "u=") { - return "" - } - - // The same but with regex - /* pattern := `^u=\d+\s*,\s*i|u=\d+$` + pattern := `^u=\d,\s(i|\d)$|^u=\d$` regex := regexp.MustCompile(pattern) if regex.MatchString(value) { return "" - } */ + } return value } From 4c4d772a5f1b3a6d6c90b1a3654bee4220d1f92d Mon Sep 17 00:00:00 2001 From: Bastien S Date: Thu, 31 Aug 2023 13:59:14 +0000 Subject: [PATCH 233/305] Translated using Weblate (French) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/fr/ --- web/public/static/langs/fr.json | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/fr.json b/web/public/static/langs/fr.json index cf4bb721..91f1b65a 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 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_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_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,8 +368,17 @@ "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": "Appel", + "account_basics_phone_numbers_dialog_channel_call": "Appeler", "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" + "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" } From 6748a2f2f30d73b546a8d2bd174c1ef0bd223509 Mon Sep 17 00:00:00 2001 From: Max Oliver Date: Sat, 2 Sep 2023 19:43:47 +0000 Subject: [PATCH 234/305] Translated using Weblate (Portuguese (Brazil)) Currently translated at 57.5% (220 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/pt_BR/ --- web/public/static/langs/pt_BR.json | 35 +++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/web/public/static/langs/pt_BR.json b/web/public/static/langs/pt_BR.json index 16ba3a14..1bb0cd92 100644 --- a/web/public/static/langs/pt_BR.json +++ b/web/public/static/langs/pt_BR.json @@ -191,10 +191,33 @@ "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": "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" + "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" } From 4b0d1e448dbaf45222d63cd2e828f5f2c93c2cea Mon Sep 17 00:00:00 2001 From: Mattia Date: Fri, 1 Sep 2023 09:37:08 +0000 Subject: [PATCH 235/305] Translated using Weblate (Italian) Currently translated at 70.6% (270 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index a895e1a6..72cee7d6 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -267,5 +267,6 @@ "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_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" } From 8a8023fcf8a0bfd60c0c31bef744140a86142511 Mon Sep 17 00:00:00 2001 From: Ron Date: Sun, 3 Sep 2023 14:47:34 +0000 Subject: [PATCH 236/305] Translated using Weblate (Chinese (Traditional)) Currently translated at 64.1% (245 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/zh_Hant/ --- web/public/static/langs/zh_Hant.json | 35 ++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/web/public/static/langs/zh_Hant.json b/web/public/static/langs/zh_Hant.json index b3d506d1..0d7f3f48 100644 --- a/web/public/static/langs/zh_Hant.json +++ b/web/public/static/langs/zh_Hant.json @@ -79,7 +79,7 @@ "common_save": "儲存", "common_cancel": "取消", "error_boundary_title": "歐買尬,ntfy 壞掉了", - "notifications_none_for_any_description": "要開始發送通知到一個主題,只需要對主題 URL 發送 HTTP PUT 或者 POST,例如:", + "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", @@ -102,7 +102,7 @@ "login_title": "登入 ntfy 帳戶", "action_bar_reservation_add": "保留主題", "action_bar_profile_logout": "登出", - "alert_not_supported_context_description": "訊息只支援 HTTPS. 這是受 Notifications API 的限制", + "alert_not_supported_context_description": "訊息只支援 HTTPS。這是受 Notifications API 的限制。", "publish_dialog_base_url_placeholder": "服務網址,例如 https://example.com", "signup_title": "創建 ntfy 賬戶", "signup_form_username": "用戶名稱", @@ -212,9 +212,36 @@ "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}}", + "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": "管理付款方式" + "account_basics_tier_manage_billing_button": "管理付款方式", + "prefs_notifications_title": "通知", + "prefs_notifications_sound_title": "通知提示聲", + "prefs_notifications_sound_description_none": "收到通知時不使用任何提示音", + "prefs_notifications_sound_description_some": "收到通知時播放 {{sound}}", + "prefs_notifications_sound_play": "播放選擇的聲音", + "account_basics_phone_numbers_dialog_description": "若要啟用來電通知功能,您需要增加至少一組電話號碼,並透過簡訊或是語音完成驗證。", + "account_basics_phone_numbers_description": "來電通知", + "account_basics_phone_numbers_dialog_verify_button_call": "播號", + "account_basics_phone_numbers_dialog_number_placeholder": "範例:+1222333444", + "account_basics_phone_numbers_dialog_verify_button_sms": "傳送簡訊", + "account_basics_phone_numbers_dialog_code_label": "驗證碼", + "account_basics_phone_numbers_dialog_code_placeholder": "範例:123456", + "account_basics_phone_numbers_dialog_check_verification_button": "確認碼", + "account_basics_phone_numbers_dialog_channel_sms": "簡訊", + "account_usage_calls_none": "您無法使用此帳戶進行通話", + "account_usage_reservations_title": "保留的標題", + "account_usage_of_limit": "{{limit}} 的", + "account_basics_phone_numbers_no_phone_numbers_yet": "尚未擁有任何電話號碼", + "account_basics_phone_numbers_dialog_title": "增加電話號碼", + "prefs_notifications_sound_no_sound": "靜音", + "prefs_notifications_min_priority_title": "最小優先度", + "prefs_notifications_min_priority_description_any": "忽略優先度,顯示所有通知", + "account_basics_phone_numbers_title": "電話號碼", + "account_basics_phone_numbers_copied_to_clipboard": "電話號碼已複製到剪貼簿", + "account_basics_phone_numbers_dialog_number_label": "電話號碼", + "account_basics_phone_numbers_dialog_channel_call": "通話", + "account_usage_calls_title": "已播出電話" } From 76146c4e74b2b48c42cd84aa24bc434633ce47c1 Mon Sep 17 00:00:00 2001 From: Mazurky Date: Thu, 31 Aug 2023 20:15:20 +0000 Subject: [PATCH 237/305] Translated using Weblate (Slovak) Currently translated at 45.8% (175 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sk/ --- web/public/static/langs/sk.json | 178 +++++++++++++++++++++++++++++++- 1 file changed, 177 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/sk.json b/web/public/static/langs/sk.json index 0967ef42..e2a54dba 100644 --- a/web/public/static/langs/sk.json +++ b/web/public/static/langs/sk.json @@ -1 +1,177 @@ -{} +{ + "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." +} From 9959d1aa4375393ee1b72f53836ac9394dcda536 Mon Sep 17 00:00:00 2001 From: jonnysemon Date: Tue, 5 Sep 2023 17:53:34 +0000 Subject: [PATCH 238/305] Translated using Weblate (Arabic) Currently translated at 85.6% (327 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ar/ --- web/public/static/langs/ar.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index 0c9fcc7d..301ae5eb 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": "الأولوية القصوى فقط", From dee16f543d234fbb7f67991b730e4c766ad5adc6 Mon Sep 17 00:00:00 2001 From: Helly <73737531+InvitedToHell@users.noreply.github.com> Date: Wed, 6 Sep 2023 00:52:46 +0200 Subject: [PATCH 239/305] Add ios shortcut to the integrations docs --- docs/integrations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/integrations.md b/docs/integrations.md index 68bc4c46..e689427e 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -129,7 +129,8 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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-filesharing](https://www.icloud.com/shortcuts/fe948d151b2e4ae08fb2f9d6b27d680b) - An iOS shortcut that let's you share files from your share feed to a topic of your choice. + ## Blog + forum posts - [NetworkChunk - how did I NOT know about this?](https://www.youtube.com/watch?v=poDIT2ruQ9M) ⭐ - youtube.com - 8/2023 From 528a67722b6b27f0772acdabb88da502e9ddfd93 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 10 Sep 2023 11:23:18 -0400 Subject: [PATCH 240/305] Thank you @LuckVintage for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a6e0e8da..6379c7d2 100644 --- a/README.md +++ b/README.md @@ -148,6 +148,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 25a60969fb73a7899993c2edea78e02cfa56154e Mon Sep 17 00:00:00 2001 From: Christian Meis Date: Thu, 7 Sep 2023 12:20:49 +0000 Subject: [PATCH 241/305] Translated using Weblate (German) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/de/ --- web/public/static/langs/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/public/static/langs/de.json b/web/public/static/langs/de.json index d29760f1..4af63501 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": "Von Thema abmelden", + "action_bar_unsubscribe": "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 der Benachrichtigungen an/aus", + "action_bar_toggle_mute": "Stummschaltung an/aus", "message_bar_show_dialog": "Dialog zur Veröffentlichung anzeigen", "message_bar_publish": "Benachrichtigung veröffentlichen", "nav_button_connecting": "verbinde", From bae30d79c9609bc3eace0199b9a8c0a270405f7b Mon Sep 17 00:00:00 2001 From: SinecKers Date: Wed, 6 Sep 2023 22:00:45 +0000 Subject: [PATCH 242/305] Translated using Weblate (Turkish) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/tr/ --- web/public/static/langs/tr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/public/static/langs/tr.json b/web/public/static/langs/tr.json index 07fba528..4e73cfb7 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": "Öntanımlı öncelik ve üstü", + "prefs_notifications_min_priority_default_and_higher": "Varsayılan ö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.", From 044f4182d028f79777762374ccc9bedef45bd913 Mon Sep 17 00:00:00 2001 From: Jag_k Date: Thu, 7 Sep 2023 00:17:25 +0000 Subject: [PATCH 243/305] Translated using Weblate (Russian) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ru/ --- web/public/static/langs/ru.json | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/web/public/static/langs/ru.json b/web/public/static/langs/ru.json index d2c8d7fc..16ddfe74 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,5 +363,22 @@ "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_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" } From 6ec1ccf7a3d9052cb3d9e67c1ac86cd7c97149b4 Mon Sep 17 00:00:00 2001 From: jonnysemon Date: Tue, 5 Sep 2023 18:08:50 +0000 Subject: [PATCH 244/305] Translated using Weblate (Arabic) Currently translated at 85.8% (328 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/ar/ --- web/public/static/langs/ar.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/ar.json b/web/public/static/langs/ar.json index 301ae5eb..d9d44a98 100644 --- a/web/public/static/langs/ar.json +++ b/web/public/static/langs/ar.json @@ -329,5 +329,6 @@ "publish_dialog_attachment_limits_quota_reached": "يتجاوز الحصة، {{remainingBytes}} متبقية", "account_basics_tier_paid_until": "تم دفع مبلغ الاشتراك إلى غاية {{date}}، وسيتم تجديده تِلْقائيًا", "account_basics_tier_canceled_subscription": "تم إلغاء اشتراكك وسيتم إعادته إلى مستوى حساب مجاني بداية مِن {{date}}.", - "account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن." + "account_delete_dialog_billing_warning": "إلغاء حسابك أيضاً يلغي اشتراكك في الفوترة فوراً ولن تتمكن من الوصول إلى لوح الفوترة بعد الآن.", + "nav_upgrade_banner_description": "حجز المواضيع والمزيد من الرسائل ورسائل البريد الإلكتروني والمرفقات الأكبر حجمًا" } From a407a2e0f8fc5655a42005f1bf41c0640d69ebd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?jos=C3=A9=20m?= Date: Fri, 8 Sep 2023 04:01:07 +0000 Subject: [PATCH 245/305] Translated using Weblate (Galician) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/gl/ --- web/public/static/langs/gl.json | 151 +++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/gl.json b/web/public/static/langs/gl.json index efc418ff..1f816cf4 100644 --- a/web/public/static/langs/gl.json +++ b/web/public/static/langs/gl.json @@ -160,5 +160,154 @@ "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" + "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" } From 42063cbd5c2f254e28270cfb2a609e092cc1eabd Mon Sep 17 00:00:00 2001 From: Jose Boullosa Date: Tue, 5 Sep 2023 23:54:30 +0000 Subject: [PATCH 246/305] Translated using Weblate (Galician) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/gl/ --- web/public/static/langs/gl.json | 77 +++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/web/public/static/langs/gl.json b/web/public/static/langs/gl.json index 1f816cf4..92d35610 100644 --- a/web/public/static/langs/gl.json +++ b/web/public/static/langs/gl.json @@ -114,7 +114,7 @@ "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_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}}", @@ -125,7 +125,7 @@ "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 de servizo", + "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", @@ -309,5 +309,76 @@ "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_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." } From 68a7756621946c366ebfb99c614f7255e0494183 Mon Sep 17 00:00:00 2001 From: Mazurky Date: Sat, 9 Sep 2023 15:29:57 +0000 Subject: [PATCH 247/305] Translated using Weblate (Slovak) Currently translated at 100.0% (382 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/sk/ --- web/public/static/langs/sk.json | 209 +++++++++++++++++++++++++++++++- 1 file changed, 208 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/sk.json b/web/public/static/langs/sk.json index e2a54dba..8ea1b45f 100644 --- a/web/public/static/langs/sk.json +++ b/web/public/static/langs/sk.json @@ -173,5 +173,212 @@ "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." + "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": "Odstrániť 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" } From d2e2791729bc70062da1b415def907a65a35b9a6 Mon Sep 17 00:00:00 2001 From: wunter8 Date: Sun, 17 Sep 2023 10:39:59 -0600 Subject: [PATCH 248/305] Add instructions for local-only email publishing --- docs/config.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/config.md b/docs/config.md index bb7f7e1b..03a624e8 100644 --- a/docs/config.md +++ b/docs/config.md @@ -466,6 +466,31 @@ $ 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 From b05d27ce459dce8f30b8143187b661fd7dabd2c4 Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Sun, 17 Sep 2023 19:03:10 +0000 Subject: [PATCH 249/305] Translated using Weblate (Bulgarian) Currently translated at 87.6% (335 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/bg/ --- web/public/static/langs/bg.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/bg.json b/web/public/static/langs/bg.json index 1d1066f6..d3b73449 100644 --- a/web/public/static/langs/bg.json +++ b/web/public/static/langs/bg.json @@ -318,5 +318,20 @@ "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_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}} резервирани теми. Можете да премахвате теми в Настройки." } From d10a5df3dff623661a6f30a326fe42809d69f8d9 Mon Sep 17 00:00:00 2001 From: Federico Nellen Date: Mon, 18 Sep 2023 13:50:55 +0000 Subject: [PATCH 250/305] Translated using Weblate (Italian) Currently translated at 77.4% (296 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index 72cee7d6..9d030c14 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -268,5 +268,31 @@ "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_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" } From bc802bfc77bddd4c13bf3a191c90c2e70ff4f64f Mon Sep 17 00:00:00 2001 From: Andrea Guarnaccia Date: Wed, 20 Sep 2023 14:37:30 +0000 Subject: [PATCH 251/305] Translated using Weblate (Italian) Currently translated at 80.1% (306 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index 9d030c14..afca0797 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -294,5 +294,14 @@ "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_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." } From ef15b44a1bb66346b8522060e4309a8554a614dc Mon Sep 17 00:00:00 2001 From: Jakob Malchow Date: Wed, 20 Sep 2023 14:40:13 +0000 Subject: [PATCH 252/305] Translated using Weblate (Italian) Currently translated at 80.1% (306 of 382 strings) Translation: ntfy/Web app Translate-URL: https://hosted.weblate.org/projects/ntfy/web/it/ --- web/public/static/langs/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/public/static/langs/it.json b/web/public/static/langs/it.json index afca0797..99d2cfff 100644 --- a/web/public/static/langs/it.json +++ b/web/public/static/langs/it.json @@ -303,5 +303,6 @@ "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_billing_warning": "Eliminando il tuo account perderai immediatamente il tuo abbonamento. Non potrai più accedere alla dashboard di fatturazione.", + "account_delete_dialog_label": "Password" } From beffe4a1f243dd4bccd442e0012aabd9949a61f0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 11:02:59 -0400 Subject: [PATCH 253/305] Thank you @spartan for your sponsorship --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6379c7d2..f94594be 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,7 @@ account costs. Even small donations are very much appreciated. A big fat **Thank + 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: From 418fc98d1a2f32aacb4ecf823d8943117b3d4cd4 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 11:05:21 -0400 Subject: [PATCH 254/305] Bump deps --- go.mod | 36 +- go.sum | 36 ++ web/package-lock.json | 814 ++++++++++++++++++++++-------------------- 3 files changed, 474 insertions(+), 412 deletions(-) diff --git a/go.mod b/go.mod index 8e493e3b..05fb154b 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module heckel.io/ntfy go 1.18 require ( - cloud.google.com/go/firestore v1.12.0 // indirect - cloud.google.com/go/storage v1.32.0 // indirect + cloud.google.com/go/firestore v1.13.0 // indirect + cloud.google.com/go/storage v1.33.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/emersion/go-smtp v0.18.0 @@ -14,12 +14,12 @@ require ( 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.12.0 - golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/crypto v0.13.0 + golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/sync v0.3.0 - golang.org/x/term v0.11.0 + golang.org/x/term v0.12.0 golang.org/x/time v0.3.0 - google.golang.org/api v0.138.0 + google.golang.org/api v0.142.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -35,7 +35,7 @@ require ( ) require ( - cloud.google.com/go v0.110.7 // indirect + cloud.google.com/go v0.110.8 // 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.2 // indirect @@ -51,30 +51,30 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.5.9 // indirect - github.com/google/s2a-go v0.1.5 // indirect + github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.3.1 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.1 // 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 v1.0.4 // indirect github.com/pmezard/go-difflib v1.0.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/prometheus/procfs v0.12.0 // 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.14.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/appengine v1.6.7 // 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-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/grpc v1.57.0 // indirect + google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect + google.golang.org/grpc v1.58.2 // 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 173e8e9c..046695e1 100644 --- a/go.sum +++ b/go.sum @@ -2,18 +2,24 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT 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 v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= 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.12.0 h1:aeEA/N7DW7+l2u5jtkO8I0qv0D95YwjggD8kUHrTHO4= cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.13.0 h1:/3S4RssUV4GO/kvgJZB+tayjhOfyAHs+KcpJgRVu/Qk= +cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= 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= +cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= +cloud.google.com/go/storage v1.33.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= @@ -97,6 +103,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= 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/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -104,6 +112,8 @@ github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/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/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= +github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= 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.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= @@ -131,6 +141,8 @@ github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdO 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/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= 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= @@ -162,6 +174,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y 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/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= 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= @@ -183,10 +197,14 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 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/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= 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= @@ -206,10 +224,14 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.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.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/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= 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= @@ -218,6 +240,8 @@ 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.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.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= @@ -234,10 +258,14 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j 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/api v0.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY= +google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +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.4 h1:aAAPYixP9EfTJjNO6F46afaxp+jfzb0VgwVjMeLBtF4= google.golang.org/appengine/v2 v2.0.4/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= google.golang.org/appengine/v2 v2.0.5 h1:4C+F3Cd3L2nWEfSmFEZDPjQvDwL8T0YCeZBysZifP3k= @@ -250,14 +278,20 @@ google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878 h1:Iveh6tGCJkHAjJg google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= 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/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= 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/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= 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= @@ -268,6 +302,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG 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/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= 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= diff --git a/web/package-lock.json b/web/package-lock.json index cb15d61f..d4ba68bf 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,30 +80,30 @@ } }, "node_modules/@babel/compat-data": { - "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==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", + "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.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.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.20", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.20", + "@babel/types": "^7.22.19", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -119,12 +119,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -146,25 +146,25 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "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==", + "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==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -174,15 +174,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "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==", "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.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -197,9 +197,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -230,9 +230,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "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==", + "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==", "dev": true, "engines": { "node": ">=6.9.0" @@ -264,39 +264,39 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "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==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "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==", + "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==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "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==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", + "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -327,14 +327,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -344,13 +344,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "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==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -405,56 +405,56 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "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==", + "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==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "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==", + "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==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -463,9 +463,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -475,9 +475,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -490,14 +490,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "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==", + "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==", "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.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -510,7 +510,6 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", "dev": true, "engines": { "node": ">=6.9.0" @@ -770,9 +769,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", - "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -820,9 +819,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "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==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -868,18 +867,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@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.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -907,9 +906,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "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==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1001,9 +1000,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "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==", + "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1111,12 +1110,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1225,16 +1224,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", - "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "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==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1276,9 +1275,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", - "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1293,9 +1292,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "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==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1557,17 +1556,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.14.tgz", - "integrity": "sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", + "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/compat-data": "^7.22.20", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@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/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/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", @@ -1588,39 +1587,39 @@ "@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.22.11", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-block-scoping": "^7.22.15", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-destructuring": "^7.22.15", "@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-exponentiation-operator": "^7.22.5", "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", "@babel/plugin-transform-modules-systemjs": "^7.22.11", "@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.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.22.12", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", @@ -1636,7 +1635,7 @@ "@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.22.11", + "@babel/types": "^7.22.19", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", "babel-plugin-polyfill-regenerator": "^0.5.2", @@ -1671,9 +1670,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1682,33 +1681,33 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", + "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", "@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.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.19", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1717,12 +1716,12 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2240,9 +2239,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2272,9 +2271,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2299,29 +2298,29 @@ } }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@floating-ui/core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", - "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "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.1" + "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", - "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "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.1", - "@floating-ui/utils": "^0.1.1" + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" } }, "node_modules/@floating-ui/react-dom": { @@ -2337,9 +2336,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", - "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.4.tgz", + "integrity": "sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA==" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.11", @@ -2444,19 +2443,17 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.13", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.13.tgz", - "integrity": "sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw==", + "version": "5.0.0-beta.16", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.16.tgz", + "integrity": "sha512-OYxhC81c9bO0wobGcM8rrY5bRwpCXAI21BL0P2wz/2vTv4ek7ALz9+U5M8wgdmtRNUhmCmAB4L2WRwFRf5Cd8Q==", "dependencies": { - "@babel/runtime": "^7.22.10", - "@emotion/is-prop-valid": "^1.2.1", - "@floating-ui/react-dom": "^2.0.1", + "@babel/runtime": "^7.22.15", + "@floating-ui/react-dom": "^2.0.2", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.10", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" @@ -2477,20 +2474,20 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz", - "integrity": "sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.10.tgz", + "integrity": "sha512-kPHu/NhZq1k+vSZR5wq3AyUfD4bnfWAeuKpps0+8PS7ZHQ2Lyv1cXJh+PlFdCIOa0PK98rk3JPwMzS8BMhdHwQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.7.tgz", - "integrity": "sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A==", + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.9.tgz", + "integrity": "sha512-xTRQbDsogsJo7tY5Og8R9zbuG2q+KIPVIM6JQoKxtJlz9DPOw1u0T2fGrvwD+XAOVifQf6epNMcGCDLfJAz4Nw==", "dependencies": { - "@babel/runtime": "^7.22.10" + "@babel/runtime": "^7.22.15" }, "engines": { "node": ">=12.0.0" @@ -2511,16 +2508,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.7.tgz", - "integrity": "sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.10.tgz", + "integrity": "sha512-ejFMppnO+lzBXpzju+N4SSz0Mhmi5sihXUGcr5FxpgB6bfUP0Lpe32O0Sw/3s8xlmLEvG1fqVT0rRyAVMlCA+A==", "dependencies": { - "@babel/runtime": "^7.22.10", - "@mui/base": "5.0.0-beta.13", - "@mui/core-downloads-tracker": "^5.14.7", - "@mui/system": "^5.14.7", + "@babel/runtime": "^7.22.15", + "@mui/base": "5.0.0-beta.16", + "@mui/core-downloads-tracker": "^5.14.10", + "@mui/system": "^5.14.10", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.10", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", @@ -2555,12 +2552,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.7.tgz", - "integrity": "sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.10.tgz", + "integrity": "sha512-f67xOj3H06wWDT9xBg7hVL/HSKNF+HG1Kx0Pm23skkbEqD2Ef2Lif64e5nPdmWVv+7cISCYtSuE2aeuzrZe78w==", "dependencies": { - "@babel/runtime": "^7.22.10", - "@mui/utils": "^5.14.7", + "@babel/runtime": "^7.22.15", + "@mui/utils": "^5.14.10", "prop-types": "^15.8.1" }, "engines": { @@ -2581,11 +2578,11 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.7.tgz", - "integrity": "sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.10.tgz", + "integrity": "sha512-EJckxmQHrsBvDbFu1trJkvjNw/1R7jfNarnqPSnL+jEQawCkQIqVELWLrlOa611TFtxSJGkdUfCFXeJC203HVg==", "dependencies": { - "@babel/runtime": "^7.22.10", + "@babel/runtime": "^7.22.15", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2612,15 +2609,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.7.tgz", - "integrity": "sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.10.tgz", + "integrity": "sha512-QQmtTG/R4gjmLiL5ECQ7kRxLKDm8aKKD7seGZfbINtRVJDyFhKChA1a+K2bfqIAaBo1EMDv+6FWNT1Q5cRKjFA==", "dependencies": { - "@babel/runtime": "^7.22.10", - "@mui/private-theming": "^5.14.7", - "@mui/styled-engine": "^5.14.7", + "@babel/runtime": "^7.22.15", + "@mui/private-theming": "^5.14.10", + "@mui/styled-engine": "^5.14.10", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.10", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -2664,13 +2661,12 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.7.tgz", - "integrity": "sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw==", + "version": "5.14.10", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.10.tgz", + "integrity": "sha512-Rn+vYQX7FxkcW0riDX/clNUwKuOJFH45HiULxwmpgnzQoQr3A0lb+QYwaZ+FAkZrR7qLoHKmLQlcItu6LT0y/Q==", "dependencies": { - "@babel/runtime": "^7.22.10", + "@babel/runtime": "^7.22.15", "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -2682,7 +2678,13 @@ "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": { @@ -2730,9 +2732,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.8.0.tgz", - "integrity": "sha512-mrfKqIHnSZRyIzBcanNJmVQELTnX+qagEDlcKO90RgRBVOZGSGvZKeDihTRfWcqoDn5N/NkUcwWTccnpN18Tfg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", + "integrity": "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA==", "engines": { "node": ">=14.0.0" } @@ -2770,9 +2772,9 @@ } }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", + "version": "20.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.4.tgz", + "integrity": "sha512-nU6d9MPY0NBUMiE/nXd2IIoC4OLvsLpwAjheoAeuzgvDZA1Cb10QYg+91AF6zQiKWRN5i1m07x6sMe0niBznoQ==", "dev": true }, "node_modules/@types/parse-json": { @@ -2781,28 +2783,20 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.7", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.7.tgz", + "integrity": "sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==" }, "node_modules/@types/react": { - "version": "18.2.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", - "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.22.tgz", + "integrity": "sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==", "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.6", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", @@ -2826,9 +2820,9 @@ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.4.tgz", + "integrity": "sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==", "dev": true }, "node_modules/@types/unist": { @@ -2940,15 +2934,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -2978,14 +2972,14 @@ } }, "node_modules/array.prototype.flat": { - "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==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2996,14 +2990,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3014,27 +3008,28 @@ } }, "node_modules/array.prototype.tosorted": { - "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==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "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" @@ -3089,9 +3084,9 @@ } }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", + "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", "dev": true, "engines": { "node": ">=4" @@ -3135,13 +3130,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "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==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", + "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "core-js-compat": "^3.32.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3197,9 +3192,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.21.11", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", + "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", "dev": true, "funding": [ { @@ -3216,10 +3211,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001538", + "electron-to-chromium": "^1.4.526", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -3268,9 +3263,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001525", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", - "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "version": "1.0.30001538", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", + "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", "dev": true, "funding": [ { @@ -3398,9 +3393,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, "dependencies": { "browserslist": "^4.21.10" @@ -3506,12 +3501,27 @@ "node": ">=0.10.0" } }, - "node_modules/define-properties": { - "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==", + "node_modules/define-data-property": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", "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==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -3586,9 +3596,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.508", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", - "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==", + "version": "1.4.528", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.528.tgz", + "integrity": "sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==", "dev": true }, "node_modules/emoji-regex": { @@ -3614,18 +3624,18 @@ } }, "node_modules/es-abstract": { - "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==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^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.5", + "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", @@ -3641,23 +3651,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "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.10" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -3667,14 +3677,14 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", + "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", "dev": true, "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "define-properties": "^1.2.0", + "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", @@ -3684,8 +3694,8 @@ "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "node_modules/es-set-tostringtag": { @@ -3786,16 +3796,16 @@ } }, "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.50.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -4168,9 +4178,9 @@ "dev": true }, "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.22.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", + "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4430,9 +4440,9 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/for-each": { @@ -4756,9 +4766,9 @@ } }, "node_modules/humanize-duration": { - "version": "3.29.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.29.0.tgz", - "integrity": "sha512-G5wZGwYTLaQAmYqhfK91aw3xt6wNbJW1RnWDh4qP1PvF4T/jnkjx2RVhG5kzB2PGsYGTn+oSDBQp+dMdILLxcg==" + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.30.0.tgz", + "integrity": "sha512-NxpT0fhQTFuMTLnuu1Xp+ozNpYirQnbV3NlOjEKBYlE3uvMRu3LDuq8EPc3gVXxVYnchQfqVM4/+T9iwHPLLeA==" }, "node_modules/i18next": { "version": "21.10.0", @@ -5309,15 +5319,16 @@ "dev": true }, "node_modules/iterator.prototype": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", - "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", + "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, "node_modules/jake": { @@ -6187,9 +6198,9 @@ } }, "node_modules/postcss": { - "version": "8.4.29", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", - "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "version": "8.4.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", + "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", "dev": true, "funding": [ { @@ -6406,11 +6417,11 @@ } }, "node_modules/react-router": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.15.0.tgz", - "integrity": "sha512-NIytlzvzLwJkCQj2HLefmeakxxWHWAP+02EGqWEZy+DgfHHKQMUoBBjUQLOtFInBMhWtb3hiUy6MfFgwLjXhqg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.16.0.tgz", + "integrity": "sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA==", "dependencies": { - "@remix-run/router": "1.8.0" + "@remix-run/router": "1.9.0" }, "engines": { "node": ">=14.0.0" @@ -6420,12 +6431,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.15.0.tgz", - "integrity": "sha512-aR42t0fs7brintwBGAv2+mGlCtgtFQeOzK0BM1/OiqEzRejOZtpMZepvgkscpMUnKb8YO84G7s3LsHnnDNonbQ==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.16.0.tgz", + "integrity": "sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg==", "dependencies": { - "@remix-run/router": "1.8.0", - "react-router": "6.15.0" + "@remix-run/router": "1.9.0", + "react-router": "6.16.0" }, "engines": { "node": ">=14.0.0" @@ -6477,9 +6488,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -6503,14 +6514,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -6604,9 +6615,9 @@ } }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6653,9 +6664,9 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.3.tgz", + "integrity": "sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -6692,13 +6703,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -6769,6 +6780,20 @@ "randombytes": "^2.1.0" } }, + "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", @@ -6897,9 +6922,9 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -6909,6 +6934,7 @@ "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -6916,14 +6942,14 @@ } }, "node_modules/string.prototype.trim": { - "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==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -6933,28 +6959,28 @@ } }, "node_modules/string.prototype.trimend": { - "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==", + "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7090,9 +7116,9 @@ } }, "node_modules/terser": { - "version": "5.19.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", - "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.20.0.tgz", + "integrity": "sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -7441,9 +7467,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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==", "dev": true, "funding": [ { From 8adb9ee633c5cca607892b9ab42b2685fa7fec73 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 11:45:35 -0400 Subject: [PATCH 255/305] Re-add tzdata to amd64 --- .goreleaser.yml | 6 ++-- Dockerfile | 1 + Dockerfile-arm | 18 +++++++++++ go.sum | 79 ------------------------------------------------- 4 files changed, 22 insertions(+), 82 deletions(-) create mode 100644 Dockerfile-arm diff --git a/.goreleaser.yml b/.goreleaser.yml index d3e71df2..062cce1f 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -164,14 +164,14 @@ dockers: - image_templates: - &arm64v8_image "binwiederhier/ntfy:{{ .Tag }}-arm64v8" use: buildx - dockerfile: Dockerfile + dockerfile: Dockerfile-arm goarch: arm64 build_flag_templates: - "--platform=linux/arm64/v8" - image_templates: - &armv7_image "binwiederhier/ntfy:{{ .Tag }}-armv7" use: buildx - dockerfile: Dockerfile + dockerfile: Dockerfile-arm goarch: arm goarm: 7 build_flag_templates: @@ -179,7 +179,7 @@ dockers: - image_templates: - &armv6_image "binwiederhier/ntfy:{{ .Tag }}-armv6" use: buildx - dockerfile: Dockerfile + dockerfile: Dockerfile-arm goarch: arm goarm: 6 build_flag_templates: diff --git a/Dockerfile b/Dockerfile index 7c2052ef..45dad05d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,7 @@ 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 new file mode 100644 index 00000000..755092fd --- /dev/null +++ b/Dockerfile-arm @@ -0,0 +1,18 @@ +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/go.sum b/go.sum index 046695e1..97512a78 100644 --- a/go.sum +++ b/go.sum @@ -1,23 +1,16 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -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 v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= 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.12.0 h1:aeEA/N7DW7+l2u5jtkO8I0qv0D95YwjggD8kUHrTHO4= -cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= cloud.google.com/go/firestore v1.13.0 h1:/3S4RssUV4GO/kvgJZB+tayjhOfyAHs+KcpJgRVu/Qk= cloud.google.com/go/firestore v1.13.0/go.mod h1:QojqqOh8IntInDUSTAh0c8ZsPYAr68Ma8c5DWOy8xb8= 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= cloud.google.com/go/storage v1.33.0 h1:PVrDOkIC8qQVa1P3SXGpQvfuJhN2LHOoyZvWs8D2X5M= cloud.google.com/go/storage v1.33.0/go.mod h1:Hhh/dogNRGca7IWv1RC2YqEn0c0G77ctA/OxflYkiD8= firebase.google.com/go/v4 v4.12.0 h1:I6dCkcWUMFNkFdWgzlf8SLWecQnKdFgJhMv5fT9l1qI= @@ -31,20 +24,13 @@ github.com/MicahParks/keyfunc v1.9.0 h1:lhKd5xrFHLNOWrDc4Tyb/Q1AJ4LCzQ48GVJyVIID github.com/MicahParks/keyfunc v1.9.0/go.mod h1:IdnCilugA0O/99dW+/MkvlyrsX8+L8+x95xuVNtM5jw= 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/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= @@ -59,12 +45,9 @@ 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.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= @@ -76,16 +59,13 @@ 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= @@ -101,24 +81,17 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.5 h1:8IYp3w9nysqv3JH+NJgXJzGbDHzLOTj43BmSkp+O7qg= -github.com/google/s2a-go v0.1.5/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= 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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -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/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/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/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= 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.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= @@ -139,11 +112,8 @@ github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUo 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/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -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= @@ -151,7 +121,6 @@ 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= @@ -166,14 +135,10 @@ 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.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/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -183,26 +148,17 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 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.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -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/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -215,31 +171,23 @@ 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.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.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.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/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= 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.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= @@ -253,55 +201,30 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 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-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/api v0.142.0 h1:mf+7EJ94fi5ZcnpPy+m0Yv2dkz8bKm+UL0snTCuwXlY= google.golang.org/api v0.142.0/go.mod h1:zJAN5o6HRqR7O+9qJUFOWrZkYE66RH+efPBdTLA4xBA= 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.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 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.4 h1:aAAPYixP9EfTJjNO6F46afaxp+jfzb0VgwVjMeLBtF4= -google.golang.org/appengine/v2 v2.0.4/go.mod h1:WoEXGoXNfa0mLvaH5sV3ZSGXwVmy8yf7Z1JKf3J3wLI= 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/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-20230815205213-6bfd019c3878 h1:Iveh6tGCJkHAjJgEqUQYGDGgbwmhjoAOz8kO/ajxefY= -google.golang.org/genproto v0.0.0-20230815205213-6bfd019c3878/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= -google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= -google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0= google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU= -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/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= -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/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 h1:N3bU/SQDCDyD6R528GJ/PwW9KjYcJA3dgyH+MovAkIM= google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA= 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.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/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -320,8 +243,6 @@ 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= From addb5efebb15d7f66c551a43a5b5c35d9600d9d0 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 11:48:26 -0400 Subject: [PATCH 256/305] Release notes --- docs/releases.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases.md b/docs/releases.md index 1e518c76..222433c3 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1288,6 +1288,7 @@ 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)) ### ntfy Android app v1.16.1 (UNRELEASED) From d9387dac994e9c68867337154f96e8c16d692022 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 17:59:23 -0400 Subject: [PATCH 257/305] Refine logic --- server/server_test.go | 21 ++++++++++++++++++++ server/util.go | 45 +++++++++++++++++++++---------------------- server/util_test.go | 15 ++++++++++++++- util/util_test.go | 9 --------- 4 files changed, 57 insertions(+), 33 deletions(-) diff --git a/server/server_test.go b/server/server_test.go index 647268fb..d78533e9 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -329,6 +329,27 @@ 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) diff --git a/server/util.go b/server/util.go index 9cbae2e4..09536765 100644 --- a/server/util.go +++ b/server/util.go @@ -8,11 +8,14 @@ import ( "mime" "net/http" "net/netip" - "strings" "regexp" + "strings" ) -var mimeDecoder mime.WordDecoder +var ( + mimeDecoder mime.WordDecoder + priorityHeaderIgnoreRegex = regexp.MustCompile(`^u=\d,\s*(i|\d)$|^u=\d$`) +) func readBoolParam(r *http.Request, defaultValue bool, names ...string) bool { value := strings.ToLower(readParam(r, names...)) @@ -51,9 +54,9 @@ func readParam(r *http.Request, names ...string) string { func readHeaderParam(r *http.Request, names ...string) string { for _, name := range names { - value := maybeDecodeHeader(r.Header.Get(name), name) + value := strings.TrimSpace(maybeDecodeHeader(name, r.Header.Get(name))) if value != "" { - return strings.TrimSpace(value) + return value } } return "" @@ -127,29 +130,25 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) { return t, nil } -func maybeDecodeHeader(header string, name string) string { - decoded, err := mimeDecoder.DecodeHeader(header) +// 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) if err != nil { - if name == "priority"{ - return cloudflarePriorityIgnore(header) - } - return header + return maybeIgnoreSpecialHeader(name, value) } - - if name == "priority"{ - return cloudflarePriorityIgnore(decoded) - } - return decoded + return maybeIgnoreSpecialHeader(name, decoded) } -// 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 the Priority header is set to "u=*, i" or "u=*" (by cloudflare), the header will be ignored. -// And continue searching for another header (x-priority, prio, p) or in the Query parameters. -func cloudflarePriorityIgnore(value string) string { - pattern := `^u=\d,\s(i|\d)$|^u=\d$` - regex := regexp.MustCompile(pattern) - if regex.MatchString(value) { +// 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 diff --git a/server/util_test.go b/server/util_test.go index 3d062b4d..6555a81b 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,3 +75,16 @@ 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/util/util_test.go b/util/util_test.go index 49a24126..f0f45c28 100644 --- a/util/util_test.go +++ b/util/util_test.go @@ -87,15 +87,6 @@ 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"} From bfc1fa51811812f627805552c50b5f29ce60559d Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 18:03:09 -0400 Subject: [PATCH 258/305] Changelog --- docs/releases.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/releases.md b/docs/releases.md index 222433c3..bc7ed406 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1289,6 +1289,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * 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), 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)) ### ntfy Android app v1.16.1 (UNRELEASED) From d556a675e9df3478de81c7195c7b19eec5e3f569 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 18:04:13 -0400 Subject: [PATCH 259/305] Changelog --- docs/releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/releases.md b/docs/releases.md index bc7ed406..4d125a97 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1289,7 +1289,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * 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), 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)) +* 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)) ### ntfy Android app v1.16.1 (UNRELEASED) From b5851dd6d44806690cb03a264fc7da1f15fd50a9 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 18:32:03 -0400 Subject: [PATCH 260/305] Links and blog posts --- docs/integrations.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/integrations.md b/docs/integrations.md index e689427e..cf3d7880 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -133,6 +133,12 @@ I've added a ⭐ to projects or posts that have a significant following, or had ## Blog + forum posts +- [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 +- [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 - [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 From 50bed826d0e6cc4c3e1fec641f1f2303cf430547 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 20:36:34 -0400 Subject: [PATCH 261/305] Links links links --- README.md | 5 ++++- docs/integrations.md | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f94594be..670ffd7c 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,10 @@ as well as an [open source iOS app](https://github.com/binwiederhier/ntfy-ios) a

## [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. ❤️ +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 $5/month**. +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/)** diff --git a/docs/integrations.md b/docs/integrations.md index cf3d7880..6da0f63f 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -129,17 +129,25 @@ I've added a ⭐ to projects or posts that have a significant following, or had - [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-filesharing](https://www.icloud.com/shortcuts/fe948d151b2e4ae08fb2f9d6b27d680b) - An iOS shortcut that let's you share files from your share feed to a topic of your choice. - +- [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 + ## 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 - [Basic website monitoring using cronjobs and ntfy.sh](https://burkhardt.dev/2023/website-monitoring-cron-ntfy/) - burkhardt.dev - 6/2023 From 19c30fc41157b6793e1199b5c97ff32962825f27 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sun, 24 Sep 2023 20:44:57 -0400 Subject: [PATCH 262/305] Add Alex's post in the install guide --- docs/install.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/install.md b/docs/install.md index bc5b7a0d..ed101554 100644 --- a/docs/install.md +++ b/docs/install.md @@ -20,8 +20,9 @@ To run the ntfy server, then just run `ntfy serve` (or `systemctl start ntfy` wh 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 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._ +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._ ## Linux binaries Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and From 66ef28c2e299b8736e2a749c512abdd2f9001be8 Mon Sep 17 00:00:00 2001 From: Nihal Gonsalves Date: Wed, 27 Sep 2023 23:16:05 +0200 Subject: [PATCH 263/305] fix(pwa): hide install prompt on macos 14 safari --- .../pwa-install-macos-safari-add-to-dock.png | Bin 0 -> 166445 bytes docs/subscribe/pwa.md | 7 +++++++ web/src/app/Notifier.js | 12 ++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 docs/static/img/pwa-install-macos-safari-add-to-dock.png 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 new file mode 100644 index 0000000000000000000000000000000000000000..8a780605f1db305cd95418bf502a82aeb7f10def GIT binary patch literal 166445 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�gx;->+Ue?7lO5@aQi(Di&1x@`k_=tK{%!$^q@% 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

$qO^-DjP;UvCXC_Nb@@*l$(vWkJ}+vz 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�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 B3(Noj literal 0 HcmV?d00001 diff --git a/docs/subscribe/pwa.md b/docs/subscribe/pwa.md index 582cb5ae..5dcaa257 100644 --- a/docs/subscribe/pwa.md +++ b/docs/subscribe/pwa.md @@ -26,6 +26,13 @@ app drawer:

XqL7`Bw)e_FE1T|+Y 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 D (theme.mode === "light" ? "#f1f1f1" : "#aeaeae")}; + blockquote, + pre { + border-radius: 3px; + background: ${(props) => (props.theme.palette.mode === "light" ? "#f5f5f5" : "#333")}; + } + + pre { + padding: 0.9rem; } ul, - ol { + ol, + blockquote { padding-inline: 1rem; } From 9f8c63c7d5e5f0bc737d80b295336534ca80afb8 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 8 Jul 2023 21:54:54 -0400 Subject: [PATCH 180/305] Docs etc --- docs/publish.md | 2 ++ web/src/components/Notifications.jsx | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index b20f66e6..b59d24ad 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -3597,6 +3597,7 @@ table in their canonical form. | `X-Actions` | `Actions`, `Action` | JSON array or short format of [user actions](#action-buttons) | | `X-Click` | `Click` | URL to open when [notification is clicked](#click-action) | | `X-Attach` | `Attach`, `a` | URL to send as an [attachment](#attachments), as an alternative to PUT/POST-ing an attachment | +| `X-Markdown` | `Markdown`, `md` | Enable [Markdown formatting](#markdown-formatting) in the notification body | | `X-Icon` | `Icon` | URL to use as notification [icon](#icons) | | `X-Filename` | `Filename`, `file`, `f` | Optional [attachment](#attachments) filename, as it appears in the client | | `X-Email` | `X-E-Mail`, `Email`, `E-Mail`, `mail`, `e` | E-mail address for [e-mail notifications](#e-mail-notifications) | @@ -3606,3 +3607,4 @@ table in their canonical form. | `X-UnifiedPush` | `UnifiedPush`, `up` | [UnifiedPush](#unifiedpush) publish option, only to be used by UnifiedPush apps | | `X-Poll-ID` | `Poll-ID` | Internal parameter, used for [iOS push notifications](config.md#ios-instant-notifications) | | `Authorization` | - | If supported by the server, you can [login to access](#authentication) protected topics | +| `Content-Type` | - | If set to `text/markdown`, [Markdown formatting](#markdown-formatting) is enabled | diff --git a/web/src/components/Notifications.jsx b/web/src/components/Notifications.jsx index e152cf20..d1cce0e8 100644 --- a/web/src/components/Notifications.jsx +++ b/web/src/components/Notifications.jsx @@ -15,8 +15,6 @@ import { IconButton, Box, Button, - useTheme, - ThemeProvider, } from "@mui/material"; import * as React from "react"; import { useEffect, useState } from "react"; From f2d3f0bdf91a7681dde1e8aa76a3361f857ec707 Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Sat, 8 Jul 2023 22:28:41 -0400 Subject: [PATCH 181/305] Remove underlines --- docs/publish.md | 22 +++++++++++----------- docs/static/img/web-markdown.png | Bin 285056 -> 254160 bytes 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/publish.md b/docs/publish.md index b59d24ad..13e1597c 100644 --- a/docs/publish.md +++ b/docs/publish.md @@ -627,9 +627,9 @@ them with a comma, e.g. `tag1,tag2,tag3`. _Supported on:_ :material-firefox: You can format messages using [Markdown](https://www.markdownguide.org/basic-syntax/) 🤩. That means you can use -**bold**, *italicized*, or _underlined text_, links, images, and more. Supported Markdown features (web app only for now): +**bold text**, *italicized text*, links, images, and more. Supported Markdown features (web app only for now): -- [Emphasis](https://www.markdownguide.org/basic-syntax/#emphasis) such as **bold** (`**bold**`), *italic* (`*italic*`), _underline_ (`_underline_`) +- [Emphasis](https://www.markdownguide.org/basic-syntax/#emphasis) such as **bold** (`**bold**`), *italics* (`*italics*`) - [Links](https://www.markdownguide.org/basic-syntax/#links) (`[some tool](https://ntfy.sh)`) - [Images](https://www.markdownguide.org/basic-syntax/#images) (`![some image](https://bing.com/logo.png)`) - [Code blocks](https://www.markdownguide.org/basic-syntax/#code-blocks) (` ```code blocks``` `) and [inline code](https://www.markdownguide.org/basic-syntax/#inline-code) (`` `inline code` ``) @@ -645,7 +645,7 @@ As of today, **Markdown is only supported in the web app.** Here's an example of === "Command line (curl)" ``` curl \ - -d "Look ma, **bold text**, *italics*, _underlined text_, ..." \ + -d "Look ma, **bold text**, *italics*, ..." \ -H "Markdown: yes" \ ntfy.sh/mytopic ``` @@ -655,7 +655,7 @@ As of today, **Markdown is only supported in the web app.** Here's an example of ntfy publish \ mytopic \ --markdown \ - "Look ma, **bold text**, *italics*, _underlined text_, ..." + "Look ma, **bold text**, *italics*, ..." ``` === "HTTP" @@ -664,14 +664,14 @@ As of today, **Markdown is only supported in the web app.** Here's an example of Host: ntfy.sh Markdown: yes - Look ma, **bold text**, *italics*, _underlined text_, ... + Look ma, **bold text**, *italics*, ... ``` === "JavaScript" ``` javascript fetch('https://ntfy.sh/mytopic', { method: 'POST', // PUT works too - body: 'Look ma, **bold text**, *italics*, _underlined text_, ...', + body: 'Look ma, **bold text**, *italics*, ...', headers: { 'Markdown': 'yes' } }) ``` @@ -679,11 +679,11 @@ As of today, **Markdown is only supported in the web app.** Here's an example of === "Go" ``` go http.Post("https://ntfy.sh/mytopic", "text/markdown", - strings.NewReader("Look ma, **bold text**, *italics*, _underlined text_, ...")) + strings.NewReader("Look ma, **bold text**, *italics*, ...")) // or req, _ := http.NewRequest("POST", "https://ntfy.sh/mytopic", - strings.NewReader("Look ma, **bold text**, *italics*, _underlined text_, ...")) + strings.NewReader("Look ma, **bold text**, *italics*, ...")) req.Header.Set("Markdown", "yes") http.DefaultClient.Do(req) ``` @@ -693,7 +693,7 @@ As of today, **Markdown is only supported in the web app.** Here's an example of $Request = @{ Method = "POST" URI = "https://ntfy.sh/mytopic" - Body = "Look ma, **bold text**, *italics*, _underlined text_, ..." + Body = "Look ma, **bold text**, *italics*, ..." Headers = @{ Markdown = "yes" } @@ -704,7 +704,7 @@ As of today, **Markdown is only supported in the web app.** Here's an example of === "Python" ``` python requests.post("https://ntfy.sh/mytopic", - data="Look ma, **bold text**, *italics*, _underlined text_, ..." + data="Look ma, **bold text**, *italics*, ..." headers={ "Markdown": "yes" })) ``` @@ -714,7 +714,7 @@ As of today, **Markdown is only supported in the web app.** Here's an example of 'http' => [ 'method' => 'POST', // PUT also works 'header' => 'Content-Type: text/markdown', // ! - 'content' => 'Look ma, **bold text**, *italics*, _underlined text_, ...' + 'content' => 'Look ma, **bold text**, *italics*, ...' ] ])); ``` diff --git a/docs/static/img/web-markdown.png b/docs/static/img/web-markdown.png index 4e914fe8720bf32299fe6ed8bbd49349c213c6fe..612f2cf39a0c6da83efef3be1e760601742c31f4 100644 GIT binary patch literal 254160 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�>okL{DfL0 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�(SJarEPVUdg0vdZRa*55pr3vgqD=|E_kcIs$S+5)|8pWr;p zb9U22*Q(z&bytV(Pr7a+cu}$C%++3|KEY(C8SS+FJMh9hOj(L=>crjcxSEi_YkS&F zYe=KXD|z^}4nbxG;bVK-&jU6%`uxR-6xscr%CpIF@by(8EcAC zKu2gle_j{FJ1(BbLcFGT|7KeJ8a-K9ah`LU(bN!@MZyl_bZM}Kttr6Q)?+xy5)m-< z5DQ~t^Dt}+kU(Zrqt&19AG-Lw_!ZBxB-`6e4TJ>q)!P$5)5q;;6aV#@E$L6nD7=oE z#1Rkv&sE^%L9`VB&^P%;E08^v7lGvU#v`~F3E^hRf-MMSzQOxyc?bwxFG;L|<-(PR zqZ=5b^(Gbm5W~ApdC&D0{7a`ekI8$|Rm7W$hxrxB@?7w?@A#4MirTFlUInHY^jkcS zFfHSGqI(u&F1MyZ-XT6H**O(lKwxy!c8_Q)D=C@_2)^qLhAjg&0CGmx%5W{H`Aj4B@-WJV_{R;nP)ABt)mGYm_ zy9SIK-_;nSHQtWoFQ5S|-#i<$0H$f^1hL5Eli`iCO=xIkMU+!?+#PME-2qLZM+ndu znbDJ`?Mdq(PNNDSw>&W;mtP+mN7Zhiq0L}1RCRE9|y*>Iz<9qVrtJG6r_%6v@ zeo>v0NF(^C=Ti(|;To^Bzmob08F?jbw7)7(Y)U=&E?qeQyMrL_D~#7MuG85yi~8hg z&aTj1R;{^hoB1mBR4`E>4{!3~P$n-EU{t85ffg)M-_@5OVoXMzNuMAW%KFvZQ50i@1XCiN_iR#$=J9fXS`{8(g}!iy+eh7$a(e(?fp z#RNBfsRsdVKwKp8nrH(AVtZp6V5Ylv2?}aXaP(%AEL42n2BhPN$iuX%lRUxoS=U|OX0WqVA}%8(4 zc!qq9UDX?I-V#o<#f`#OK*UmVo8%(=aVTD^b8)kBwC)WlaEQlrNiXGMkYCbn47-GSzy>@oC;bOUcNWU1HgHVwYkF?H1#5E&&*hK z7_{N(Em?5zI&Q9yEMe(*%Id|D_&8AgMNdBp{F#tFk-2EVaiXcF10 zVBv_Sce+t5({s=wbqqtiNrlHCqEI_Fx5y`rjIZZ9_LeSzGLe476(E=w^4&Z;xGRtV z*kGRId?s|^7A@JAz3AZaperM4JfF;kD5E)qw_EO4f#ORE6aQ1GROyZxw*zXU4|l`O zZ^obEc=A?oQ5dF=VTvTEbOGc-T#o3qa(UVSw)~W}hfAPI`Ek9TAQ-fDc|MM|Y;FNH zJc2tS?|W(}=>tj7fmDQ%X%x*%&Kfga=MLHtOKq+ysyns}5U|-0YR116j;Fk6xPLj5 zbJ=~SI3%_pUX?+COM#?Wa09edBWw(ho=!f$AJ!Z6hPT4`82DD|C0)i!BEQEdRY3>b zY$ZQ`3k-&n(eR-wOg~YDoN05y)*8k)N97oAJ>QB{tW4$NqP1)IJ6<6G zp-onPpdE++Kz68h-R$Q&X|6jrwApf-7S}FPW*UOtits-C*=>ZlGdw>I)@sQL;hBLJA8`Rlp=idE)4t^`*v>Mp=|bJ)1FQ3 z)EPA~O2X$HHD3}wGiVk-Zl}DbSDWITUE&-bAV7ZoH_-I&rKxAk8QvFA;m(02^wvy5 z^PYS?^s1kv10>;K)wf9gEPl!E!a{6;K1NKvlwFRqXbtClU zK7Y%fuSJfZ?dp2pM{5h?TF7!PlOuxTPB%#l=8W7r?Q`?O|{xL62Yz*z+H<7y`Iw z=4I2~?AgABDNEQr64DV2eU7F;FU~bX2RQxf&ETKX`91*oHUDLa;ta~LQ_`}}jbNdg z$x(I zdPZ^UOr~T}*LM4WPRrAzHu|crTkF>EZfdcaoi&$!N%%WaSO!{{4z(GuJYkqo~}U*fx3@4i3AGOk6?Dxzp&Vpx zKhM%QP!q!t|D92NOHNT??i+6Rku3Znn;HIx7$ZpXU8fEyp2(b4)I zQ4ztU#==#_;VjISEQMOK-cl_Z?xaGgWLjL-vwUHn)GgpU`- zT=U3ypVl*qXA+Z(60$J>H2B3}Bx6?~H-hO7>BX4s*ysiEBVFoOybzCj z?bsF?H1=bmnb=3?ZVA*rUSt?;*oyF+@-&3SXkUR9m_7?$0y-qx$Njoc9?&O42B*l6 zcdoNpGd?8Ip!1ia9~-ABPUy=%!DnfE8&%43g(F(nC$M-G?8kyhy|0%c z^-qgybCP%c88S-iwamJ3tDBNeX5j(pYV!E?g8hTkECd z-BXf=9ql>}4Be!u)oL+}Xdjx2szJTzcuXYzwe3fhGq&PK-jxB)d2*L($#%P*>Z!33 zHIFui+4lTeH=7qGx2>Qo5OJrB-&0<~FX-CDhWy&h08n>~FV~FleNTdeHA8Ry29NC= zUj|#?_q$r3+xC8Qe*X_(N0RYLJOOVsYzQw&kK#rZ{dsJP&k9`AIBZi1q0`DWF3T$| zS;R~M=;!0e?a!R63>qo7jYDMcD*2{N*r}MRVBG6iS33DK>PCc&ec2`R6;#K**L<-T zcIfN(#S=%qf2B!2=*Bg#;<5g6mSKEgsdr%^XKqdbzHoL{LSGKVYI~I7hMR|>6Nz{Yp3CrG z9_80*DxNQd59}JCR~;+*T^u=Tefr9%ai^LqLlV@eezn{jwo3y#uwj%zb;#x;bOUP7pJyPTGPi2fOj8*^U z1FsE!h|ngZJIitvd%4c`A2iu9D70OCxb61opIis2r54qHWni#C^uKKUB);lM2CRgGxx|X!N#f zh48Ng55Tp#kA^sw4vRHKrz5%oaUA0lmQL@_Ivzj<)s1Sr{?1sC;{g)xgZh>6CcG*gvoPL584A?Vd+UbA) zmu{~J45K#|9e-Xu{m30?GXCGuFi;?Y-9MsXX28I0?9Q!yJsru@=XH8{{>KnI#Lvz? z?9V6eK|vF?NuLA$l7;-Ykl_z~`m@=ePwYc@j#T*vx4+dLr&s*vrkdG7A&ya*us!{o zJrv*v<&KH}o?!5)2%`Vf{uTAh%4Yy}Ql-$+!4vG^zpv@!3)g>vkF4OIez_|V_>y-v zR|!s|1OA7XzXioz(Ay}#{UZ%oJW1o~X&<=tuaXStsil0OiBtIV3I8DQowU=K^wX(( z`t5%`PycpsCwIfY5S~5)Do*e>SQG}lPk->=&*UtA445oD3)9A@Z=2X}0nKxTf7L#C zLQ)6KQ_?Vq)`3QN{Gq1psodm$Zr=5GSTc+1X?(*cTxj?%{Lc;iHP(vIWLn(#`SA23 zgpjm`Z_*?0-*27?;)Y{g*F1e{_Ya{TNR8I~>+kf`g3CDgTk4R$44{L@_oDUh|E`}& zu^{L&0g#KUvr8%7PvD^sR;#BP7>*q+z8*ta>A-{_g%70G-HFSk4up8&fe=L$)&vf= zba8;W|FOv#1aTpu;B3>JSltT%do&0;;eQqZQ_ zw4l#P@%Ybz9Rw}V-|)KrdWCwS#nB+U=J$fRMc@yhdI1!j_zgHfNNy1t027E7)vv&I zp{WQkbZ?-40*`EpW)wAT3?8rF;ce*>7nOW?D4vxg1DsnPA%Uru>MJ)$K6{$1h@a(io}D#BL-oe=c)RPrN_+ z1HsKwOUT^A+5KJy$0hjp)BsE~uwb4wS9EO8mKl?V^6({&Ghh7c)8!*d-TzJVK1xrva8o(FD z>d~)FcroPKYOsp{zUIIhRE_@0q5+X3rvTMex%#FQ=K`?Jz65^l{n-|~gR>$u_Rzg| zgQ#qVcR?HEv^@*@5&tb zK}S_3z)7L^pYIM9;t9kRoq}xGp+@+j@E3HDi!l!ebRx_dZ;6STz(Q!VH_%cPlSF(4 z1h-cgWcDD2+_aW&*cO;0Cd3d{G1_SB4oG6E!RLJ-(vK;?I_OGkliX(mHlW%U;+V-a z`Ar2<)5~2MvjqkyT7QK6|#_$c;Rn>zLOwf4d!CTrR+bg~Y@Jyn^21Dwsl@r@} zfHe&EQP#o%Mel@$4MLQi;qoU==%!#NCcrhEVbfnY!+DJZua8PvLd zl$m}gC9eWB0+h8>7l8%$u)p`C+gk5T-^{A!!n?1&K_&iKHUDS5`yDbtxpVpo$~{@{ z3Aqfc2KyaLs0XU5(owj)spxG~(JQ?7ZK0P;BOSj$QJ^a^Mx}3Lwcc46ZOnnw9YKiV zH)vw{?)Rs~Wq(h(SC#I)m=PQV!1mXr&LD5pFSB9?w2+S=p+w{LkZQ%8pF5%9#iRB>@SY*xd+VH%P(%oU(G5R}{ z5nHUfX+TW_1v+*|$NH{Sl=B8guH4Z&WdrIwiC_$LlA`$Y&0r-5f!j(0$U&>A84={_I8IT;{&TY+2puyW7B^SeIyy zpoN&yPvL18SB=!=S(V)>MW%{P$12EP65^$|^GMuJ3)nbwncqls8m>r7!H!L+Ha21i z9_#Sn#~X|rPeC$MMRnN;_Y~|y0$?99w!gRhhg7`?h3H8Pr0XhS`6!+k<0k;McRitC zXHU^Q`Vm|98px<11+Dyu>uQGXB)vg=g@}bPYC*Q3KyKAR>j?q!@5SU|;-vNRr;U7gykW<{b+P6z`TRHAw#p^(I61w2Bc14x> z>PQMB$L8f(kM`kFNHOPqKDQ)%%gXH5kF~vT*N5rbd26w>o7#ZW%H{1Y-9AS%ubXMv^zyV0^Y+(%~-6|_8Kw_l=e~fcX!bx-fpPrm~8c)yb z$a${0V-jNjzvJ8o+`|v1qIs=P3A8T4H8GE7aYULs91uT119=KizP$V6`_Y}ptB-4G z?Lq&09bk&X|!3;3OW=8}E0Y#&H&0dT?iPBoc|xu_HDtES*MA0}%(Y;u@g135fYCh_$_K{tfdpO2a( zszE;{2gitlkdi^;uHIP}TPX^&_3+Rt9m?ilU!$;e2MW*aDNa z!1?=OvUV-l42OH)@7B^NxZjv+PUvq16f4C@mTX}ZRj@TLVMbCLz%#dHzb@?j1QDV% z4Sr-aspXT2G4)<7T7q#!ah@zuQOn2ReGi|T8iE)ICD%MdTo}SZZ4yMp@H}_}JVV;g zpdXen@$hW{#pW~GD}L*j7xaTMT)RM%C&_VXMK%?TCp8v#C0Zy61;evW6n zz1j*Of|}LKzI~7J#k(Ccw+xYG3m&>qALy(-Xo>9|dNgMXG>fvyuG6A8@V8Od)pRpb z7FlX{n|N=s?+}%tw%;xL{w}4Zg`v75NVf!aTEohN^~fC?Upc)WpD~8S@)GPP?ZmF) z?&rrJwY?JWafy%L29_4S2yh7vpcbG~m@|7>S_8I0Ve);%RNH>q)x zS}-*CF|Nq#*rMz>dq1M# zlu2y6y`_$lY;=fX?JSAlHwDGijP3RP^E+dpq)K%s+MlHt17YLm)Y?&QeTjD>hikcr zu!N$O`et94(d<*0J+4{cU)m#TzWd zBRj1Mc&NtV-G;-g5i%Fh>I3%7c2tLQo`P0)^?tLS*s8 z+uqxPwJVf~3Gmk@D?sU}z^je!Tklh4@`g$4v$%p%SWSOW5_*X^!b_gI;x*vCLw{>| zyMimVD>JFUtE-vcW>UHlKpT+j05qMr5*^CF>=W-EX%#8Sk+14pQnrh(ho%lbPXUJdOTJ79$>L zchw3L?HjP}uhpZx3kh|za>W<=-K&&LvMATH3-j)^zKtSM(0VnF_Z+d#oHq{or9zq| zV0F}$NpuSMm<0cUKlE85V30L{Z`@1mW=2?%XT2j2NA3;j5LO1bnT^{v^H-gXLkg+jFHicK zD?`F#Lbn41=yT*Rrblf4_;fDGDY5uM9ht-S@&x4)KOoI^EG<;c?c7)iQxY&1;i#Ptd{D3S+Vu?J)!e zY2rCv^GZH)dH9|<0owfK`@Vup(Y<)tc40%juu0TeUC_Dbq7D0I%0T9X@ zQ%Gbdjv{+2M2)Y@ej&p@mt`V&>wMvZ&oetD(WZUKppxU*oxRNTPKiL0uqfW~Ba7y2 zeBaIchx6%a3pYju<~{x(#;iSd;9ybxw@XBN1U{=%`p|xs52`f}05CI&(mWiS&b3^G z{HCg~XSWw`KSwRlr)ns$G_vw;@Yn0UPoW*}3ds%0$2*VAlNadJCOXEFRx|5?&TO4q1dz=qTnWH6eyl+J z0IYxBo3e@PUy&wVP1qXESt5as^Eo$CI~ACYffSDb;luL!z6CJEE(*hWv>wb?hR)BG zKqMOfL^aZiKT}lb&R67}ta_xg(wBY#)1w7w(L?xt&%1z-piHb}j37W@nmvF&h(sQ5 ze%iA_jmGqF^7s|;WJ*O}BLY2+oPC3jM zn2KEd*o-e+fNTtVHu0+g`{gX`ne{!wj))2-<957ADrRPjseQbqhO#J<7}x@dHuY1g zbJT+!2_%xc!nJ$q`LaXuX@}!%Fja0wss=`366!R~-+X~eEWru%KL|s|Hx@P~6>Rz8 z<@Y#q>FpD|IAb)F%5)363uib+(!{XzN7Liu7nHnGX!j1n2nO^+KBQ^=ZMF`aZ;Hm^ z2(lc0CG_ zAXBCNEiP7KLMg$jKE>R^*aVTr4I;5HSA6vmU%^aid;i>>Da~@=9mspskkYV?W_fpo zKfu#-_{I%pA@S%O0m0s@kzm%=P5q=%-x&(4p|c(oP#b9-gjN>5605hbU^m!amr z=AkL@@k&&go+SK>b^u`^&n2LZ2Q}7~@cNSrWy467v7SXL8T>6I z;!lX%P5>MG5THocuyF|Q+dZiatq{F+aUE~oxP7e)JFr|K*$)h<*;e!fIAffvZz1D6 zXRqhfcf0**w-Mr%$$MQVfqem=mlLufZQH(5y_8GQdc9eaCsSf;4^fvOACoYe@U7lM zZ)i^^hQBuTH{DelYYgfpjQkzpyAL_9FbIPPU+H*~RvZg?O|%Di)Er1LLSk*Wat9Y> z6A4A1>X(?f?IRLRkF%<+y=GMHF{?o1{G2yzs96qIhEx9-E0(eYa&8d2K1o(cZ+z7p zfx8fJ=aL6urQTDb`b4%hfdNy6C(6wo_Snq8DyUbI*Xm}A6%WniEd{)xQL#Wf<5wkX zTQHqx)qdekW{)Pl1=Y4NN`r><@>>??F_Bv{;ZPH@%fzoDNnNco1U17aRqE6PNE zN7C;feZEqkzB6*#fu!FiO23p!g>fs87*nN*BG?*jD|b;u^1QL0_|fAIYWju*^t0L1 z&<#lO!`S5L8VJgDY+LQ$-2z}z5;~gRooUIXz$9uadV)L|OA>?p`Zk|QhjsH|EX?OV zYVVO+m*@Pb^h`7y~2BA}q?+88oG(+YHvp)@2upjT9LkEsA8L*ifuf8z^$) z@t!_?CrHvpYc%WZP!F`V*FVQU>Y3roqnp@T6>VsS>|Rx9eB7o<>R|g${4@LFv54O` zK0>A+wE8ES<|TbPe1#aCsdoIjHqUtT7Gox|yLR|qzqVDfwjn!KQjGHm+KQtLJCKzp z(w+Z}@CR%=XqUrm&K-22^|B}iW`ong<$h&^F_C2XheSOrzB~7D4rOz;dd10=P(C>I z(Y9B&#a6$ZBZYNyBZnFF-;(qr^lbrJ4=l~{YD@|LW({ z6wOM=9GGn49^W;-MyVH#IoxeeD`z2y3~F9Bm!oTtffa4Jea{&|(no~bCEd26wBus0 zJ5GO!Es|Fq4ubjb?h1+?QzBsVelapO(-BMzb3SKEXR`2IQJu(qEyb#J(?U-&Sew+B ziE2lVe$@^m9D8!igh*6Qx``yIfYo`9I(P%@YYP_jyIwi~g{WofrgVENoCv1U!Q1(g zS40y-U@iWP^a}`d?!NgOtypj50*-a=qtmiX8i#)898lxTgWFkbMJ$X#pixHxy6M?2 zKMjJ&tx+jce1fD55rab-f~u*lz~*ffdYC7+^GHe6SRCrei6^TsJBv%|gO#0=bm8)O zBF%oOPd}j`E_MEgIZ;{lOa|SyE~(375X6ybQUIZrU&#kA0Z1Gy1KqOZPPYgmcoo`g zdQ-1b)9kp|e$r4UF;VT?sna&X7x+gHK0ZyNW}=^Al029IA}M!rPh)dcPiX8c(HIj$OI$1? zYQmG_5j|uq zSUOS*@~Xk6YfQCgk#f(81{`QQxcpk;t3C$-${1G|;LS&e+T%xj#d5?wn@xQvBfb8( z)OQ+lutAp)JDr|%fqbNR46xi`lQ1q7=c|IF4n%f6Z^=OX^?|81nd0*py|+)VXOAeq zeP*r*bd-E7YJiS`t~=x#%~`ea#HZOD4M!thlI`s)_S>4<_>!C0Y^Nk>hi@LPIwoDIo_0_`R6v%%VGHJBtBQUb< znp2s^udyNz#~Uu0<{xO=3AX0+ZR+yXg%$sNOA(9=di2Q4=@;@%S7RzJ6N>C$QdIBP z!oP^}cXvU#tuOGLO2i89uSRHXP{baWpVFIhIJ9gVAh{J4SHE%G{1#)C5BxZ7pJh++ z0t+2;Ep&w{b&?_J?a4bVDa>2aaez#d*36`x6@=hGK3qnaies5ZgD~aXc=R5Aj{rRo zs96=|C?+)^v0+|~w)g%S8?_0cg2e}RE%p#<0v$dp&bxUs)8oiS*`POLCH_#UMzNB- zWz=ZHwgSX;ES74BQDxZnNgH->zvYKhHBmZgp_roFX%&@~wkWo+uJ9=8g7iXM5F;?c z(F!u^Qtox`X{@iMu>X8_f0XzA2h(NPZ0ntu(KIJP>)f*jnm_=eK&;vuG+4q==AM zqAoUCmV)AIx&rPf?Mdj>;01W&?S0waPfUL437jHJOno$)SeX+V(`Y&y@$G<2zLeQ@ zi?lSRT=-nFf7SW@kB<{3z1|b(ge%>GASP)Y6JD%fC*EZ!uivq=d#R^00wo(&gOo2) zuR;`1+J2^~Z28vWErg{zcN*uAxTl=kvjaIJZ80S^Ry9CYPd|!yuLiRIt%)~06~FoI z`V?)oo8=rr&TM%9RodFwcM9(vZ$0Nxz>VBu*F6Qi43M=#k-uoE2L;dI)VNIAzHI%^ zXlJ(=va)Xt1gZgCcRg@8dGi+I!0cC(5m|lXB>{v#HNWmMr}!U=F*M;YtQB0U_0C7n zs3|F@Ig7%v@RXbPL2nI>0)j0Ox~g0ZVjh~L0DkYq`lFQ>bZgkt2*FLiJEL}te&ww+ zxY>)JTTT<|$cxBr+G>?+Mj0PJ{HmhdT(@m z*(DdR^x~exaIUbl2MEAT%K{g!eKn?4PK|uy5UaXKf+#H~0M#_TJqu+2HHoJv--UO@ zlSRA_KzMV{lWVskIX(;>%D1ZBrm{AIbL?ZVmDy;uL zs2*|&o#D7WW(%)#Sa8P72-csoPP)h@szR+KA));IGC}_8Rbc|i$1d6-q}`>jzn$aS zTG8U9ReC!bk7yi(r>qHHiSV;LsY|%sn_d#-33*sUn34DLc+S9=fw+ew7;C^uR0@#R zN=|lIzF2{#QohEU^I2`aAZj5Z=sGwe*(KC*vDg-EK*Fy=Rn3*AAeo8@wCqG+NNhwY z*&W+av-&KPSw>NXEBN~%KFJ*to>k8a6zZwyEG0W1E}Av!TGBigS!b(@)D0NTRvvDN z77DMUAmER+?Fm4+R=i{tjC#YkdYl0kiMk=lJp<`$;oqQ2fSboDuQz@t-UM_s+qFnw zGD0<8zY0`aQIVWdxj3rSe!8@wjG&B$n9&R;T6H}|q5j|$OCxtrj5+Xqh~xM5HCXNa z@u{ooH@)J68Ul7Ddp{XE4=aom+{<$lM#2e>CT%#-;8Mugi4pQf`M!hYRo+892)QrJ z5Vn2+vUMi$@sZok0Q6iBf;R0;jV2YloAJVO^& z-tLUNqz7676@F z^^Zd)H+Fhe@SN84&N;}D-G#qQ#|U5q@lnC@RZ2{K4U8R~<8U$Z*UcoT#6G_BBJ2vZ zvUX@AN?-BM<3SFpr;>y%(cXNkDwQ9Q0-9to#R|=L5o$6Wj6WWL%{_3B2aV?B+^`4u zZKc{W5V?1_B6-bcj2u-4n?%#|HC=)p|%SMrQxwrm-rE;2wv-ZJOIw)U0e6 z*z;e)LmrQ097nHsoUUkMN(KWitMeQ;*V|V%HIY}`jN;gJpBWC%f`mb!KS@Zf{=&j> zH0d`Q)ZmJ5M7mF}<;oa1FYX#779I|N+vPtJxA1AFGZW~dP7Rq&X_Dh@ka-{b#MH?# zE%^kj71#UY=LK}!rUZ11gIxAzBcw34F&4g@4t05OvHI<-rfA~xx5#-o-+xsVvdD*0 z)g^fDCMk|`4k>>na4kldZmFhoKmE|NlO6pu*2?Eo*9ROA#ZA@gQfus4nZf$bm6!ZI zCMc%$@#DQeeAiv*N05OcUnm{a@+^+n(g5eNb|8!^l{>5at{#BTqEhMb$Tc9>W}*D2 z@BQ!R5;TPqeD--S((uh`DcI^=b|4ILV*ct`Pb8j=0R>70ztz4=YF zh+tE`L}I99#~pNl8Q)I+*4S}E@>=7BzLQ}$v9H3DUyJY`pFBSa3sXNvD#!BLt**p4X)WL#e}ZpvQ)c zTQ*dkKxZ+Va+9P|zabPCaBDCwmNAsIL?z9U%*cD&;d$ z%f3f3#W0G^7flKtp8PtAStv^)k67uL5boD`2n^k>9axmeUeE}R7OuqN^tKO-`FcHX zG>tE*n*&hsnhWwIqtn%us1r+dQ%R`SB1(QP81H*y@X{v`3$}a6&7x+~>n0}se?%k5 z+uVQY=Bf)*dR`UyVMPCA$1)`eyKmJt^}>p6uF+*|!q? z{MAD@4l;*7T3i+2X1(=_U3ozmc?8&`K9>v-+MFyyGTpkR6Islpyo-sV~0dr zz1n9a-*~IpAd+?So0@@8vgdz{H6#i3YZAK5OEBo#A2uEh^^JU`6~A#Xb@c82@Mp;@u6> z!gg#(z|km*p-!*R<&=+XA>!$kUB{aneIWfJu!lVyS1N30D2&_05zKx|=Zn!{xtCR& z9_&(pYusChiF%nayI%@;_nJ@xO^uhU$%)%1u*patxKEQ<4IK58L zpv`dGk%GO&>U&H1a=>m|wDafI4`OWwXY={yAC7gV(@Oyt$rfA2q{GrIKb2sU^`r~YR zA&@bbusT!OyUJ+nHocq$tnrKE66SX^fKI>!mWzYQ`DKUByPEx?cXoMFvg3&A?%g)v zmztkGr0(0xJ`J&YN6UkoC!wjIdJ~5#+UYA7SSc*5id^}+ihx3w3N7PT_Sc7phi+oU zjcKtfI`w#wOV^AORJYS|wyMkxpyWG(DJu?hO(GTXbVyrlt-ffjcB(wug!+5G1uD~Q zI;nXJyvWZa`(zr;y9=Uz&8&5hnE*dM5soILa5!86_r6tC>+R9z)NiD|3CSWs7+n2~ zfju?>oTi#`ayLHr#10f9sQ`=Mr=-U0!lN<^n5I!+PiS9gUv|-8jL-%_ghTns*e*od&Qq0maqt7x?1o5Y($45~z`Ck6O+)TVPtZtvD)^X^gK zrMG>yO$TE*z50;y!DH?!ttG`AG*HddcNo%5DH(20Pg1q$y;kdrJlk?Bl&*vV@0@^tRT{unH2CNT|k8#uZu$If^ zXmKV(BuD17&pr#9hg$hJTc{wvuVD4aU<+AOSU3NnorBW$ftrRprNvqFgGT_}U5!&G z@1GVh|9qf7G3#X%s>m?@$>-2w_k_xwef?>_wBhP=@(ogIimEeb^3E8hkvE;~g31O{ z5SpUP&#h1)lZC2AJN&)GqQS!$7df#eB3d(Sbea;D<^cSc1R%Y;L7E<|gXZv#xRzv- zxCTP)A(liUcUi$+zoxI_ZTx;y%BFwWKvtlN$Pw|YnYsOlDlrJY2kjICr8%KH0LcyRkwLRb~kSBToM2-fez zIS`?e_v5-@Mt+X!S8M@k{mNh~84`moy=y*b!pSr6aY-eU=plNF$7YRjZ;riOX8@z_ zfIdpgjzx^y^0EGM$YOi#v`gJuWPodQfiLRyU>T>F>DGyR9p-!kpLm%fOb^h5o0)L5 z+xp9Lj$*%W&yWij`%YLjEr<>Pg*^B(*Mi`BkP;oGcV1%Kp5&<$3^LX{xYPnz$6Jqa z7>PwCgGoVRGu#^8ntn$x1|~h^^;r*B5Nb+|Zr@2_9rVeyXvW%Zy*3VW9pO(hWn&9m zcrbHid@^`otyGgwpIm&{f__GNd5-6zVxb6z{)T?wAxT4tVep(~%f0A_`KwFng|=n3y|%0aaGnyIQzKvVYNlk!fz?9;>V zmL43rc;9PE`c)X+He4qp{7-)+yu7xayyWbBO=;bBH={vz6@=5Y!I6(5?9TR&-&OOg zMgW|ol;Q%AN7Ky-Eh6ck?|lOA=d~sJvIM^jn4i5#B*N7LILwfh+3D~O!T!DmC6a9* zfQ$~n6Y8UTzj-9V6bN()cCx#V4MH~Ef(_nwivg+CEjjwUzo6Hp0U}WC(bR?h9W=8E z-9iRK%{@Gd7SYN^gb>4fXgdJ4M10g zl5h?Hw+aU^w`;6`_o^?Xed}@?%KvEt@84kZcK6WcW$2rWgb0w~T{+-&)jIW2!_27ZWCLl@g4e$f<1 z0GV#%SzJ_dk-NNXp+CRK3)mGl3&p;7E|KZUsNk(=U&8MFfp`C-Ko{8gWXO*J?;0oH zWrr3G1^D-t0#3ur5B~lQAq0KUBicWeUz}sWfd!hU!oTaJ{PWg}0Y?t`tJH^>_Fddj z4dvPfRCWY0?@=UN=sv(K&fcF09 z-M>oK%?s+MUpeN|h{S6P=!iPQ9=wdYpj-d5d`F;uY$iCr;9WY-vVfmhH|LXJ{;xW= zgP0=gW)CDTvq}=6%H4-n6;v+x7XSDnVHl|4W@f;nBfNfA$89KKCoe4ha4@Wk^YBOp$&v^Z$R?K#-&boEX$|-dN{sB zPlAjFDx@AW3dwu>0VO56d%y}|YWJrUCWOaia~?1+Yx}gqz}11kNRNq=oN+m$T~zRe zFNYBRAH($=y#5)*jaq1AeTuy@y#Xz2Me2ItB6UavYSJ#RA=q5J!?5wzAVjL57p5kz z1zQ}pSwP~DBCCEMrECzh3GyWkc82lRqDlZ+EwQtbo{+=7oX#sRqkuHWKp%TSkpNHl z)v8{dpm&abG1qOq>>Bi7kzu~_%WqQX2I3hAPx+BKjjF!^EtV6?px zkW;E>u3Wu!{_c(%aA>ZBj&+z+LU}+_SiiLn(k6kVQ3=lu6l;&<4;IA)Rbq2-92CBP z!dbo_s}IJ&vtbR1{~ZHg7r|sq?mn+^$%*o!0y_Zm+uTxM!8wW*%F?;}W|Q8)eHQoy zevTZ1n7#Ob>hhHsdbqV#^(drCbf1Zjs0>nbW9@m2)A#HrDsrY?FDje}Ko{x5xUBOo zcNZ6v4_KGL=ggLQ7ohPsUs=I;!@QQ50TuvviDa^ZVj`M;EDdl-&@F_p$S1ROg2oQw zilljOWfWhOPYW~9E8gr~y{y2C(PBpkbud$`pi54akUN-N;6qM;qp|3Q00pOZuaI*X zNFH?i3-mg8ZDDvoV($>ArrP7stT7W;0@eOmi>X=bov548TE-}1#Pc0=xLb(;$p3Y? z16t497v@kw(v9GejqO?S&*yOzna9=QqWT2RAS8vbCJ3=^?xshl-g~Ng>^Bkx#Mi!T zf&{ptLZaxaZL9XcX4t6*gv$r=T>7f<+YQCvz@m*`eohOJnJ3*ZH+GYN9~y%sXWt8L zP&Nvy4)njxK&Oz}lIEY@OBE1xi~#ap5=z1z1SfTf;6W%-4}!Z4l%s&MGI0a)6ggNB zJSQ@C10(2+KMJhT`W0iG$^97~GT=mLSun4YmZ?WD@WrXt#jn&bI8e z_kLdjLQL5PZhTAlahp34 zw27B}G6m2^+61!>AGvUqy8b))Ixq$V=z|^mf@PI|&g^6^Py8Yt@46 z%uNP4-l(pIFy0qEQRG0?Zxb*&1V;ffZz`v3JX0NQ>kPt|1F3wn>&1pl4{vA&zG8O| zg_kVt1Fb&Ej+6wCu0uhXp1_Wnb8w3zXg7)^%U-}ZjgA;0*%r*MM?KMkJKD5y# zX%7sYF+h8bz~~czTtoALkm2LJ+2PK*s4%x#YREkWEnrmN;R62qpz3HjOW%J+px;#h zXusD1=z_F_9A}zJ(}w56CuDpMX3w5%m~eEjRWudcr0bT2n@R$e5S zIP7#Z!C`x%x|$*RR!9$$GYL}eE4{k|@v^u8rEXZD_HVnAMLJNSr@h1d^1r9KZit3e zS#_1E2Jz^n5VHZ5&h*`&#S*Y<_XRU0qs!B2`_~KXr9c4a7jXKc-ez3`2OdB{wAKM9 zBkZ5l7Qo?IeF_};GoAUNUGG$3JM#@l_C+$RnR&co5F+34vmBlQVgs)kkSTBrAx{JX za&{-3Nnpe$o$Y39f-xo*z6m7vf)_vl5himWL39tWudcx?Z1MF$T0RFPgH8$kqG4KI z&2TypZlP}g{&%$@8ktT((_?`L-#KmSk8$%%eo(^lAXl`xcZwKEN4*)hNr3T*=Y#}a z{RnQJBFv^Blc-U0;@tN9bYH9qPW%>d9n35$f1al-=pmf*XrRSp(YG&=rBk1iTC*gAwrcZz|S z9FXORSBG9GwCVC&5toOH|53{)p|(iy+xD_dvzLuR5Uj&@^wuDc?v_VnSv=i}WsIlZDgwYnN zW<@+y3uqj{-y+0__h${HSHCapcs~E2_H`xn*8UK6vymo+K{TKgWiQ}h5NOm9wI@C9 zx6}497fy^ww0DW&{`$dd)W)NJNuu{~IV&$znF5H{X#+S=2MbR7%gNx);HjbKUq%Wt z+g$2U>3V4e^A+|1_*E{BCcLelAMQ0`xe1713 zBpqw@W}60mK>G(m%JOSi^5sF{a^Ld+8WjE0{g*I>Mrcr!Z{4dvJn{j9Vhyx9L~>!u zabCxB-fpE6%j^azvxzRNY+n|XsTq9RK(YkXebv}}7wxHQ|Cm|JhioDDKr6>O4r z9#up83~fhXx8;MUsK!LTi|v+?Y!b>iUgl57|S17IcCxt-)+rWh`_R)S%kMkbcFVLd?Bq()%}(Dp{pJDI8Y%y2 zLr_aG@^=7^fiQ*Cl=g_KZCW{~V4hW@b!`w*A`}3`+6K8_&g#&XgSVPN)H!;)u(X9m z62%bFqAoQI5aXaw>EYBcaoZ}XiRSbu5K_FG2)vG8M&%5Jls%yO&Q?_o_{iG_)qR5U zyT_v>WGQ7m#FJvA){o7<&jhj5I0@13Dzpo?*bDc}I7>#u!Q@nIVULdtGw`a> zmBiJ*pA`5ZB?4sP9)^qA^~e`&GHQ#9;gLf7w~XXFbP`lxFA7qV+f-V7JeyFG;%l18 z?s(>c5vVe#*-#H0Ffg9Tzf%%Vmq%^$DG(KEfPAnQV~8Ix9PEJZe;rnK*s$r=*iMv1 zN2<_h^h)Fy|-vWiU-fDqhrOf?Vc2!8Ek>e*)QwyX5CW-dz1iUiEhR);jROy$Jn z3(>8L?vHbCH8>i7 zQB?Wia`|pA!Mjo1FO-iIioyZ!)`kRL%ngKdkm|H_v(MxDopSvBx(9t)n%abU74N)% z>nZwFKG6Zuy-2N!d@UfnSI3rDig@m9TdRLtAW- zk=5si{+pztG*bO0%AH`vDShN>i(Y5Lfhv4K!@OJtyQRR$KK@*illA-bmD~j?s&Et$;L<%Sz+tE`krcRAA@|nAv6B z^J1p%&W!GRBHhVP2MHwRgVuQP0g7HVb`R1Bcf$b2U-UHxuIfhl+3}_7uh@Le{y7XoM5(rldastOs3<$u*AUr13V1;NO z{1g%5&oY_gxqp7Iyf-)HPk{jh0+VzP&j8KN58PVh5Q#Mki3`^OTRGX0fwm}ywhFKu zUO!^+GZeV($jAkDp*M}u^&8+bVS)l0uUuG4dS!Fen6bF3#_X$9+Xnyeqr7;3UI>$o z{1-P&E$Dph1seq#61-tTcy+`G)WX!IK*S5_@lVnBc_~#8y&s}FUVH19njG({O}$Em zP-Y5IJq|_}1PG*5!A=uF*sbQeb(`gVq&bMcI0Y#-Mu`?D*tFf1V-pwrN!&)-kVe!s zuP49zF;cNw3dr-cKx^3)Fk}RCeyl;lqyre1KP=^xEb3~Y?aCT%%KOs3LP&YQ`qbw6 z3B=W`0n6sV_GZxELj*TLLw-u-9ylwZ$k6ny#;_BASeYx>#Ba|1CZT`u>!b( z26Z2j=c$aQEYPmT`usu7R!BbZa$m^ks|ia7)guWJyRF@)RUV>gCITgy{3c>k#5xC@ z)MGyq3&KfdbrDS$AefABo)1YbO9Ce_U)hs$+QhbiOv3Rpz|(Czr!d;G#MA%2feIUR z1cw~_JONhaEd5qGn#lw=aQwR2(Zck%)7>p7Qk9$XXU+UI_6OeoixW5;R5rp*aln%8 z%3=m0BU9gyDS|6ev=jR0pBew4(^&!&EIAYyqK(#i^>SbiP_N%$GfOCASlW|-=jC+22yMnZ?JmyYY6z!{7cKmbHol>7OZiy%}B?cUsY2RMFe-m);j`GBUGR}z4;RAC145S zhEQs3nuv}*`|PeDhM`+-KCBBk#F&ce_VUVw6~~$MjHhIKkzQ}6oSqNhe7)NO!Y;~j zYHtX#`wH_*_aN>n)*f5G9Ic)+zi!UoC7i& zGONt##>MI)%B|;s!WN=G%a`~AIz80^$WG_{6>kD#>||v_nC8xxzQQ+Dbv))iR3B#K z6Je7xotS4>P4TR|k{()PbJHKt*Bb$lg0}-4f)9;7{ucS|<^ZdUYx>=s-(H$efY?9C zzIc$RK0>wQgH{)y9!ZKtitWq>qsBhLSGVh-&&NiHg&RNzyx}cKk%i69W;Fct5F8iq zz&7~{J;QV(WHZ?eH=Y2SwR{LVAsbqnEJ;5Pom{HGfGoI)5)+W*gk1}cpjX3js7`^{ zWPnBrw9(WJSbU+i+!)&f`SFbUPM$%yB)^!Z5xlNd@Z%q8X(Lc%;Fz8VkJ?iAl<%Z@ zp3G2ql|*h8H)0)u)nH7C1y%*39rNJ7dIc^zF7ocLIm01qJ13^chtNjr9uQ)&b~il2 zp2}U~vr6}j2iwbEA}vd*r*iVj#*R+l28pd70ad{5QCG=n$~SHEtgQBw3G&#fS!KcD3}%5ZtehR8fUWEVH4z70m=H)znVWj3?&StjBXg3wnqE` zsbje4&!Bg3z1oIyRyseV@zP!}*GXhpwRtn|eZy#wg?+lK*ps;|fieOe$aZU(G}6k| zrAC?487&m$6}GDZayxB+ZG0)@rj$-yB4%F^-`ul7r~VyUHD_w*s6Bn!QZevlPP=i7 z%kb8{$3%TJS$QC{55zC-FWr|+)VPv!v^VRPIGVWEk5%qbUI#Shot*D9(j2uD)m7lm#^F{aqE2S|18 z#K6RcuMt=7CWCI4{@uhU^medm$h`2X#+r|krhT8hZo?H?OWcrFtZb=MFi-jX5)B7d z$c;1>e~)bcwls&N9e!<-x&@(qU`9?3uzqHZzM{iEeRnDb72d8=PI1)jf1S=O-``$? zNMfs7pMS6rZcGv{FzpXPoxfJp_J(<`5!T(er;dD}UF5G)7Ov%!!H$EF4i>a>QOg*A zJ3f0di(yCt2?nAH)=XO58TOz3<2IheOVKYu3K4--0j)mYAa_`?X<0U@b&exS_bpwD zW2Gvo*sX6jPTnbM+(qXR)Is9Z{ae>g1LpJ2xZ19FFF*GayOMGx4k(UK|F!_T+~!^e z3NGWxdQd$1o~G^Pe3dK=j%|2#_ZcsL=#K^Bk7EE62)bKbef#wC%HmD%m4qIQ_rm`h zAOGVEw-za&Q}oaN{tH9*Za8#`u0hTD^OlQ1^kp%-q3mE~_P2Yv7rXH!Xuh;vQFZ*U za%s7NVv$qyR;OQXjUGYbQ#59Ymr0Xdn<^v{F89kl-m+8X4A0clol0p^w z6aW2%LK3AHEhuN)mF+)N0ROh32PySHP(ObS>=Qz^^3=`!@t3dm=PO)(`L78q=ri88 zU^*1z3iADLDYZW)%-?mnOAKC3!&GMFGHvjWDz<}Cqt7j=+As4MLLuNG=)Ql=qF?r- zixLK-fv?DXTNSzd{L?G&6+GPUkN&HBy%Aag^`mO2FMioMnmE93Y>i&g(D<+KEb@W+ zaUYmfxDeXwzOa$M_n$WM-3d^aEE>Ca3DIDIx}<)Qs`2GhFAIEG)mktp9~8D(U3}Rk z*T5dtA}s3j|1^r%x$cI**AMi2oWbXvN^y*iNf=8Qiy3oY5il&vcw`UHGc>4nQaje6-thVu1Aox>i>SA^ese`NQpZ2dE$S+pE3em=UB4n#=m&@6MCWK_&5F`e<|>v zMW=iz)P{rt(k9}*7uThwLFth0NL2sV{bpAY<_4LwMSj1S*G*hX>CUfl!V&-aszS+1 zH$d@MM%o*xe$|(B6)0ZN!0D{Xzu!-}1B%0OPTnJYQT)N%LdhMfSN~ayziNwK4V0!1 zK5uqW+BcZsZ?{Qn`irLd>zhKY^9C7Qhb3F1TwMPk2AYn4Js$7he_uTJikD4m^}ZU< z@B2lbzZCk?GR96EeA)K@`v4I&a6Mo`DE4<(5PEuxQkwaxW1Q(lZT;;jUXoa#@_Z_V zNG>Xa@-8Uehv-4nzukEG=aU#vo;Lc=mpuzj1w1d=_cO)i4S(xGEzF?p$GjCUYv&ti zTOv1GBjSIr9$X3VcpYceFZ91FKQIG4ZmTL!4e#IY*Mq8Oew;+b@1imNhWst_e>!~1q}su?uT(;qVz3Y!jit-IqJ4ALIMraqcL4yx!ceP&O z-z!syvJc$<8ULfe#dUgCP+JITA9eog{&dh8B=Hq4-}WI7e_iC4D_I# zvAN-k;v0a+HLm*E@cjGzZ?>S~dj=U%UKAe@{OyHU`|q>h6|XwbILxGmov$t$>n<2- z&#&H=|F6dS0u4nZ{L0JXyMW^TTW1 z3|(IgNgMioJ@PTA%(qShUkv`eHlIKvj~CAK;NoRx#lbwKsJ8ka^A5_aD!4x3^Ww6( zeeZz2r1T>m8S2T&+&4Os1SbIUUi+i?yTbYJajM?e(F1qpY|Q^w+CykEr=#@${ZcQ5 zrodYgByt-58ldz}UeDsVl$U;dym9tewR01|en&v0*0RXpdtiLg(+JubQOE~!yK#Y`VRJ*)0dxNV6cw1GvmhK$i2JDu?PqSU)Fz$Zh^prOnuNo4>eOIf( zO?)v{ZK%QEBw^aST$hSL_se*f6hZw`=oZ3Eb6A;nz2BVz!##CghgG9Tem7fd-YPb# zXf1Z92xu*Lr+9mIz4#=ZB9!O2yV&EfRx)5=8@jhPG6Ll#zPl)VP)N?-a5PcXJSf4Y zC#Z3@=ArhoS>Dj2MQYoLVlL$y2d6E??0mU>{=q$y0UkJk=6~N?v-)BeskbQ8b$`9oW=`CbEey6D z0E(o6L^d6_hj2lYcz%aF^dR+?@D9NnEHP$Nz09eXh;9z?YRrO3mxzW|&QDzj-4! zk9GP@(^&y@$uP*%uRIz9!Q`JN{n^S|1cxB8JOaYZ6q=q{3OSM+a^fb4-~^8t$F3ik zw|aiIaX#HCrXIb|$Eo;!Tm>3rNts2a(Wij$JffK4uVewDhcLwiGj+r^XWCF#El~8I z3*Sr6Ygp_0EtM>r*GrP%W9~`j!~BO~6RYz*%JqpG6JLT7MzXrNj`I;Ny91a^<6SvI zFBU|v`=BRhpeFvj{Zi-$!jzD5wGbS01Q&4{b#Y@D1i1|L+uw(jNr?APc%GkfxgA(( zM%5)iF~U1=+1JX2UWM6cD;@;?$HK{Kr0c25g;ZATig8d8TaD%|k|fb0`?mX528ILs zvT`)wgP1zl^b6}}g%_i@6?8>9#zv2e!S==hjQ!#X1Y$5)dBEmw;Y!1NG0G>$LYKQ) zMn?AN1<#*`2w5P^^~M+I^@0b&)@}d(yc?0WCj4GD&xOszeyt^xmS8e;ww<|Hx3Qjh zgXx2~o97M!%B*-Y`*If(6e|?KmSM0g z#XRyd;x)QsXlD4C{)|a*A=ve;n%M#H=E)KEMYHx-49ykaaY3$E3nOH!tFT|eua+1c zsF+8(fjS4`ypl4>!V*v4Zahfe|fSifI*@8#><95aK~gP5RXxE;8T}7nBnT8WG35>Lc0y0 z>}xD^EpbHBOZOkka2?&7pVL?&?~3JY_nhbCe5esPPaZWlTw=`w@+MV~zr3`qC$~l>@YgO&t zQiYtC+VDyZ##BtDvr6CDoJWlm_M@xwdoJC|TC5>iR>%sUaeTxMU!ap7FCIGmu3Fl= zJHhB&ovt?=-L|nmS^G^EK4I5dob-FcBMvR7tyLRpoWB`7f91GEP?Eki)+p1j}%%8y)iJ}B6mV>*x<4)3`^ynF!iM0;5qAXZBu3@N7V0SbLI zLilKh@gYFS4T3pkW#z}4Rv&5#?gLxGPQo%BDta1H|kX>c!0!32Q(D z3<7AANwo_+P=ID>0KgdiPQkq5;Rz?l=t{}nRPbZqciGL4v#c2c+G<3S4IocGq zOU~AM@i1Ee8O=uCE)M`|437bT&6G*C^d<$lt#Z<9F>>dI0V?EoU?3cC+^f#pC2#*s z-|Gf&e�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 b`>x)+l)kRO`)Z2O{A=sx@Q~U~Nris{2hW=Z literal 0 HcmV?d00001 diff --git a/docs/static/img/web-pin.png b/docs/static/img/web-pin.png deleted file mode 100644 index 3312a50fabd92cf5758edd4ee7f53b271ec5289f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18235 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