/** * Config dumps sql calls */ import { compact, uniq } from 'lodash'; import { CONFIG_DUMP_TABLE, ConfigDumpDataNode, ConfigDumpRow, ConfigDumpRowWithoutData, } from '../../types/sqlSharedTypes'; // eslint-disable-next-line import/no-unresolved, import/extensions import { ConfigWrapperObjectTypes } from '../../webworker/workers/browser/libsession_worker_functions'; import { assertGlobalInstance } from '../sqlInstance'; function parseRow( row: Pick ): ConfigDumpRow | null { const parsedNoData = parseRowNoData(row); if (!parsedNoData) { return null; } return { ...parsedNoData, data: row.data }; } function parseRowNoData( row: Pick ): ConfigDumpRowWithoutData | null { const toRet: ConfigDumpRowWithoutData = { publicKey: row.publicKey, variant: row.variant, }; return toRet; } export function uniqCompacted(list: Array): Array { if (!list || !list.length) { return []; } return uniq(compact(list)); } export const configDumpData: ConfigDumpDataNode = { getByVariantAndPubkey: (variant: ConfigWrapperObjectTypes, publicKey: string) => { const rows = assertGlobalInstance() .prepare( `SELECT publicKey, variant, data FROM ${CONFIG_DUMP_TABLE} WHERE variant = $variant AND publicKey = $publicKey;` ) .all({ publicKey, variant, }); if (!rows) { return []; } return compact(rows.map(parseRow)); }, getAllDumpsWithData: () => { const rows = assertGlobalInstance() .prepare(`SELECT variant, publicKey, data from ${CONFIG_DUMP_TABLE};`) .all(); if (!rows) { return []; } return compact(rows.map(parseRow)); }, getAllDumpsWithoutData: () => { const rows = assertGlobalInstance() .prepare(`SELECT variant, publicKey from ${CONFIG_DUMP_TABLE};`) .all(); if (!rows) { return []; } return compact(rows.map(parseRowNoData)); }, saveConfigDump: ({ data, publicKey, variant }: ConfigDumpRow) => { assertGlobalInstance() .prepare( `INSERT OR REPLACE INTO ${CONFIG_DUMP_TABLE} ( publicKey, variant, data ) values ( $publicKey, $variant, $data );` ) .run({ publicKey, variant, data, }); }, };