You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.7 KiB
74 lines
2.7 KiB
// many of these are also found in endorser-mobile utility.ts
|
|
|
|
import axios, { AxiosResponse } from "axios";
|
|
|
|
import { DEFAULT_PUSH_SERVER } from "@/constants/app";
|
|
import { db } from "@/db/index";
|
|
import { MASTER_SETTINGS_KEY } from "@/db/tables/settings";
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
const Buffer = require("buffer/").Buffer;
|
|
|
|
export const isGlobalUri = (uri: string) => {
|
|
return uri && uri.match(new RegExp(/^[A-Za-z][A-Za-z0-9+.-]+:/));
|
|
};
|
|
|
|
// If you edit this, check that the numbers still line up on the side in the alert (on mobile, too),
|
|
// and make sure they can take all actions while the notification shows.
|
|
export const ONBOARD_MESSAGE =
|
|
"1) Check that they've entered their name. 2) Go to the scanning page: use the Contacts page and click on the QR icon at the top, and then scan and register them. 3) Have them go to that page and scan you.";
|
|
|
|
export const sendTestThroughPushServer = async (
|
|
subscription: PushSubscription,
|
|
skipFilter: boolean,
|
|
): Promise<AxiosResponse> => {
|
|
await db.open();
|
|
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
|
|
let pushUrl: string = DEFAULT_PUSH_SERVER as string;
|
|
if (settings?.webPushServer) {
|
|
pushUrl = settings.webPushServer;
|
|
}
|
|
|
|
// This is a special value that tells the service worker to send a direct notification to the device, skipping filters.
|
|
// This is shared with the service worker and should be a constant. Look for the same name in additional-scripts.js
|
|
// 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";
|
|
|
|
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",
|
|
};
|
|
console.log("Sending a test web push message:", newPayload);
|
|
const payloadStr = JSON.stringify(newPayload);
|
|
const response = await axios.post(
|
|
pushUrl + "/web-push/send-test",
|
|
payloadStr,
|
|
{
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
},
|
|
);
|
|
|
|
console.log("Got response from web push server:", response);
|
|
return response;
|
|
};
|
|
|