/* eslint-disable no-unused-expressions */ import * as BetterSqlite3 from '@signalapp/better-sqlite3'; import { isArray } from 'lodash'; import { CONVERSATIONS_TABLE } from '../database_utility'; import { getIdentityKeys, sqlNode } from '../sql'; export const hasDebugEnvVariable = Boolean(process.env.SESSION_DEBUG); /** * Verify we are calling the correct helper function in the correct migration before running it. * * You don't need to call this on functions that aren't being exported as helper functions in a file * @param version * @param targetVersion */ export function checkTargetMigration(version: number, targetVersion: number) { if (version !== targetVersion) { throw new Error(`Migration target mismatch. Expected: ${targetVersion}, Found: ${version}`); } } /** * Returns the logged in user conversation attributes and the keys. * If the keys exists but a conversation for that pubkey does not exist yet, the keys are still returned */ export function getLoggedInUserConvoDuringMigration(db: BetterSqlite3.Database) { const ourKeys = getIdentityKeys(db); if (!ourKeys || !ourKeys.publicKeyHex || !ourKeys.privateEd25519) { return null; } const ourConversation = db.prepare(`SELECT * FROM ${CONVERSATIONS_TABLE} WHERE id = $id;`).get({ id: ourKeys.publicKeyHex, }) as Record | null; return { ourKeys, ourConversation: ourConversation || null }; } export function getBlockedNumbersDuringMigration(db: BetterSqlite3.Database) { try { const blockedItem = sqlNode.getItemById('blocked', db); if (!blockedItem) { return []; } const foundBlocked = blockedItem?.value; hasDebugEnvVariable && console.info('foundBlockedNumbers during migration', foundBlocked); if (isArray(foundBlocked)) { return foundBlocked; } return []; } catch (e) { console.info('failed to read blocked numbers. Considering no blocked numbers', e.stack); return []; } }