Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/push/utils.js
// @flow | // @flow | ||||
import apn from '@parse/node-apn'; | import apn from '@parse/node-apn'; | ||||
import type { ResponseFailure } from '@parse/node-apn'; | import type { ResponseFailure } from '@parse/node-apn'; | ||||
import type { FirebaseApp, FirebaseError } from 'firebase-admin'; | import type { FirebaseApp, FirebaseError } from 'firebase-admin'; | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import webpush from 'web-push'; | import webpush from 'web-push'; | ||||
import type { PlatformDetails } from 'lib/types/device-types.js'; | |||||
import type { WebNotification } from 'lib/types/notif-types.js'; | import type { WebNotification } from 'lib/types/notif-types.js'; | ||||
import { threadSubscriptions } from 'lib/types/subscription-types.js'; | import { threadSubscriptions } from 'lib/types/subscription-types.js'; | ||||
import { threadPermissions } from 'lib/types/thread-types.js'; | import { threadPermissions } from 'lib/types/thread-types.js'; | ||||
import { | import { | ||||
getAPNPushProfileForCodeVersion, | getAPNPushProfileForCodeVersion, | ||||
getFCMPushProfileForCodeVersion, | getFCMPushProfileForCodeVersion, | ||||
getAPNProvider, | getAPNProvider, | ||||
Show All 17 Lines | type APNPushResult = | ||||
| { +success: true } | | { +success: true } | ||||
| { | | { | ||||
+errors: $ReadOnlyArray<ResponseFailure>, | +errors: $ReadOnlyArray<ResponseFailure>, | ||||
+invalidTokens?: $ReadOnlyArray<string>, | +invalidTokens?: $ReadOnlyArray<string>, | ||||
}; | }; | ||||
async function apnPush({ | async function apnPush({ | ||||
notification, | notification, | ||||
deviceTokens, | deviceTokens, | ||||
codeVersion, | platformDetails, | ||||
}: { | }: { | ||||
+notification: apn.Notification, | +notification: apn.Notification, | ||||
+deviceTokens: $ReadOnlyArray<string>, | +deviceTokens: $ReadOnlyArray<string>, | ||||
+codeVersion: ?number, | +platformDetails: PlatformDetails, | ||||
}): Promise<APNPushResult> { | }): Promise<APNPushResult> { | ||||
const pushProfile = getAPNPushProfileForCodeVersion(codeVersion); | const pushProfile = getAPNPushProfileForCodeVersion(platformDetails); | ||||
const apnProvider = await getAPNProvider(pushProfile); | const apnProvider = await getAPNProvider(pushProfile); | ||||
if (!apnProvider && process.env.NODE_ENV === 'development') { | if (!apnProvider && process.env.NODE_ENV === 'development') { | ||||
console.log(`no keyserver/secrets/${pushProfile}.json so ignoring notifs`); | console.log(`no keyserver/secrets/${pushProfile}.json so ignoring notifs`); | ||||
return { success: true }; | return { success: true }; | ||||
} | } | ||||
invariant(apnProvider, `keyserver/secrets/${pushProfile}.json should exist`); | invariant(apnProvider, `keyserver/secrets/${pushProfile}.json should exist`); | ||||
const result = await apnProvider.send(notification, deviceTokens); | const result = await apnProvider.send(notification, deviceTokens); | ||||
const errors = []; | const errors = []; | ||||
▲ Show 20 Lines • Show All 212 Lines • Show Last 20 Lines |