-import org.whispersystems.signalservice.api.messages.SignalServiceContent;
-import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope;
-import org.whispersystems.signalservice.api.util.InvalidNumberException;
-
-import java.util.List;
-
-import static org.asamk.signal.util.Util.getLegacyIdentifier;
-
-public class JsonMessageEnvelope {
-
- @JsonProperty
- final String source;
-
- @JsonProperty
- final String sourceName;
-
- @JsonProperty
- final Integer sourceDevice;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final String relay;
-
- @JsonProperty
- final long timestamp;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final JsonDataMessage dataMessage;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final JsonSyncMessage syncMessage;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final JsonCallMessage callMessage;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final JsonReceiptMessage receiptMessage;
-
- @JsonProperty
- @JsonInclude(JsonInclude.Include.NON_NULL)
- final JsonTypingMessage typingMessage;
-
- public JsonMessageEnvelope(SignalServiceEnvelope envelope, SignalServiceContent content, Manager m) {
- if (!envelope.isUnidentifiedSender() && envelope.hasSource()) {
- var source = envelope.getSourceAddress();
- this.source = getLegacyIdentifier(source);
- this.sourceDevice = envelope.getSourceDevice();
- this.relay = source.getRelay().orNull();
- } else if (envelope.isUnidentifiedSender() && content != null) {
- this.source = getLegacyIdentifier(content.getSender());
- this.sourceDevice = content.getSenderDevice();
- this.relay = null;
+import org.asamk.signal.manager.api.MessageEnvelope;
+import org.asamk.signal.manager.api.RecipientAddress;
+import org.asamk.signal.manager.api.RecipientIdentifier;
+import org.asamk.signal.manager.api.UntrustedIdentityException;
+
+import java.util.UUID;
+
+public record JsonMessageEnvelope(
+ @Deprecated String source,
+ String sourceNumber,
+ String sourceUuid,
+ String sourceName,
+ Integer sourceDevice,
+ long timestamp,
+ long serverReceivedTimestamp,
+ long serverDeliveredTimestamp,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonDataMessage dataMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonEditMessage editMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonStoryMessage storyMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonSyncMessage syncMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonCallMessage callMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonReceiptMessage receiptMessage,
+ @JsonInclude(JsonInclude.Include.NON_NULL) JsonTypingMessage typingMessage
+) {
+
+ public static JsonMessageEnvelope from(MessageEnvelope envelope, Throwable exception, Manager m) {
+ final RecipientAddress sourceAddress;
+ final Integer sourceDevice;
+ if (envelope.sourceAddress().isPresent()) {
+ sourceAddress = envelope.sourceAddress().get();
+ sourceDevice = envelope.sourceDevice();
+ } else if (exception instanceof UntrustedIdentityException e) {
+ sourceAddress = e.getSender();
+ sourceDevice = e.getSenderDevice();