Enterprise UI redesign — Phases 14–22 (Docusign-branded migration console) #1
|
|
@ -4,7 +4,8 @@ import { api } from './api.js';
|
||||||
import { state } from './state.js';
|
import { state } from './state.js';
|
||||||
import { escHtml, formatDateTime } from './utils.js';
|
import { escHtml, formatDateTime } from './utils.js';
|
||||||
|
|
||||||
const POLL_MS = 5000;
|
const POLL_MS = 30_000; // DocuSign rate-limit guidance: no more than once per 15 min in prod
|
||||||
|
const POLL_TIMEOUT = 300_000; // 5 minutes — treat as manual quick-test only; prod should use DS Connect
|
||||||
const _envelopes = {}; // { adobeId: { envelopeId, status, sentAt, completedAt, polling } }
|
const _envelopes = {}; // { adobeId: { envelopeId, status, sentAt, completedAt, polling } }
|
||||||
|
|
||||||
function getSettings() {
|
function getSettings() {
|
||||||
|
|
@ -115,6 +116,9 @@ function _verifyRow(t, settings) {
|
||||||
} else if (env.status === 'voided') {
|
} else if (env.status === 'voided') {
|
||||||
statusCell = '<span class="badge badge-gray">Voided</span>';
|
statusCell = '<span class="badge badge-gray">Voided</span>';
|
||||||
actionsCell = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(t.adobe_id)}">Send Again</button>`;
|
actionsCell = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(t.adobe_id)}">Send Again</button>`;
|
||||||
|
} else if (env.status === 'timeout') {
|
||||||
|
statusCell = '<span class="badge badge-amber">Timed Out</span>';
|
||||||
|
actionsCell = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(t.adobe_id)}">Send Again</button>`;
|
||||||
} else {
|
} else {
|
||||||
statusCell = `<span class="badge badge-amber">${escHtml(env.status || 'pending')}</span>`;
|
statusCell = `<span class="badge badge-amber">${escHtml(env.status || 'pending')}</span>`;
|
||||||
}
|
}
|
||||||
|
|
@ -211,19 +215,23 @@ function _startPolling(adobeId, envelopeId) {
|
||||||
const env = _envelopes[adobeId];
|
const env = _envelopes[adobeId];
|
||||||
if (!env || env.polling) return;
|
if (!env || env.polling) return;
|
||||||
env.polling = true;
|
env.polling = true;
|
||||||
|
const deadline = Date.now() + POLL_TIMEOUT;
|
||||||
|
|
||||||
const poll = async () => {
|
const poll = async () => {
|
||||||
try {
|
try {
|
||||||
const data = await api.verify.status(envelopeId);
|
const data = await api.verify.status(envelopeId);
|
||||||
if (_envelopes[adobeId]) {
|
if (!_envelopes[adobeId]) return;
|
||||||
_envelopes[adobeId].status = data.status;
|
_envelopes[adobeId].status = data.status;
|
||||||
_envelopes[adobeId].completedAt = data.completed_at;
|
_envelopes[adobeId].completedAt = data.completed_at;
|
||||||
|
_updateVerifyRow(adobeId);
|
||||||
|
if (data.status === 'completed' || data.status === 'voided') {
|
||||||
|
_envelopes[adobeId].polling = false;
|
||||||
|
} else if (Date.now() >= deadline) {
|
||||||
|
_envelopes[adobeId].polling = false;
|
||||||
|
_envelopes[adobeId].status = 'timeout';
|
||||||
_updateVerifyRow(adobeId);
|
_updateVerifyRow(adobeId);
|
||||||
if (data.status !== 'completed' && data.status !== 'voided') {
|
} else {
|
||||||
setTimeout(poll, POLL_MS);
|
setTimeout(poll, POLL_MS);
|
||||||
} else {
|
|
||||||
_envelopes[adobeId].polling = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('Polling error:', e.message);
|
console.warn('Polling error:', e.message);
|
||||||
|
|
@ -252,6 +260,9 @@ function _updateVerifyRow(adobeId) {
|
||||||
} else if (env.status === 'voided') {
|
} else if (env.status === 'voided') {
|
||||||
statusEl.innerHTML = '<span class="badge badge-gray">Voided</span>';
|
statusEl.innerHTML = '<span class="badge badge-gray">Voided</span>';
|
||||||
actionsEl.innerHTML = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(adobeId)}">Send Again</button>`;
|
actionsEl.innerHTML = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(adobeId)}">Send Again</button>`;
|
||||||
|
} else if (env.status === 'timeout') {
|
||||||
|
statusEl.innerHTML = '<span class="badge badge-amber">Timed Out</span>';
|
||||||
|
actionsEl.innerHTML = `<button class="btn btn-primary btn-sm btn-send-test" data-id="${escHtml(adobeId)}">Send Again</button>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-wire newly injected buttons
|
// Re-wire newly injected buttons
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue