| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -139,7 +139,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                v-if="contact.seesMe" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                class="text-sm uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white mx-0.5 my-0.5 px-2 py-1.5 rounded-md" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="setVisibility(contact, false, true)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="promptSetVisibility(contact, false)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title="They can see you" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                <fa icon="eye" class="fa-fw" /> | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -147,7 +147,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                v-else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                class="text-sm uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white mx-0.5 my-0.5 px-2 py-1.5 rounded-md" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="setVisibility(contact, true, true)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="promptSetVisibility(contact, true)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title="They cannot see you" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                <fa icon="eye-slash" class="fa-fw" /> | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -161,7 +161,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                <fa icon="rotate" class="fa-fw" /> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              </button> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="register(contact)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="promptRegister(contact)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                class="text-sm uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white ml-6 px-2 py-1.5 rounded-md" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                v-if="activeDid" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title="Registration" | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -176,7 +176,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            </div> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              @click="deleteContact(contact)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              @click="promptDeleteContact(contact)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              class="text-sm uppercase bg-gradient-to-b from-rose-500 to-rose-800 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white ml-6 px-2 py-1.5 rounded-md" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title="Delete" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            > | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -189,7 +189,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                class="text-sm 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-2 py-1.5 rounded-l-md" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="showGiftedDialog(activeDid, contact.did)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="promptShowGiftedDialog(activeDid, contact.did)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                :title="givenByMeDescriptions[contact.did] || ''" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                To: | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -210,7 +210,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              <button | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                class="text-sm bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white -ml-1.5 px-2 py-1.5 rounded-r-md border-l" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="showGiftedDialog(contact.did, this.activeDid)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                @click="promptShowGiftedDialog(contact.did, this.activeDid)" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                :title="givenToMeDescriptions[contact.did] || ''" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              > | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                From: | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -781,211 +781,242 @@ export default class ContactsView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async deleteContact(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      confirm( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "You should first make sure that your activity is no longer visible to them." + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          " Note that this only deletes them from your contacts on this device." + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          " \n\nAre you sure you want to remove " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  // prompt with confirmation if they want to delete a contact | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  promptDeleteContact(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        group: "modal", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        type: "confirm", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        title: "Delete", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "Are you sure you want to remove " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          this.nameForDid(this.contacts, contact.did) + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          " with DID " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          contact.did + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          " from your contact list?", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      await db.contacts.delete(contact.did); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.contacts = R.without([contact], this.contacts); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        onYes: async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          await this.deleteContact(contact); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async register(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      confirm( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "Are you sure you want to register " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async deleteContact(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    await db.open(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    await db.contacts.delete(contact.did); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.contacts = R.without([contact], this.contacts); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  // prompt to register a new contact | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async promptRegister(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        group: "modal", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        type: "confirm", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        title: "Register", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "Are you sure you want to register " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          this.nameForDid(this.contacts, contact.did) + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          (contact.registered | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ? " -- especially since they are already marked as registered" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            : "") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "?", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: "toast", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          text: "", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          title: "Registration submitted...", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        onYes: async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          await this.register(contact); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        1000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async register(contact: Contact) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        type: "toast", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        text: "", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        title: "Registration submitted...", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      1000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const vcClaim: RegisterVerifiableCredential = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "@context": "https://schema.org", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "@type": "RegisterAction", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        agent: { identifier: identity.did }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        object: SERVICE_ID, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        participant: { identifier: contact.did }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Make a payload for the claim | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const vcPayload = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        vc: { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "@context": ["https://www.w3.org/2018/credentials/v1"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: ["VerifiableCredential"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          credentialSubject: vcClaim, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Create a signature using private key of identity | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (identity.keys[0].privateKeyHex !== null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const privateKeyHex: string = identity.keys[0].privateKeyHex!; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const signer = await SimpleSigner(privateKeyHex); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const alg = undefined; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Create a JWT for the request | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const vcJwt: string = await didJwt.createJWT(vcPayload, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          alg: alg, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          issuer: identity.did, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          signer: signer, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Make the xhr request payload | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const payload = JSON.stringify({ jwtEncoded: vcJwt }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const url = this.apiServer + "/api/v2/claim"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const headers = await this.getHeaders(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          const resp = await this.axios.post(url, payload, { headers }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (resp.data?.success?.embeddedRecordError) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            let message = "There was some problem with the registration."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (typeof resp.data.success.embeddedRecordError == "string") { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              message += " " + resp.data.success.embeddedRecordError; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title: "Registration Still Unknown", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                text: message, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } else if (resp.data?.success?.handleId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            contact.registered = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            db.contacts.update(contact.did, { registered: true }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                type: "success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title: "Registration Success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  (contact.name || "That unnamed person") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  " has been registered.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          console.error("Error when registering:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          let userMessage = "There was an error. See logs for more info."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          const serverError = error as AxiosError; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (serverError) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (serverError.response?.data?.error?.message) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              userMessage = serverError.response.data.error.message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else if (serverError.message) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              userMessage = serverError.message; // Info for the user | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              userMessage = JSON.stringify(serverError.toJSON()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            userMessage = error as string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const vcClaim: RegisterVerifiableCredential = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      "@context": "https://schema.org", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      "@type": "RegisterAction", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      agent: { identifier: identity.did }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      object: SERVICE_ID, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      participant: { identifier: contact.did }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Make a payload for the claim | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const vcPayload = { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      vc: { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "@context": ["https://www.w3.org/2018/credentials/v1"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        type: ["VerifiableCredential"], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        credentialSubject: vcClaim, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // Create a signature using private key of identity | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (identity.keys[0].privateKeyHex !== null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const privateKeyHex: string = identity.keys[0].privateKeyHex!; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const signer = await SimpleSigner(privateKeyHex); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const alg = undefined; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Create a JWT for the request | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const vcJwt: string = await didJwt.createJWT(vcPayload, { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        alg: alg, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        issuer: identity.did, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        signer: signer, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      // Make the xhr request payload | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const payload = JSON.stringify({ jwtEncoded: vcJwt }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const url = this.apiServer + "/api/v2/claim"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const headers = await this.getHeaders(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const resp = await this.axios.post(url, payload, { headers }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (resp.data?.success?.embeddedRecordError) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          let message = "There was some problem with the registration."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (typeof resp.data.success.embeddedRecordError == "string") { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            message += " " + resp.data.success.embeddedRecordError; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          // Now set that error for the user to see. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title: "Registration Error", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              text: userMessage, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title: "Registration Still Unknown", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              text: message, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else if (resp.data?.success?.handleId) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          contact.registered = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          db.contacts.update(contact.did, { registered: true }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              type: "success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title: "Registration Success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                (contact.name || "That unnamed person") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                " has been registered.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } catch (error) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console.error("Error when registering:", error); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        let userMessage = "There was an error. See logs for more info."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const serverError = error as AxiosError; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (serverError) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (serverError.response?.data?.error?.message) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            userMessage = serverError.response.data.error.message; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } else if (serverError.message) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            userMessage = serverError.message; // Info for the user | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            userMessage = JSON.stringify(serverError.toJSON()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          userMessage = error as string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Now set that error for the user to see. | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            title: "Registration Error", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            text: userMessage, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async promptSetVisibility(contact: Contact, visibility: boolean) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const visibilityPrompt = visibility | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ? "Are you sure you want to make your activity visible to them?" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      : "Are you sure you want to hide all your activity from them?"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        group: "modal", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        type: "confirm", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        title: "Set Visibility", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        text: visibilityPrompt, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        onYes: async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          await this.setVisibility(contact, visibility, true); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  async setVisibility( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    contact: Contact, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    visibility: boolean, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    showSuccessAlert: boolean, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const visibilityPrompt = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      showSuccessAlert && | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (visibility | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ? "Are you sure you want to make your activity visible to them?" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        : "Are you sure you want to hide all your activity from them?"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (!visibilityPrompt || confirm(visibilityPrompt)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const url = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.apiServer + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "/api/report/" + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        (visibility ? "canSeeMe" : "cannotSeeMe"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const headers = await this.getHeaders(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const payload = JSON.stringify({ did: contact.did }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const url = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.apiServer + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      "/api/report/" + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      (visibility ? "canSeeMe" : "cannotSeeMe"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const identity = await this.getIdentity(this.activeDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const headers = await this.getHeaders(identity); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    const payload = JSON.stringify({ did: contact.did }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const resp = await this.axios.post(url, payload, { headers }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (resp.status === 200) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          if (showSuccessAlert) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                type: "success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                title: "Visibility Set", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  this.nameForDid(this.contacts, contact.did) + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  " can " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  (visibility ? "" : "not ") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                  "see your activity.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              3000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          contact.seesMe = visibility; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          db.contacts.update(contact.did, { seesMe: visibility }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          console.error( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            "Got some bad server response when setting visibility: ", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resp.status, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resp, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          const message = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            resp.data.error?.message || "Got some error setting visibility."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    try { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const resp = await this.axios.post(url, payload, { headers }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (resp.status === 200) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (showSuccessAlert) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title: "Error Setting Visibility", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              text: message, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              type: "success", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              title: "Visibility Set", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              text: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                this.nameForDid(this.contacts, contact.did) + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                " can " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                (visibility ? "" : "not ") + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                "see your activity.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            3000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } catch (err) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console.error("Got some error when setting visibility:", err); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        contact.seesMe = visibility; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        db.contacts.update(contact.did, { seesMe: visibility }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console.error( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "Got some bad server response when setting visibility: ", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          resp.status, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          resp, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const message = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          resp.data.error?.message || "Got some error setting visibility."; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            title: "Error Setting Visibility", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            text: "Check connectivity and try again.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            text: message, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } catch (err) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      console.error("Got some error when setting visibility:", err); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          group: "alert", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: "danger", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          title: "Error Setting Visibility", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          text: "Check connectivity and try again.", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        5000, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -1058,34 +1089,47 @@ export default class ContactsView extends Vue { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private showGiftedDialog(giverDid: string, recipientDid: string) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // if they have unconfirmed amounts, ask to confirm those first | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  promptShowGiftedDialog(giverDid: string, recipientDid: string) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    // if they have unconfirmed amounts, ask to confirm those | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      recipientDid == this.activeDid && | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      recipientDid === this.activeDid && | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.givenToMeUnconfirmed[giverDid] > 0 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const isAre = this.givenToMeUnconfirmed[giverDid] == 1 ? "is" : "are"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const hours = this.givenToMeUnconfirmed[giverDid] == 1 ? "hour" : "hours"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        confirm( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          "There " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            isAre + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            " " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.givenToMeUnconfirmed[giverDid] + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            " unconfirmed " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            hours + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            " from them." + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            " Would you like to confirm some of those hours?", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.$router.push({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          name: "contact-amounts", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          query: { contactDid: giverDid }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const message = | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        "There " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        isAre + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        " " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        this.givenToMeUnconfirmed[giverDid] + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        " unconfirmed " + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        hours + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        " from them." + | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        " Would you like to confirm some of those hours?"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.$notify( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          group: "modal", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          type: "confirm", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          title: "Delete", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          text: message, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          onNo: async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.showGiftedDialog(giverDid, recipientDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          onYes: async () => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            this.$router.push({ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              name: "contact-amounts", | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					              query: { contactDid: giverDid }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            }); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        -1, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      this.showGiftedDialog(giverDid, recipientDid); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  private showGiftedDialog(giverDid: string, recipientDid: string) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    let giver: GiverReceiverInputInfo, receiver: GiverReceiverInputInfo; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (giverDid) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      giver = { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |