diff --git a/src/gui/src/sw.js b/src/gui/src/sw.js index 5bb152e30..bff006db9 100644 --- a/src/gui/src/sw.js +++ b/src/gui/src/sw.js @@ -82,7 +82,10 @@ function readPushPayload (pushData) { } catch ( _e ) { return null; } - let message = payload && typeof payload === 'object' ? payload.puter : null; + // Providers that only carry string data deliver it under `data`. + let message = payload && typeof payload === 'object' + ? (payload.puter ?? payload.data?.puter) + : null; if ( typeof message === 'string' ) { try { message = JSON.parse(message); diff --git a/src/gui/src/sw.test.js b/src/gui/src/sw.test.js index 124f0238d..88781bd77 100644 --- a/src/gui/src/sw.test.js +++ b/src/gui/src/sw.test.js @@ -90,6 +90,13 @@ describe('service worker helpers', () => { expect(context.readPushPayload(pushData({ puter: JSON.stringify(message) }))).toEqual(message); }); + it('reads the message from string data under `data.puter`', () => { + const message = { uid: 'n2', title: 'Hello' }; + const payload = { data: { puter: JSON.stringify(message) }, from: '123', messageId: 'm1' }; + expect(context.readPushPayload(pushData(payload))).toEqual(message); + expect(context.readPushPayload(pushData({ data: { other: 'x' } }))).toBeNull(); + }); + it('reads nothing from a missing, garbled or misplaced payload', () => { expect(context.readPushPayload(null)).toBeNull(); expect(context.readPushPayload({ json: () => { throw new SyntaxError('bad'); } })).toBeNull();