From 489bb76a60aa58031958994e7dde2001a47e510a Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Tue, 2 Apr 2024 19:32:41 -0600 Subject: [PATCH] adjust more code to the PushSubscriptionJSON --- src/App.vue | 2 +- src/libs/util.ts | 34 ++--------------------------- src/views/HelpNotificationsView.vue | 13 ++++++----- 3 files changed, 10 insertions(+), 39 deletions(-) diff --git a/src/App.vue b/src/App.vue index 3d273212e..ad5af339b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -575,7 +575,7 @@ export default class App extends Vue { throw new Error("Subscription object is not available."); } }) - .then(async (subscription) => { + .then(async (subscription: PushSubscriptionWithTime) => { console.log( "Subscription data sent to server and all finished successfully.", ); diff --git a/src/libs/util.ts b/src/libs/util.ts index 8a25ff681..58b329c1f 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -12,9 +12,6 @@ import { deriveAddress, generateSeed, newIdentifier } from "@/libs/crypto"; import { GenericServerRecord, containsHiddenDid } from "@/libs/endorserServer"; import * as serverUtil from "@/libs/endorserServer"; -// eslint-disable-next-line @typescript-eslint/no-var-requires -//const Buffer = require("buffer/").Buffer; - export const PRIVACY_MESSAGE = "The data you send be visible to the world -- except: your IDs and the IDs of anyone you tag will stay private, only visible to those you allow."; @@ -241,7 +238,7 @@ export const generateSaveAndActivateIdentity = async (): Promise => { }; export const sendTestThroughPushServer = async ( - subscription: PushSubscriptionJSON, + subscriptionJSON: PushSubscriptionJSON, skipFilter: boolean, ): Promise => { await db.open(); @@ -256,38 +253,11 @@ export const sendTestThroughPushServer = async ( // Use something other than "Daily Update" https://gitea.anomalistdesign.com/trent_larson/py-push-server/src/commit/3c0e196c11bc98060ec5934e99e7dbd591b5da4d/app.py#L213 const DIRECT_PUSH_TITLE = "DIRECT_NOTIFICATION"; - /** remove if the PushSubscriptionJSON approach works - * - const auth = Buffer.from(subscription.getKey("auth")); - const authB64 = auth - .toString("base64") - .replace(/\+/g, "-") - .replace(/\//g, "_") - .replace(/=+$/, ""); - const p256dh = Buffer.from(subscription.getKey("p256dh")); - const p256dhB64 = p256dh - .toString("base64") - .replace(/\+/g, "-") - .replace(/\//g, "_") - .replace(/=+$/, ""); - const newPayload = { - endpoint: subscription.endpoint, - keys: { - auth: authB64, - p256dh: p256dhB64, - }, - message: `Test, where you will see this message ${ - skipFilter ? "un" : "" - }filtered.`, - title: skipFilter ? DIRECT_PUSH_TITLE : "Your Web Push", - }; - * - **/ const newPayload = { // eslint-disable-next-line prettier/prettier message: `Test, where you will see this message ${ skipFilter ? "un" : "" }filtered.`, title: skipFilter ? DIRECT_PUSH_TITLE : "Your Web Push", - ...subscription, + ...subscriptionJSON, }; console.log("Sending a test web push message:", newPayload); const payloadStr = JSON.stringify(newPayload); diff --git a/src/views/HelpNotificationsView.vue b/src/views/HelpNotificationsView.vue index 3314dc2c6..313e88b6a 100644 --- a/src/views/HelpNotificationsView.vue +++ b/src/views/HelpNotificationsView.vue @@ -301,12 +301,13 @@ import { sendTestThroughPushServer } from "@/libs/util"; export default class HelpNotificationsView extends Vue { $notify!: (notification: NotificationIface, timeout?: number) => void; - subscription: PushSubscription | null = null; + subscriptionJSON?: PushSubscriptionJSON; async mounted() { try { const registration = await navigator.serviceWorker.ready; - this.subscription = await registration.pushManager.getSubscription(); + const fullSub = await registration.pushManager.getSubscription(); + this.subscriptionJSON = fullSub?.toJSON(); } catch (error) { console.error("Mount error:", error); } @@ -315,13 +316,13 @@ export default class HelpNotificationsView extends Vue { alertWebPushSubscription() { console.log( "Web push subscription:", - JSON.parse(JSON.stringify(this.subscription)), // gives more info than plain console logging + JSON.parse(JSON.stringify(this.subscriptionJSON)), // gives more info than plain console logging ); - alert(JSON.stringify(this.subscription)); + alert(JSON.stringify(this.subscriptionJSON)); } async sendTestWebPushMessage(skipFilter: boolean = false) { - if (!this.subscription) { + if (!this.subscriptionJSON) { this.$notify( { group: "alert", @@ -336,7 +337,7 @@ export default class HelpNotificationsView extends Vue { } try { - await sendTestThroughPushServer(this.subscription, skipFilter); + await sendTestThroughPushServer(this.subscriptionJSON, skipFilter); this.$notify( {