@motiadev/adapter-redis-streams 0.11.2-beta.156 → 0.11.2-beta.157-446581
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/redis-stream-adapter-manager.d.ts +6 -3
- package/dist/redis-stream-adapter-manager.d.ts.map +1 -1
- package/dist/redis-stream-adapter-manager.js +40 -32
- package/dist/redis-stream-adapter.d.ts.map +1 -1
- package/dist/redis-stream-adapter.js +13 -2
- package/dist/types.d.ts +5 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { RedisStreamAdapter } from './redis-stream-adapter';
|
|
2
2
|
export { RedisStreamAdapterManager } from './redis-stream-adapter-manager';
|
|
3
|
-
export type { RedisStreamAdapterConfig } from './types';
|
|
3
|
+
export type { RedisStreamAdapterConfig, RedisStreamAdapterOptions } from './types';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,YAAY,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { StreamAdapter, StreamAdapterManager } from '@motiadev/core';
|
|
2
|
-
import type
|
|
2
|
+
import { type RedisClientOptions, type RedisClientType } from 'redis';
|
|
3
|
+
import type { RedisStreamAdapterOptions } from './types';
|
|
3
4
|
export declare class RedisStreamAdapterManager implements StreamAdapterManager {
|
|
4
|
-
private config;
|
|
5
5
|
private client;
|
|
6
6
|
private connected;
|
|
7
|
-
|
|
7
|
+
private isExternalClient;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(redisConnection: RedisClientType | RedisClientOptions, options?: RedisStreamAdapterOptions);
|
|
8
10
|
private connect;
|
|
9
11
|
createStream<TData>(streamName: string): StreamAdapter<TData>;
|
|
12
|
+
getClient(): RedisClientType;
|
|
10
13
|
shutdown(): Promise<void>;
|
|
11
14
|
}
|
|
12
15
|
//# sourceMappingURL=redis-stream-adapter-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-stream-adapter-manager.d.ts","sourceRoot":"","sources":["../src/redis-stream-adapter-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"redis-stream-adapter-manager.d.ts","sourceRoot":"","sources":["../src/redis-stream-adapter-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACzE,OAAO,EAAgB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,OAAO,CAAA;AAEnF,OAAO,KAAK,EAA4B,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAMlF,qBAAa,yBAA0B,YAAW,oBAAoB;IACpE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,MAAM,CAA0B;gBAE5B,eAAe,EAAE,eAAe,GAAG,kBAAkB,EAAE,OAAO,CAAC,EAAE,yBAAyB;YAwCxF,OAAO;IAWrB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;IAI7D,SAAS,IAAI,eAAe;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC"}
|
|
@@ -3,42 +3,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RedisStreamAdapterManager = void 0;
|
|
4
4
|
const redis_1 = require("redis");
|
|
5
5
|
const redis_stream_adapter_1 = require("./redis-stream-adapter");
|
|
6
|
+
function isRedisClient(input) {
|
|
7
|
+
return typeof input === 'object' && 'isOpen' in input && 'connect' in input;
|
|
8
|
+
}
|
|
6
9
|
class RedisStreamAdapterManager {
|
|
7
|
-
constructor(
|
|
8
|
-
this.config = config;
|
|
10
|
+
constructor(redisConnection, options) {
|
|
9
11
|
this.connected = false;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
port: config.port || 6379,
|
|
14
|
-
reconnectStrategy: config.socket?.reconnectStrategy ||
|
|
15
|
-
((retries) => {
|
|
16
|
-
if (retries > 10) {
|
|
17
|
-
return new Error('Redis connection retry limit exceeded');
|
|
18
|
-
}
|
|
19
|
-
return Math.min(retries * 100, 3000);
|
|
20
|
-
}),
|
|
21
|
-
connectTimeout: config.socket?.connectTimeout || 10000,
|
|
22
|
-
},
|
|
23
|
-
password: config.password,
|
|
24
|
-
username: config.username,
|
|
25
|
-
database: config.database || 0,
|
|
12
|
+
this.config = {
|
|
13
|
+
keyPrefix: options?.keyPrefix || 'motia:stream:',
|
|
14
|
+
socketKeepAlive: options?.socketKeepAlive ?? true,
|
|
26
15
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
16
|
+
if (isRedisClient(redisConnection)) {
|
|
17
|
+
this.client = redisConnection;
|
|
18
|
+
this.isExternalClient = true;
|
|
19
|
+
this.connected = this.client.isOpen;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const config = {
|
|
23
|
+
...redisConnection,
|
|
24
|
+
socket: {
|
|
25
|
+
...(redisConnection.socket || {}),
|
|
26
|
+
keepAlive: this.config.socketKeepAlive,
|
|
27
|
+
noDelay: true,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
this.isExternalClient = false;
|
|
31
|
+
this.client = (0, redis_1.createClient)(config);
|
|
32
|
+
this.client.on('error', (err) => {
|
|
33
|
+
console.error('[Redis Stream Manager] Client error:', err);
|
|
34
|
+
});
|
|
35
|
+
this.client.on('connect', () => {
|
|
36
|
+
this.connected = true;
|
|
37
|
+
});
|
|
38
|
+
this.client.on('disconnect', () => {
|
|
39
|
+
console.warn('[Redis Stream Manager] Disconnected');
|
|
40
|
+
this.connected = false;
|
|
41
|
+
});
|
|
42
|
+
this.connect();
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
45
|
async connect() {
|
|
41
|
-
if (!this.connected) {
|
|
46
|
+
if (!this.connected && !this.isExternalClient) {
|
|
42
47
|
try {
|
|
43
48
|
await this.client.connect();
|
|
44
49
|
}
|
|
@@ -51,8 +56,11 @@ class RedisStreamAdapterManager {
|
|
|
51
56
|
createStream(streamName) {
|
|
52
57
|
return new redis_stream_adapter_1.RedisStreamAdapter(streamName, this.config, this.client);
|
|
53
58
|
}
|
|
59
|
+
getClient() {
|
|
60
|
+
return this.client;
|
|
61
|
+
}
|
|
54
62
|
async shutdown() {
|
|
55
|
-
if (this.client.isOpen) {
|
|
63
|
+
if (!this.isExternalClient && this.client.isOpen) {
|
|
56
64
|
await this.client.quit();
|
|
57
65
|
}
|
|
58
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-stream-adapter.d.ts","sourceRoot":"","sources":["../src/redis-stream-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAEvD,qBAAa,kBAAkB,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACjE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,aAAa,CAAiF;gBAE1F,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,YAAY,EAAE,eAAe;IAQ/F,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAMhB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAMvE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-stream-adapter.d.ts","sourceRoot":"","sources":["../src/redis-stream-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAEvD,qBAAa,kBAAkB,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACjE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,aAAa,CAAiF;gBAE1F,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,YAAY,EAAE,eAAe;IAQ/F,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAMhB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAMvE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAoB7E,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAa1E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IAa3D,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpF,SAAS,CAAC,CAAC,EACf,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC;IAqCV,WAAW,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5D,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;IA+B1F,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -26,7 +26,11 @@ class RedisStreamAdapter extends core_1.StreamAdapter {
|
|
|
26
26
|
}
|
|
27
27
|
async set(groupId, id, data) {
|
|
28
28
|
const hashKey = this.makeGroupKey(groupId);
|
|
29
|
-
const item = {
|
|
29
|
+
const item = {
|
|
30
|
+
...data,
|
|
31
|
+
id,
|
|
32
|
+
_createdAt: data._createdAt || Date.now(),
|
|
33
|
+
};
|
|
30
34
|
const itemJson = JSON.stringify(item);
|
|
31
35
|
const existed = await this.client.hExists(hashKey, id);
|
|
32
36
|
const eventType = existed ? 'update' : 'create';
|
|
@@ -48,7 +52,12 @@ class RedisStreamAdapter extends core_1.StreamAdapter {
|
|
|
48
52
|
async getGroup(groupId) {
|
|
49
53
|
const hashKey = this.makeGroupKey(groupId);
|
|
50
54
|
const values = await this.client.hGetAll(hashKey);
|
|
51
|
-
|
|
55
|
+
const items = Object.values(values).map((v) => JSON.parse(v));
|
|
56
|
+
return items.sort((a, b) => {
|
|
57
|
+
const aTime = a._createdAt || 0;
|
|
58
|
+
const bTime = b._createdAt || 0;
|
|
59
|
+
return aTime - bTime;
|
|
60
|
+
});
|
|
52
61
|
}
|
|
53
62
|
async send(channel, event) {
|
|
54
63
|
const channelKey = this.makeChannelKey(channel);
|
|
@@ -62,6 +71,8 @@ class RedisStreamAdapter extends core_1.StreamAdapter {
|
|
|
62
71
|
socket: {
|
|
63
72
|
host: socketConfig?.host || 'localhost',
|
|
64
73
|
port: socketConfig?.port || 6379,
|
|
74
|
+
keepAlive: socketConfig?.keepAlive ?? 5000,
|
|
75
|
+
noDelay: true,
|
|
65
76
|
},
|
|
66
77
|
password: this.client.options?.password,
|
|
67
78
|
username: this.client.options?.username,
|
package/dist/types.d.ts
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
export interface RedisStreamAdapterConfig {
|
|
2
|
-
host?: string;
|
|
3
|
-
port?: number;
|
|
4
|
-
password?: string;
|
|
5
|
-
username?: string;
|
|
6
|
-
database?: number;
|
|
7
2
|
keyPrefix?: string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
socketKeepAlive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface RedisStreamAdapterOptions {
|
|
6
|
+
keyPrefix?: string;
|
|
7
|
+
socketKeepAlive?: boolean;
|
|
12
8
|
}
|
|
13
9
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B"}
|
package/package.json
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"description": "Redis streams adapter for Motia framework, enabling distributed stream management with real-time updates.",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
|
-
"version": "0.11.2-beta.
|
|
6
|
+
"version": "0.11.2-beta.157-446581",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"redis": "^
|
|
9
|
-
"@motiadev/core": "0.11.2-beta.
|
|
8
|
+
"redis": "^5.9.0",
|
|
9
|
+
"@motiadev/core": "0.11.2-beta.157-446581"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@types/node": "^22.10.2",
|