@agelum/backend 0.1.0 → 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 (86) hide show
  1. package/README.md +184 -113
  2. package/dist/client/hooks.d.ts +2 -2
  3. package/dist/client/hooks.d.ts.map +1 -1
  4. package/dist/client/storage.d.ts +3 -1
  5. package/dist/client/storage.d.ts.map +1 -1
  6. package/dist/client.d.ts +8 -8
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/config/schema.d.ts +4 -15
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/core/driver.d.ts +2 -2
  11. package/dist/core/driver.d.ts.map +1 -1
  12. package/dist/core/driver.js +4 -3
  13. package/dist/core/driver.js.map +1 -1
  14. package/dist/core/function.d.ts +17 -11
  15. package/dist/core/function.d.ts.map +1 -1
  16. package/dist/core/function.js +2 -2
  17. package/dist/core/function.js.map +1 -1
  18. package/dist/core/types.d.ts +26 -9
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/examples/teamhub-integration.d.ts +1 -1
  21. package/dist/examples/teamhub-integration.d.ts.map +1 -1
  22. package/dist/examples/teamhub-integration.js +9 -5
  23. package/dist/examples/teamhub-integration.js.map +1 -1
  24. package/dist/index.d.ts +13 -12
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/providers/localStorage.d.ts +1 -1
  29. package/dist/providers/localStorage.d.ts.map +1 -1
  30. package/dist/providers/redis.d.ts +1 -1
  31. package/dist/providers/redis.d.ts.map +1 -1
  32. package/dist/server.d.ts +13 -12
  33. package/dist/server.d.ts.map +1 -1
  34. package/dist/server.js +3 -3
  35. package/dist/server.js.map +1 -1
  36. package/dist/trpc/index.d.ts +9 -0
  37. package/dist/trpc/index.d.ts.map +1 -0
  38. package/dist/trpc/index.js +19 -0
  39. package/dist/trpc/index.js.map +1 -0
  40. package/dist/trpc/router.d.ts +3 -2
  41. package/dist/trpc/router.d.ts.map +1 -1
  42. package/dist/trpc/router.js +21 -4
  43. package/dist/trpc/router.js.map +1 -1
  44. package/dist/trpc/types.d.ts +21 -12
  45. package/dist/trpc/types.d.ts.map +1 -1
  46. package/package.json +13 -13
  47. package/dist/client/hooks.js +0 -339
  48. package/dist/client/hooks.js.map +0 -1
  49. package/dist/client/index.js +0 -37
  50. package/dist/client/index.js.map +0 -1
  51. package/dist/client/manager.js +0 -292
  52. package/dist/client/manager.js.map +0 -1
  53. package/dist/client/provider.js +0 -121
  54. package/dist/client/provider.js.map +0 -1
  55. package/dist/client/revalidation.js +0 -313
  56. package/dist/client/revalidation.js.map +0 -1
  57. package/dist/client/session.d.ts +0 -84
  58. package/dist/client/session.d.ts.map +0 -1
  59. package/dist/client/session.js +0 -186
  60. package/dist/client/session.js.map +0 -1
  61. package/dist/client/sse-client.js +0 -221
  62. package/dist/client/sse-client.js.map +0 -1
  63. package/dist/client/storage.js +0 -441
  64. package/dist/client/storage.js.map +0 -1
  65. package/dist/client/trpc.js +0 -36
  66. package/dist/client/trpc.js.map +0 -1
  67. package/dist/client/types.d.ts +0 -10
  68. package/dist/client/types.d.ts.map +0 -1
  69. package/dist/client/types.js +0 -3
  70. package/dist/client/types.js.map +0 -1
  71. package/dist/client.js +0 -26
  72. package/dist/client.js.map +0 -1
  73. package/dist/core/analyzer.js +0 -217
  74. package/dist/core/analyzer.js.map +0 -1
  75. package/dist/core/sse.js +0 -331
  76. package/dist/core/sse.js.map +0 -1
  77. package/dist/providers/localStorage.js +0 -64
  78. package/dist/providers/localStorage.js.map +0 -1
  79. package/dist/providers/memory.js +0 -40
  80. package/dist/providers/memory.js.map +0 -1
  81. package/dist/providers/redis.js +0 -36
  82. package/dist/providers/redis.js.map +0 -1
  83. package/dist/trpc/hooks.d.ts +0 -82
  84. package/dist/trpc/hooks.d.ts.map +0 -1
  85. package/dist/trpc/hooks.js +0 -282
  86. package/dist/trpc/hooks.js.map +0 -1
@@ -1,313 +0,0 @@
1
- "use strict";
2
- /**
3
- * Smart revalidation system with active hooks priority
4
- * Provides intelligent query revalidation based on user interaction patterns
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.SmartRevalidationEngine = void 0;
8
- exports.createSmartRevalidationEngine = createSmartRevalidationEngine;
9
- class SmartRevalidationEngine {
10
- storage;
11
- config;
12
- activeRevalidations = new Set();
13
- revalidationQueue = new Map();
14
- constructor(storage, config) {
15
- this.storage = storage;
16
- this.config = config;
17
- }
18
- /**
19
- * Create an intelligent revalidation strategy
20
- */
21
- createRevalidationStrategy(invalidatedQueries, options = {}) {
22
- const { maxConcurrent = 3, priorityFirst = true, backgroundDelay = 2000, } = options;
23
- // Get current active hooks for priority
24
- const activeHooks = this.storage.getActiveHooksByPriority();
25
- const activeQueryKeys = new Set(activeHooks.map((hook) => hook.queryKey));
26
- // Categorize queries based on priority and recency
27
- const immediate = [];
28
- const delayed = [];
29
- const background = [];
30
- invalidatedQueries.forEach((queryKey) => {
31
- const isActive = activeQueryKeys.has(queryKey);
32
- const hook = activeHooks.find((h) => h.queryKey === queryKey);
33
- const lastAccess = hook?.lastAccess || 0;
34
- const accessRecency = Date.now() - lastAccess;
35
- if (isActive && accessRecency < 30000) {
36
- // Active and accessed within 30 seconds - immediate
37
- immediate.push(queryKey);
38
- }
39
- else if (isActive && accessRecency < 300000) {
40
- // Active but accessed within 5 minutes - delayed
41
- delayed.push(queryKey);
42
- }
43
- else {
44
- // Not active or old access - background
45
- background.push(queryKey);
46
- }
47
- });
48
- // Sort by priority and recency
49
- const sortByPriority = (queries) => {
50
- return queries.sort((a, b) => {
51
- const hookA = activeHooks.find((h) => h.queryKey === a);
52
- const hookB = activeHooks.find((h) => h.queryKey === b);
53
- if (!hookA && !hookB)
54
- return 0;
55
- if (!hookA)
56
- return 1;
57
- if (!hookB)
58
- return -1;
59
- return hookB.lastAccess - hookA.lastAccess;
60
- });
61
- };
62
- const strategy = {
63
- immediate: sortByPriority(immediate),
64
- delayed: sortByPriority(delayed),
65
- background: sortByPriority(background),
66
- estimatedTime: this.estimateRevalidationTime(immediate, delayed, background, options),
67
- };
68
- console.log(`[SmartRevalidation] Strategy created:`, {
69
- immediate: strategy.immediate.length,
70
- delayed: strategy.delayed.length,
71
- background: strategy.background.length,
72
- estimatedTime: strategy.estimatedTime,
73
- });
74
- return strategy;
75
- }
76
- /**
77
- * Execute the revalidation strategy
78
- */
79
- async executeRevalidationStrategy(strategy, revalidateFn, options = {}) {
80
- const startTime = Date.now();
81
- const result = {
82
- immediate: { successful: 0, failed: 0, duration: 0 },
83
- delayed: { successful: 0, failed: 0, duration: 0 },
84
- background: { successful: 0, failed: 0, duration: 0 },
85
- totalDuration: 0,
86
- overallSuccess: true,
87
- };
88
- try {
89
- // Phase 1: Immediate revalidation (critical queries)
90
- if (strategy.immediate.length > 0) {
91
- console.log(`[SmartRevalidation] Phase 1: ${strategy.immediate.length} immediate queries`);
92
- const immediateStart = Date.now();
93
- const immediateResult = await this.executeQueryBatch(strategy.immediate, revalidateFn, { maxConcurrent: options.maxConcurrent || 3 });
94
- result.immediate = {
95
- successful: immediateResult.successful,
96
- failed: immediateResult.failed,
97
- duration: Date.now() - immediateStart,
98
- };
99
- }
100
- // Phase 2: Delayed revalidation (important but not critical)
101
- if (strategy.delayed.length > 0) {
102
- console.log(`[SmartRevalidation] Phase 2: ${strategy.delayed.length} delayed queries`);
103
- // Small delay to let immediate queries complete
104
- await this.wait(500);
105
- const delayedStart = Date.now();
106
- const delayedResult = await this.executeQueryBatch(strategy.delayed, revalidateFn, { maxConcurrent: Math.max(1, (options.maxConcurrent || 3) - 1) });
107
- result.delayed = {
108
- successful: delayedResult.successful,
109
- failed: delayedResult.failed,
110
- duration: Date.now() - delayedStart,
111
- };
112
- }
113
- // Phase 3: Background revalidation (non-critical)
114
- if (strategy.background.length > 0) {
115
- console.log(`[SmartRevalidation] Phase 3: ${strategy.background.length} background queries`);
116
- // Execute background queries without blocking
117
- this.executeBackgroundRevalidation(strategy.background, revalidateFn, options.backgroundDelay || 2000);
118
- }
119
- result.totalDuration = Date.now() - startTime;
120
- result.overallSuccess =
121
- result.immediate.failed === 0 && result.delayed.failed === 0;
122
- console.log(`[SmartRevalidation] Strategy completed:`, result);
123
- return result;
124
- }
125
- catch (error) {
126
- console.error('[SmartRevalidation] Strategy execution failed:', error);
127
- result.overallSuccess = false;
128
- result.totalDuration = Date.now() - startTime;
129
- return result;
130
- }
131
- }
132
- /**
133
- * Add queries to revalidation queue with priority
134
- */
135
- queueRevalidation(queryKey, priority = 0) {
136
- this.revalidationQueue.set(queryKey, {
137
- priority,
138
- timestamp: Date.now(),
139
- });
140
- }
141
- /**
142
- * Process revalidation queue
143
- */
144
- async processRevalidationQueue(revalidateFn, options = {}) {
145
- if (this.revalidationQueue.size === 0) {
146
- return;
147
- }
148
- console.log(`[SmartRevalidation] Processing queue: ${this.revalidationQueue.size} queries`);
149
- // Convert queue to sorted array
150
- const queuedQueries = Array.from(this.revalidationQueue.entries())
151
- .sort(([, a], [, b]) => {
152
- // Sort by priority (higher first), then by timestamp (older first)
153
- if (a.priority !== b.priority) {
154
- return b.priority - a.priority;
155
- }
156
- return a.timestamp - b.timestamp;
157
- })
158
- .map(([queryKey]) => queryKey);
159
- // Clear the queue
160
- this.revalidationQueue.clear();
161
- // Create strategy for queued queries
162
- const strategy = this.createRevalidationStrategy(queuedQueries, options);
163
- await this.executeRevalidationStrategy(strategy, revalidateFn, options);
164
- }
165
- /**
166
- * Smart invalidation with automatic revalidation
167
- */
168
- async smartInvalidateAndRevalidate(table, revalidateFn, options = {}) {
169
- console.log(`[SmartRevalidation] Smart invalidation for table: ${table}`);
170
- // Invalidate affected queries
171
- this.storage.invalidateByTable(table, this.config.relations);
172
- // Find queries that need revalidation
173
- const allQueries = Object.keys(this.storage.getRegistry()?.queries || {});
174
- const affectedQueries = this.findAffectedQueries(table, allQueries);
175
- if (affectedQueries.length === 0) {
176
- console.log(`[SmartRevalidation] No affected queries for table: ${table}`);
177
- return {
178
- immediate: { successful: 0, failed: 0, duration: 0 },
179
- delayed: { successful: 0, failed: 0, duration: 0 },
180
- background: { successful: 0, failed: 0, duration: 0 },
181
- totalDuration: 0,
182
- overallSuccess: true,
183
- };
184
- }
185
- // Create and execute revalidation strategy
186
- const strategy = this.createRevalidationStrategy(affectedQueries, options);
187
- return await this.executeRevalidationStrategy(strategy, revalidateFn, options);
188
- }
189
- /**
190
- * Execute a batch of queries with concurrency control
191
- */
192
- async executeQueryBatch(queries, revalidateFn, options) {
193
- let successful = 0;
194
- let failed = 0;
195
- // Process in batches to control concurrency
196
- for (let i = 0; i < queries.length; i += options.maxConcurrent) {
197
- const batch = queries.slice(i, i + options.maxConcurrent);
198
- const batchResults = await Promise.allSettled(batch.map(async (queryKey) => {
199
- if (this.activeRevalidations.has(queryKey)) {
200
- console.log(`[SmartRevalidation] Skipping ${queryKey} (already revalidating)`);
201
- return;
202
- }
203
- this.activeRevalidations.add(queryKey);
204
- try {
205
- await revalidateFn(queryKey);
206
- console.log(`[SmartRevalidation] ✅ Revalidated: ${queryKey}`);
207
- return { success: true };
208
- }
209
- catch (error) {
210
- console.warn(`[SmartRevalidation] ❌ Failed: ${queryKey}`, error);
211
- throw error;
212
- }
213
- finally {
214
- this.activeRevalidations.delete(queryKey);
215
- }
216
- }));
217
- batchResults.forEach((result) => {
218
- if (result.status === 'fulfilled') {
219
- successful++;
220
- }
221
- else {
222
- failed++;
223
- }
224
- });
225
- // Small delay between batches to avoid overwhelming the server
226
- if (i + options.maxConcurrent < queries.length) {
227
- await this.wait(100);
228
- }
229
- }
230
- return { successful, failed };
231
- }
232
- /**
233
- * Execute background revalidation with rate limiting
234
- */
235
- async executeBackgroundRevalidation(queries, revalidateFn, delay) {
236
- // Delay before starting background revalidation
237
- setTimeout(async () => {
238
- console.log(`[SmartRevalidation] Starting background revalidation for ${queries.length} queries`);
239
- // Process background queries slowly to avoid interference
240
- for (const queryKey of queries) {
241
- try {
242
- if (!this.activeRevalidations.has(queryKey)) {
243
- this.activeRevalidations.add(queryKey);
244
- await revalidateFn(queryKey);
245
- console.log(`[SmartRevalidation] 🔄 Background revalidated: ${queryKey}`);
246
- this.activeRevalidations.delete(queryKey);
247
- }
248
- }
249
- catch (error) {
250
- console.warn(`[SmartRevalidation] Background revalidation failed: ${queryKey}`, error);
251
- this.activeRevalidations.delete(queryKey);
252
- }
253
- // Longer delay between background queries
254
- await this.wait(500);
255
- }
256
- console.log('[SmartRevalidation] Background revalidation completed');
257
- }, delay);
258
- }
259
- /**
260
- * Find queries affected by table changes
261
- */
262
- findAffectedQueries(table, allQueries) {
263
- const relatedTables = this.config.relations[table] || [];
264
- const tablesToCheck = [table, ...relatedTables];
265
- return allQueries.filter((queryKey) => {
266
- // Simple heuristic: check if query key contains table name
267
- return tablesToCheck.some((tableName) => queryKey.toLowerCase().includes(tableName.toLowerCase()));
268
- });
269
- }
270
- /**
271
- * Estimate total revalidation time
272
- */
273
- estimateRevalidationTime(immediate, delayed, background, options) {
274
- const avgQueryTime = 150; // ms per query
275
- const maxConcurrent = options.maxConcurrent || 3;
276
- const immediateTime = Math.ceil(immediate.length / maxConcurrent) * avgQueryTime;
277
- const delayedTime = Math.ceil(delayed.length / maxConcurrent) * avgQueryTime;
278
- const backgroundTime = background.length * avgQueryTime; // Sequential for background
279
- return immediateTime + delayedTime + backgroundTime / 4; // Background is parallel
280
- }
281
- /**
282
- * Utility to wait for a specified time
283
- */
284
- wait(ms) {
285
- return new Promise((resolve) => setTimeout(resolve, ms));
286
- }
287
- /**
288
- * Get current revalidation statistics
289
- */
290
- getRevalidationStats() {
291
- const activeHooks = this.storage.getActiveHooks();
292
- return {
293
- activeRevalidations: this.activeRevalidations.size,
294
- queuedQueries: this.revalidationQueue.size,
295
- activeHooks: activeHooks.length,
296
- recentActivity: activeHooks
297
- .sort((a, b) => b.lastAccess - a.lastAccess)
298
- .slice(0, 5)
299
- .map((hook) => ({
300
- queryKey: hook.queryKey,
301
- timestamp: hook.lastAccess,
302
- })),
303
- };
304
- }
305
- }
306
- exports.SmartRevalidationEngine = SmartRevalidationEngine;
307
- /**
308
- * Create a smart revalidation engine
309
- */
310
- function createSmartRevalidationEngine(storage, config) {
311
- return new SmartRevalidationEngine(storage, config);
312
- }
313
- //# sourceMappingURL=revalidation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"revalidation.js","sourceRoot":"","sources":["../../src/client/revalidation.ts"],"names":[],"mappings":"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"}
@@ -1,84 +0,0 @@
1
- /**
2
- * Simple session gap detection as described in the spec
3
- *
4
- * Just tracks basic session info in QueryRegistry and
5
- * does smart revalidation on page load
6
- */
7
- export interface SessionInfo {
8
- startTime: number;
9
- lastSync: number;
10
- realtimeConnected: boolean;
11
- }
12
- export interface QueryRegistryEntry {
13
- lastRevalidated: number;
14
- lastServerChange?: number;
15
- data?: any;
16
- }
17
- export interface QueryRegistry {
18
- organizationId: string;
19
- queries: Record<string, QueryRegistryEntry>;
20
- session: SessionInfo;
21
- }
22
- /**
23
- * Simple session gap detection (as per spec)
24
- */
25
- export declare class SimpleSessionManager {
26
- private organizationId;
27
- private storage;
28
- constructor(organizationId: string, storage?: Storage);
29
- /**
30
- * Get current query registry from localStorage
31
- */
32
- getQueryRegistry(): QueryRegistry;
33
- /**
34
- * Save query registry to localStorage
35
- */
36
- saveQueryRegistry(registry: QueryRegistry): void;
37
- /**
38
- * Update session sync time
39
- */
40
- updateLastSync(): void;
41
- /**
42
- * Set realtime connection status
43
- */
44
- setRealtimeConnected(connected: boolean): void;
45
- /**
46
- * Check if we should revalidate on page load (simple gap detection)
47
- */
48
- shouldRevalidateOnLoad(): {
49
- shouldRevalidate: boolean;
50
- reason: string;
51
- staleCacheAge: number;
52
- };
53
- /**
54
- * Get stale queries that need revalidation
55
- */
56
- getStaleQueries(maxAge?: number): string[];
57
- /**
58
- * Record query execution
59
- */
60
- recordQuery(queryKey: string, data?: any): void;
61
- /**
62
- * Mark query as invalidated (from server event)
63
- */
64
- markQueryInvalidated(queryKey: string): void;
65
- /**
66
- * Get basic session stats
67
- */
68
- getSessionStats(): {
69
- sessionAge: number;
70
- timeSinceLastSync: number;
71
- realtimeConnected: boolean;
72
- totalQueries: number;
73
- staleQueries: number;
74
- };
75
- }
76
- /**
77
- * Smart revalidation on page load (as per spec)
78
- */
79
- export declare function revalidateOnPageLoad(sessionManager: SimpleSessionManager, activeHookQueries: string[], revalidateQuery: (queryKey: string) => Promise<any>): Promise<void>;
80
- /**
81
- * Create simple session manager
82
- */
83
- export declare function createSimpleSessionManager(organizationId: string, storage?: Storage): SimpleSessionManager;
84
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,GAAG,CAAA;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IAC3C,OAAO,EAAE,WAAW,CAAA;CACrB;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE,OAAsB;IAKnE;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAwBjC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAWhD;;OAEG;IACH,cAAc,IAAI,IAAI;IAMtB;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAM9C;;OAEG;IACH,sBAAsB,IAAI;QACxB,gBAAgB,EAAE,OAAO,CAAA;QACzB,MAAM,EAAE,MAAM,CAAA;QACd,aAAa,EAAE,MAAM,CAAA;KACtB;IA6BD;;OAEG;IACH,eAAe,CAAC,MAAM,GAAE,MAAsB,GAAG,MAAM,EAAE;IAezD;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAY/C;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAS5C;;OAEG;IACH,eAAe,IAAI;QACjB,UAAU,EAAE,MAAM,CAAA;QAClB,iBAAiB,EAAE,MAAM,CAAA;QACzB,iBAAiB,EAAE,OAAO,CAAA;QAC1B,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;KACrB;CAaF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,oBAAoB,EACpC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,OAAO,GAChB,oBAAoB,CAEtB"}
@@ -1,186 +0,0 @@
1
- "use strict";
2
- /**
3
- * Simple session gap detection as described in the spec
4
- *
5
- * Just tracks basic session info in QueryRegistry and
6
- * does smart revalidation on page load
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SimpleSessionManager = void 0;
10
- exports.revalidateOnPageLoad = revalidateOnPageLoad;
11
- exports.createSimpleSessionManager = createSimpleSessionManager;
12
- /**
13
- * Simple session gap detection (as per spec)
14
- */
15
- class SimpleSessionManager {
16
- organizationId;
17
- storage;
18
- constructor(organizationId, storage = localStorage) {
19
- this.organizationId = organizationId;
20
- this.storage = storage;
21
- }
22
- /**
23
- * Get current query registry from localStorage
24
- */
25
- getQueryRegistry() {
26
- try {
27
- const stored = this.storage.getItem(`reactive_registry_${this.organizationId}`);
28
- if (stored) {
29
- return JSON.parse(stored);
30
- }
31
- }
32
- catch (error) {
33
- console.warn('[SimpleSession] Failed to parse stored registry:', error);
34
- }
35
- // Return default registry
36
- return {
37
- organizationId: this.organizationId,
38
- queries: {},
39
- session: {
40
- startTime: Date.now(),
41
- lastSync: Date.now(),
42
- realtimeConnected: false,
43
- },
44
- };
45
- }
46
- /**
47
- * Save query registry to localStorage
48
- */
49
- saveQueryRegistry(registry) {
50
- try {
51
- this.storage.setItem(`reactive_registry_${this.organizationId}`, JSON.stringify(registry));
52
- }
53
- catch (error) {
54
- console.warn('[SimpleSession] Failed to save registry:', error);
55
- }
56
- }
57
- /**
58
- * Update session sync time
59
- */
60
- updateLastSync() {
61
- const registry = this.getQueryRegistry();
62
- registry.session.lastSync = Date.now();
63
- this.saveQueryRegistry(registry);
64
- }
65
- /**
66
- * Set realtime connection status
67
- */
68
- setRealtimeConnected(connected) {
69
- const registry = this.getQueryRegistry();
70
- registry.session.realtimeConnected = connected;
71
- this.saveQueryRegistry(registry);
72
- }
73
- /**
74
- * Check if we should revalidate on page load (simple gap detection)
75
- */
76
- shouldRevalidateOnLoad() {
77
- const registry = this.getQueryRegistry();
78
- const now = Date.now();
79
- const timeSinceLastSync = now - registry.session.lastSync;
80
- // Simple heuristic: if it's been more than 5 minutes since last sync,
81
- // or if realtime was disconnected, we should revalidate
82
- const shouldRevalidate = timeSinceLastSync > 5 * 60 * 1000 || // 5 minutes
83
- !registry.session.realtimeConnected;
84
- let reason = '';
85
- if (timeSinceLastSync > 5 * 60 * 1000) {
86
- reason = `Stale cache (${Math.round(timeSinceLastSync / 1000 / 60)}m since last sync)`;
87
- }
88
- else if (!registry.session.realtimeConnected) {
89
- reason = 'Realtime was disconnected';
90
- }
91
- else {
92
- reason = 'Cache is fresh';
93
- }
94
- return {
95
- shouldRevalidate,
96
- reason,
97
- staleCacheAge: timeSinceLastSync,
98
- };
99
- }
100
- /**
101
- * Get stale queries that need revalidation
102
- */
103
- getStaleQueries(maxAge = 5 * 60 * 1000) {
104
- const registry = this.getQueryRegistry();
105
- const now = Date.now();
106
- const staleQueries = [];
107
- for (const [queryKey, entry] of Object.entries(registry.queries)) {
108
- const age = now - entry.lastRevalidated;
109
- if (age > maxAge) {
110
- staleQueries.push(queryKey);
111
- }
112
- }
113
- return staleQueries;
114
- }
115
- /**
116
- * Record query execution
117
- */
118
- recordQuery(queryKey, data) {
119
- const registry = this.getQueryRegistry();
120
- registry.queries[queryKey] = {
121
- lastRevalidated: Date.now(),
122
- lastServerChange: Date.now(),
123
- data,
124
- };
125
- this.saveQueryRegistry(registry);
126
- }
127
- /**
128
- * Mark query as invalidated (from server event)
129
- */
130
- markQueryInvalidated(queryKey) {
131
- const registry = this.getQueryRegistry();
132
- if (registry.queries[queryKey]) {
133
- registry.queries[queryKey].lastServerChange = Date.now();
134
- this.saveQueryRegistry(registry);
135
- }
136
- }
137
- /**
138
- * Get basic session stats
139
- */
140
- getSessionStats() {
141
- const registry = this.getQueryRegistry();
142
- const now = Date.now();
143
- const staleQueries = this.getStaleQueries();
144
- return {
145
- sessionAge: now - registry.session.startTime,
146
- timeSinceLastSync: now - registry.session.lastSync,
147
- realtimeConnected: registry.session.realtimeConnected,
148
- totalQueries: Object.keys(registry.queries).length,
149
- staleQueries: staleQueries.length,
150
- };
151
- }
152
- }
153
- exports.SimpleSessionManager = SimpleSessionManager;
154
- /**
155
- * Smart revalidation on page load (as per spec)
156
- */
157
- async function revalidateOnPageLoad(sessionManager, activeHookQueries, revalidateQuery) {
158
- console.log('[SimpleSession] Checking for session gap on page load');
159
- const gapCheck = sessionManager.shouldRevalidateOnLoad();
160
- console.log(`[SimpleSession] Gap check: ${gapCheck.reason}`);
161
- if (!gapCheck.shouldRevalidate) {
162
- console.log('[SimpleSession] Cache is fresh, no revalidation needed');
163
- return;
164
- }
165
- // 1. Active hooks first (what user sees) - immediate
166
- console.log(`[SimpleSession] Revalidating ${activeHookQueries.length} active queries`);
167
- await Promise.all(activeHookQueries.map((queryKey) => revalidateQuery(queryKey)));
168
- // 2. Background revalidation after delay - non-blocking
169
- setTimeout(async () => {
170
- const staleQueries = sessionManager.getStaleQueries();
171
- const backgroundQueries = staleQueries.filter((q) => !activeHookQueries.includes(q));
172
- if (backgroundQueries.length > 0) {
173
- console.log(`[SimpleSession] Background revalidating ${backgroundQueries.length} stale queries`);
174
- await Promise.allSettled(backgroundQueries.map((queryKey) => revalidateQuery(queryKey)));
175
- }
176
- }, 2000);
177
- // Update last sync time
178
- sessionManager.updateLastSync();
179
- }
180
- /**
181
- * Create simple session manager
182
- */
183
- function createSimpleSessionManager(organizationId, storage) {
184
- return new SimpleSessionManager(organizationId, storage);
185
- }
186
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAuMH,oDA0CC;AAKD,gEAKC;AAvOD;;GAEG;AACH,MAAa,oBAAoB;IACvB,cAAc,CAAQ;IACtB,OAAO,CAAS;IAExB,YAAY,cAAsB,EAAE,UAAmB,YAAY;QACjE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACjC,qBAAqB,IAAI,CAAC,cAAc,EAAE,CAC3C,CAAA;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAA;QACzE,CAAC;QAED,0BAA0B;QAC1B,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;gBACpB,iBAAiB,EAAE,KAAK;aACzB;SACF,CAAA;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAuB;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAClB,qBAAqB,IAAI,CAAC,cAAc,EAAE,EAC1C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzB,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,SAAkB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAA;QAC9C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,sBAAsB;QAKpB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,iBAAiB,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAA;QAEzD,sEAAsE;QACtE,wDAAwD;QACxD,MAAM,gBAAgB,GACpB,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY;YACjD,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAA;QAErC,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YACtC,MAAM,GAAG,gBAAgB,IAAI,CAAC,KAAK,CACjC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAC9B,oBAAoB,CAAA;QACvB,CAAC;aAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC/C,MAAM,GAAG,2BAA2B,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,gBAAgB,CAAA;QAC3B,CAAC;QAED,OAAO;YACL,gBAAgB;YAChB,MAAM;YACN,aAAa,EAAE,iBAAiB;SACjC,CAAA;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB,CAAC,GAAG,EAAE,GAAG,IAAI;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,YAAY,GAAa,EAAE,CAAA;QAEjC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,eAAe,CAAA;YACvC,IAAI,GAAG,GAAG,MAAM,EAAE,CAAC;gBACjB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB,EAAE,IAAU;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAExC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;YAC3B,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;YAC3B,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI;SACL,CAAA;QAED,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAgB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAExC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe;QAOb,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE3C,OAAO;YACL,UAAU,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS;YAC5C,iBAAiB,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ;YAClD,iBAAiB,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB;YACrD,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM;YAClD,YAAY,EAAE,YAAY,CAAC,MAAM;SAClC,CAAA;IACH,CAAC;CACF;AA3KD,oDA2KC;AAED;;GAEG;AACI,KAAK,UAAU,oBAAoB,CACxC,cAAoC,EACpC,iBAA2B,EAC3B,eAAmD;IAEnD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;IAEpE,MAAM,QAAQ,GAAG,cAAc,CAAC,sBAAsB,EAAE,CAAA;IACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAE5D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAM;IACR,CAAC;IAED,qDAAqD;IACrD,OAAO,CAAC,GAAG,CACT,gCAAgC,iBAAiB,CAAC,MAAM,iBAAiB,CAC1E,CAAA;IACD,MAAM,OAAO,CAAC,GAAG,CACf,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAC/D,CAAA;IAED,wDAAwD;IACxD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,EAAE,CAAA;QACrD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CACtC,CAAA;QAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CACT,2CAA2C,iBAAiB,CAAC,MAAM,gBAAgB,CACpF,CAAA;YACD,MAAM,OAAO,CAAC,UAAU,CACtB,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAC/D,CAAA;QACH,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAA;IAER,wBAAwB;IACxB,cAAc,CAAC,cAAc,EAAE,CAAA;AACjC,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,cAAsB,EACtB,OAAiB;IAEjB,OAAO,IAAI,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAC1D,CAAC"}