Browse Source

WIP: restore database migration system and improve error handling

- Restore runMigrations functionality for database schema migrations
- Remove indexedDBMigrationService.ts (was for IndexedDB to SQLite migration)
- Recreate migrationService.ts and db-sql/migration.ts for schema management
- Add proper TypeScript error handling with type guards in AccountViewView
- Fix CreateAndSubmitClaimResult property access in QuickActionBvcBeginView
- Remove LeafletMouseEvent from Vue components array (it's a type, not component)
- Add null check for UserNameDialog callback to prevent undefined assignment
- Implement extractErrorMessage helper function for consistent error handling
- Update router to remove database-migration route

The migration system now properly handles database schema evolution
across app versions, while the IndexedDB to SQLite migration service
has been removed as it was specific to that one-time migration.
streamline-attempt
Matthew Raymer 2 weeks ago
parent
commit
daed0a97c9
  1. 8
      src/App.vue
  2. 4
      src/components/DataExportSection.vue
  3. 32
      src/components/FeedFilters.vue
  4. 10
      src/components/GiftedDialog.vue
  5. 11
      src/components/GiftedPrompts.vue
  6. 11
      src/components/ImageMethodDialog.vue
  7. 16
      src/components/MembersList.vue
  8. 7
      src/components/OfferDialog.vue
  9. 29
      src/components/OnboardingDialog.vue
  10. 11
      src/components/PhotoDialog.vue
  11. 11
      src/components/PushNotificationPermission.vue
  12. 7
      src/components/TopMessage.vue
  13. 12
      src/components/UserNameDialog.vue
  14. 6
      src/components/World/components/objects/landmarks.js
  15. 2
      src/constants/app.ts
  16. 2
      src/db/index.ts
  17. 2
      src/db/tables/accounts.ts
  18. 1
      src/interfaces/index.ts
  19. 4
      src/libs/endorserServer.ts
  20. 108
      src/libs/util.ts
  21. 5
      src/router/index.ts
  22. 1397
      src/services/indexedDBMigrationService.ts
  23. 2
      src/services/platforms/CapacitorPlatformService.ts
  24. 7
      src/test/index.ts
  25. 224
      src/views/AccountViewView.vue
  26. 7
      src/views/ClaimAddRawView.vue
  27. 14
      src/views/ClaimCertificateView.vue
  28. 13
      src/views/ClaimReportCertificateView.vue
  29. 12
      src/views/ClaimView.vue
  30. 11
      src/views/ConfirmGiftView.vue
  31. 11
      src/views/ContactAmountsView.vue
  32. 16
      src/views/ContactEditView.vue
  33. 16
      src/views/ContactGiftingView.vue
  34. 31
      src/views/ContactImportView.vue
  35. 17
      src/views/ContactQRScanFullView.vue
  36. 32
      src/views/ContactQRScanShowView.vue
  37. 75
      src/views/ContactsView.vue
  38. 32
      src/views/DIDView.vue
  39. 1492
      src/views/DatabaseMigration.vue
  40. 9
      src/views/DiscoverView.vue
  41. 16
      src/views/GiftedDetailsView.vue
  42. 8
      src/views/HelpNotificationsView.vue
  43. 12
      src/views/HelpView.vue
  44. 54
      src/views/HomeView.vue
  45. 18
      src/views/IdentitySwitcherView.vue
  46. 8
      src/views/ImportAccountView.vue
  47. 6
      src/views/ImportDerivedAccountView.vue
  48. 14
      src/views/InviteOneAcceptView.vue
  49. 22
      src/views/InviteOneView.vue
  50. 13
      src/views/LogView.vue
  51. 50
      src/views/NewActivityView.vue
  52. 14
      src/views/NewEditAccountView.vue
  53. 11
      src/views/NewEditProjectView.vue
  54. 11
      src/views/OfferDetailsView.vue
  55. 6
      src/views/OnboardMeetingListView.vue
  56. 7
      src/views/OnboardMeetingMembersView.vue
  57. 7
      src/views/OnboardMeetingSetupView.vue
  58. 11
      src/views/ProjectViewView.vue
  59. 12
      src/views/ProjectsView.vue
  60. 18
      src/views/QuickActionBvcBeginView.vue
  61. 17
      src/views/QuickActionBvcEndView.vue
  62. 12
      src/views/RecentOffersToUserProjectsView.vue
  63. 10
      src/views/RecentOffersToUserView.vue
  64. 23
      src/views/SearchAreaView.vue
  65. 8
      src/views/SeedBackupView.vue
  66. 12
      src/views/ShareMyContactInfoView.vue
  67. 19
      src/views/SharedPhotoView.vue
  68. 7
      src/views/StartView.vue
  69. 19
      src/views/TestView.vue
  70. 9
      src/views/UserProfileView.vue

8
src/App.vue

@ -331,9 +331,8 @@
<script lang="ts"> <script lang="ts">
import { Vue, Component } from "vue-facing-decorator"; import { Vue, Component } from "vue-facing-decorator";
import { NotificationIface, USE_DEXIE_DB } from "./constants/app"; import { NotificationIface } from "./constants/app";
import * as databaseUtil from "./db/databaseUtil"; import * as databaseUtil from "./db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "./db/index";
import { logConsoleAndDb } from "./db/databaseUtil"; import { logConsoleAndDb } from "./db/databaseUtil";
import { logger } from "./utils/logger"; import { logger } from "./utils/logger";
@ -399,11 +398,8 @@ export default class App extends Vue {
try { try {
logger.log("Retrieving settings for the active account..."); logger.log("Retrieving settings for the active account...");
let settings: Settings = const settings: Settings =
await databaseUtil.retrieveSettingsForActiveAccount(); await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
logger.log("Retrieved settings:", settings); logger.log("Retrieved settings:", settings);
const notifyingNewActivity = !!settings?.notifyingNewActivityTime; const notifyingNewActivity = !!settings?.notifyingNewActivityTime;

4
src/components/DataExportSection.vue

@ -141,10 +141,6 @@ export default class DataExportSection extends Vue {
result, result,
) as unknown as Contact[]; ) as unknown as Contact[];
} }
// if (USE_DEXIE_DB) {
// await db.open();
// allContacts = await db.contacts.toArray();
// }
// Convert contacts to export format // Convert contacts to export format
const exportData = contactsToExportJson(allContacts); const exportData = contactsToExportJson(allContacts);

32
src/components/FeedFilters.vue

@ -100,7 +100,6 @@ import {
} from "@vue-leaflet/vue-leaflet"; } from "@vue-leaflet/vue-leaflet";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { USE_DEXIE_DB } from "@/constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { MASTER_SETTINGS_KEY } from "../db/tables/settings"; import { MASTER_SETTINGS_KEY } from "../db/tables/settings";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
@ -125,10 +124,7 @@ export default class FeedFilters extends Vue {
async open(onCloseIfChanged: () => void) { async open(onCloseIfChanged: () => void) {
this.onCloseIfChanged = onCloseIfChanged; this.onCloseIfChanged = onCloseIfChanged;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.hasVisibleDid = !!settings.filterFeedByVisible; this.hasVisibleDid = !!settings.filterFeedByVisible;
this.isNearby = !!settings.filterFeedByNearby; this.isNearby = !!settings.filterFeedByNearby;
if (settings.searchBoxes && settings.searchBoxes.length > 0) { if (settings.searchBoxes && settings.searchBoxes.length > 0) {
@ -145,12 +141,6 @@ export default class FeedFilters extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
filterFeedByVisible: this.hasVisibleDid, filterFeedByVisible: this.hasVisibleDid,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
filterFeedByVisible: this.hasVisibleDid,
});
}
} }
async toggleNearby() { async toggleNearby() {
@ -159,12 +149,6 @@ export default class FeedFilters extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
filterFeedByNearby: this.isNearby, filterFeedByNearby: this.isNearby,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
filterFeedByNearby: this.isNearby,
});
}
} }
async clearAll() { async clearAll() {
@ -177,13 +161,6 @@ export default class FeedFilters extends Vue {
filterFeedByVisible: false, filterFeedByVisible: false,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
filterFeedByNearby: false,
filterFeedByVisible: false,
});
}
this.hasVisibleDid = false; this.hasVisibleDid = false;
this.isNearby = false; this.isNearby = false;
} }
@ -198,13 +175,6 @@ export default class FeedFilters extends Vue {
filterFeedByVisible: true, filterFeedByVisible: true,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
filterFeedByNearby: true,
filterFeedByVisible: true,
});
}
this.hasVisibleDid = true; this.hasVisibleDid = true;
this.isNearby = true; this.isNearby = true;
} }

10
src/components/GiftedDialog.vue

@ -89,7 +89,7 @@
<script lang="ts"> <script lang="ts">
import { Vue, Component, Prop } from "vue-facing-decorator"; import { Vue, Component, Prop } from "vue-facing-decorator";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { import {
createAndSubmitGive, createAndSubmitGive,
didInfo, didInfo,
@ -146,10 +146,7 @@ export default class GiftedDialog extends Vue {
this.offerId = offerId || ""; this.offerId = offerId || "";
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
@ -160,9 +157,6 @@ export default class GiftedDialog extends Vue {
result, result,
) as unknown as Contact[]; ) as unknown as Contact[];
} }
if (USE_DEXIE_DB) {
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();

11
src/components/GiftedPrompts.vue

@ -74,7 +74,7 @@
import { Vue, Component } from "vue-facing-decorator"; import { Vue, Component } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { AppString, NotificationIface } from "../constants/app";
import { db } from "../db/index"; import { db } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -136,9 +136,6 @@ export default class GivenPrompts extends Vue {
if (result) { if (result) {
this.numContacts = result.values[0][0] as number; this.numContacts = result.values[0][0] as number;
} }
if (USE_DEXIE_DB) {
this.numContacts = await db.contacts.count();
}
this.shownContactDbIndices = new Array<boolean>(this.numContacts); // all undefined to start this.shownContactDbIndices = new Array<boolean>(this.numContacts); // all undefined to start
} }
@ -249,12 +246,6 @@ export default class GivenPrompts extends Vue {
const mappedContacts = databaseUtil.mapQueryResultToValues(result); const mappedContacts = databaseUtil.mapQueryResultToValues(result);
this.currentContact = mappedContacts[0] as unknown as Contact; this.currentContact = mappedContacts[0] as unknown as Contact;
} }
if (USE_DEXIE_DB) {
await db.open();
this.currentContact = await db.contacts
.offset(someContactDbIndex)
.first();
}
this.shownContactDbIndices[someContactDbIndex] = true; this.shownContactDbIndices[someContactDbIndex] = true;
} }
} }

11
src/components/ImageMethodDialog.vue

@ -261,11 +261,7 @@ import { ref } from "vue";
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import VuePictureCropper, { cropper } from "vue-picture-cropper"; import VuePictureCropper, { cropper } from "vue-picture-cropper";
import { Capacitor } from "@capacitor/core"; import { Capacitor } from "@capacitor/core";
import { import { DEFAULT_IMAGE_API_SERVER, NotificationIface } from "../constants/app";
DEFAULT_IMAGE_API_SERVER,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
import { accessToken } from "../libs/crypto"; import { accessToken } from "../libs/crypto";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
@ -361,10 +357,7 @@ export default class ImageMethodDialog extends Vue {
*/ */
async mounted() { async mounted() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
} catch (error: unknown) { } catch (error: unknown) {
logger.error("Error retrieving settings from database:", error); logger.error("Error retrieving settings from database:", error);

16
src/components/MembersList.vue

@ -174,7 +174,7 @@ import { decryptMessage } from "../libs/crypto";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import * as libsUtil from "../libs/util"; import * as libsUtil from "../libs/util";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
interface Member { interface Member {
@ -211,10 +211,7 @@ export default class MembersList extends Vue {
contacts: Array<Contact> = []; contacts: Array<Contact> = [];
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.firstName = settings.firstName || ""; this.firstName = settings.firstName || "";
@ -367,9 +364,6 @@ export default class MembersList extends Vue {
result, result,
) as unknown as Contact[]; ) as unknown as Contact[];
} }
if (USE_DEXIE_DB) {
this.contacts = await db.contacts.toArray();
}
} }
getContactFor(did: string): Contact | undefined { getContactFor(did: string): Contact | undefined {
@ -458,9 +452,6 @@ export default class MembersList extends Vue {
"UPDATE contacts SET registered = ? WHERE did = ?", "UPDATE contacts SET registered = ? WHERE did = ?",
[true, decrMember.did], [true, decrMember.did],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(decrMember.did, { registered: true });
}
oldContact.registered = true; oldContact.registered = true;
} }
this.$notify( this.$notify(
@ -518,9 +509,6 @@ export default class MembersList extends Vue {
"INSERT INTO contacts (did, name) VALUES (?, ?)", "INSERT INTO contacts (did, name) VALUES (?, ?)",
[member.did, member.name], [member.did, member.name],
); );
if (USE_DEXIE_DB) {
await db.contacts.add(newContact);
}
this.contacts.push(newContact); this.contacts.push(newContact);
this.$notify( this.$notify(

7
src/components/OfferDialog.vue

@ -82,7 +82,7 @@
<script lang="ts"> <script lang="ts">
import { Vue, Component, Prop } from "vue-facing-decorator"; import { Vue, Component, Prop } from "vue-facing-decorator";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { createAndSubmitOffer } from "../libs/endorserServer"; import { createAndSubmitOffer } from "../libs/endorserServer";
import * as libsUtil from "../libs/util"; import * as libsUtil from "../libs/util";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -114,10 +114,7 @@ export default class OfferDialog extends Vue {
this.recipientDid = recipientDid; this.recipientDid = recipientDid;
this.recipientName = recipientName; this.recipientName = recipientName;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";

29
src/components/OnboardingDialog.vue

@ -200,12 +200,7 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import {
db,
retrieveSettingsForActiveAccount,
updateAccountSettings,
} from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { OnboardPage } from "../libs/util"; import { OnboardPage } from "../libs/util";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
@ -233,10 +228,7 @@ export default class OnboardingDialog extends Vue {
async open(page: OnboardPage) { async open(page: OnboardPage) {
this.page = page; this.page = page;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
@ -249,24 +241,12 @@ export default class OnboardingDialog extends Vue {
]) as unknown as Contact; ]) as unknown as Contact;
this.firstContactName = fullContact.name || ""; this.firstContactName = fullContact.name || "";
} }
if (USE_DEXIE_DB) {
const contacts = await db.contacts.toArray();
this.numContacts = contacts.length;
if (this.numContacts > 0) {
this.firstContactName = contacts[0].name || "";
}
}
this.visible = true; this.visible = true;
if (this.page === OnboardPage.Create) { if (this.page === OnboardPage.Create) {
// we'll assume that they've been through all the other pages // we'll assume that they've been through all the other pages
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
finishedOnboarding: true, finishedOnboarding: true,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
finishedOnboarding: true,
});
}
} }
} }
@ -276,11 +256,6 @@ export default class OnboardingDialog extends Vue {
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
finishedOnboarding: true, finishedOnboarding: true,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
finishedOnboarding: true,
});
}
if (goHome) { if (goHome) {
this.$router.push({ name: "home" }); this.$router.push({ name: "home" });
} }

11
src/components/PhotoDialog.vue

@ -119,11 +119,7 @@ PhotoDialog.vue */
import axios from "axios"; import axios from "axios";
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import VuePictureCropper, { cropper } from "vue-picture-cropper"; import VuePictureCropper, { cropper } from "vue-picture-cropper";
import { import { DEFAULT_IMAGE_API_SERVER, NotificationIface } from "../constants/app";
DEFAULT_IMAGE_API_SERVER,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
import { accessToken } from "../libs/crypto"; import { accessToken } from "../libs/crypto";
@ -180,10 +176,7 @@ export default class PhotoDialog extends Vue {
async mounted() { async mounted() {
// logger.log("PhotoDialog mounted"); // logger.log("PhotoDialog mounted");
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
logger.log("isRegistered:", this.isRegistered); logger.log("isRegistered:", this.isRegistered);

11
src/components/PushNotificationPermission.vue

@ -102,11 +102,7 @@
<script lang="ts"> <script lang="ts">
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { import { DEFAULT_PUSH_SERVER, NotificationIface } from "../constants/app";
DEFAULT_PUSH_SERVER,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
logConsoleAndDb, logConsoleAndDb,
@ -174,10 +170,7 @@ export default class PushNotificationPermission extends Vue {
this.isVisible = true; this.isVisible = true;
this.pushType = pushType; this.pushType = pushType;
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
let pushUrl = DEFAULT_PUSH_SERVER; let pushUrl = DEFAULT_PUSH_SERVER;
if (settings?.webPushServer) { if (settings?.webPushServer) {
pushUrl = settings.webPushServer; pushUrl = settings.webPushServer;

7
src/components/TopMessage.vue

@ -15,7 +15,7 @@
<script lang="ts"> <script lang="ts">
import { Component, Vue, Prop } from "vue-facing-decorator"; import { Component, Vue, Prop } from "vue-facing-decorator";
import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { AppString, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
@ -29,10 +29,7 @@ export default class TopMessage extends Vue {
async mounted() { async mounted() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
if ( if (
settings.warnIfTestServer && settings.warnIfTestServer &&
settings.apiServer !== AppString.PROD_ENDORSER_API_SERVER settings.apiServer !== AppString.PROD_ENDORSER_API_SERVER

12
src/components/UserNameDialog.vue

@ -37,7 +37,7 @@
<script lang="ts"> <script lang="ts">
import { Vue, Component, Prop } from "vue-facing-decorator"; import { Vue, Component, Prop } from "vue-facing-decorator";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { MASTER_SETTINGS_KEY } from "../db/tables/settings"; import { MASTER_SETTINGS_KEY } from "../db/tables/settings";
@ -63,10 +63,7 @@ export default class UserNameDialog extends Vue {
*/ */
async open(aCallback?: (name?: string) => void) { async open(aCallback?: (name?: string) => void) {
this.callback = aCallback || this.callback; this.callback = aCallback || this.callback;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.givenName = settings.firstName || ""; this.givenName = settings.firstName || "";
this.visible = true; this.visible = true;
} }
@ -77,11 +74,6 @@ export default class UserNameDialog extends Vue {
"UPDATE settings SET firstName = ? WHERE id = ?", "UPDATE settings SET firstName = ? WHERE id = ?",
[this.givenName, MASTER_SETTINGS_KEY], [this.givenName, MASTER_SETTINGS_KEY],
); );
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
firstName: this.givenName,
});
}
this.visible = false; this.visible = false;
this.callback(this.givenName); this.callback(this.givenName);
} }

6
src/components/World/components/objects/landmarks.js

@ -3,7 +3,6 @@ import * as THREE from "three";
import { GLTFLoader } from "three/addons/loaders/GLTFLoader"; import { GLTFLoader } from "three/addons/loaders/GLTFLoader";
import * as SkeletonUtils from "three/addons/utils/SkeletonUtils"; import * as SkeletonUtils from "three/addons/utils/SkeletonUtils";
import * as TWEEN from "@tweenjs/tween.js"; import * as TWEEN from "@tweenjs/tween.js";
import { USE_DEXIE_DB } from "../../../../constants/app";
import * as databaseUtil from "../../../../db/databaseUtil"; import * as databaseUtil from "../../../../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../../../../db"; import { retrieveSettingsForActiveAccount } from "../../../../db";
import { getHeaders } from "../../../../libs/endorserServer"; import { getHeaders } from "../../../../libs/endorserServer";
@ -16,10 +15,7 @@ export async function loadLandmarks(vue, world, scene, loop) {
vue.setWorldProperty("animationDurationSeconds", ANIMATION_DURATION_SECS); vue.setWorldProperty("animationDurationSeconds", ANIMATION_DURATION_SECS);
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
const activeDid = settings.activeDid || ""; const activeDid = settings.activeDid || "";
const apiServer = settings.apiServer; const apiServer = settings.apiServer;
const headers = await getHeaders(activeDid); const headers = await getHeaders(activeDid);

2
src/constants/app.ts

@ -51,8 +51,6 @@ export const IMAGE_TYPE_PROFILE = "profile";
export const PASSKEYS_ENABLED = export const PASSKEYS_ENABLED =
!!import.meta.env.VITE_PASSKEYS_ENABLED || false; !!import.meta.env.VITE_PASSKEYS_ENABLED || false;
export const USE_DEXIE_DB = false;
/** /**
* The possible values for "group" and "type" are in App.vue. * The possible values for "group" and "type" are in App.vue.
* Some of this comes from the notiwind package, some is custom. * Some of this comes from the notiwind package, some is custom.

2
src/db/index.ts

@ -1,7 +1,7 @@
/** /**
* This is the original IndexedDB version of the database. * This is the original IndexedDB version of the database.
* It will eventually be replaced fully by the SQL version in databaseUtil.ts. * It will eventually be replaced fully by the SQL version in databaseUtil.ts.
* Turn this on or off with the USE_DEXIE_DB constant in constants/app.ts. *
*/ */
import BaseDexie, { Table } from "dexie"; import BaseDexie, { Table } from "dexie";

2
src/db/tables/accounts.ts

@ -45,7 +45,7 @@ export type Account = {
publicKeyHex: string; publicKeyHex: string;
}; };
// When finished with USE_DEXIE_DB, move these fields to Account and move identity and mnemonic here. // TODO: When finished with USE_DEXIE_DB, move these fields to Account and move identity and mnemonic here.
export type AccountEncrypted = Account & { export type AccountEncrypted = Account & {
identityEncrBase64: string; identityEncrBase64: string;
mnemonicEncrBase64: string; mnemonicEncrBase64: string;

1
src/interfaces/index.ts

@ -31,3 +31,4 @@ export type {
export * from "./limits"; export * from "./limits";
export * from "./deepLinks"; export * from "./deepLinks";
export * from "./common";

4
src/libs/endorserServer.ts

@ -26,7 +26,6 @@ import {
DEFAULT_IMAGE_API_SERVER, DEFAULT_IMAGE_API_SERVER,
NotificationIface, NotificationIface,
APP_SERVER, APP_SERVER,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { accessToken, deriveAddress, nextDerivationPath } from "../libs/crypto"; import { accessToken, deriveAddress, nextDerivationPath } from "../libs/crypto";
@ -1454,9 +1453,6 @@ export async function setVisibilityUtil(
"UPDATE contacts SET seesMe = ? WHERE did = ?", "UPDATE contacts SET seesMe = ? WHERE did = ?",
[visibility, contact.did], [visibility, contact.did],
); );
if (USE_DEXIE_DB) {
db.contacts.update(contact.did, { seesMe: visibility });
}
} }
return { success }; return { success };
} else { } else {

108
src/libs/util.ts

@ -5,11 +5,7 @@ import { Buffer } from "buffer";
import * as R from "ramda"; import * as R from "ramda";
import { useClipboard } from "@vueuse/core"; import { useClipboard } from "@vueuse/core";
import { import { DEFAULT_PUSH_SERVER, NotificationIface } from "../constants/app";
DEFAULT_PUSH_SERVER,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import { import {
accountsDBPromise, accountsDBPromise,
retrieveSettingsForActiveAccount, retrieveSettingsForActiveAccount,
@ -505,28 +501,16 @@ export const retrieveAccountCount = async (): Promise<number> => {
result = dbResult.values[0][0] as number; result = dbResult.values[0][0] as number;
} }
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
result = await accountsDB.accounts.count();
}
return result; return result;
}; };
export const retrieveAccountDids = async (): Promise<string[]> => { export const retrieveAccountDids = async (): Promise<string[]> => {
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
const dbAccounts = await platformService.dbQuery(`SELECT did FROM accounts`); const dbAccounts = await platformService.dbQuery(`SELECT did FROM accounts`);
let allDids = const allDids =
databaseUtil databaseUtil
.mapQueryResultToValues(dbAccounts) .mapQueryResultToValues(dbAccounts)
?.map((row) => row[0] as string) || []; ?.map((row) => row[0] as string) || [];
if (USE_DEXIE_DB) {
// this is the old way
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
const allAccounts = await accountsDB.accounts.toArray();
allDids = allAccounts.map((acc) => acc.did);
}
return allDids; return allDids;
}; };
@ -553,21 +537,6 @@ export const retrieveAccountMetadata = async (
} else { } else {
result = undefined; result = undefined;
} }
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
const account = (await accountsDB.accounts
.where("did")
.equals(activeDid)
.first()) as Account;
if (account) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { identity, mnemonic, ...metadata } = account;
result = metadata;
} else {
result = undefined;
}
}
return result; return result;
}; };
@ -616,15 +585,6 @@ export const retrieveFullyDecryptedAccount = async (
fullAccountData.mnemonic = await simpleDecrypt(mnemonicEncr, secret); fullAccountData.mnemonic = await simpleDecrypt(mnemonicEncr, secret);
result = fullAccountData; result = fullAccountData;
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
const account = (await accountsDB.accounts
.where("did")
.equals(activeDid)
.first()) as Account;
result = account;
}
return result; return result;
}; };
@ -634,30 +594,9 @@ export const retrieveAllAccountsMetadata = async (): Promise<
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
const dbAccounts = await platformService.dbQuery(`SELECT * FROM accounts`); const dbAccounts = await platformService.dbQuery(`SELECT * FROM accounts`);
const accounts = databaseUtil.mapQueryResultToValues(dbAccounts) as Account[]; const accounts = databaseUtil.mapQueryResultToValues(dbAccounts) as Account[];
let result = accounts.map((account) => { const result = accounts.map((account) => {
return account as AccountEncrypted; return account as AccountEncrypted;
}); });
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
const array = await accountsDB.accounts.toArray();
result = array.map((account) => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { identity, mnemonic, ...metadata } = account;
// This is not accurate because they can't be decrypted, but we're removing Dexie anyway.
const identityStr = JSON.stringify(identity);
const encryptedAccount = {
identityEncrBase64: sha256(
new TextEncoder().encode(identityStr),
).toString(),
mnemonicEncrBase64: sha256(
new TextEncoder().encode(account.mnemonic),
).toString(),
...metadata,
};
return encryptedAccount as AccountEncrypted;
});
}
return result; return result;
}; };
@ -700,21 +639,6 @@ export async function saveNewIdentity(
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
await databaseUtil.updateDefaultSettings({ activeDid: identity.did }); await databaseUtil.updateDefaultSettings({ activeDid: identity.did });
await databaseUtil.insertDidSpecificSettings(identity.did); await databaseUtil.insertDidSpecificSettings(identity.did);
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
await accountsDB.accounts.add({
dateCreated: new Date().toISOString(),
derivationPath: derivationPath,
did: identity.did,
identity: identityStr,
mnemonic: mnemonic,
publicKeyHex: identity.keys[0].publicKeyHex,
});
await updateDefaultSettings({ activeDid: identity.did });
await insertDidSpecificSettings(identity.did);
}
} catch (error) { } catch (error) {
logger.error("Failed to update default settings:", error); logger.error("Failed to update default settings:", error);
throw new Error( throw new Error(
@ -739,9 +663,6 @@ export const generateSaveAndActivateIdentity = async (): Promise<string> => {
await databaseUtil.updateDidSpecificSettings(newId.did, { await databaseUtil.updateDidSpecificSettings(newId.did, {
isRegistered: false, isRegistered: false,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(newId.did, { isRegistered: false });
}
return newId.did; return newId.did;
}; };
@ -767,11 +688,6 @@ export const registerAndSavePasskey = async (
insertStatement.sql, insertStatement.sql,
insertStatement.params, insertStatement.params,
); );
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
await accountsDB.accounts.add(account);
}
return account; return account;
}; };
@ -783,18 +699,11 @@ export const registerSaveAndActivatePasskey = async (
await databaseUtil.updateDidSpecificSettings(account.did, { await databaseUtil.updateDidSpecificSettings(account.did, {
isRegistered: false, isRegistered: false,
}); });
if (USE_DEXIE_DB) {
await updateDefaultSettings({ activeDid: account.did });
await updateAccountSettings(account.did, { isRegistered: false });
}
return account; return account;
}; };
export const getPasskeyExpirationSeconds = async (): Promise<number> => { export const getPasskeyExpirationSeconds = async (): Promise<number> => {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
return ( return (
(settings?.passkeyExpirationMinutes ?? DEFAULT_PASSKEY_EXPIRATION_MINUTES) * (settings?.passkeyExpirationMinutes ?? DEFAULT_PASSKEY_EXPIRATION_MINUTES) *
60 60
@ -810,10 +719,7 @@ export const sendTestThroughPushServer = async (
subscriptionJSON: PushSubscriptionJSON, subscriptionJSON: PushSubscriptionJSON,
skipFilter: boolean, skipFilter: boolean,
): Promise<AxiosResponse> => { ): Promise<AxiosResponse> => {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
let pushUrl: string = DEFAULT_PUSH_SERVER as string; let pushUrl: string = DEFAULT_PUSH_SERVER as string;
if (settings?.webPushServer) { if (settings?.webPushServer) {
pushUrl = settings.webPushServer; pushUrl = settings.webPushServer;
@ -1022,10 +928,6 @@ export async function importFromMnemonic(
if (shouldErase) { if (shouldErase) {
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
await platformService.dbExec("DELETE FROM accounts"); await platformService.dbExec("DELETE FROM accounts");
if (USE_DEXIE_DB) {
const accountsDB = await accountsDBPromise;
await accountsDB.accounts.clear();
}
} }
// Save the new identity // Save the new identity

5
src/router/index.ts

@ -148,11 +148,6 @@ const routes: Array<RouteRecordRaw> = [
name: "logs", name: "logs",
component: () => import("../views/LogView.vue"), component: () => import("../views/LogView.vue"),
}, },
{
path: "/database-migration",
name: "database-migration",
component: () => import("../views/DatabaseMigration.vue"),
},
{ {
path: "/new-activity", path: "/new-activity",
name: "new-activity", name: "new-activity",

1397
src/services/indexedDBMigrationService.ts

File diff suppressed because it is too large

2
src/services/platforms/CapacitorPlatformService.ts

@ -236,7 +236,7 @@ export class CapacitorPlatformService implements PlatformService {
result.values?.map((row: { name: string }) => row.name) || []; result.values?.map((row: { name: string }) => row.name) || [];
return new Set(names); return new Set(names);
}; };
runMigrations(sqlExec, sqlQuery, extractMigrationNames); await runMigrations(sqlExec, sqlQuery, extractMigrationNames);
} }
/** /**

7
src/test/index.ts

@ -1,8 +1,6 @@
import axios from "axios"; import axios from "axios";
import * as didJwt from "did-jwt"; import * as didJwt from "did-jwt";
import { AppString, USE_DEXIE_DB } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db";
import { SERVICE_ID } from "../libs/endorserServer"; import { SERVICE_ID } from "../libs/endorserServer";
import { deriveAddress, newIdentifier } from "../libs/crypto"; import { deriveAddress, newIdentifier } from "../libs/crypto";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
@ -17,10 +15,7 @@ export async function testServerRegisterUser() {
const identity0 = newIdentifier(addr, publicHex, privateHex, deriPath); const identity0 = newIdentifier(addr, publicHex, privateHex, deriPath);
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
// Make a claim // Make a claim
const vcClaim = { const vcClaim = {

224
src/views/AccountViewView.vue

@ -68,9 +68,9 @@
class="inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md" class="inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"
@click=" @click="
() => () =>
($refs.userNameDialog as UserNameDialog).open( ($refs.userNameDialog as UserNameDialog).open((name) => {
(name) => (givenName = name), if (name) givenName = name;
) })
" "
> >
Set Your Name Set Your Name
@ -980,7 +980,6 @@ import "leaflet/dist/leaflet.css";
import { AxiosError } from "axios"; import { AxiosError } from "axios";
import { Buffer } from "buffer/"; import { Buffer } from "buffer/";
import Dexie from "dexie";
import "dexie-export-import"; import "dexie-export-import";
// @ts-expect-error - they aren't exporting it but it's there // @ts-expect-error - they aren't exporting it but it's there
import { ImportProgress } from "dexie-export-import"; import { ImportProgress } from "dexie-export-import";
@ -1008,29 +1007,22 @@ import {
DEFAULT_PUSH_SERVER, DEFAULT_PUSH_SERVER,
IMAGE_TYPE_PROFILE, IMAGE_TYPE_PROFILE,
NotificationIface, NotificationIface,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import {
db,
logConsoleAndDb,
retrieveSettingsForActiveAccount,
updateAccountSettings,
} from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { import { DEFAULT_PASSKEY_EXPIRATION_MINUTES } from "../db/tables/settings";
DEFAULT_PASSKEY_EXPIRATION_MINUTES,
MASTER_SETTINGS_KEY,
} from "../db/tables/settings";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
clearPasskeyToken,
EndorserRateLimits, EndorserRateLimits,
ImageRateLimits,
ErrorResponse, ErrorResponse,
} from "../interfaces";
import {
clearPasskeyToken,
errorStringForLog, errorStringForLog,
fetchEndorserRateLimits, fetchEndorserRateLimits,
fetchImageRateLimits, fetchImageRateLimits,
getHeaders, getHeaders,
ImageRateLimits,
tokenExpiryTimeDescription, tokenExpiryTimeDescription,
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import { import {
@ -1043,11 +1035,39 @@ import { logger } from "../utils/logger";
const inputImportFileNameRef = ref<Blob>(); const inputImportFileNameRef = ref<Blob>();
// Type guard for API errors
function isApiError(error: unknown): error is {
response?: { data?: { error?: { message?: string } | string } };
} {
return typeof error === "object" && error !== null && "response" in error;
}
// Type guard for standard errors
function isError(error: unknown): error is Error {
return error instanceof Error;
}
// Helper function to extract error message
function extractErrorMessage(error: unknown): string {
if (isApiError(error)) {
const apiError = error.response?.data?.error;
if (typeof apiError === "string") {
return apiError;
}
if (typeof apiError === "object" && apiError?.message) {
return apiError.message;
}
}
if (isError(error)) {
return error.message;
}
return "An unknown error occurred";
}
@Component({ @Component({
components: { components: {
EntityIcon, EntityIcon,
ImageMethodDialog, ImageMethodDialog,
LeafletMouseEvent,
LMap, LMap,
LMarker, LMarker,
LTileLayer, LTileLayer,
@ -1158,11 +1178,6 @@ export default class AccountViewView extends Vue {
databaseUtil.logConsoleAndDb( databaseUtil.logConsoleAndDb(
"Error loading profile: " + errorStringForLog(error), "Error loading profile: " + errorStringForLog(error),
); );
if (USE_DEXIE_DB) {
logConsoleAndDb(
"Error loading profile: " + errorStringForLog(error),
);
}
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
@ -1238,11 +1253,7 @@ export default class AccountViewView extends Vue {
* Initializes component state with values from the database or defaults. * Initializes component state with values from the database or defaults.
*/ */
async initializeState() { async initializeState() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
await db.open();
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
@ -1288,12 +1299,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
showContactGivesInline: this.showContactGives, showContactGivesInline: this.showContactGives,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
showContactGivesInline: this.showContactGives,
});
}
} }
async toggleShowGeneralAdvanced() { async toggleShowGeneralAdvanced() {
@ -1301,12 +1306,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
showGeneralAdvanced: this.showGeneralAdvanced, showGeneralAdvanced: this.showGeneralAdvanced,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
showGeneralAdvanced: this.showGeneralAdvanced,
});
}
} }
async toggleProdWarning() { async toggleProdWarning() {
@ -1314,12 +1313,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
warnIfProdServer: this.warnIfProdServer, warnIfProdServer: this.warnIfProdServer,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
warnIfProdServer: this.warnIfProdServer,
});
}
} }
async toggleTestWarning() { async toggleTestWarning() {
@ -1327,12 +1320,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
warnIfTestServer: this.warnIfTestServer, warnIfTestServer: this.warnIfTestServer,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
warnIfTestServer: this.warnIfTestServer,
});
}
} }
async toggleShowShortcutBvc() { async toggleShowShortcutBvc() {
@ -1340,12 +1327,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
showShortcutBvc: this.showShortcutBvc, showShortcutBvc: this.showShortcutBvc,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
showShortcutBvc: this.showShortcutBvc,
});
}
} }
readableDate(timeStr: string) { readableDate(timeStr: string) {
@ -1404,11 +1385,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
notifyingNewActivityTime: timeText, notifyingNewActivityTime: timeText,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingNewActivityTime: timeText,
});
}
this.notifyingNewActivity = true; this.notifyingNewActivity = true;
this.notifyingNewActivityTime = timeText; this.notifyingNewActivityTime = timeText;
} }
@ -1425,11 +1401,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
notifyingNewActivityTime: "", notifyingNewActivityTime: "",
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingNewActivityTime: "",
});
}
this.notifyingNewActivity = false; this.notifyingNewActivity = false;
this.notifyingNewActivityTime = ""; this.notifyingNewActivityTime = "";
} }
@ -1475,12 +1446,6 @@ export default class AccountViewView extends Vue {
notifyingReminderMessage: message, notifyingReminderMessage: message,
notifyingReminderTime: timeText, notifyingReminderTime: timeText,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingReminderMessage: message,
notifyingReminderTime: timeText,
});
}
this.notifyingReminder = true; this.notifyingReminder = true;
this.notifyingReminderMessage = message || ""; this.notifyingReminderMessage = message || "";
this.notifyingReminderTime = timeText; this.notifyingReminderTime = timeText;
@ -1500,12 +1465,6 @@ export default class AccountViewView extends Vue {
notifyingReminderMessage: "", notifyingReminderMessage: "",
notifyingReminderTime: "", notifyingReminderTime: "",
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingReminderMessage: "",
notifyingReminderTime: "",
});
}
this.notifyingReminder = false; this.notifyingReminder = false;
this.notifyingReminderMessage = ""; this.notifyingReminderMessage = "";
this.notifyingReminderTime = ""; this.notifyingReminderTime = "";
@ -1522,12 +1481,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
hideRegisterPromptOnNewContact: newSetting, hideRegisterPromptOnNewContact: newSetting,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
hideRegisterPromptOnNewContact: newSetting,
});
}
this.hideRegisterPromptOnNewContact = newSetting; this.hideRegisterPromptOnNewContact = newSetting;
} }
@ -1535,12 +1488,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
passkeyExpirationMinutes: this.passkeyExpirationMinutes, passkeyExpirationMinutes: this.passkeyExpirationMinutes,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
passkeyExpirationMinutes: this.passkeyExpirationMinutes,
});
}
clearPasskeyToken(); clearPasskeyToken();
this.passkeyExpirationDescription = tokenExpiryTimeDescription(); this.passkeyExpirationDescription = tokenExpiryTimeDescription();
} }
@ -1552,14 +1499,6 @@ export default class AccountViewView extends Vue {
notifyingReminderMessage: "", notifyingReminderMessage: "",
notifyingReminderTime: "", notifyingReminderTime: "",
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingNewActivityTime: "",
notifyingReminderMessage: "",
notifyingReminderTime: "",
});
}
this.notifyingNewActivity = false; this.notifyingNewActivity = false;
this.notifyingNewActivityTime = ""; this.notifyingNewActivityTime = "";
this.notifyingReminder = false; this.notifyingReminder = false;
@ -1599,9 +1538,7 @@ export default class AccountViewView extends Vue {
* @returns {Promise<Blob>} The generated blob object. * @returns {Promise<Blob>} The generated blob object.
*/ */
private async generateDatabaseBlob(): Promise<Blob> { private async generateDatabaseBlob(): Promise<Blob> {
if (USE_DEXIE_DB) { // TODO: Implement this for SQLite
return await db.export({ prettyJson: true });
}
throw new Error("Not implemented"); throw new Error("Not implemented");
} }
@ -1704,30 +1641,7 @@ export default class AccountViewView extends Vue {
*/ */
async submitImportFile() { async submitImportFile() {
if (inputImportFileNameRef.value != null) { if (inputImportFileNameRef.value != null) {
if (USE_DEXIE_DB) { // TODO: implement this for SQLite
await db
.delete()
.then(async () => {
// BulkError: settings.bulkAdd(): 1 of 21 operations failed. Errors: ConstraintError: Key already exists in the object store.
await Dexie.import(inputImportFileNameRef.value as Blob, {
progressCallback: this.progressCallback,
});
})
.catch((error) => {
logger.error("Error importing file:", error);
this.$notify(
{
group: "alert",
type: "danger",
title: "Error Importing",
text: "There was an error in the import. Your identities and contacts may have been affected, so you may have to restore your identifier and use the contact import method.",
},
-1,
);
});
} else {
throw new Error("Not implemented");
}
} }
} }
@ -1818,12 +1732,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDidSpecificSettings(did, { await databaseUtil.updateDidSpecificSettings(did, {
isRegistered: true, isRegistered: true,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
isRegistered: true,
});
}
this.isRegistered = true; this.isRegistered = true;
} catch (err) { } catch (err) {
logger.error("Got an error updating settings:", err); logger.error("Got an error updating settings:", err);
@ -1886,12 +1794,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
apiServer: this.apiServerInput, apiServer: this.apiServerInput,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
apiServer: this.apiServerInput,
});
}
this.apiServer = this.apiServerInput; this.apiServer = this.apiServerInput;
} }
@ -1899,12 +1801,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
partnerApiServer: this.partnerApiServerInput, partnerApiServer: this.partnerApiServerInput,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
partnerApiServer: this.partnerApiServerInput,
});
}
this.partnerApiServer = this.partnerApiServerInput; this.partnerApiServer = this.partnerApiServerInput;
} }
@ -1912,12 +1808,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
webPushServer: this.webPushServerInput, webPushServer: this.webPushServerInput,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
webPushServer: this.webPushServerInput,
});
}
this.webPushServer = this.webPushServerInput; this.webPushServer = this.webPushServerInput;
this.$notify( this.$notify(
{ {
@ -1936,12 +1826,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
profileImageUrl: imgUrl, profileImageUrl: imgUrl,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
profileImageUrl: imgUrl,
});
}
this.profileImageUrl = imgUrl; this.profileImageUrl = imgUrl;
//console.log("Got image URL:", imgUrl); //console.log("Got image URL:", imgUrl);
}, },
@ -2005,12 +1889,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
profileImageUrl: undefined, profileImageUrl: undefined,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
profileImageUrl: undefined,
});
}
this.profileImageUrl = undefined; this.profileImageUrl = undefined;
} catch (error) { } catch (error) {
@ -2022,11 +1900,6 @@ export default class AccountViewView extends Vue {
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
profileImageUrl: undefined, profileImageUrl: undefined,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
profileImageUrl: undefined,
});
}
this.profileImageUrl = undefined; this.profileImageUrl = undefined;
@ -2107,14 +1980,8 @@ export default class AccountViewView extends Vue {
databaseUtil.logConsoleAndDb( databaseUtil.logConsoleAndDb(
"Error saving profile: " + errorStringForLog(error), "Error saving profile: " + errorStringForLog(error),
); );
if (USE_DEXIE_DB) {
logConsoleAndDb("Error saving profile: " + errorStringForLog(error));
}
const errorMessage: string = const errorMessage: string =
error.response?.data?.error?.message || extractErrorMessage(error) || "There was an error saving your profile.";
error.response?.data?.error ||
error.message ||
"There was an error saving your profile.";
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
@ -2202,13 +2069,8 @@ export default class AccountViewView extends Vue {
databaseUtil.logConsoleAndDb( databaseUtil.logConsoleAndDb(
"Error deleting profile: " + errorStringForLog(error), "Error deleting profile: " + errorStringForLog(error),
); );
if (USE_DEXIE_DB) {
logConsoleAndDb("Error deleting profile: " + errorStringForLog(error));
}
const errorMessage: string = const errorMessage: string =
error.response?.data?.error?.message || extractErrorMessage(error) ||
error.response?.data?.error ||
error.message ||
"There was an error deleting your profile."; "There was an error deleting your profile.";
this.$notify( this.$notify(
{ {

7
src/views/ClaimAddRawView.vue

@ -33,7 +33,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { AxiosInstance } from "axios"; import { AxiosInstance } from "axios";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
import { logConsoleAndDb } from "../db/databaseUtil"; import { logConsoleAndDb } from "../db/databaseUtil";
@ -79,10 +79,7 @@ export default class ClaimAddRawView extends Vue {
* Initialize settings from active account * Initialize settings from active account
*/ */
private async initializeSettings() { private async initializeSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
} }

14
src/views/ClaimCertificateView.vue

@ -14,8 +14,7 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { nextTick } from "vue"; import { nextTick } from "vue";
import QRCode from "qrcode"; import QRCode from "qrcode";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import * as serverUtil from "../libs/endorserServer"; import * as serverUtil from "../libs/endorserServer";
import { GenericCredWrapper, GenericVerifiableCredential } from "../interfaces"; import { GenericCredWrapper, GenericVerifiableCredential } from "../interfaces";
@ -35,10 +34,7 @@ export default class ClaimCertificateView extends Vue {
serverUtil = serverUtil; serverUtil = serverUtil;
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
const pathParams = window.location.pathname.substring( const pathParams = window.location.pathname.substring(
@ -94,13 +90,9 @@ export default class ClaimCertificateView extends Vue {
const dbAllContacts = await platformService.dbQuery( const dbAllContacts = await platformService.dbQuery(
"SELECT * FROM contacts", "SELECT * FROM contacts",
); );
let allContacts = databaseUtil.mapQueryResultToValues( const allContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
allContacts = await db.contacts.toArray();
}
const canvas = this.$refs.claimCanvas as HTMLCanvasElement; const canvas = this.$refs.claimCanvas as HTMLCanvasElement;
if (canvas) { if (canvas) {

13
src/views/ClaimReportCertificateView.vue

@ -11,7 +11,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { nextTick } from "vue"; import { nextTick } from "vue";
import QRCode from "qrcode"; import QRCode from "qrcode";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import * as endorserServer from "../libs/endorserServer"; import * as endorserServer from "../libs/endorserServer";
@ -31,10 +31,7 @@ export default class ClaimReportCertificateView extends Vue {
endorserServer = endorserServer; endorserServer = endorserServer;
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
const pathParams = window.location.pathname.substring( const pathParams = window.location.pathname.substring(
@ -76,13 +73,9 @@ export default class ClaimReportCertificateView extends Vue {
const dbAllContacts = await platformService.dbQuery( const dbAllContacts = await platformService.dbQuery(
"SELECT * FROM contacts", "SELECT * FROM contacts",
); );
let allContacts = databaseUtil.mapQueryResultToValues( const allContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
allContacts = await db.contacts.toArray();
}
const canvas = this.$refs.claimCanvas as HTMLCanvasElement; const canvas = this.$refs.claimCanvas as HTMLCanvasElement;
if (canvas) { if (canvas) {

12
src/views/ClaimView.vue

@ -557,7 +557,7 @@ import { useClipboard } from "@vueuse/core";
import { GenericVerifiableCredential } from "../interfaces"; import { GenericVerifiableCredential } from "../interfaces";
import GiftedDialog from "../components/GiftedDialog.vue"; import GiftedDialog from "../components/GiftedDialog.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db } from "../db/index"; import { db } from "../db/index";
import { logConsoleAndDb } from "../db/databaseUtil"; import { logConsoleAndDb } from "../db/databaseUtil";
@ -631,10 +631,7 @@ export default class ClaimView extends Vue {
} }
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await databaseUtil.retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
@ -645,10 +642,7 @@ export default class ClaimView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.isRegistered = settings.isRegistered || false; this.isRegistered = settings.isRegistered || false;
try { try {

11
src/views/ConfirmGiftView.vue

@ -436,7 +436,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { useClipboard } from "@vueuse/core"; import { useClipboard } from "@vueuse/core";
import { RouteLocationNormalizedLoaded, Router } from "vue-router"; import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -528,10 +528,7 @@ export default class ConfirmGiftView extends Vue {
* Initializes component settings and user data * Initializes component settings and user data
*/ */
private async initializeSettings() { private async initializeSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
@ -541,10 +538,6 @@ export default class ConfirmGiftView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.isRegistered = settings.isRegistered || false; this.isRegistered = settings.isRegistered || false;
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();

11
src/views/ContactAmountsView.vue

@ -117,7 +117,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { RouteLocationNormalizedLoaded, Router } from "vue-router"; import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -164,15 +164,8 @@ export default class ContactAmountssView extends Vue {
this.contact = databaseUtil.mapQueryResultToValues( this.contact = databaseUtil.mapQueryResultToValues(
dbContact, dbContact,
)[0] as unknown as Contact; )[0] as unknown as Contact;
if (USE_DEXIE_DB) {
await db.open();
this.contact = (await db.contacts.get(contactDid)) || null;
}
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings?.activeDid || ""; this.activeDid = settings?.activeDid || "";
this.apiServer = settings?.apiServer || ""; this.apiServer = settings?.apiServer || "";

16
src/views/ContactEditView.vue

@ -138,7 +138,7 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { parseJsonField } from "../db/databaseUtil"; import { parseJsonField } from "../db/databaseUtil";
import { db } from "../db/index"; import { db } from "../db/index";
@ -229,14 +229,10 @@ export default class ContactEditView extends Vue {
"SELECT * FROM contacts WHERE did = ?", "SELECT * FROM contacts WHERE did = ?",
[contactDid], [contactDid],
); );
let contact: Contact | undefined = databaseUtil.mapQueryResultToValues( const contact: Contact | undefined = databaseUtil.mapQueryResultToValues(
dbContact, dbContact,
)[0] as unknown as Contact; )[0] as unknown as Contact;
contact.contactMethods = parseJsonField(contact?.contactMethods, []); contact.contactMethods = parseJsonField(contact?.contactMethods, []);
if (USE_DEXIE_DB) {
await db.open();
contact = await db.contacts.get(contactDid || "");
}
if (contact) { if (contact) {
this.contact = contact; this.contact = contact;
this.contactName = contact.name || ""; this.contactName = contact.name || "";
@ -349,13 +345,7 @@ export default class ContactEditView extends Vue {
this.contact?.did || "", this.contact?.did || "",
], ],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(this.contact?.did || "", {
name: this.contactName,
notes: this.contactNotes,
contactMethods: contactMethods,
});
}
// Notify success and redirect // Notify success and redirect
this.$notify({ this.$notify({
group: "alert", group: "alert",

16
src/views/ContactGiftingView.vue

@ -76,7 +76,7 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import GiftedDialog from "../components/GiftedDialog.vue"; import GiftedDialog from "../components/GiftedDialog.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -100,10 +100,7 @@ export default class ContactGiftingView extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
@ -114,15 +111,6 @@ export default class ContactGiftingView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
// .orderBy("name") wouldn't retrieve any entries with a blank name
// .toCollection.sortBy("name") didn't sort in an order I understood
const baseContacts = await db.contacts.toArray();
this.allContacts = baseContacts.sort((a, b) =>
(a.name || "").localeCompare(b.name || ""),
);
}
this.projectId = (this.$route.query["projectId"] as string) || ""; this.projectId = (this.$route.query["projectId"] as string) || "";
this.prompt = (this.$route.query["prompt"] as string) ?? this.prompt; this.prompt = (this.$route.query["prompt"] as string) ?? this.prompt;

31
src/views/ContactImportView.vue

@ -200,12 +200,7 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import OfferDialog from "../components/OfferDialog.vue"; import OfferDialog from "../components/OfferDialog.vue";
import { import { APP_SERVER, AppString, NotificationIface } from "../constants/app";
APP_SERVER,
AppString,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import { import {
db, db,
logConsoleAndDb, logConsoleAndDb,
@ -415,10 +410,7 @@ export default class ContactImportView extends Vue {
* Initializes component settings from active account * Initializes component settings from active account
*/ */
private async initializeSettings() { private async initializeSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
} }
@ -486,13 +478,9 @@ export default class ContactImportView extends Vue {
const dbAllContacts = await platformService.dbQuery( const dbAllContacts = await platformService.dbQuery(
"SELECT * FROM contacts", "SELECT * FROM contacts",
); );
let baseContacts = databaseUtil.mapQueryResultToValues( const baseContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
baseContacts = await db.contacts.toArray();
}
// Check for existing contacts and differences // Check for existing contacts and differences
for (let i = 0; i < this.contactsImporting.length; i++) { for (let i = 0; i < this.contactsImporting.length; i++) {
@ -618,13 +606,7 @@ export default class ContactImportView extends Vue {
[contact.did], [contact.did],
); );
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
// For Dexie, we need to parse the contactMethods back to an array
await db.contacts.update(
contact.did,
dbRecordToContact(contactToStore),
);
}
updatedCount++; updatedCount++;
} else { } else {
// Add new contact // Add new contact
@ -633,10 +615,7 @@ export default class ContactImportView extends Vue {
"contacts", "contacts",
); );
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
// For Dexie, we need to parse the contactMethods back to an array
await db.contacts.add(dbRecordToContact(contactToStore));
}
importedCount++; importedCount++;
} }
} }

17
src/views/ContactQRScanFullView.vue

@ -113,7 +113,7 @@ import { useClipboard } from "@vueuse/core";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { QRScannerFactory } from "../services/QRScanner/QRScannerFactory"; import { QRScannerFactory } from "../services/QRScanner/QRScannerFactory";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db } from "../db/index"; import { db } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { getContactJwtFromJwtUrl } from "../libs/crypto"; import { getContactJwtFromJwtUrl } from "../libs/crypto";
@ -174,10 +174,7 @@ export default class ContactQRScanFull extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.givenName = settings.firstName || ""; this.givenName = settings.firstName || "";
@ -476,12 +473,7 @@ export default class ContactQRScanFull extends Vue {
const existingContacts = databaseUtil.mapQueryResultToValues( const existingContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
let existingContact: Contact | undefined = existingContacts[0]; const existingContact: Contact | undefined = existingContacts[0];
if (USE_DEXIE_DB) {
await db.open();
const existingContacts = await db.contacts.toArray();
existingContact = existingContacts.find((c) => c.did === contact.did);
}
if (existingContact) { if (existingContact) {
logger.info("Contact already exists", { did: contact.did }); logger.info("Contact already exists", { did: contact.did });
@ -507,9 +499,6 @@ export default class ContactQRScanFull extends Vue {
"contacts", "contacts",
); );
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
await db.contacts.add(contact);
}
if (this.activeDid) { if (this.activeDid) {
logger.info("Setting contact visibility", { did: contact.did }); logger.info("Setting contact visibility", { did: contact.did });

32
src/views/ContactQRScanShowView.vue

@ -167,8 +167,8 @@ import { QrcodeStream } from "vue-qrcode-reader";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import UserNameDialog from "../components/UserNameDialog.vue"; import UserNameDialog from "../components/UserNameDialog.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { MASTER_SETTINGS_KEY } from "../db/tables/settings"; import { MASTER_SETTINGS_KEY } from "../db/tables/settings";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@ -246,10 +246,7 @@ export default class ContactQRScanShow extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.givenName = settings.firstName || ""; this.givenName = settings.firstName || "";
@ -598,9 +595,6 @@ export default class ContactQRScanShow extends Vue {
"UPDATE contacts SET registered = ? WHERE did = ?", "UPDATE contacts SET registered = ? WHERE did = ?",
[true, contact.did], [true, contact.did],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(contact.did, { registered: true });
}
logger.info("Contact registration successful", { did: contact.did }); logger.info("Contact registration successful", { did: contact.did });
this.$notify( this.$notify(
@ -786,12 +780,7 @@ export default class ContactQRScanShow extends Vue {
const existingContacts = databaseUtil.mapQueryResultToValues( const existingContacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
let existingContact: Contact | undefined = existingContacts[0]; const existingContact: Contact | undefined = existingContacts[0];
if (USE_DEXIE_DB) {
await db.open();
const existingContacts = await db.contacts.toArray();
existingContact = existingContacts.find((c) => c.did === contact.did);
}
if (existingContact) { if (existingContact) {
logger.info("Contact already exists", { did: contact.did }); logger.info("Contact already exists", { did: contact.did });
@ -817,9 +806,6 @@ export default class ContactQRScanShow extends Vue {
"contacts", "contacts",
); );
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
await db.contacts.add(contact);
}
if (this.activeDid) { if (this.activeDid) {
logger.info("Setting contact visibility", { did: contact.did }); logger.info("Setting contact visibility", { did: contact.did });
@ -858,11 +844,6 @@ export default class ContactQRScanShow extends Vue {
"UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?", "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?",
[stopAsking, MASTER_SETTINGS_KEY], [stopAsking, MASTER_SETTINGS_KEY],
); );
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
hideRegisterPromptOnNewContact: stopAsking,
});
}
this.hideRegisterPromptOnNewContact = stopAsking; this.hideRegisterPromptOnNewContact = stopAsking;
} }
}, },
@ -873,11 +854,6 @@ export default class ContactQRScanShow extends Vue {
"UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?", "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?",
[stopAsking, MASTER_SETTINGS_KEY], [stopAsking, MASTER_SETTINGS_KEY],
); );
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
hideRegisterPromptOnNewContact: stopAsking,
});
}
this.hideRegisterPromptOnNewContact = stopAsking; this.hideRegisterPromptOnNewContact = stopAsking;
} }
}, },

75
src/views/ContactsView.vue

@ -363,19 +363,8 @@ import GiftedDialog from "../components/GiftedDialog.vue";
import OfferDialog from "../components/OfferDialog.vue"; import OfferDialog from "../components/OfferDialog.vue";
import ContactNameDialog from "../components/ContactNameDialog.vue"; import ContactNameDialog from "../components/ContactNameDialog.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { import { APP_SERVER, AppString, NotificationIface } from "../constants/app";
APP_SERVER, import { logConsoleAndDb } from "../db/index";
AppString,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import {
db,
logConsoleAndDb,
retrieveSettingsForActiveAccount,
updateAccountSettings,
updateDefaultSettings,
} from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { getContactJwtFromJwtUrl } from "../libs/crypto"; import { getContactJwtFromJwtUrl } from "../libs/crypto";
@ -384,7 +373,6 @@ import {
CONTACT_CSV_HEADER, CONTACT_CSV_HEADER,
createEndorserJwtForDid, createEndorserJwtForDid,
errorStringForLog, errorStringForLog,
GiveSummaryRecord,
getHeaders, getHeaders,
isDid, isDid,
register, register,
@ -448,11 +436,7 @@ export default class ContactsView extends Vue {
libsUtil = libsUtil; libsUtil = libsUtil;
public async created() { public async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
await db.open();
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
@ -477,15 +461,6 @@ export default class ContactsView extends Vue {
this.contacts = databaseUtil.mapQueryResultToValues( this.contacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
// .orderBy("name") wouldn't retrieve any entries with a blank name
// .toCollection.sortBy("name") didn't sort in an order I understood
const baseContacts = await db.contacts.toArray();
this.contacts = baseContacts.sort((a, b) =>
(a.name || "").localeCompare(b.name || ""),
);
}
} }
private async processContactJwt() { private async processContactJwt() {
@ -545,9 +520,6 @@ export default class ContactsView extends Vue {
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
isRegistered: true, isRegistered: true,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, { isRegistered: true });
}
this.isRegistered = true; this.isRegistered = true;
this.$notify( this.$notify(
{ {
@ -855,15 +827,7 @@ export default class ContactsView extends Vue {
this.contacts = databaseUtil.mapQueryResultToValues( this.contacts = databaseUtil.mapQueryResultToValues(
dbAllContacts, dbAllContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
// .orderBy("name") wouldn't retrieve any entries with a blank name
// .toCollection.sortBy("name") didn't sort in an order I understood
const baseContacts = await db.contacts.toArray();
this.contacts = baseContacts.sort((a, b) =>
(a.name || "").localeCompare(b.name || ""),
);
}
return; return;
} }
@ -942,9 +906,6 @@ export default class ContactsView extends Vue {
"contacts", "contacts",
); );
await platformService.dbExec(sql, params); await platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
await db.contacts.add(newContact);
}
} }
private async addContact(newContact: Contact) { private async addContact(newContact: Contact) {
@ -962,11 +923,8 @@ export default class ContactsView extends Vue {
newContact as unknown as Record<string, unknown>, newContact as unknown as Record<string, unknown>,
"contacts", "contacts",
); );
let contactPromise = platformService.dbExec(sql, params); const contactPromise = platformService.dbExec(sql, params);
if (USE_DEXIE_DB) {
// @ts-expect-error since the result of this promise won't be used, and this will go away soon
contactPromise = db.contacts.add(newContact);
}
return contactPromise return contactPromise
.then(() => { .then(() => {
const allContacts = this.contacts.concat([newContact]); const allContacts = this.contacts.concat([newContact]);
@ -998,11 +956,7 @@ export default class ContactsView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
hideRegisterPromptOnNewContact: stopAsking, hideRegisterPromptOnNewContact: stopAsking,
}); });
if (USE_DEXIE_DB) {
await updateDefaultSettings({
hideRegisterPromptOnNewContact: stopAsking,
});
}
this.hideRegisterPromptOnNewContact = stopAsking; this.hideRegisterPromptOnNewContact = stopAsking;
} }
}, },
@ -1011,11 +965,7 @@ export default class ContactsView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
hideRegisterPromptOnNewContact: stopAsking, hideRegisterPromptOnNewContact: stopAsking,
}); });
if (USE_DEXIE_DB) {
await updateDefaultSettings({
hideRegisterPromptOnNewContact: stopAsking,
});
}
this.hideRegisterPromptOnNewContact = stopAsking; this.hideRegisterPromptOnNewContact = stopAsking;
} }
}, },
@ -1098,9 +1048,6 @@ export default class ContactsView extends Vue {
"UPDATE contacts SET registered = ? WHERE did = ?", "UPDATE contacts SET registered = ? WHERE did = ?",
[true, contact.did], [true, contact.did],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(contact.did, { registered: true });
}
this.$notify( this.$notify(
{ {
@ -1171,7 +1118,6 @@ export default class ContactsView extends Vue {
this.activeDid, this.activeDid,
this.apiServer, this.apiServer,
this.axios, this.axios,
db,
contact, contact,
visibility, visibility,
); );
@ -1311,11 +1257,6 @@ export default class ContactsView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
showContactGivesInline: newShowValue, showContactGivesInline: newShowValue,
}); });
if (USE_DEXIE_DB) {
await updateDefaultSettings({
showContactGivesInline: newShowValue,
});
}
} catch (err) { } catch (err) {
const fullError = const fullError =
"Error updating contact-amounts setting: " + errorStringForLog(err); "Error updating contact-amounts setting: " + errorStringForLog(err);

32
src/views/DIDView.vue

@ -259,24 +259,17 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import InfiniteScroll from "../components/InfiniteScroll.vue"; import InfiniteScroll from "../components/InfiniteScroll.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { BoundingBox } from "../db/tables/settings"; import { BoundingBox } from "../db/tables/settings";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import { GenericCredWrapper, GenericVerifiableCredential } from "../interfaces";
GenericCredWrapper,
GenericVerifiableCredential,
GiveActionClaim,
OfferClaim,
} from "../interfaces";
import { import {
capitalizeAndInsertSpacesBeforeCaps, capitalizeAndInsertSpacesBeforeCaps,
didInfoForContact, didInfoForContact,
displayAmount, displayAmount,
getHeaders, getHeaders,
register, register,
setVisibilityUtil,
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import * as libsUtil from "../libs/util"; import * as libsUtil from "../libs/util";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
@ -352,10 +345,7 @@ export default class DIDView extends Vue {
* Initializes component settings from active account * Initializes component settings from active account
*/ */
private async initializeSettings() { private async initializeSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
} }
@ -410,9 +400,6 @@ export default class DIDView extends Vue {
this.contactFromDid = databaseUtil.mapQueryResultToValues( this.contactFromDid = databaseUtil.mapQueryResultToValues(
dbContacts, dbContacts,
)[0] as unknown as Contact; )[0] as unknown as Contact;
if (USE_DEXIE_DB) {
this.contactFromDid = await db.contacts.get(this.viewingDid);
}
if (this.contactFromDid) { if (this.contactFromDid) {
this.contactYaml = yaml.dump(this.contactFromDid); this.contactYaml = yaml.dump(this.contactFromDid);
} }
@ -479,10 +466,6 @@ export default class DIDView extends Vue {
await platformService.dbExec("DELETE FROM contacts WHERE did = ?", [ await platformService.dbExec("DELETE FROM contacts WHERE did = ?", [
contact.did, contact.did,
]); ]);
if (USE_DEXIE_DB) {
await db.open();
await db.contacts.delete(contact.did);
}
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",
@ -545,9 +528,6 @@ export default class DIDView extends Vue {
"UPDATE contacts SET registered = ? WHERE did = ?", "UPDATE contacts SET registered = ? WHERE did = ?",
[true, contact.did], [true, contact.did],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(contact.did, { registered: true });
}
this.$notify( this.$notify(
{ {
@ -841,9 +821,6 @@ export default class DIDView extends Vue {
"UPDATE contacts SET seesMe = ? WHERE did = ?", "UPDATE contacts SET seesMe = ? WHERE did = ?",
[visibility, contact.did], [visibility, contact.did],
); );
if (USE_DEXIE_DB) {
await db.contacts.update(contact.did, { seesMe: visibility });
}
this.$notify( this.$notify(
{ {
@ -925,9 +902,6 @@ export default class DIDView extends Vue {
"UPDATE contacts SET iViewContent = ? WHERE did = ?", "UPDATE contacts SET iViewContent = ? WHERE did = ?",
[visibility, contact.did], [visibility, contact.did],
); );
if (USE_DEXIE_DB) {
db.contacts.update(contact.did, { iViewContent: visibility });
}
this.$notify( this.$notify(
{ {
group: "alert", group: "alert",

1492
src/views/DatabaseMigration.vue

File diff suppressed because it is too large

9
src/views/DiscoverView.vue

@ -323,7 +323,6 @@ import TopMessage from "../components/TopMessage.vue";
import { import {
NotificationIface, NotificationIface,
DEFAULT_PARTNER_API_SERVER, DEFAULT_PARTNER_API_SERVER,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import { import {
db, db,
@ -402,10 +401,7 @@ export default class DiscoverView extends Vue {
const searchPeople = !!this.$route.query["searchPeople"]; const searchPeople = !!this.$route.query["searchPeople"];
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = (settings.activeDid as string) || ""; this.activeDid = (settings.activeDid as string) || "";
this.apiServer = (settings.apiServer as string) || ""; this.apiServer = (settings.apiServer as string) || "";
this.partnerApiServer = this.partnerApiServer =
@ -415,9 +411,6 @@ export default class DiscoverView extends Vue {
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
const dbContacts = await platformService.dbQuery("SELECT * FROM contacts"); const dbContacts = await platformService.dbQuery("SELECT * FROM contacts");
this.allContacts = databaseUtil.mapQueryResultToValues(dbContacts) as unknown as Contact[]; this.allContacts = databaseUtil.mapQueryResultToValues(dbContacts) as unknown as Contact[];
if (USE_DEXIE_DB) {
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();

16
src/views/GiftedDetailsView.vue

@ -261,11 +261,7 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import ImageMethodDialog from "../components/ImageMethodDialog.vue"; import ImageMethodDialog from "../components/ImageMethodDialog.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { import { DEFAULT_IMAGE_API_SERVER, NotificationIface } from "../constants/app";
DEFAULT_IMAGE_API_SERVER,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { GenericCredWrapper, GiveActionClaim } from "../interfaces"; import { GenericCredWrapper, GiveActionClaim } from "../interfaces";
@ -428,10 +424,7 @@ export default class GiftedDetails extends Vue {
this.imageUrl = this.$route.query["shareUrl"] as string; this.imageUrl = this.$route.query["shareUrl"] as string;
} }
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
@ -443,12 +436,9 @@ export default class GiftedDetails extends Vue {
const dbContacts = await platformService.dbQuery( const dbContacts = await platformService.dbQuery(
"SELECT * FROM contacts", "SELECT * FROM contacts",
); );
let allContacts = databaseUtil.mapQueryResultToValues( const allContacts = databaseUtil.mapQueryResultToValues(
dbContacts, dbContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
allContacts = await db.contacts.toArray();
}
const allMyDids = await retrieveAccountDids(); const allMyDids = await retrieveAccountDids();
if (this.giverDid && !this.giverName) { if (this.giverDid && !this.giverName) {
this.giverName = didInfo( this.giverName = didInfo(

8
src/views/HelpNotificationsView.vue

@ -308,7 +308,7 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { DIRECT_PUSH_TITLE, sendTestThroughPushServer } from "../libs/util"; import { DIRECT_PUSH_TITLE, sendTestThroughPushServer } from "../libs/util";
import PushNotificationPermission from "../components/PushNotificationPermission.vue"; import PushNotificationPermission from "../components/PushNotificationPermission.vue";
import { db } from "../db/index"; import { db } from "../db/index";
@ -426,12 +426,6 @@ export default class HelpNotificationsView extends Vue {
notifyingReminderMessage: message, notifyingReminderMessage: message,
notifyingReminderTime: timeText, notifyingReminderTime: timeText,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
notifyingReminderMessage: message,
notifyingReminderTime: timeText,
});
}
this.notifyingReminder = true; this.notifyingReminder = true;
this.notifyingReminderMessage = message || ""; this.notifyingReminderMessage = message || "";
this.notifyingReminderTime = timeText; this.notifyingReminderTime = timeText;

12
src/views/HelpView.vue

@ -601,7 +601,7 @@ import { Capacitor } from "@capacitor/core";
import * as Package from "../../package.json"; import * as Package from "../../package.json";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
retrieveSettingsForActiveAccount, retrieveSettingsForActiveAccount,
@ -638,20 +638,12 @@ export default class HelpView extends Vue {
} }
async unsetFinishedOnboarding() { async unsetFinishedOnboarding() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
if (settings.activeDid) { if (settings.activeDid) {
await databaseUtil.updateDidSpecificSettings(settings.activeDid, { await databaseUtil.updateDidSpecificSettings(settings.activeDid, {
finishedOnboarding: false, finishedOnboarding: false,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(settings.activeDid, {
finishedOnboarding: false,
});
}
} }
this.$router.push({ name: "home" }); this.$router.push({ name: "home" });
} }

54
src/views/HomeView.vue

@ -318,14 +318,8 @@ import {
AppString, AppString,
NotificationIface, NotificationIface,
PASSKEYS_ENABLED, PASSKEYS_ENABLED,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import { import { logConsoleAndDb } from "../db/index";
db,
logConsoleAndDb,
retrieveSettingsForActiveAccount,
updateAccountSettings,
} from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { import {
BoundingBox, BoundingBox,
@ -552,9 +546,6 @@ export default class HomeView extends Vue {
let settings; let settings;
try { try {
settings = await databaseUtil.retrieveSettingsForActiveAccount(); settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
} catch (error) { } catch (error) {
logConsoleAndDb( logConsoleAndDb(
`[HomeView] Failed to retrieve settings: ${error}`, `[HomeView] Failed to retrieve settings: ${error}`,
@ -623,12 +614,6 @@ export default class HomeView extends Vue {
isRegistered: true, isRegistered: true,
...(await databaseUtil.retrieveSettingsForActiveAccount()), ...(await databaseUtil.retrieveSettingsForActiveAccount()),
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
isRegistered: true,
...(await retrieveSettingsForActiveAccount()),
});
}
this.isRegistered = true; this.isRegistered = true;
} }
} catch (error) { } catch (error) {
@ -707,10 +692,7 @@ export default class HomeView extends Vue {
* Called by mounted() and reloadFeedOnChange() * Called by mounted() and reloadFeedOnChange()
*/ */
private async loadSettings() { private async loadSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.feedLastViewedClaimId = settings.lastViewedClaimId; this.feedLastViewedClaimId = settings.lastViewedClaimId;
@ -739,9 +721,6 @@ export default class HomeView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
dbContacts, dbContacts,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
this.allContacts = await db.contacts.toArray();
}
this.blockedContactDids = this.allContacts this.blockedContactDids = this.allContacts
.filter((c) => !c.iViewContent) .filter((c) => !c.iViewContent)
.map((c) => c.did); .map((c) => c.did);
@ -765,22 +744,13 @@ export default class HomeView extends Vue {
this.activeDid, this.activeDid,
); );
if (resp.status === 200) { if (resp.status === 200) {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings =
if (USE_DEXIE_DB) { await databaseUtil.retrieveSettingsForActiveAccount();
settings = await retrieveSettingsForActiveAccount();
}
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
apiServer: this.apiServer, apiServer: this.apiServer,
isRegistered: true, isRegistered: true,
...settings, ...settings,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
apiServer: this.apiServer,
isRegistered: true,
...settings,
});
}
this.isRegistered = true; this.isRegistered = true;
} }
} catch (e) { } catch (e) {
@ -841,10 +811,7 @@ export default class HomeView extends Vue {
* Called by mounted() * Called by mounted()
*/ */
private async checkOnboarding() { private async checkOnboarding() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
if (!settings.finishedOnboarding) { if (!settings.finishedOnboarding) {
(this.$refs.onboardingDialog as OnboardingDialog).open(OnboardPage.Home); (this.$refs.onboardingDialog as OnboardingDialog).open(OnboardPage.Home);
} }
@ -913,10 +880,7 @@ export default class HomeView extends Vue {
* Called by FeedFilters component when filters change * Called by FeedFilters component when filters change
*/ */
async reloadFeedOnChange() { async reloadFeedOnChange() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.isFeedFilteredByVisible = !!settings.filterFeedByVisible; this.isFeedFilteredByVisible = !!settings.filterFeedByVisible;
this.isFeedFilteredByNearby = !!settings.filterFeedByNearby; this.isFeedFilteredByNearby = !!settings.filterFeedByNearby;
this.isAnyFeedFilterOn = checkIsAnyFeedFilterOn(settings); this.isAnyFeedFilterOn = checkIsAnyFeedFilterOn(settings);
@ -1364,12 +1328,6 @@ export default class HomeView extends Vue {
await databaseUtil.updateDefaultSettings({ await databaseUtil.updateDefaultSettings({
lastViewedClaimId: records[0].jwtId, lastViewedClaimId: records[0].jwtId,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
lastViewedClaimId: records[0].jwtId,
});
}
} }
} }

18
src/views/IdentitySwitcherView.vue

@ -105,7 +105,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { import {
accountsDBPromise, accountsDBPromise,
db, db,
@ -130,10 +130,7 @@ export default class IdentitySwitcherView extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.apiServerInput = settings.apiServer || ""; this.apiServerInput = settings.apiServer || "";
@ -165,12 +162,6 @@ export default class IdentitySwitcherView extends Vue {
async switchAccount(did?: string) { async switchAccount(did?: string) {
await databaseUtil.updateDefaultSettings({ activeDid: did }); await databaseUtil.updateDefaultSettings({ activeDid: did });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
activeDid: did,
});
}
this.$router.push({ name: "account" }); this.$router.push({ name: "account" });
} }
@ -186,11 +177,6 @@ export default class IdentitySwitcherView extends Vue {
await platformService.dbExec(`DELETE FROM accounts WHERE id = ?`, [ await platformService.dbExec(`DELETE FROM accounts WHERE id = ?`, [
id, id,
]); ]);
if (USE_DEXIE_DB) {
// one of the few times we use accountsDBPromise directly; try to avoid more usage
const accountsDB = await accountsDBPromise;
await accountsDB.accounts.delete(id);
}
this.otherIdentities = this.otherIdentities.filter( this.otherIdentities = this.otherIdentities.filter(
(ident) => ident.id !== id, (ident) => ident.id !== id,
); );

8
src/views/ImportAccountView.vue

@ -86,9 +86,8 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { AppString, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index";
import { DEFAULT_ROOT_DERIVATION_PATH } from "../libs/crypto"; import { DEFAULT_ROOT_DERIVATION_PATH } from "../libs/crypto";
import { retrieveAccountCount, importFromMnemonic } from "../libs/util"; import { retrieveAccountCount, importFromMnemonic } from "../libs/util";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
@ -116,10 +115,7 @@ export default class ImportAccountView extends Vue {
async created() { async created() {
this.numAccounts = await retrieveAccountCount(); this.numAccounts = await retrieveAccountCount();
// get the server, to help with import on the test server // get the server, to help with import on the test server
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
} }

6
src/views/ImportDerivedAccountView.vue

@ -90,7 +90,6 @@ import {
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { Account, AccountEncrypted } from "../db/tables/accounts"; import { Account, AccountEncrypted } from "../db/tables/accounts";
import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory";
import { USE_DEXIE_DB } from "@/constants/app";
@Component({ @Component({
components: {}, components: {},
@ -174,11 +173,6 @@ export default class ImportAccountView extends Vue {
await databaseUtil.updateDidSpecificSettings(newId.did, { await databaseUtil.updateDidSpecificSettings(newId.did, {
isRegistered: false, isRegistered: false,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
activeDid: newId.did,
});
}
this.$router.push({ name: "account" }); this.$router.push({ name: "account" });
} catch (err) { } catch (err) {
logger.error("Error saving mnemonic & updating settings:", err); logger.error("Error saving mnemonic & updating settings:", err);

14
src/views/InviteOneAcceptView.vue

@ -42,12 +42,8 @@ import { Component, Vue } from "vue-facing-decorator";
import { Router, RouteLocationNormalized } from "vue-router"; import { Router, RouteLocationNormalized } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import { import { logConsoleAndDb } from "../db/index";
db,
logConsoleAndDb,
retrieveSettingsForActiveAccount,
} from "../db/index";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { decodeEndorserJwt } from "../libs/crypto/vc"; import { decodeEndorserJwt } from "../libs/crypto/vc";
import { errorStringForLog } from "../libs/endorserServer"; import { errorStringForLog } from "../libs/endorserServer";
@ -115,11 +111,7 @@ export default class InviteOneAcceptView extends Vue {
this.checkingInvite = true; this.checkingInvite = true;
// Load or generate identity // Load or generate identity
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
await db.open();
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";

22
src/views/InviteOneView.vue

@ -138,13 +138,7 @@ import ContactNameDialog from "../components/ContactNameDialog.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import InviteDialog from "../components/InviteDialog.vue"; import InviteDialog from "../components/InviteDialog.vue";
import { import { APP_SERVER, AppString, NotificationIface } from "../constants/app";
APP_SERVER,
AppString,
NotificationIface,
USE_DEXIE_DB,
} from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { createInviteJwt, getHeaders } from "../libs/endorserServer"; import { createInviteJwt, getHeaders } from "../libs/endorserServer";
@ -176,11 +170,7 @@ export default class InviteOneView extends Vue {
async mounted() { async mounted() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
await db.open();
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
@ -196,12 +186,9 @@ export default class InviteOneView extends Vue {
const queryResult = await platformService.dbQuery( const queryResult = await platformService.dbQuery(
"SELECT * FROM contacts", "SELECT * FROM contacts",
); );
let baseContacts = databaseUtil.mapQueryResultToValues( const baseContacts = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
baseContacts = await db.contacts.toArray();
}
for (const invite of this.invites) { for (const invite of this.invites) {
const contact = baseContacts.find( const contact = baseContacts.find(
(contact) => contact.did === invite.redeemedBy, (contact) => contact.did === invite.redeemedBy,
@ -365,9 +352,6 @@ export default class InviteOneView extends Vue {
const placeholders = values.map(() => "?").join(", "); const placeholders = values.map(() => "?").join(", ");
const sql = `INSERT INTO contacts (${columns.join(", ")}) VALUES (${placeholders})`; const sql = `INSERT INTO contacts (${columns.join(", ")}) VALUES (${placeholders})`;
await platformService.dbExec(sql, values); await platformService.dbExec(sql, values);
if (USE_DEXIE_DB) {
await db.contacts.add(contact);
}
this.contactsRedeemed[did] = contact; this.contactsRedeemed[did] = contact;
this.$notify( this.$notify(

13
src/views/LogView.vue

@ -62,7 +62,6 @@ import { db } from "../db/index";
import { Log } from "../db/tables/logs"; import { Log } from "../db/tables/logs";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { PlatformServiceFactory } from "../services/PlatformServiceFactory"; import { PlatformServiceFactory } from "../services/PlatformServiceFactory";
import { USE_DEXIE_DB } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@Component({ @Component({
@ -88,7 +87,7 @@ export default class LogView extends Vue {
this.error = null; // Clear any previous errors this.error = null; // Clear any previous errors
this.memoryLogs = databaseUtil.memoryLogs; this.memoryLogs = databaseUtil.memoryLogs;
let allLogs: Log[] = []; const allLogs: Log[] = [];
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
const queryResult = await platformService.dbQuery( const queryResult = await platformService.dbQuery(
"SELECT * FROM logs ORDER BY date DESC", "SELECT * FROM logs ORDER BY date DESC",
@ -96,16 +95,6 @@ export default class LogView extends Vue {
this.logs = databaseUtil.mapQueryResultToValues( this.logs = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Log[]; ) as unknown as Log[];
if (USE_DEXIE_DB) {
await db.open();
allLogs = await db.logs.toArray();
// Sort by date in reverse chronological order
this.logs = allLogs.sort((a, b) => {
const dateA = new Date(a.date);
const dateB = new Date(b.date);
return dateB.getTime() - dateA.getTime();
});
}
} catch (error) { } catch (error) {
logger.error("Error loading logs:", error); logger.error("Error loading logs:", error);
this.error = this.error =

50
src/views/NewActivityView.vue

@ -153,15 +153,9 @@ import { Component, Vue } from "vue-facing-decorator";
import GiftedDialog from "../components/GiftedDialog.vue"; import GiftedDialog from "../components/GiftedDialog.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import {
db,
retrieveSettingsForActiveAccount,
updateAccountSettings,
} from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { OfferSummaryRecord, OfferToPlanSummaryRecord } from "../interfaces";
import { import {
didInfo, didInfo,
displayAmount, displayAmount,
@ -197,10 +191,7 @@ export default class NewActivityView extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId || ""; this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId || "";
@ -214,10 +205,6 @@ export default class NewActivityView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();
@ -260,11 +247,6 @@ export default class NewActivityView extends Vue {
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId, lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
}); });
if (USE_DEXIE_DB) {
await updateAccountSettings(this.activeDid, {
lastAckedOfferToUserJwtId: this.newOffersToUser[0].jwtId,
});
}
// note that we don't update this.lastAckedOfferToUserJwtId in case they // note that we don't update this.lastAckedOfferToUserJwtId in case they
// later choose the last one to keep the offers as new // later choose the last one to keep the offers as new
this.$notify( this.$notify(
@ -288,21 +270,11 @@ export default class NewActivityView extends Vue {
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
lastAckedOfferToUserJwtId: this.newOffersToUser[index + 1].jwtId, lastAckedOfferToUserJwtId: this.newOffersToUser[index + 1].jwtId,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(this.activeDid, {
lastAckedOfferToUserJwtId: this.newOffersToUser[index + 1].jwtId,
});
}
} else { } else {
// it's the last entry (or not found), so just keep it the same // it's the last entry (or not found), so just keep it the same
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
lastAckedOfferToUserJwtId: this.lastAckedOfferToUserJwtId, lastAckedOfferToUserJwtId: this.lastAckedOfferToUserJwtId,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(this.activeDid, {
lastAckedOfferToUserJwtId: this.lastAckedOfferToUserJwtId,
});
}
} }
this.$notify( this.$notify(
{ {
@ -323,12 +295,6 @@ export default class NewActivityView extends Vue {
lastAckedOfferToUserProjectsJwtId: lastAckedOfferToUserProjectsJwtId:
this.newOffersToUserProjects[0].jwtId, this.newOffersToUserProjects[0].jwtId,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(this.activeDid, {
lastAckedOfferToUserProjectsJwtId:
this.newOffersToUserProjects[0].jwtId,
});
}
// note that we don't update this.lastAckedOfferToUserProjectsJwtId in case // note that we don't update this.lastAckedOfferToUserProjectsJwtId in case
// they later choose the last one to keep the offers as new // they later choose the last one to keep the offers as new
this.$notify( this.$notify(
@ -353,24 +319,12 @@ export default class NewActivityView extends Vue {
lastAckedOfferToUserProjectsJwtId: lastAckedOfferToUserProjectsJwtId:
this.newOffersToUserProjects[index + 1].jwtId, this.newOffersToUserProjects[index + 1].jwtId,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(this.activeDid, {
lastAckedOfferToUserProjectsJwtId:
this.newOffersToUserProjects[index + 1].jwtId,
});
}
} else { } else {
// it's the last entry (or not found), so just keep it the same // it's the last entry (or not found), so just keep it the same
await databaseUtil.updateDidSpecificSettings(this.activeDid, { await databaseUtil.updateDidSpecificSettings(this.activeDid, {
lastAckedOfferToUserProjectsJwtId: lastAckedOfferToUserProjectsJwtId:
this.lastAckedOfferToUserProjectsJwtId, this.lastAckedOfferToUserProjectsJwtId,
}); });
if (USE_DEXIE_DB) {
await db.settings.update(this.activeDid, {
lastAckedOfferToUserProjectsJwtId:
this.lastAckedOfferToUserProjectsJwtId,
});
}
} }
this.$notify( this.$notify(
{ {

14
src/views/NewEditAccountView.vue

@ -47,9 +47,6 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { USE_DEXIE_DB } from "@/constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { MASTER_SETTINGS_KEY } from "../db/tables/settings";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
@Component({ @Component({
@ -62,10 +59,7 @@ export default class NewEditAccountView extends Vue {
// 'created' hook runs when the Vue instance is first created // 'created' hook runs when the Vue instance is first created
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.givenName = this.givenName =
(settings.firstName || "") + (settings.firstName || "") +
(settings.lastName ? ` ${settings.lastName}` : ""); // deprecated, pre v 0.1.3 (settings.lastName ? ` ${settings.lastName}` : ""); // deprecated, pre v 0.1.3
@ -76,12 +70,6 @@ export default class NewEditAccountView extends Vue {
firstName: this.givenName, firstName: this.givenName,
lastName: "", // deprecated, pre v 0.1.3 lastName: "", // deprecated, pre v 0.1.3
}); });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
firstName: this.givenName,
lastName: "", // deprecated, pre v 0.1.3
});
}
this.$router.back(); this.$router.back();
} }

11
src/views/NewEditProjectView.vue

@ -237,7 +237,6 @@ import {
DEFAULT_IMAGE_API_SERVER, DEFAULT_IMAGE_API_SERVER,
DEFAULT_PARTNER_API_SERVER, DEFAULT_PARTNER_API_SERVER,
NotificationIface, NotificationIface,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
@ -305,10 +304,7 @@ export default class NewEditProjectView extends Vue {
async mounted() { async mounted() {
this.numAccounts = await retrieveAccountCount(); this.numAccounts = await retrieveAccountCount();
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.showGeneralAdvanced = !!settings.showGeneralAdvanced; this.showGeneralAdvanced = !!settings.showGeneralAdvanced;
@ -707,10 +703,7 @@ export default class NewEditProjectView extends Vue {
) { ) {
try { try {
let partnerServer = DEFAULT_PARTNER_API_SERVER; let partnerServer = DEFAULT_PARTNER_API_SERVER;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
if (settings.partnerApiServer) { if (settings.partnerApiServer) {
partnerServer = settings.partnerApiServer; partnerServer = settings.partnerApiServer;
} }

11
src/views/OfferDetailsView.vue

@ -180,7 +180,7 @@ import { RouteLocationNormalizedLoaded, Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { GenericCredWrapper, OfferClaim } from "../interfaces"; import { GenericCredWrapper, OfferClaim } from "../interfaces";
import { import {
@ -402,10 +402,7 @@ export default class OfferDetailsView extends Vue {
* @throws Will not throw but logs errors * @throws Will not throw but logs errors
*/ */
private async loadAccountSettings() { private async loadAccountSettings() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer ?? ""; this.apiServer = settings.apiServer ?? "";
this.activeDid = settings.activeDid ?? ""; this.activeDid = settings.activeDid ?? "";
this.showGeneralAdvanced = settings.showGeneralAdvanced ?? false; this.showGeneralAdvanced = settings.showGeneralAdvanced ?? false;
@ -424,10 +421,6 @@ export default class OfferDetailsView extends Vue {
allContacts = databaseUtil.mapQueryResultToValues( allContacts = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
allContacts = await db.contacts.toArray();
}
const allMyDids = await retrieveAccountDids(); const allMyDids = await retrieveAccountDids();
this.recipientName = didInfo( this.recipientName = didInfo(
this.recipientDid, this.recipientDid,

6
src/views/OnboardMeetingListView.vue

@ -98,7 +98,6 @@ import {
serverMessageForUser, serverMessageForUser,
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import { encryptMessage } from "../libs/crypto"; import { encryptMessage } from "../libs/crypto";
import { USE_DEXIE_DB } from "@/constants/app";
interface Meeting { interface Meeting {
name: string; name: string;
@ -137,10 +136,7 @@ export default class OnboardMeetingListView extends Vue {
showPasswordDialog = false; showPasswordDialog = false;
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.firstName = settings.firstName || ""; this.firstName = settings.firstName || "";

7
src/views/OnboardMeetingMembersView.vue

@ -56,7 +56,6 @@ import TopMessage from "../components/TopMessage.vue";
import MembersList from "../components/MembersList.vue"; import MembersList from "../components/MembersList.vue";
import UserNameDialog from "../components/UserNameDialog.vue"; import UserNameDialog from "../components/UserNameDialog.vue";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index";
import { logConsoleAndDb } from "../db/databaseUtil"; import { logConsoleAndDb } from "../db/databaseUtil";
import { encryptMessage } from "../libs/crypto"; import { encryptMessage } from "../libs/crypto";
import { import {
@ -65,7 +64,6 @@ import {
serverMessageForUser, serverMessageForUser,
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import { generateSaveAndActivateIdentity } from "../libs/util"; import { generateSaveAndActivateIdentity } from "../libs/util";
import { USE_DEXIE_DB } from "@/constants/app";
@Component({ @Component({
components: { components: {
@ -107,10 +105,7 @@ export default class OnboardMeetingMembersView extends Vue {
this.isLoading = false; this.isLoading = false;
return; return;
} }
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.firstName = settings.firstName || ""; this.firstName = settings.firstName || "";

7
src/views/OnboardMeetingSetupView.vue

@ -285,7 +285,7 @@ import {
} from "../libs/endorserServer"; } from "../libs/endorserServer";
import { encryptMessage } from "../libs/crypto"; import { encryptMessage } from "../libs/crypto";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
import { APP_SERVER, USE_DEXIE_DB } from "@/constants/app"; import { APP_SERVER } from "@/constants/app";
interface ServerMeeting { interface ServerMeeting {
groupId: number; // from the server groupId: number; // from the server
name: string; // to & from the server name: string; // to & from the server
@ -332,10 +332,7 @@ export default class OnboardMeetingView extends Vue {
} }
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.fullName = settings.firstName || ""; this.fullName = settings.firstName || "";

11
src/views/ProjectViewView.vue

@ -642,7 +642,7 @@ import TopMessage from "../components/TopMessage.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import ProjectIcon from "../components/ProjectIcon.vue"; import ProjectIcon from "../components/ProjectIcon.vue";
import { APP_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { APP_SERVER, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
db, db,
@ -799,10 +799,7 @@ export default class ProjectViewView extends Vue {
* @emits Notification on profile loading errors * @emits Notification on profile loading errors
*/ */
async created() { async created() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
@ -810,10 +807,6 @@ export default class ProjectViewView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
try { try {

12
src/views/ProjectsView.vue

@ -270,8 +270,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { Capacitor } from "@capacitor/core"; import { Capacitor } from "@capacitor/core";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import InfiniteScroll from "../components/InfiniteScroll.vue"; import InfiniteScroll from "../components/InfiniteScroll.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
@ -327,10 +326,7 @@ export default class ProjectsView extends Vue {
async mounted() { async mounted() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.isRegistered = !!settings.isRegistered; this.isRegistered = !!settings.isRegistered;
@ -343,10 +339,6 @@ export default class ProjectsView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
queryResult, queryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await libsUtil.retrieveAccountDids(); this.allMyDids = await libsUtil.retrieveAccountDids();

18
src/views/QuickActionBvcBeginView.vue

@ -72,9 +72,8 @@ import { Component, Vue } from "vue-facing-decorator";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index";
import { import {
BVC_MEETUPS_PROJECT_CLAIM_ID, BVC_MEETUPS_PROJECT_CLAIM_ID,
bvcMeetingJoinClaim, bvcMeetingJoinClaim,
@ -118,10 +117,7 @@ export default class QuickActionBvcBeginView extends Vue {
} }
async record() { async record() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
const activeDid = settings.activeDid || ""; const activeDid = settings.activeDid || "";
const apiServer = settings.apiServer || ""; const apiServer = settings.apiServer || "";
@ -144,7 +140,7 @@ export default class QuickActionBvcBeginView extends Vue {
"HUR", "HUR",
BVC_MEETUPS_PROJECT_CLAIM_ID, BVC_MEETUPS_PROJECT_CLAIM_ID,
); );
if (timeResult.type === "success") { if (timeResult.success) {
timeSuccess = true; timeSuccess = true;
} else { } else {
logger.error("Error sending time:", timeResult); logger.error("Error sending time:", timeResult);
@ -153,9 +149,7 @@ export default class QuickActionBvcBeginView extends Vue {
group: "alert", group: "alert",
type: "danger", type: "danger",
title: "Error", title: "Error",
text: text: timeResult?.error || "There was an error sending the time.",
timeResult?.error?.userMessage ||
"There was an error sending the time.",
}, },
5000, 5000,
); );
@ -171,7 +165,7 @@ export default class QuickActionBvcBeginView extends Vue {
apiServer, apiServer,
axios, axios,
); );
if (attendResult.type === "success") { if (attendResult.success) {
attendedSuccess = true; attendedSuccess = true;
} else { } else {
logger.error("Error sending attendance:", attendResult); logger.error("Error sending attendance:", attendResult);
@ -181,7 +175,7 @@ export default class QuickActionBvcBeginView extends Vue {
type: "danger", type: "danger",
title: "Error", title: "Error",
text: text:
attendResult?.error?.userMessage || attendResult?.error ||
"There was an error sending the attendance.", "There was an error sending the attendance.",
}, },
5000, 5000,

17
src/views/QuickActionBvcEndView.vue

@ -144,7 +144,7 @@ import { Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
accountsDBPromise, accountsDBPromise,
@ -194,10 +194,7 @@ export default class QuickActionBvcBeginView extends Vue {
async created() { async created() {
this.loadingConfirms = true; this.loadingConfirms = true;
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
@ -208,10 +205,6 @@ export default class QuickActionBvcBeginView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
contactQueryResult, contactQueryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
let currentOrPreviousSat = DateTime.now().setZone("America/Denver"); let currentOrPreviousSat = DateTime.now().setZone("America/Denver");
if (currentOrPreviousSat.weekday < 6) { if (currentOrPreviousSat.weekday < 6) {
@ -233,12 +226,6 @@ export default class QuickActionBvcBeginView extends Vue {
this.allMyDids = (await retrieveAllAccountsMetadata()).map( this.allMyDids = (await retrieveAllAccountsMetadata()).map(
(account) => account.did, (account) => account.did,
); );
if (USE_DEXIE_DB) {
const accountsDB = await accountsDBPromise;
await accountsDB.open();
const allAccounts = await accountsDB.accounts.toArray();
this.allMyDids = allAccounts.map((acc) => acc.did);
}
const headers = await getHeaders(this.activeDid); const headers = await getHeaders(this.activeDid);
try { try {
const response = await fetch( const response = await fetch(

12
src/views/RecentOffersToUserProjectsView.vue

@ -83,9 +83,8 @@ import EntityIcon from "../components/EntityIcon.vue";
import GiftedDialog from "../components/GiftedDialog.vue"; import GiftedDialog from "../components/GiftedDialog.vue";
import InfiniteScroll from "../components/InfiniteScroll.vue"; import InfiniteScroll from "../components/InfiniteScroll.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { OfferToPlanSummaryRecord } from "../interfaces"; import { OfferToPlanSummaryRecord } from "../interfaces";
@ -118,10 +117,7 @@ export default class RecentOffersToUserView extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.lastAckedOfferToUserProjectsJwtId = this.lastAckedOfferToUserProjectsJwtId =
@ -134,10 +130,6 @@ export default class RecentOffersToUserView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
contactQueryResult, contactQueryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
await db.open();
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();

10
src/views/RecentOffersToUserView.vue

@ -76,7 +76,7 @@ import GiftedDialog from "../components/GiftedDialog.vue";
import EntityIcon from "../components/EntityIcon.vue"; import EntityIcon from "../components/EntityIcon.vue";
import InfiniteScroll from "../components/InfiniteScroll.vue"; import InfiniteScroll from "../components/InfiniteScroll.vue";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { Contact } from "../db/tables/contacts"; import { Contact } from "../db/tables/contacts";
@ -110,10 +110,7 @@ export default class RecentOffersToUserView extends Vue {
async created() { async created() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.apiServer = settings.apiServer || ""; this.apiServer = settings.apiServer || "";
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId || ""; this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId || "";
@ -125,9 +122,6 @@ export default class RecentOffersToUserView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
contactQueryResult, contactQueryResult,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();

23
src/views/SearchAreaView.vue

@ -112,10 +112,9 @@ import {
import { Router } from "vue-router"; import { Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { BoundingBox } from "../db/tables/settings";
import { BoundingBox, MASTER_SETTINGS_KEY } from "../db/tables/settings";
import { logger } from "../utils/logger"; import { logger } from "../utils/logger";
const DEFAULT_LAT_LONG_DIFF = 0.01; const DEFAULT_LAT_LONG_DIFF = 0.01;
@ -149,10 +148,7 @@ export default class SearchAreaView extends Vue {
searchBox: { name: string; bbox: BoundingBox } | null = null; searchBox: { name: string; bbox: BoundingBox } | null = null;
async mounted() { async mounted() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.searchBox = settings.searchBoxes?.[0] || null; this.searchBox = settings.searchBoxes?.[0] || null;
this.resetLatLong(); this.resetLatLong();
} }
@ -212,12 +208,6 @@ export default class SearchAreaView extends Vue {
const searchBoxes = JSON.stringify([newSearchBox]); const searchBoxes = JSON.stringify([newSearchBox]);
// @ts-expect-error - the DB requires searchBoxes to be a string // @ts-expect-error - the DB requires searchBoxes to be a string
databaseUtil.updateDefaultSettings({ searchBoxes }); databaseUtil.updateDefaultSettings({ searchBoxes });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
searchBoxes: searchBoxes as unknown, // Type assertion for Dexie compatibility
});
}
this.searchBox = newSearchBox; this.searchBox = newSearchBox;
this.isChoosingSearchBox = false; this.isChoosingSearchBox = false;
@ -266,13 +256,6 @@ export default class SearchAreaView extends Vue {
searchBoxes: "[]", searchBoxes: "[]",
filterFeedByNearby: false, filterFeedByNearby: false,
}); });
if (USE_DEXIE_DB) {
await db.open();
await db.settings.update(MASTER_SETTINGS_KEY, {
searchBoxes: "[]" as unknown as string, // Type assertion for Dexie compatibility
filterFeedByNearby: false,
});
}
this.searchBox = null; this.searchBox = null;
this.localCenterLat = 0; this.localCenterLat = 0;
this.localCenterLong = 0; this.localCenterLong = 0;

8
src/views/SeedBackupView.vue

@ -109,8 +109,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { useClipboard } from "@vueuse/core"; import { useClipboard } from "@vueuse/core";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface } from "../constants/app";
import { retrieveSettingsForActiveAccount } from "../db/index";
import { Account } from "../db/tables/accounts"; import { Account } from "../db/tables/accounts";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { import {
@ -136,11 +135,6 @@ export default class SeedBackupView extends Vue {
const settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
activeDid = settings.activeDid || ""; activeDid = settings.activeDid || "";
if (USE_DEXIE_DB) {
const settings = await retrieveSettingsForActiveAccount();
activeDid = settings.activeDid || "";
}
this.numAccounts = await retrieveAccountCount(); this.numAccounts = await retrieveAccountCount();
this.activeAccount = await retrieveFullyDecryptedAccount(activeDid); this.activeAccount = await retrieveFullyDecryptedAccount(activeDid);
} catch (err: unknown) { } catch (err: unknown) {

12
src/views/ShareMyContactInfoView.vue

@ -46,7 +46,7 @@ import { Router } from "vue-router";
import { useClipboard } from "@vueuse/core"; import { useClipboard } from "@vueuse/core";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import TopMessage from "../components/TopMessage.vue"; import TopMessage from "../components/TopMessage.vue";
import { NotificationIface, APP_SERVER, USE_DEXIE_DB } from "../constants/app"; import { NotificationIface, APP_SERVER } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import { retrieveFullyDecryptedAccount } from "../libs/util"; import { retrieveFullyDecryptedAccount } from "../libs/util";
@ -66,10 +66,7 @@ export default class ShareMyContactInfoView extends Vue {
} }
async onClickShare() { async onClickShare() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
const activeDid = settings.activeDid || ""; const activeDid = settings.activeDid || "";
const givenName = settings.firstName || ""; const givenName = settings.firstName || "";
const isRegistered = !!settings.isRegistered; const isRegistered = !!settings.isRegistered;
@ -81,13 +78,10 @@ export default class ShareMyContactInfoView extends Vue {
const contactQueryResult = await platformService.dbQuery( const contactQueryResult = await platformService.dbQuery(
"SELECT COUNT(*) FROM contacts", "SELECT COUNT(*) FROM contacts",
); );
let numContacts = const numContacts =
(databaseUtil.mapQueryResultToValues( (databaseUtil.mapQueryResultToValues(
contactQueryResult, contactQueryResult,
)?.[0]?.[0] as number) || 0; )?.[0]?.[0] as number) || 0;
if (USE_DEXIE_DB) {
numContacts = await db.contacts.count();
}
if (account) { if (account) {
const message = await generateEndorserJwtUrlForAccount( const message = await generateEndorserJwtUrlForAccount(

19
src/views/SharedPhotoView.vue

@ -78,7 +78,6 @@ import {
DEFAULT_IMAGE_API_SERVER, DEFAULT_IMAGE_API_SERVER,
IMAGE_TYPE_PROFILE, IMAGE_TYPE_PROFILE,
NotificationIface, NotificationIface,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
@ -104,10 +103,7 @@ export default class SharedPhotoView extends Vue {
// 'created' hook runs when the Vue instance is first created // 'created' hook runs when the Vue instance is first created
async mounted() { async mounted() {
try { try {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid; this.activeDid = settings.activeDid;
const platformService = PlatformServiceFactory.getInstance(); const platformService = PlatformServiceFactory.getInstance();
@ -115,10 +111,7 @@ export default class SharedPhotoView extends Vue {
"SELECT * FROM temp WHERE id = ?", "SELECT * FROM temp WHERE id = ?",
[SHARED_PHOTO_BASE64_KEY], [SHARED_PHOTO_BASE64_KEY],
); );
let temp = databaseUtil.mapQueryResultToValues(tempQuery)?.[0] as Temp; const temp = databaseUtil.mapQueryResultToValues(tempQuery)?.[0] as Temp;
if (USE_DEXIE_DB) {
temp = (await db.temp.get(SHARED_PHOTO_BASE64_KEY)) as unknown as Temp;
}
const imageB64 = temp?.blobB64 as string; const imageB64 = temp?.blobB64 as string;
if (temp) { if (temp) {
this.imageBlob = base64ToBlob(imageB64); this.imageBlob = base64ToBlob(imageB64);
@ -127,9 +120,6 @@ export default class SharedPhotoView extends Vue {
await platformService.dbExec("DELETE FROM temp WHERE id = ?", [ await platformService.dbExec("DELETE FROM temp WHERE id = ?", [
SHARED_PHOTO_BASE64_KEY, SHARED_PHOTO_BASE64_KEY,
]); ]);
if (USE_DEXIE_DB) {
await db.temp.delete(SHARED_PHOTO_BASE64_KEY);
}
this.imageFileName = this.$route.query["fileName"] as string; this.imageFileName = this.$route.query["fileName"] as string;
} else { } else {
@ -171,11 +161,6 @@ export default class SharedPhotoView extends Vue {
(this.$refs.photoDialog as PhotoDialog).open( (this.$refs.photoDialog as PhotoDialog).open(
async (imgUrl) => { async (imgUrl) => {
databaseUtil.updateDefaultSettings({ profileImageUrl: imgUrl }); databaseUtil.updateDefaultSettings({ profileImageUrl: imgUrl });
if (USE_DEXIE_DB) {
await db.settings.update(MASTER_SETTINGS_KEY, {
profileImageUrl: imgUrl,
});
}
this.$router.push({ name: "account" }); this.$router.push({ name: "account" });
}, },
IMAGE_TYPE_PROFILE, IMAGE_TYPE_PROFILE,

7
src/views/StartView.vue

@ -103,7 +103,7 @@
import { Component, Vue } from "vue-facing-decorator"; import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import { AppString, PASSKEYS_ENABLED, USE_DEXIE_DB } from "../constants/app"; import { AppString, PASSKEYS_ENABLED } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { retrieveSettingsForActiveAccount } from "../db/index"; import { retrieveSettingsForActiveAccount } from "../db/index";
import { import {
@ -122,10 +122,7 @@ export default class StartView extends Vue {
numAccounts = 0; numAccounts = 0;
async mounted() { async mounted() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.givenName = settings.firstName || ""; this.givenName = settings.firstName || "";
this.numAccounts = await retrieveAccountCount(); this.numAccounts = await retrieveAccountCount();

19
src/views/TestView.vue

@ -339,7 +339,7 @@ import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router"; import { Router } from "vue-router";
import QuickNav from "../components/QuickNav.vue"; import QuickNav from "../components/QuickNav.vue";
import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { AppString, NotificationIface } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db, retrieveSettingsForActiveAccount } from "../db/index"; import { db, retrieveSettingsForActiveAccount } from "../db/index";
import * as vcLib from "../libs/crypto/vc"; import * as vcLib from "../libs/crypto/vc";
@ -399,10 +399,7 @@ export default class Help extends Vue {
cryptoLib = cryptoLib; cryptoLib = cryptoLib;
async mounted() { async mounted() {
let settings = await databaseUtil.retrieveSettingsForActiveAccount(); const settings = await databaseUtil.retrieveSettingsForActiveAccount();
if (USE_DEXIE_DB) {
settings = await retrieveSettingsForActiveAccount();
}
this.activeDid = settings.activeDid || ""; this.activeDid = settings.activeDid || "";
this.userName = settings.firstName; this.userName = settings.firstName;
@ -438,7 +435,7 @@ export default class Help extends Vue {
"SELECT * FROM temp WHERE id = ?", "SELECT * FROM temp WHERE id = ?",
[SHARED_PHOTO_BASE64_KEY], [SHARED_PHOTO_BASE64_KEY],
); );
let temp = databaseUtil.mapQueryResultToValues( const temp = databaseUtil.mapQueryResultToValues(
tempQuery, tempQuery,
)?.[0] as Temp; )?.[0] as Temp;
if (temp) { if (temp) {
@ -452,16 +449,6 @@ export default class Help extends Vue {
[SHARED_PHOTO_BASE64_KEY, blobB64], [SHARED_PHOTO_BASE64_KEY, blobB64],
); );
} }
if (USE_DEXIE_DB) {
temp = (await db.temp.get(
SHARED_PHOTO_BASE64_KEY,
)) as unknown as Temp;
if (temp) {
await db.temp.update(SHARED_PHOTO_BASE64_KEY, { blobB64 });
} else {
await db.temp.add({ id: SHARED_PHOTO_BASE64_KEY, blobB64 });
}
}
} }
}; };
reader.readAsArrayBuffer(file as Blob); reader.readAsArrayBuffer(file as Blob);

9
src/views/UserProfileView.vue

@ -110,7 +110,6 @@ import {
APP_SERVER, APP_SERVER,
DEFAULT_PARTNER_API_SERVER, DEFAULT_PARTNER_API_SERVER,
NotificationIface, NotificationIface,
USE_DEXIE_DB,
} from "../constants/app"; } from "../constants/app";
import * as databaseUtil from "../db/databaseUtil"; import * as databaseUtil from "../db/databaseUtil";
import { db } from "../db/index"; import { db } from "../db/index";
@ -152,12 +151,9 @@ export default class UserProfileView extends Vue {
const settingsQuery = await platformService.dbQuery( const settingsQuery = await platformService.dbQuery(
"SELECT * FROM settings", "SELECT * FROM settings",
); );
let settings = databaseUtil.mapQueryResultToValues( const settings = databaseUtil.mapQueryResultToValues(
settingsQuery, settingsQuery,
) as Settings[]; ) as Settings[];
if (USE_DEXIE_DB) {
settings = await db.settings.toArray();
}
this.activeDid = settings[0]?.activeDid || ""; this.activeDid = settings[0]?.activeDid || "";
this.partnerApiServer = this.partnerApiServer =
settings[0]?.partnerApiServer || this.partnerApiServer; settings[0]?.partnerApiServer || this.partnerApiServer;
@ -168,9 +164,6 @@ export default class UserProfileView extends Vue {
this.allContacts = databaseUtil.mapQueryResultToValues( this.allContacts = databaseUtil.mapQueryResultToValues(
contactQuery, contactQuery,
) as unknown as Contact[]; ) as unknown as Contact[];
if (USE_DEXIE_DB) {
this.allContacts = await db.contacts.toArray();
}
this.allMyDids = await retrieveAccountDids(); this.allMyDids = await retrieveAccountDids();
await this.loadProfile(); await this.loadProfile();

Loading…
Cancel
Save