diff --git a/src/libs/util.ts b/src/libs/util.ts index 4413f995..e9dc22cf 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -971,11 +971,72 @@ export async function importFromMnemonic( // Set up Test User #0 specific settings if (isTestUser0) { - // Set up Test User #0 specific settings + // Set up Test User #0 specific settings with enhanced error handling const platformService = await getPlatformService(); - await platformService.updateDidSpecificSettings(newId.did, { - firstName: "User Zero", - isRegistered: true, - }); + + try { + // First, ensure the DID-specific settings record exists + await platformService.insertDidSpecificSettings(newId.did); + + // Then update with Test User #0 specific settings + await platformService.updateDidSpecificSettings(newId.did, { + firstName: "User Zero", + isRegistered: true, + }); + + // Verify the settings were saved correctly + const verificationResult = await platformService.dbQuery( + "SELECT firstName, isRegistered FROM settings WHERE accountDid = ?", + [newId.did], + ); + + if (verificationResult?.values?.length) { + const settings = verificationResult.values[0]; + const firstName = settings[0]; + const isRegistered = settings[1]; + + logger.info("[importFromMnemonic] Test User #0 settings verification", { + did: newId.did, + firstName, + isRegistered, + expectedFirstName: "User Zero", + expectedIsRegistered: true, + }); + + // If settings weren't saved correctly, try individual updates + if (firstName !== "User Zero" || isRegistered !== 1) { + logger.warn("[importFromMnemonic] Test User #0 settings not saved correctly, retrying with individual updates"); + + await platformService.dbExec( + "UPDATE settings SET firstName = ? WHERE accountDid = ?", + ["User Zero", newId.did], + ); + + await platformService.dbExec( + "UPDATE settings SET isRegistered = ? WHERE accountDid = ?", + [1, newId.did], + ); + + // Verify again + const retryResult = await platformService.dbQuery( + "SELECT firstName, isRegistered FROM settings WHERE accountDid = ?", + [newId.did], + ); + + if (retryResult?.values?.length) { + const retrySettings = retryResult.values[0]; + logger.info("[importFromMnemonic] Test User #0 settings after retry", { + firstName: retrySettings[0], + isRegistered: retrySettings[1], + }); + } + } + } else { + logger.error("[importFromMnemonic] Failed to verify Test User #0 settings - no record found"); + } + } catch (error) { + logger.error("[importFromMnemonic] Error setting up Test User #0 settings:", error); + // Don't throw - allow the import to continue even if settings fail + } } } diff --git a/src/router/index.ts b/src/router/index.ts index bfa3dfaa..f51e5057 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -379,10 +379,4 @@ router.beforeEach(async (to, from, next) => { } }); -// router.beforeEach((to, from, next) => { -// console.log("Navigating to view:", to.name); -// console.log("From view:", from.name); -// next(); -// }); - export default router; diff --git a/src/test/PlatformServiceMixinTest.vue b/src/test/PlatformServiceMixinTest.vue index 057dc3b5..f25d78a4 100644 --- a/src/test/PlatformServiceMixinTest.vue +++ b/src/test/PlatformServiceMixinTest.vue @@ -3,6 +3,17 @@

PlatformServiceMixin Test

+ + +
+

User #0 Settings Test Result:

+
{{ JSON.stringify(userZeroTestResult, null, 2) }}
+
{{ result }}
@@ -16,6 +27,7 @@ import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin"; }) export default class PlatformServiceMixinTest extends Vue { result: string = ""; + userZeroTestResult: any = null; testInsert() { const contact = { @@ -38,5 +50,34 @@ export default class PlatformServiceMixinTest extends Vue { ); this.result = `SQL: ${sql}\nParams: ${JSON.stringify(params)}`; } + + async testUserZeroSettings() { + try { + // User #0's DID + const userZeroDid = "did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F"; + + this.result = "Testing User #0 settings..."; + + // Test the debug methods + await this.$debugMergedSettings(userZeroDid); + + // Get the actual settings + const didSettings = await this.$debugDidSettings(userZeroDid); + const accountSettings = await this.$accountSettings(userZeroDid); + + this.userZeroTestResult = { + didSettings, + accountSettings, + isRegistered: accountSettings.isRegistered, + firstName: accountSettings.firstName, + timestamp: new Date().toISOString(), + }; + + this.result = `User #0 settings test completed. isRegistered: ${accountSettings.isRegistered}`; + } catch (error) { + this.result = `Error testing User #0 settings: ${error}`; + console.error("Error testing User #0 settings:", error); + } + } } diff --git a/src/utils/PlatformServiceMixin.ts b/src/utils/PlatformServiceMixin.ts index 1a2704a2..d0993048 100644 --- a/src/utils/PlatformServiceMixin.ts +++ b/src/utils/PlatformServiceMixin.ts @@ -209,8 +209,8 @@ export const PlatformServiceMixin = { }, /** - * Self-contained implementation of mapColumnsToValues - * Maps database query results to objects with column names as keys + * Map database columns to values with proper type conversion + * Handles boolean conversion from SQLite integers (0/1) to boolean values */ _mapColumnsToValues( columns: string[], @@ -219,7 +219,23 @@ export const PlatformServiceMixin = { return values.map((row) => { const obj: Record = {}; columns.forEach((column, index) => { - obj[column] = row[index]; + let value = row[index]; + + // Convert SQLite integer booleans to JavaScript booleans + if (column === 'isRegistered' || column === 'finishedOnboarding' || + column === 'filterFeedByVisible' || column === 'filterFeedByNearby' || + column === 'hideRegisterPromptOnNewContact' || column === 'showContactGivesInline' || + column === 'showGeneralAdvanced' || column === 'showShortcutBvc' || + column === 'warnIfProdServer' || column === 'warnIfTestServer') { + if (value === 1) { + value = true; + } else if (value === 0) { + value = false; + } + // Keep null values as null + } + + obj[column] = value; }); return obj; }); @@ -900,23 +916,14 @@ export const PlatformServiceMixin = { }, /** - * Maps an array of column names to an array of value arrays, creating objects where each column name - * is mapped to its corresponding value. - * @param columns Array of column names to use as object keys - * @param values Array of value arrays, where each inner array corresponds to one row of data - * @returns Array of objects where each object maps column names to their corresponding values + * Public method for mapping database columns to values + * Provides the same functionality as _mapColumnsToValues but as a public method */ $mapColumnsToValues( columns: string[], values: unknown[][], ): Array> { - return values.map((row) => { - const obj: Record = {}; - columns.forEach((column, index) => { - obj[column] = row[index]; - }); - return obj; - }); + return this._mapColumnsToValues(columns, values); }, /** @@ -1379,6 +1386,79 @@ export const PlatformServiceMixin = { whereParams, ); }, + + /** + * Debug method to verify settings for a specific DID + * Useful for troubleshooting settings propagation issues + * @param did DID to check settings for + * @returns Promise Settings object or null if not found + */ + async $debugDidSettings(did: string): Promise { + try { + const result = await this.$dbQuery( + "SELECT * FROM settings WHERE accountDid = ?", + [did], + ); + + if (!result?.values?.length) { + logger.warn(`[PlatformServiceMixin] No settings found for DID: ${did}`); + return null; + } + + const mappedResults = this._mapColumnsToValues( + result.columns, + result.values, + ); + + if (!mappedResults.length) { + logger.warn(`[PlatformServiceMixin] Failed to map settings for DID: ${did}`); + return null; + } + + const settings = mappedResults[0] as Settings; + + logger.info(`[PlatformServiceMixin] Settings for DID ${did}:`, { + firstName: settings.firstName, + isRegistered: settings.isRegistered, + activeDid: settings.activeDid, + apiServer: settings.apiServer, + }); + + return settings; + } catch (error) { + logger.error(`[PlatformServiceMixin] Error debugging settings for DID ${did}:`, error); + return null; + } + }, + + /** + * Debug method to verify merged settings for a specific DID + * Shows both default and DID-specific settings + * @param did DID to check merged settings for + * @returns Promise Logs debug information + */ + async $debugMergedSettings(did: string): Promise { + try { + // Get default settings + const defaultSettings = await this.$getSettings(MASTER_SETTINGS_KEY, {}); + logger.info(`[PlatformServiceMixin] Default settings:`, defaultSettings); + + // Get DID-specific settings + const didSettings = await this.$debugDidSettings(did); + + // Get merged settings + const mergedSettings = await this.$getMergedSettings(MASTER_SETTINGS_KEY, did, defaultSettings || {}); + + logger.info(`[PlatformServiceMixin] Merged settings for ${did}:`, { + defaultSettings, + didSettings, + mergedSettings, + isRegistered: mergedSettings.isRegistered, + }); + } catch (error) { + logger.error(`[PlatformServiceMixin] Error debugging merged settings for DID ${did}:`, error); + } + }, }, }; @@ -1477,6 +1557,10 @@ export interface IPlatformServiceMixin { columns: string[], values: unknown[][], ): Array>; + + // Debug methods + $debugDidSettings(did: string): Promise; + $debugMergedSettings(did: string): Promise; } // TypeScript declaration merging to eliminate (this as any) type assertions @@ -1612,5 +1696,9 @@ declare module "@vue/runtime-core" { columns: string[], values: unknown[][], ): Array>; + + // Debug methods + $debugDidSettings(did: string): Promise; + $debugMergedSettings(did: string): Promise; } } diff --git a/src/views/ClaimView.vue b/src/views/ClaimView.vue index 2720a3a5..874ea900 100644 --- a/src/views/ClaimView.vue +++ b/src/views/ClaimView.vue @@ -186,15 +186,6 @@ {{ issuerName }} posted that. - -