forked from jsnbuchanan/crowd-funder-for-time-pwa
feat: implement ActiveDid migration to active_identity table
- Add $getActiveIdentity() method to PlatformServiceMixin interface - Update HomeView.vue to use new active_identity API methods - Update ContactsView.vue to use new active_identity API methods - Fix apiServer default handling in PlatformServiceMixin - Ensure DEFAULT_ENDORSER_API_SERVER is used when apiServer is empty - Add comprehensive logging for debugging ActiveDid migration - Resolve TypeScript interface issues with Vue mixins
This commit is contained in:
@@ -174,7 +174,7 @@ import { logger } from "../utils/logger";
|
||||
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
|
||||
import { isDatabaseError } from "@/interfaces/common";
|
||||
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
|
||||
import { APP_SERVER } from "@/constants/app";
|
||||
import { APP_SERVER, DEFAULT_ENDORSER_API_SERVER } from "@/constants/app";
|
||||
import { QRNavigationService } from "@/services/QRNavigationService";
|
||||
import {
|
||||
NOTIFY_CONTACT_NO_INFO,
|
||||
@@ -294,10 +294,19 @@ export default class ContactsView extends Vue {
|
||||
this.notify = createNotifyHelpers(this.$notify);
|
||||
|
||||
const settings = await this.$accountSettings();
|
||||
this.activeDid = settings.activeDid || "";
|
||||
this.apiServer = settings.apiServer || "";
|
||||
// Get activeDid from active_identity table (single source of truth)
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const activeIdentity = await (this as any).$getActiveIdentity();
|
||||
this.activeDid = activeIdentity.activeDid || "";
|
||||
this.apiServer = settings.apiServer || DEFAULT_ENDORSER_API_SERVER;
|
||||
this.isRegistered = !!settings.isRegistered;
|
||||
|
||||
logger.info("[ContactsView] Created with settings:", {
|
||||
activeDid: this.activeDid,
|
||||
apiServer: this.apiServer,
|
||||
isRegistered: this.isRegistered,
|
||||
});
|
||||
|
||||
// if these detect a query parameter, they can and then redirect to this URL without a query parameter
|
||||
// to avoid problems when they reload or they go forward & back and it tries to reprocess
|
||||
await this.processContactJwt();
|
||||
@@ -346,15 +355,37 @@ export default class ContactsView extends Vue {
|
||||
// this happens when a platform (eg iOS) doesn't include anything after the "=" in a shared link.
|
||||
this.notify.error(NOTIFY_BLANK_INVITE.message, TIMEOUTS.VERY_LONG);
|
||||
} else if (importedInviteJwt) {
|
||||
logger.info("[ContactsView] Processing invite JWT, current activeDid:", {
|
||||
activeDid: this.activeDid,
|
||||
});
|
||||
|
||||
// Ensure active_identity is populated before processing invite
|
||||
await this.$ensureActiveIdentityPopulated();
|
||||
|
||||
// Re-fetch settings after ensuring active_identity is populated
|
||||
const updatedSettings = await this.$accountSettings();
|
||||
this.activeDid = updatedSettings.activeDid || "";
|
||||
this.apiServer = updatedSettings.apiServer || DEFAULT_ENDORSER_API_SERVER;
|
||||
|
||||
// Identity creation should be handled by router guard, but keep as fallback for invite processing
|
||||
if (!this.activeDid) {
|
||||
logger.info(
|
||||
"[ContactsView] No active DID found, creating identity as fallback for invite processing",
|
||||
);
|
||||
this.activeDid = await generateSaveAndActivateIdentity();
|
||||
logger.info("[ContactsView] Created new identity:", {
|
||||
activeDid: this.activeDid,
|
||||
});
|
||||
}
|
||||
// send invite directly to server, with auth for this user
|
||||
const headers = await getHeaders(this.activeDid);
|
||||
logger.info("[ContactsView] Making API request to claim invite:", {
|
||||
apiServer: this.apiServer,
|
||||
activeDid: this.activeDid,
|
||||
hasApiServer: !!this.apiServer,
|
||||
apiServerLength: this.apiServer?.length || 0,
|
||||
fullUrl: this.apiServer + "/api/v2/claim",
|
||||
});
|
||||
try {
|
||||
const response = await this.axios.post(
|
||||
this.apiServer + "/api/v2/claim",
|
||||
@@ -376,6 +407,9 @@ export default class ContactsView extends Vue {
|
||||
const payload: JWTPayload =
|
||||
decodeEndorserJwt(importedInviteJwt).payload;
|
||||
const registration = payload as VerifiableCredential;
|
||||
logger.info(
|
||||
"[ContactsView] Opening ContactNameDialog for invite processing",
|
||||
);
|
||||
(this.$refs.contactNameDialog as ContactNameDialog).open(
|
||||
"Who Invited You?",
|
||||
"",
|
||||
|
||||
Reference in New Issue
Block a user