| 
						
						
						
					 | 
				
				 | 
				
					@ -1,5 +1,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					<template> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  <QuickNav selected="Profile"></QuickNav> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  <TopMessage /> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  <!-- CONTENT --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  <section id="Content" class="p-6 pb-24"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    <!-- Heading --> | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -215,7 +217,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    <div v-if="showAdvanced"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      <p class="text-rose-600 mb-8"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Beware: the features here can be confusing and even change data in ways | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        you do not expect. But we support your freedoms! | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        you do not expect. But we support your freedom! | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      </p> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      <!-- Deep Identity Details --> | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -357,6 +359,46 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        </button> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      <label | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for="toggleProdWarningMessage" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        class="flex items-center justify-between cursor-pointer my-4" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        @click="toggleProdWarning" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <!-- label --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <h2>Show warning if on prod server</h2> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <!-- toggle --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <div class="relative ml-2"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- input --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <input type="checkbox" v-model="warnIfProdServer" class="sr-only" /> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- line --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <div class="block bg-slate-500 w-14 h-8 rounded-full"></div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- dot --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <div | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            class="dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ></div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      </label> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      <label | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for="toggleTestWarningMessage" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        class="flex items-center justify-between cursor-pointer my-4" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        @click="toggleTestWarning" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <!-- label --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <h2>Show warning if on test server</h2> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <!-- toggle --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <div class="relative ml-2"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- input --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <input type="checkbox" v-model="warnIfTestServer" class="sr-only" /> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- line --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <div class="block bg-slate-500 w-14 h-8 rounded-full"></div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <!-- dot --> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          <div | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            class="dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ></div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      </label> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      <div class="flex py-4"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        <h2 class="text-slate-500 text-sm font-bold mb-2"> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          Notification Push Server | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -407,7 +449,8 @@ import "dexie-export-import"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { Component, Vue } from "vue-facing-decorator"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { useClipboard } from "@vueuse/core"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import QuickNav from "@/components/QuickNav.vue"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import QuickNav from "@/components/QuickNav"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import TopMessage from "@/components/TopMessage"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { AppString } from "@/constants/app"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { db, accountsDB } from "@/db/index"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { MASTER_SETTINGS_KEY, Settings } from "@/db/tables/settings"; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -432,7 +475,7 @@ interface IAccount { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  derivationPath: string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					@Component({ components: { QuickNav } }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					@Component({ components: { QuickNav, TopMessage } }) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  $notify!: (notification: Notification, timeout?: number) => void; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -462,6 +505,8 @@ export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  showAdvanced = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  subscription: PushSubscription | null = null; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  warnIfProdServer = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  warnIfTestServer = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private isSubscribed = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  get toggleNotifications() { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -471,6 +516,62 @@ export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.isSubscribed = value; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Async function executed when the component is created. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Initializes the component's state with values from the database, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * handles identity-related tasks, and checks limitations. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * @throws Will display specific messages to the user based on different errors. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async created() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const settings = await db.settings.get(MASTER_SETTINGS_KEY); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Initialize component state with values from the database or defaults | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.initializeState(settings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Get and process the identity | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (identity) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.processIdentity(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (err: unknown) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.handleError(err); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async mounted() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const registration = await navigator.serviceWorker.ready; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.subscription = await registration.pushManager.getSubscription(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.toggleNotifications = !!this.subscription; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      console.error("Mount error:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.toggleNotifications = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Initializes component state with values from the database or defaults. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * @param {SettingsType} settings - Object containing settings from the database. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  initializeState(settings: Settings | undefined) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.activeDid = (settings?.activeDid as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.apiServer = (settings?.apiServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.apiServerInput = (settings?.apiServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.givenName = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (settings?.firstName || "") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (settings?.lastName ? ` ${settings.lastName}` : ""); // pre v 0.1.3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.isRegistered = !!settings?.isRegistered; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.showContactGives = !!settings?.showContactGivesInline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.warnIfProdServer = !!settings?.warnIfProdServer; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.warnIfTestServer = !!settings?.warnIfTestServer; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.webPushServer = (settings?.webPushServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.webPushServerInput = (settings?.webPushServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  public async getIdentity(activeDid: string): Promise<IIdentifier | null> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Open the accounts database | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -536,6 +637,16 @@ export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.updateShowContactAmounts(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  toggleProdWarning() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.warnIfProdServer = !this.warnIfProdServer; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.updateWarnIfProdServer(this.warnIfProdServer); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  toggleTestWarning() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.warnIfTestServer = !this.warnIfTestServer; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.updateWarnIfTestServer(this.warnIfTestServer); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  readableTime(timeStr: string) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return timeStr.substring(0, timeStr.indexOf("T")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -545,60 +656,6 @@ export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.numAccounts = await accountsDB.accounts.count(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Async function executed when the component is created. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Initializes the component's state with values from the database, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * handles identity-related tasks, and checks limitations. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * @throws Will display specific messages to the user based on different errors. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async created() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const settings = await db.settings.get(MASTER_SETTINGS_KEY); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Initialize component state with values from the database or defaults | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.initializeState(settings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Get and process the identity | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (identity) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.processIdentity(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (err: unknown) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.handleError(err); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async mounted() { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const registration = await navigator.serviceWorker.ready; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.subscription = await registration.pushManager.getSubscription(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.toggleNotifications = !!this.subscription; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      console.error("Mount error:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.toggleNotifications = false; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Initializes component state with values from the database or defaults. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * @param {SettingsType} settings - Object containing settings from the database. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   */ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  initializeState(settings: Settings | undefined) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.activeDid = (settings?.activeDid as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.apiServer = (settings?.apiServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.apiServerInput = (settings?.apiServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.givenName = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (settings?.firstName || "") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (settings?.lastName ? ` ${settings.lastName}` : ""); // pre v 0.1.3 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.isRegistered = !!settings?.isRegistered; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.webPushServer = (settings?.webPushServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.webPushServerInput = (settings?.webPushServer as string) || ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.showContactGives = !!settings?.showContactGivesInline; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Processes the identity and updates the component's state. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * @param {IdentityType} identity - Object containing identity information. | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -672,6 +729,52 @@ export default class AccountViewView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  public async updateWarnIfProdServer(newSetting) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      db.settings.update(MASTER_SETTINGS_KEY, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        warnIfProdServer: newSetting, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (err) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          title: "Error Updating Prod Warning", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          text: "Clear your cache and start over (after data backup).", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      console.error( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "Telling user to clear cache after contact setting update because:", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        err, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  public async updateWarnIfTestServer(newSetting) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      db.settings.update(MASTER_SETTINGS_KEY, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        warnIfTestServer: newSetting, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (err) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          title: "Error Updating Test Warning", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          text: "Clear your cache and start over (after data backup).", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      console.error( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "Telling user to clear cache after contact setting update because:", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        err, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  /** | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * Asynchronously exports the database into a downloadable JSON file. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   * | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |