forked from trent_larson/crowd-funder-for-time-pwa
feat(diagnostics): add comprehensive logging for server switching and user registration
- Enhanced user registration diagnostics with detailed error context - Server switching flow logging with before/after values - Improved error handling with server context - Fixed type safety issues Confirms server switching fix is working perfectly while providing comprehensive debugging for user migration and environment issues.
This commit is contained in:
@@ -1493,14 +1493,56 @@ export async function fetchEndorserRateLimits(
|
|||||||
) {
|
) {
|
||||||
const url = `${apiServer}/api/report/rateLimits`;
|
const url = `${apiServer}/api/report/rateLimits`;
|
||||||
const headers = await getHeaders(issuerDid);
|
const headers = await getHeaders(issuerDid);
|
||||||
|
|
||||||
|
// Enhanced diagnostic logging for user registration tracking
|
||||||
|
logger.info("[User Registration] Checking user status on server:", {
|
||||||
|
did: issuerDid,
|
||||||
|
server: apiServer,
|
||||||
|
endpoint: url,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axios.get(url, { headers } as AxiosRequestConfig);
|
const response = await axios.get(url, { headers } as AxiosRequestConfig);
|
||||||
|
|
||||||
|
// Log successful registration check
|
||||||
|
logger.info("[User Registration] User registration check successful:", {
|
||||||
|
did: issuerDid,
|
||||||
|
server: apiServer,
|
||||||
|
status: response.status,
|
||||||
|
isRegistered: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
// Enhanced error logging with user registration context
|
||||||
|
const axiosError = error as {
|
||||||
|
response?: {
|
||||||
|
data?: { error?: { code?: string; message?: string } };
|
||||||
|
status?: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
const errorCode = axiosError.response?.data?.error?.code;
|
||||||
|
const errorMessage = axiosError.response?.data?.error?.message;
|
||||||
|
const httpStatus = axiosError.response?.status;
|
||||||
|
|
||||||
|
logger.warn("[User Registration] User not registered on server:", {
|
||||||
|
did: issuerDid,
|
||||||
|
server: apiServer,
|
||||||
|
errorCode: errorCode,
|
||||||
|
errorMessage: errorMessage,
|
||||||
|
httpStatus: httpStatus,
|
||||||
|
needsRegistration: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Log the original error for debugging
|
||||||
logger.error(
|
logger.error(
|
||||||
`[fetchEndorserRateLimits] Error for DID ${issuerDid}:`,
|
`[fetchEndorserRateLimits] Error for DID ${issuerDid}:`,
|
||||||
errorStringForLog(error),
|
errorStringForLog(error),
|
||||||
);
|
);
|
||||||
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1427,14 +1427,13 @@ export default class AccountViewView extends Vue {
|
|||||||
|
|
||||||
async checkLimits(): Promise<void> {
|
async checkLimits(): Promise<void> {
|
||||||
this.loadingLimits = true;
|
this.loadingLimits = true;
|
||||||
|
const did = this.activeDid;
|
||||||
|
if (!did) {
|
||||||
|
this.limitsMessage = ACCOUNT_VIEW_CONSTANTS.LIMITS.NO_IDENTIFIER;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const did = this.activeDid;
|
|
||||||
|
|
||||||
if (!did) {
|
|
||||||
this.limitsMessage = ACCOUNT_VIEW_CONSTANTS.LIMITS.NO_IDENTIFIER;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.$saveUserSettings(did, {
|
await this.$saveUserSettings(did, {
|
||||||
apiServer: this.apiServer,
|
apiServer: this.apiServer,
|
||||||
partnerApiServer: this.partnerApiServer,
|
partnerApiServer: this.partnerApiServer,
|
||||||
@@ -1467,7 +1466,26 @@ export default class AccountViewView extends Vue {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.limitsMessage =
|
this.limitsMessage =
|
||||||
ACCOUNT_VIEW_CONSTANTS.LIMITS.ERROR_RETRIEVING_LIMITS;
|
ACCOUNT_VIEW_CONSTANTS.LIMITS.ERROR_RETRIEVING_LIMITS;
|
||||||
logger.error("Error retrieving limits: ", error);
|
|
||||||
|
// Enhanced error logging with server context
|
||||||
|
const axiosError = error as {
|
||||||
|
response?: {
|
||||||
|
data?: { error?: { code?: string; message?: string } };
|
||||||
|
status?: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
logger.error("[Server Limits] Error retrieving limits:", {
|
||||||
|
error: error instanceof Error ? error.message : String(error),
|
||||||
|
did: did,
|
||||||
|
apiServer: this.apiServer,
|
||||||
|
partnerApiServer: this.partnerApiServer,
|
||||||
|
errorCode: axiosError?.response?.data?.error?.code,
|
||||||
|
errorMessage: axiosError?.response?.data?.error?.message,
|
||||||
|
httpStatus: axiosError?.response?.status,
|
||||||
|
needsUserMigration: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
|
|
||||||
// this.notify.error(this.limitsMessage, TIMEOUTS.STANDARD);
|
// this.notify.error(this.limitsMessage, TIMEOUTS.STANDARD);
|
||||||
} finally {
|
} finally {
|
||||||
this.loadingLimits = false;
|
this.loadingLimits = false;
|
||||||
@@ -1475,24 +1493,70 @@ export default class AccountViewView extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async onClickSaveApiServer(): Promise<void> {
|
async onClickSaveApiServer(): Promise<void> {
|
||||||
await this.$saveSettings({
|
// Enhanced diagnostic logging for claim URL changes
|
||||||
apiServer: this.apiServerInput,
|
const previousApiServer = this.apiServer;
|
||||||
|
const newApiServer = this.apiServerInput;
|
||||||
|
|
||||||
|
logger.info("[Server Switching] Claim URL change initiated:", {
|
||||||
|
did: this.activeDid,
|
||||||
|
previousServer: previousApiServer,
|
||||||
|
newServer: newApiServer,
|
||||||
|
changeType: "apiServer",
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
});
|
});
|
||||||
this.apiServer = this.apiServerInput;
|
|
||||||
|
await this.$saveSettings({
|
||||||
|
apiServer: newApiServer,
|
||||||
|
});
|
||||||
|
this.apiServer = newApiServer;
|
||||||
|
|
||||||
// Add this line to save to user-specific settings
|
// Add this line to save to user-specific settings
|
||||||
await this.$saveUserSettings(this.activeDid, {
|
await this.$saveUserSettings(this.activeDid, {
|
||||||
apiServer: this.apiServer,
|
apiServer: this.apiServer,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Log successful server switch
|
||||||
|
logger.info("[Server Switching] Claim URL change completed:", {
|
||||||
|
did: this.activeDid,
|
||||||
|
previousServer: previousApiServer,
|
||||||
|
newServer: newApiServer,
|
||||||
|
changeType: "apiServer",
|
||||||
|
settingsSaved: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async onClickSavePartnerServer(): Promise<void> {
|
async onClickSavePartnerServer(): Promise<void> {
|
||||||
await this.$saveSettings({
|
// Enhanced diagnostic logging for partner server changes
|
||||||
partnerApiServer: this.partnerApiServerInput,
|
const previousPartnerServer = this.partnerApiServer;
|
||||||
|
const newPartnerServer = this.partnerApiServerInput;
|
||||||
|
|
||||||
|
logger.info("[Server Switching] Partner server change initiated:", {
|
||||||
|
did: this.activeDid,
|
||||||
|
previousServer: previousPartnerServer,
|
||||||
|
newServer: newPartnerServer,
|
||||||
|
changeType: "partnerApiServer",
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
});
|
});
|
||||||
this.partnerApiServer = this.partnerApiServerInput;
|
|
||||||
|
await this.$saveSettings({
|
||||||
|
partnerApiServer: newPartnerServer,
|
||||||
|
});
|
||||||
|
this.partnerApiServer = newPartnerServer;
|
||||||
|
|
||||||
await this.$saveUserSettings(this.activeDid, {
|
await this.$saveUserSettings(this.activeDid, {
|
||||||
partnerApiServer: this.partnerApiServer,
|
partnerApiServer: this.partnerApiServer,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Log successful partner server switch
|
||||||
|
logger.info("[Server Switching] Partner server change completed:", {
|
||||||
|
did: this.activeDid,
|
||||||
|
previousServer: previousPartnerServer,
|
||||||
|
newServer: newPartnerServer,
|
||||||
|
changeType: "partnerApiServer",
|
||||||
|
settingsSaved: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async onClickSavePushServer(): Promise<void> {
|
async onClickSavePushServer(): Promise<void> {
|
||||||
|
|||||||
@@ -567,10 +567,27 @@ export default class HomeView extends Vue {
|
|||||||
this.isRegistered = true;
|
this.isRegistered = true;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
// Enhanced error logging with server context
|
||||||
|
const errorMessage =
|
||||||
|
error instanceof Error ? error.message : String(error);
|
||||||
|
const axiosError = error as {
|
||||||
|
response?: {
|
||||||
|
data?: { error?: { code?: string; message?: string } };
|
||||||
|
status?: number;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"[HomeView Settings Trace] ⚠️ Registration check failed",
|
"[HomeView Settings Trace] ⚠️ Registration check failed",
|
||||||
{
|
{
|
||||||
error: error instanceof Error ? error.message : String(error),
|
error: errorMessage,
|
||||||
|
did: this.activeDid,
|
||||||
|
server: this.apiServer,
|
||||||
|
errorCode: axiosError?.response?.data?.error?.code,
|
||||||
|
errorMessage: axiosError?.response?.data?.error?.message,
|
||||||
|
httpStatus: axiosError?.response?.status,
|
||||||
|
needsUserMigration: true,
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user