38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
import { MatrixClient } from 'matrix-js-sdk';
|
|
import { isNativePlatform } from './capacitor';
|
|
|
|
// Mirrors the Java-side key constants in CallDeclineReceiver. Capacitor
|
|
// Preferences default group lands in shared_prefs/CapacitorStorage.xml under
|
|
// MODE_PRIVATE (see node_modules/@capacitor/preferences PreferencesConfiguration).
|
|
const SESSION_KEY = 'vojo.matrixSession';
|
|
|
|
// Synapse here ships without MSC2918 refresh tokens (docs/ai/server-side.md
|
|
// homeserver.yaml has no session_lifetime) and initClient() never wires
|
|
// tokenRefreshFunction — access tokens don't rotate. One write at client
|
|
// mount + one clear at logout is the whole lifecycle.
|
|
export const writeSessionBridge = async (mx: MatrixClient): Promise<void> => {
|
|
if (!isNativePlatform()) return;
|
|
const accessToken = mx.getAccessToken();
|
|
const baseUrl = mx.baseUrl;
|
|
const userId = mx.getUserId();
|
|
if (!accessToken || !baseUrl || !userId) return;
|
|
try {
|
|
const { Preferences } = await import('@capacitor/preferences');
|
|
await Preferences.set({
|
|
key: SESSION_KEY,
|
|
value: JSON.stringify({ accessToken, baseUrl, userId }),
|
|
});
|
|
} catch {
|
|
/* non-fatal — receiver falls back to null-prefs path (preserves ring) */
|
|
}
|
|
};
|
|
|
|
export const clearSessionBridge = async (): Promise<void> => {
|
|
if (!isNativePlatform()) return;
|
|
try {
|
|
const { Preferences } = await import('@capacitor/preferences');
|
|
await Preferences.remove({ key: SESSION_KEY });
|
|
} catch {
|
|
/* ignore */
|
|
}
|
|
};
|