Update to the latest SignalService.proto

This commit is contained in:
Scott Nonnenberg 2025-02-11 08:20:14 +10:00 committed by GitHub
parent cf5dc4b940
commit d26d915a44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 464 additions and 536 deletions

View file

@ -30,7 +30,7 @@
"get-expire-time": "node ts/scripts/get-expire-time.js",
"copy-components": "node ts/scripts/copy.js",
"sass": "sass stylesheets/manifest.scss:stylesheets/manifest.css stylesheets/manifest_bridge.scss:stylesheets/manifest_bridge.css",
"build-module-protobuf": "pbjs --target static-module --force-long --no-typeurl --no-verify --no-create --no-convert --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --no-comments --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
"build-module-protobuf": "pbjs --root='signal-desktop' --target static-module --force-long --no-typeurl --no-verify --no-create --no-convert --wrap commonjs --out ts/protobuf/compiled.js protos/*.proto && pbts --no-comments --out ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
"clean-module-protobuf": "rm -f ts/protobuf/compiled.d.ts ts/protobuf/compiled.js",
"build-protobuf": "npm run build-module-protobuf",
"clean-protobuf": "npm run clean-module-protobuf",

View file

@ -1,80 +1,82 @@
// Copyright 2014 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
/*
* Copyright 2020-2022 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
// Source: https://github.com/signalapp/libsignal-service-java/blob/4684a49b2ed8f32be619e0d0eea423626b6cb2cb/protobuf/SignalService.proto
package signalservice;
option java_package = "org.whispersystems.signalservice.internal.push";
option java_outer_classname = "SignalServiceProtos";
message Envelope {
// Our parser does not handle reserved in enums: DESKTOP-1569
enum Type {
UNKNOWN = 0;
CIPHERTEXT = 1;
KEY_EXCHANGE = 2;
PREKEY_BUNDLE = 3;
RECEIPT = 5;
UNIDENTIFIED_SENDER = 6;
// Our parser does not handle reserved in enums: DESKTOP-1569
// reserved 7;
PLAINTEXT_CONTENT = 8;
CIPHERTEXT = 1; // content => (version byte | SignalMessage{Content})
// reserved 2;
// reserved "KEY_EXCHANGE";
PREKEY_BUNDLE = 3; // content => (version byte | PreKeySignalMessage{Content})
SERVER_DELIVERY_RECEIPT = 5; // legacyMessage => [] AND content => []
UNIDENTIFIED_SENDER = 6; // legacyMessage => [] AND content => ((version byte | UnidentifiedSenderMessage) OR (version byte | Multi-Recipient Sealed Sender Format))
SENDERKEY_MESSAGE = 7; // legacyMessage => [] AND content => (version byte | SenderKeyMessage)
PLAINTEXT_CONTENT = 8; // legacyMessage => [] AND content => (marker byte | Content)
}
optional Type type = 1;
reserved 2; // formerly optional string sourceE164 = 2;
optional string sourceServiceId = 11;
optional uint32 sourceDevice = 7;
optional string destinationServiceId = 13;
// reserved 3; // formerly optional string relay = 3;
reserved 3; // formerly optional string relay = 3;
optional uint64 timestamp = 5;
// reserved 6; // formerly optional bytes legacyMessage = 6;
reserved 6; // formerly optional bytes legacyMessage = 6; // Contains an encrypted DataMessage; this field could have been set historically for type 1 or 3 messages; no longer in use
optional bytes content = 8; // Contains an encrypted Content
optional string serverGuid = 9;
optional uint64 serverTimestamp = 10;
optional bool ephemeral = 12; // indicates that the message should not be persisted if the recipient is offline
optional bool urgent = 14 [default=true]; // indicates that the content is considered timely by the sender; defaults to true so senders have to opt-out to say something isn't time critical
optional string updated_pni = 15;
optional bool urgent = 14 [default = true]; // indicates that the content is considered timely by the sender; defaults to true so senders have to opt-out to say something isn't time critical
optional string updatedPni = 15; // for number-change synchronization messages, provides the new server-assigned phone number identifier associated with the changed number
optional bool story = 16; // indicates that the content is a story.
optional bytes reporting_token = 17;
// next: 18
optional bytes report_spam_token = 17; // token sent when reporting spam
reserved 18; // internal server use
// next: 19
}
message Content {
optional DataMessage dataMessage = 1;
optional SyncMessage syncMessage = 2;
optional CallingMessage callingMessage = 3;
optional CallMessage callMessage = 3;
optional NullMessage nullMessage = 4;
optional ReceiptMessage receiptMessage = 5;
optional TypingMessage typingMessage = 6;
optional bytes senderKeyDistributionMessage = 7;
optional bytes decryptionErrorMessage = 8;
optional bytes /* SenderKeyDistributionMessage */ senderKeyDistributionMessage = 7;
optional bytes /* DecryptionErrorMessage */ decryptionErrorMessage = 8;
optional StoryMessage storyMessage = 9;
optional PniSignatureMessage pniSignatureMessage = 10;
optional EditMessage editMessage = 11;
}
message CallingMessage {
message CallMessage {
message Offer {
enum Type {
OFFER_AUDIO_CALL = 0;
OFFER_VIDEO_CALL = 1;
reserved /* OFFER_NEED_PERMISSION */ 2; // removed
}
optional uint64 callId = 1;
optional uint64 id = 1;
reserved /* sdp */ 2;
optional Type type = 3;
optional bytes opaque = 4;
}
message Answer {
optional uint64 callId = 1;
optional uint64 id = 1;
reserved /* sdp */ 2;
optional bytes opaque = 3;
}
message IceCandidate {
optional uint64 callId = 1;
message IceUpdate {
optional uint64 id = 1;
reserved /* mid */ 2;
reserved /* line */ 3;
reserved /* sdp */ 4;
@ -82,7 +84,7 @@ message CallingMessage {
}
message Busy {
optional uint64 callId = 1;
optional uint64 id = 1;
}
message Hangup {
@ -93,8 +95,7 @@ message CallingMessage {
HANGUP_BUSY = 3;
HANGUP_NEED_PERMISSION = 4;
}
optional uint64 callId = 1;
optional uint64 id = 1;
optional Type type = 2;
optional uint32 deviceId = 3;
}
@ -104,14 +105,13 @@ message CallingMessage {
DROPPABLE = 0;
HANDLE_IMMEDIATELY = 1;
}
optional bytes data = 1;
optional Urgency urgency = 2;
optional Urgency urgency = 2; // If missing, treat as DROPPABLE.
}
optional Offer offer = 1;
optional Answer answer = 2;
repeated IceCandidate iceCandidates = 3;
repeated IceUpdate iceUpdate = 3;
reserved /* legacyHangup */ 4;
optional Busy busy = 5;
reserved /* profileKey */ 6;
@ -126,6 +126,7 @@ message DataMessage {
END_SESSION = 1;
EXPIRATION_TIMER_UPDATE = 2;
PROFILE_KEY_UPDATE = 4;
FORWARD = 8;
}
message Payment {
@ -139,16 +140,6 @@ message DataMessage {
}
}
message RequestId {
optional string uuid = 1;
}
message Request {
optional RequestId requestId = 1;
optional Amount amount = 2;
optional string note = 3;
}
message Notification {
message MobileCoin {
optional bytes receipt = 1;
@ -160,11 +151,7 @@ message DataMessage {
// Optional, Refers to the PaymentRequest message, if any.
optional string note = 2;
optional RequestId requestId = 1003;
}
message Cancellation {
optional RequestId requestId = 1;
reserved /*requestId*/ 1003;
}
message Activation {
@ -179,9 +166,10 @@ message DataMessage {
oneof Item {
Notification notification = 1;
Activation activation = 2;
Request request = 1002;
Cancellation cancellation = 1003;
}
reserved /*request*/ 1002;
reserved /*cancellation*/ 1003;
}
message Quote {
@ -197,7 +185,7 @@ message DataMessage {
}
optional uint64 id = 1;
reserved /* author */ 2; // removed
reserved /*authorE164*/ 2;
optional string authorAci = 5;
optional string text = 3;
repeated QuotedAttachment attachments = 4;
@ -212,7 +200,7 @@ message DataMessage {
optional string prefix = 3;
optional string suffix = 4;
optional string middleName = 5;
reserved /* displayName */ 6;
reserved /*displayName*/ 6;
optional string nickname = 7;
}
@ -273,14 +261,6 @@ message DataMessage {
optional string organization = 7;
}
message Preview {
optional string url = 1;
optional string title = 2;
optional AttachmentPointer image = 3;
optional string description = 4;
optional uint64 date = 5;
}
message Sticker {
optional bytes packId = 1;
optional bytes packKey = 2;
@ -292,34 +272,15 @@ message DataMessage {
message Reaction {
optional string emoji = 1;
optional bool remove = 2;
reserved /* targetAuthorE164 */ 3; // removed
reserved /* targetAuthorE164 */ 3;
optional string targetAuthorAci = 4;
optional uint64 targetTimestamp = 5;
optional uint64 targetSentTimestamp = 5;
}
message Delete {
optional uint64 targetSentTimestamp = 1;
}
message BodyRange {
enum Style {
NONE = 0;
BOLD = 1;
ITALIC = 2;
SPOILER = 3;
STRIKETHROUGH = 4;
MONOSPACE = 5;
}
optional uint32 start = 1; // Starting index in UTF-16 code units/raw string representation
optional uint32 length = 2; // Length of range in UTF-16 code units/raw string representation
oneof associatedValue {
string mentionAci = 3;
Style style = 4;
}
}
message GroupCallUpdate {
optional string eraId = 1;
}
@ -369,6 +330,7 @@ message DataMessage {
optional Payment payment = 20;
optional StoryContext storyContext = 21;
optional GiftBadge giftBadge = 22;
// NEXT ID: 24
}
message NullMessage {
@ -408,6 +370,14 @@ message StoryMessage {
repeated BodyRange bodyRanges = 6;
}
message Preview {
optional string url = 1;
optional string title = 2;
optional AttachmentPointer image = 3;
optional string description = 4;
optional uint64 date = 5;
}
message TextAttachment {
enum Style {
DEFAULT = 0;
@ -444,7 +414,7 @@ message Verified {
UNVERIFIED = 2;
}
optional string destination = 1;
reserved /*destinationE164*/ 1;
optional string destinationAci = 5;
optional bytes identityKey = 2;
optional State state = 3;
@ -454,10 +424,10 @@ message Verified {
message SyncMessage {
message Sent {
message UnidentifiedDeliveryStatus {
optional string destination = 1;
reserved /*destinationE164*/ 1;
optional string destinationServiceId = 3;
optional bool unidentified = 2;
reserved /* destinationPni */ 4;
reserved /*destinationPni */ 4;
optional bytes destinationPniIdentityKey = 5; // Only set for PNI destinations
}
@ -465,9 +435,10 @@ message SyncMessage {
optional string destinationServiceId = 1;
repeated string distributionListIds = 2;
optional bool isAllowedToReply = 3;
reserved /*destinationPni */ 4;
}
optional string destination = 1;
optional string destinationE164 = 1;
optional string destinationServiceId = 7;
optional uint64 timestamp = 2;
optional DataMessage message = 3;
@ -477,6 +448,8 @@ message SyncMessage {
optional StoryMessage storyMessage = 8;
repeated StoryMessageRecipient storyMessageRecipients = 9;
optional EditMessage editMessage = 10;
reserved /*destinationPni */ 11;
// Next ID: 12
}
message Contacts {
@ -494,31 +467,24 @@ message SyncMessage {
enum Type {
UNKNOWN = 0;
CONTACTS = 1;
reserved /* GROUPS */ 2;
reserved /*GROUPS*/ 2;
BLOCKED = 3;
CONFIGURATION = 4;
KEYS = 5;
reserved /* PNI_IDENTITY */ 6;
reserved /*PNI_IDENTITY*/ 6;
}
optional Type type = 1;
}
message Keys {
reserved /* storageService */ 1; // deprecated: this field will be removed in a future release.
optional bytes master = 2; // deprecated: this field will be removed in a future release.
optional string accountEntropyPool = 3;
optional bytes mediaRootBackupKey = 4;
}
message Read {
optional string sender = 1;
reserved /*senderE164*/ 1;
optional string senderAci = 3;
optional uint64 timestamp = 2;
}
message Viewed {
optional string senderE164 = 1;
reserved /*senderE164*/ 1;
optional string senderAci = 3;
optional uint64 timestamp = 2;
}
@ -527,7 +493,7 @@ message SyncMessage {
optional bool readReceipts = 1;
optional bool unidentifiedDeliveryIndicators = 2;
optional bool typingIndicators = 3;
reserved 4;
reserved /* linkPreviews */ 4;
optional uint32 provisioningVersion = 5;
optional bool linkPreviews = 6;
}
@ -544,28 +510,11 @@ message SyncMessage {
}
message ViewOnceOpen {
optional string sender = 1;
reserved /*senderE164*/ 1;
optional string senderAci = 3;
optional uint64 timestamp = 2;
}
message MessageRequestResponse {
enum Type {
UNKNOWN = 0;
ACCEPT = 1;
DELETE = 2;
BLOCK = 3;
BLOCK_AND_DELETE = 4;
SPAM = 5;
BLOCK_AND_SPAM = 6;
}
optional string threadE164 = 1;
optional string threadAci = 2;
optional bytes groupId = 3;
optional Type type = 4;
}
message FetchLatest {
enum Type {
UNKNOWN = 0;
@ -577,6 +526,35 @@ message SyncMessage {
optional Type type = 1;
}
message Keys {
reserved /* storageService */ 1;
optional bytes master = 2; // deprecated: this field will be removed in a future release.
optional string accountEntropyPool = 3;
optional bytes mediaRootBackupKey = 4;
}
message PniIdentity {
optional bytes publicKey = 1;
optional bytes privateKey = 2;
}
message MessageRequestResponse {
enum Type {
UNKNOWN = 0;
ACCEPT = 1;
DELETE = 2;
BLOCK = 3;
BLOCK_AND_DELETE = 4;
SPAM = 5;
BLOCK_AND_SPAM = 6;
}
reserved /*threadE164*/ 1;
optional string threadAci = 2;
optional bytes groupId = 3;
optional Type type = 4;
}
message PniChangeNumber {
optional bytes identityKeyPair = 1; // Serialized libsignal-client IdentityKeyPair
optional bytes signedPreKey = 2; // Serialized libsignal-client SignedPreKeyRecord
@ -588,7 +566,7 @@ message SyncMessage {
message CallEvent {
enum Type {
UNKNOWN = 0;
UNKNOWN_TYPE = 0;
AUDIO_CALL = 1;
VIDEO_CALL = 2;
GROUP_CALL = 3;
@ -596,13 +574,13 @@ message SyncMessage {
}
enum Direction {
UNKNOWN = 0;
UNKNOWN_DIRECTION = 0;
INCOMING = 1;
OUTGOING = 2;
}
enum Event {
UNKNOWN = 0;
UNKNOWN_EVENT = 0;
ACCEPTED = 1;
NOT_ACCEPTED = 2;
DELETE = 3;
@ -638,6 +616,7 @@ message SyncMessage {
CLEAR = 0;
MARKED_AS_READ = 1;
MARKED_AS_READ_IN_CONVERSATION = 2;
CLEAR_IN_CONVERSATION = 3;
}
optional Type type = 1;
@ -708,7 +687,7 @@ message SyncMessage {
optional Sent sent = 1;
optional Contacts contacts = 2;
reserved /* groups */ 3;
reserved /*groups*/ 3;
optional Request request = 4;
repeated Read read = 5;
optional Blocked blocked = 6;
@ -720,9 +699,8 @@ message SyncMessage {
optional FetchLatest fetchLatest = 12;
optional Keys keys = 13;
optional MessageRequestResponse messageRequestResponse = 14;
reserved 15; // not yet added
repeated Viewed viewed = 16;
reserved 17; // pniIdentity
reserved /*pniIdentity*/ 17;
optional PniChangeNumber pniChangeNumber = 18;
optional CallEvent callEvent = 19;
optional CallLinkUpdate callLinkUpdate = 20;
@ -732,10 +710,10 @@ message SyncMessage {
}
message AttachmentPointer {
// Our parser does not handle reserved in enums: DESKTOP-1569
enum Flags {
VOICE_MESSAGE = 1;
BORDERLESS = 2;
// Our parser does not handle reserved in enums: DESKTOP-1569
// reserved 4;
GIF = 8;
}
@ -783,13 +761,21 @@ message ContactDetails {
optional string aci = 9;
optional string name = 2;
optional Avatar avatar = 3;
// reserved 4; // formerly color
// reserved 5; // formerly verified
// reserved 6; // formerly profileKey
// reserved 7; // formerly blocked
reserved /* color */ 4;
reserved /* verified */ 5;
reserved /* profileKey */ 6;
reserved /* blocked */ 7;
optional uint32 expireTimer = 8;
optional uint32 expireTimerVersion = 12;
optional uint32 inboxPosition = 10;
reserved /* archived */ 11;
// NEXT ID: 13
}
message DecryptionErrorMessage {
optional bytes ratchetKey = 1; // set to the public ratchet key from the SignalMessage if a 1-1 payload fails to decrypt
optional uint64 timestamp = 2;
optional uint32 deviceId = 3;
}
message PniSignatureMessage {
@ -802,3 +788,22 @@ message EditMessage {
optional uint64 targetSentTimestamp = 1;
optional DataMessage dataMessage = 2;
}
message BodyRange {
enum Style {
NONE = 0;
BOLD = 1;
ITALIC = 2;
SPOILER = 3;
STRIKETHROUGH = 4;
MONOSPACE = 5;
}
optional uint32 start = 1; // Starting index in UTF-16 code units/raw string representation
optional uint32 length = 2; // Length of range in UTF-16 code units/raw string representation
oneof associatedValue {
string mentionAci = 3;
Style style = 4;
}
}

View file

@ -2476,7 +2476,7 @@ export async function startApp(): Promise<void> {
const messageDescriptor = getMessageDescriptor({
// 'message' event: for 1:1 converations, the conversation is same as sender
destination: data.source,
destinationE164: data.source,
destinationServiceId: data.sourceAci,
envelopeId: data.envelopeId,
message: data.message,
@ -2736,12 +2736,10 @@ export async function startApp(): Promise<void> {
for (const {
destinationServiceId,
destination,
isAllowedToReplyToStory,
} of unidentifiedStatus) {
const conversation = window.ConversationController.get(
destinationServiceId || destination
);
const conversation =
window.ConversationController.get(destinationServiceId);
if (!conversation || conversation.id === ourId) {
continue;
}
@ -2788,7 +2786,7 @@ export async function startApp(): Promise<void> {
if (unidentifiedStatus.length) {
unidentifiedDeliveries = unidentifiedStatus
.filter(item => Boolean(item.unidentified))
.map(item => item.destinationServiceId || item.destination)
.map(item => item.destinationServiceId)
.filter(isNotNil);
}
@ -2823,14 +2821,14 @@ export async function startApp(): Promise<void> {
// Works with 'sent' and 'message' data sent from MessageReceiver
const getMessageDescriptor = ({
destination,
destinationE164,
destinationServiceId,
envelopeId,
message,
source,
sourceDevice,
}: {
destination?: string;
destinationE164?: string;
destinationServiceId?: ServiceIdString;
envelopeId: string;
message: ProcessedDataMessage;
@ -2877,7 +2875,7 @@ export async function startApp(): Promise<void> {
};
}
const id = destinationServiceId || destination;
const id = destinationServiceId || destinationE164;
strictAssert(
id,
`${logId}: We need some sort of destination for the conversation`
@ -2910,7 +2908,7 @@ export async function startApp(): Promise<void> {
) {
const { mergePromises } =
window.ConversationController.maybeMergeContacts({
e164: data.destination,
e164: data.destinationE164,
aci: isAciString(data.destinationServiceId)
? data.destinationServiceId
: undefined,
@ -3241,14 +3239,13 @@ export async function startApp(): Promise<void> {
}
function onViewOnceOpenSync(ev: ViewOnceOpenSyncEvent): void {
const { source, sourceAci, timestamp } = ev;
log.info(`view once open sync ${source} ${timestamp}`);
const { sourceAci, timestamp } = ev;
log.info(`view once open sync ${sourceAci} ${timestamp}`);
strictAssert(sourceAci, 'ViewOnceOpen without sourceAci');
strictAssert(timestamp, 'ViewOnceOpen without timestamp');
const attributes: ViewOnceOpenSyncAttributesType = {
removeFromMessageReceiverCache: ev.confirm,
source,
sourceAci,
timestamp,
};
@ -3379,10 +3376,9 @@ export async function startApp(): Promise<void> {
}
function onMessageRequestResponse(ev: MessageRequestResponseEvent): void {
const { threadE164, threadAci, groupV2Id, messageRequestResponseType } = ev;
const { threadAci, groupV2Id, messageRequestResponseType } = ev;
log.info('onMessageRequestResponse', {
threadE164,
threadAci,
groupV2Id: `groupv2(${groupV2Id})`,
messageRequestResponseType,
@ -3398,7 +3394,6 @@ export async function startApp(): Promise<void> {
const attributes: MessageRequestAttributesType = {
envelopeId: ev.envelopeId,
removeFromMessageReceiverCache: ev.confirm,
threadE164,
threadAci,
groupV2Id,
type: messageRequestResponseType,

View file

@ -90,9 +90,7 @@ export async function sendCallingMessage(
groupId,
});
const callingMessage = Proto.CallingMessage.decode(
Bytes.fromBase64(protoBase64)
);
const callMessage = Proto.CallMessage.decode(Bytes.fromBase64(protoBase64));
const { ContentHint } = Proto.UnidentifiedSenderMessage.Message;
@ -101,7 +99,7 @@ export async function sendCallingMessage(
await handleMessageSend(
sendContentMessageToGroup({
contentHint: ContentHint.DEFAULT,
contentMessage: new Proto.Content({ callingMessage }),
contentMessage: new Proto.Content({ callMessage }),
isPartialSend,
messageId: undefined,
recipients,
@ -122,7 +120,7 @@ export async function sendCallingMessage(
await handleMessageSend(
messaging.sendCallingMessage(
sendTarget,
callingMessage,
callMessage,
timestamp,
urgent,
sendOptions

View file

@ -144,7 +144,7 @@ export async function sendDeleteForEveryone(
encodedDataMessage: Proto.DataMessage.encode(
proto.dataMessage
).finish(),
destination: conversation.get('e164'),
destinationE164: conversation.get('e164'),
destinationServiceId: conversation.getServiceId(),
expirationStartTimestamp: null,
options: sendOptions,

View file

@ -241,7 +241,7 @@ export async function sendDeleteStoryForEveryone(
// Sync message for other devices
await handleMessageSend(
messaging.sendSyncMessage({
destination: undefined,
destinationE164: undefined,
destinationServiceId,
storyMessageRecipients: updatedStoryRecipients?.map(
({ destinationServiceId: legacyDestinationUuid, ...rest }) => {

View file

@ -105,7 +105,7 @@ export async function sendDirectExpirationTimerUpdate(
encodedDataMessage: Proto.DataMessage.encode(
proto.dataMessage
).finish(),
destination: conversation.get('e164'),
destinationE164: conversation.get('e164'),
destinationServiceId: conversation.getServiceId(),
expirationStartTimestamp: null,
options: sendOptions,

View file

@ -583,7 +583,7 @@ export async function sendStory(
await messaging.sendSyncMessage({
// Note: these two fields will be undefined if we're sending to a group
destination: conversation.get('e164'),
destinationE164: conversation.get('e164'),
destinationServiceId: conversation.getServiceId(),
storyMessage: originalStoryMessage,
storyMessageRecipients,

View file

@ -13,7 +13,6 @@ export type MessageRequestAttributesType = {
groupV2Id?: string;
removeFromMessageReceiverCache: () => unknown;
threadAci?: AciString;
threadE164?: string;
type: number;
};
@ -33,17 +32,6 @@ export function forConversation(
const messageRequestValues = Array.from(messageRequests.values());
if (conversation.get('e164')) {
const syncByE164 = messageRequestValues.find(
item => item.threadE164 === conversation.get('e164')
);
if (syncByE164) {
log.info(`${logId}: Found early message request response for E164`);
remove(syncByE164);
return syncByE164;
}
}
if (conversation.getServiceId()) {
const syncByServiceId = messageRequestValues.find(
item => item.threadAci === conversation.getServiceId()
@ -74,9 +62,9 @@ export async function onResponse(
sync: MessageRequestAttributesType
): Promise<void> {
messageRequests.set(sync.envelopeId, sync);
const { threadE164, threadAci, groupV2Id } = sync;
const { threadAci, groupV2Id } = sync;
const logId = `MessageRequests.onResponse(groupv2(${groupV2Id}) ${threadAci} ${threadE164})`;
const logId = `MessageRequests.onResponse(groupv2(${groupV2Id}) ${threadAci}`;
try {
let conversation;
@ -85,9 +73,8 @@ export async function onResponse(
if (groupV2Id) {
conversation = window.ConversationController.get(groupV2Id);
}
if (!conversation && (threadE164 || threadAci)) {
if (!conversation && threadAci) {
conversation = window.ConversationController.lookupOrCreate({
e164: threadE164,
serviceId: threadAci,
reason: logId,
});

View file

@ -12,7 +12,6 @@ import { MessageModel } from '../models/messages';
export type ViewOnceOpenSyncAttributesType = {
removeFromMessageReceiverCache: () => unknown;
source?: string;
sourceAci: AciString;
timestamp: number;
};
@ -46,15 +45,6 @@ export function forMessage(
return syncBySourceServiceId;
}
const syncBySource = viewOnceSyncValues.find(item => {
return item.source === message.source && item.timestamp === message.sent_at;
});
if (syncBySource) {
log.info(`${logId}: Found early view once open sync for message`);
remove(syncBySource);
return syncBySource;
}
return null;
}
@ -69,23 +59,16 @@ export async function onSync(
const messages = await DataReader.getMessagesBySentAt(sync.timestamp);
const found = messages.find(item => {
const itemSourceAci = item.sourceServiceId;
const syncSourceAci = sync.sourceAci;
const itemSource = item.source;
const syncSource = sync.source;
const itemSource = item.sourceServiceId;
const syncSource = sync.sourceAci;
return Boolean(
(itemSourceAci && syncSourceAci && itemSourceAci === syncSourceAci) ||
(itemSource && syncSource && itemSource === syncSource)
);
return Boolean(itemSource && syncSource && itemSource === syncSource);
});
const syncSource = sync.source;
const syncSourceAci = sync.sourceAci;
const syncTimestamp = sync.timestamp;
const wasMessageFound = Boolean(found);
log.info(`${logId} receive:`, {
syncSource,
syncSourceAci,
syncTimestamp,
wasMessageFound,

View file

@ -153,17 +153,14 @@ export async function handleDataMessage(
? data.unidentifiedStatus
: [];
unidentifiedStatus.forEach(
({ destinationServiceId, destination, unidentified }) => {
const identifier = destinationServiceId || destination;
if (!identifier) {
unidentifiedStatus.forEach(({ destinationServiceId, unidentified }) => {
if (!destinationServiceId) {
return;
}
const destinationConversation =
window.ConversationController.lookupOrCreate({
serviceId: destinationServiceId,
e164: destination || undefined,
reason: `handleDataMessage(${initialMessage.timestamp})`,
});
if (!destinationConversation) {
@ -191,10 +188,9 @@ export async function handleDataMessage(
};
if (unidentified) {
unidentifiedDeliveriesSet.add(identifier);
unidentifiedDeliveriesSet.add(destinationServiceId);
}
}
);
});
toUpdate.set({
sendStateByConversationId,

View file

@ -408,7 +408,7 @@ export async function sendSyncMessage(
messaging.sendSyncMessage({
...encodedContent,
timestamp: targetTimestamp,
destination: conv.get('e164'),
destinationE164: conv.get('e164'),
destinationServiceId: conv.getServiceId(),
expirationStartTimestamp:
message.get('expirationStartTimestamp') || null,

View file

@ -262,21 +262,18 @@ function cleanForLogging(settings?: MediaDeviceSettings): unknown {
function protoToCallingMessage({
offer,
answer,
iceCandidates,
iceUpdate,
busy,
hangup,
destinationDeviceId,
opaque,
}: Proto.ICallingMessage): CallingMessage {
}: Proto.ICallMessage): CallingMessage {
const newIceCandidates: Array<IceCandidateMessage> = [];
if (iceCandidates) {
iceCandidates.forEach(candidate => {
if (candidate.callId && candidate.opaque) {
if (iceUpdate) {
iceUpdate.forEach(candidate => {
if (candidate.id && candidate.opaque) {
newIceCandidates.push(
new IceCandidateMessage(
candidate.callId,
Buffer.from(candidate.opaque)
)
new IceCandidateMessage(candidate.id, Buffer.from(candidate.opaque))
);
}
});
@ -284,23 +281,23 @@ function protoToCallingMessage({
return {
offer:
offer && offer.callId && offer.opaque
offer && offer.id && offer.opaque
? new OfferMessage(
offer.callId,
offer.id,
dropNull(offer.type) as number,
Buffer.from(offer.opaque)
)
: undefined,
answer:
answer && answer.callId && answer.opaque
? new AnswerMessage(answer.callId, Buffer.from(answer.opaque))
answer && answer.id && answer.opaque
? new AnswerMessage(answer.id, Buffer.from(answer.opaque))
: undefined,
iceCandidates: newIceCandidates.length > 0 ? newIceCandidates : undefined,
busy: busy && busy.callId ? new BusyMessage(busy.callId) : undefined,
busy: busy && busy.id ? new BusyMessage(busy.id) : undefined,
hangup:
hangup && hangup.callId
hangup && hangup.id
? new HangupMessage(
hangup.callId,
hangup.id,
dropNull(hangup.type) as number,
hangup.deviceId || 0
)
@ -2444,7 +2441,7 @@ export class CallingClass {
async handleCallingMessage(
envelope: ProcessedEnvelope,
callingMessage: Proto.ICallingMessage
callingMessage: Proto.ICallMessage
): Promise<void> {
const logId = `CallingClass.handleCallingMessage(${envelope.timestamp})`;
@ -2500,7 +2497,7 @@ export class CallingClass {
'rejecting call message.'
);
const { callId } = callingMessage.offer;
const { id: callId } = callingMessage.offer;
assertDev(callId != null, 'Call ID missing from offer');
const hangup = new HangupMessage(
@ -2516,7 +2513,7 @@ export class CallingClass {
const wasVideoCall =
callingMessage.offer.type ===
Proto.CallingMessage.Offer.Type.OFFER_VIDEO_CALL;
Proto.CallMessage.Offer.Type.OFFER_VIDEO_CALL;
const peerId = getPeerIdFromConversation(conversation.attributes);
const callDetails = getCallDetailsFromEndedDirectCall(
@ -2684,7 +2681,7 @@ export class CallingClass {
callingMessage.opaque.data = data;
const proto = callingMessageToProto(callingMessage, urgency);
const protoBytes = Proto.CallingMessage.encode(proto).finish();
const protoBytes = Proto.CallMessage.encode(proto).finish();
const protoBase64 = Bytes.toBase64(protoBytes);
await conversationJobQueue.add({
@ -2845,7 +2842,7 @@ export class CallingClass {
try {
const proto = callingMessageToProto(message, urgency);
const protoBytes = Proto.CallingMessage.encode(proto).finish();
const protoBytes = Proto.CallMessage.encode(proto).finish();
const protoBase64 = Bytes.toBase64(protoBytes);
await conversationJobQueue.add({

View file

@ -150,8 +150,8 @@ export function updateToSchemaVersion1280(
: undefined,
// Sadly not captured previously
messageAgeSec: 0,
reportingToken: decoded.reportingToken?.length
? decoded.reportingToken
reportingToken: decoded.reportSpamToken?.length
? decoded.reportSpamToken
: null,
});
} catch (error) {

View file

@ -222,7 +222,7 @@ describe('processDataMessage', () => {
reaction: {
emoji: '😎',
targetAuthorAci: ACI_1,
targetTimestamp: Long.fromNumber(TIMESTAMP),
targetSentTimestamp: Long.fromNumber(TIMESTAMP),
},
}).reaction,
{
@ -239,7 +239,7 @@ describe('processDataMessage', () => {
emoji: '😎',
remove: true,
targetAuthorAci: ACI_1,
targetTimestamp: Long.fromNumber(TIMESTAMP),
targetSentTimestamp: Long.fromNumber(TIMESTAMP),
},
}).reaction,
{

View file

@ -280,7 +280,6 @@ describe('pnp/PNI Signature', function (this: Mocha.Suite) {
unidentifiedStatus: [
{
destinationServiceId,
destination,
destinationPniIdentityKey: destinationPniIdentityKey.serialize(),
},
],

View file

@ -59,7 +59,7 @@ describe('SQL/updateToSchemaVersion1280', () => {
Proto.Envelope.encode({
destinationServiceId: THEIR_ACI,
content: Buffer.from('encrypted1'),
reportingToken: Buffer.from('token'),
reportSpamToken: Buffer.from('token'),
}).finish()
).toString('base64'),
serverTimestamp: 6,

View file

@ -58,7 +58,7 @@ describe('callingMessageToProto', () => {
);
assert.deepEqual(
droppableResult.opaque?.urgency,
Proto.CallingMessage.Opaque.Urgency.DROPPABLE
Proto.CallMessage.Opaque.Urgency.DROPPABLE
);
const urgentResult = callingMessageToProto(
@ -67,7 +67,7 @@ describe('callingMessageToProto', () => {
);
assert.deepEqual(
urgentResult.opaque?.urgency,
Proto.CallingMessage.Opaque.Urgency.HANDLE_IMMEDIATELY
Proto.CallMessage.Opaque.Urgency.HANDLE_IMMEDIATELY
);
});
@ -84,7 +84,7 @@ describe('callingMessageToProto', () => {
assert.deepEqual(result.opaque?.data, new Uint8Array([1, 2, 3]));
assert.deepEqual(
result.opaque?.urgency,
Proto.CallingMessage.Opaque.Urgency.HANDLE_IMMEDIATELY
Proto.CallMessage.Opaque.Urgency.HANDLE_IMMEDIATELY
);
});
});

View file

@ -447,8 +447,8 @@ export default class MessageReceiver
serverTimestamp,
urgent: isBoolean(decoded.urgent) ? decoded.urgent : true,
story: decoded.story ?? false,
reportingToken: Bytes.isNotEmpty(decoded.reportingToken)
? decoded.reportingToken
reportingToken: Bytes.isNotEmpty(decoded.reportSpamToken)
? decoded.reportSpamToken
: undefined,
groupId: undefined,
};
@ -1447,7 +1447,7 @@ export default class MessageReceiver
throw new Error('Unsealed envelope dropped due to stopping processing');
}
if (envelope.type === Proto.Envelope.Type.RECEIPT) {
if (envelope.type === Proto.Envelope.Type.SERVER_DELIVERY_RECEIPT) {
strictAssert(
envelope.sourceServiceId,
'Unsealed delivery receipt must have sourceServiceId'
@ -2145,7 +2145,7 @@ export default class MessageReceiver
logUnexpectedUrgentValue(envelope, 'sentSync');
const {
destination,
destinationE164,
destinationServiceId,
timestamp,
message: msg,
@ -2178,7 +2178,7 @@ export default class MessageReceiver
const ev = new SentEvent(
{
envelopeId: envelope.id,
destination: dropNull(destination),
destinationE164: dropNull(destinationE164),
destinationServiceId,
timestamp: timestamp?.toNumber(),
serverTimestamp: envelope.serverTimestamp,
@ -2673,8 +2673,8 @@ export default class MessageReceiver
this.#handleNullMessage(envelope);
return;
}
if (content.callingMessage) {
await this.#handleCallingMessage(envelope, content.callingMessage);
if (content.callMessage) {
await this.#handleCallingMessage(envelope, content.callMessage);
return;
}
if (content.receiptMessage) {
@ -2832,7 +2832,7 @@ export default class MessageReceiver
async #handleCallingMessage(
envelope: UnsealedEnvelope,
callingMessage: Proto.ICallingMessage
callingMessage: Proto.ICallMessage
): Promise<void> {
logUnexpectedUrgentValue(envelope, 'callingMessage');
@ -3215,7 +3215,7 @@ export default class MessageReceiver
}
const {
destination,
destinationE164,
destinationServiceId,
expirationStartTimestamp,
unidentifiedStatus,
@ -3227,7 +3227,7 @@ export default class MessageReceiver
const ev = new SentEvent(
{
envelopeId: envelope.id,
destination: dropNull(destination),
destinationE164: dropNull(destinationE164),
destinationServiceId,
timestamp: envelope.timestamp,
serverTimestamp: envelope.serverTimestamp,
@ -3274,7 +3274,6 @@ export default class MessageReceiver
const ev = new ViewOnceOpenSyncEvent(
{
source: dropNull(sync.sender),
sourceAci: sync.senderAci
? normalizeAci(sync.senderAci, 'handleViewOnceOpen.senderUuid')
: undefined,
@ -3311,7 +3310,6 @@ export default class MessageReceiver
const ev = new MessageRequestResponseEvent(
{
envelopeId: envelope.id,
threadE164: dropNull(sync.threadE164),
threadAci: sync.threadAci
? normalizeAci(
sync.threadAci,
@ -3454,11 +3452,10 @@ export default class MessageReceiver
logUnexpectedUrgentValue(envelope, 'readSync');
const reads = read.map(
({ timestamp, sender, senderAci }): ReadSyncEventData => ({
({ timestamp, senderAci }): ReadSyncEventData => ({
envelopeId: envelope.id,
envelopeTimestamp: envelope.timestamp,
timestamp: timestamp?.toNumber(),
sender: dropNull(sender),
senderAci: senderAci
? normalizeAci(senderAci, 'handleRead.senderAci')
: undefined,
@ -3486,9 +3483,8 @@ export default class MessageReceiver
logUnexpectedUrgentValue(envelope, 'viewSync');
const views = viewed.map(
({ timestamp, senderE164, senderAci }): ViewSyncEventData => ({
({ timestamp, senderAci }): ViewSyncEventData => ({
timestamp: timestamp?.toNumber(),
senderE164: dropNull(senderE164),
senderAci: senderAci
? normalizeAci(senderAci, 'handleViewed.senderAci')
: undefined,
@ -4027,18 +4023,13 @@ function envelopeTypeToCiphertextType(type: number | undefined): number {
if (type === Type.CIPHERTEXT) {
return CiphertextMessageType.Whisper;
}
if (type === Type.KEY_EXCHANGE) {
throw new Error(
'envelopeTypeToCiphertextType: Cannot process KEY_EXCHANGE messages'
);
}
if (type === Type.PLAINTEXT_CONTENT) {
return CiphertextMessageType.Plaintext;
}
if (type === Type.PREKEY_BUNDLE) {
return CiphertextMessageType.PreKey;
}
if (type === Type.RECEIPT) {
if (type === Type.SERVER_DELIVERY_RECEIPT) {
return CiphertextMessageType.Plaintext;
}
if (type === Type.UNIDENTIFIED_SENDER) {

View file

@ -414,7 +414,7 @@ class Message {
proto.reaction.emoji = this.reaction.emoji || null;
proto.reaction.remove = this.reaction.remove || false;
proto.reaction.targetAuthorAci = this.reaction.targetAuthorAci || null;
proto.reaction.targetTimestamp =
proto.reaction.targetSentTimestamp =
this.reaction.targetTimestamp === undefined
? null
: Long.fromNumber(this.reaction.targetTimestamp);
@ -422,7 +422,7 @@ class Message {
if (Array.isArray(this.preview)) {
proto.preview = this.preview.map(preview => {
const item = new Proto.DataMessage.Preview();
const item = new Proto.Preview();
item.title = preview.title;
item.url = preview.url;
item.description = preview.description || null;
@ -504,7 +504,8 @@ class Message {
}
if (this.quote) {
const { BodyRange: ProtoBodyRange, Quote } = Proto.DataMessage;
const ProtoBodyRange = Proto.BodyRange;
const { Quote } = Proto.DataMessage;
proto.quote = new Quote();
const { quote } = proto;
@ -1256,7 +1257,7 @@ export default class MessageSender {
encodedDataMessage,
encodedEditMessage,
timestamp,
destination,
destinationE164,
destinationServiceId,
expirationStartTimestamp,
conversationIdsSentTo = [],
@ -1270,7 +1271,7 @@ export default class MessageSender {
encodedDataMessage?: Uint8Array;
encodedEditMessage?: Uint8Array;
timestamp: number;
destination: string | undefined;
destinationE164: string | undefined;
destinationServiceId: ServiceIdString | undefined;
expirationStartTimestamp: number | null;
conversationIdsSentTo?: Iterable<string>;
@ -1293,8 +1294,8 @@ export default class MessageSender {
const dataMessage = Proto.DataMessage.decode(encodedDataMessage);
sentMessage.message = dataMessage;
}
if (destination) {
sentMessage.destination = destination;
if (destinationE164) {
sentMessage.destinationE164 = destinationE164;
}
if (destinationServiceId) {
sentMessage.destinationServiceId = destinationServiceId;
@ -1325,10 +1326,6 @@ export default class MessageSender {
new Proto.SyncMessage.Sent.UnidentifiedDeliveryStatus();
const conv = window.ConversationController.get(conversationId);
if (conv) {
const e164 = conv.get('e164');
if (e164) {
status.destination = e164;
}
const serviceId = conv.getServiceId();
if (serviceId) {
status.destinationServiceId = serviceId;
@ -1763,7 +1760,7 @@ export default class MessageSender {
`syncViewOnceOpen: ${viewOnceOpens.length} opens provided. Can only handle one.`
);
}
const { senderE164, senderAci, timestamp } = viewOnceOpens[0];
const { senderAci, timestamp } = viewOnceOpens[0];
if (!senderAci) {
throw new Error('syncViewOnceOpen: Missing senderAci');
@ -1774,9 +1771,6 @@ export default class MessageSender {
const syncMessage = MessageSender.createSyncMessage();
const viewOnceOpen = new Proto.SyncMessage.ViewOnceOpen();
if (senderE164 !== undefined) {
viewOnceOpen.sender = senderE164;
}
viewOnceOpen.senderAci = senderAci;
viewOnceOpen.timestamp = Long.fromNumber(timestamp);
syncMessage.viewOnceOpen = viewOnceOpen;
@ -1832,7 +1826,6 @@ export default class MessageSender {
static getMessageRequestResponseSync(
options: Readonly<{
threadE164?: string;
threadAci?: AciString;
groupId?: Uint8Array;
type: number;
@ -1843,9 +1836,6 @@ export default class MessageSender {
const syncMessage = MessageSender.createSyncMessage();
const response = new Proto.SyncMessage.MessageRequestResponse();
if (options.threadE164 !== undefined) {
response.threadE164 = options.threadE164;
}
if (options.threadAci !== undefined) {
response.threadAci = options.threadAci;
}
@ -1929,9 +1919,6 @@ export default class MessageSender {
const verified = new Proto.Verified();
verified.state = state;
if (destinationE164) {
verified.destination = destinationE164;
}
if (destinationAci) {
verified.destinationAci = destinationAci;
}
@ -1962,7 +1949,7 @@ export default class MessageSender {
async sendCallingMessage(
serviceId: ServiceIdString,
callingMessage: Readonly<Proto.ICallingMessage>,
callingMessage: Readonly<Proto.ICallMessage>,
timestamp: number,
urgent: boolean,
options?: Readonly<SendOptionsType>
@ -1970,7 +1957,7 @@ export default class MessageSender {
const recipients = [serviceId];
const contentMessage = new Proto.Content();
contentMessage.callingMessage = callingMessage;
contentMessage.callMessage = callingMessage;
const conversation = window.ConversationController.get(serviceId);

View file

@ -208,7 +208,7 @@ export class RetryRequestEvent extends ConfirmableEvent {
export type SentEventData = Readonly<{
envelopeId: string;
destination?: string;
destinationE164?: string;
destinationServiceId?: ServiceIdString;
timestamp?: number;
serverTimestamp: number;
@ -311,25 +311,21 @@ export class ConfigurationEvent extends ConfirmableEvent {
}
export type ViewOnceOpenSyncOptions = {
source?: string;
sourceAci?: AciString;
timestamp?: number;
};
export class ViewOnceOpenSyncEvent extends ConfirmableEvent {
public readonly source?: string;
public readonly sourceAci?: AciString;
public readonly timestamp?: number;
constructor(
{ source, sourceAci, timestamp }: ViewOnceOpenSyncOptions,
{ sourceAci, timestamp }: ViewOnceOpenSyncOptions,
confirm: ConfirmCallback
) {
super('viewOnceOpenSync', confirm);
this.source = source;
this.sourceAci = sourceAci;
this.timestamp = timestamp;
}
@ -345,8 +341,6 @@ export type MessageRequestResponseOptions = {
};
export class MessageRequestResponseEvent extends ConfirmableEvent {
public readonly threadE164?: string;
public readonly threadAci?: AciString;
public readonly messageRequestResponseType?: MessageRequestResponseOptions['messageRequestResponseType'];
@ -360,7 +354,6 @@ export class MessageRequestResponseEvent extends ConfirmableEvent {
constructor(
{
envelopeId,
threadE164,
threadAci,
messageRequestResponseType,
groupId,
@ -371,7 +364,6 @@ export class MessageRequestResponseEvent extends ConfirmableEvent {
super('messageRequestResponse', confirm);
this.envelopeId = envelopeId;
this.threadE164 = threadE164;
this.threadAci = threadAci;
this.messageRequestResponseType = messageRequestResponseType;
this.groupId = groupId;

View file

@ -198,7 +198,7 @@ function cleanLinkPreviewDate(value?: Long | null): number | undefined {
}
export function processPreview(
preview?: ReadonlyArray<Proto.DataMessage.IPreview> | null
preview?: ReadonlyArray<Proto.IPreview> | null
): ReadonlyArray<ProcessedPreview> | undefined {
if (!preview) {
return undefined;
@ -247,7 +247,7 @@ export function processReaction(
emoji: dropNull(reaction.emoji),
remove: Boolean(reaction.remove),
targetAuthorAci: normalizeAci(targetAuthorAci, 'Reaction.targetAuthorAci'),
targetTimestamp: reaction.targetTimestamp?.toNumber(),
targetTimestamp: reaction.targetSentTimestamp?.toNumber(),
};
}

View file

@ -36,8 +36,8 @@ export enum DisplayStyle {
// eslint-disable-next-line @typescript-eslint/no-redeclare
export namespace BodyRange {
// re-export for convenience
export type Style = Proto.DataMessage.BodyRange.Style;
export const { Style } = Proto.DataMessage.BodyRange;
export type Style = Proto.BodyRange.Style;
export const { Style } = Proto.BodyRange;
export type Mention = {
mentionAci: AciString;
@ -147,10 +147,7 @@ const MENTION_NAME = 'mention';
// We drop unknown bodyRanges and remove extra stuff so they serialize properly
export function filterAndClean(
ranges:
| ReadonlyArray<Proto.DataMessage.IBodyRange | RawBodyRange>
| undefined
| null
ranges: ReadonlyArray<Proto.IBodyRange | RawBodyRange> | undefined | null
): ReadonlyArray<RawBodyRange> | undefined {
if (!ranges) {
return undefined;

View file

@ -307,7 +307,8 @@ export function getCallLogEventForProto(
const directionToProto = {
[CallDirection.Incoming]: Proto.SyncMessage.CallEvent.Direction.INCOMING,
[CallDirection.Outgoing]: Proto.SyncMessage.CallEvent.Direction.OUTGOING,
[CallDirection.Unknown]: Proto.SyncMessage.CallEvent.Direction.UNKNOWN,
[CallDirection.Unknown]:
Proto.SyncMessage.CallEvent.Direction.UNKNOWN_DIRECTION,
};
const typeToProto = {
@ -315,7 +316,7 @@ const typeToProto = {
[CallType.Video]: Proto.SyncMessage.CallEvent.Type.VIDEO_CALL,
[CallType.Group]: Proto.SyncMessage.CallEvent.Type.GROUP_CALL,
[CallType.Adhoc]: Proto.SyncMessage.CallEvent.Type.AD_HOC_CALL,
[CallType.Unknown]: Proto.SyncMessage.CallEvent.Type.UNKNOWN,
[CallType.Unknown]: Proto.SyncMessage.CallEvent.Type.UNKNOWN_TYPE,
};
const statusToProto: Record<
@ -335,7 +336,7 @@ const statusToProto: Record<
[CallStatusValue.Ringing]: null,
[CallStatusValue.Joined]: null,
[CallStatusValue.JoinedAdhoc]: Proto.SyncMessage.CallEvent.Event.ACCEPTED,
[CallStatusValue.Unknown]: Proto.SyncMessage.CallEvent.Event.UNKNOWN,
[CallStatusValue.Unknown]: Proto.SyncMessage.CallEvent.Event.UNKNOWN_EVENT,
};
function shouldSyncStatus(callStatus: CallStatus) {

View file

@ -19,8 +19,8 @@ export function callingMessageToProto(
opaque,
}: CallingMessage,
urgency?: CallMessageUrgency
): Proto.ICallingMessage {
let opaqueField: undefined | Proto.CallingMessage.IOpaque;
): Proto.ICallMessage {
let opaqueField: undefined | Proto.CallMessage.IOpaque;
if (opaque) {
opaqueField = {
...opaque,
@ -38,7 +38,7 @@ export function callingMessageToProto(
offer: offer
? {
...offer,
callId: Long.fromValue(offer.callId),
id: Long.fromValue(offer.callId),
type: offer.type as number,
opaque: bufferToProto(offer.opaque),
}
@ -46,11 +46,11 @@ export function callingMessageToProto(
answer: answer
? {
...answer,
callId: Long.fromValue(answer.callId),
id: Long.fromValue(answer.callId),
opaque: bufferToProto(answer.opaque),
}
: undefined,
iceCandidates: iceCandidates
iceUpdate: iceCandidates
? iceCandidates.map(candidate => {
return {
...candidate,
@ -62,13 +62,13 @@ export function callingMessageToProto(
busy: busy
? {
...busy,
callId: Long.fromValue(busy.callId),
id: Long.fromValue(busy.callId),
}
: undefined,
hangup: hangup
? {
...hangup,
callId: Long.fromValue(hangup.callId),
id: Long.fromValue(hangup.callId),
type: hangup.type as number,
}
: undefined,
@ -92,14 +92,14 @@ function bufferToProto(
function urgencyToProto(
urgency: CallMessageUrgency
): Proto.CallingMessage.Opaque.Urgency {
): Proto.CallMessage.Opaque.Urgency {
switch (urgency) {
case CallMessageUrgency.Droppable:
return Proto.CallingMessage.Opaque.Urgency.DROPPABLE;
return Proto.CallMessage.Opaque.Urgency.DROPPABLE;
case CallMessageUrgency.HandleImmediately:
return Proto.CallingMessage.Opaque.Urgency.HANDLE_IMMEDIATELY;
return Proto.CallMessage.Opaque.Urgency.HANDLE_IMMEDIATELY;
default:
log.error(missingCaseError(urgency));
return Proto.CallingMessage.Opaque.Urgency.DROPPABLE;
return Proto.CallMessage.Opaque.Urgency.DROPPABLE;
}
}

View file

@ -76,7 +76,7 @@ export async function wrapWithSyncMessageSend({
});
await handleMessageSend(
sender.sendSyncMessage({
destination: conversation.get('e164'),
destinationE164: conversation.get('e164'),
destinationServiceId: conversation.getServiceId(),
encodedDataMessage: dataMessage,
expirationStartTimestamp: null,