@medusajs/event-bus-redis 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ import { ModuleExports } from "@medusajs/medusa";
2
+ declare const _default: ModuleExports;
3
+ export default _default;
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var loaders_1 = __importDefault(require("./loaders"));
7
+ var event_bus_redis_1 = __importDefault(require("./services/event-bus-redis"));
8
+ var service = event_bus_redis_1.default;
9
+ var loaders = [loaders_1.default];
10
+ exports.default = {
11
+ service: service,
12
+ loaders: loaders,
13
+ };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AACA,sDAA8B;AAC9B,+EAA6D;AAE7D,IAAM,OAAO,GAAG,yBAAoB,CAAA;AACpC,IAAM,OAAO,GAAG,CAAC,iBAAM,CAAC,CAAA;AAExB,kBAAe;IACb,OAAO,SAAA;IACP,OAAO,SAAA;CACS,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { LoaderOptions } from "@medusajs/medusa";
2
+ declare const _default: ({ container, configModule, logger, }: LoaderOptions) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = (function (_a) {
40
+ var container = _a.container, configModule = _a.configModule, logger = _a.logger;
41
+ return __awaiter(void 0, void 0, void 0, function () {
42
+ var redisUrl;
43
+ var _b;
44
+ return __generator(this, function (_c) {
45
+ redisUrl = (_b = configModule.projectConfig) === null || _b === void 0 ? void 0 : _b.redis_url;
46
+ if (!redisUrl) {
47
+ logger === null || logger === void 0 ? void 0 : logger.error("No `redis_url` provided in project config. It is required for the Redis Event Bus.");
48
+ }
49
+ return [2 /*return*/];
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,mBAAe,UAAO,EAIN;QAHd,SAAS,eAAA,EACT,YAAY,kBAAA,EACZ,MAAM,YAAA;;;;;YAEA,QAAQ,GAAG,MAAA,YAAY,CAAC,aAAa,0CAAE,SAAS,CAAA;YAEtD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CACX,oFAAoF,CACrF,CAAA;aACF;;;;CACF,EAAA"}
@@ -0,0 +1,94 @@
1
+ import { ConfigModule, ConfigurableModuleDeclaration, IEventBusService, Logger, StagedJob, StagedJobService, TransactionBaseService } from "@medusajs/medusa";
2
+ import { Job, Queue } from "bullmq";
3
+ import { EntityManager } from "typeorm";
4
+ declare type InjectedDependencies = {
5
+ manager: EntityManager;
6
+ logger: Logger;
7
+ stagedJobService: StagedJobService;
8
+ configModule: ConfigModule;
9
+ };
10
+ declare type ModuleOptions = {
11
+ queueName?: string;
12
+ workerName?: string;
13
+ queuePrefix?: string;
14
+ workerPrefix?: string;
15
+ redisUrl?: string;
16
+ };
17
+ declare type Subscriber<T = unknown> = (data: T, eventName: string) => Promise<void>;
18
+ declare type SubscriberContext = {
19
+ subscriberId: string;
20
+ };
21
+ declare type BullJob<T> = {
22
+ data: {
23
+ eventName: string;
24
+ data: T;
25
+ completedSubscriberIds: string[] | undefined;
26
+ };
27
+ } & Job;
28
+ declare type SubscriberDescriptor = {
29
+ id: string;
30
+ subscriber: Subscriber;
31
+ };
32
+ declare type EmitOptions = {
33
+ delay?: number;
34
+ attempts: number;
35
+ backoff?: {
36
+ type: "fixed" | "exponential";
37
+ delay: number;
38
+ };
39
+ };
40
+ /**
41
+ * Can keep track of multiple subscribers to different events and run the
42
+ * subscribers when events happen. Events will run asynchronously.
43
+ */
44
+ export default class RedisEventBusService extends TransactionBaseService implements IEventBusService {
45
+ protected readonly config_: ConfigModule;
46
+ protected readonly moduleOptions_: ModuleOptions;
47
+ protected readonly moduleDeclaration_: ConfigurableModuleDeclaration;
48
+ protected readonly logger_: Logger;
49
+ protected readonly stagedJobService_: StagedJobService;
50
+ protected readonly eventToSubscribersMap_: Map<string | symbol, SubscriberDescriptor[]>;
51
+ protected queue_: Queue;
52
+ protected shouldEnqueuerRun: boolean;
53
+ protected enqueue_: Promise<void>;
54
+ protected manager_: EntityManager;
55
+ protected transactionManager_: EntityManager | undefined;
56
+ constructor({ manager, logger, stagedJobService, configModule }: InjectedDependencies, moduleOptions: ModuleOptions | undefined, moduleDeclaration: ConfigurableModuleDeclaration, singleton?: boolean);
57
+ withTransaction(transactionManager: any): RedisEventBusService;
58
+ connect(): void;
59
+ /**
60
+ * Adds a function to a list of event subscribers.
61
+ * @param event - the event that the subscriber will listen for.
62
+ * @param subscriber - the function to be called when a certain event
63
+ * @param context - context to use when attaching subscriber
64
+ * happens. Subscribers must return a Promise.
65
+ * @return this
66
+ */
67
+ subscribe(event: string | symbol, subscriber: Subscriber, context?: SubscriberContext): this;
68
+ /**
69
+ * Adds a function to a list of event subscribers.
70
+ * @param event - the event that the subscriber will listen for.
71
+ * @param subscriber - the function to be called when a certain event
72
+ * happens. Subscribers must return a Promise.
73
+ * @return this
74
+ */
75
+ unsubscribe(event: string | symbol, subscriber: Subscriber): this;
76
+ /**
77
+ * Calls all subscribers when an event occurs.
78
+ * @param {string} eventName - the name of the event to be process.
79
+ * @param data - the data to send to the subscriber.
80
+ * @param options - options to add the job with
81
+ * @return the job from our queue
82
+ */
83
+ emit<T>(eventName: string, data: T, options?: Record<string, unknown> & EmitOptions): Promise<StagedJob | void>;
84
+ startEnqueuer(): void;
85
+ stopEnqueuer(): Promise<void>;
86
+ enqueuer_(): Promise<void>;
87
+ /**
88
+ * Handles incoming jobs.
89
+ * @param job The job object
90
+ * @return resolves to the results of the subscriber calls.
91
+ */
92
+ worker_: <T>(job: BullJob<T>) => Promise<unknown>;
93
+ }
94
+ export {};
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __read = (this && this.__read) || function (o, n) {
54
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
55
+ if (!m) return o;
56
+ var i = m.call(o), r, ar = [], e;
57
+ try {
58
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
59
+ }
60
+ catch (error) { e = { error: error }; }
61
+ finally {
62
+ try {
63
+ if (r && !r.done && (m = i["return"])) m.call(i);
64
+ }
65
+ finally { if (e) throw e.error; }
66
+ }
67
+ return ar;
68
+ };
69
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
70
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
71
+ if (ar || !(i in from)) {
72
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
73
+ ar[i] = from[i];
74
+ }
75
+ }
76
+ return to.concat(ar || Array.prototype.slice.call(from));
77
+ };
78
+ var __importDefault = (this && this.__importDefault) || function (mod) {
79
+ return (mod && mod.__esModule) ? mod : { "default": mod };
80
+ };
81
+ Object.defineProperty(exports, "__esModule", { value: true });
82
+ var medusa_1 = require("@medusajs/medusa");
83
+ var bullmq_1 = require("bullmq");
84
+ var ioredis_1 = __importDefault(require("ioredis"));
85
+ var medusa_core_utils_1 = require("medusa-core-utils");
86
+ var ulid_1 = require("ulid");
87
+ var sleep_1 = require("../utils/sleep");
88
+ /**
89
+ * Can keep track of multiple subscribers to different events and run the
90
+ * subscribers when events happen. Events will run asynchronously.
91
+ */
92
+ var RedisEventBusService = /** @class */ (function (_super) {
93
+ __extends(RedisEventBusService, _super);
94
+ function RedisEventBusService(_a, moduleOptions, moduleDeclaration, singleton) {
95
+ var manager = _a.manager, logger = _a.logger, stagedJobService = _a.stagedJobService, configModule = _a.configModule;
96
+ if (moduleOptions === void 0) { moduleOptions = {}; }
97
+ if (singleton === void 0) { singleton = true; }
98
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
99
+ _this.eventToSubscribersMap_ = new Map();
100
+ /**
101
+ * Handles incoming jobs.
102
+ * @param job The job object
103
+ * @return resolves to the results of the subscriber calls.
104
+ */
105
+ _this.worker_ = function (job) { return __awaiter(_this, void 0, void 0, function () {
106
+ var _a, eventName, data, eventSubscribers, wildcardSubscribers, allSubscribers, completedSubscribers, subscribersInCurrentAttempt, isRetry, currentAttempt, isFinalAttempt, completedSubscribersInCurrentAttempt, subscribersResult, didSubscribersFail, isRetriesConfigured, shouldRetry, updatedCompletedSubscribers, errorMessage;
107
+ var _this = this;
108
+ var _b, _c;
109
+ return __generator(this, function (_d) {
110
+ switch (_d.label) {
111
+ case 0:
112
+ _a = job.data, eventName = _a.eventName, data = _a.data;
113
+ eventSubscribers = this.eventToSubscribersMap_.get(eventName) || [];
114
+ wildcardSubscribers = this.eventToSubscribersMap_.get("*") || [];
115
+ allSubscribers = eventSubscribers.concat(wildcardSubscribers);
116
+ completedSubscribers = job.data.completedSubscriberIds || [];
117
+ subscribersInCurrentAttempt = allSubscribers.filter(function (subscriber) {
118
+ return subscriber.id && !completedSubscribers.includes(subscriber.id);
119
+ });
120
+ isRetry = job.attemptsMade > 1;
121
+ currentAttempt = job.attemptsMade + 1;
122
+ isFinalAttempt = ((_b = job === null || job === void 0 ? void 0 : job.opts) === null || _b === void 0 ? void 0 : _b.attempts) === currentAttempt;
123
+ if (isRetry) {
124
+ if (isFinalAttempt) {
125
+ this.logger_.info("Final retry attempt for ".concat(eventName));
126
+ }
127
+ this.logger_.info("Retrying ".concat(eventName, " which has ").concat(eventSubscribers.length, " subscribers (").concat(subscribersInCurrentAttempt.length, " of them failed)"));
128
+ }
129
+ else {
130
+ this.logger_.info("Processing ".concat(eventName, " which has ").concat(eventSubscribers.length, " subscribers"));
131
+ }
132
+ completedSubscribersInCurrentAttempt = [];
133
+ return [4 /*yield*/, Promise.all(subscribersInCurrentAttempt.map(function (_a) {
134
+ var id = _a.id, subscriber = _a.subscriber;
135
+ return __awaiter(_this, void 0, void 0, function () {
136
+ var _this = this;
137
+ return __generator(this, function (_b) {
138
+ return [2 /*return*/, subscriber(data, eventName)
139
+ .then(function (data) {
140
+ // For every subscriber that completes successfully, add their id to the list of completed subscribers
141
+ completedSubscribersInCurrentAttempt.push(id);
142
+ return data;
143
+ })
144
+ .catch(function (err) {
145
+ _this.logger_.warn("An error occurred while processing ".concat(eventName, ": ").concat(err));
146
+ return err;
147
+ })];
148
+ });
149
+ });
150
+ }))
151
+ // If the number of completed subscribers is different from the number of subcribers to process in current attempt, some of them failed
152
+ ];
153
+ case 1:
154
+ subscribersResult = _d.sent();
155
+ didSubscribersFail = completedSubscribersInCurrentAttempt.length !==
156
+ subscribersInCurrentAttempt.length;
157
+ isRetriesConfigured = ((_c = job === null || job === void 0 ? void 0 : job.opts) === null || _c === void 0 ? void 0 : _c.attempts) > 1;
158
+ shouldRetry = didSubscribersFail && isRetriesConfigured && !isFinalAttempt;
159
+ if (shouldRetry) {
160
+ updatedCompletedSubscribers = __spreadArray(__spreadArray([], __read(completedSubscribers), false), __read(completedSubscribersInCurrentAttempt), false);
161
+ job.data.completedSubscriberIds = updatedCompletedSubscribers;
162
+ job.update(job.data);
163
+ errorMessage = "One or more subscribers of ".concat(eventName, " failed. Retrying...");
164
+ this.logger_.warn(errorMessage);
165
+ return [2 /*return*/, Promise.reject(Error(errorMessage))];
166
+ }
167
+ if (didSubscribersFail && !isFinalAttempt) {
168
+ // If retrying is not configured, we log a warning to allow server admins to recover manually
169
+ this.logger_.warn("One or more subscribers of ".concat(eventName, " failed. Retrying is not configured. Use 'attempts' option when emitting events."));
170
+ }
171
+ return [2 /*return*/, Promise.resolve(subscribersResult)];
172
+ }
173
+ });
174
+ }); };
175
+ if ((moduleDeclaration === null || moduleDeclaration === void 0 ? void 0 : moduleDeclaration.resources) !== medusa_1.MODULE_RESOURCE_TYPE.SHARED) {
176
+ throw new medusa_core_utils_1.MedusaError(medusa_core_utils_1.MedusaError.Types.INVALID_ARGUMENT, "At the moment this module can only be used with shared resources");
177
+ }
178
+ _this.moduleOptions_ = moduleOptions;
179
+ _this.moduleDeclaration_ = moduleDeclaration;
180
+ _this.config_ = configModule;
181
+ _this.manager_ = manager;
182
+ _this.logger_ = logger;
183
+ _this.stagedJobService_ = stagedJobService;
184
+ if (singleton && moduleOptions.redisUrl) {
185
+ _this.connect();
186
+ }
187
+ return _this;
188
+ }
189
+ // @ts-ignore
190
+ RedisEventBusService.prototype.withTransaction = function (transactionManager) {
191
+ if (!transactionManager) {
192
+ return this;
193
+ }
194
+ var cloned = new RedisEventBusService({
195
+ manager: transactionManager,
196
+ stagedJobService: this.stagedJobService_,
197
+ logger: this.logger_,
198
+ configModule: this.config_,
199
+ }, this.moduleOptions_, this.moduleDeclaration_, false);
200
+ cloned.transactionManager_ = transactionManager;
201
+ cloned.queue_ = this.queue_;
202
+ return cloned;
203
+ };
204
+ RedisEventBusService.prototype.connect = function () {
205
+ var _a, _b, _c, _d, _e;
206
+ // Required config
207
+ // See: https://github.com/OptimalBits/bull/blob/develop/CHANGELOG.md#breaking-changes
208
+ var connection = new ioredis_1.default((_a = this.moduleOptions_) === null || _a === void 0 ? void 0 : _a.redisUrl, {
209
+ maxRetriesPerRequest: null,
210
+ });
211
+ this.queue_ = new bullmq_1.Queue((_b = this.moduleOptions_.queueName) !== null && _b !== void 0 ? _b : "events-queue", {
212
+ connection: connection,
213
+ prefix: (_c = this.moduleOptions_.queuePrefix) !== null && _c !== void 0 ? _c : "".concat(this.constructor.name),
214
+ });
215
+ // Register our worker to handle emit calls
216
+ new bullmq_1.Worker((_d = this.moduleOptions_.queueName) !== null && _d !== void 0 ? _d : "events-queue", this.worker_, {
217
+ connection: connection,
218
+ prefix: (_e = this.moduleOptions_.workerPrefix) !== null && _e !== void 0 ? _e : "".concat(this.constructor.name),
219
+ });
220
+ if (process.env.NODE_ENV !== "test") {
221
+ this.startEnqueuer();
222
+ }
223
+ };
224
+ /**
225
+ * Adds a function to a list of event subscribers.
226
+ * @param event - the event that the subscriber will listen for.
227
+ * @param subscriber - the function to be called when a certain event
228
+ * @param context - context to use when attaching subscriber
229
+ * happens. Subscribers must return a Promise.
230
+ * @return this
231
+ */
232
+ RedisEventBusService.prototype.subscribe = function (event, subscriber, context) {
233
+ var _a, _b;
234
+ if (typeof subscriber !== "function") {
235
+ throw new Error("Subscriber must be a function");
236
+ }
237
+ /**
238
+ * If context is provided, we use the subscriberId from it
239
+ * otherwise we generate a random using a ulid
240
+ */
241
+ var subscriberId = (_a = context === null || context === void 0 ? void 0 : context.subscriberId) !== null && _a !== void 0 ? _a : "".concat(event.toString(), "-").concat((0, ulid_1.ulid)());
242
+ var newSubscriberDescriptor = { subscriber: subscriber, id: subscriberId };
243
+ var existingSubscribers = (_b = this.eventToSubscribersMap_.get(event)) !== null && _b !== void 0 ? _b : [];
244
+ var subscriberAlreadyExists = existingSubscribers.find(function (sub) { return sub.id === subscriberId; });
245
+ if (subscriberAlreadyExists) {
246
+ throw Error("Subscriber with id ".concat(subscriberId, " already exists"));
247
+ }
248
+ this.eventToSubscribersMap_.set(event, __spreadArray(__spreadArray([], __read(existingSubscribers), false), [
249
+ newSubscriberDescriptor,
250
+ ], false));
251
+ return this;
252
+ };
253
+ /**
254
+ * Adds a function to a list of event subscribers.
255
+ * @param event - the event that the subscriber will listen for.
256
+ * @param subscriber - the function to be called when a certain event
257
+ * happens. Subscribers must return a Promise.
258
+ * @return this
259
+ */
260
+ RedisEventBusService.prototype.unsubscribe = function (event, subscriber) {
261
+ var _a;
262
+ if (typeof subscriber !== "function") {
263
+ throw new Error("Subscriber must be a function");
264
+ }
265
+ var existingSubscribers = this.eventToSubscribersMap_.get(event);
266
+ if (existingSubscribers === null || existingSubscribers === void 0 ? void 0 : existingSubscribers.length) {
267
+ var subIndex = existingSubscribers === null || existingSubscribers === void 0 ? void 0 : existingSubscribers.findIndex(function (sub) { return sub.subscriber === subscriber; });
268
+ if (subIndex !== -1) {
269
+ (_a = this.eventToSubscribersMap_.get(event)) === null || _a === void 0 ? void 0 : _a.splice(subIndex, 1);
270
+ }
271
+ }
272
+ return this;
273
+ };
274
+ /**
275
+ * Calls all subscribers when an event occurs.
276
+ * @param {string} eventName - the name of the event to be process.
277
+ * @param data - the data to send to the subscriber.
278
+ * @param options - options to add the job with
279
+ * @return the job from our queue
280
+ */
281
+ RedisEventBusService.prototype.emit = function (eventName, data, options) {
282
+ if (options === void 0) { options = { attempts: 1 }; }
283
+ return __awaiter(this, void 0, void 0, function () {
284
+ var opts, jobToCreate;
285
+ return __generator(this, function (_a) {
286
+ switch (_a.label) {
287
+ case 0:
288
+ opts = {
289
+ removeOnComplete: true,
290
+ attempts: 1,
291
+ };
292
+ if (typeof options.attempts === "number") {
293
+ opts.attempts = options.attempts;
294
+ if ((0, medusa_core_utils_1.isDefined)(options.backoff)) {
295
+ opts.backoff = options.backoff;
296
+ }
297
+ }
298
+ if (typeof options.delay === "number") {
299
+ opts.delay = options.delay;
300
+ }
301
+ if (!this.transactionManager_) return [3 /*break*/, 2];
302
+ jobToCreate = {
303
+ event_name: eventName,
304
+ data: data,
305
+ options: opts,
306
+ };
307
+ return [4 /*yield*/, this.stagedJobService_
308
+ .withTransaction(this.transactionManager_)
309
+ .create(jobToCreate)];
310
+ case 1: return [2 /*return*/, _a.sent()];
311
+ case 2:
312
+ this.queue_.add(eventName, { eventName: eventName, data: data }, opts);
313
+ return [2 /*return*/];
314
+ }
315
+ });
316
+ });
317
+ };
318
+ RedisEventBusService.prototype.startEnqueuer = function () {
319
+ this.shouldEnqueuerRun = true;
320
+ this.enqueue_ = this.enqueuer_();
321
+ };
322
+ RedisEventBusService.prototype.stopEnqueuer = function () {
323
+ return __awaiter(this, void 0, void 0, function () {
324
+ return __generator(this, function (_a) {
325
+ switch (_a.label) {
326
+ case 0:
327
+ this.shouldEnqueuerRun = false;
328
+ return [4 /*yield*/, this.enqueue_];
329
+ case 1:
330
+ _a.sent();
331
+ return [2 /*return*/];
332
+ }
333
+ });
334
+ });
335
+ };
336
+ RedisEventBusService.prototype.enqueuer_ = function () {
337
+ return __awaiter(this, void 0, void 0, function () {
338
+ var listConfig, jobs;
339
+ var _this = this;
340
+ return __generator(this, function (_a) {
341
+ switch (_a.label) {
342
+ case 0:
343
+ if (!this.shouldEnqueuerRun) return [3 /*break*/, 4];
344
+ listConfig = {
345
+ relations: [],
346
+ skip: 0,
347
+ take: 1000,
348
+ };
349
+ return [4 /*yield*/, this.stagedJobService_.list(listConfig)];
350
+ case 1:
351
+ jobs = _a.sent();
352
+ return [4 /*yield*/, Promise.all(jobs.map(function (job) {
353
+ var _a;
354
+ _this.queue_
355
+ .add(job.event_name, { eventName: job.event_name, data: job.data }, (_a = job.options) !== null && _a !== void 0 ? _a : { removeOnComplete: true })
356
+ .then(function () { return __awaiter(_this, void 0, void 0, function () {
357
+ return __generator(this, function (_a) {
358
+ switch (_a.label) {
359
+ case 0: return [4 /*yield*/, this.stagedJobService_.remove(job)];
360
+ case 1:
361
+ _a.sent();
362
+ return [2 /*return*/];
363
+ }
364
+ });
365
+ }); });
366
+ }))];
367
+ case 2:
368
+ _a.sent();
369
+ return [4 /*yield*/, (0, sleep_1.sleep)(3000)];
370
+ case 3:
371
+ _a.sent();
372
+ return [3 /*break*/, 0];
373
+ case 4: return [2 /*return*/];
374
+ }
375
+ });
376
+ });
377
+ };
378
+ return RedisEventBusService;
379
+ }(medusa_1.TransactionBaseService));
380
+ exports.default = RedisEventBusService;
381
+ //# sourceMappingURL=event-bus-redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus-redis.js","sourceRoot":"","sources":["../../src/services/event-bus-redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function sleep(ms: number): Promise<unknown>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.sleep = void 0;
40
+ function sleep(ms) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ return [2 /*return*/, new Promise(function (resolve) {
44
+ setTimeout(resolve, ms);
45
+ })];
46
+ });
47
+ });
48
+ }
49
+ exports.sleep = sleep;
50
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../src/utils/sleep.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAsB,KAAK,CAAC,EAAU;;;YAClC,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO;oBACzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;gBACzB,CAAC,CAAC,EAAA;;;CACH;AAJH,sBAIG"}
package/jest.config.js ADDED
@@ -0,0 +1,13 @@
1
+ module.exports = {
2
+ globals: {
3
+ "ts-jest": {
4
+ tsConfig: "tsconfig.spec.json",
5
+ isolatedModules: false,
6
+ },
7
+ },
8
+ transform: {
9
+ "^.+\\.[jt]s?$": "ts-jest",
10
+ },
11
+ testEnvironment: `node`,
12
+ moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
13
+ }
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@medusajs/event-bus-redis",
3
+ "version": "0.0.0",
4
+ "description": "Redis Event Bus Module for Medusa",
5
+ "main": "dist/index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/medusajs/medusa",
9
+ "directory": "packages/event-bus-redis"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "author": "Medusa",
15
+ "license": "MIT",
16
+ "devDependencies": {
17
+ "@medusajs/medusa": "^1.6.5",
18
+ "cross-env": "^5.2.1",
19
+ "jest": "^25.5.2",
20
+ "ts-jest": "^25.5.1",
21
+ "typescript": "^4.4.4"
22
+ },
23
+ "scripts": {
24
+ "watch": "tsc --build --watch",
25
+ "prepare": "cross-env NODE_ENV=production yarn run build",
26
+ "build": "tsc --build",
27
+ "test": "jest"
28
+ },
29
+ "peerDependencies": {
30
+ "@medusajs/medusa": "1.x.x",
31
+ "medusa-interfaces": "1.x.x"
32
+ },
33
+ "dependencies": {
34
+ "bullmq": "^3.5.6",
35
+ "ioredis": "^5.2.5",
36
+ "typeorm": "^0.2.31"
37
+ }
38
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": [
4
+ "./src/**/*",
5
+ "index.d.ts",
6
+ "./src/**/__tests__",
7
+ "./src/**/__mocks__"
8
+ ],
9
+ "exclude": ["node_modules"]
10
+ }