This commit is contained in:
2025-06-12 17:52:57 +02:00
parent 1a2e0d7ab0
commit da2d965da8
3 changed files with 39 additions and 7 deletions

View File

@@ -580,6 +580,7 @@ const generateEOI = async (retryCount = 0) => {
documentId: string | number;
clientSigningUrl: string;
signingLinks: Record<string, string>;
documensoID?: string;
}>('/api/email/generate-eoi-document', {
method: 'POST',
headers: {
@@ -587,7 +588,9 @@ const generateEOI = async (retryCount = 0) => {
},
body: {
interestId: props.interest.Id.toString()
}
},
// Increase timeout to 60 seconds to handle slow Documenso API calls
timeout: 60000
});
if (response.success) {
@@ -595,6 +598,13 @@ const generateEOI = async (retryCount = 0) => {
? 'EOI already exists - signature links retrieved'
: 'EOI generated successfully');
// Update local state immediately to show UI changes
if (response.documensoID) {
// Force update the hasGeneratedEOI computed by setting documentExists
documentExists.value = true;
documentValidated.value = true;
}
emit('eoi-generated', { signingLinks: response.signingLinks });
emit('update'); // Trigger parent to refresh data
@@ -608,15 +618,28 @@ const generateEOI = async (retryCount = 0) => {
} catch (error: any) {
console.error('Failed to generate EOI:', error);
// Retry logic
if (retryCount < 3) {
console.log(`Retrying EOI generation... Attempt ${retryCount + 2}/4`);
await new Promise(resolve => setTimeout(resolve, (retryCount + 1) * 1000));
// Check if it's a timeout error
const isTimeoutError = error.code === 'ECONNABORTED' ||
error.message?.includes('timeout') ||
error.statusCode === 502 ||
error.statusCode === 504;
// Retry logic with better handling for timeouts
if (retryCount < 4 && (isTimeoutError || error.statusCode === 502)) {
const waitTime = Math.min((retryCount + 1) * 2000, 8000); // Exponential backoff, max 8 seconds
console.log(`Retrying EOI generation due to timeout... Attempt ${retryCount + 2}/5 (waiting ${waitTime}ms)`);
toast.info(`Connection timeout. Retrying in ${waitTime/1000} seconds...`);
await new Promise(resolve => setTimeout(resolve, waitTime));
return generateEOI(retryCount + 1);
}
// Show error message after all retries failed
toast.error(error.data?.statusMessage || error.message || 'Failed to generate EOI after multiple attempts');
const errorMessage = error.data?.statusMessage || error.message || 'Failed to generate EOI';
if (isTimeoutError) {
toast.error('The server is taking too long to respond. Please try again in a few moments.');
} else {
toast.error(errorMessage);
}
} finally {
isGenerating.value = false;
}