in frontend/src/composables/analysis-api-requester.ts [52:139]
function byStomp(resolve: (req: Requester) => void) {
const resRejMap = new Map<number, ResRej>();
const client = new Client({
brokerURL: `${'https:' === location.protocol ? 'wss' : 'ws'}://${location.host}/jifa-stomp`,
reconnectDelay: 5000
});
let subscriptionReceipt = uuidv4();
let requestId = 1;
function nextRequestId() {
return requestId++;
}
let token = useEnv().token;
if (token) {
client.connectHeaders = {
'jifa-token': token
};
}
client.onConnect = () => {
client.subscribe(
'/ud/analysis',
(message) => {
let requestId = Number(message.headers['request-id']);
if (resRejMap.has(requestId)) {
let resRej = resRejMap.get(requestId) as ResRej;
let success = message.headers['response-success'] === 'true';
let data = message.body ? JSON.parse(message.body) : null;
if (success) {
resRejMap.delete(requestId);
resRej.resolve(data);
} else {
if (data && data.hasOwnProperty('errorCode')) {
if (data.errorCode === 'ELASTIC_WORKER_NOT_READY') {
if (resRej.retries-- > 0) {
setTimeout(() => {
client.publish(resRej.params);
}, 2000);
return;
}
}
}
resRejMap.delete(requestId);
showErrorNotification(data.errorCode, data.message);
resRej.reject(data);
}
}
},
{
receipt: subscriptionReceipt
}
);
client.watchForReceipt(subscriptionReceipt, () => {
resolve({
request(namespace: string, api: string, target: string, parameters?: object): Promise<any> {
let id = nextRequestId();
let params = {
destination: '/ad/analysis',
headers: { 'request-id': id.toString() },
body: JSON.stringify({
namespace,
api,
target,
parameters
})
};
let p = new Promise((resolve, reject) => {
resRejMap.set(id, { resolve, reject, params, retries: 60 });
});
client.publish(params);
return p;
},
close() {
client.deactivate();
}
});
});
};
client.activate();
}