lokicms-plugin-sql 1.0.0

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 (93) hide show
  1. package/dist/federation/cache-layer.d.ts +58 -0
  2. package/dist/federation/cache-layer.d.ts.map +1 -0
  3. package/dist/federation/cache-layer.js +210 -0
  4. package/dist/federation/cache-layer.js.map +1 -0
  5. package/dist/federation/index.d.ts +12 -0
  6. package/dist/federation/index.d.ts.map +1 -0
  7. package/dist/federation/index.js +9 -0
  8. package/dist/federation/index.js.map +1 -0
  9. package/dist/federation/source-manager.d.ts +57 -0
  10. package/dist/federation/source-manager.d.ts.map +1 -0
  11. package/dist/federation/source-manager.js +238 -0
  12. package/dist/federation/source-manager.js.map +1 -0
  13. package/dist/federation/sync-engine.d.ts +68 -0
  14. package/dist/federation/sync-engine.d.ts.map +1 -0
  15. package/dist/federation/sync-engine.js +288 -0
  16. package/dist/federation/sync-engine.js.map +1 -0
  17. package/dist/index.d.ts +80 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +79 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/plugin.d.ts +28 -0
  22. package/dist/plugin.d.ts.map +1 -0
  23. package/dist/plugin.js +798 -0
  24. package/dist/plugin.js.map +1 -0
  25. package/dist/providers/base.d.ts +142 -0
  26. package/dist/providers/base.d.ts.map +1 -0
  27. package/dist/providers/base.js +161 -0
  28. package/dist/providers/base.js.map +1 -0
  29. package/dist/providers/index.d.ts +22 -0
  30. package/dist/providers/index.d.ts.map +1 -0
  31. package/dist/providers/index.js +74 -0
  32. package/dist/providers/index.js.map +1 -0
  33. package/dist/providers/mariadb.d.ts +83 -0
  34. package/dist/providers/mariadb.d.ts.map +1 -0
  35. package/dist/providers/mariadb.js +293 -0
  36. package/dist/providers/mariadb.js.map +1 -0
  37. package/dist/providers/mysql.d.ts +78 -0
  38. package/dist/providers/mysql.d.ts.map +1 -0
  39. package/dist/providers/mysql.js +284 -0
  40. package/dist/providers/mysql.js.map +1 -0
  41. package/dist/providers/postgresql.d.ts +77 -0
  42. package/dist/providers/postgresql.d.ts.map +1 -0
  43. package/dist/providers/postgresql.js +296 -0
  44. package/dist/providers/postgresql.js.map +1 -0
  45. package/dist/providers/sqlite.d.ts +80 -0
  46. package/dist/providers/sqlite.d.ts.map +1 -0
  47. package/dist/providers/sqlite.js +283 -0
  48. package/dist/providers/sqlite.js.map +1 -0
  49. package/dist/query/builder.d.ts +74 -0
  50. package/dist/query/builder.d.ts.map +1 -0
  51. package/dist/query/builder.js +279 -0
  52. package/dist/query/builder.js.map +1 -0
  53. package/dist/query/index.d.ts +10 -0
  54. package/dist/query/index.d.ts.map +1 -0
  55. package/dist/query/index.js +8 -0
  56. package/dist/query/index.js.map +1 -0
  57. package/dist/query/transformer.d.ts +74 -0
  58. package/dist/query/transformer.d.ts.map +1 -0
  59. package/dist/query/transformer.js +236 -0
  60. package/dist/query/transformer.js.map +1 -0
  61. package/dist/types.d.ts +350 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +38 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/vectors/adapter.d.ts +128 -0
  66. package/dist/vectors/adapter.d.ts.map +1 -0
  67. package/dist/vectors/adapter.js +79 -0
  68. package/dist/vectors/adapter.js.map +1 -0
  69. package/dist/vectors/index.d.ts +41 -0
  70. package/dist/vectors/index.d.ts.map +1 -0
  71. package/dist/vectors/index.js +87 -0
  72. package/dist/vectors/index.js.map +1 -0
  73. package/dist/vectors/lokijs-vector.d.ts +112 -0
  74. package/dist/vectors/lokijs-vector.d.ts.map +1 -0
  75. package/dist/vectors/lokijs-vector.js +217 -0
  76. package/dist/vectors/lokijs-vector.js.map +1 -0
  77. package/dist/vectors/mariadb-vector.d.ts +56 -0
  78. package/dist/vectors/mariadb-vector.d.ts.map +1 -0
  79. package/dist/vectors/mariadb-vector.js +263 -0
  80. package/dist/vectors/mariadb-vector.js.map +1 -0
  81. package/dist/vectors/mysql-vector.d.ts +56 -0
  82. package/dist/vectors/mysql-vector.d.ts.map +1 -0
  83. package/dist/vectors/mysql-vector.js +235 -0
  84. package/dist/vectors/mysql-vector.js.map +1 -0
  85. package/dist/vectors/pgvector.d.ts +52 -0
  86. package/dist/vectors/pgvector.d.ts.map +1 -0
  87. package/dist/vectors/pgvector.js +190 -0
  88. package/dist/vectors/pgvector.js.map +1 -0
  89. package/dist/vectors/sqlite-vec.d.ts +80 -0
  90. package/dist/vectors/sqlite-vec.d.ts.map +1 -0
  91. package/dist/vectors/sqlite-vec.js +362 -0
  92. package/dist/vectors/sqlite-vec.js.map +1 -0
  93. package/package.json +64 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Cache Layer
3
+ *
4
+ * LokiJS cache layer for SQL queries with TTL support.
5
+ */
6
+ import type { CacheConfig, CacheStats, PluginLogger } from '../types.js';
7
+ /**
8
+ * LokiJS collection interface (minimal)
9
+ */
10
+ interface LokiCollection<T = Record<string, unknown>> {
11
+ insert(doc: T): T;
12
+ update(doc: T): T;
13
+ findOne(query: object): T | null;
14
+ find(query?: object): T[];
15
+ remove(doc: T | T[]): void;
16
+ clear(): void;
17
+ count(): number;
18
+ }
19
+ /**
20
+ * LokiJS database interface (minimal)
21
+ */
22
+ interface LokiDatabase {
23
+ getCollection<T>(name: string): LokiCollection<T> | null;
24
+ addCollection<T>(name: string, options?: object): LokiCollection<T>;
25
+ }
26
+ /**
27
+ * Cache layer interface
28
+ */
29
+ export interface CacheLayer {
30
+ /** Get cached value */
31
+ get<T = unknown>(key: string): T | undefined;
32
+ /** Set cached value */
33
+ set<T = unknown>(key: string, value: T, ttlMinutes?: number): void;
34
+ /** Check if key exists and is valid */
35
+ has(key: string): boolean;
36
+ /** Delete cached value */
37
+ delete(key: string): boolean;
38
+ /** Clear all cache */
39
+ clear(): void;
40
+ /** Clear cache for a collection */
41
+ clearCollection(collection: string): number;
42
+ /** Get cache stats */
43
+ getStats(): CacheStats;
44
+ /** Enable/disable cache */
45
+ setEnabled(enabled: boolean): void;
46
+ /** Check if enabled */
47
+ isEnabled(): boolean;
48
+ /** Cleanup expired entries */
49
+ cleanup(): number;
50
+ /** Generate cache key */
51
+ generateKey(collection: string, query: object): string;
52
+ }
53
+ /**
54
+ * Create cache layer
55
+ */
56
+ export declare function createCacheLayer(lokiDb: LokiDatabase, config: CacheConfig, logger: PluginLogger): CacheLayer;
57
+ export {};
58
+ //# sourceMappingURL=cache-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-layer.d.ts","sourceRoot":"","sources":["../../src/federation/cache-layer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EAEX,UAAU,EACV,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,UAAU,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClD,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;IACd,KAAK,IAAI,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzD,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACrE;AASD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAE7C,uBAAuB;IACvB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnE,uCAAuC;IACvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1B,0BAA0B;IAC1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE7B,sBAAsB;IACtB,KAAK,IAAI,IAAI,CAAC;IAEd,mCAAmC;IACnC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5C,sBAAsB;IACtB,QAAQ,IAAI,UAAU,CAAC;IAEvB,2BAA2B;IAC3B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnC,uBAAuB;IACvB,SAAS,IAAI,OAAO,CAAC;IAErB,8BAA8B;IAC9B,OAAO,IAAI,MAAM,CAAC;IAElB,yBAAyB;IACzB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,YAAY,GACnB,UAAU,CA2OZ"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Cache Layer
3
+ *
4
+ * LokiJS cache layer for SQL queries with TTL support.
5
+ */
6
+ import { DEFAULT_CACHE_TTL } from '../types.js';
7
+ /**
8
+ * Create cache layer
9
+ */
10
+ export function createCacheLayer(lokiDb, config, logger) {
11
+ const collectionName = 'lokicms_cache';
12
+ const ttlMinutes = config.ttlMinutes ?? DEFAULT_CACHE_TTL;
13
+ const enabledCollections = config.collections ?? []; // Empty = all
14
+ let enabled = config.enabled;
15
+ let hits = 0;
16
+ let misses = 0;
17
+ // Get or create cache collection
18
+ let cacheCollection = lokiDb.getCollection(collectionName);
19
+ if (!cacheCollection) {
20
+ cacheCollection = lokiDb.addCollection(collectionName, {
21
+ indices: ['key'],
22
+ });
23
+ }
24
+ /**
25
+ * Check if collection is cacheable
26
+ */
27
+ function isCacheable(key) {
28
+ if (!enabled)
29
+ return false;
30
+ if (enabledCollections.length === 0)
31
+ return true;
32
+ // Extract collection from key (format: collection:hash)
33
+ const collection = key.split(':')[0];
34
+ return enabledCollections.includes(collection);
35
+ }
36
+ /**
37
+ * Get cached value
38
+ */
39
+ function get(key) {
40
+ if (!isCacheable(key)) {
41
+ misses++;
42
+ return undefined;
43
+ }
44
+ const entry = cacheCollection.findOne({ key });
45
+ if (!entry) {
46
+ misses++;
47
+ return undefined;
48
+ }
49
+ // Check expiration
50
+ if (entry.expiresAt < Date.now()) {
51
+ cacheCollection.remove(entry);
52
+ misses++;
53
+ return undefined;
54
+ }
55
+ hits++;
56
+ return entry.value;
57
+ }
58
+ /**
59
+ * Set cached value
60
+ */
61
+ function set(key, value, customTtl) {
62
+ if (!isCacheable(key))
63
+ return;
64
+ const now = Date.now();
65
+ const ttl = customTtl ?? ttlMinutes;
66
+ const expiresAt = now + ttl * 60 * 1000;
67
+ const existing = cacheCollection.findOne({ key });
68
+ if (existing) {
69
+ existing.value = value;
70
+ existing.expiresAt = expiresAt;
71
+ cacheCollection.update(existing);
72
+ }
73
+ else {
74
+ cacheCollection.insert({
75
+ key,
76
+ value,
77
+ expiresAt,
78
+ createdAt: now,
79
+ });
80
+ }
81
+ }
82
+ /**
83
+ * Check if key exists and is valid
84
+ */
85
+ function has(key) {
86
+ if (!isCacheable(key))
87
+ return false;
88
+ const entry = cacheCollection.findOne({ key });
89
+ if (!entry)
90
+ return false;
91
+ if (entry.expiresAt < Date.now()) {
92
+ cacheCollection.remove(entry);
93
+ return false;
94
+ }
95
+ return true;
96
+ }
97
+ /**
98
+ * Delete cached value
99
+ */
100
+ function deleteKey(key) {
101
+ const entry = cacheCollection.findOne({ key });
102
+ if (entry) {
103
+ cacheCollection.remove(entry);
104
+ return true;
105
+ }
106
+ return false;
107
+ }
108
+ /**
109
+ * Clear all cache
110
+ */
111
+ function clearAll() {
112
+ cacheCollection.clear();
113
+ hits = 0;
114
+ misses = 0;
115
+ logger.info('Cache cleared');
116
+ }
117
+ /**
118
+ * Clear cache for a collection
119
+ */
120
+ function clearCollection(collection) {
121
+ const entries = cacheCollection.find().filter((e) => e.key.startsWith(`${collection}:`));
122
+ for (const entry of entries) {
123
+ cacheCollection.remove(entry);
124
+ }
125
+ return entries.length;
126
+ }
127
+ /**
128
+ * Get cache stats
129
+ */
130
+ function getStats() {
131
+ const entries = cacheCollection.count();
132
+ const allEntries = cacheCollection.find();
133
+ // Calculate approximate size (rough estimate)
134
+ let size = 0;
135
+ for (const entry of allEntries) {
136
+ size += JSON.stringify(entry.value).length;
137
+ }
138
+ return {
139
+ enabled,
140
+ entries,
141
+ size,
142
+ hits,
143
+ misses,
144
+ ttlMinutes,
145
+ };
146
+ }
147
+ /**
148
+ * Enable/disable cache
149
+ */
150
+ function setEnabled(value) {
151
+ enabled = value;
152
+ logger.info(`Cache ${enabled ? 'enabled' : 'disabled'}`);
153
+ }
154
+ /**
155
+ * Check if enabled
156
+ */
157
+ function isEnabled() {
158
+ return enabled;
159
+ }
160
+ /**
161
+ * Cleanup expired entries
162
+ */
163
+ function cleanup() {
164
+ const now = Date.now();
165
+ const expired = cacheCollection.find().filter((e) => e.expiresAt < now);
166
+ for (const entry of expired) {
167
+ cacheCollection.remove(entry);
168
+ }
169
+ if (expired.length > 0) {
170
+ logger.debug(`Cleaned up ${expired.length} expired cache entries`);
171
+ }
172
+ return expired.length;
173
+ }
174
+ /**
175
+ * Generate cache key from collection and query
176
+ */
177
+ function generateKey(collection, query) {
178
+ // Simple hash of query object
179
+ const queryStr = JSON.stringify(query, Object.keys(query).sort());
180
+ let hash = 0;
181
+ for (let i = 0; i < queryStr.length; i++) {
182
+ const char = queryStr.charCodeAt(i);
183
+ hash = ((hash << 5) - hash) + char;
184
+ hash = hash & hash; // Convert to 32bit integer
185
+ }
186
+ return `${collection}:${Math.abs(hash).toString(36)}`;
187
+ }
188
+ // Start cleanup interval
189
+ const cleanupInterval = setInterval(cleanup, 5 * 60 * 1000); // Every 5 minutes
190
+ // Cleanup on module unload (if possible)
191
+ if (typeof process !== 'undefined') {
192
+ process.on('beforeExit', () => {
193
+ clearInterval(cleanupInterval);
194
+ });
195
+ }
196
+ return {
197
+ get,
198
+ set,
199
+ has,
200
+ delete: deleteKey,
201
+ clear: clearAll,
202
+ clearCollection,
203
+ getStats,
204
+ setEnabled,
205
+ isEnabled,
206
+ cleanup,
207
+ generateKey,
208
+ };
209
+ }
210
+ //# sourceMappingURL=cache-layer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-layer.js","sourceRoot":"","sources":["../../src/federation/cache-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Federation Layer Index
3
+ *
4
+ * Data federation components for multi-source management.
5
+ */
6
+ export { createSourceManager } from './source-manager.js';
7
+ export type { SourceManager, ManagedSource } from './source-manager.js';
8
+ export { createSyncEngine } from './sync-engine.js';
9
+ export type { SyncEngine } from './sync-engine.js';
10
+ export { createCacheLayer } from './cache-layer.js';
11
+ export type { CacheLayer } from './cache-layer.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/federation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Federation Layer Index
3
+ *
4
+ * Data federation components for multi-source management.
5
+ */
6
+ export { createSourceManager } from './source-manager.js';
7
+ export { createSyncEngine } from './sync-engine.js';
8
+ export { createCacheLayer } from './cache-layer.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/federation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Source Manager
3
+ *
4
+ * Manages multiple data sources with connection pooling and health monitoring.
5
+ */
6
+ import type { SourceConfig, SQLProviderType, ConnectionMode, ConnectionConfig, ProviderStatus, PluginLogger } from '../types.js';
7
+ import { SQLProvider } from '../providers/index.js';
8
+ /**
9
+ * Managed source
10
+ */
11
+ export interface ManagedSource {
12
+ name: string;
13
+ config: SourceConfig;
14
+ provider: SQLProvider;
15
+ status: 'disconnected' | 'connecting' | 'connected' | 'error';
16
+ error?: string;
17
+ lastConnected?: number;
18
+ lastHealthCheck?: number;
19
+ }
20
+ /**
21
+ * Source manager interface
22
+ */
23
+ export interface SourceManager {
24
+ /** Add a source */
25
+ addSource(config: SourceConfig): Promise<void>;
26
+ /** Remove a source */
27
+ removeSource(name: string): Promise<void>;
28
+ /** Get a source by name */
29
+ getSource(name: string): ManagedSource | undefined;
30
+ /** Get all sources */
31
+ getAllSources(): ManagedSource[];
32
+ /** Get source provider */
33
+ getProvider(name: string): SQLProvider | undefined;
34
+ /** Connect to a source */
35
+ connect(name: string): Promise<void>;
36
+ /** Disconnect from a source */
37
+ disconnect(name: string): Promise<void>;
38
+ /** Connect to all sources */
39
+ connectAll(): Promise<void>;
40
+ /** Disconnect from all sources */
41
+ disconnectAll(): Promise<void>;
42
+ /** Get source status */
43
+ getStatus(name: string): Promise<ProviderStatus | null>;
44
+ /** Get all statuses */
45
+ getAllStatuses(): Promise<Map<string, ProviderStatus>>;
46
+ /** Health check all sources */
47
+ healthCheck(): Promise<Map<string, boolean>>;
48
+ /** Set primary source */
49
+ setPrimary(provider: SQLProviderType, mode: ConnectionMode, connection: ConnectionConfig): Promise<void>;
50
+ /** Get primary provider */
51
+ getPrimary(): SQLProvider | undefined;
52
+ }
53
+ /**
54
+ * Create source manager
55
+ */
56
+ export declare function createSourceManager(logger: PluginLogger, tablePrefix?: string): SourceManager;
57
+ //# sourceMappingURL=source-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-manager.d.ts","sourceRoot":"","sources":["../../src/federation/source-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,sBAAsB;IACtB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,2BAA2B;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IAEnD,sBAAsB;IACtB,aAAa,IAAI,aAAa,EAAE,CAAC;IAEjC,0BAA0B;IAC1B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAEnD,0BAA0B;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,+BAA+B;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC,6BAA6B;IAC7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,kCAAkC;IAClC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B,wBAAwB;IACxB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAExD,uBAAuB;IACvB,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7C,yBAAyB;IACzB,UAAU,CACR,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,2BAA2B;IAC3B,UAAU,IAAI,WAAW,GAAG,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CAqRf"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Source Manager
3
+ *
4
+ * Manages multiple data sources with connection pooling and health monitoring.
5
+ */
6
+ import { createProvider } from '../providers/index.js';
7
+ /**
8
+ * Create source manager
9
+ */
10
+ export function createSourceManager(logger, tablePrefix) {
11
+ const sources = new Map();
12
+ let primaryProvider;
13
+ /**
14
+ * Add a source
15
+ */
16
+ async function addSource(config) {
17
+ if (sources.has(config.name)) {
18
+ throw new Error(`Source '${config.name}' already exists`);
19
+ }
20
+ logger.info(`Adding source: ${config.name} (${config.provider})`);
21
+ const provider = await createProvider(config.provider, config.mode, config.connection, logger, tablePrefix);
22
+ sources.set(config.name, {
23
+ name: config.name,
24
+ config,
25
+ provider,
26
+ status: 'disconnected',
27
+ });
28
+ }
29
+ /**
30
+ * Remove a source
31
+ */
32
+ async function removeSource(name) {
33
+ const source = sources.get(name);
34
+ if (!source) {
35
+ throw new Error(`Source '${name}' not found`);
36
+ }
37
+ // Disconnect if connected
38
+ if (source.provider.isConnected()) {
39
+ await source.provider.disconnect();
40
+ }
41
+ sources.delete(name);
42
+ logger.info(`Removed source: ${name}`);
43
+ }
44
+ /**
45
+ * Get a source
46
+ */
47
+ function getSource(name) {
48
+ return sources.get(name);
49
+ }
50
+ /**
51
+ * Get all sources
52
+ */
53
+ function getAllSources() {
54
+ return Array.from(sources.values());
55
+ }
56
+ /**
57
+ * Get provider
58
+ */
59
+ function getProvider(name) {
60
+ return sources.get(name)?.provider;
61
+ }
62
+ /**
63
+ * Connect to a source
64
+ */
65
+ async function connect(name) {
66
+ const source = sources.get(name);
67
+ if (!source) {
68
+ throw new Error(`Source '${name}' not found`);
69
+ }
70
+ if (source.status === 'connected') {
71
+ return;
72
+ }
73
+ source.status = 'connecting';
74
+ try {
75
+ await source.provider.connect();
76
+ source.status = 'connected';
77
+ source.lastConnected = Date.now();
78
+ source.error = undefined;
79
+ logger.info(`Connected to source: ${name}`);
80
+ }
81
+ catch (error) {
82
+ source.status = 'error';
83
+ source.error = error instanceof Error ? error.message : String(error);
84
+ logger.error(`Failed to connect to source ${name}: ${source.error}`);
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Disconnect from a source
90
+ */
91
+ async function disconnect(name) {
92
+ const source = sources.get(name);
93
+ if (!source) {
94
+ throw new Error(`Source '${name}' not found`);
95
+ }
96
+ if (source.status === 'disconnected') {
97
+ return;
98
+ }
99
+ try {
100
+ await source.provider.disconnect();
101
+ source.status = 'disconnected';
102
+ logger.info(`Disconnected from source: ${name}`);
103
+ }
104
+ catch (error) {
105
+ logger.error(`Error disconnecting from source ${name}: ${error}`);
106
+ throw error;
107
+ }
108
+ }
109
+ /**
110
+ * Connect to all sources
111
+ */
112
+ async function connectAll() {
113
+ const promises = Array.from(sources.keys()).map(async (name) => {
114
+ try {
115
+ await connect(name);
116
+ }
117
+ catch {
118
+ // Logged in connect()
119
+ }
120
+ });
121
+ await Promise.all(promises);
122
+ }
123
+ /**
124
+ * Disconnect from all sources
125
+ */
126
+ async function disconnectAll() {
127
+ const promises = Array.from(sources.keys()).map(async (name) => {
128
+ try {
129
+ await disconnect(name);
130
+ }
131
+ catch {
132
+ // Logged in disconnect()
133
+ }
134
+ });
135
+ await Promise.all(promises);
136
+ // Also disconnect primary
137
+ if (primaryProvider?.isConnected()) {
138
+ await primaryProvider.disconnect();
139
+ }
140
+ }
141
+ /**
142
+ * Get source status
143
+ */
144
+ async function getStatus(name) {
145
+ const source = sources.get(name);
146
+ if (!source) {
147
+ return null;
148
+ }
149
+ if (source.provider.isConnected()) {
150
+ return source.provider.getStatus();
151
+ }
152
+ return {
153
+ connected: false,
154
+ provider: source.config.provider,
155
+ mode: source.config.mode,
156
+ capabilities: {
157
+ json: false,
158
+ vectors: false,
159
+ fullText: false,
160
+ transactions: false,
161
+ },
162
+ error: source.error,
163
+ };
164
+ }
165
+ /**
166
+ * Get all statuses
167
+ */
168
+ async function getAllStatuses() {
169
+ const statuses = new Map();
170
+ for (const name of sources.keys()) {
171
+ const status = await getStatus(name);
172
+ if (status) {
173
+ statuses.set(name, status);
174
+ }
175
+ }
176
+ return statuses;
177
+ }
178
+ /**
179
+ * Health check all sources
180
+ */
181
+ async function healthCheck() {
182
+ const results = new Map();
183
+ for (const [name, source] of sources) {
184
+ try {
185
+ if (source.provider.isConnected()) {
186
+ // Try a simple query
187
+ await source.provider.query('SELECT 1');
188
+ results.set(name, true);
189
+ source.lastHealthCheck = Date.now();
190
+ }
191
+ else {
192
+ results.set(name, false);
193
+ }
194
+ }
195
+ catch {
196
+ results.set(name, false);
197
+ source.status = 'error';
198
+ }
199
+ }
200
+ return results;
201
+ }
202
+ /**
203
+ * Set primary source
204
+ */
205
+ async function setPrimary(provider, mode, connection) {
206
+ // Disconnect existing primary
207
+ if (primaryProvider?.isConnected()) {
208
+ await primaryProvider.disconnect();
209
+ }
210
+ // Create new primary
211
+ primaryProvider = await createProvider(provider, mode, connection, logger, tablePrefix);
212
+ await primaryProvider.connect();
213
+ logger.info(`Primary source set: ${provider} (${mode})`);
214
+ }
215
+ /**
216
+ * Get primary provider
217
+ */
218
+ function getPrimary() {
219
+ return primaryProvider;
220
+ }
221
+ return {
222
+ addSource,
223
+ removeSource,
224
+ getSource,
225
+ getAllSources,
226
+ getProvider,
227
+ connect,
228
+ disconnect,
229
+ connectAll,
230
+ disconnectAll,
231
+ getStatus,
232
+ getAllStatuses,
233
+ healthCheck,
234
+ setPrimary,
235
+ getPrimary,
236
+ };
237
+ }
238
+ //# sourceMappingURL=source-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-manager.js","sourceRoot":"","sources":["../../src/federation/source-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,cAAc,EAAe,MAAM,uBAAuB,CAAC;AAkEpE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAoB,EACpB,WAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,IAAI,eAAwC,CAAC;IAE7C;;OAEG;IACH,KAAK,UAAU,SAAS,CAAC,MAAoB;QAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,UAAU,EACjB,MAAM,EACN,WAAW,CACZ,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,YAAY,CAAC,IAAY;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;QAChD,CAAC;QAED,0BAA0B;QAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,SAAS,SAAS,CAAC,IAAY;QAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS,aAAa;QACpB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,SAAS,WAAW,CAAC,IAAY;QAC/B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,OAAO,CAAC,IAAY;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;YAC5B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;YACxB,MAAM,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,MAAM,CAAC,KAAK,CAAC,+BAA+B,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,UAAU,CAAC,IAAY;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,UAAU;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,aAAa;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5B,0BAA0B;QAC1B,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE,CAAC;YACnC,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,SAAS,CAAC,IAAY;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrC,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;YAChC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,YAAY,EAAE;gBACZ,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,KAAK;aACpB;YACD,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,cAAc;QAC3B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;QAEnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,WAAW;QACxB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAE3C,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;oBAClC,qBAAqB;oBACrB,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACxC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACxB,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACzB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,UAAU,CACvB,QAAyB,EACzB,IAAoB,EACpB,UAA4B;QAE5B,8BAA8B;QAC9B,IAAI,eAAe,EAAE,WAAW,EAAE,EAAE,CAAC;YACnC,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;QACrC,CAAC;QAED,qBAAqB;QACrB,eAAe,GAAG,MAAM,cAAc,CACpC,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,MAAM,EACN,WAAW,CACZ,CAAC;QAEF,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,IAAI,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,SAAS,UAAU;QACjB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY;QACZ,SAAS;QACT,aAAa;QACb,WAAW;QACX,OAAO;QACP,UAAU;QACV,UAAU;QACV,aAAa;QACb,SAAS;QACT,cAAc;QACd,WAAW;QACX,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC"}