@agelum/backend 0.1.1 → 0.1.2

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 (69) hide show
  1. package/dist/client/hooks.d.ts +65 -0
  2. package/dist/client/hooks.d.ts.map +1 -0
  3. package/dist/client/index.d.ts +10 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/manager.d.ts +137 -0
  6. package/dist/client/manager.d.ts.map +1 -0
  7. package/dist/client/provider.d.ts +25 -0
  8. package/dist/client/provider.d.ts.map +1 -0
  9. package/dist/client/revalidation.d.ts +101 -0
  10. package/dist/client/revalidation.d.ts.map +1 -0
  11. package/dist/client/sse-client.d.ts +81 -0
  12. package/dist/client/sse-client.d.ts.map +1 -0
  13. package/dist/client/storage.d.ts +126 -0
  14. package/dist/client/storage.d.ts.map +1 -0
  15. package/dist/client/trpc.d.ts +12 -0
  16. package/dist/client/trpc.d.ts.map +1 -0
  17. package/dist/client.d.ts +12 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/config/schema.d.ts +250 -0
  20. package/dist/config/schema.d.ts.map +1 -0
  21. package/dist/config/schema.js +69 -0
  22. package/dist/config/schema.js.map +1 -0
  23. package/dist/core/analyzer.d.ts +15 -0
  24. package/dist/core/analyzer.d.ts.map +1 -0
  25. package/dist/core/driver.d.ts +7 -0
  26. package/dist/core/driver.d.ts.map +1 -0
  27. package/dist/core/driver.js +262 -0
  28. package/dist/core/driver.js.map +1 -0
  29. package/dist/core/function.d.ts +103 -0
  30. package/dist/core/function.d.ts.map +1 -0
  31. package/dist/core/function.js +252 -0
  32. package/dist/core/function.js.map +1 -0
  33. package/dist/core/sse.d.ts +98 -0
  34. package/dist/core/sse.d.ts.map +1 -0
  35. package/dist/core/types.d.ts +196 -0
  36. package/dist/core/types.d.ts.map +1 -0
  37. package/dist/core/types.js +3 -0
  38. package/dist/core/types.js.map +1 -0
  39. package/dist/examples/teamhub-integration.d.ts +56 -0
  40. package/dist/examples/teamhub-integration.d.ts.map +1 -0
  41. package/dist/examples/teamhub-integration.js +192 -0
  42. package/dist/examples/teamhub-integration.js.map +1 -0
  43. package/dist/index.d.ts +40 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +57 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/providers/localStorage.d.ts +13 -0
  48. package/dist/providers/localStorage.d.ts.map +1 -0
  49. package/dist/providers/memory.d.ts +13 -0
  50. package/dist/providers/memory.d.ts.map +1 -0
  51. package/dist/providers/redis.d.ts +14 -0
  52. package/dist/providers/redis.d.ts.map +1 -0
  53. package/dist/server.d.ts +18 -0
  54. package/dist/server.d.ts.map +1 -0
  55. package/dist/server.js +34 -0
  56. package/dist/server.js.map +1 -0
  57. package/dist/trpc/index.d.ts +9 -0
  58. package/dist/trpc/index.d.ts.map +1 -0
  59. package/dist/trpc/index.js +19 -0
  60. package/dist/trpc/index.js.map +1 -0
  61. package/dist/trpc/router.d.ts +76 -0
  62. package/dist/trpc/router.d.ts.map +1 -0
  63. package/dist/trpc/router.js +177 -0
  64. package/dist/trpc/router.js.map +1 -0
  65. package/dist/trpc/types.d.ts +114 -0
  66. package/dist/trpc/types.d.ts.map +1 -0
  67. package/dist/trpc/types.js +6 -0
  68. package/dist/trpc/types.js.map +1 -0
  69. package/package.json +1 -1
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Define reactive functions with explicit dependencies
3
+ * Core building block that works both standalone and with tRPC
4
+ */
5
+ import { z } from 'zod';
6
+ import type { ReactiveDb, ReactiveFunctionContext } from './types';
7
+ /**
8
+ * Options passed to tRPC handler
9
+ */
10
+ export interface TrpcHandlerOptions<TInput> {
11
+ input: TInput;
12
+ }
13
+ export interface ReactiveFunctionConfig<TInput = unknown, TOutput = unknown> {
14
+ /** Function name (used for cache keys and tRPC procedure names) */
15
+ name: string;
16
+ /** Input validation schema */
17
+ input: z.ZodType<TInput>;
18
+ /** Tables this function depends on (for cache invalidation) */
19
+ dependencies: string[];
20
+ /** Optional: Specific invalidation conditions */
21
+ invalidateWhen?: Record<string, (change: InvalidationChange) => boolean>;
22
+ /** Cache configuration */
23
+ cache?: {
24
+ enabled?: boolean;
25
+ ttl?: number;
26
+ key?: (input: TInput) => string;
27
+ };
28
+ /** The actual function logic - receives context with input and db */
29
+ handler: (ctx: ReactiveFunctionContext<TInput>) => Promise<TOutput>;
30
+ }
31
+ export interface InvalidationChange {
32
+ table: string;
33
+ operation: 'INSERT' | 'UPDATE' | 'DELETE';
34
+ keys: string[];
35
+ timestamp: number;
36
+ }
37
+ export interface ReactiveFunction<TInput = unknown, TOutput = unknown> {
38
+ /** Function configuration */
39
+ config: ReactiveFunctionConfig<TInput, TOutput>;
40
+ /** Execute the function standalone (server-side) */
41
+ execute: (input: TInput, db: ReactiveDb) => Promise<TOutput>;
42
+ /** Get cache key for input */
43
+ getCacheKey: (input: TInput) => string;
44
+ /** Check if function should be invalidated by a change */
45
+ shouldInvalidate: (change: InvalidationChange) => boolean;
46
+ /** Get function metadata for tRPC integration */
47
+ getMetadata: () => ReactiveFunctionMetadata;
48
+ /** Get tRPC-compatible handler (for tRPC router integration) */
49
+ getTrpcHandler: (db: ReactiveDb) => (opts: TrpcHandlerOptions<TInput>) => Promise<TOutput>;
50
+ }
51
+ export interface ReactiveFunctionMetadata {
52
+ name: string;
53
+ dependencies: string[];
54
+ cacheEnabled: boolean;
55
+ cacheTtl: number;
56
+ hasInvalidationRules: boolean;
57
+ }
58
+ /**
59
+ * Define a reactive function - the core building block
60
+ */
61
+ export declare function defineReactiveFunction<TInput, TOutput>(config: ReactiveFunctionConfig<TInput, TOutput>): ReactiveFunction<TInput, TOutput>;
62
+ /**
63
+ * Registry for managing reactive functions
64
+ */
65
+ export declare class ReactiveFunctionRegistry {
66
+ private functions;
67
+ /**
68
+ * Register a reactive function
69
+ */
70
+ register<TInput, TOutput>(name: string, fn: ReactiveFunction<TInput, TOutput>): void;
71
+ /**
72
+ * Execute a registered function
73
+ */
74
+ execute<T>(name: string, input: unknown, db: ReactiveDb): Promise<T>;
75
+ /**
76
+ * Get function by name
77
+ */
78
+ get(name: string): ReactiveFunction<unknown, unknown> | undefined;
79
+ /**
80
+ * Get all registered function names
81
+ */
82
+ getFunctionNames(): string[];
83
+ /**
84
+ * Get registry statistics
85
+ */
86
+ getStats(): {
87
+ totalFunctions: number;
88
+ functionsByDependency: Record<string, string[]>;
89
+ };
90
+ /**
91
+ * Clear all functions
92
+ */
93
+ clear(): void;
94
+ }
95
+ /**
96
+ * Get or create global reactive function registry
97
+ */
98
+ export declare function getReactiveFunctionRegistry(): ReactiveFunctionRegistry;
99
+ /**
100
+ * Helper to register a reactive function globally
101
+ */
102
+ export declare function registerReactiveFunction<TInput, TOutput>(name: string, config: ReactiveFunctionConfig<TInput, TOutput>): ReactiveFunction<TInput, TOutput>;
103
+ //# sourceMappingURL=function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/core/function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ /**
3
+ * Define reactive functions with explicit dependencies
4
+ * Core building block that works both standalone and with tRPC
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ReactiveFunctionRegistry = void 0;
8
+ exports.defineReactiveFunction = defineReactiveFunction;
9
+ exports.getReactiveFunctionRegistry = getReactiveFunctionRegistry;
10
+ exports.registerReactiveFunction = registerReactiveFunction;
11
+ /**
12
+ * Define a reactive function - the core building block
13
+ */
14
+ function defineReactiveFunction(config) {
15
+ // Validate configuration
16
+ if (!config.name) {
17
+ throw new Error('ReactiveFunction requires name');
18
+ }
19
+ if (!config.input) {
20
+ throw new Error('ReactiveFunction requires input schema');
21
+ }
22
+ if (!config.dependencies || config.dependencies.length === 0) {
23
+ throw new Error('ReactiveFunction requires dependencies array');
24
+ }
25
+ if (!config.handler) {
26
+ throw new Error('ReactiveFunction requires handler function');
27
+ }
28
+ // Default cache configuration
29
+ const cacheConfig = {
30
+ enabled: true,
31
+ ttl: 300, // 5 minutes default
32
+ key: (input) => `${config.name}:${JSON.stringify(input)}`,
33
+ ...config.cache,
34
+ };
35
+ /**
36
+ * Execute the function (standalone server-side execution)
37
+ */
38
+ const execute = async (input, db) => {
39
+ // Validate input
40
+ const validatedInput = config.input.parse(input);
41
+ // Generate cache key
42
+ const cacheKey = getCacheKey(validatedInput);
43
+ console.log(`[ReactiveFunction] Executing function with cache key: ${cacheKey}`);
44
+ try {
45
+ // Check cache if enabled
46
+ if (cacheConfig.enabled) {
47
+ const cached = await getCachedResult(db, cacheKey);
48
+ if (cached && !isCacheStale(cached, cacheConfig.ttl)) {
49
+ console.log(`[ReactiveFunction] Cache hit for ${cacheKey}`);
50
+ return cached.data;
51
+ }
52
+ }
53
+ // Execute function handler - clean and simple
54
+ const result = await config.handler({ input: validatedInput, db });
55
+ // Cache result if enabled
56
+ if (cacheConfig.enabled) {
57
+ await cacheResult(db, cacheKey, result, cacheConfig.ttl, {
58
+ dependencies: config.dependencies,
59
+ timestamp: Date.now(),
60
+ });
61
+ }
62
+ return result;
63
+ }
64
+ catch (error) {
65
+ console.error(`[ReactiveFunction] Execution error for ${cacheKey}:`, error);
66
+ throw error;
67
+ }
68
+ };
69
+ /**
70
+ * Get cache key for input
71
+ */
72
+ const getCacheKey = (input) => {
73
+ return cacheConfig.key(input);
74
+ };
75
+ /**
76
+ * Check if function should be invalidated by a change
77
+ */
78
+ const shouldInvalidate = (change) => {
79
+ // Check if the changed table is in our dependencies
80
+ if (!config.dependencies.includes(change.table)) {
81
+ return false;
82
+ }
83
+ // Check custom invalidation rules
84
+ if (config.invalidateWhen && config.invalidateWhen[change.table]) {
85
+ try {
86
+ return config.invalidateWhen[change.table](change);
87
+ }
88
+ catch (error) {
89
+ console.warn('[ReactiveFunction] Invalidation rule error:', error);
90
+ // Default to invalidate on error for safety
91
+ return true;
92
+ }
93
+ }
94
+ // Default: invalidate if table is in dependencies
95
+ return true;
96
+ };
97
+ /**
98
+ * Get function metadata for tRPC integration
99
+ */
100
+ const getMetadata = () => {
101
+ return {
102
+ name: config.name,
103
+ dependencies: config.dependencies,
104
+ cacheEnabled: cacheConfig.enabled,
105
+ cacheTtl: cacheConfig.ttl,
106
+ hasInvalidationRules: !!config.invalidateWhen,
107
+ };
108
+ };
109
+ /**
110
+ * Get tRPC-compatible handler that wraps the reactive function
111
+ */
112
+ const getTrpcHandler = (db) => {
113
+ return async (opts) => {
114
+ // Simply delegate to the execute method with the reactive database
115
+ return execute(opts.input, db);
116
+ };
117
+ };
118
+ return {
119
+ config,
120
+ execute,
121
+ getCacheKey,
122
+ shouldInvalidate,
123
+ getMetadata,
124
+ getTrpcHandler,
125
+ };
126
+ }
127
+ /**
128
+ * Registry for managing reactive functions
129
+ */
130
+ class ReactiveFunctionRegistry {
131
+ functions = new Map();
132
+ /**
133
+ * Register a reactive function
134
+ */
135
+ register(name, fn) {
136
+ this.functions.set(name, fn);
137
+ console.log(`[ReactiveRegistry] Registered function: ${name}`);
138
+ }
139
+ /**
140
+ * Execute a registered function
141
+ */
142
+ async execute(name, input, db) {
143
+ const fn = this.functions.get(name);
144
+ if (!fn) {
145
+ throw new Error(`ReactiveFunction '${name}' not found`);
146
+ }
147
+ return fn.execute(input, db);
148
+ }
149
+ /**
150
+ * Get function by name
151
+ */
152
+ get(name) {
153
+ return this.functions.get(name);
154
+ }
155
+ /**
156
+ * Get all registered function names
157
+ */
158
+ getFunctionNames() {
159
+ return Array.from(this.functions.keys());
160
+ }
161
+ /**
162
+ * Get registry statistics
163
+ */
164
+ getStats() {
165
+ const functionsByDependency = {};
166
+ for (const [name, fn] of this.functions) {
167
+ const metadata = fn.getMetadata();
168
+ for (const dep of metadata.dependencies) {
169
+ if (!functionsByDependency[dep]) {
170
+ functionsByDependency[dep] = [];
171
+ }
172
+ functionsByDependency[dep].push(name);
173
+ }
174
+ }
175
+ return {
176
+ totalFunctions: this.functions.size,
177
+ functionsByDependency,
178
+ };
179
+ }
180
+ /**
181
+ * Clear all functions
182
+ */
183
+ clear() {
184
+ this.functions.clear();
185
+ console.log('[ReactiveRegistry] Cleared all functions');
186
+ }
187
+ }
188
+ exports.ReactiveFunctionRegistry = ReactiveFunctionRegistry;
189
+ // Global registry instance
190
+ let globalRegistry = null;
191
+ /**
192
+ * Get or create global reactive function registry
193
+ */
194
+ function getReactiveFunctionRegistry() {
195
+ if (!globalRegistry) {
196
+ globalRegistry = new ReactiveFunctionRegistry();
197
+ }
198
+ return globalRegistry;
199
+ }
200
+ /**
201
+ * Helper to register a reactive function globally
202
+ */
203
+ function registerReactiveFunction(name, config) {
204
+ const fn = defineReactiveFunction(config);
205
+ const registry = getReactiveFunctionRegistry();
206
+ registry.register(name, fn);
207
+ return fn;
208
+ }
209
+ /**
210
+ * Get cached result from database
211
+ */
212
+ async function getCachedResult(db, cacheKey) {
213
+ try {
214
+ // In a real implementation, this would use the cache provider
215
+ // For now, we simulate cache behavior
216
+ return null;
217
+ }
218
+ catch (error) {
219
+ console.warn(`[ReactiveFunction] Cache get error:`, error);
220
+ return null;
221
+ }
222
+ }
223
+ /**
224
+ * Check if cached result is stale
225
+ */
226
+ function isCacheStale(cached, ttl) {
227
+ const age = Date.now() - cached.timestamp;
228
+ return age > ttl * 1000; // Convert TTL to milliseconds
229
+ }
230
+ /**
231
+ * Cache function result
232
+ */
233
+ async function cacheResult(db, cacheKey, data, ttl, metadata) {
234
+ try {
235
+ // In a real implementation, this would use the cache provider
236
+ console.log(`[ReactiveFunction] Caching result for ${cacheKey} with TTL ${ttl}s`);
237
+ // Store with metadata for invalidation
238
+ const cacheEntry = {
239
+ data,
240
+ timestamp: Date.now(),
241
+ ttl: ttl * 1000,
242
+ metadata,
243
+ };
244
+ // This would actually cache the data
245
+ // await db.setCache(cacheKey, cacheEntry, ttl)
246
+ void cacheEntry; // Suppress unused variable warning until implemented
247
+ }
248
+ catch (error) {
249
+ console.warn(`[ReactiveFunction] Cache set error:`, error);
250
+ }
251
+ }
252
+ //# sourceMappingURL=function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/core/function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Server-Sent Events implementation for real-time cache invalidation
3
+ * Perfect for unidirectional communication with automatic reconnection
4
+ */
5
+ import type { InvalidationEvent } from './types';
6
+ export interface SSEConnection {
7
+ organizationId: string;
8
+ controller: ReadableStreamDefaultController;
9
+ lastActivity: number;
10
+ isActive: boolean;
11
+ }
12
+ export interface PendingEvent {
13
+ id: string;
14
+ organizationId: string;
15
+ data: InvalidationEvent;
16
+ timestamp: number;
17
+ delivered: boolean;
18
+ retryCount: number;
19
+ maxRetries: number;
20
+ }
21
+ /**
22
+ * SSE Manager for reliable real-time communication
23
+ * NO HEARTBEATS - uses event acknowledgments and connection monitoring instead
24
+ */
25
+ export declare class SSEManager {
26
+ private connections;
27
+ private pendingEvents;
28
+ private retrySchedule;
29
+ private connectionMonitorInterval;
30
+ constructor();
31
+ /**
32
+ * Create SSE stream for an organization
33
+ */
34
+ createSSEStream(organizationId: string): Response;
35
+ /**
36
+ * Broadcast invalidation event to all connections in an organization
37
+ */
38
+ broadcastInvalidation(organizationId: string, invalidationData: Omit<InvalidationEvent, 'eventId' | 'requiresAck'>): Promise<void>;
39
+ /**
40
+ * Acknowledge event receipt (called by client)
41
+ */
42
+ acknowledgeEvent(eventId: string): void;
43
+ /**
44
+ * Get connection statistics
45
+ */
46
+ getConnectionStats(): {
47
+ totalConnections: number;
48
+ connectionsByOrg: Record<string, number>;
49
+ pendingEvents: number;
50
+ activeEvents: PendingEvent[];
51
+ };
52
+ /**
53
+ * Send event to a specific connection
54
+ */
55
+ private sendEvent;
56
+ /**
57
+ * Add connection to organization
58
+ */
59
+ private addConnection;
60
+ /**
61
+ * Remove connection from organization
62
+ */
63
+ private removeConnection;
64
+ /**
65
+ * Schedule retry for unacknowledged events
66
+ */
67
+ private scheduleRetryIfNeeded;
68
+ /**
69
+ * Monitor connections for health without sending heartbeats
70
+ * Uses activity tracking and error detection instead of periodic messages
71
+ */
72
+ private startConnectionMonitor;
73
+ /**
74
+ * Generate unique event ID
75
+ */
76
+ private generateEventId;
77
+ /**
78
+ * Cleanup resources
79
+ */
80
+ cleanup(): void;
81
+ }
82
+ /**
83
+ * Get or create global SSE manager
84
+ */
85
+ export declare function getSSEManager(): SSEManager;
86
+ /**
87
+ * Create SSE stream for Vercel/Next.js API routes
88
+ */
89
+ export declare function createSSEStream(organizationId: string): Response;
90
+ /**
91
+ * Broadcast invalidation event
92
+ */
93
+ export declare function broadcastInvalidation(organizationId: string, invalidationData: Omit<InvalidationEvent, 'eventId' | 'requiresAck'>): Promise<void>;
94
+ /**
95
+ * Acknowledge event (for API route)
96
+ */
97
+ export declare function acknowledgeEvent(eventId: string): void;
98
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,+BAA+B,CAAA;IAC3C,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,yBAAyB,CAA8B;;IAM/D;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ;IAgDjD;;OAEG;IACG,qBAAqB,CACzB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,aAAa,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC;IAmEhB;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASvC;;OAEG;IACH,kBAAkB,IAAI;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACxC,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,YAAY,EAAE,CAAA;KAC7B;IAsBD;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA6C7B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAuC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAqBhB;AAKD;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAGhE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,aAAa,CAAC,GACnE,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGtD"}
@@ -0,0 +1,196 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * Drizzle database instance type
4
+ * Uses a minimal interface to avoid tight coupling with specific Drizzle versions
5
+ */
6
+ export interface DrizzleDatabase {
7
+ execute: (query: unknown, params?: unknown[]) => Promise<unknown>;
8
+ select: (...args: unknown[]) => unknown;
9
+ insert: (...args: unknown[]) => unknown;
10
+ update: (...args: unknown[]) => unknown;
11
+ delete: (...args: unknown[]) => unknown;
12
+ /** Allow index access for dynamic method calls */
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Core reactive database configuration
17
+ */
18
+ export interface ReactiveConfig {
19
+ /** Table relationships for automatic invalidation */
20
+ relations: Record<string, string[]>;
21
+ /** Cache configuration (optional - smart defaults used) */
22
+ cache?: {
23
+ server?: {
24
+ provider?: 'redis' | 'memory';
25
+ };
26
+ client?: {
27
+ provider?: 'localStorage' | 'sessionStorage';
28
+ };
29
+ };
30
+ /** Real-time configuration (optional - SSE enabled by default) */
31
+ realtime?: {
32
+ enabled?: boolean;
33
+ transport?: 'sse';
34
+ fallback?: 'polling';
35
+ reliability?: {
36
+ acknowledgments?: boolean;
37
+ maxRetries?: number;
38
+ retryDelays?: number[];
39
+ periodicHeartbeat?: false;
40
+ };
41
+ };
42
+ }
43
+ /**
44
+ * Reactive database instance
45
+ */
46
+ export interface ReactiveDb<TDrizzle extends DrizzleDatabase = DrizzleDatabase> {
47
+ /** Original Drizzle database instance */
48
+ db: TDrizzle;
49
+ /** Configuration */
50
+ config: ReactiveConfig;
51
+ /** Execute query with reactive features */
52
+ query: <T>(sql: string, params?: unknown[]) => Promise<T>;
53
+ /** Get cache provider */
54
+ getCache: () => CacheProvider;
55
+ /** Subscribe to invalidation events */
56
+ subscribe: (organizationId: string, callback: InvalidationCallback) => () => void;
57
+ }
58
+ /**
59
+ * Cache provider interface
60
+ */
61
+ export interface CacheProvider {
62
+ get<T>(key: string): Promise<T | null>;
63
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
64
+ del(key: string): Promise<void>;
65
+ invalidate(pattern: string): Promise<void>;
66
+ clear(): Promise<void>;
67
+ }
68
+ /**
69
+ * SQL analysis result
70
+ */
71
+ export interface SqlAnalysis {
72
+ /** Table name */
73
+ table: string;
74
+ /** Operation type */
75
+ operation: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE';
76
+ /** WHERE condition keys */
77
+ whereKeys: string[];
78
+ /** Affected columns */
79
+ columns: string[];
80
+ /** Organization ID if detected */
81
+ organizationId?: string;
82
+ }
83
+ /**
84
+ * Query metadata for caching
85
+ */
86
+ export interface QueryMetadata {
87
+ /** Unique query key */
88
+ key: string;
89
+ /** Tables this query depends on */
90
+ dependencies: string[];
91
+ /** Last execution timestamp */
92
+ lastExecuted: number;
93
+ /** Cache TTL in seconds */
94
+ ttl?: number;
95
+ /** Organization scope */
96
+ organizationId?: string;
97
+ }
98
+ /**
99
+ * Invalidation event
100
+ */
101
+ export interface InvalidationEvent {
102
+ /** Event type */
103
+ type: 'invalidation';
104
+ /** Affected table */
105
+ table: string;
106
+ /** Organization ID */
107
+ organizationId: string;
108
+ /** Affected query keys */
109
+ affectedQueries: string[];
110
+ /** Event ID for acknowledgment */
111
+ eventId: string;
112
+ /** Whether this event requires acknowledgment */
113
+ requiresAck: boolean;
114
+ /** Timestamp */
115
+ timestamp: number;
116
+ /** SQL operation type (INSERT, UPDATE, DELETE) */
117
+ operation?: string;
118
+ /** Affected keys from WHERE clause */
119
+ affectedKeys?: string[];
120
+ }
121
+ /**
122
+ * Invalidation callback
123
+ */
124
+ export type InvalidationCallback = (event: InvalidationEvent) => void;
125
+ /**
126
+ * Client-side query registry
127
+ */
128
+ export interface QueryRegistry {
129
+ /** Organization ID */
130
+ organizationId: string;
131
+ /** Cached queries */
132
+ queries: {
133
+ [queryKey: string]: {
134
+ lastRevalidated: number;
135
+ lastServerChange?: number;
136
+ data?: unknown;
137
+ };
138
+ };
139
+ /** Session information */
140
+ session: {
141
+ startTime: number;
142
+ lastSync: number;
143
+ realtimeConnected: boolean;
144
+ };
145
+ }
146
+ /**
147
+ * Context passed to reactive function handlers
148
+ */
149
+ export interface ReactiveFunctionContext<TInput = unknown> {
150
+ input: TInput;
151
+ db: ReactiveDb;
152
+ }
153
+ /**
154
+ * Reactive function definition
155
+ */
156
+ export interface ReactiveFunctionDefinition<TInput = unknown, TOutput = unknown> {
157
+ /** Unique function ID */
158
+ id: string;
159
+ /** Input validation schema */
160
+ input: z.ZodSchema<TInput>;
161
+ /** Tables this function reads from */
162
+ dependencies: string[];
163
+ /** Optional fine-grained invalidation rules */
164
+ invalidateWhen?: Record<string, (change: TableChange) => boolean>;
165
+ /** Function handler */
166
+ handler: (ctx: ReactiveFunctionContext<TInput>) => Promise<TOutput>;
167
+ }
168
+ /**
169
+ * Table change information
170
+ */
171
+ export interface TableChange {
172
+ /** Table name */
173
+ table: string;
174
+ /** Operation type */
175
+ operation: 'INSERT' | 'UPDATE' | 'DELETE';
176
+ /** Affected keys/IDs */
177
+ keys: string[];
178
+ /** Organization ID */
179
+ organizationId?: string;
180
+ }
181
+ /**
182
+ * Hook state
183
+ */
184
+ export interface HookState {
185
+ /** Query key */
186
+ queryKey: string;
187
+ /** Is currently active */
188
+ isActive: boolean;
189
+ /** Last access time */
190
+ lastAccess: number;
191
+ /** Dependencies */
192
+ dependencies: string[];
193
+ /** Organization scope */
194
+ organizationId?: string;
195
+ }
196
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map