@base44-preview/sdk 0.8.11-pr.58.0494dbf → 0.8.11-pr.58.a137910
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/dist/index.d.ts +1 -1
- package/dist/modules/entities.js +52 -6
- package/dist/modules/entities.types.d.ts +85 -6
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { getAccessToken, saveAccessToken, removeAccessToken, getLoginUrl } from
|
|
|
4
4
|
export { createClient, createClientFromRequest, Base44Error, getAccessToken, saveAccessToken, removeAccessToken, getLoginUrl, };
|
|
5
5
|
export type { Base44Client, CreateClientConfig, CreateClientOptions, Base44ErrorJSON, };
|
|
6
6
|
export * from "./types.js";
|
|
7
|
-
export type { EntitiesModule, EntityHandler, RealtimeEventType, RealtimeEvent, RealtimeCallback, Subscription, } from "./modules/entities.types.js";
|
|
7
|
+
export type { EntitiesModule, EntityHandler, RealtimeEventType, RealtimeEvent, RealtimeCallback, SubscribeOptions, Subscription, } from "./modules/entities.types.js";
|
|
8
8
|
export type { AuthModule, LoginResponse, RegisterParams, VerifyOtpParams, ChangePasswordParams, ResetPasswordParams, User, } from "./modules/auth.types.js";
|
|
9
9
|
export type { IntegrationsModule, IntegrationPackage, IntegrationEndpointFunction, CoreIntegrations, InvokeLLMParams, GenerateImageParams, GenerateImageResult, UploadFileParams, UploadFileResult, SendEmailParams, SendEmailResult, ExtractDataFromUploadedFileParams, ExtractDataFromUploadedFileResult, UploadPrivateFileParams, UploadPrivateFileResult, CreateFileSignedUrlParams, CreateFileSignedUrlResult, } from "./modules/integrations.types.js";
|
|
10
10
|
export type { FunctionsModule } from "./modules/functions.types.js";
|
package/dist/modules/entities.js
CHANGED
|
@@ -24,6 +24,24 @@ export function createEntitiesModule(configOrAxios, appIdArg) {
|
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a stable hash from a query object for room naming.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
function hashQuery(query) {
|
|
32
|
+
const sortedKeys = Object.keys(query).sort();
|
|
33
|
+
const normalized = sortedKeys
|
|
34
|
+
.map((k) => `${k}:${JSON.stringify(query[k])}`)
|
|
35
|
+
.join("|");
|
|
36
|
+
// Simple hash function
|
|
37
|
+
let hash = 0;
|
|
38
|
+
for (let i = 0; i < normalized.length; i++) {
|
|
39
|
+
const char = normalized.charCodeAt(i);
|
|
40
|
+
hash = (hash << 5) - hash + char;
|
|
41
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
42
|
+
}
|
|
43
|
+
return Math.abs(hash).toString(36);
|
|
44
|
+
}
|
|
27
45
|
/**
|
|
28
46
|
* Parses the realtime message data and extracts event information.
|
|
29
47
|
* @internal
|
|
@@ -37,6 +55,7 @@ function parseRealtimeMessage(dataStr) {
|
|
|
37
55
|
data: parsed.data,
|
|
38
56
|
id: parsed.id || ((_a = parsed.data) === null || _a === void 0 ? void 0 : _a.id),
|
|
39
57
|
timestamp: parsed.timestamp || new Date().toISOString(),
|
|
58
|
+
previousData: parsed.previousData,
|
|
40
59
|
};
|
|
41
60
|
}
|
|
42
61
|
catch (_b) {
|
|
@@ -119,24 +138,51 @@ function createEntityHandler(axios, appId, entityName, getSocket) {
|
|
|
119
138
|
});
|
|
120
139
|
},
|
|
121
140
|
// Subscribe to realtime updates
|
|
122
|
-
subscribe(
|
|
123
|
-
|
|
141
|
+
subscribe(callbackOrIdOrQuery, callbackOrOptions, optionsArg) {
|
|
142
|
+
let room;
|
|
143
|
+
let callback;
|
|
144
|
+
let options;
|
|
145
|
+
// Parse overloaded arguments
|
|
146
|
+
if (typeof callbackOrIdOrQuery === "function") {
|
|
147
|
+
// subscribe(callback, options?)
|
|
148
|
+
room = `entities:${appId}:${entityName}`;
|
|
149
|
+
callback = callbackOrIdOrQuery;
|
|
150
|
+
options = callbackOrOptions;
|
|
151
|
+
}
|
|
152
|
+
else if (typeof callbackOrIdOrQuery === "string") {
|
|
153
|
+
// subscribe(id, callback, options?)
|
|
154
|
+
room = `entities:${appId}:${entityName}:${callbackOrIdOrQuery}`;
|
|
155
|
+
callback = callbackOrOptions;
|
|
156
|
+
options = optionsArg;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
// subscribe(query, callback, options?)
|
|
160
|
+
const queryHash = hashQuery(callbackOrIdOrQuery);
|
|
161
|
+
room = `entities:${appId}:${entityName}:query:${queryHash}`;
|
|
162
|
+
callback = callbackOrOptions;
|
|
163
|
+
options = optionsArg;
|
|
164
|
+
}
|
|
165
|
+
const eventFilter = options === null || options === void 0 ? void 0 : options.events;
|
|
124
166
|
// Get the socket and subscribe to the room
|
|
125
167
|
const socket = getSocket();
|
|
126
168
|
const unsubscribe = socket.subscribeToRoom(room, {
|
|
127
169
|
update_model: (msg) => {
|
|
128
170
|
// Only process messages for our room
|
|
129
|
-
if (msg.room !== room)
|
|
171
|
+
if (msg.room !== room)
|
|
130
172
|
return;
|
|
131
|
-
}
|
|
132
173
|
const event = parseRealtimeMessage(msg.data);
|
|
133
|
-
if (!event)
|
|
174
|
+
if (!event)
|
|
175
|
+
return;
|
|
176
|
+
// Apply event type filter if specified
|
|
177
|
+
if (eventFilter && !eventFilter.includes(event.type)) {
|
|
134
178
|
return;
|
|
135
179
|
}
|
|
136
180
|
callback(event);
|
|
137
181
|
},
|
|
138
182
|
});
|
|
139
|
-
return
|
|
183
|
+
return {
|
|
184
|
+
unsubscribe,
|
|
185
|
+
};
|
|
140
186
|
},
|
|
141
187
|
};
|
|
142
188
|
}
|
|
@@ -14,15 +14,27 @@ export interface RealtimeEvent<T = Record<string, any>> {
|
|
|
14
14
|
id: string;
|
|
15
15
|
/** ISO 8601 timestamp of when the event occurred */
|
|
16
16
|
timestamp: string;
|
|
17
|
+
/** For update events, contains the previous data before the change */
|
|
18
|
+
previousData?: T;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Callback function invoked when a realtime event occurs.
|
|
20
22
|
*/
|
|
21
23
|
export type RealtimeCallback<T = Record<string, any>> = (event: RealtimeEvent<T>) => void;
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
25
|
+
* Options for subscribing to realtime updates.
|
|
24
26
|
*/
|
|
25
|
-
export
|
|
27
|
+
export interface SubscribeOptions {
|
|
28
|
+
/** Filter events by type. Defaults to all types. */
|
|
29
|
+
events?: RealtimeEventType[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Handle returned from subscribe, used to unsubscribe.
|
|
33
|
+
*/
|
|
34
|
+
export interface Subscription {
|
|
35
|
+
/** Stops listening to updates and cleans up the subscription. */
|
|
36
|
+
unsubscribe: () => void;
|
|
37
|
+
}
|
|
26
38
|
/**
|
|
27
39
|
* Entity handler providing CRUD operations for a specific entity type.
|
|
28
40
|
*
|
|
@@ -273,20 +285,87 @@ export interface EntityHandler {
|
|
|
273
285
|
* Receives notifications whenever any record is created, updated, or deleted.
|
|
274
286
|
*
|
|
275
287
|
* @param callback - Function called when an entity changes.
|
|
276
|
-
* @
|
|
288
|
+
* @param options - Optional configuration for filtering events.
|
|
289
|
+
* @returns Subscription handle with an unsubscribe method.
|
|
277
290
|
*
|
|
278
291
|
* @example
|
|
279
292
|
* ```typescript
|
|
280
293
|
* // Subscribe to all Task changes
|
|
281
|
-
* const
|
|
294
|
+
* const subscription = base44.entities.Task.subscribe((event) => {
|
|
282
295
|
* console.log(`Task ${event.id} was ${event.type}d:`, event.data);
|
|
283
296
|
* });
|
|
284
297
|
*
|
|
285
298
|
* // Later, unsubscribe
|
|
286
|
-
* unsubscribe();
|
|
299
|
+
* subscription.unsubscribe();
|
|
300
|
+
* ```
|
|
301
|
+
*
|
|
302
|
+
* @example
|
|
303
|
+
* ```typescript
|
|
304
|
+
* // Subscribe only to create events
|
|
305
|
+
* const subscription = base44.entities.Task.subscribe(
|
|
306
|
+
* (event) => console.log("New task:", event.data),
|
|
307
|
+
* { events: ["create"] }
|
|
308
|
+
* );
|
|
309
|
+
* ```
|
|
310
|
+
*/
|
|
311
|
+
subscribe(callback: RealtimeCallback, options?: SubscribeOptions): Subscription;
|
|
312
|
+
/**
|
|
313
|
+
* Subscribes to realtime updates for a specific entity record.
|
|
314
|
+
*
|
|
315
|
+
* Receives notifications when the specified record is updated or deleted.
|
|
316
|
+
*
|
|
317
|
+
* @param id - The unique identifier of the record to watch.
|
|
318
|
+
* @param callback - Function called when the entity changes.
|
|
319
|
+
* @param options - Optional configuration for filtering events.
|
|
320
|
+
* @returns Subscription handle with an unsubscribe method.
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* // Subscribe to a specific task
|
|
325
|
+
* const subscription = base44.entities.Task.subscribe("task-123", (event) => {
|
|
326
|
+
* if (event.type === "update") {
|
|
327
|
+
* console.log("Task updated:", event.data);
|
|
328
|
+
* } else if (event.type === "delete") {
|
|
329
|
+
* console.log("Task was deleted");
|
|
330
|
+
* }
|
|
331
|
+
* });
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
subscribe(id: string, callback: RealtimeCallback, options?: SubscribeOptions): Subscription;
|
|
335
|
+
/**
|
|
336
|
+
* Subscribes to realtime updates for records matching a query.
|
|
337
|
+
*
|
|
338
|
+
* Receives notifications for records that match the specified criteria.
|
|
339
|
+
* Includes create events when new records match the query, update events
|
|
340
|
+
* when matching records change, and delete events when matching records
|
|
341
|
+
* are removed.
|
|
342
|
+
*
|
|
343
|
+
* @param query - Query object with field-value pairs to filter records.
|
|
344
|
+
* @param callback - Function called when a matching entity changes.
|
|
345
|
+
* @param options - Optional configuration for filtering events.
|
|
346
|
+
* @returns Subscription handle with an unsubscribe method.
|
|
347
|
+
*
|
|
348
|
+
* @example
|
|
349
|
+
* ```typescript
|
|
350
|
+
* // Subscribe to all completed tasks
|
|
351
|
+
* const subscription = base44.entities.Task.subscribe(
|
|
352
|
+
* { isCompleted: true },
|
|
353
|
+
* (event) => {
|
|
354
|
+
* console.log(`Completed task ${event.type}:`, event.data);
|
|
355
|
+
* }
|
|
356
|
+
* );
|
|
357
|
+
* ```
|
|
358
|
+
*
|
|
359
|
+
* @example
|
|
360
|
+
* ```typescript
|
|
361
|
+
* // Subscribe to high-priority active tasks
|
|
362
|
+
* const subscription = base44.entities.Task.subscribe(
|
|
363
|
+
* { priority: "high", status: "active" },
|
|
364
|
+
* (event) => console.log("High priority task changed:", event.data)
|
|
365
|
+
* );
|
|
287
366
|
* ```
|
|
288
367
|
*/
|
|
289
|
-
subscribe(callback: RealtimeCallback): Subscription;
|
|
368
|
+
subscribe(query: Record<string, any>, callback: RealtimeCallback, options?: SubscribeOptions): Subscription;
|
|
290
369
|
}
|
|
291
370
|
/**
|
|
292
371
|
* Entities module for managing app data.
|