@baasix/sdk 0.1.10 → 0.1.12
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 +23 -3
- package/dist/index.cjs +45 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +34 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +45 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1058,21 +1058,41 @@ channel.unsubscribe();
|
|
|
1058
1058
|
Custom rooms enable real-time communication between users for chat, games, or collaborative features. The **first user to join** a room becomes its creator. If the creator leaves temporarily, ownership transfers to the next member — but the **original creator automatically reclaims ownership** when they rejoin. If the room empties and is recreated, the next joiner becomes the new owner.
|
|
1059
1059
|
|
|
1060
1060
|
```typescript
|
|
1061
|
-
// Join a room — pass optional metadata stored alongside your membership
|
|
1062
|
-
|
|
1061
|
+
// Join a room — pass optional metadata stored alongside your membership.
|
|
1062
|
+
// Returns { history } — the room's last 200 messages, replayed for late joiners.
|
|
1063
|
+
const { history } = await baasix.realtime.joinRoom('game:lobby', {
|
|
1063
1064
|
username: 'Alice',
|
|
1064
1065
|
avatar: 'https://example.com/alice.png',
|
|
1065
1066
|
team: 'blue',
|
|
1066
1067
|
});
|
|
1067
1068
|
|
|
1069
|
+
// Replay buffered messages so the user sees missed events immediately
|
|
1070
|
+
// Each entry: { event, payload, sender: { userId, socketId }, timestamp }
|
|
1071
|
+
history.forEach((msg) => {
|
|
1072
|
+
addMessageToUI(msg.sender.userId, msg.payload.text);
|
|
1073
|
+
});
|
|
1074
|
+
|
|
1068
1075
|
// Get current members (you must be in the room)
|
|
1069
1076
|
// Each entry includes userId, socketId, isCreator, and metadata
|
|
1070
1077
|
const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
1071
1078
|
// [{ socketId: string, userId: string|number, isCreator: boolean, metadata: Record<string,any> }, ...]
|
|
1072
1079
|
|
|
1073
|
-
//
|
|
1080
|
+
// List all active rooms — no membership required
|
|
1081
|
+
const rooms = await baasix.realtime.listRooms();
|
|
1082
|
+
// [{ name: 'game:lobby', memberCount: 4 }, { name: 'chat:general', memberCount: 12 }]
|
|
1083
|
+
|
|
1084
|
+
// Filter by name prefix — e.g. show only 'game:' rooms
|
|
1085
|
+
const gameRooms = await baasix.realtime.listRooms('game:');
|
|
1086
|
+
// [{ name: 'game:lobby', memberCount: 4 }, { name: 'game:arena', memberCount: 8 }]
|
|
1087
|
+
|
|
1088
|
+
// Send a persisted message — stored in the history buffer (default)
|
|
1074
1089
|
await baasix.realtime.sendToRoom('game:lobby', 'chat', { text: 'Hello!' });
|
|
1075
1090
|
|
|
1091
|
+
// Send an ephemeral message — broadcast only, NOT stored in history
|
|
1092
|
+
// Ideal for high-frequency events: cursors, typing indicators, presence pings
|
|
1093
|
+
await baasix.realtime.sendToRoom('game:lobby', 'typing', { userId }, { history: false });
|
|
1094
|
+
await baasix.realtime.sendToRoom('game:lobby', 'cursor', { x: 120, y: 340 }, { history: false });
|
|
1095
|
+
|
|
1076
1096
|
// Listen for room messages
|
|
1077
1097
|
const unsubscribe = baasix.realtime.onRoomMessage('game:lobby', 'chat', (data) => {
|
|
1078
1098
|
console.log(`${data.sender.userId}: ${data.payload.text}`);
|
package/dist/index.cjs
CHANGED
|
@@ -2894,18 +2894,22 @@ var ReportsModule = class {
|
|
|
2894
2894
|
* @example
|
|
2895
2895
|
* ```typescript
|
|
2896
2896
|
* const categories = await baasix.reports.distinct('products', 'category');
|
|
2897
|
+
*
|
|
2898
|
+
* // With a filter
|
|
2899
|
+
* const folders = await baasix.reports.distinct('baasix_File', 'folder', {
|
|
2900
|
+
* userId: { eq: '$CURRENT_USER' },
|
|
2901
|
+
* });
|
|
2897
2902
|
* ```
|
|
2898
2903
|
*/
|
|
2899
2904
|
async distinct(collection, field, filter) {
|
|
2900
|
-
const response = await this.client.
|
|
2901
|
-
`/
|
|
2905
|
+
const response = await this.client.post(
|
|
2906
|
+
`/reports/${collection}`,
|
|
2902
2907
|
{
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
}
|
|
2908
|
+
fields: [field],
|
|
2909
|
+
groupBy: [field],
|
|
2910
|
+
aggregate: { _count: { function: "distinct", field } },
|
|
2911
|
+
filter,
|
|
2912
|
+
limit: -1
|
|
2909
2913
|
}
|
|
2910
2914
|
);
|
|
2911
2915
|
return response.data.map((item) => item[field]);
|
|
@@ -3791,6 +3795,39 @@ var RealtimeModule = class {
|
|
|
3791
3795
|
});
|
|
3792
3796
|
});
|
|
3793
3797
|
}
|
|
3798
|
+
/**
|
|
3799
|
+
* List all active custom rooms, optionally filtered by a name prefix.
|
|
3800
|
+
*
|
|
3801
|
+
* Returns every room that currently has at least one member.
|
|
3802
|
+
* You do **not** need to be a member of a room to list it.
|
|
3803
|
+
*
|
|
3804
|
+
* @param prefix - Optional prefix to filter rooms. E.g. `"game:"` returns only
|
|
3805
|
+
* rooms whose name starts with `"game:"`.
|
|
3806
|
+
*
|
|
3807
|
+
* @example
|
|
3808
|
+
* ```typescript
|
|
3809
|
+
* // All active rooms
|
|
3810
|
+
* const rooms = await baasix.realtime.listRooms();
|
|
3811
|
+
* // [{ name: 'game:lobby', memberCount: 4 }, { name: 'chat:general', memberCount: 12 }]
|
|
3812
|
+
*
|
|
3813
|
+
* // Only rooms whose name starts with 'game:'
|
|
3814
|
+
* const gameRooms = await baasix.realtime.listRooms('game:');
|
|
3815
|
+
* ```
|
|
3816
|
+
*/
|
|
3817
|
+
async listRooms(prefix) {
|
|
3818
|
+
if (!this.socket?.connected) {
|
|
3819
|
+
throw new Error("Not connected. Call connect() first.");
|
|
3820
|
+
}
|
|
3821
|
+
return new Promise((resolve, reject) => {
|
|
3822
|
+
this.socket.emit("room:list", { prefix: prefix ?? "" }, (response) => {
|
|
3823
|
+
if (response.status === "success") {
|
|
3824
|
+
resolve(response.rooms);
|
|
3825
|
+
} else {
|
|
3826
|
+
reject(new Error(response.message || "Failed to list rooms"));
|
|
3827
|
+
}
|
|
3828
|
+
});
|
|
3829
|
+
});
|
|
3830
|
+
}
|
|
3794
3831
|
/**
|
|
3795
3832
|
* Kick a user from a custom room. Only the room creator may call this.
|
|
3796
3833
|
*
|