@hotmeshio/hotmesh 0.5.6 → 0.5.7

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 (80) hide show
  1. package/README.md +6 -32
  2. package/build/index.d.ts +1 -3
  3. package/build/index.js +1 -5
  4. package/build/modules/enums.d.ts +0 -5
  5. package/build/modules/enums.js +1 -6
  6. package/build/modules/utils.d.ts +1 -1
  7. package/build/modules/utils.js +2 -29
  8. package/build/package.json +4 -16
  9. package/build/services/activities/hook.js +1 -5
  10. package/build/services/compiler/index.d.ts +2 -2
  11. package/build/services/compiler/index.js +4 -4
  12. package/build/services/connector/factory.d.ts +1 -1
  13. package/build/services/connector/factory.js +1 -11
  14. package/build/services/exporter/index.d.ts +8 -8
  15. package/build/services/exporter/index.js +8 -8
  16. package/build/services/memflow/client.js +1 -8
  17. package/build/services/memflow/connection.d.ts +0 -2
  18. package/build/services/memflow/connection.js +0 -2
  19. package/build/services/memflow/exporter.d.ts +3 -3
  20. package/build/services/memflow/exporter.js +3 -3
  21. package/build/services/memflow/index.d.ts +1 -1
  22. package/build/services/memflow/index.js +1 -1
  23. package/build/services/memflow/schemas/factory.js +1 -1
  24. package/build/services/memflow/search.d.ts +11 -4
  25. package/build/services/memflow/search.js +98 -71
  26. package/build/services/memflow/worker.d.ts +1 -1
  27. package/build/services/memflow/worker.js +1 -1
  28. package/build/services/meshcall/index.d.ts +1 -1
  29. package/build/services/meshcall/index.js +1 -1
  30. package/build/services/reporter/index.d.ts +1 -1
  31. package/build/services/reporter/index.js +12 -12
  32. package/build/services/search/factory.js +0 -8
  33. package/build/services/search/providers/postgres/postgres.js +1 -1
  34. package/build/services/store/cache.d.ts +1 -1
  35. package/build/services/store/cache.js +1 -1
  36. package/build/services/store/factory.js +1 -9
  37. package/build/services/store/index.d.ts +1 -1
  38. package/build/services/store/providers/postgres/kvtypes/hash/index.js +57 -0
  39. package/build/services/store/providers/postgres/kvtypes/hash/udata.d.ts +10 -0
  40. package/build/services/store/providers/postgres/kvtypes/hash/udata.js +384 -0
  41. package/build/services/store/providers/postgres/postgres.js +2 -6
  42. package/build/services/stream/factory.js +0 -16
  43. package/build/services/sub/factory.js +0 -8
  44. package/build/services/sub/providers/nats/nats.js +0 -1
  45. package/build/services/task/index.js +0 -1
  46. package/build/types/activity.d.ts +1 -5
  47. package/build/types/hotmesh.d.ts +0 -5
  48. package/build/types/index.d.ts +0 -1
  49. package/build/types/index.js +1 -4
  50. package/build/types/job.d.ts +1 -1
  51. package/build/types/memflow.d.ts +5 -4
  52. package/build/types/meshcall.d.ts +0 -25
  53. package/build/types/provider.d.ts +1 -1
  54. package/build/types/stream.d.ts +1 -6
  55. package/index.ts +0 -4
  56. package/package.json +4 -16
  57. package/build/services/connector/providers/ioredis.d.ts +0 -9
  58. package/build/services/connector/providers/ioredis.js +0 -26
  59. package/build/services/connector/providers/redis.d.ts +0 -9
  60. package/build/services/connector/providers/redis.js +0 -38
  61. package/build/services/search/providers/redis/ioredis.d.ts +0 -23
  62. package/build/services/search/providers/redis/ioredis.js +0 -134
  63. package/build/services/search/providers/redis/redis.d.ts +0 -23
  64. package/build/services/search/providers/redis/redis.js +0 -147
  65. package/build/services/store/providers/redis/_base.d.ts +0 -137
  66. package/build/services/store/providers/redis/_base.js +0 -980
  67. package/build/services/store/providers/redis/ioredis.d.ts +0 -20
  68. package/build/services/store/providers/redis/ioredis.js +0 -180
  69. package/build/services/store/providers/redis/redis.d.ts +0 -18
  70. package/build/services/store/providers/redis/redis.js +0 -199
  71. package/build/services/stream/providers/redis/ioredis.d.ts +0 -61
  72. package/build/services/stream/providers/redis/ioredis.js +0 -272
  73. package/build/services/stream/providers/redis/redis.d.ts +0 -61
  74. package/build/services/stream/providers/redis/redis.js +0 -305
  75. package/build/services/sub/providers/redis/ioredis.d.ts +0 -17
  76. package/build/services/sub/providers/redis/ioredis.js +0 -81
  77. package/build/services/sub/providers/redis/redis.d.ts +0 -17
  78. package/build/services/sub/providers/redis/redis.js +0 -72
  79. package/build/types/redis.d.ts +0 -258
  80. package/build/types/redis.js +0 -11
@@ -134,7 +134,7 @@ export type RouterConfig = {
134
134
  /** if true, will not process stream messages; default true */
135
135
  readonly?: boolean;
136
136
  };
137
- export type StreamProviderType = 'redis' | 'ioredis' | 'postgres' | 'nats' | 'sqs';
137
+ export type StreamProviderType = 'postgres' | 'nats' | 'sqs';
138
138
  export interface StreamConfig {
139
139
  provider?: StreamProviderType;
140
140
  namespace?: string;
@@ -142,11 +142,6 @@ export interface StreamConfig {
142
142
  maxRetries?: number;
143
143
  batchSize?: number;
144
144
  timeout?: number;
145
- redis?: {
146
- claimTimeout?: number;
147
- blockingTimeout?: number;
148
- minIdleTime?: number;
149
- };
150
145
  postgres?: {
151
146
  pollInterval?: number;
152
147
  vacuumInterval?: number;
package/index.ts CHANGED
@@ -16,17 +16,13 @@ import * as Enums from './modules/enums';
16
16
  import * as KeyStore from './modules/key';
17
17
  import { ConnectorService as Connector } from './services/connector/factory';
18
18
  import { PostgresConnection as ConnectorPostgres } from './services/connector/providers/postgres';
19
- import { RedisConnection as ConnectorIORedis } from './services/connector/providers/ioredis';
20
- import { RedisConnection as ConnectorRedis } from './services/connector/providers/redis';
21
19
  import { NatsConnection as ConnectorNATS } from './services/connector/providers/nats';
22
20
 
23
21
  export {
24
22
  //Provider Connectors
25
23
  Connector, //factory
26
- ConnectorIORedis,
27
24
  ConnectorNATS,
28
25
  ConnectorPostgres,
29
- ConnectorRedis,
30
26
 
31
27
  //Top-level Modules
32
28
  HotMesh,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/hotmesh",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "Permanent-Memory Workflows & AI Agents",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -23,9 +23,7 @@
23
23
  "test:await": "NODE_ENV=test jest ./tests/functional/awaiter/postgres.test.ts --detectOpenHandles --forceExit --verbose",
24
24
  "test:compile": "NODE_ENV=test jest ./tests/functional/compile/index.test.ts --detectOpenHandles --forceExit --verbose",
25
25
  "test:connect": "NODE_ENV=test jest ./tests/unit/services/connector/* --detectOpenHandles --forceExit --verbose",
26
- "test:connect:ioredis": "NODE_ENV=test jest ./tests/unit/services/connector/providers/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
27
26
  "test:connect:postgres": "NODE_ENV=test jest ./tests/unit/services/connector/providers/postgres.test.ts --detectOpenHandles --forceExit --verbose",
28
- "test:connect:redis": "NODE_ENV=test jest ./tests/unit/services/connector/providers/redis.test.ts --detectOpenHandles --forceExit --verbose",
29
27
  "test:connect:nats": "NODE_ENV=test jest ./tests/unit/services/connector/providers/nats.test.ts --detectOpenHandles --forceExit --verbose",
30
28
  "test:memflow": "NODE_ENV=test jest ./tests/memflow/*/postgres.test.ts --detectOpenHandles --forceExit --verbose",
31
29
  "test:memflow:basic": "HMSH_LOGLEVEL=info NODE_ENV=test jest ./tests/memflow/basic/postgres.test.ts --detectOpenHandles --forceExit --verbose",
@@ -35,7 +33,7 @@
35
33
  "test:memflow:interceptor": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/interceptor/postgres.test.ts --detectOpenHandles --forceExit --verbose",
36
34
  "test:memflow:entity": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/entity/postgres.test.ts --detectOpenHandles --forceExit --verbose",
37
35
  "test:memflow:agent": "NODE_ENV=test HMSH_LOGLEVEL=debug jest ./tests/memflow/agent/postgres.test.ts --detectOpenHandles --forceExit --verbose",
38
- "test:memflow:hello": "HMSH_TELEMETRY=debug HMSH_LOGLEVEL=debug HMSH_IS_CLUSTER=true NODE_ENV=test jest ./tests/memflow/helloworld/postgres.test.ts --detectOpenHandles --forceExit --verbose",
36
+ "test:memflow:hello": "HMSH_TELEMETRY=debug HMSH_LOGLEVEL=debug NODE_ENV=test jest ./tests/memflow/helloworld/postgres.test.ts --detectOpenHandles --forceExit --verbose",
39
37
  "test:memflow:hook": "NODE_ENV=test jest ./tests/memflow/hook/postgres.test.ts --detectOpenHandles --forceExit --verbose",
40
38
  "test:memflow:interrupt": "NODE_ENV=test jest ./tests/memflow/interrupt/postgres.test.ts --detectOpenHandles --forceExit --verbose",
41
39
  "test:memflow:loopactivity": "NODE_ENV=test jest ./tests/memflow/loopactivity/postgres.test.ts --detectOpenHandles --forceExit --verbose",
@@ -54,7 +52,7 @@
54
52
  "test:interrupt": "NODE_ENV=test jest ./tests/functional/interrupt/*.test.ts --detectOpenHandles --forceExit --verbose",
55
53
  "test:parallel": "NODE_ENV=test jest ./tests/functional/parallel/index.test.ts --detectOpenHandles --forceExit --verbose",
56
54
  "test:pipe": "NODE_ENV=test jest ./tests/unit/services/pipe/index.test.ts --detectOpenHandles --forceExit --verbose",
57
- "test:quorum": "HMSH_IS_CLUSTER=true NODE_ENV=test jest ./tests/functional/quorum/*.test.ts --detectOpenHandles --forceExit --verbose",
55
+ "test:quorum": "NODE_ENV=test jest ./tests/functional/quorum/*.test.ts --detectOpenHandles --forceExit --verbose",
58
56
  "test:reclaim": "NODE_ENV=test jest ./tests/functional/reclaim/*.test.ts --detectOpenHandles --forceExit --verbose",
59
57
  "test:redeploy": "NODE_ENV=test jest ./tests/functional/redeploy/*.test.ts --detectOpenHandles --forceExit --verbose",
60
58
  "test:reporter": "NODE_ENV=test jest ./tests/unit/services/reporter/index.test.ts --detectOpenHandles --forceExit --verbose",
@@ -64,15 +62,9 @@
64
62
  "test:signal": "NODE_ENV=test jest ./tests/functional/signal/*.test.ts --detectOpenHandles --forceExit --verbose",
65
63
  "test:status": "NODE_ENV=test jest ./tests/functional/status/index.test.ts --detectOpenHandles --forceExit --verbose",
66
64
  "test:providers": "NODE_ENV=test jest ./tests/functional/*/providers/*/*.test.ts --detectOpenHandles --forceExit --verbose",
67
- "test:store:ioredis": "NODE_ENV=test jest ./tests/functional/store/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
68
- "test:store:redis": "NODE_ENV=test jest ./tests/functional/store/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
69
65
  "test:store:postgres": "NODE_ENV=test jest ./tests/functional/store/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
70
- "test:stream:ioredis": "NODE_ENV=test jest ./tests/functional/stream/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
71
- "test:stream:redis": "NODE_ENV=test jest ./tests/functional/stream/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
72
66
  "test:stream:postgres": "NODE_ENV=test jest ./tests/functional/stream/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
73
67
  "test:stream:nats": "NODE_ENV=test jest ./tests/functional/stream/providers/nats/nats.test.ts --detectOpenHandles --forceExit --verbose",
74
- "test:sub:ioredis": "NODE_ENV=test jest ./tests/functional/sub/providers/redis/ioredis.test.ts --detectOpenHandles --forceExit --verbose",
75
- "test:sub:redis": "NODE_ENV=test jest ./tests/functional/sub/providers/redis/redis.test.ts --detectOpenHandles --forceExit --verbose",
76
68
  "test:sub:postgres": "NODE_ENV=test jest ./tests/functional/sub/providers/postgres/postgres.test.ts --detectOpenHandles --forceExit --verbose",
77
69
  "test:sub:nats": "NODE_ENV=test jest ./tests/functional/sub/providers/nats/nats.test.ts --detectOpenHandles --forceExit --verbose",
78
70
  "test:trigger": "NODE_ENV=test jest ./tests/unit/services/activities/trigger.test.ts --detectOpenHandles --forceExit --verbose",
@@ -114,13 +106,11 @@
114
106
  "eslint-config-prettier": "^9.1.0",
115
107
  "eslint-plugin-import": "^2.29.1",
116
108
  "eslint-plugin-prettier": "^5.1.3",
117
- "ioredis": "^5.3.2",
118
109
  "javascript-obfuscator": "^4.1.1",
119
110
  "jest": "^29.5.0",
120
111
  "nats": "^2.28.0",
121
112
  "openai": "^5.9.0",
122
113
  "pg": "^8.10.0",
123
- "redis": "^4.6.13",
124
114
  "rimraf": "^4.4.1",
125
115
  "terser": "^5.37.0",
126
116
  "ts-jest": "^29.0.5",
@@ -130,9 +120,7 @@
130
120
  "typescript": "^5.0.4"
131
121
  },
132
122
  "peerDependencies": {
133
- "ioredis": "^4.0.0 || ^5.0.0",
134
123
  "nats": "^2.0.0",
135
- "pg": "^8.0.0",
136
- "redis": "^4.0.0"
124
+ "pg": "^8.0.0"
137
125
  }
138
126
  }
@@ -1,9 +0,0 @@
1
- import { AbstractConnection } from '..';
2
- import { IORedisClientOptions as RedisClientOptions, IORedisClassType as RedisClassType, IORedisClientType as RedisClientType } from '../../../types/redis';
3
- declare class RedisConnection extends AbstractConnection<RedisClassType, RedisClientOptions> {
4
- defaultOptions: RedisClientOptions;
5
- createConnection(Redis: RedisClassType, options: RedisClientOptions): Promise<RedisClientType>;
6
- getClient(): RedisClientType;
7
- closeConnection(connection: RedisClientType): Promise<void>;
8
- }
9
- export { RedisConnection };
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RedisConnection = void 0;
4
- const __1 = require("..");
5
- class RedisConnection extends __1.AbstractConnection {
6
- constructor() {
7
- super(...arguments);
8
- this.defaultOptions = {
9
- host: 'localhost',
10
- port: 6379,
11
- };
12
- }
13
- async createConnection(Redis, options) {
14
- return new Redis(options);
15
- }
16
- getClient() {
17
- if (!this.connection) {
18
- throw new Error('Redis client is not connected');
19
- }
20
- return this.connection;
21
- }
22
- async closeConnection(connection) {
23
- await connection.quit();
24
- }
25
- }
26
- exports.RedisConnection = RedisConnection;
@@ -1,9 +0,0 @@
1
- import { AbstractConnection } from '..';
2
- import { RedisRedisClassType as RedisClassType, RedisRedisClientType as RedisClientType, RedisRedisClientOptions as RedisClientOptions } from '../../../types/redis';
3
- declare class RedisConnection extends AbstractConnection<RedisClassType, RedisClientOptions> {
4
- defaultOptions: RedisClientOptions;
5
- createConnection(Redis: Partial<RedisClassType>, options: RedisClientOptions): Promise<Partial<RedisClientType>>;
6
- getClient(): RedisClientType;
7
- closeConnection(connection: any): Promise<void>;
8
- }
9
- export { RedisConnection, RedisClientType };
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RedisConnection = void 0;
4
- const __1 = require("..");
5
- class RedisConnection extends __1.AbstractConnection {
6
- constructor() {
7
- super(...arguments);
8
- this.defaultOptions = {
9
- socket: {
10
- host: 'localhost',
11
- port: 6379,
12
- tls: false,
13
- },
14
- };
15
- }
16
- async createConnection(Redis, options) {
17
- return new Promise((resolve, reject) => {
18
- const client = Redis.createClient(options);
19
- client.on('error', (error) => {
20
- reject(error);
21
- });
22
- client.on('ready', () => {
23
- resolve(client);
24
- });
25
- client.connect();
26
- });
27
- }
28
- getClient() {
29
- if (!this.connection) {
30
- throw new Error('Redis client is not connected');
31
- }
32
- return this.connection;
33
- }
34
- async closeConnection(connection) {
35
- await connection.quit();
36
- }
37
- }
38
- exports.RedisConnection = RedisConnection;
@@ -1,23 +0,0 @@
1
- import { SearchService } from '../../index';
2
- import { ILogger } from '../../../logger';
3
- import { IORedisClientType } from '../../../../types/redis';
4
- declare class IORedisSearchService extends SearchService<IORedisClientType> {
5
- constructor(searchClient: IORedisClientType, storeClient?: IORedisClientType);
6
- init(namespace: string, appId: string, logger: ILogger): Promise<void>;
7
- createSearchIndex(indexName: string, prefixes: string[], schema: string[]): Promise<void>;
8
- listSearchIndexes(): Promise<string[]>;
9
- updateContext(key: string, fields: Record<string, string>): Promise<any>;
10
- setFields(key: string, fields: Record<string, string>): Promise<number>;
11
- getField(key: string, field: string): Promise<string>;
12
- getFields(key: string, fields: string[]): Promise<string[]>;
13
- getAllFields(key: string): Promise<Record<string, string>>;
14
- deleteFields(key: string, fields: string[]): Promise<number>;
15
- incrementFieldByFloat(key: string, field: string, increment: number): Promise<number>;
16
- sendQuery(...query: [string, ...string[]]): Promise<any>;
17
- sendIndexedQuery(index: string, query: string[]): Promise<string[]>;
18
- findEntities(): Promise<any[]>;
19
- findEntityById(): Promise<any>;
20
- findEntitiesByCondition(): Promise<any[]>;
21
- createEntityIndex(): Promise<void>;
22
- }
23
- export { IORedisSearchService };
@@ -1,134 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IORedisSearchService = void 0;
4
- const index_1 = require("../../index");
5
- class IORedisSearchService extends index_1.SearchService {
6
- constructor(searchClient, storeClient) {
7
- super(searchClient, storeClient);
8
- }
9
- async init(namespace, appId, logger) {
10
- this.namespace = namespace;
11
- this.appId = appId;
12
- this.logger = logger;
13
- }
14
- async createSearchIndex(indexName, prefixes, schema) {
15
- try {
16
- await this.searchClient.call('FT.CREATE', indexName, 'ON', 'HASH', 'PREFIX', prefixes.length.toString(), ...prefixes, 'SCHEMA', ...schema);
17
- }
18
- catch (error) {
19
- this.logger.info('Error creating search index', { error });
20
- throw error;
21
- }
22
- }
23
- async listSearchIndexes() {
24
- try {
25
- const indexes = await this.searchClient.call('FT._LIST');
26
- return indexes;
27
- }
28
- catch (error) {
29
- this.logger.info('Error listing search indexes', { error });
30
- throw error;
31
- }
32
- }
33
- async updateContext(key, fields) {
34
- //no-op;
35
- throw new Error('Not implemented');
36
- }
37
- async setFields(key, fields) {
38
- try {
39
- const result = await this.searchClient.hset(key, fields);
40
- return Number(result);
41
- }
42
- catch (error) {
43
- this.logger.error(`Error setting fields for key: ${key}`, { error });
44
- throw error;
45
- }
46
- }
47
- async getField(key, field) {
48
- try {
49
- return await this.searchClient.hget(key, field);
50
- }
51
- catch (error) {
52
- this.logger.error(`Error getting field ${field} for key: ${key}`, {
53
- error,
54
- });
55
- throw error;
56
- }
57
- }
58
- async getFields(key, fields) {
59
- try {
60
- return await this.searchClient.hmget(key, [...fields]);
61
- }
62
- catch (error) {
63
- this.logger.error(`Error getting fields for key: ${key}`, { error });
64
- throw error;
65
- }
66
- }
67
- async getAllFields(key) {
68
- try {
69
- return await this.searchClient.hgetall(key);
70
- }
71
- catch (error) {
72
- this.logger.error(`Error getting fields for key: ${key}`, { error });
73
- throw error;
74
- }
75
- }
76
- async deleteFields(key, fields) {
77
- try {
78
- const result = await this.searchClient.hdel(key, ...fields);
79
- return Number(result);
80
- }
81
- catch (error) {
82
- this.logger.error(`Error deleting fields for key: ${key}`, { error });
83
- throw error;
84
- }
85
- }
86
- async incrementFieldByFloat(key, field, increment) {
87
- try {
88
- const result = await this.searchClient.hincrbyfloat(key, field, increment);
89
- return Number(result);
90
- }
91
- catch (error) {
92
- this.logger.error(`Error incrementing field ${field} for key: ${key}`, {
93
- error,
94
- });
95
- throw error;
96
- }
97
- }
98
- async sendQuery(...query) {
99
- try {
100
- return await this.searchClient.call(...query);
101
- }
102
- catch (error) {
103
- this.logger.error('Error executing query', { error });
104
- throw error;
105
- }
106
- }
107
- async sendIndexedQuery(index, query) {
108
- try {
109
- if (query[0]?.startsWith('FT.')) {
110
- const [cmd, ...rest] = query;
111
- return (await this.searchClient.call(cmd, ...rest));
112
- }
113
- return (await this.searchClient.call('FT.SEARCH', index, ...query));
114
- }
115
- catch (error) {
116
- this.logger.error('Error executing query', { error });
117
- throw error;
118
- }
119
- }
120
- // Entity methods - not implemented for Redis (postgres-specific JSONB operations)
121
- async findEntities() {
122
- throw new Error('Entity findEntities not supported in Redis - use PostgreSQL');
123
- }
124
- async findEntityById() {
125
- throw new Error('Entity findEntityById not supported in Redis - use PostgreSQL');
126
- }
127
- async findEntitiesByCondition() {
128
- throw new Error('Entity findEntitiesByCondition not supported in Redis - use PostgreSQL');
129
- }
130
- async createEntityIndex() {
131
- throw new Error('Entity createEntityIndex not supported in Redis - use PostgreSQL');
132
- }
133
- }
134
- exports.IORedisSearchService = IORedisSearchService;
@@ -1,23 +0,0 @@
1
- import { SearchService } from '../../index';
2
- import { ILogger } from '../../../logger';
3
- import { RedisRedisClientType } from '../../../../types/redis';
4
- declare class RedisSearchService extends SearchService<RedisRedisClientType> {
5
- constructor(searchClient: RedisRedisClientType, storeClient?: RedisRedisClientType);
6
- init(namespace: string, appId: string, logger: ILogger): Promise<void>;
7
- createSearchIndex(indexName: string, prefixes: string[], schema: string[]): Promise<void>;
8
- listSearchIndexes(): Promise<string[]>;
9
- updateContext(key: string, fields: Record<string, string>): Promise<any>;
10
- setFields(key: string, fields: Record<string, string>): Promise<number>;
11
- getField(key: string, field: string): Promise<string>;
12
- getFields(key: string, fields: string[]): Promise<string[]>;
13
- getAllFields(key: string): Promise<Record<string, string>>;
14
- deleteFields(key: string, fields: string[]): Promise<number>;
15
- incrementFieldByFloat(key: string, field: string, increment: number): Promise<number>;
16
- sendQuery(...query: any[]): Promise<any>;
17
- sendIndexedQuery(index: string, query: string[]): Promise<string[]>;
18
- findEntities(): Promise<any[]>;
19
- findEntityById(): Promise<any>;
20
- findEntitiesByCondition(): Promise<any[]>;
21
- createEntityIndex(): Promise<void>;
22
- }
23
- export { RedisSearchService };
@@ -1,147 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RedisSearchService = void 0;
4
- const index_1 = require("../../index");
5
- class RedisSearchService extends index_1.SearchService {
6
- constructor(searchClient, storeClient) {
7
- super(searchClient, storeClient);
8
- }
9
- async init(namespace, appId, logger) {
10
- this.namespace = namespace;
11
- this.appId = appId;
12
- this.logger = logger;
13
- }
14
- async createSearchIndex(indexName, prefixes, schema) {
15
- try {
16
- await this.searchClient.sendCommand([
17
- 'FT.CREATE',
18
- indexName,
19
- 'ON',
20
- 'HASH',
21
- 'PREFIX',
22
- prefixes.length.toString(),
23
- ...prefixes,
24
- 'SCHEMA',
25
- ...schema,
26
- ]);
27
- }
28
- catch (error) {
29
- this.logger.info('Error creating search index', { error });
30
- throw error;
31
- }
32
- }
33
- async listSearchIndexes() {
34
- try {
35
- const indexes = await this.searchClient.sendCommand(['FT._LIST']);
36
- return indexes;
37
- }
38
- catch (error) {
39
- this.logger.info('Error listing search indexes', { error });
40
- throw error;
41
- }
42
- }
43
- async updateContext(key, fields) {
44
- //no-op;
45
- throw new Error('Not implemented');
46
- }
47
- async setFields(key, fields) {
48
- try {
49
- const result = await this.searchClient.HSET(key, fields);
50
- return Number(result);
51
- }
52
- catch (error) {
53
- this.logger.error(`Error setting fields for key: ${key}`, { error });
54
- throw error;
55
- }
56
- }
57
- async getField(key, field) {
58
- try {
59
- return await this.searchClient.HGET(key, field);
60
- }
61
- catch (error) {
62
- this.logger.error(`Error getting field ${field} for key: ${key}`, {
63
- error,
64
- });
65
- throw error;
66
- }
67
- }
68
- async getFields(key, fields) {
69
- try {
70
- return await this.searchClient.HMGET(key, [...fields]);
71
- }
72
- catch (error) {
73
- this.logger.error(`Error getting fields for key: ${key}`, { error });
74
- throw error;
75
- }
76
- }
77
- async getAllFields(key) {
78
- try {
79
- return await this.searchClient.HGETALL(key);
80
- }
81
- catch (error) {
82
- this.logger.error(`Error getting fields for key: ${key}`, { error });
83
- throw error;
84
- }
85
- }
86
- async deleteFields(key, fields) {
87
- try {
88
- const result = await this.searchClient.HDEL(key, fields);
89
- return Number(result);
90
- }
91
- catch (error) {
92
- this.logger.error(`Error deleting fields for key: ${key}`, { error });
93
- throw error;
94
- }
95
- }
96
- async incrementFieldByFloat(key, field, increment) {
97
- try {
98
- const result = await this.searchClient.HINCRBYFLOAT(key, field, increment);
99
- return Number(result);
100
- }
101
- catch (error) {
102
- this.logger.error(`Error incrementing field ${field} for key: ${key}`, {
103
- error,
104
- });
105
- throw error;
106
- }
107
- }
108
- async sendQuery(...query) {
109
- try {
110
- return await this.searchClient.sendCommand(query);
111
- }
112
- catch (error) {
113
- this.logger.error('Error executing query', { error });
114
- throw error;
115
- }
116
- }
117
- async sendIndexedQuery(index, query) {
118
- try {
119
- if (query[0]?.startsWith('FT.')) {
120
- return (await this.searchClient.sendCommand(query));
121
- }
122
- return (await this.searchClient.sendCommand([
123
- 'FT.SEARCH',
124
- index,
125
- ...query,
126
- ]));
127
- }
128
- catch (error) {
129
- this.logger.error('Error executing query', { error });
130
- throw error;
131
- }
132
- }
133
- // Entity methods - not implemented for Redis (postgres-specific JSONB operations)
134
- async findEntities() {
135
- throw new Error('Entity findEntities not supported in Redis - use PostgreSQL');
136
- }
137
- async findEntityById() {
138
- throw new Error('Entity findEntityById not supported in Redis - use PostgreSQL');
139
- }
140
- async findEntitiesByCondition() {
141
- throw new Error('Entity findEntitiesByCondition not supported in Redis - use PostgreSQL');
142
- }
143
- async createEntityIndex() {
144
- throw new Error('Entity createEntityIndex not supported in Redis - use PostgreSQL');
145
- }
146
- }
147
- exports.RedisSearchService = RedisSearchService;