@baasix/sdk 0.1.7 → 0.1.8
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 +46 -0
- package/dist/index.cjs +131 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.js +131 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1078,6 +1078,22 @@ interface RoomUserEvent {
|
|
|
1078
1078
|
socketId: string;
|
|
1079
1079
|
timestamp: string;
|
|
1080
1080
|
}
|
|
1081
|
+
interface RoomKickEvent {
|
|
1082
|
+
room: string;
|
|
1083
|
+
kickedBy: string | number;
|
|
1084
|
+
timestamp: string;
|
|
1085
|
+
}
|
|
1086
|
+
interface RoomCreatorChangedEvent {
|
|
1087
|
+
room: string;
|
|
1088
|
+
newCreatorSocketId: string;
|
|
1089
|
+
newCreatorUserId: string | number;
|
|
1090
|
+
timestamp: string;
|
|
1091
|
+
}
|
|
1092
|
+
interface RoomMember {
|
|
1093
|
+
socketId: string;
|
|
1094
|
+
userId: string | number;
|
|
1095
|
+
isCreator: boolean;
|
|
1096
|
+
}
|
|
1081
1097
|
interface SubscriptionCallback<T = any> {
|
|
1082
1098
|
(payload: SubscriptionPayload<T>): void;
|
|
1083
1099
|
}
|
|
@@ -1119,6 +1135,8 @@ declare class RealtimeModule {
|
|
|
1119
1135
|
private workflowCallbacks;
|
|
1120
1136
|
private roomCallbacks;
|
|
1121
1137
|
private roomUserCallbacks;
|
|
1138
|
+
private kickCallbacks;
|
|
1139
|
+
private creatorChangedCallbacks;
|
|
1122
1140
|
private connectionCallbacks;
|
|
1123
1141
|
private reconnecting;
|
|
1124
1142
|
private connectionPromise;
|
|
@@ -1272,6 +1290,52 @@ declare class RealtimeModule {
|
|
|
1272
1290
|
* ```
|
|
1273
1291
|
*/
|
|
1274
1292
|
leaveRoom(roomName: string): Promise<void>;
|
|
1293
|
+
/**
|
|
1294
|
+
* Get the list of users currently in a room.
|
|
1295
|
+
* You must already be a member of the room to call this.
|
|
1296
|
+
*
|
|
1297
|
+
* @example
|
|
1298
|
+
* ```typescript
|
|
1299
|
+
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
1300
|
+
* members.forEach(m => {
|
|
1301
|
+
* console.log(m.userId, m.isCreator ? '(owner)' : '');
|
|
1302
|
+
* });
|
|
1303
|
+
* ```
|
|
1304
|
+
*/
|
|
1305
|
+
getRoomMembers(roomName: string): Promise<RoomMember[]>;
|
|
1306
|
+
/**
|
|
1307
|
+
* Kick a user from a custom room. Only the room creator may call this.
|
|
1308
|
+
*
|
|
1309
|
+
* @example
|
|
1310
|
+
* ```typescript
|
|
1311
|
+
* await baasix.realtime.kickFromRoom('game:lobby', 'user-id-123');
|
|
1312
|
+
* ```
|
|
1313
|
+
*/
|
|
1314
|
+
kickFromRoom(roomName: string, targetUserId: string | number): Promise<void>;
|
|
1315
|
+
/**
|
|
1316
|
+
* Listen for being kicked from a room.
|
|
1317
|
+
* The callback fires when the current user is removed by the room creator.
|
|
1318
|
+
* Room listeners are automatically cleaned up after the kick.
|
|
1319
|
+
*
|
|
1320
|
+
* @example
|
|
1321
|
+
* ```typescript
|
|
1322
|
+
* baasix.realtime.onKicked('game:lobby', ({ kickedBy }) => {
|
|
1323
|
+
* console.log(`You were kicked by user ${kickedBy}`);
|
|
1324
|
+
* });
|
|
1325
|
+
* ```
|
|
1326
|
+
*/
|
|
1327
|
+
onKicked(roomName: string, callback: (data: RoomKickEvent) => void): () => void;
|
|
1328
|
+
/**
|
|
1329
|
+
* Listen for room ownership changes (e.g. when the creator leaves).
|
|
1330
|
+
*
|
|
1331
|
+
* @example
|
|
1332
|
+
* ```typescript
|
|
1333
|
+
* baasix.realtime.onRoomCreatorChanged('game:lobby', ({ newCreatorUserId }) => {
|
|
1334
|
+
* console.log(`New room owner: ${newCreatorUserId}`);
|
|
1335
|
+
* });
|
|
1336
|
+
* ```
|
|
1337
|
+
*/
|
|
1338
|
+
onRoomCreatorChanged(roomName: string, callback: (data: RoomCreatorChangedEvent) => void): () => void;
|
|
1275
1339
|
/**
|
|
1276
1340
|
* Send a message to a room
|
|
1277
1341
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -1078,6 +1078,22 @@ interface RoomUserEvent {
|
|
|
1078
1078
|
socketId: string;
|
|
1079
1079
|
timestamp: string;
|
|
1080
1080
|
}
|
|
1081
|
+
interface RoomKickEvent {
|
|
1082
|
+
room: string;
|
|
1083
|
+
kickedBy: string | number;
|
|
1084
|
+
timestamp: string;
|
|
1085
|
+
}
|
|
1086
|
+
interface RoomCreatorChangedEvent {
|
|
1087
|
+
room: string;
|
|
1088
|
+
newCreatorSocketId: string;
|
|
1089
|
+
newCreatorUserId: string | number;
|
|
1090
|
+
timestamp: string;
|
|
1091
|
+
}
|
|
1092
|
+
interface RoomMember {
|
|
1093
|
+
socketId: string;
|
|
1094
|
+
userId: string | number;
|
|
1095
|
+
isCreator: boolean;
|
|
1096
|
+
}
|
|
1081
1097
|
interface SubscriptionCallback<T = any> {
|
|
1082
1098
|
(payload: SubscriptionPayload<T>): void;
|
|
1083
1099
|
}
|
|
@@ -1119,6 +1135,8 @@ declare class RealtimeModule {
|
|
|
1119
1135
|
private workflowCallbacks;
|
|
1120
1136
|
private roomCallbacks;
|
|
1121
1137
|
private roomUserCallbacks;
|
|
1138
|
+
private kickCallbacks;
|
|
1139
|
+
private creatorChangedCallbacks;
|
|
1122
1140
|
private connectionCallbacks;
|
|
1123
1141
|
private reconnecting;
|
|
1124
1142
|
private connectionPromise;
|
|
@@ -1272,6 +1290,52 @@ declare class RealtimeModule {
|
|
|
1272
1290
|
* ```
|
|
1273
1291
|
*/
|
|
1274
1292
|
leaveRoom(roomName: string): Promise<void>;
|
|
1293
|
+
/**
|
|
1294
|
+
* Get the list of users currently in a room.
|
|
1295
|
+
* You must already be a member of the room to call this.
|
|
1296
|
+
*
|
|
1297
|
+
* @example
|
|
1298
|
+
* ```typescript
|
|
1299
|
+
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
1300
|
+
* members.forEach(m => {
|
|
1301
|
+
* console.log(m.userId, m.isCreator ? '(owner)' : '');
|
|
1302
|
+
* });
|
|
1303
|
+
* ```
|
|
1304
|
+
*/
|
|
1305
|
+
getRoomMembers(roomName: string): Promise<RoomMember[]>;
|
|
1306
|
+
/**
|
|
1307
|
+
* Kick a user from a custom room. Only the room creator may call this.
|
|
1308
|
+
*
|
|
1309
|
+
* @example
|
|
1310
|
+
* ```typescript
|
|
1311
|
+
* await baasix.realtime.kickFromRoom('game:lobby', 'user-id-123');
|
|
1312
|
+
* ```
|
|
1313
|
+
*/
|
|
1314
|
+
kickFromRoom(roomName: string, targetUserId: string | number): Promise<void>;
|
|
1315
|
+
/**
|
|
1316
|
+
* Listen for being kicked from a room.
|
|
1317
|
+
* The callback fires when the current user is removed by the room creator.
|
|
1318
|
+
* Room listeners are automatically cleaned up after the kick.
|
|
1319
|
+
*
|
|
1320
|
+
* @example
|
|
1321
|
+
* ```typescript
|
|
1322
|
+
* baasix.realtime.onKicked('game:lobby', ({ kickedBy }) => {
|
|
1323
|
+
* console.log(`You were kicked by user ${kickedBy}`);
|
|
1324
|
+
* });
|
|
1325
|
+
* ```
|
|
1326
|
+
*/
|
|
1327
|
+
onKicked(roomName: string, callback: (data: RoomKickEvent) => void): () => void;
|
|
1328
|
+
/**
|
|
1329
|
+
* Listen for room ownership changes (e.g. when the creator leaves).
|
|
1330
|
+
*
|
|
1331
|
+
* @example
|
|
1332
|
+
* ```typescript
|
|
1333
|
+
* baasix.realtime.onRoomCreatorChanged('game:lobby', ({ newCreatorUserId }) => {
|
|
1334
|
+
* console.log(`New room owner: ${newCreatorUserId}`);
|
|
1335
|
+
* });
|
|
1336
|
+
* ```
|
|
1337
|
+
*/
|
|
1338
|
+
onRoomCreatorChanged(roomName: string, callback: (data: RoomCreatorChangedEvent) => void): () => void;
|
|
1275
1339
|
/**
|
|
1276
1340
|
* Send a message to a room
|
|
1277
1341
|
*
|
package/dist/index.js
CHANGED
|
@@ -3291,6 +3291,8 @@ var RealtimeModule = class {
|
|
|
3291
3291
|
roomCallbacks = /* @__PURE__ */ new Map();
|
|
3292
3292
|
// room -> event -> callbacks
|
|
3293
3293
|
roomUserCallbacks = /* @__PURE__ */ new Map();
|
|
3294
|
+
kickCallbacks = /* @__PURE__ */ new Map();
|
|
3295
|
+
creatorChangedCallbacks = /* @__PURE__ */ new Map();
|
|
3294
3296
|
connectionCallbacks = /* @__PURE__ */ new Set();
|
|
3295
3297
|
reconnecting = false;
|
|
3296
3298
|
connectionPromise = null;
|
|
@@ -3420,6 +3422,27 @@ var RealtimeModule = class {
|
|
|
3420
3422
|
}
|
|
3421
3423
|
});
|
|
3422
3424
|
});
|
|
3425
|
+
this.socket.on("room:kicked", (data) => {
|
|
3426
|
+
const callbacks = this.kickCallbacks.get(data.room);
|
|
3427
|
+
callbacks?.forEach((cb) => {
|
|
3428
|
+
try {
|
|
3429
|
+
cb(data);
|
|
3430
|
+
} catch (e) {
|
|
3431
|
+
console.error("[Baasix Realtime] Error in room kicked callback:", e);
|
|
3432
|
+
}
|
|
3433
|
+
});
|
|
3434
|
+
this.cleanupRoomListeners(data.room);
|
|
3435
|
+
});
|
|
3436
|
+
this.socket.on("room:creator:changed", (data) => {
|
|
3437
|
+
const callbacks = this.creatorChangedCallbacks.get(data.room);
|
|
3438
|
+
callbacks?.forEach((cb) => {
|
|
3439
|
+
try {
|
|
3440
|
+
cb(data);
|
|
3441
|
+
} catch (e) {
|
|
3442
|
+
console.error("[Baasix Realtime] Error in room creator changed callback:", e);
|
|
3443
|
+
}
|
|
3444
|
+
});
|
|
3445
|
+
});
|
|
3423
3446
|
this.socket.connect();
|
|
3424
3447
|
} catch (error) {
|
|
3425
3448
|
this.connectionPromise = null;
|
|
@@ -3449,6 +3472,8 @@ var RealtimeModule = class {
|
|
|
3449
3472
|
this.workflowCallbacks.clear();
|
|
3450
3473
|
this.roomCallbacks.clear();
|
|
3451
3474
|
this.roomUserCallbacks.clear();
|
|
3475
|
+
this.kickCallbacks.clear();
|
|
3476
|
+
this.creatorChangedCallbacks.clear();
|
|
3452
3477
|
}
|
|
3453
3478
|
/**
|
|
3454
3479
|
* Check if connected to the realtime server
|
|
@@ -3719,6 +3744,110 @@ var RealtimeModule = class {
|
|
|
3719
3744
|
});
|
|
3720
3745
|
});
|
|
3721
3746
|
}
|
|
3747
|
+
/**
|
|
3748
|
+
* Get the list of users currently in a room.
|
|
3749
|
+
* You must already be a member of the room to call this.
|
|
3750
|
+
*
|
|
3751
|
+
* @example
|
|
3752
|
+
* ```typescript
|
|
3753
|
+
* const members = await baasix.realtime.getRoomMembers('game:lobby');
|
|
3754
|
+
* members.forEach(m => {
|
|
3755
|
+
* console.log(m.userId, m.isCreator ? '(owner)' : '');
|
|
3756
|
+
* });
|
|
3757
|
+
* ```
|
|
3758
|
+
*/
|
|
3759
|
+
async getRoomMembers(roomName) {
|
|
3760
|
+
if (!this.socket?.connected) {
|
|
3761
|
+
throw new Error("Not connected. Call connect() first.");
|
|
3762
|
+
}
|
|
3763
|
+
return new Promise((resolve, reject) => {
|
|
3764
|
+
this.socket.emit("room:members", { room: roomName }, (response) => {
|
|
3765
|
+
if (response.status === "success") {
|
|
3766
|
+
resolve(response.members);
|
|
3767
|
+
} else {
|
|
3768
|
+
reject(new Error(response.message || "Failed to get room members"));
|
|
3769
|
+
}
|
|
3770
|
+
});
|
|
3771
|
+
});
|
|
3772
|
+
}
|
|
3773
|
+
/**
|
|
3774
|
+
* Kick a user from a custom room. Only the room creator may call this.
|
|
3775
|
+
*
|
|
3776
|
+
* @example
|
|
3777
|
+
* ```typescript
|
|
3778
|
+
* await baasix.realtime.kickFromRoom('game:lobby', 'user-id-123');
|
|
3779
|
+
* ```
|
|
3780
|
+
*/
|
|
3781
|
+
async kickFromRoom(roomName, targetUserId) {
|
|
3782
|
+
if (!this.socket?.connected) {
|
|
3783
|
+
throw new Error("Not connected. Call connect() first.");
|
|
3784
|
+
}
|
|
3785
|
+
return new Promise((resolve, reject) => {
|
|
3786
|
+
this.socket.emit(
|
|
3787
|
+
"room:kick",
|
|
3788
|
+
{ room: roomName, userId: targetUserId },
|
|
3789
|
+
(response) => {
|
|
3790
|
+
if (response.status === "success") {
|
|
3791
|
+
resolve();
|
|
3792
|
+
} else {
|
|
3793
|
+
reject(new Error(response.message || "Failed to kick user"));
|
|
3794
|
+
}
|
|
3795
|
+
}
|
|
3796
|
+
);
|
|
3797
|
+
});
|
|
3798
|
+
}
|
|
3799
|
+
/**
|
|
3800
|
+
* Listen for being kicked from a room.
|
|
3801
|
+
* The callback fires when the current user is removed by the room creator.
|
|
3802
|
+
* Room listeners are automatically cleaned up after the kick.
|
|
3803
|
+
*
|
|
3804
|
+
* @example
|
|
3805
|
+
* ```typescript
|
|
3806
|
+
* baasix.realtime.onKicked('game:lobby', ({ kickedBy }) => {
|
|
3807
|
+
* console.log(`You were kicked by user ${kickedBy}`);
|
|
3808
|
+
* });
|
|
3809
|
+
* ```
|
|
3810
|
+
*/
|
|
3811
|
+
onKicked(roomName, callback) {
|
|
3812
|
+
if (!this.kickCallbacks.has(roomName)) {
|
|
3813
|
+
this.kickCallbacks.set(roomName, /* @__PURE__ */ new Set());
|
|
3814
|
+
}
|
|
3815
|
+
this.kickCallbacks.get(roomName).add(callback);
|
|
3816
|
+
return () => {
|
|
3817
|
+
const callbacks = this.kickCallbacks.get(roomName);
|
|
3818
|
+
if (callbacks) {
|
|
3819
|
+
callbacks.delete(callback);
|
|
3820
|
+
if (callbacks.size === 0) {
|
|
3821
|
+
this.kickCallbacks.delete(roomName);
|
|
3822
|
+
}
|
|
3823
|
+
}
|
|
3824
|
+
};
|
|
3825
|
+
}
|
|
3826
|
+
/**
|
|
3827
|
+
* Listen for room ownership changes (e.g. when the creator leaves).
|
|
3828
|
+
*
|
|
3829
|
+
* @example
|
|
3830
|
+
* ```typescript
|
|
3831
|
+
* baasix.realtime.onRoomCreatorChanged('game:lobby', ({ newCreatorUserId }) => {
|
|
3832
|
+
* console.log(`New room owner: ${newCreatorUserId}`);
|
|
3833
|
+
* });
|
|
3834
|
+
* ```
|
|
3835
|
+
*/
|
|
3836
|
+
onRoomCreatorChanged(roomName, callback) {
|
|
3837
|
+
if (!this.creatorChangedCallbacks.has(roomName)) {
|
|
3838
|
+
this.creatorChangedCallbacks.set(roomName, /* @__PURE__ */ new Set());
|
|
3839
|
+
}
|
|
3840
|
+
this.creatorChangedCallbacks.get(roomName).add(callback);
|
|
3841
|
+
return () => {
|
|
3842
|
+
const callbacks = this.creatorChangedCallbacks.get(roomName);
|
|
3843
|
+
if (callbacks) {
|
|
3844
|
+
callbacks.delete(callback);
|
|
3845
|
+
if (callbacks.size === 0) {
|
|
3846
|
+
this.creatorChangedCallbacks.delete(roomName);
|
|
3847
|
+
}
|
|
3848
|
+
}
|
|
3849
|
+
};
|
|
3850
|
+
}
|
|
3722
3851
|
/**
|
|
3723
3852
|
* Send a message to a room
|
|
3724
3853
|
*
|
|
@@ -3871,6 +4000,8 @@ var RealtimeModule = class {
|
|
|
3871
4000
|
cleanupRoomListeners(roomName) {
|
|
3872
4001
|
this.roomCallbacks.delete(roomName);
|
|
3873
4002
|
this.roomUserCallbacks.delete(roomName);
|
|
4003
|
+
this.kickCallbacks.delete(roomName);
|
|
4004
|
+
this.creatorChangedCallbacks.delete(roomName);
|
|
3874
4005
|
}
|
|
3875
4006
|
// ===================
|
|
3876
4007
|
// Channel (Room) API - Supabase-style
|