@baasix/sdk 0.1.8 → 0.1.10
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 +10 -5
- package/dist/index.cjs +46 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -12
- package/dist/index.d.ts +57 -12
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1076,6 +1076,7 @@ interface RoomUserEvent {
|
|
|
1076
1076
|
room: string;
|
|
1077
1077
|
userId: string | number;
|
|
1078
1078
|
socketId: string;
|
|
1079
|
+
metadata: Record<string, any>;
|
|
1079
1080
|
timestamp: string;
|
|
1080
1081
|
}
|
|
1081
1082
|
interface RoomKickEvent {
|
|
@@ -1093,6 +1094,20 @@ interface RoomMember {
|
|
|
1093
1094
|
socketId: string;
|
|
1094
1095
|
userId: string | number;
|
|
1095
1096
|
isCreator: boolean;
|
|
1097
|
+
metadata: Record<string, any>;
|
|
1098
|
+
}
|
|
1099
|
+
/**
|
|
1100
|
+
* A single message from the room's history buffer, replayed when you join.
|
|
1101
|
+
* Has the same shape as a live {@link RoomMessage} (minus the `room` field).
|
|
1102
|
+
*/
|
|
1103
|
+
interface RoomHistoryMessage {
|
|
1104
|
+
event: string;
|
|
1105
|
+
payload: any;
|
|
1106
|
+
sender: {
|
|
1107
|
+
userId: string | number;
|
|
1108
|
+
socketId: string;
|
|
1109
|
+
};
|
|
1110
|
+
timestamp: string;
|
|
1096
1111
|
}
|
|
1097
1112
|
interface SubscriptionCallback<T = any> {
|
|
1098
1113
|
(payload: SubscriptionPayload<T>): void;
|
|
@@ -1267,20 +1282,38 @@ declare class RealtimeModule {
|
|
|
1267
1282
|
subscribeToExecution(executionId: string | number, callback: (data: WorkflowExecutionUpdate) => void): () => void;
|
|
1268
1283
|
private handleWorkflowUpdate;
|
|
1269
1284
|
/**
|
|
1270
|
-
* Join a custom room for real-time communication
|
|
1285
|
+
* Join a custom room for real-time communication.
|
|
1286
|
+
*
|
|
1287
|
+
* You can optionally attach metadata (e.g. display name, avatar, team) that
|
|
1288
|
+
* will be visible to all other members via {@link getRoomMembers} and in
|
|
1289
|
+
* `room:user:joined` events.
|
|
1290
|
+
*
|
|
1291
|
+
* Returns the room's message history (up to 200 messages) so late joiners
|
|
1292
|
+
* can replay past messages immediately.
|
|
1293
|
+
*
|
|
1294
|
+
* @param roomName - The room to join.
|
|
1295
|
+
* @param metadata - Optional key/value pairs stored alongside this member.
|
|
1296
|
+
* @returns An object containing the buffered `history` for the room.
|
|
1271
1297
|
*
|
|
1272
1298
|
* @example
|
|
1273
1299
|
* ```typescript
|
|
1274
|
-
*
|
|
1275
|
-
*
|
|
1300
|
+
* const { history } = await baasix.realtime.joinRoom('game:lobby', {
|
|
1301
|
+
* username: 'Alice',
|
|
1302
|
+
* avatar: 'https://example.com/alice.png',
|
|
1303
|
+
* });
|
|
1304
|
+
*
|
|
1305
|
+
* // Render past messages first
|
|
1306
|
+
* history.forEach((msg) => renderMessage(msg));
|
|
1276
1307
|
*
|
|
1277
|
-
* //
|
|
1308
|
+
* // Then listen for new ones
|
|
1278
1309
|
* baasix.realtime.onRoomMessage('game:lobby', 'chat', (data) => {
|
|
1279
|
-
*
|
|
1310
|
+
* renderMessage(data);
|
|
1280
1311
|
* });
|
|
1281
1312
|
* ```
|
|
1282
1313
|
*/
|
|
1283
|
-
joinRoom(roomName: string): Promise<
|
|
1314
|
+
joinRoom(roomName: string, metadata?: Record<string, any>): Promise<{
|
|
1315
|
+
history: RoomHistoryMessage[];
|
|
1316
|
+
}>;
|
|
1284
1317
|
/**
|
|
1285
1318
|
* Leave a custom room
|
|
1286
1319
|
*
|
|
@@ -1294,11 +1327,14 @@ declare class RealtimeModule {
|
|
|
1294
1327
|
* Get the list of users currently in a room.
|
|
1295
1328
|
* You must already be a member of the room to call this.
|
|
1296
1329
|
*
|
|
1330
|
+
* Each entry includes `userId`, `socketId`, `isCreator`, and `metadata`
|
|
1331
|
+
* (the custom object the member passed to {@link joinRoom}).
|
|
1332
|
+
*
|
|
1297
1333
|
* @example
|
|
1298
1334
|
* ```typescript
|
|
1299
1335
|
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
1300
1336
|
* members.forEach(m => {
|
|
1301
|
-
* console.log(m.
|
|
1337
|
+
* console.log(m.metadata.username, m.isCreator ? '(owner)' : '');
|
|
1302
1338
|
* });
|
|
1303
1339
|
* ```
|
|
1304
1340
|
*/
|
|
@@ -1337,18 +1373,27 @@ declare class RealtimeModule {
|
|
|
1337
1373
|
*/
|
|
1338
1374
|
onRoomCreatorChanged(roomName: string, callback: (data: RoomCreatorChangedEvent) => void): () => void;
|
|
1339
1375
|
/**
|
|
1340
|
-
* Send a message to a room
|
|
1376
|
+
* Send a message to a room.
|
|
1377
|
+
*
|
|
1378
|
+
* By default the message is stored in the room's history buffer so late
|
|
1379
|
+
* joiners can replay it. Pass `{ history: false }` to broadcast without
|
|
1380
|
+
* persisting (e.g. ephemeral cursor positions, typing indicators).
|
|
1341
1381
|
*
|
|
1342
1382
|
* @example
|
|
1343
1383
|
* ```typescript
|
|
1344
|
-
* //
|
|
1384
|
+
* // Persisted — replayed to future joiners
|
|
1345
1385
|
* await baasix.realtime.sendToRoom('game:lobby', 'chat', { text: 'Hello!' });
|
|
1346
1386
|
*
|
|
1347
|
-
* //
|
|
1348
|
-
* await baasix.realtime.sendToRoom('game:
|
|
1387
|
+
* // Ephemeral — broadcast only, never stored in history
|
|
1388
|
+
* await baasix.realtime.sendToRoom('game:lobby', 'typing', { userId }, { history: false });
|
|
1389
|
+
*
|
|
1390
|
+
* // Game move — skips history
|
|
1391
|
+
* await baasix.realtime.sendToRoom('game:123', 'move', { x: 10, y: 20 }, { history: false });
|
|
1349
1392
|
* ```
|
|
1350
1393
|
*/
|
|
1351
|
-
sendToRoom(roomName: string, event: string, payload: any
|
|
1394
|
+
sendToRoom(roomName: string, event: string, payload: any, options?: {
|
|
1395
|
+
history?: boolean;
|
|
1396
|
+
}): Promise<void>;
|
|
1352
1397
|
/**
|
|
1353
1398
|
* Listen for messages in a room with a specific event type
|
|
1354
1399
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -1076,6 +1076,7 @@ interface RoomUserEvent {
|
|
|
1076
1076
|
room: string;
|
|
1077
1077
|
userId: string | number;
|
|
1078
1078
|
socketId: string;
|
|
1079
|
+
metadata: Record<string, any>;
|
|
1079
1080
|
timestamp: string;
|
|
1080
1081
|
}
|
|
1081
1082
|
interface RoomKickEvent {
|
|
@@ -1093,6 +1094,20 @@ interface RoomMember {
|
|
|
1093
1094
|
socketId: string;
|
|
1094
1095
|
userId: string | number;
|
|
1095
1096
|
isCreator: boolean;
|
|
1097
|
+
metadata: Record<string, any>;
|
|
1098
|
+
}
|
|
1099
|
+
/**
|
|
1100
|
+
* A single message from the room's history buffer, replayed when you join.
|
|
1101
|
+
* Has the same shape as a live {@link RoomMessage} (minus the `room` field).
|
|
1102
|
+
*/
|
|
1103
|
+
interface RoomHistoryMessage {
|
|
1104
|
+
event: string;
|
|
1105
|
+
payload: any;
|
|
1106
|
+
sender: {
|
|
1107
|
+
userId: string | number;
|
|
1108
|
+
socketId: string;
|
|
1109
|
+
};
|
|
1110
|
+
timestamp: string;
|
|
1096
1111
|
}
|
|
1097
1112
|
interface SubscriptionCallback<T = any> {
|
|
1098
1113
|
(payload: SubscriptionPayload<T>): void;
|
|
@@ -1267,20 +1282,38 @@ declare class RealtimeModule {
|
|
|
1267
1282
|
subscribeToExecution(executionId: string | number, callback: (data: WorkflowExecutionUpdate) => void): () => void;
|
|
1268
1283
|
private handleWorkflowUpdate;
|
|
1269
1284
|
/**
|
|
1270
|
-
* Join a custom room for real-time communication
|
|
1285
|
+
* Join a custom room for real-time communication.
|
|
1286
|
+
*
|
|
1287
|
+
* You can optionally attach metadata (e.g. display name, avatar, team) that
|
|
1288
|
+
* will be visible to all other members via {@link getRoomMembers} and in
|
|
1289
|
+
* `room:user:joined` events.
|
|
1290
|
+
*
|
|
1291
|
+
* Returns the room's message history (up to 200 messages) so late joiners
|
|
1292
|
+
* can replay past messages immediately.
|
|
1293
|
+
*
|
|
1294
|
+
* @param roomName - The room to join.
|
|
1295
|
+
* @param metadata - Optional key/value pairs stored alongside this member.
|
|
1296
|
+
* @returns An object containing the buffered `history` for the room.
|
|
1271
1297
|
*
|
|
1272
1298
|
* @example
|
|
1273
1299
|
* ```typescript
|
|
1274
|
-
*
|
|
1275
|
-
*
|
|
1300
|
+
* const { history } = await baasix.realtime.joinRoom('game:lobby', {
|
|
1301
|
+
* username: 'Alice',
|
|
1302
|
+
* avatar: 'https://example.com/alice.png',
|
|
1303
|
+
* });
|
|
1304
|
+
*
|
|
1305
|
+
* // Render past messages first
|
|
1306
|
+
* history.forEach((msg) => renderMessage(msg));
|
|
1276
1307
|
*
|
|
1277
|
-
* //
|
|
1308
|
+
* // Then listen for new ones
|
|
1278
1309
|
* baasix.realtime.onRoomMessage('game:lobby', 'chat', (data) => {
|
|
1279
|
-
*
|
|
1310
|
+
* renderMessage(data);
|
|
1280
1311
|
* });
|
|
1281
1312
|
* ```
|
|
1282
1313
|
*/
|
|
1283
|
-
joinRoom(roomName: string): Promise<
|
|
1314
|
+
joinRoom(roomName: string, metadata?: Record<string, any>): Promise<{
|
|
1315
|
+
history: RoomHistoryMessage[];
|
|
1316
|
+
}>;
|
|
1284
1317
|
/**
|
|
1285
1318
|
* Leave a custom room
|
|
1286
1319
|
*
|
|
@@ -1294,11 +1327,14 @@ declare class RealtimeModule {
|
|
|
1294
1327
|
* Get the list of users currently in a room.
|
|
1295
1328
|
* You must already be a member of the room to call this.
|
|
1296
1329
|
*
|
|
1330
|
+
* Each entry includes `userId`, `socketId`, `isCreator`, and `metadata`
|
|
1331
|
+
* (the custom object the member passed to {@link joinRoom}).
|
|
1332
|
+
*
|
|
1297
1333
|
* @example
|
|
1298
1334
|
* ```typescript
|
|
1299
1335
|
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
1300
1336
|
* members.forEach(m => {
|
|
1301
|
-
* console.log(m.
|
|
1337
|
+
* console.log(m.metadata.username, m.isCreator ? '(owner)' : '');
|
|
1302
1338
|
* });
|
|
1303
1339
|
* ```
|
|
1304
1340
|
*/
|
|
@@ -1337,18 +1373,27 @@ declare class RealtimeModule {
|
|
|
1337
1373
|
*/
|
|
1338
1374
|
onRoomCreatorChanged(roomName: string, callback: (data: RoomCreatorChangedEvent) => void): () => void;
|
|
1339
1375
|
/**
|
|
1340
|
-
* Send a message to a room
|
|
1376
|
+
* Send a message to a room.
|
|
1377
|
+
*
|
|
1378
|
+
* By default the message is stored in the room's history buffer so late
|
|
1379
|
+
* joiners can replay it. Pass `{ history: false }` to broadcast without
|
|
1380
|
+
* persisting (e.g. ephemeral cursor positions, typing indicators).
|
|
1341
1381
|
*
|
|
1342
1382
|
* @example
|
|
1343
1383
|
* ```typescript
|
|
1344
|
-
* //
|
|
1384
|
+
* // Persisted — replayed to future joiners
|
|
1345
1385
|
* await baasix.realtime.sendToRoom('game:lobby', 'chat', { text: 'Hello!' });
|
|
1346
1386
|
*
|
|
1347
|
-
* //
|
|
1348
|
-
* await baasix.realtime.sendToRoom('game:
|
|
1387
|
+
* // Ephemeral — broadcast only, never stored in history
|
|
1388
|
+
* await baasix.realtime.sendToRoom('game:lobby', 'typing', { userId }, { history: false });
|
|
1389
|
+
*
|
|
1390
|
+
* // Game move — skips history
|
|
1391
|
+
* await baasix.realtime.sendToRoom('game:123', 'move', { x: 10, y: 20 }, { history: false });
|
|
1349
1392
|
* ```
|
|
1350
1393
|
*/
|
|
1351
|
-
sendToRoom(roomName: string, event: string, payload: any
|
|
1394
|
+
sendToRoom(roomName: string, event: string, payload: any, options?: {
|
|
1395
|
+
history?: boolean;
|
|
1396
|
+
}): Promise<void>;
|
|
1352
1397
|
/**
|
|
1353
1398
|
* Listen for messages in a room with a specific event type
|
|
1354
1399
|
*
|
package/dist/index.js
CHANGED
|
@@ -3693,28 +3693,44 @@ var RealtimeModule = class {
|
|
|
3693
3693
|
// Custom Rooms API
|
|
3694
3694
|
// ===================
|
|
3695
3695
|
/**
|
|
3696
|
-
* Join a custom room for real-time communication
|
|
3697
|
-
*
|
|
3696
|
+
* Join a custom room for real-time communication.
|
|
3697
|
+
*
|
|
3698
|
+
* You can optionally attach metadata (e.g. display name, avatar, team) that
|
|
3699
|
+
* will be visible to all other members via {@link getRoomMembers} and in
|
|
3700
|
+
* `room:user:joined` events.
|
|
3701
|
+
*
|
|
3702
|
+
* Returns the room's message history (up to 200 messages) so late joiners
|
|
3703
|
+
* can replay past messages immediately.
|
|
3704
|
+
*
|
|
3705
|
+
* @param roomName - The room to join.
|
|
3706
|
+
* @param metadata - Optional key/value pairs stored alongside this member.
|
|
3707
|
+
* @returns An object containing the buffered `history` for the room.
|
|
3708
|
+
*
|
|
3698
3709
|
* @example
|
|
3699
3710
|
* ```typescript
|
|
3700
|
-
*
|
|
3701
|
-
*
|
|
3702
|
-
*
|
|
3703
|
-
*
|
|
3711
|
+
* const { history } = await baasix.realtime.joinRoom('game:lobby', {
|
|
3712
|
+
* username: 'Alice',
|
|
3713
|
+
* avatar: 'https://example.com/alice.png',
|
|
3714
|
+
* });
|
|
3715
|
+
*
|
|
3716
|
+
* // Render past messages first
|
|
3717
|
+
* history.forEach((msg) => renderMessage(msg));
|
|
3718
|
+
*
|
|
3719
|
+
* // Then listen for new ones
|
|
3704
3720
|
* baasix.realtime.onRoomMessage('game:lobby', 'chat', (data) => {
|
|
3705
|
-
*
|
|
3721
|
+
* renderMessage(data);
|
|
3706
3722
|
* });
|
|
3707
3723
|
* ```
|
|
3708
3724
|
*/
|
|
3709
|
-
async joinRoom(roomName) {
|
|
3725
|
+
async joinRoom(roomName, metadata = {}) {
|
|
3710
3726
|
if (!this.socket?.connected) {
|
|
3711
3727
|
throw new Error("Not connected. Call connect() first.");
|
|
3712
3728
|
}
|
|
3713
3729
|
return new Promise((resolve, reject) => {
|
|
3714
|
-
this.socket.emit("room:join", { room: roomName }, (response) => {
|
|
3730
|
+
this.socket.emit("room:join", { room: roomName, metadata }, (response) => {
|
|
3715
3731
|
if (response.status === "success") {
|
|
3716
3732
|
this.setupRoomListeners(roomName);
|
|
3717
|
-
resolve();
|
|
3733
|
+
resolve({ history: response.history ?? [] });
|
|
3718
3734
|
} else {
|
|
3719
3735
|
reject(new Error(response.message || "Failed to join room"));
|
|
3720
3736
|
}
|
|
@@ -3748,11 +3764,14 @@ var RealtimeModule = class {
|
|
|
3748
3764
|
* Get the list of users currently in a room.
|
|
3749
3765
|
* You must already be a member of the room to call this.
|
|
3750
3766
|
*
|
|
3767
|
+
* Each entry includes `userId`, `socketId`, `isCreator`, and `metadata`
|
|
3768
|
+
* (the custom object the member passed to {@link joinRoom}).
|
|
3769
|
+
*
|
|
3751
3770
|
* @example
|
|
3752
3771
|
* ```typescript
|
|
3753
3772
|
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
3754
3773
|
* members.forEach(m => {
|
|
3755
|
-
* console.log(m.
|
|
3774
|
+
* console.log(m.metadata.username, m.isCreator ? '(owner)' : '');
|
|
3756
3775
|
* });
|
|
3757
3776
|
* ```
|
|
3758
3777
|
*/
|
|
@@ -3849,25 +3868,33 @@ var RealtimeModule = class {
|
|
|
3849
3868
|
};
|
|
3850
3869
|
}
|
|
3851
3870
|
/**
|
|
3852
|
-
* Send a message to a room
|
|
3853
|
-
*
|
|
3871
|
+
* Send a message to a room.
|
|
3872
|
+
*
|
|
3873
|
+
* By default the message is stored in the room's history buffer so late
|
|
3874
|
+
* joiners can replay it. Pass `{ history: false }` to broadcast without
|
|
3875
|
+
* persisting (e.g. ephemeral cursor positions, typing indicators).
|
|
3876
|
+
*
|
|
3854
3877
|
* @example
|
|
3855
3878
|
* ```typescript
|
|
3856
|
-
* //
|
|
3879
|
+
* // Persisted — replayed to future joiners
|
|
3857
3880
|
* await baasix.realtime.sendToRoom('game:lobby', 'chat', { text: 'Hello!' });
|
|
3858
|
-
*
|
|
3859
|
-
* //
|
|
3860
|
-
* await baasix.realtime.sendToRoom('game:
|
|
3881
|
+
*
|
|
3882
|
+
* // Ephemeral — broadcast only, never stored in history
|
|
3883
|
+
* await baasix.realtime.sendToRoom('game:lobby', 'typing', { userId }, { history: false });
|
|
3884
|
+
*
|
|
3885
|
+
* // Game move — skips history
|
|
3886
|
+
* await baasix.realtime.sendToRoom('game:123', 'move', { x: 10, y: 20 }, { history: false });
|
|
3861
3887
|
* ```
|
|
3862
3888
|
*/
|
|
3863
|
-
async sendToRoom(roomName, event, payload) {
|
|
3889
|
+
async sendToRoom(roomName, event, payload, options = {}) {
|
|
3864
3890
|
if (!this.socket?.connected) {
|
|
3865
3891
|
throw new Error("Not connected. Call connect() first.");
|
|
3866
3892
|
}
|
|
3893
|
+
const history = options.history ?? true;
|
|
3867
3894
|
return new Promise((resolve, reject) => {
|
|
3868
3895
|
this.socket.emit(
|
|
3869
3896
|
"room:message",
|
|
3870
|
-
{ room: roomName, event, payload },
|
|
3897
|
+
{ room: roomName, event, payload, history },
|
|
3871
3898
|
(response) => {
|
|
3872
3899
|
if (response.status === "success") {
|
|
3873
3900
|
resolve();
|