resolve-local-event-broker
Version:
The reSolve framework's event broker for applications on a local machine.
63 lines (55 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _constants = require("../constants");
const resume = async (pool, payload) => {
const {
database: {
runQuery,
escapeId,
escapeStr
},
invokeOperation,
parseSubscription
} = pool;
const {
eventSubscriber
} = payload;
const subscribersTableNameAsId = escapeId(_constants.SUBSCRIBERS_TABLE_NAME);
const input = {
type: _constants.PrivateOperationType.RESUME_SUBSCRIBER,
payload: {
eventSubscriber
}
};
await invokeOperation(pool, _constants.LazinessStrategy.EAGER, input);
for (let attempt = 0;; attempt++) {
const result = await runQuery(`
SELECT ${subscribersTableNameAsId}."status" AS "status",
${subscribersTableNameAsId}."subscriptionId" AS "subscriptionId"
FROM ${subscribersTableNameAsId}
WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)}
`);
if (result == null || result.length !== 1) {
throw new Error(`Event subscriber ${eventSubscriber} does not found`);
}
const {
status,
subscriptionId
} = parseSubscription(result[0]);
if (status === _constants.SubscriptionStatus.ERROR) {
throw new Error(`Event subscriber ${eventSubscriber} is in error state`);
} else if (status === _constants.SubscriptionStatus.DELIVER) {
return subscriptionId;
} else if (status === _constants.SubscriptionStatus.SKIP && attempt > 10) {
throw new Error(`Event subscriber ${eventSubscriber} cannot be resumed after ${attempt} attempts - event bus is too busy`);
} else {
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
};
var _default = resume;
exports.default = _default;
//# sourceMappingURL=resume.js.map