Files
discord-decomp/actions/native/PushNotificationActionCreators.tsx
T
2026-11-01 12:12:55 +02:00

172 lines
5.7 KiB
TypeScript

// Metro module 11507 (f11508).
import MultiAccountStore from "../../modules/multi_account/MultiAccountStore";
import AuthenticationStore from "../../stores/AuthenticationStore";
import { DEVICE_TOKEN, DEVICE_VOIP_TOKEN, Endpoints } from "../../Constants";
import { BUNDLE_ID, DEVICE_PUSH_VOIP_PROVIDER, IS_QUEST_RELEASE, getDevicePushProvider } from "../../modules/push_notifications/PushNotificationConstants";
import Logger from "../../modules/debug/Logger";
import { getToken } from "../../_bundle/setSecondaryToken";
import { HTTP } from "../../_bundle/sendRequest";
import SentryUtils_native from "../../utils/SentryUtils.native";
import { updatePushSyncToken, invalidatePushSyncTokens } from "../../modules/multi_account/MultiAccountActionCreators";
import { Storage } from "../../_bundle/Module595";
import TrackedHTTPUtils from "../../utils/TrackedHTTPUtils";
import { isAndroid } from "../../utils/PlatformUtils";
import { NetworkActionNames } from "../../_bundle/Module503";
import { isNotNullish } from "../../utils/GlobalUtils";
import Dispatcher from "../../Dispatcher";
let c7842_14;
const getOrRefreshPushSyncToken = async function getOrRefreshPushSyncToken(c27089_0) {
let r78, pushSyncToken;
let c27089_3;
let c27089_4 = 0;
let c30411_0, c30411_1, c30411_2;
L15: {
L14: {
try {
c30411_0 = c27089_0;
c30411_1 = void 0;
if (c27089_0.pushSyncToken == null) {
const token = getToken(c27089_0.id);
if (token == null) {
break L15;
}
c27089_4 = 1;
c30411_1 = (await HTTP.get({
url: Endpoints.DEVICES_SYNC_TOKEN,
headers: {
authorization: token
},
rejectWithError: false
})).body.token;
c27089_4 = 0;
updatePushSyncToken(c30411_0.id, c30411_1);
r78 = c30411_1;
break L14;
}
pushSyncToken = c27089_0.pushSyncToken;
} catch ($e) {
const r26 = $e;
let r8 = r26;
c27089_3 = r26;
if (c27089_4 !== 0) {
while (true) {
try {
const r87 = c27089_3;
c27089_4 = 0;
c30411_2 = r87;
SentryUtils_native.captureException(c30411_2);
} catch (r83) {
r8 = r83;
c27089_3 = r83;
if (c27089_4 === 0) {
break;
}
continue;
}
return null;
}
}
throw r8;
}
return pushSyncToken;
}
return r78;
}
return null;
};
c7842_14 = new Logger("PushNotificationActionCreators");
const r42 = {
registerDevice: function registerDevice(a0, r3 = false) {
c7842_14.log(`Registering push notification token: ${a0}, is voip:${r3}, multi-account:${MultiAccountStore.canUseMultiAccountNotifications}`);
const r27 = r3;
Storage.set(r27 ? DEVICE_VOIP_TOKEN : DEVICE_TOKEN, a0);
return MultiAccountStore.canUseMultiAccountNotifications ? this.syncDevice(a0, r27) : TrackedHTTPUtils.post({
url: Endpoints.DEVICES,
body: {
provider: r27 ? DEVICE_PUSH_VOIP_PROVIDER : getDevicePushProvider(),
token: a0,
bypass_server_throttling_supported: isAndroid() && !IS_QUEST_RELEASE,
bundle_id: BUNDLE_ID
},
oldFormErrors: true,
trackedActionData: {
event: NetworkActionNames.USER_REGISTER_DEVICE_TOKEN
},
rejectWithError: false
});
},
syncDevice: async function syncDevice(c18905_0, r4 = false) {
let c18905_1 = r4;
let c27090_1;
let env30412;
c27090_1 = void 0;
const r16 = env30412 = {};
let c27090_0 = r16;
env30412[0] = void 0;
env30412[1] = void 0;
env30412[2] = void 0;
env30412[0] = AuthenticationStore.getId();
env30412[1] = await Promise.all(MultiAccountStore.getValidUsers().sort(function({ id }, b) {
const r6 = env30412[0];
return id !== r6 ? b.id === r6 ? 1 : 0 : -1;
}).map(getOrRefreshPushSyncToken));
if (!(env30412[1].length < 1) && env30412[1][0] != null) {
env30412[2] = await HTTP.put({
url: Endpoints.DEVICES_SYNC,
body: {
provider: c18905_1 ? DEVICE_PUSH_VOIP_PROVIDER : (0, getDevicePushProvider)(),
token: c18905_0,
push_sync_tokens: env30412[1].filter(isNotNullish),
bypass_server_throttling_supported: isAndroid() && !IS_QUEST_RELEASE,
bundle_id: BUNDLE_ID
},
rejectWithError: false
});
if (env30412[2].body.invalid_push_sync_tokens.length > 0) {
invalidatePushSyncTokens(env30412[2].body.invalid_push_sync_tokens);
}
}
},
unregisterDevice: (a0) => {
c7842_14.log(`Unregistering push notification token: ${a0}`);
return TrackedHTTPUtils.delete({
url: Endpoints.DEVICES,
body: {
provider: getDevicePushProvider(),
token: a0
},
trackedActionData: {
event: NetworkActionNames.USER_UNREGISTER_DEVICE_TOKEN
},
rejectWithError: false
});
}
};
export default r42;
export function setPushPermissionState(permissionState) {
Dispatcher.wait(() => {
Dispatcher.dispatch({
type: "PUSH_NOTIFICATION_PERMISSION_SET_STATE",
permissionState
});
});
}
export function setPushPermissionReactivationSeen(a0) {
Dispatcher.dispatch({
type: "PUSH_NOTIFICATION_PERMISSION_REACTIVATION_SEEN",
promptType: a0
});
}
export function setPushNotificationPermissionEligibleForPrompt(a0) {
Dispatcher.dispatch({
type: "PUSH_NOTIFICATION_PERMISSION_SET_ELIGIBLE",
promptType: a0
});
}
export function updateNotificationAuthorizationStatus(a0) {
Dispatcher.dispatch({
type: "PUSH_NOTIFICATION_AUTHORIZATION_STATUS_UPDATE",
authorizationStatus: a0
});
}