UNPKG

resolve-local-event-broker

Version:

The reSolve framework's event broker for applications on a local machine.

103 lines (91 loc) 3.34 kB
"use strict"; 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