resolve-local-event-broker
Version:
The reSolve framework's event broker for applications on a local machine.
103 lines (91 loc) • 3.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _constants = require("../constants");
async function subscribe(pool, payload) {
const {
database: {
escapeStr,
escapeId,
runQuery,
runRawQuery,
encodeJsonPath
},
parseSubscription,
generateGuid
} = pool;
const {
eventSubscriber,
subscriptionOptions
} = payload;
const {
deliveryStrategy,
eventTypes,
aggregateIds
} = subscriptionOptions;
const subscribersTableNameAsId = escapeId(_constants.SUBSCRIBERS_TABLE_NAME);
const nextSubscriptionId = generateGuid(eventSubscriber);
if (deliveryStrategy !== _constants.DeliveryStrategy.ACTIVE_NONE && deliveryStrategy !== _constants.DeliveryStrategy.ACTIVE_REGULAR && deliveryStrategy !== _constants.DeliveryStrategy.ACTIVE_XA && deliveryStrategy !== _constants.DeliveryStrategy.PASSTHROUGH) {
throw new Error(`Wrong deliveryStrategy="${deliveryStrategy}"`);
}
if (eventTypes != null && !Array.isArray(eventTypes)) {
throw new Error(`Wrong eventTypes="${eventTypes}"`);
}
if (aggregateIds != null && !Array.isArray(aggregateIds)) {
throw new Error(`Wrong aggregateIds="${aggregateIds}"`);
}
await runRawQuery(`
UPDATE ${subscribersTableNameAsId} SET
"deliveryStrategy" = ${escapeStr(deliveryStrategy)},
"eventTypes" = ${escapeStr(eventTypes != null ? `{ ${eventTypes.map(eventType => `${JSON.stringify(encodeJsonPath(eventType))}: true`).join(', ')} }` : 'null')},
"aggregateIds" = ${escapeStr(aggregateIds != null ? `{ ${aggregateIds.map(aggregateId => `${JSON.stringify(encodeJsonPath(aggregateId))}: true`).join(', ')} }` : 'null')},
"queueStrategy" = ${escapeStr(_constants.QueueStrategy.NONE)},
"maxParallel" = ${+1}
WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)};
INSERT OR IGNORE INTO ${subscribersTableNameAsId}(
"subscriptionId",
"eventSubscriber",
"status",
"deliveryStrategy",
"eventTypes",
"aggregateIds",
"queueStrategy",
"maxParallel",
"successEvent",
"failedEvent",
"errors",
"cursor"
) VALUES (
${escapeStr(nextSubscriptionId)},
${escapeStr(eventSubscriber)},
${escapeStr(_constants.SubscriptionStatus.SKIP)},
${escapeStr(deliveryStrategy)},
${escapeStr(eventTypes != null ? `{ ${eventTypes.map(eventType => `${JSON.stringify(encodeJsonPath(eventType))}: true`).join(', ')} }` : 'null')},
${escapeStr(aggregateIds != null ? `{ ${aggregateIds.map(aggregateId => `${JSON.stringify(encodeJsonPath(aggregateId))}: true`).join(', ')} }` : 'null')},
${escapeStr(_constants.QueueStrategy.NONE)},
${+1},
NULL,
NULL,
NULL,
NULL
);
COMMIT;
BEGIN IMMEDIATE;
`);
const result = await runQuery(`
SELECT * FROM ${subscribersTableNameAsId}
WHERE "eventSubscriber" = ${escapeStr(eventSubscriber)};
`);
if (result == null || result.length !== 1) {
throw new Error('Subscription failed');
}
const {
subscriptionId
} = parseSubscription(result[0]);
return subscriptionId;
}
var _default = subscribe;
exports.default = _default;
//# sourceMappingURL=subscribe.js.map