@kya-os/mcp-i
Version:
COMING SOON:Production-ready MCP Identity with automatic registration, key rotation, and optimized performance
53 lines (52 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pollRegistrationStatus = pollRegistrationStatus;
exports.isAsyncRegistrationResponse = isAsyncRegistrationResponse;
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function pollRegistrationStatus(statusUrl, transport, options = {}) {
const { pollInterval = 2000, maxPollingTime = 60000, logger, onProgress } = options;
const startTime = Date.now();
let attempts = 0;
logger?.debug(`Starting registration polling: ${statusUrl}`);
while (Date.now() - startTime < maxPollingTime) {
attempts++;
try {
const response = await transport.get(statusUrl);
const status = response.data;
logger?.debug(`Poll attempt ${attempts}: ${status.status}`);
const elapsed = Math.floor((Date.now() - startTime) / 1000);
const progressMessage = `Registration ${status.status}... (${elapsed}s elapsed)`;
if (onProgress) {
onProgress(progressMessage, status.progress);
}
if (status.status === 'completed' && status.result) {
logger?.info('Registration completed successfully');
return status.result;
}
if (status.status === 'failed') {
const errorMessage = status.error?.message || 'Registration failed';
logger?.error(`Registration failed: ${errorMessage}`);
throw new Error(errorMessage);
}
await sleep(pollInterval);
}
catch (error) {
if (error.message && !error.message.includes('ECONNREFUSED')) {
throw error;
}
logger?.debug(`Network error during polling (attempt ${attempts}): ${error.message}`);
await sleep(pollInterval);
}
}
const timeoutMessage = `Registration timeout after ${maxPollingTime / 1000} seconds`;
logger?.error(timeoutMessage);
throw new Error(timeoutMessage);
}
function isAsyncRegistrationResponse(response) {
return response &&
typeof response.jobId === 'string' &&
typeof response.status === 'string' &&
!response.did;
}