Merge branch 'migrate-dexie-to-sqlite'

This commit is contained in:
2025-06-20 11:49:51 -06:00
27 changed files with 4782 additions and 965 deletions

View File

@@ -566,7 +566,7 @@ export default class ContactImportView extends Vue {
this.checkingImports = true;
try {
const jwt: string = getContactJwtFromJwtUrl(jwtInput);
const jwt: string = getContactJwtFromJwtUrl(jwtInput) || "";
const payload = decodeEndorserJwt(jwt).payload;
if (Array.isArray(payload.contacts)) {

File diff suppressed because it is too large Load Diff

View File

@@ -106,12 +106,12 @@ Raymer * @version 1.0.0 */
</button>
</div>
<UserNameDialog ref="userNameDialog" />
<div v-if="PASSKEYS_ENABLED" class="flex justify-end w-full">
<div class="flex justify-end w-full">
<router-link
:to="{ name: 'start' }"
class="block text-right text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white mt-2 px-2 py-3 rounded-md"
>
See all your options first
See advanced options
</router-link>
</div>
</div>

View File

@@ -51,7 +51,7 @@
<div v-if="numAccounts == 1" class="mt-4">
<input v-model="shouldErase" type="checkbox" class="mr-2" />
<label>Erase the previous identifier.</label>
<label>Erase previous identifiers.</label>
</div>
<div v-if="isNotProdServer()" class="mt-4 text-blue-500">
@@ -88,17 +88,9 @@ import { Router } from "vue-router";
import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil";
import {
accountsDBPromise,
retrieveSettingsForActiveAccount,
} from "../db/index";
import {
DEFAULT_ROOT_DERIVATION_PATH,
deriveAddress,
newIdentifier,
} from "../libs/crypto";
import { retrieveAccountCount, saveNewIdentity } from "../libs/util";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
import { retrieveSettingsForActiveAccount } from "../db/index";
import { DEFAULT_ROOT_DERIVATION_PATH } from "../libs/crypto";
import { retrieveAccountCount, importFromMnemonic } from "../libs/util";
import { logger } from "../utils/logger";
@Component({
@@ -115,12 +107,9 @@ export default class ImportAccountView extends Vue {
$router!: Router;
apiServer = "";
address = "";
derivationPath = DEFAULT_ROOT_DERIVATION_PATH;
mnemonic = "";
numAccounts = 0;
privateHex = "";
publicHex = "";
showAdvanced = false;
shouldErase = false;
@@ -143,33 +132,16 @@ export default class ImportAccountView extends Vue {
}
public async fromMnemonic() {
const mne: string = this.mnemonic.trim().toLowerCase();
try {
[this.address, this.privateHex, this.publicHex] = deriveAddress(
mne,
await importFromMnemonic(
this.mnemonic,
this.derivationPath,
this.shouldErase,
);
const newId = newIdentifier(
this.address,
this.publicHex,
this.privateHex,
this.derivationPath,
);
const accountsDB = await accountsDBPromise;
if (this.shouldErase) {
const platformService = PlatformServiceFactory.getInstance();
await platformService.dbExec("DELETE FROM accounts");
if (USE_DEXIE_DB) {
await accountsDB.accounts.clear();
}
}
await saveNewIdentity(newId, mne, this.derivationPath);
this.$router.push({ name: "account" });
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (err: any) {
logger.error("Error saving mnemonic & updating settings:", err);
logger.error("Error importing from mnemonic:", err);
if (err == "Error: invalid mnemonic") {
this.$notify(
{

View File

@@ -82,6 +82,18 @@
Derive new address from existing seed
</a>
</div>
<!-- Database Migration Section -->
<div class="mt-8 pt-6 border-t border-gray-200">
<div class="flex justify-center">
<router-link
:to="{ name: 'database-migration' }"
class="block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
>
Migrate My Old Data
</router-link>
</div>
</div>
</div>
</div>
</section>

View File

@@ -182,6 +182,15 @@
>
Accounts
</button>
<button
class="text-sm text-blue-600 hover:text-blue-800 underline"
@click="
sqlQuery = 'SELECT * FROM contacts;';
executeSql();
"
>
Contacts
</button>
<button
class="text-sm text-blue-600 hover:text-blue-800 underline"
@click="