Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions docs/UPSTREAM-MERGE-GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
<!--
Copyright 2026 Lockdown Systems LLC
SPDX-License-Identifier: AGPL-3.0-only
-->

# Observer Vault: Upstream Merge Guide

This document describes Observer Vault's customizations from Signal-Desktop and how to merge upstream releases.
Expand Down Expand Up @@ -181,10 +186,10 @@ Upstream changes function signatures:
// CONFLICT: Function signature changed
// SOLUTION: Update to new signature but keep our logic
export function shouldShowCallQualitySurvey(
newParam: NewType, // Accept new parameter
newParam: NewType, // Accept new parameter
cqsTestMode?: boolean
): boolean {
return false; // Keep our disabled implementation
return false; // Keep our disabled implementation
}
```

Expand Down
2 changes: 2 additions & 0 deletions scripts/audit-customizations.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/usr/bin/env bash
# Copyright 2026 Lockdown Systems LLC
# SPDX-License-Identifier: AGPL-3.0-only
#
# List all Observer Vault customizations
#
Expand Down
2 changes: 2 additions & 0 deletions scripts/fix-ringrtc-imports.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/usr/bin/env bash
# Copyright 2026 Lockdown Systems LLC
# SPDX-License-Identifier: AGPL-3.0-only
#
# Fix RingRTC imports after merge
#
Expand Down
2 changes: 2 additions & 0 deletions scripts/merge-upstream.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/usr/bin/env bash
# Copyright 2026 Lockdown Systems LLC
# SPDX-License-Identifier: AGPL-3.0-only
#
# Observer Vault: Merge Upstream Signal-Desktop
#
Expand Down
5 changes: 2 additions & 3 deletions ts/background.preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -557,9 +557,8 @@ export async function startApp(): Promise<void> {
// Observer Vault: Initialize settings (stories off, camera/mic disabled)
drop(
(async () => {
const { initializeObserverVaultSettings } = await import(
'./observervault/initializeSettings.preload.js'
);
const { initializeObserverVaultSettings } =
await import('./observervault/initializeSettings.preload.js');
await initializeObserverVaultSettings();
})()
);
Expand Down
5 changes: 4 additions & 1 deletion ts/calling/VideoSupport.preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@

// Observer Vault: videoPixelFormatToEnum unused (spawnSender removed)
// import { videoPixelFormatToEnum } from '@lockdown-systems/ringrtc';
import type { VideoFrameSender, VideoFrameSource } from '@lockdown-systems/ringrtc';
import type {
VideoFrameSender,
VideoFrameSource,
} from '@lockdown-systems/ringrtc';
import type { RefObject } from 'react';
import { createLogger } from '../logging/log.std.js';
// Observer Vault: toLogFormat unused (startCapturing removed)
Expand Down
16 changes: 16 additions & 0 deletions ts/messageModifiers/AttachmentDownloads.preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ import {
} from '../util/migrations.preload.js';
import { getMessageById } from '../messages/getMessageById.preload.js';
import { trimMessageWhitespace } from '../types/BodyRange.std.js';
// Observer Vault: Import the immediate save function
import { saveAttachmentToObserverVault } from '../observervault/messageHandler.preload.js';
import { drop } from '../util/drop.std.js';

const { omit } = lodash;

Expand Down Expand Up @@ -88,6 +91,19 @@ export async function addAttachmentToMessage(
return;
}

// Observer Vault: Immediately save downloaded attachments to avoid loss from
// message expiration. This runs synchronously with download completion.
if (type === 'attachment' && isDownloaded(attachment)) {
drop(
saveAttachmentToObserverVault(attachment, messageId).catch(error => {
log.error(
`${logPrefix}: Observer Vault save failed:`,
error instanceof Error ? error.message : String(error)
);
})
);
}

if (type === 'long-message') {
let handledAnywhere = false;
let attachmentData: Uint8Array | undefined;
Expand Down
9 changes: 5 additions & 4 deletions ts/observervault/initializeSettings.preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export async function initializeObserverVaultSettings(): Promise<void> {
try {
const { getStoriesDisabled } = await import('../util/stories.preload.js');
const storiesDisabled = getStoriesDisabled();

if (!storiesDisabled) {
log.info('Stories not disabled, disabling now...');
await setStoriesDisabled(true);
Expand All @@ -41,7 +41,7 @@ export async function initializeObserverVaultSettings(): Promise<void> {
// 2. Disable microphone access
try {
const hasMediaPermissions = await window.Events.getMediaPermissions();

if (hasMediaPermissions !== false) {
log.info('Microphone access not disabled, disabling now...');
await window.IPC.setMediaPermissions(false);
Expand All @@ -55,8 +55,9 @@ export async function initializeObserverVaultSettings(): Promise<void> {

// 3. Disable camera access
try {
const hasMediaCameraPermissions = await window.Events.getMediaCameraPermissions();

const hasMediaCameraPermissions =
await window.Events.getMediaCameraPermissions();

if (hasMediaCameraPermissions !== false) {
log.info('Camera access not disabled, disabling now...');
await window.IPC.setMediaCameraPermissions(false);
Expand Down
Loading
Loading