fix: fix rich push notifications for single-instance situations (#2296)
Partially addresses #1663. Co-authored-by: Nolan Lawson <nolan@nolanlawson.com>
This commit is contained in:
parent
3fb152ac7c
commit
f5f3395a53
|
@ -5,6 +5,8 @@ import {
|
||||||
} from '../__sapper__/service-worker.js'
|
} from '../__sapper__/service-worker.js'
|
||||||
import { get, post } from './routes/_utils/ajax.js'
|
import { get, post } from './routes/_utils/ajax.js'
|
||||||
import { setWebShareData, closeKeyValIDBConnection } from './routes/_database/webShare.js'
|
import { setWebShareData, closeKeyValIDBConnection } from './routes/_database/webShare.js'
|
||||||
|
import { getKnownInstances } from './routes/_database/knownInstances.js'
|
||||||
|
import { basename } from './routes/_api/utils.js'
|
||||||
|
|
||||||
const timestamp = process.env.SAPPER_TIMESTAMP
|
const timestamp = process.env.SAPPER_TIMESTAMP
|
||||||
const ASSETS = `assets_${timestamp}`
|
const ASSETS = `assets_${timestamp}`
|
||||||
|
@ -169,8 +171,18 @@ self.addEventListener('fetch', event => {
|
||||||
self.addEventListener('push', event => {
|
self.addEventListener('push', event => {
|
||||||
event.waitUntil((async () => {
|
event.waitUntil((async () => {
|
||||||
const data = event.data.json()
|
const data = event.data.json()
|
||||||
const { origin } = event.target
|
// If there is only once instance, then we know for sure that the push notification came from it
|
||||||
|
const knownInstances = await getKnownInstances()
|
||||||
|
if (knownInstances.length !== 1) {
|
||||||
|
// TODO: Mastodon currently does not tell us which instance the push notification came from.
|
||||||
|
// So we have to guess and currently just choose the first one. We _could_ locally store the instance that
|
||||||
|
// currently has push notifications enabled, but this would only work for one instance at a time.
|
||||||
|
// See: https://github.com/mastodon/mastodon/issues/22183
|
||||||
|
await showSimpleNotification(data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const origin = basename(knownInstances[0])
|
||||||
try {
|
try {
|
||||||
const notification = await get(`${origin}/api/v1/notifications/${data.notification_id}`, {
|
const notification = await get(`${origin}/api/v1/notifications/${data.notification_id}`, {
|
||||||
Authorization: `Bearer ${data.access_token}`
|
Authorization: `Bearer ${data.access_token}`
|
||||||
|
|
Loading…
Reference in a new issue