From 0a927ccec56fe5d9610a52e7b49d7cfd1c34a300 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 8 Feb 2026 20:38:59 -0700 Subject: [PATCH] adjust to the new profile-embedding endpoint --- src/views/DIDView.vue | 95 ++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 38 deletions(-) diff --git a/src/views/DIDView.vue b/src/views/DIDView.vue index b3897dc817..0e741998b9 100644 --- a/src/views/DIDView.vue +++ b/src/views/DIDView.vue @@ -328,13 +328,11 @@ - {{ - (generateEmbedding ?? userProfileData?.generateEmbedding) - ? "On" - : "Off" - }} - (loading…) - (loading…) + (saving…) {{ - userProfileData?.embeddingIsForEmptyString == null + embeddingMetadata?.isForEmptyString == null ? "" - : userProfileData?.embeddingIsForEmptyString + : embeddingMetadata?.isForEmptyString ? "- Embedding is for blank description" : "- Embedding is for non-blank description" }} @@ -519,9 +513,12 @@ export default class DIDView extends Vue { contactLabels: string[] = []; contactYaml = ""; - generateEmbedding: boolean | null = null; // used when there is no profile - generateEmbeddingLoading = false; - generateEmbeddingSaving = false; + embeddingMetadata: { + generateEmbedding: boolean; + isForEmptyString: boolean; + } | null = null; + embeddingMetadataLoading = false; + embeddingMetadataSaving = false; hitEnd = false; isLoading = false; isMyDid = false; @@ -567,7 +564,7 @@ export default class DIDView extends Vue { await this.loadClaimsAbout(); await this.checkIfOwnDID(); if (this.showGeneralAdvanced && this.activeDid) { - await this.loadUserProfile(); + await this.loadUserProfileEmbeddingMetadata(); } } } @@ -655,28 +652,17 @@ export default class DIDView extends Vue { if (!this.viewingDid || !this.activeDid) { return; } - const newValue = !(this.userProfileData - ? this.userProfileData.generateEmbedding - : this.generateEmbedding); - this.generateEmbeddingSaving = true; + const currentValue = this.embeddingMetadata?.generateEmbedding ?? false; + const newValue = !currentValue; + this.embeddingMetadataSaving = true; try { const headers = await getHeaders(this.activeDid); const url = `${this.partnerApiServer}/api/partner/userProfileGenerateEmbedding/${encodeURIComponent(this.viewingDid)}`; await this.axios.put(url, { generateEmbedding: newValue }, { headers }); - if (this.userProfileData) { - this.userProfileData.generateEmbedding = newValue; - this.userProfileData.embeddingIsForEmptyString = newValue; // the server should have generated it or erased it - } else { - this.generateEmbedding = newValue; - if (newValue) { - this.userProfileData = { - description: "", - issuerDid: this.viewingDid, - generateEmbedding: newValue, - embeddingIsForEmptyString: true, - }; - } - } + + // Refresh embedding metadata from the dedicated endpoint + await this.loadUserProfileEmbeddingMetadata(); + this.notify.success( newValue ? "Contact tagged to always generate embedding." @@ -696,7 +682,7 @@ export default class DIDView extends Vue { ); } } finally { - this.generateEmbeddingSaving = false; + this.embeddingMetadataSaving = false; } } @@ -736,6 +722,39 @@ export default class DIDView extends Vue { } } + /** + * Loads embedding metadata (generateEmbedding, isForEmptyString) for the viewing DID + * from the partner API userProfileEmbeddingMetadata endpoint. + */ + async loadUserProfileEmbeddingMetadata() { + if (!this.viewingDid || !this.activeDid) return; + this.embeddingMetadataLoading = true; + this.embeddingMetadata = null; + try { + const headers = await getHeaders(this.activeDid); + const url = `${this.partnerApiServer}/api/partner/userProfileEmbeddingMetadata/${encodeURIComponent(this.viewingDid)}`; + const response = await this.axios.get(url, { headers }); + const data = response.data?.data; + if (data && typeof data.generateEmbedding === "boolean") { + this.embeddingMetadata = { + generateEmbedding: data.generateEmbedding, + isForEmptyString: !!data.isForEmptyString, + }; + } else { + this.embeddingMetadata = null; + } + } catch (err: unknown) { + const axiosErr = err as { response?: { status?: number } }; + if (axiosErr.response?.status === 404) { + this.embeddingMetadata = null; + } else { + logger.error("Failed to load user profile embedding metadata:", err); + } + } finally { + this.embeddingMetadataLoading = false; + } + } + /** * Loads the user profile for the viewing DID from the partner API. * Shows profile content or a message if the DID has no profile or it is not visible.