|
@ -6,6 +6,12 @@ import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; |
|
|
import { arrayBufferToBase64 } from "@/libs/crypto"; |
|
|
import { arrayBufferToBase64 } from "@/libs/crypto"; |
|
|
import { logger } from "@/utils/logger"; |
|
|
import { logger } from "@/utils/logger"; |
|
|
|
|
|
|
|
|
|
|
|
// Database result interface for SQLite queries
|
|
|
|
|
|
interface DatabaseResult { |
|
|
|
|
|
values?: unknown[][]; |
|
|
|
|
|
[key: string]: unknown; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Generate a random secret for the secret table
|
|
|
// Generate a random secret for the secret table
|
|
|
|
|
|
|
|
|
// It's not really secure to maintain the secret next to the user's data.
|
|
|
// It's not really secure to maintain the secret next to the user's data.
|
|
@ -122,6 +128,7 @@ const MIGRATIONS = [ |
|
|
id TEXT PRIMARY KEY, |
|
|
id TEXT PRIMARY KEY, |
|
|
blobB64 TEXT |
|
|
blobB64 TEXT |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS migrations ( |
|
|
CREATE TABLE IF NOT EXISTS migrations ( |
|
|
name TEXT PRIMARY KEY, |
|
|
name TEXT PRIMARY KEY, |
|
@ -177,25 +184,28 @@ export async function runMigrations<T>( |
|
|
try { |
|
|
try { |
|
|
// Check if we have accounts but no active selection
|
|
|
// Check if we have accounts but no active selection
|
|
|
const accountsResult = await sqlQuery("SELECT COUNT(*) FROM accounts"); |
|
|
const accountsResult = await sqlQuery("SELECT COUNT(*) FROM accounts"); |
|
|
const accountsCount = accountsResult |
|
|
const accountsCount = |
|
|
? (accountsResult.values?.[0]?.[0] as number) |
|
|
accountsResult && (accountsResult as DatabaseResult).values |
|
|
: 0; |
|
|
? ((accountsResult as DatabaseResult).values?.[0]?.[0] as number) |
|
|
|
|
|
: 0; |
|
|
|
|
|
|
|
|
const activeResult = await sqlQuery( |
|
|
const activeResult = await sqlQuery( |
|
|
"SELECT activeDid FROM active_identity WHERE id = 1", |
|
|
"SELECT activeDid FROM active_identity WHERE id = 1", |
|
|
); |
|
|
); |
|
|
const activeDid = activeResult |
|
|
const activeDid = |
|
|
? (activeResult.values?.[0]?.[0] as string) |
|
|
activeResult && (activeResult as DatabaseResult).values |
|
|
: null; |
|
|
? ((activeResult as DatabaseResult).values?.[0]?.[0] as string) |
|
|
|
|
|
: null; |
|
|
|
|
|
|
|
|
if (accountsCount > 0 && (!activeDid || activeDid === "")) { |
|
|
if (accountsCount > 0 && (!activeDid || activeDid === "")) { |
|
|
logger.info("[Migration] Auto-selecting first account as active"); |
|
|
logger.info("[Migration] Auto-selecting first account as active"); |
|
|
const firstAccountResult = await sqlQuery( |
|
|
const firstAccountResult = await sqlQuery( |
|
|
"SELECT did FROM accounts ORDER BY dateCreated, did LIMIT 1", |
|
|
"SELECT did FROM accounts ORDER BY dateCreated, did LIMIT 1", |
|
|
); |
|
|
); |
|
|
const firstAccountDid = firstAccountResult |
|
|
const firstAccountDid = |
|
|
? (firstAccountResult.values?.[0]?.[0] as string) |
|
|
firstAccountResult && (firstAccountResult as DatabaseResult).values |
|
|
: null; |
|
|
? ((firstAccountResult as DatabaseResult).values?.[0]?.[0] as string) |
|
|
|
|
|
: null; |
|
|
|
|
|
|
|
|
if (firstAccountDid) { |
|
|
if (firstAccountDid) { |
|
|
await sqlExec( |
|
|
await sqlExec( |
|
|