@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.
- package/README.md +184 -113
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/storage.d.ts +3 -1
- package/dist/client/storage.d.ts.map +1 -1
- package/dist/client.d.ts +8 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/config/schema.d.ts +4 -15
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/driver.d.ts +2 -2
- package/dist/core/driver.d.ts.map +1 -1
- package/dist/core/driver.js +4 -3
- package/dist/core/driver.js.map +1 -1
- package/dist/core/function.d.ts +17 -11
- package/dist/core/function.d.ts.map +1 -1
- package/dist/core/function.js +2 -2
- package/dist/core/function.js.map +1 -1
- package/dist/core/types.d.ts +26 -9
- package/dist/core/types.d.ts.map +1 -1
- package/dist/examples/teamhub-integration.d.ts +1 -1
- package/dist/examples/teamhub-integration.d.ts.map +1 -1
- package/dist/examples/teamhub-integration.js +9 -5
- package/dist/examples/teamhub-integration.js.map +1 -1
- package/dist/index.d.ts +13 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/localStorage.d.ts +1 -1
- package/dist/providers/localStorage.d.ts.map +1 -1
- package/dist/providers/redis.d.ts +1 -1
- package/dist/providers/redis.d.ts.map +1 -1
- package/dist/server.d.ts +13 -12
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/trpc/index.d.ts +9 -0
- package/dist/trpc/index.d.ts.map +1 -0
- package/dist/trpc/index.js +19 -0
- package/dist/trpc/index.js.map +1 -0
- package/dist/trpc/router.d.ts +3 -2
- package/dist/trpc/router.d.ts.map +1 -1
- package/dist/trpc/router.js +21 -4
- package/dist/trpc/router.js.map +1 -1
- package/dist/trpc/types.d.ts +21 -12
- package/dist/trpc/types.d.ts.map +1 -1
- package/package.json +13 -13
- package/dist/client/hooks.js +0 -339
- package/dist/client/hooks.js.map +0 -1
- package/dist/client/index.js +0 -37
- package/dist/client/index.js.map +0 -1
- package/dist/client/manager.js +0 -292
- package/dist/client/manager.js.map +0 -1
- package/dist/client/provider.js +0 -121
- package/dist/client/provider.js.map +0 -1
- package/dist/client/revalidation.js +0 -313
- package/dist/client/revalidation.js.map +0 -1
- package/dist/client/session.d.ts +0 -84
- package/dist/client/session.d.ts.map +0 -1
- package/dist/client/session.js +0 -186
- package/dist/client/session.js.map +0 -1
- package/dist/client/sse-client.js +0 -221
- package/dist/client/sse-client.js.map +0 -1
- package/dist/client/storage.js +0 -441
- package/dist/client/storage.js.map +0 -1
- package/dist/client/trpc.js +0 -36
- package/dist/client/trpc.js.map +0 -1
- package/dist/client/types.d.ts +0 -10
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -3
- package/dist/client/types.js.map +0 -1
- package/dist/client.js +0 -26
- package/dist/client.js.map +0 -1
- package/dist/core/analyzer.js +0 -217
- package/dist/core/analyzer.js.map +0 -1
- package/dist/core/sse.js +0 -331
- package/dist/core/sse.js.map +0 -1
- package/dist/providers/localStorage.js +0 -64
- package/dist/providers/localStorage.js.map +0 -1
- package/dist/providers/memory.js +0 -40
- package/dist/providers/memory.js.map +0 -1
- package/dist/providers/redis.js +0 -36
- package/dist/providers/redis.js.map +0 -1
- package/dist/trpc/hooks.d.ts +0 -82
- package/dist/trpc/hooks.d.ts.map +0 -1
- package/dist/trpc/hooks.js +0 -282
- package/dist/trpc/hooks.js.map +0 -1
package/dist/client/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAAiC;AACjC,qCAAkE;AAAzD,0GAAA,eAAe,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAC/C,qCAOkB;AANhB,+GAAA,oBAAoB,OAAA;AACpB,qHAAA,0BAA0B,OAAA;AAC1B,+GAAA,oBAAoB,OAAA;AAMtB,iBAAiB;AACjB,qCAIkB;AAHhB,gHAAA,qBAAqB,OAAA;AACrB,sHAAA,2BAA2B,OAAA;AAI7B,cAAc;AACd,iCAUgB;AATd,oGAAA,WAAW,OAAA;AACX,yGAAA,gBAAgB,OAAA;AAChB,8GAAA,qBAAqB,OAAA;AACrB,yGAAA,gBAAgB,OAAA;AAChB,2GAAA,kBAAkB,OAAA;AAClB,gHAAA,uBAAuB,OAAA;AACvB,6GAAA,oBAAoB,OAAA;AACpB,8GAAA,qBAAqB,OAAA;AACrB,iHAAA,wBAAwB,OAAA;AAG1B,qBAAqB;AACrB,+CAMuB;AALrB,uHAAA,uBAAuB,OAAA;AACvB,6HAAA,6BAA6B,OAAA;AAM/B,qBAAqB;AACrB,uCAA6C;AAApC,4GAAA,gBAAgB,OAAA"}
|
package/dist/client/manager.js
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Client-side reactive manager
|
|
4
|
-
* Coordinates storage, session recovery, and real-time synchronization
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ReactiveClientManager = void 0;
|
|
8
|
-
exports.createReactiveClientManager = createReactiveClientManager;
|
|
9
|
-
const storage_1 = require("./storage");
|
|
10
|
-
const session_1 = require("./session");
|
|
11
|
-
const revalidation_1 = require("./revalidation");
|
|
12
|
-
const sse_client_1 = require("./sse-client");
|
|
13
|
-
class ReactiveClientManager {
|
|
14
|
-
storage;
|
|
15
|
-
sessionManager;
|
|
16
|
-
revalidationEngine;
|
|
17
|
-
sseClient = null;
|
|
18
|
-
config;
|
|
19
|
-
organizationId;
|
|
20
|
-
onInvalidation;
|
|
21
|
-
onRevalidate;
|
|
22
|
-
// Event listeners
|
|
23
|
-
visibilityListener;
|
|
24
|
-
beforeUnloadListener;
|
|
25
|
-
constructor(options) {
|
|
26
|
-
this.organizationId = options.organizationId;
|
|
27
|
-
this.config = options.config;
|
|
28
|
-
this.onInvalidation = options.onInvalidation;
|
|
29
|
-
this.onRevalidate = options.onRevalidate;
|
|
30
|
-
// Initialize storage, session management, and smart revalidation
|
|
31
|
-
this.storage = (0, storage_1.createReactiveStorage)(this.organizationId);
|
|
32
|
-
this.sessionManager = (0, session_1.createSimpleSessionManager)(this.organizationId);
|
|
33
|
-
this.revalidationEngine = (0, revalidation_1.createSmartRevalidationEngine)(this.storage, this.config);
|
|
34
|
-
// Set up event listeners
|
|
35
|
-
this.setupEventListeners();
|
|
36
|
-
// Initialize SSE connection if real-time is enabled
|
|
37
|
-
if (this.config.realtime?.enabled !== false) {
|
|
38
|
-
this.initializeSSEConnection(options.sseOptions);
|
|
39
|
-
}
|
|
40
|
-
// Initial session gap check (simple revalidation on page load)
|
|
41
|
-
this.checkInitialSession();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Get organization ID
|
|
45
|
-
*/
|
|
46
|
-
get currentOrganizationId() {
|
|
47
|
-
return this.organizationId;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Register a query execution
|
|
51
|
-
*/
|
|
52
|
-
registerQuery(queryKey, dependencies, data, ttl) {
|
|
53
|
-
this.storage.registerQuery(queryKey, dependencies, data, ttl);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Register an active React hook
|
|
57
|
-
*/
|
|
58
|
-
registerActiveHook(queryKey, dependencies) {
|
|
59
|
-
this.storage.registerActiveHook(queryKey, dependencies, this.organizationId);
|
|
60
|
-
// Return cleanup function
|
|
61
|
-
return () => {
|
|
62
|
-
this.storage.unregisterActiveHook(queryKey);
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Get cached data for a query
|
|
67
|
-
*/
|
|
68
|
-
getCachedData(queryKey) {
|
|
69
|
-
return this.storage.getCachedData(queryKey);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Handle invalidation event from server
|
|
73
|
-
*/
|
|
74
|
-
handleInvalidation(event) {
|
|
75
|
-
console.log(`[ReactiveClient] Handling invalidation for table: ${event.table}`);
|
|
76
|
-
// Notify external handler if provided
|
|
77
|
-
if (this.onInvalidation) {
|
|
78
|
-
this.onInvalidation(event);
|
|
79
|
-
}
|
|
80
|
-
// Mark affected queries as invalidated in session manager
|
|
81
|
-
const affectedQueries = this.findAffectedQueries(event.table);
|
|
82
|
-
affectedQueries.forEach((queryKey) => {
|
|
83
|
-
this.sessionManager.markQueryInvalidated(queryKey);
|
|
84
|
-
});
|
|
85
|
-
// Trigger revalidation for affected queries
|
|
86
|
-
if (this.onRevalidate) {
|
|
87
|
-
affectedQueries.forEach((queryKey) => {
|
|
88
|
-
this.revalidateQuery(queryKey);
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Find queries affected by table changes
|
|
94
|
-
*/
|
|
95
|
-
findAffectedQueries(table) {
|
|
96
|
-
const registry = this.storage.getRegistry();
|
|
97
|
-
if (!registry)
|
|
98
|
-
return [];
|
|
99
|
-
const relatedTables = this.config.relations[table] || [];
|
|
100
|
-
const tablesToCheck = [table, ...relatedTables];
|
|
101
|
-
return Object.keys(registry.queries).filter((queryKey) => {
|
|
102
|
-
// Simple heuristic: check if query key contains table name
|
|
103
|
-
return tablesToCheck.some((tableName) => queryKey.toLowerCase().includes(tableName.toLowerCase()));
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Handle connection status changes
|
|
108
|
-
*/
|
|
109
|
-
handleConnectionStatus(connected) {
|
|
110
|
-
console.log(`[ReactiveClient] Real-time connection: ${connected}`);
|
|
111
|
-
// Update session manager with connection status
|
|
112
|
-
const registry = this.storage.getRegistry();
|
|
113
|
-
if (registry) {
|
|
114
|
-
registry.session.realtimeConnected = connected;
|
|
115
|
-
this.storage['saveRegistry'](registry);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Revalidate a specific query
|
|
120
|
-
*/
|
|
121
|
-
async revalidateQuery(queryKey) {
|
|
122
|
-
if (this.onRevalidate) {
|
|
123
|
-
try {
|
|
124
|
-
const result = await this.onRevalidate(queryKey);
|
|
125
|
-
// Update cache with fresh data
|
|
126
|
-
if (result !== undefined) {
|
|
127
|
-
this.storage.registerQuery(queryKey, [], result);
|
|
128
|
-
}
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
console.error(`[ReactiveClient] Revalidation failed for ${queryKey}:`, error);
|
|
133
|
-
// Do not overwrite cache on error; keep existing data intact
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return undefined;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Initialize SSE connection for real-time updates
|
|
141
|
-
*/
|
|
142
|
-
initializeSSEConnection(sseOptions) {
|
|
143
|
-
console.log('[ReactiveClient] Initializing SSE connection');
|
|
144
|
-
// Build SSE URL with organization ID
|
|
145
|
-
const sseUrl = `/api/events?organizationId=${this.organizationId}`;
|
|
146
|
-
this.sseClient = new sse_client_1.SSEClient({
|
|
147
|
-
url: sseUrl,
|
|
148
|
-
onInvalidation: (event) => this.handleInvalidation(event),
|
|
149
|
-
onError: (error) => {
|
|
150
|
-
console.error('[ReactiveClient] SSE error:', error);
|
|
151
|
-
},
|
|
152
|
-
...sseOptions,
|
|
153
|
-
});
|
|
154
|
-
// Connect immediately
|
|
155
|
-
this.sseClient.connect();
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Get SSE connection statistics
|
|
159
|
-
*/
|
|
160
|
-
getSSEStats() {
|
|
161
|
-
return this.sseClient?.getStats() || null;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Manually reconnect SSE
|
|
165
|
-
*/
|
|
166
|
-
reconnectSSE() {
|
|
167
|
-
if (this.sseClient) {
|
|
168
|
-
console.log('[ReactiveClient] Manual SSE reconnection');
|
|
169
|
-
this.sseClient.disconnect();
|
|
170
|
-
setTimeout(() => {
|
|
171
|
-
this.sseClient?.connect();
|
|
172
|
-
}, 1000);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Set up browser event listeners
|
|
177
|
-
*/
|
|
178
|
-
setupEventListeners() {
|
|
179
|
-
// Page visibility change (user switches tabs)
|
|
180
|
-
this.visibilityListener = () => {
|
|
181
|
-
if (document.visibilityState === 'visible') {
|
|
182
|
-
this.handleVisibilityChange();
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
document.addEventListener('visibilitychange', this.visibilityListener);
|
|
186
|
-
// Before page unload (save state)
|
|
187
|
-
this.beforeUnloadListener = () => {
|
|
188
|
-
// Update last sync time before unload
|
|
189
|
-
const registry = this.storage.getRegistry();
|
|
190
|
-
if (registry) {
|
|
191
|
-
registry.session.lastSync = Date.now();
|
|
192
|
-
this.storage['saveRegistry'](registry);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
window.addEventListener('beforeunload', this.beforeUnloadListener);
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Remove event listeners
|
|
199
|
-
*/
|
|
200
|
-
removeEventListeners() {
|
|
201
|
-
if (this.visibilityListener) {
|
|
202
|
-
document.removeEventListener('visibilitychange', this.visibilityListener);
|
|
203
|
-
}
|
|
204
|
-
if (this.beforeUnloadListener) {
|
|
205
|
-
window.removeEventListener('beforeunload', this.beforeUnloadListener);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Check for session gap on initial load (simple approach as per spec)
|
|
210
|
-
*/
|
|
211
|
-
async checkInitialSession() {
|
|
212
|
-
const activeHookQueries = this.storage
|
|
213
|
-
.getActiveHooks()
|
|
214
|
-
.map((hook) => hook.queryKey);
|
|
215
|
-
await (0, session_1.revalidateOnPageLoad)(this.sessionManager, activeHookQueries, this.revalidateQuery.bind(this));
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Handle page visibility change
|
|
219
|
-
*/
|
|
220
|
-
async handleVisibilityChange() {
|
|
221
|
-
if (document.visibilityState === 'visible') {
|
|
222
|
-
// Check for stale data when page becomes visible
|
|
223
|
-
await this.checkInitialSession();
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Get current connection status
|
|
228
|
-
*/
|
|
229
|
-
getConnectionStatus() {
|
|
230
|
-
if (!this.sseClient)
|
|
231
|
-
return 'disconnected';
|
|
232
|
-
const state = this.sseClient.getConnectionState();
|
|
233
|
-
return state === 'open'
|
|
234
|
-
? 'connected'
|
|
235
|
-
: state === 'connecting'
|
|
236
|
-
? 'connecting'
|
|
237
|
-
: 'disconnected';
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Check if real-time is enabled and connected
|
|
241
|
-
*/
|
|
242
|
-
isRealtimeEnabled() {
|
|
243
|
-
return (this.config.realtime?.enabled !== false &&
|
|
244
|
-
this.sseClient?.isConnected() === true);
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Get storage statistics
|
|
248
|
-
*/
|
|
249
|
-
getStorageStats() {
|
|
250
|
-
return this.storage.exportRegistry();
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Get session statistics
|
|
254
|
-
*/
|
|
255
|
-
getSessionStats() {
|
|
256
|
-
return this.sessionManager.getSessionStats();
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Get revalidation statistics
|
|
260
|
-
*/
|
|
261
|
-
getRevalidationStats() {
|
|
262
|
-
return this.revalidationEngine.getRevalidationStats();
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Mark a query as stale for testing purposes
|
|
266
|
-
*/
|
|
267
|
-
markQueryStaleForTesting(queryKey) {
|
|
268
|
-
this.storage.markQueryStaleForTesting(queryKey);
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Cleanup resources
|
|
272
|
-
*/
|
|
273
|
-
cleanup() {
|
|
274
|
-
// Remove event listeners
|
|
275
|
-
this.removeEventListeners();
|
|
276
|
-
// Disconnect SSE
|
|
277
|
-
if (this.sseClient) {
|
|
278
|
-
this.sseClient.disconnect();
|
|
279
|
-
this.sseClient = null;
|
|
280
|
-
}
|
|
281
|
-
// Clear storage
|
|
282
|
-
this.storage.clearRegistry();
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
exports.ReactiveClientManager = ReactiveClientManager;
|
|
286
|
-
/**
|
|
287
|
-
* Create reactive client manager
|
|
288
|
-
*/
|
|
289
|
-
function createReactiveClientManager(options) {
|
|
290
|
-
return new ReactiveClientManager(options);
|
|
291
|
-
}
|
|
292
|
-
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/client/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/client/provider.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ReactiveProvider = ReactiveProvider;
|
|
37
|
-
exports.useReactiveContext = useReactiveContext;
|
|
38
|
-
const react_1 = __importStar(require("react"));
|
|
39
|
-
const hooks_1 = require("./hooks");
|
|
40
|
-
const ReactiveContext = (0, react_1.createContext)(null);
|
|
41
|
-
/**
|
|
42
|
-
* React context provider for reactive features
|
|
43
|
-
*/
|
|
44
|
-
function ReactiveProvider({ children, config, }) {
|
|
45
|
-
const [isInitialized, setIsInitialized] = (0, react_1.useState)(false);
|
|
46
|
-
const { organizationId } = config;
|
|
47
|
-
const reactiveConfig = {
|
|
48
|
-
relations: config.relations,
|
|
49
|
-
realtime: {
|
|
50
|
-
enabled: true,
|
|
51
|
-
transport: 'sse',
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
// Default revalidation function that returns mock data
|
|
55
|
-
// The ReactiveStorage system handles persistence automatically
|
|
56
|
-
const defaultRevalidateFn = async (queryKey) => {
|
|
57
|
-
console.log('🔄 Default revalidating query:', queryKey);
|
|
58
|
-
// Return mock data based on query key
|
|
59
|
-
if (queryKey.includes('agents.getAll')) {
|
|
60
|
-
const mockData = [
|
|
61
|
-
{
|
|
62
|
-
id: '1',
|
|
63
|
-
name: 'Test Agent 1',
|
|
64
|
-
role: 'assistant',
|
|
65
|
-
organizationId: organizationId,
|
|
66
|
-
isActive: true,
|
|
67
|
-
createdAt: new Date().toISOString(),
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
id: '2',
|
|
71
|
-
name: 'Test Agent 2',
|
|
72
|
-
role: 'researcher',
|
|
73
|
-
organizationId: organizationId,
|
|
74
|
-
isActive: true,
|
|
75
|
-
createdAt: new Date().toISOString(),
|
|
76
|
-
},
|
|
77
|
-
];
|
|
78
|
-
// Note: ReactiveStorage will automatically persist this data
|
|
79
|
-
// No need for manual localStorage handling
|
|
80
|
-
console.log('💾 Mock data generated, ReactiveStorage will persist automatically');
|
|
81
|
-
return mockData;
|
|
82
|
-
}
|
|
83
|
-
return [];
|
|
84
|
-
};
|
|
85
|
-
const revalidateFn = config.revalidateFn || defaultRevalidateFn;
|
|
86
|
-
(0, react_1.useEffect)(() => {
|
|
87
|
-
console.log('🚀 ReactiveProvider: Initializing reactive client for org:', organizationId);
|
|
88
|
-
try {
|
|
89
|
-
// Initialize the client immediately
|
|
90
|
-
(0, hooks_1.initializeReactiveClient)(organizationId, reactiveConfig, revalidateFn);
|
|
91
|
-
setIsInitialized(true);
|
|
92
|
-
console.log('✅ ReactiveProvider: Client initialized successfully for org:', organizationId);
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
console.error('❌ ReactiveProvider: Failed to initialize client:', error);
|
|
96
|
-
}
|
|
97
|
-
}, [organizationId, revalidateFn]);
|
|
98
|
-
const contextValue = {
|
|
99
|
-
organizationId,
|
|
100
|
-
config: reactiveConfig,
|
|
101
|
-
isInitialized,
|
|
102
|
-
};
|
|
103
|
-
// Don't render children until client is initialized
|
|
104
|
-
if (!isInitialized) {
|
|
105
|
-
return react_1.default.createElement(ReactiveContext.Provider, { value: contextValue }, react_1.default.createElement('div', { className: 'flex items-center justify-center p-8' }, react_1.default.createElement('div', { className: 'text-center' }, react_1.default.createElement('div', {
|
|
106
|
-
className: 'animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-4',
|
|
107
|
-
}), react_1.default.createElement('p', { className: 'text-gray-600' }, 'Initializing reactive client...'))));
|
|
108
|
-
}
|
|
109
|
-
return react_1.default.createElement(ReactiveContext.Provider, { value: contextValue }, children);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Hook to access reactive context
|
|
113
|
-
*/
|
|
114
|
-
function useReactiveContext() {
|
|
115
|
-
const context = (0, react_1.useContext)(ReactiveContext);
|
|
116
|
-
if (!context) {
|
|
117
|
-
throw new Error('useReactiveContext must be used within a ReactiveProvider');
|
|
118
|
-
}
|
|
119
|
-
return context;
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/client/provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,4CAiHC;AAKD,gDAMC;AAjJD,+CAA6E;AAC7E,mCAAkD;AAelD,MAAM,eAAe,GAAG,IAAA,qBAAa,EAA8B,IAAI,CAAC,CAAA;AAExE;;GAEG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,GAIP;IACC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAA;IACzD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAA;IAEjC,MAAM,cAAc,GAAmB;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAc;SAC1B;KACF,CAAA;IAED,uDAAuD;IACvD,+DAA+D;IAC/D,MAAM,mBAAmB,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;QACrD,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAA;QAEvD,sCAAsC;QACtC,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG;gBACf;oBACE,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,WAAW;oBACjB,cAAc,EAAE,cAAc;oBAC9B,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;gBACD;oBACE,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,YAAY;oBAClB,cAAc,EAAE,cAAc;oBAC9B,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAA;YAED,6DAA6D;YAC7D,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CACT,oEAAoE,CACrE,CAAA;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,mBAAmB,CAAA;IAE/D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CACT,4DAA4D,EAC5D,cAAc,CACf,CAAA;QAED,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAA,gCAAwB,EAAC,cAAc,EAAE,cAAc,EAAE,YAAY,CAAC,CAAA;YACtE,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACtB,OAAO,CAAC,GAAG,CACT,8DAA8D,EAC9D,cAAc,CACf,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;IAElC,MAAM,YAAY,GAAyB;QACzC,cAAc;QACd,MAAM,EAAE,cAAc;QACtB,aAAa;KACd,CAAA;IAED,oDAAoD;IACpD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,eAAK,CAAC,aAAa,CACxB,eAAe,CAAC,QAAQ,EACxB,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,eAAK,CAAC,aAAa,CACjB,KAAK,EACL,EAAE,SAAS,EAAE,sCAAsC,EAAE,EACrD,eAAK,CAAC,aAAa,CACjB,KAAK,EACL,EAAE,SAAS,EAAE,aAAa,EAAE,EAC5B,eAAK,CAAC,aAAa,CAAC,KAAK,EAAE;YACzB,SAAS,EACP,2EAA2E;SAC9E,CAAC,EACF,eAAK,CAAC,aAAa,CACjB,GAAG,EACH,EAAE,SAAS,EAAE,eAAe,EAAE,EAC9B,iCAAiC,CAClC,CACF,CACF,CACF,CAAA;IACH,CAAC;IAED,OAAO,eAAK,CAAC,aAAa,CACxB,eAAe,CAAC,QAAQ,EACxB,EAAE,KAAK,EAAE,YAAY,EAAE,EACvB,QAAQ,CACT,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,eAAe,CAAC,CAAA;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|