@jetit/publisher 3.2.1 → 3.3.1
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.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jetit/publisher",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@jetit/id": "0.0.11",
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
"rxjs": "^7.8.0"
|
|
9
9
|
},
|
|
10
10
|
"peerDependencies": {
|
|
11
|
-
"tslib": "
|
|
11
|
+
"tslib": "1.14.1"
|
|
12
12
|
},
|
|
13
|
-
"main": "./src/index.js"
|
|
14
|
-
"types": "./src/index.d.ts"
|
|
13
|
+
"main": "./src/index.js"
|
|
15
14
|
}
|
package/src/lib/publisher.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Streams as Publisher } from './redis/streams';
|
|
2
1
|
export { setRedisConnectionSettings as setRedisConfig } from './redis/registry';
|
|
2
|
+
export { Streams as Publisher } from './redis/streams';
|
|
3
3
|
export { ScheduledProcessor as __SCHEDULER_INTERNALS__ } from './redis/scheduler';
|
|
4
4
|
export { UTILS as StreamUtilityFunctions } from './redis/utils';
|
package/src/lib/publisher.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StreamUtilityFunctions = exports.__SCHEDULER_INTERNALS__ = exports.
|
|
4
|
-
var streams_1 = require("./redis/streams");
|
|
5
|
-
Object.defineProperty(exports, "Publisher", { enumerable: true, get: function () { return streams_1.Streams; } });
|
|
3
|
+
exports.StreamUtilityFunctions = exports.__SCHEDULER_INTERNALS__ = exports.Publisher = exports.setRedisConfig = void 0;
|
|
6
4
|
var registry_1 = require("./redis/registry");
|
|
7
5
|
Object.defineProperty(exports, "setRedisConfig", { enumerable: true, get: function () { return registry_1.setRedisConnectionSettings; } });
|
|
6
|
+
var streams_1 = require("./redis/streams");
|
|
7
|
+
Object.defineProperty(exports, "Publisher", { enumerable: true, get: function () { return streams_1.Streams; } });
|
|
8
8
|
var scheduler_1 = require("./redis/scheduler");
|
|
9
9
|
Object.defineProperty(exports, "__SCHEDULER_INTERNALS__", { enumerable: true, get: function () { return scheduler_1.ScheduledProcessor; } });
|
|
10
10
|
var utils_1 = require("./redis/utils");
|
|
@@ -40,7 +40,7 @@ class ScheduledProcessor {
|
|
|
40
40
|
const events = await this.redisPublisher.zrangebyscore('se', 0, currentTime);
|
|
41
41
|
console.log('Events to process:', events.length);
|
|
42
42
|
for (const eventString of events) {
|
|
43
|
-
const eventData =
|
|
43
|
+
const eventData = (0, utils_1.decodeScheduledMessage)(eventString);
|
|
44
44
|
/**
|
|
45
45
|
* Remove the event from the Redis Sorted Set first. Please note that
|
|
46
46
|
* there is a chance of failure here if the process crashes before
|
package/src/lib/redis/streams.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Streams = void 0;
|
|
4
|
-
const registry_1 = require("./registry");
|
|
5
|
-
const rxjs_1 = require("rxjs");
|
|
6
4
|
const id_1 = require("@jetit/id");
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
const registry_1 = require("./registry");
|
|
7
7
|
const utils_1 = require("./utils");
|
|
8
8
|
function publisherErrorHandler(error) {
|
|
9
9
|
console.error('PUBLISHER UNHANDLED ERROR: ', JSON.stringify(error));
|
|
@@ -97,24 +97,15 @@ class Streams {
|
|
|
97
97
|
await this.publish(eventData);
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
|
+
const key = (0, utils_1.encodeScheduledMessage)(eventData);
|
|
100
101
|
if (uniquePerInstance === true) {
|
|
101
|
-
const existingJob = await this.redisPublisher.zscore('se',
|
|
102
|
+
const existingJob = await this.redisPublisher.zscore('se', key);
|
|
102
103
|
if (existingJob) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
/** Repeating Jobs */
|
|
106
|
-
(parsedExistingJob.eventName === eventData.eventName &&
|
|
107
|
-
parsedExistingJob.repeatInterval &&
|
|
108
|
-
(!parsedExistingJob.data || JSON.stringify(parsedExistingJob.data) === JSON.stringify(eventData.data))) ||
|
|
109
|
-
/** Non-repeating schedules */
|
|
110
|
-
(parsedExistingJob.eventName === eventData.eventName &&
|
|
111
|
-
JSON.stringify(parsedExistingJob.data) === JSON.stringify(eventData.data))) {
|
|
112
|
-
console.log(`PUBLISHER: Job with data '${eventData}' already exists. Skipping.`);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
104
|
+
console.log(`PUBLISHER: Job with data '${eventData}' already exists. Skipping.`);
|
|
105
|
+
return;
|
|
115
106
|
}
|
|
116
107
|
}
|
|
117
|
-
await this.redisPublisher.zadd('se', scheduledTime.getTime(),
|
|
108
|
+
await this.redisPublisher.zadd('se', scheduledTime.getTime(), key);
|
|
118
109
|
}
|
|
119
110
|
}
|
|
120
111
|
/**
|
package/src/lib/redis/utils.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RedisType } from './registry';
|
|
2
|
+
import { EventData } from './types';
|
|
2
3
|
export declare function getAllConsumerGroups(eventName: string, redisConnection: RedisType): Promise<string[]>;
|
|
3
4
|
export declare function getUnacknowledgedMessages(redisClient: RedisType, consumerGroupName: string, streamName: string, count?: number): Promise<{
|
|
4
5
|
count: number;
|
|
@@ -11,6 +12,8 @@ export declare function getMessageStatesCount(redisClient: RedisType, streamName
|
|
|
11
12
|
}>;
|
|
12
13
|
export declare function notifySubscribers(redisClient: RedisType, eventName: string, messageId: string): Promise<void>;
|
|
13
14
|
export declare function removedScheduledJob(redisClient: RedisType, eventString: string): Promise<void>;
|
|
15
|
+
export declare function encodeScheduledMessage<TData, TName extends string>(data: EventData<TData, TName>): string;
|
|
16
|
+
export declare function decodeScheduledMessage(data: string): EventData<never, never>;
|
|
14
17
|
export declare const UTILS: {
|
|
15
18
|
getMessageStatesCount: typeof getMessageStatesCount;
|
|
16
19
|
getUnacknowledgedMessages: typeof getUnacknowledgedMessages;
|
package/src/lib/redis/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UTILS = exports.removedScheduledJob = exports.notifySubscribers = exports.getMessageStatesCount = exports.getUnacknowledgedMessages = exports.getAllConsumerGroups = void 0;
|
|
3
|
+
exports.UTILS = exports.decodeScheduledMessage = exports.encodeScheduledMessage = exports.removedScheduledJob = exports.notifySubscribers = exports.getMessageStatesCount = exports.getUnacknowledgedMessages = exports.getAllConsumerGroups = void 0;
|
|
4
4
|
async function getAllConsumerGroups(eventName, redisConnection) {
|
|
5
5
|
const consumerGroups = await redisConnection.smembers(`${eventName}`);
|
|
6
6
|
return consumerGroups;
|
|
@@ -58,6 +58,24 @@ async function removedScheduledJob(redisClient, eventString) {
|
|
|
58
58
|
console.log(`Total Events in scheduled queue: ${eventsLater.length}`);
|
|
59
59
|
}
|
|
60
60
|
exports.removedScheduledJob = removedScheduledJob;
|
|
61
|
+
function encodeScheduledMessage(data) {
|
|
62
|
+
const eventName = data.eventName;
|
|
63
|
+
const eventData = JSON.stringify(data.data);
|
|
64
|
+
const repeatInterval = data.repeatInterval;
|
|
65
|
+
const eventDataBuffer = Buffer.from(eventData, 'utf8').toString('base64');
|
|
66
|
+
return `${eventName}%%${eventDataBuffer}%%${repeatInterval}`;
|
|
67
|
+
}
|
|
68
|
+
exports.encodeScheduledMessage = encodeScheduledMessage;
|
|
69
|
+
function decodeScheduledMessage(data) {
|
|
70
|
+
const parts = data.split('%%');
|
|
71
|
+
const eventName = parts[0];
|
|
72
|
+
return {
|
|
73
|
+
data: JSON.parse(Buffer.from(parts[1], 'base64').toString('utf-8')),
|
|
74
|
+
eventName,
|
|
75
|
+
repeatInterval: parts[2],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
exports.decodeScheduledMessage = decodeScheduledMessage;
|
|
61
79
|
exports.UTILS = {
|
|
62
80
|
getMessageStatesCount,
|
|
63
81
|
getUnacknowledgedMessages,
|