Remove group send endorsement toasts

This commit is contained in:
Jamie
2026-05-18 14:40:54 -07:00
committed by GitHub
parent ef970f74c8
commit 1ffe46f587
8 changed files with 7 additions and 101 deletions
@@ -159,8 +159,6 @@ function getToast(toastType: ToastType): AnyToast {
return { toastType: ToastType.FailedToFetchPhoneNumber };
case ToastType.FailedToFetchUsername:
return { toastType: ToastType.FailedToFetchUsername };
case ToastType.FailedToSendWithEndorsements:
return { toastType: ToastType.FailedToSendWithEndorsements };
case ToastType.FailedToImportBackup:
return { toastType: ToastType.FailedToImportBackup };
case ToastType.FileSaved:
-14
View File
@@ -540,20 +540,6 @@ function renderToast({
);
}
if (toastType === ToastType.FailedToSendWithEndorsements) {
return (
<Toast
onClose={hideToast}
toastAction={{
label: i18n('icu:Toast__ActionLabel--SubmitLog'),
onClick: onShowDebugLog,
}}
>
{i18n('icu:Toast--FailedToSendWithEndorsements')}
</Toast>
);
}
if (toastType === ToastType.FailedToImportBackup) {
return (
<Toast
+1 -8
View File
@@ -49,10 +49,7 @@ import {
} from '../Crypto.node.ts';
import type { ConversationLastProfileType } from '../model-types.d.ts';
import type { GroupSendToken } from '../types/GroupSendEndorsements.std.ts';
import {
maybeCreateGroupSendEndorsementState,
onFailedToSendWithEndorsements,
} from '../util/groupSendEndorsements.preload.ts';
import { maybeCreateGroupSendEndorsementState } from '../util/groupSendEndorsements.preload.ts';
import { ProfileDecryptError } from '../types/errors.std.ts';
import { signalProtocolStore } from '../SignalProtocolStore.preload.ts';
import { itemStorage } from '../textsecure/Storage.preload.ts';
@@ -558,10 +555,6 @@ async function doGetProfile(
// Unauthorized/Forbidden
if (error.code === 401 || error.code === 403) {
if (request.groupSendToken != null) {
onFailedToSendWithEndorsements(error);
}
// Step #: Retries for unauthorized access keys and group send tokens
if (!isMe(c.attributes)) {
// Fallback from failed unauth (access key) request
@@ -28,7 +28,6 @@ import { createLogger } from '../logging/log.std.ts';
import { isRecord } from '../util/isRecord.std.ts';
import type { GroupSendToken } from '../types/GroupSendEndorsements.std.ts';
import { HTTPError } from '../types/HTTPError.std.ts';
import { onFailedToSendWithEndorsements } from '../util/groupSendEndorsements.preload.ts';
import { signalProtocolStore } from '../SignalProtocolStore.preload.ts';
import { itemStorage } from './Storage.preload.ts';
@@ -115,8 +114,6 @@ async function getServerKeys(
} catch (error) {
if (!isUnauthorizedError(error)) {
throw error;
} else {
onFailedToSendWithEndorsements(error);
}
}
}
-2
View File
@@ -53,7 +53,6 @@ export enum ToastType {
FailedToDeleteUsername = 'FailedToDeleteUsername',
FailedToFetchPhoneNumber = 'FailedToFetchPhoneNumber',
FailedToFetchUsername = 'FailedToFetchUsername',
FailedToSendWithEndorsements = 'FailedToSendWithEndorsements',
FailedToImportBackup = 'FailedToImportBackup',
FileSaved = 'FileSaved',
FileSize = 'FileSize',
@@ -181,7 +180,6 @@ export type AnyToast =
| { toastType: ToastType.FailedToDeleteUsername }
| { toastType: ToastType.FailedToFetchPhoneNumber }
| { toastType: ToastType.FailedToFetchUsername }
| { toastType: ToastType.FailedToSendWithEndorsements }
| { toastType: ToastType.FailedToImportBackup }
| {
toastType: ToastType.FileSaved;
+1 -1
View File
@@ -10,7 +10,7 @@ const log = createLogger('assert');
/**
* In development, starts the debugger.
*/
export function devDebugger(): void {
function devDebugger(): void {
if (getEnvironment() === Environment.Development) {
debugger; // oxlint-disable-line no-debugger
}
+4 -47
View File
@@ -1,7 +1,6 @@
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { Aci } from '@signalapp/libsignal-client';
import lodash from 'lodash';
import {
groupSendEndorsementsDataSchema,
toGroupSendToken,
@@ -12,7 +11,7 @@ import type {
GroupSendToken,
GroupSendEndorsementsData,
} from '../types/GroupSendEndorsements.std.ts';
import { devDebugger, strictAssert } from './assert.std.ts';
import { strictAssert } from './assert.std.ts';
import {
GroupSecretParams,
GroupSendEndorsement,
@@ -23,11 +22,7 @@ import type { ServiceIdString } from '../types/ServiceId.std.ts';
import { fromAciObject } from '../types/ServiceId.std.ts';
import { createLogger } from '../logging/log.std.ts';
import type { GroupV2MemberType } from '../model-types.d.ts';
import { DurationInSeconds, MINUTE } from './durations/index.std.ts';
import { ToastType } from '../types/Toast.dom.tsx';
import * as Errors from '../types/errors.std.ts';
import { isTestOrMockEnvironment } from '../environment.std.ts';
import { isNightly } from './version.std.ts';
import { DurationInSeconds } from './durations/index.std.ts';
import { parseStrict } from './schemas.std.ts';
import { DataReader } from '../sql/Client.preload.ts';
import { maybeUpdateGroup } from '../groups.preload.ts';
@@ -35,8 +30,6 @@ import * as Bytes from '../Bytes.std.ts';
import { isGroupV2 } from './whatTypeOfConversation.dom.ts';
import { itemStorage } from '../textsecure/Storage.preload.ts';
const { throttle } = lodash;
const log = createLogger('groupSendEndorsements');
export function decodeGroupSendEndorsementsResponse({
@@ -321,37 +314,11 @@ export class GroupSendEndorsementState {
return this.#combineMemberEndorsements(serviceIds);
}
buildToken(serviceIds: Set<ServiceIdString>): GroupSendToken | null {
try {
return this.#toToken(this.#buildToken(new Set(serviceIds)));
} catch (error) {
onFailedToSendWithEndorsements(error);
}
return null;
buildToken(serviceIds: Set<ServiceIdString>): GroupSendToken {
return this.#toToken(this.#buildToken(new Set(serviceIds)));
}
}
const showFailedToSendWithEndorsementsToast = throttle(
() => {
window.reduxActions.toast.showToast({
toastType: ToastType.FailedToSendWithEndorsements,
});
},
5 * MINUTE,
{ trailing: false }
);
export function onFailedToSendWithEndorsements(error: Error): void {
log.error('onFailedToSendWithEndorsements', Errors.toLogFormat(error));
if (isTestOrMockEnvironment() || isNightly(window.getVersion())) {
showFailedToSendWithEndorsementsToast();
}
if (window.SignalCI) {
window.SignalCI.handleEvent('fatalTestError', error);
}
devDebugger();
}
type MaybeCreateGroupSendEndorsementStateResult =
| { state: GroupSendEndorsementState; didRefreshGroupState: false }
| { state: null; didRefreshGroupState: boolean };
@@ -437,19 +404,9 @@ export async function maybeCreateGroupSendEndorsementState(
// If we've already refreshed the group state, we should log and move on.
if (alreadyRefreshedGroupState) {
onFailedToSendWithEndorsements(
new Error(
`${logId}: Endorsements invalid after refreshing group: ${result.reason}`
)
);
return { state: null, didRefreshGroupState: false };
}
if (conversation.isBlocked()) {
onFailedToSendWithEndorsements(
new Error(
`${logId}: Group is blocked and endorsements are invalid: ${result.reason}`
)
);
return { state: null, didRefreshGroupState: false };
}
+1 -24
View File
@@ -84,10 +84,7 @@ import { strictAssert } from './assert.std.ts';
import { createLogger } from '../logging/log.std.ts';
import { waitForAll } from './waitForAll.std.ts';
import type { GroupSendEndorsementState } from './groupSendEndorsements.preload.ts';
import {
maybeCreateGroupSendEndorsementState,
onFailedToSendWithEndorsements,
} from './groupSendEndorsements.preload.ts';
import { maybeCreateGroupSendEndorsementState } from './groupSendEndorsements.preload.ts';
import type { GroupSendToken } from '../types/GroupSendEndorsements.std.ts';
import { isAciString } from './isAciString.std.ts';
import { safeParseStrict, safeParseUnknown } from './schemas.std.ts';
@@ -749,11 +746,9 @@ async function sendToGroupViaSenderKey(
}
if (error.code === UNKNOWN_RECIPIENT) {
onFailedToSendWithEndorsements(error);
throw new UnknownRecipientError();
}
if (error.code === INCORRECT_AUTH_KEY) {
onFailedToSendWithEndorsements(error);
throw new IncorrectSenderKeyAuthError();
}
@@ -790,13 +785,6 @@ async function sendToGroupViaSenderKey(
}
}
if (groupSendEndorsementState != null) {
// Ignore server errors
if (!(error instanceof HTTPError && error.code === 500)) {
onFailedToSendWithEndorsements(error);
}
}
log.error(
`${logId}: Returned unexpected error code: ${
error.code
@@ -1381,11 +1369,6 @@ function isValidSenderKeyRecipient(
if (groupSendEndorsementState != null) {
if (!groupSendEndorsementState.hasMember(serviceId)) {
onFailedToSendWithEndorsements(
new Error(
`isValidSenderKeyRecipient: Sending to ${serviceId}, missing endorsement`
)
);
return false;
}
} else if (!getAccessKey(memberConversation.attributes, { story })) {
@@ -1588,12 +1571,6 @@ async function fetchKeysForServiceId(
await markServiceIdUnregistered(serviceId);
return;
}
if (useGroupSendEndorsement) {
// Ignore untrusted identity key errors
if (!(error instanceof OutgoingIdentityKeyError)) {
onFailedToSendWithEndorsements(error as Error);
}
}
log.error(
`${logId}: Error fetching ${devices?.join(', ') || 'all'} devices`,
Errors.toLogFormat(error)