@mono-labs/dev 0.1.251 → 0.1.256

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.
Files changed (35) hide show
  1. package/dist/cache-relay.d.ts +162 -0
  2. package/dist/cache-relay.d.ts.map +1 -0
  3. package/dist/cache-relay.js +302 -0
  4. package/dist/index.d.ts +8 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +12 -3
  7. package/dist/local-server/index.d.ts.map +1 -1
  8. package/dist/local-server/index.js +7 -1
  9. package/dist/local-server/types.d.ts +2 -0
  10. package/dist/local-server/types.d.ts.map +1 -1
  11. package/dist/websocket/channel-store.d.ts +28 -0
  12. package/dist/websocket/channel-store.d.ts.map +1 -0
  13. package/dist/websocket/channel-store.js +91 -0
  14. package/dist/websocket/index.d.ts +9 -2
  15. package/dist/websocket/index.d.ts.map +1 -1
  16. package/dist/websocket/index.js +31 -5
  17. package/dist/websocket/socket-emitter.d.ts +25 -0
  18. package/dist/websocket/socket-emitter.d.ts.map +1 -0
  19. package/dist/websocket/socket-emitter.js +49 -0
  20. package/dist/websocket/socket-gateway-client.d.ts +20 -0
  21. package/dist/websocket/socket-gateway-client.d.ts.map +1 -0
  22. package/dist/websocket/socket-gateway-client.js +76 -0
  23. package/dist/websocket/types.d.ts +9 -0
  24. package/dist/websocket/types.d.ts.map +1 -1
  25. package/package.json +13 -1
  26. package/src/cache-relay.ts +490 -0
  27. package/src/index.ts +25 -1
  28. package/src/local-server/index.ts +7 -1
  29. package/src/local-server/types.ts +2 -0
  30. package/src/websocket/channel-store.ts +116 -0
  31. package/src/websocket/index.ts +30 -4
  32. package/src/websocket/socket-emitter.ts +64 -0
  33. package/src/websocket/socket-gateway-client.ts +83 -0
  34. package/src/websocket/types.ts +10 -0
  35. package/src/websocket/local-gateway-client.ts +0 -31
@@ -0,0 +1,162 @@
1
+ type RedisClient = any;
2
+ export interface StringOps {
3
+ get(key: string): Promise<string | null>;
4
+ set(key: string, value: string, ttlSeconds?: number): Promise<void>;
5
+ mget(...keys: string[]): Promise<(string | null)[]>;
6
+ mset(pairs: Record<string, string>): Promise<void>;
7
+ incr(key: string): Promise<number>;
8
+ incrby(key: string, increment: number): Promise<number>;
9
+ decr(key: string): Promise<number>;
10
+ decrby(key: string, decrement: number): Promise<number>;
11
+ append(key: string, value: string): Promise<number>;
12
+ strlen(key: string): Promise<number>;
13
+ }
14
+ export interface HashOps {
15
+ get(key: string, field: string): Promise<string | null>;
16
+ set(key: string, field: string, value: string): Promise<void>;
17
+ getAll(key: string): Promise<Record<string, string>>;
18
+ del(key: string, ...fields: string[]): Promise<number>;
19
+ exists(key: string, field: string): Promise<boolean>;
20
+ keys(key: string): Promise<string[]>;
21
+ vals(key: string): Promise<string[]>;
22
+ len(key: string): Promise<number>;
23
+ mset(key: string, pairs: Record<string, string>): Promise<void>;
24
+ mget(key: string, ...fields: string[]): Promise<(string | null)[]>;
25
+ incrby(key: string, field: string, increment: number): Promise<number>;
26
+ }
27
+ export interface ListOps {
28
+ push(key: string, ...values: string[]): Promise<number>;
29
+ lpush(key: string, ...values: string[]): Promise<number>;
30
+ pop(key: string): Promise<string | null>;
31
+ lpop(key: string): Promise<string | null>;
32
+ range(key: string, start: number, stop: number): Promise<string[]>;
33
+ len(key: string): Promise<number>;
34
+ trim(key: string, start: number, stop: number): Promise<void>;
35
+ index(key: string, index: number): Promise<string | null>;
36
+ set(key: string, index: number, value: string): Promise<void>;
37
+ rem(key: string, count: number, value: string): Promise<number>;
38
+ }
39
+ export interface SetOps {
40
+ add(key: string, ...members: string[]): Promise<number>;
41
+ rem(key: string, ...members: string[]): Promise<number>;
42
+ members(key: string): Promise<string[]>;
43
+ isMember(key: string, member: string): Promise<boolean>;
44
+ card(key: string): Promise<number>;
45
+ union(...keys: string[]): Promise<string[]>;
46
+ inter(...keys: string[]): Promise<string[]>;
47
+ diff(...keys: string[]): Promise<string[]>;
48
+ }
49
+ export interface SortedSetOps {
50
+ add(key: string, score: number, member: string): Promise<number>;
51
+ rem(key: string, ...members: string[]): Promise<number>;
52
+ range(key: string, start: number, stop: number): Promise<string[]>;
53
+ rangeWithScores(key: string, start: number, stop: number): Promise<{
54
+ member: string;
55
+ score: number;
56
+ }[]>;
57
+ rangeByScore(key: string, min: number | string, max: number | string): Promise<string[]>;
58
+ revRange(key: string, start: number, stop: number): Promise<string[]>;
59
+ score(key: string, member: string): Promise<number | null>;
60
+ rank(key: string, member: string): Promise<number | null>;
61
+ card(key: string): Promise<number>;
62
+ incrby(key: string, increment: number, member: string): Promise<number>;
63
+ remRangeByRank(key: string, start: number, stop: number): Promise<number>;
64
+ remRangeByScore(key: string, min: number | string, max: number | string): Promise<number>;
65
+ }
66
+ export interface KeyOps {
67
+ exists(...keys: string[]): Promise<number>;
68
+ expire(key: string, seconds: number): Promise<boolean>;
69
+ ttl(key: string): Promise<number>;
70
+ pttl(key: string): Promise<number>;
71
+ persist(key: string): Promise<boolean>;
72
+ rename(key: string, newKey: string): Promise<void>;
73
+ type(key: string): Promise<string>;
74
+ scan(cursor: number, options?: {
75
+ match?: string;
76
+ count?: number;
77
+ }): Promise<{
78
+ cursor: number;
79
+ keys: string[];
80
+ }>;
81
+ }
82
+ export interface PubSubOps {
83
+ publish(channel: string, message: string): Promise<number>;
84
+ subscribe(channel: string, callback: (message: string, channel: string) => void): Promise<void>;
85
+ unsubscribe(channel: string): Promise<void>;
86
+ }
87
+ export interface TransactionOps {
88
+ multi(): RedisClient;
89
+ exec(pipeline: RedisClient): Promise<unknown[]>;
90
+ }
91
+ export interface ScriptOps {
92
+ eval(script: string, keys: string[], args: string[]): Promise<unknown>;
93
+ evalsha(sha: string, keys: string[], args: string[]): Promise<unknown>;
94
+ }
95
+ export interface GeoOps {
96
+ add(key: string, longitude: number, latitude: number, member: string): Promise<number>;
97
+ pos(key: string, ...members: string[]): Promise<([number, number] | null)[]>;
98
+ dist(key: string, member1: string, member2: string, unit?: string): Promise<string | null>;
99
+ radius(key: string, longitude: number, latitude: number, radius: number, unit: string): Promise<string[]>;
100
+ }
101
+ export interface HyperLogLogOps {
102
+ add(key: string, ...elements: string[]): Promise<number>;
103
+ count(...keys: string[]): Promise<number>;
104
+ merge(destKey: string, ...sourceKeys: string[]): Promise<void>;
105
+ }
106
+ export interface BitmapOps {
107
+ setbit(key: string, offset: number, value: 0 | 1): Promise<number>;
108
+ getbit(key: string, offset: number): Promise<number>;
109
+ count(key: string, start?: number, end?: number): Promise<number>;
110
+ op(operation: 'AND' | 'OR' | 'XOR' | 'NOT', destKey: string, ...keys: string[]): Promise<number>;
111
+ }
112
+ export interface StreamOps {
113
+ add(key: string, id: string, fields: Record<string, string>): Promise<string>;
114
+ read(key: string, id: string, count?: number): Promise<unknown[]>;
115
+ len(key: string): Promise<number>;
116
+ range(key: string, start: string, end: string, count?: number): Promise<unknown[]>;
117
+ trim(key: string, maxLen: number): Promise<number>;
118
+ }
119
+ export interface CacheRelay {
120
+ /** Get a raw string value */
121
+ get(key: string): Promise<string | null>;
122
+ /** Get and JSON-parse a value */
123
+ gett<T = unknown>(key: string): Promise<T | null>;
124
+ /** Set a value (objects are JSON-stringified) */
125
+ set(key: string, value: unknown, options?: {
126
+ ttlSeconds?: number;
127
+ }): Promise<void>;
128
+ /** Delete one or more keys */
129
+ del(...keys: string[]): Promise<number>;
130
+ /** Raw ioredis client for advanced usage */
131
+ raw: RedisClient;
132
+ strings: StringOps;
133
+ hashes: HashOps;
134
+ lists: ListOps;
135
+ sets: SetOps;
136
+ sortedSets: SortedSetOps;
137
+ keys: KeyOps;
138
+ pubsub: PubSubOps;
139
+ transactions: TransactionOps;
140
+ scripts: ScriptOps;
141
+ geo: GeoOps;
142
+ hyperloglog: HyperLogLogOps;
143
+ bitmaps: BitmapOps;
144
+ streams: StreamOps;
145
+ }
146
+ /**
147
+ * Initialize (or reinitialize) the CacheRelay singleton.
148
+ *
149
+ * @param connectionString — `host:port` (default `localhost:6379`)
150
+ * @returns the CacheRelay instance
151
+ *
152
+ * Only creates a new Redis connection when the connection string changes.
153
+ * Requires `ioredis` as a peer dependency — throws a clear error if missing.
154
+ */
155
+ export declare function initCacheRelay(connectionString?: string): CacheRelay;
156
+ /**
157
+ * Get the current CacheRelay singleton.
158
+ * Lazily initializes with default settings (`localhost:6379`) if not yet created.
159
+ */
160
+ export declare function getCacheRelay(): CacheRelay;
161
+ export {};
162
+ //# sourceMappingURL=cache-relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-relay.d.ts","sourceRoot":"","sources":["../src/cache-relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // CacheRelay — full Redis abstraction over ioredis
4
+ // ---------------------------------------------------------------------------
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.initCacheRelay = initCacheRelay;
7
+ exports.getCacheRelay = getCacheRelay;
8
+ // ---- Singleton state -------------------------------------------------------
9
+ let _cacheRelay;
10
+ let _currentConnectionString;
11
+ // ---- Builder ---------------------------------------------------------------
12
+ function buildCacheRelay(redis) {
13
+ const relay = {
14
+ raw: redis,
15
+ // -- Top-level convenience ------------------------------------------------
16
+ async get(key) {
17
+ return redis.get(key);
18
+ },
19
+ async gett(key) {
20
+ const raw = await redis.get(key);
21
+ if (raw === null || raw === undefined)
22
+ return null;
23
+ try {
24
+ return JSON.parse(raw);
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ },
30
+ async set(key, value, options) {
31
+ const serialized = typeof value === 'string' ? value : JSON.stringify(value);
32
+ if (options?.ttlSeconds) {
33
+ await redis.set(key, serialized, 'EX', options.ttlSeconds);
34
+ }
35
+ else {
36
+ await redis.set(key, serialized);
37
+ }
38
+ },
39
+ async del(...keys) {
40
+ if (keys.length === 0)
41
+ return 0;
42
+ return redis.del(...keys);
43
+ },
44
+ // -- Strings --------------------------------------------------------------
45
+ strings: {
46
+ get: (key) => redis.get(key),
47
+ async set(key, value, ttlSeconds) {
48
+ if (ttlSeconds) {
49
+ await redis.set(key, value, 'EX', ttlSeconds);
50
+ }
51
+ else {
52
+ await redis.set(key, value);
53
+ }
54
+ },
55
+ mget: (...keys) => redis.mget(...keys),
56
+ async mset(pairs) {
57
+ const args = [];
58
+ for (const [k, v] of Object.entries(pairs)) {
59
+ args.push(k, v);
60
+ }
61
+ await redis.mset(...args);
62
+ },
63
+ incr: (key) => redis.incr(key),
64
+ incrby: (key, inc) => redis.incrby(key, inc),
65
+ decr: (key) => redis.decr(key),
66
+ decrby: (key, dec) => redis.decrby(key, dec),
67
+ append: (key, value) => redis.append(key, value),
68
+ strlen: (key) => redis.strlen(key),
69
+ },
70
+ // -- Hashes ---------------------------------------------------------------
71
+ hashes: {
72
+ get: (key, field) => redis.hget(key, field),
73
+ async set(key, field, value) {
74
+ await redis.hset(key, field, value);
75
+ },
76
+ async getAll(key) {
77
+ return redis.hgetall(key);
78
+ },
79
+ del: (key, ...fields) => redis.hdel(key, ...fields),
80
+ async exists(key, field) {
81
+ return (await redis.hexists(key, field)) === 1;
82
+ },
83
+ keys: (key) => redis.hkeys(key),
84
+ vals: (key) => redis.hvals(key),
85
+ len: (key) => redis.hlen(key),
86
+ async mset(key, pairs) {
87
+ const args = [];
88
+ for (const [f, v] of Object.entries(pairs)) {
89
+ args.push(f, v);
90
+ }
91
+ await redis.hmset(key, ...args);
92
+ },
93
+ mget: (key, ...fields) => redis.hmget(key, ...fields),
94
+ incrby: (key, field, inc) => redis.hincrby(key, field, inc),
95
+ },
96
+ // -- Lists ----------------------------------------------------------------
97
+ lists: {
98
+ push: (key, ...values) => redis.rpush(key, ...values),
99
+ lpush: (key, ...values) => redis.lpush(key, ...values),
100
+ pop: (key) => redis.rpop(key),
101
+ lpop: (key) => redis.lpop(key),
102
+ range: (key, start, stop) => redis.lrange(key, start, stop),
103
+ len: (key) => redis.llen(key),
104
+ async trim(key, start, stop) {
105
+ await redis.ltrim(key, start, stop);
106
+ },
107
+ index: (key, idx) => redis.lindex(key, idx),
108
+ async set(key, idx, value) {
109
+ await redis.lset(key, idx, value);
110
+ },
111
+ rem: (key, count, value) => redis.lrem(key, count, value),
112
+ },
113
+ // -- Sets -----------------------------------------------------------------
114
+ sets: {
115
+ add: (key, ...members) => redis.sadd(key, ...members),
116
+ rem: (key, ...members) => redis.srem(key, ...members),
117
+ members: (key) => redis.smembers(key),
118
+ async isMember(key, member) {
119
+ return (await redis.sismember(key, member)) === 1;
120
+ },
121
+ card: (key) => redis.scard(key),
122
+ union: (...keys) => redis.sunion(...keys),
123
+ inter: (...keys) => redis.sinter(...keys),
124
+ diff: (...keys) => redis.sdiff(...keys),
125
+ },
126
+ // -- Sorted Sets ----------------------------------------------------------
127
+ sortedSets: {
128
+ add: (key, score, member) => redis.zadd(key, score, member),
129
+ rem: (key, ...members) => redis.zrem(key, ...members),
130
+ range: (key, start, stop) => redis.zrange(key, start, stop),
131
+ async rangeWithScores(key, start, stop) {
132
+ const raw = await redis.zrange(key, start, stop, 'WITHSCORES');
133
+ const result = [];
134
+ for (let i = 0; i < raw.length; i += 2) {
135
+ result.push({ member: raw[i], score: parseFloat(raw[i + 1]) });
136
+ }
137
+ return result;
138
+ },
139
+ rangeByScore: (key, min, max) => redis.zrangebyscore(key, min, max),
140
+ revRange: (key, start, stop) => redis.zrevrange(key, start, stop),
141
+ async score(key, member) {
142
+ const s = await redis.zscore(key, member);
143
+ return s === null ? null : parseFloat(s);
144
+ },
145
+ rank: (key, member) => redis.zrank(key, member),
146
+ card: (key) => redis.zcard(key),
147
+ incrby: (key, inc, member) => redis.zincrby(key, inc, member),
148
+ remRangeByRank: (key, start, stop) => redis.zremrangebyrank(key, start, stop),
149
+ remRangeByScore: (key, min, max) => redis.zremrangebyscore(key, min, max),
150
+ },
151
+ // -- Keys -----------------------------------------------------------------
152
+ keys: {
153
+ exists: (...keys) => redis.exists(...keys),
154
+ async expire(key, seconds) {
155
+ return (await redis.expire(key, seconds)) === 1;
156
+ },
157
+ ttl: (key) => redis.ttl(key),
158
+ pttl: (key) => redis.pttl(key),
159
+ async persist(key) {
160
+ return (await redis.persist(key)) === 1;
161
+ },
162
+ async rename(key, newKey) {
163
+ await redis.rename(key, newKey);
164
+ },
165
+ type: (key) => redis.type(key),
166
+ async scan(cursor, options) {
167
+ const args = [cursor];
168
+ if (options?.match)
169
+ args.push('MATCH', options.match);
170
+ if (options?.count)
171
+ args.push('COUNT', options.count);
172
+ const [nextCursor, keys] = await redis.scan(...args);
173
+ return { cursor: parseInt(nextCursor, 10), keys };
174
+ },
175
+ },
176
+ // -- Pub/Sub --------------------------------------------------------------
177
+ pubsub: {
178
+ publish: (channel, message) => redis.publish(channel, message),
179
+ async subscribe(channel, callback) {
180
+ const sub = redis.duplicate();
181
+ await sub.subscribe(channel);
182
+ sub.on('message', (ch, msg) => {
183
+ if (ch === channel)
184
+ callback(msg, ch);
185
+ });
186
+ },
187
+ async unsubscribe(channel) {
188
+ await redis.unsubscribe(channel);
189
+ },
190
+ },
191
+ // -- Transactions ---------------------------------------------------------
192
+ transactions: {
193
+ multi() {
194
+ return redis.multi();
195
+ },
196
+ async exec(pipeline) {
197
+ return pipeline.exec();
198
+ },
199
+ },
200
+ // -- Scripts --------------------------------------------------------------
201
+ scripts: {
202
+ eval: (script, keys, args) => redis.eval(script, keys.length, ...keys, ...args),
203
+ evalsha: (sha, keys, args) => redis.evalsha(sha, keys.length, ...keys, ...args),
204
+ },
205
+ // -- Geo ------------------------------------------------------------------
206
+ geo: {
207
+ add: (key, lon, lat, member) => redis.geoadd(key, lon, lat, member),
208
+ pos: (key, ...members) => redis.geopos(key, ...members),
209
+ dist: (key, m1, m2, unit) => {
210
+ if (unit)
211
+ return redis.geodist(key, m1, m2, unit);
212
+ return redis.geodist(key, m1, m2);
213
+ },
214
+ radius: (key, lon, lat, r, unit) => redis.georadius(key, lon, lat, r, unit),
215
+ },
216
+ // -- HyperLogLog ----------------------------------------------------------
217
+ hyperloglog: {
218
+ add: (key, ...elements) => redis.pfadd(key, ...elements),
219
+ count: (...keys) => redis.pfcount(...keys),
220
+ async merge(destKey, ...sourceKeys) {
221
+ await redis.pfmerge(destKey, ...sourceKeys);
222
+ },
223
+ },
224
+ // -- Bitmaps --------------------------------------------------------------
225
+ bitmaps: {
226
+ setbit: (key, offset, value) => redis.setbit(key, offset, value),
227
+ getbit: (key, offset) => redis.getbit(key, offset),
228
+ count(key, start, end) {
229
+ if (start !== undefined && end !== undefined) {
230
+ return redis.bitcount(key, start, end);
231
+ }
232
+ return redis.bitcount(key);
233
+ },
234
+ op: (operation, destKey, ...keys) => redis.bitop(operation, destKey, ...keys),
235
+ },
236
+ // -- Streams --------------------------------------------------------------
237
+ streams: {
238
+ add(key, id, fields) {
239
+ const args = [];
240
+ for (const [f, v] of Object.entries(fields)) {
241
+ args.push(f, v);
242
+ }
243
+ return redis.xadd(key, id, ...args);
244
+ },
245
+ read(key, id, count) {
246
+ if (count)
247
+ return redis.xread('COUNT', count, 'STREAMS', key, id);
248
+ return redis.xread('STREAMS', key, id);
249
+ },
250
+ len: (key) => redis.xlen(key),
251
+ range(key, start, end, count) {
252
+ if (count)
253
+ return redis.xrange(key, start, end, 'COUNT', count);
254
+ return redis.xrange(key, start, end);
255
+ },
256
+ trim: (key, maxLen) => redis.xtrim(key, 'MAXLEN', maxLen),
257
+ },
258
+ };
259
+ return relay;
260
+ }
261
+ // ---- Public API ------------------------------------------------------------
262
+ /**
263
+ * Initialize (or reinitialize) the CacheRelay singleton.
264
+ *
265
+ * @param connectionString — `host:port` (default `localhost:6379`)
266
+ * @returns the CacheRelay instance
267
+ *
268
+ * Only creates a new Redis connection when the connection string changes.
269
+ * Requires `ioredis` as a peer dependency — throws a clear error if missing.
270
+ */
271
+ function initCacheRelay(connectionString) {
272
+ const raw = connectionString ?? 'localhost:6379';
273
+ // Normalize: bare hostname (no port) → hostname:6379
274
+ const connStr = raw.includes(':') ? raw : `${raw}:6379`;
275
+ // Reuse existing instance when the connection string hasn't changed
276
+ if (_cacheRelay && _currentConnectionString === connStr)
277
+ return _cacheRelay;
278
+ // Dynamic require — gives a clear error when ioredis isn't installed
279
+ let Redis;
280
+ try {
281
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
282
+ Redis = require('ioredis');
283
+ }
284
+ catch {
285
+ throw new Error('CacheRelay requires "ioredis" as a peer dependency. Install it with: npm install ioredis');
286
+ }
287
+ const [host, portStr] = connStr.split(':');
288
+ const port = parseInt(portStr ?? '6379', 10);
289
+ const redis = new Redis(port, host || 'localhost');
290
+ _cacheRelay = buildCacheRelay(redis);
291
+ _currentConnectionString = connStr;
292
+ return _cacheRelay;
293
+ }
294
+ /**
295
+ * Get the current CacheRelay singleton.
296
+ * Lazily initializes with default settings (`localhost:6379`) if not yet created.
297
+ */
298
+ function getCacheRelay() {
299
+ if (!_cacheRelay)
300
+ return initCacheRelay();
301
+ return _cacheRelay;
302
+ }
package/dist/index.d.ts CHANGED
@@ -3,6 +3,12 @@ export type { ApiGatewayHandler, ALBHandler, LocalServerConfig } from './local-s
3
3
  export { attachSocketAdapter } from './websocket';
4
4
  export { ConnectionRegistry } from './websocket/connection-registry';
5
5
  export { ActionRouter } from './websocket/action-router';
6
- export { LocalGatewayClient } from './websocket/local-gateway-client';
7
- export type { ConnectionId, PostToConnectionFn, SocketAdapterConfig, ConnectHandlerFn, DisconnectHandlerFn, ActionHandler, ActionHandlerContext, ActionHandlerResult, LocalRequestContext, WebSocketUserContext, } from './websocket/types';
6
+ export { SocketGatewayClient } from './websocket/socket-gateway-client';
7
+ export { InMemoryChannelStore, RedisChannelStore } from './websocket/channel-store';
8
+ export { SocketEmitter } from './websocket/socket-emitter';
9
+ export type { ConnectionId, PostToConnectionFn, SocketAdapterConfig, RedisConfig, ConnectHandlerFn, DisconnectHandlerFn, ActionHandler, ActionHandlerContext, ActionHandlerResult, LocalRequestContext, WebSocketUserContext, } from './websocket/types';
10
+ export type { ChannelStore } from './websocket/channel-store';
11
+ export type { EmitTarget } from './websocket/socket-emitter';
12
+ export { initCacheRelay, getCacheRelay } from './cache-relay';
13
+ export type { CacheRelay, StringOps, HashOps, ListOps, SetOps, SortedSetOps, KeyOps, PubSubOps, TransactionOps, ScriptOps, GeoOps, HyperLogLogOps, BitmapOps, StreamOps, } from './cache-relay';
8
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAG5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAG5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,YAAY,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7D,YAAY,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,OAAO,EACP,MAAM,EACN,YAAY,EACZ,MAAM,EACN,SAAS,EACT,cAAc,EACd,SAAS,EACT,MAAM,EACN,cAAc,EACd,SAAS,EACT,SAAS,GACT,MAAM,eAAe,CAAA"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LocalGatewayClient = exports.ActionRouter = exports.ConnectionRegistry = exports.attachSocketAdapter = exports.LocalServer = void 0;
3
+ exports.getCacheRelay = exports.initCacheRelay = exports.SocketEmitter = exports.RedisChannelStore = exports.InMemoryChannelStore = exports.SocketGatewayClient = exports.ActionRouter = exports.ConnectionRegistry = exports.attachSocketAdapter = exports.LocalServer = void 0;
4
4
  // Core
5
5
  var local_server_1 = require("./local-server");
6
6
  Object.defineProperty(exports, "LocalServer", { enumerable: true, get: function () { return local_server_1.LocalServer; } });
@@ -11,5 +11,14 @@ var connection_registry_1 = require("./websocket/connection-registry");
11
11
  Object.defineProperty(exports, "ConnectionRegistry", { enumerable: true, get: function () { return connection_registry_1.ConnectionRegistry; } });
12
12
  var action_router_1 = require("./websocket/action-router");
13
13
  Object.defineProperty(exports, "ActionRouter", { enumerable: true, get: function () { return action_router_1.ActionRouter; } });
14
- var local_gateway_client_1 = require("./websocket/local-gateway-client");
15
- Object.defineProperty(exports, "LocalGatewayClient", { enumerable: true, get: function () { return local_gateway_client_1.LocalGatewayClient; } });
14
+ var socket_gateway_client_1 = require("./websocket/socket-gateway-client");
15
+ Object.defineProperty(exports, "SocketGatewayClient", { enumerable: true, get: function () { return socket_gateway_client_1.SocketGatewayClient; } });
16
+ var channel_store_1 = require("./websocket/channel-store");
17
+ Object.defineProperty(exports, "InMemoryChannelStore", { enumerable: true, get: function () { return channel_store_1.InMemoryChannelStore; } });
18
+ Object.defineProperty(exports, "RedisChannelStore", { enumerable: true, get: function () { return channel_store_1.RedisChannelStore; } });
19
+ var socket_emitter_1 = require("./websocket/socket-emitter");
20
+ Object.defineProperty(exports, "SocketEmitter", { enumerable: true, get: function () { return socket_emitter_1.SocketEmitter; } });
21
+ // CacheRelay
22
+ var cache_relay_1 = require("./cache-relay");
23
+ Object.defineProperty(exports, "initCacheRelay", { enumerable: true, get: function () { return cache_relay_1.initCacheRelay; } });
24
+ Object.defineProperty(exports, "getCacheRelay", { enumerable: true, get: function () { return cache_relay_1.getCacheRelay; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/local-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAA;AAO7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EACX,iBAAiB,EACjB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/E,qBAAa,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,iBAAiB;IAgBtC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IACxF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAgC1E,YAAY,CACX,SAAS,EAAE,OAAO,mBAAmB,EACrC,MAAM,CAAC,EAAE,mBAAmB,GAC1B,UAAU,CAAC,OAAO,mBAAmB,CAAC;IAKzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAS7C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/local-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAA;AAO7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EACX,iBAAiB,EACjB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,SAAS,CAAA;AAEhB,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE/E,qBAAa,WAAW;IACvB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,iBAAiB;IAgBtC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IACtD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IACxF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAgC1E,YAAY,CACX,SAAS,EAAE,OAAO,mBAAmB,EACrC,MAAM,CAAC,EAAE,mBAAmB,GAC1B,UAAU,CAAC,OAAO,mBAAmB,CAAC;IAWzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAS7C"}
@@ -51,7 +51,13 @@ class LocalServer {
51
51
  }
52
52
  attachSocket(adapterFn, config) {
53
53
  const wss = new ws_1.WebSocketServer({ server: this.httpServer });
54
- return adapterFn(wss, config);
54
+ const mergedConfig = {
55
+ ...config,
56
+ useRedis: config?.useRedis ?? this.config.useRedis,
57
+ redis: config?.redis ?? this.config.redis,
58
+ debug: config?.debug ?? this.config.debug,
59
+ };
60
+ return adapterFn(wss, mergedConfig);
55
61
  }
56
62
  listen(port, hostname) {
57
63
  const host = hostname ?? '0.0.0.0';
@@ -10,5 +10,7 @@ export interface LambdaOptionsALB {
10
10
  }
11
11
  export interface LocalServerConfig {
12
12
  debug?: boolean;
13
+ useRedis?: boolean;
14
+ redis?: import('../websocket/types').RedisConfig;
13
15
  }
14
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local-server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EACX,sBAAsB,EACtB,iCAAiC,EACjC,QAAQ,EACR,SAAS,EACT,MAAM,YAAY,CAAA;AAInB,MAAM,MAAM,iBAAiB,GAAG,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,OAAO,KACZ,OAAO,CAAC,iCAAiC,CAAC,CAAA;AAE/C,MAAM,MAAM,UAAU,GAAG,CACxB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,OAAO,KACZ,OAAO,CAAC,SAAS,CAAC,CAAA;AAIvB,MAAM,WAAW,uBAAuB;IACvC,SAAS,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,KAAK,CAAA;CAChB;AAID,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/local-server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EACX,sBAAsB,EACtB,iCAAiC,EACjC,QAAQ,EACR,SAAS,EACT,MAAM,YAAY,CAAA;AAInB,MAAM,MAAM,iBAAiB,GAAG,CAC/B,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,OAAO,KACZ,OAAO,CAAC,iCAAiC,CAAC,CAAA;AAE/C,MAAM,MAAM,UAAU,GAAG,CACxB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,OAAO,KACZ,OAAO,CAAC,SAAS,CAAC,CAAA;AAIvB,MAAM,WAAW,uBAAuB;IACvC,SAAS,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,KAAK,CAAA;CAChB;AAID,MAAM,WAAW,iBAAiB;IACjC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,CAAA;CAChD"}
@@ -0,0 +1,28 @@
1
+ import type { ConnectionId } from './types';
2
+ export interface ChannelStore {
3
+ subscribe(connectionId: ConnectionId, channel: string): Promise<void>;
4
+ unsubscribe(connectionId: ConnectionId, channel: string): Promise<void>;
5
+ getSubscribers(channel: string): Promise<ConnectionId[]>;
6
+ removeAll(connectionId: ConnectionId): Promise<void>;
7
+ }
8
+ export declare class InMemoryChannelStore implements ChannelStore {
9
+ private channelToConnections;
10
+ private connectionToChannels;
11
+ subscribe(connectionId: ConnectionId, channel: string): Promise<void>;
12
+ unsubscribe(connectionId: ConnectionId, channel: string): Promise<void>;
13
+ getSubscribers(channel: string): Promise<ConnectionId[]>;
14
+ removeAll(connectionId: ConnectionId): Promise<void>;
15
+ }
16
+ export declare class RedisChannelStore implements ChannelStore {
17
+ private channelKeyPrefix;
18
+ private connChannelsPrefix;
19
+ constructor(options?: {
20
+ keyPrefix?: string;
21
+ });
22
+ private getRelay;
23
+ subscribe(connectionId: ConnectionId, channel: string): Promise<void>;
24
+ unsubscribe(connectionId: ConnectionId, channel: string): Promise<void>;
25
+ getSubscribers(channel: string): Promise<ConnectionId[]>;
26
+ removeAll(connectionId: ConnectionId): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=channel-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-store.d.ts","sourceRoot":"","sources":["../../src/websocket/channel-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,MAAM,WAAW,YAAY;IAC5B,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACxD,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD;AAID,qBAAa,oBAAqB,YAAW,YAAY;IACxD,OAAO,CAAC,oBAAoB,CAAuC;IACnE,OAAO,CAAC,oBAAoB,CAAuC;IAE7D,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrE,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKxD,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAc1D;AAID,qBAAa,iBAAkB,YAAW,YAAY;IACrD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,kBAAkB,CAAQ;gBAEtB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAM5C,OAAO,CAAC,QAAQ;IAMV,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrE,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKxD,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAY1D"}