woonplan-packages-redishelper 1.0.53 → 1.0.58
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/dist/getters.js +2 -5
- package/dist/index.d.ts +3 -2
- package/dist/index.js +62 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +6 -1
- package/getters.ts +5 -10
- package/index.ts +79 -2
- package/package.json +1 -1
- package/utils.ts +4 -2
package/dist/getters.js
CHANGED
|
@@ -23,7 +23,6 @@ var getOrRequestKey = function (config, key, service) { return new Promise(funct
|
|
|
23
23
|
}); };
|
|
24
24
|
exports.getOrRequestKey = getOrRequestKey;
|
|
25
25
|
var requestAndWaitForKey = function (getterclient, config, key, service) { return new Promise(function (resolve) {
|
|
26
|
-
service = capitalizeFirstLetter(service);
|
|
27
26
|
var messageid = (0, uuid_1.v4)();
|
|
28
27
|
// create a listener
|
|
29
28
|
var listenerclient = (0, memdb_1.getRedisClient)(config);
|
|
@@ -52,7 +51,7 @@ var requestAndWaitForKey = function (getterclient, config, key, service) { retur
|
|
|
52
51
|
}, timeout);
|
|
53
52
|
});
|
|
54
53
|
// send out the request
|
|
55
|
-
getterclient.xadd(
|
|
54
|
+
getterclient.xadd((0, utils_1.getKeyRequestedChannelName)(service), '*', 'key', key, 'messageid', messageid)
|
|
56
55
|
.catch(function (e) {
|
|
57
56
|
console.log(e);
|
|
58
57
|
resolve(null);
|
|
@@ -64,11 +63,9 @@ exports.subscribeToMessageResponse = subscribeToMessageResponse;
|
|
|
64
63
|
var requestAndWaitForList = function (client, service, listname, listsubject, props, _a) {
|
|
65
64
|
if (props === void 0) { props = {}; }
|
|
66
65
|
return new Promise(function (resolve) {
|
|
67
|
-
service = capitalizeFirstLetter(service);
|
|
68
66
|
// send message for list to be created and then block untill we have a list
|
|
69
|
-
client.xadd(
|
|
67
|
+
client.xadd((0, utils_1.getListRequestedChannelName)(service), '*', 'listname', listname, 'listsubject', listsubject, 'props', JSON.stringify(props))
|
|
70
68
|
.then(function () { return resolve(client.blmove(listname, listname, 'RIGHT', 'LEFT', 2)); });
|
|
71
69
|
});
|
|
72
70
|
};
|
|
73
71
|
exports.requestAndWaitForList = requestAndWaitForList;
|
|
74
|
-
var capitalizeFirstLetter = function (string) { return string.charAt(0).toUpperCase() + string.slice(1); };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Redis } from "ioredis";
|
|
2
|
-
import { RedisMessage } from "./types";
|
|
2
|
+
import { RedisConfig, RedisMessage } from "./types";
|
|
3
3
|
import { sendMessageToStream, publishMessageResponse } from "./setters";
|
|
4
4
|
import { getOrRequestKey, subscribeToMessageResponse, requestAndWaitForList } from "./getters";
|
|
5
5
|
declare const listenToStream: (client: Redis, groupname: string, channelname: string, consumername: string, callback: Function) => Promise<boolean>;
|
|
6
|
-
|
|
6
|
+
declare const dataRequester: (config: RedisConfig, groupname: string, service: string, consumername: string, callback: Function) => void;
|
|
7
|
+
export { listenToStream, RedisMessage, sendMessageToStream, publishMessageResponse, getOrRequestKey, dataRequester, subscribeToMessageResponse, requestAndWaitForList };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.requestAndWaitForList = exports.subscribeToMessageResponse = exports.getOrRequestKey = exports.publishMessageResponse = exports.sendMessageToStream = exports.listenToStream = void 0;
|
|
3
|
+
exports.requestAndWaitForList = exports.subscribeToMessageResponse = exports.dataRequester = exports.getOrRequestKey = exports.publishMessageResponse = exports.sendMessageToStream = exports.listenToStream = void 0;
|
|
4
4
|
var setters_1 = require("./setters");
|
|
5
5
|
Object.defineProperty(exports, "sendMessageToStream", { enumerable: true, get: function () { return setters_1.sendMessageToStream; } });
|
|
6
6
|
Object.defineProperty(exports, "publishMessageResponse", { enumerable: true, get: function () { return setters_1.publishMessageResponse; } });
|
|
@@ -8,6 +8,8 @@ var getters_1 = require("./getters");
|
|
|
8
8
|
Object.defineProperty(exports, "getOrRequestKey", { enumerable: true, get: function () { return getters_1.getOrRequestKey; } });
|
|
9
9
|
Object.defineProperty(exports, "subscribeToMessageResponse", { enumerable: true, get: function () { return getters_1.subscribeToMessageResponse; } });
|
|
10
10
|
Object.defineProperty(exports, "requestAndWaitForList", { enumerable: true, get: function () { return getters_1.requestAndWaitForList; } });
|
|
11
|
+
var memdb_1 = require("./memdb");
|
|
12
|
+
var utils_1 = require("./utils");
|
|
11
13
|
var listenToStream = function (client, groupname, channelname, consumername, callback) { return new Promise(function (resolve, reject) {
|
|
12
14
|
createGroup(client, groupname, channelname).then(function () {
|
|
13
15
|
listenForMessage(client, groupname, channelname, consumername, callback);
|
|
@@ -26,6 +28,65 @@ var createGroup = function (client, groupname, channelname) { return new Promise
|
|
|
26
28
|
reject(error);
|
|
27
29
|
});
|
|
28
30
|
}); };
|
|
31
|
+
// this function is made as a responsding function to getters/requestAndWaitForKey
|
|
32
|
+
// dataRequester listens to a stream and then publishes a respond
|
|
33
|
+
var dataRequester = function (config, groupname, service, consumername, callback) {
|
|
34
|
+
var channelname = (0, utils_1.getKeyRequestedChannelName)(service);
|
|
35
|
+
var listenerclient = (0, memdb_1.getRedisClient)(config);
|
|
36
|
+
createGroup(listenerclient, groupname, channelname)
|
|
37
|
+
.then(function () { return listenForMessageForDataRequest(listenerclient, groupname, channelname, consumername, callback); });
|
|
38
|
+
};
|
|
39
|
+
exports.dataRequester = dataRequester;
|
|
40
|
+
var getMessagedataFromResult = function (results) {
|
|
41
|
+
if (!results.length)
|
|
42
|
+
throw ('no-messagedata');
|
|
43
|
+
var result = results[0], messages = result[1];
|
|
44
|
+
if (!messages.length)
|
|
45
|
+
throw ('no-messagedata');
|
|
46
|
+
var message = messages[0], id = message[0], keysandvalues = message[1];
|
|
47
|
+
var messagedata = {};
|
|
48
|
+
keysandvalues.forEach(function (key, n) {
|
|
49
|
+
if (!(n == 0 || n % 2 == 0))
|
|
50
|
+
return;
|
|
51
|
+
messagedata[key] = keysandvalues[n + 1];
|
|
52
|
+
});
|
|
53
|
+
return { messagedata: messagedata, id: id };
|
|
54
|
+
};
|
|
55
|
+
var listenForMessageForDataRequest = function (listenerclient, groupname, channelname, consumername, callback) {
|
|
56
|
+
console.log("listening to ".concat(channelname, " as ").concat(consumername));
|
|
57
|
+
var streammsgid = '';
|
|
58
|
+
var messageid = '';
|
|
59
|
+
// block client while listening for a message
|
|
60
|
+
listenerclient.xreadgroup('GROUP', groupname, consumername, 'COUNT', 1, 'BLOCK', 0, 'STREAMS', channelname, '>')
|
|
61
|
+
.then(function (results) {
|
|
62
|
+
return getMessagedataFromResult(results);
|
|
63
|
+
})
|
|
64
|
+
.then(function (_a) {
|
|
65
|
+
var messagedata = _a.messagedata, id = _a.id;
|
|
66
|
+
// messageid should have been set in getters/requestAndWaitForKey
|
|
67
|
+
if ('messageid' in messagedata)
|
|
68
|
+
messageid = messagedata.id;
|
|
69
|
+
//stream id from redis
|
|
70
|
+
streammsgid = id;
|
|
71
|
+
return messagedata;
|
|
72
|
+
})
|
|
73
|
+
.then(function (messagedata) {
|
|
74
|
+
return callback(messagedata, streammsgid);
|
|
75
|
+
})
|
|
76
|
+
.then(function (result) {
|
|
77
|
+
return (0, setters_1.publishMessageResponse)(listenerclient, messageid, result != null ? result : '');
|
|
78
|
+
})
|
|
79
|
+
.catch(function (e) {
|
|
80
|
+
console.log(e);
|
|
81
|
+
return (0, setters_1.publishMessageResponse)(listenerclient, messageid, '');
|
|
82
|
+
})
|
|
83
|
+
.finally(function () {
|
|
84
|
+
listenerclient.xack(channelname, groupname, streammsgid).then(function () {
|
|
85
|
+
console.log(streammsgid + ' acknowledged');
|
|
86
|
+
});
|
|
87
|
+
listenForMessageForDataRequest(listenerclient, groupname, channelname, consumername, callback);
|
|
88
|
+
});
|
|
89
|
+
};
|
|
29
90
|
var listenForMessage = function (client, groupname, channelname, consumername, callback, lastId) {
|
|
30
91
|
if (lastId === void 0) { lastId = "$"; }
|
|
31
92
|
console.log("listening to ".concat(channelname, " as ").concat(consumername));
|
package/dist/utils.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ import { RedisMessage } from "./types";
|
|
|
2
2
|
declare const getMessageReponseKey: (messageid: string) => string;
|
|
3
3
|
declare const reduceArraysToArray: (toArray: any[], fromArray: []) => any[];
|
|
4
4
|
declare const redisMessageToArrayOfKeysAndValues: (message: RedisMessage) => any[];
|
|
5
|
-
|
|
5
|
+
declare const getKeyRequestedChannelName: (service: string) => string;
|
|
6
|
+
declare const getListRequestedChannelName: (service: string) => string;
|
|
7
|
+
export { getMessageReponseKey, redisMessageToArrayOfKeysAndValues, reduceArraysToArray, getKeyRequestedChannelName, getListRequestedChannelName };
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.reduceArraysToArray = exports.redisMessageToArrayOfKeysAndValues = exports.getMessageReponseKey = void 0;
|
|
3
|
+
exports.getListRequestedChannelName = exports.getKeyRequestedChannelName = exports.reduceArraysToArray = exports.redisMessageToArrayOfKeysAndValues = exports.getMessageReponseKey = void 0;
|
|
4
4
|
var messagePrefix = "messageresponse";
|
|
5
5
|
var getMessageReponseKey = function (messageid) { return messagePrefix + messageid; };
|
|
6
6
|
exports.getMessageReponseKey = getMessageReponseKey;
|
|
@@ -8,3 +8,8 @@ var reduceArraysToArray = function (toArray, fromArray) { return toArray.concat(
|
|
|
8
8
|
exports.reduceArraysToArray = reduceArraysToArray;
|
|
9
9
|
var redisMessageToArrayOfKeysAndValues = function (message) { return Object.keys(message).map(function (key) { return [key, message[key]]; }); };
|
|
10
10
|
exports.redisMessageToArrayOfKeysAndValues = redisMessageToArrayOfKeysAndValues;
|
|
11
|
+
var capitalizeFirstLetter = function (string) { return string.charAt(0).toUpperCase() + string.slice(1); };
|
|
12
|
+
var getKeyRequestedChannelName = function (service) { return "keyRequestedFrom".concat(capitalizeFirstLetter(service), "Service"); };
|
|
13
|
+
exports.getKeyRequestedChannelName = getKeyRequestedChannelName;
|
|
14
|
+
var getListRequestedChannelName = function (service) { return "listRequestedFrom".concat(capitalizeFirstLetter(service), "Service"); };
|
|
15
|
+
exports.getListRequestedChannelName = getListRequestedChannelName;
|
package/getters.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Redis } from "ioredis"
|
|
2
|
-
import { getMessageReponseKey } from "./utils"
|
|
2
|
+
import { getMessageReponseKey, getKeyRequestedChannelName, getListRequestedChannelName } from "./utils"
|
|
3
3
|
import { RedisConfig } from "./types"
|
|
4
4
|
import { getRedisClient } from "./memdb"
|
|
5
5
|
import { v4 as uuidv4 } from 'uuid';
|
|
@@ -34,9 +34,7 @@ const requestAndWaitForKey = (
|
|
|
34
34
|
config:RedisConfig,
|
|
35
35
|
key:string,
|
|
36
36
|
service:string,
|
|
37
|
-
) => new Promise((resolve) => {
|
|
38
|
-
service = capitalizeFirstLetter( service );
|
|
39
|
-
|
|
37
|
+
) => new Promise((resolve) => {
|
|
40
38
|
const messageid = uuidv4()
|
|
41
39
|
|
|
42
40
|
// create a listener
|
|
@@ -70,7 +68,7 @@ const requestAndWaitForKey = (
|
|
|
70
68
|
)
|
|
71
69
|
|
|
72
70
|
// send out the request
|
|
73
|
-
getterclient.xadd(
|
|
71
|
+
getterclient.xadd( getKeyRequestedChannelName( service ), '*', 'key', key, 'messageid', messageid )
|
|
74
72
|
.catch(
|
|
75
73
|
(e) => {
|
|
76
74
|
console.log( e )
|
|
@@ -94,17 +92,14 @@ const requestAndWaitForList = (
|
|
|
94
92
|
props = {}
|
|
95
93
|
,{
|
|
96
94
|
|
|
97
|
-
}) => new Promise((resolve) => {
|
|
98
|
-
service = capitalizeFirstLetter( service );
|
|
99
|
-
|
|
95
|
+
}) => new Promise((resolve) => {
|
|
100
96
|
// send message for list to be created and then block untill we have a list
|
|
101
|
-
client.xadd(
|
|
97
|
+
client.xadd( getListRequestedChannelName( service ), '*', 'listname', listname, 'listsubject', listsubject, 'props', JSON.stringify( props ))
|
|
102
98
|
.then(
|
|
103
99
|
() => resolve( client.blmove( listname, listname, 'RIGHT', 'LEFT', 2) )
|
|
104
100
|
)
|
|
105
101
|
})
|
|
106
102
|
|
|
107
|
-
const capitalizeFirstLetter = (string:string) => string.charAt(0).toUpperCase() + string.slice(1)
|
|
108
103
|
|
|
109
104
|
|
|
110
105
|
export { getOrRequestKey, requestAndWaitForList, subscribeToMessageResponse }
|
package/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Redis } from "ioredis"
|
|
2
|
-
import { RedisMessage } from "./types"
|
|
2
|
+
import { RedisConfig, RedisMessage, Struct } from "./types"
|
|
3
3
|
import { sendMessageToStream, publishMessageResponse } from "./setters"
|
|
4
4
|
import { getOrRequestKey, subscribeToMessageResponse, requestAndWaitForList } from "./getters"
|
|
5
|
+
import { getRedisClient } from "./memdb"
|
|
6
|
+
import { getKeyRequestedChannelName } from "./utils"
|
|
5
7
|
|
|
6
8
|
const listenToStream = ( client:Redis, groupname:string, channelname:string, consumername:string, callback:Function ):Promise<boolean> => new Promise((resolve,reject) => {
|
|
7
9
|
createGroup( client, groupname, channelname ).then(
|
|
@@ -31,6 +33,81 @@ const createGroup = ( client:Redis, groupname:string, channelname:string ):Promi
|
|
|
31
33
|
)
|
|
32
34
|
})
|
|
33
35
|
|
|
36
|
+
|
|
37
|
+
// this function is made as a responsding function to getters/requestAndWaitForKey
|
|
38
|
+
// dataRequester listens to a stream and then publishes a respond
|
|
39
|
+
const dataRequester = ( config:RedisConfig, groupname:string, service:string, consumername:string, callback:Function ) => {
|
|
40
|
+
const channelname = getKeyRequestedChannelName( service ) ;
|
|
41
|
+
const listenerclient = getRedisClient( config )
|
|
42
|
+
createGroup( listenerclient, groupname, channelname )
|
|
43
|
+
.then(
|
|
44
|
+
() => listenForMessageForDataRequest( listenerclient, groupname, channelname, consumername, callback )
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const getMessagedataFromResult = ( results:any ) => {
|
|
49
|
+
if( !results.length ) throw('no-messagedata');
|
|
50
|
+
|
|
51
|
+
const result = results[0],
|
|
52
|
+
messages = result[1]
|
|
53
|
+
|
|
54
|
+
if( !messages.length ) throw('no-messagedata');
|
|
55
|
+
const message = messages[0],
|
|
56
|
+
id = message[0],
|
|
57
|
+
keysandvalues = message[1] as string[]
|
|
58
|
+
|
|
59
|
+
let messagedata:RedisMessage = {};
|
|
60
|
+
|
|
61
|
+
keysandvalues.forEach( (key, n ) => {
|
|
62
|
+
if( !( n == 0 || n % 2 == 0 ) ) return;
|
|
63
|
+
messagedata[key] = keysandvalues[n+1];
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
return { messagedata, id}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const listenForMessageForDataRequest = (
|
|
70
|
+
listenerclient:Redis, groupname:string, channelname:string, consumername:string, callback:Function
|
|
71
|
+
) => {
|
|
72
|
+
console.log( `listening to ${channelname} as ${consumername}`)
|
|
73
|
+
let streammsgid = '';
|
|
74
|
+
let messageid = '';
|
|
75
|
+
// block client while listening for a message
|
|
76
|
+
listenerclient.xreadgroup('GROUP', groupname, consumername, 'COUNT', 1, 'BLOCK', 0, 'STREAMS', channelname, '>')
|
|
77
|
+
.then( (results) =>
|
|
78
|
+
getMessagedataFromResult( results )
|
|
79
|
+
)
|
|
80
|
+
.then(({messagedata,id}) => {
|
|
81
|
+
// messageid should have been set in getters/requestAndWaitForKey
|
|
82
|
+
if( 'messageid' in messagedata ) messageid = messagedata.id;
|
|
83
|
+
|
|
84
|
+
//stream id from redis
|
|
85
|
+
streammsgid = id;
|
|
86
|
+
return messagedata
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
.then( (messagedata) =>
|
|
90
|
+
callback( messagedata, streammsgid )
|
|
91
|
+
)
|
|
92
|
+
.then(( result:any ) =>
|
|
93
|
+
publishMessageResponse( listenerclient, messageid, result != null ? result : '' )
|
|
94
|
+
)
|
|
95
|
+
.catch((e)=>{
|
|
96
|
+
console.log( e )
|
|
97
|
+
return publishMessageResponse( listenerclient, messageid, '' )
|
|
98
|
+
})
|
|
99
|
+
.finally( () =>
|
|
100
|
+
{
|
|
101
|
+
listenerclient.xack( channelname, groupname, streammsgid ).then( () => {
|
|
102
|
+
console.log( streammsgid + ' acknowledged')
|
|
103
|
+
})
|
|
104
|
+
listenForMessageForDataRequest( listenerclient, groupname, channelname, consumername, callback );
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
34
111
|
const listenForMessage = ( client:Redis, groupname:string, channelname:string, consumername:string, callback:Function, lastId = "$" ) => {
|
|
35
112
|
console.log( `listening to ${channelname} as ${consumername}`)
|
|
36
113
|
client.xreadgroup('GROUP', groupname, consumername, 'COUNT', 1, 'BLOCK', 0, 'STREAMS', channelname, '>')
|
|
@@ -81,4 +158,4 @@ const listenForMessage = ( client:Redis, groupname:string, channelname:string, c
|
|
|
81
158
|
})
|
|
82
159
|
}
|
|
83
160
|
|
|
84
|
-
export { listenToStream, RedisMessage, sendMessageToStream, publishMessageResponse, getOrRequestKey, subscribeToMessageResponse, requestAndWaitForList }
|
|
161
|
+
export { listenToStream, RedisMessage, sendMessageToStream, publishMessageResponse, getOrRequestKey, dataRequester, subscribeToMessageResponse, requestAndWaitForList }
|
package/package.json
CHANGED
package/utils.ts
CHANGED
|
@@ -4,5 +4,7 @@ const messagePrefix:string = "messageresponse";
|
|
|
4
4
|
const getMessageReponseKey = ( messageid:string ) => messagePrefix + messageid
|
|
5
5
|
const reduceArraysToArray = ( toArray:any[], fromArray:[] ) => toArray.concat( fromArray )
|
|
6
6
|
const redisMessageToArrayOfKeysAndValues = ( message:RedisMessage ):any[] => Object.keys(message).map((key) => [ key, message[key]]);
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
const capitalizeFirstLetter = (string:string) => string.charAt(0).toUpperCase() + string.slice(1)
|
|
8
|
+
const getKeyRequestedChannelName = ( service:string ) => `keyRequestedFrom${capitalizeFirstLetter(service)}Service`
|
|
9
|
+
const getListRequestedChannelName = ( service:string ) => `listRequestedFrom${capitalizeFirstLetter(service)}Service`
|
|
10
|
+
export { getMessageReponseKey, redisMessageToArrayOfKeysAndValues, reduceArraysToArray, getKeyRequestedChannelName, getListRequestedChannelName };
|