cocobase 1.3.5 → 1.4.0

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.
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GameClient = void 0;
4
+ exports.listGameRooms = listGameRooms;
5
+ const utils_js_1 = require("../utils/utils.js");
6
+ /**
7
+ * GameClient - Easy-to-use multiplayer game client
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const game = db.realtime.game('my-game-function');
12
+ *
13
+ * // Set up event handlers
14
+ * game.on('connected', (data) => {
15
+ * console.log('Connected! My player ID:', data.your_id);
16
+ * });
17
+ *
18
+ * game.on('player_joined', (data) => {
19
+ * console.log('Player joined:', data.player_id);
20
+ * });
21
+ *
22
+ * game.on('state', (data) => {
23
+ * // Update game state
24
+ * renderPlayers(data.players);
25
+ * });
26
+ *
27
+ * // Connect to a room
28
+ * await game.connect({ roomId: 'game-room-1' });
29
+ *
30
+ * // Send actions
31
+ * game.send({ action: 'move', x: 100, y: 200 });
32
+ *
33
+ * // Disconnect when done
34
+ * game.disconnect();
35
+ * ```
36
+ */
37
+ class GameClient {
38
+ constructor(projectId, functionName, token) {
39
+ this.ws = null;
40
+ this.listeners = new Map();
41
+ this.reconnectEnabled = true;
42
+ this.reconnectDelay = 1000;
43
+ this.maxReconnectDelay = 30000;
44
+ this.currentReconnectDelay = 1000;
45
+ this._isConnected = false;
46
+ this.projectId = projectId;
47
+ this.functionName = functionName;
48
+ this.token = token;
49
+ this.baseURL = utils_js_1.BASEURL.replace(/^http/, "ws");
50
+ }
51
+ /**
52
+ * Whether the client is currently connected
53
+ */
54
+ get isConnected() {
55
+ return this._isConnected;
56
+ }
57
+ /**
58
+ * The current player's ID (available after connection)
59
+ */
60
+ get playerId() {
61
+ return this._playerId;
62
+ }
63
+ /**
64
+ * Connect to a game room
65
+ *
66
+ * @param options - Connection options
67
+ * @returns Promise that resolves when connected
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * await game.connect({ roomId: 'lobby' });
72
+ *
73
+ * // With authentication
74
+ * await game.connect({
75
+ * roomId: 'private-game',
76
+ * token: userJwtToken
77
+ * });
78
+ *
79
+ * // With metadata
80
+ * await game.connect({
81
+ * roomId: 'game-1',
82
+ * metadata: { playerName: 'John', team: 'red' }
83
+ * });
84
+ * ```
85
+ */
86
+ connect(options) {
87
+ return new Promise((resolve, reject) => {
88
+ this.lastConnectOptions = options;
89
+ const authToken = options.token || this.token;
90
+ // Build WebSocket URL
91
+ let wsUrl = `${this.baseURL}/ws/${this.projectId}/${this.functionName}`;
92
+ if (authToken) {
93
+ wsUrl += `?token=${encodeURIComponent(authToken)}`;
94
+ }
95
+ try {
96
+ this.ws = new WebSocket(wsUrl);
97
+ }
98
+ catch (err) {
99
+ reject(err);
100
+ return;
101
+ }
102
+ this.ws.onopen = () => {
103
+ this.currentReconnectDelay = this.reconnectDelay;
104
+ // Send initial message with room_id and metadata
105
+ const initMessage = {
106
+ room_id: options.roomId,
107
+ };
108
+ if (options.metadata) {
109
+ Object.assign(initMessage, options.metadata);
110
+ }
111
+ this.ws?.send(JSON.stringify(initMessage));
112
+ // Start ping interval
113
+ this.pingInterval = globalThis.setInterval(() => {
114
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
115
+ this.ws.send(JSON.stringify({ type: "ping" }));
116
+ }
117
+ }, 30000);
118
+ };
119
+ this.ws.onmessage = (event) => {
120
+ try {
121
+ const data = JSON.parse(event.data);
122
+ // Handle pong silently
123
+ if (data.type === "pong")
124
+ return;
125
+ // Extract event type from various possible fields
126
+ const eventType = data.type || data.event || "message";
127
+ // Handle connection confirmation
128
+ if (eventType === "connected" ||
129
+ eventType === "welcome" ||
130
+ data.your_id) {
131
+ this._isConnected = true;
132
+ if (data.your_id) {
133
+ this._playerId = data.your_id;
134
+ }
135
+ this.emit("connected", data);
136
+ resolve();
137
+ return;
138
+ }
139
+ // Handle errors
140
+ if (eventType === "error" || data.error) {
141
+ this.emit("error", data);
142
+ if (!this._isConnected) {
143
+ reject(new Error(data.error || data.message || "Connection error"));
144
+ }
145
+ return;
146
+ }
147
+ // Emit the event
148
+ this.emit(eventType, data);
149
+ }
150
+ catch (err) {
151
+ this.emit("error", { error: err });
152
+ }
153
+ };
154
+ this.ws.onclose = (event) => {
155
+ this._isConnected = false;
156
+ if (this.pingInterval) {
157
+ clearInterval(this.pingInterval);
158
+ this.pingInterval = undefined;
159
+ }
160
+ this.emit("disconnected", {
161
+ code: event.code,
162
+ reason: event.reason,
163
+ wasClean: event.wasClean,
164
+ });
165
+ // Auto-reconnect if enabled and not a clean close
166
+ if (this.reconnectEnabled && !event.wasClean && this.lastConnectOptions) {
167
+ this.scheduleReconnect();
168
+ }
169
+ };
170
+ this.ws.onerror = (err) => {
171
+ this.emit("error", { error: err });
172
+ if (!this._isConnected) {
173
+ reject(new Error("WebSocket connection failed"));
174
+ }
175
+ };
176
+ // Timeout for initial connection
177
+ setTimeout(() => {
178
+ if (!this._isConnected) {
179
+ this.ws?.close();
180
+ reject(new Error("Connection timeout"));
181
+ }
182
+ }, 10000);
183
+ });
184
+ }
185
+ /**
186
+ * Send a message/action to the game server
187
+ *
188
+ * @param data - Data to send (will be JSON serialized)
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * // Send a move action
193
+ * game.send({ action: 'move', x: 100, y: 200 });
194
+ *
195
+ * // Send a chat message
196
+ * game.send({ action: 'chat', message: 'Hello!' });
197
+ *
198
+ * // Send any game action
199
+ * game.send({ action: 'shoot', angle: 45, power: 80 });
200
+ * ```
201
+ */
202
+ send(data) {
203
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
204
+ throw new Error("Not connected to game server");
205
+ }
206
+ this.ws.send(JSON.stringify(data));
207
+ }
208
+ /**
209
+ * Register an event listener
210
+ *
211
+ * @param event - Event type to listen for
212
+ * @param callback - Callback function
213
+ * @returns Unsubscribe function
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * // Listen for player joining
218
+ * const unsub = game.on('player_joined', (data) => {
219
+ * console.log('Player joined:', data.player_id);
220
+ * });
221
+ *
222
+ * // Later, unsubscribe
223
+ * unsub();
224
+ *
225
+ * // Common events:
226
+ * game.on('connected', (data) => { ... });
227
+ * game.on('player_joined', (data) => { ... });
228
+ * game.on('player_left', (data) => { ... });
229
+ * game.on('state', (data) => { ... });
230
+ * game.on('tick', (data) => { ... });
231
+ * game.on('error', (data) => { ... });
232
+ * game.on('disconnected', (data) => { ... });
233
+ * ```
234
+ */
235
+ on(event, callback) {
236
+ if (!this.listeners.has(event)) {
237
+ this.listeners.set(event, []);
238
+ }
239
+ this.listeners.get(event).push(callback);
240
+ // Return unsubscribe function
241
+ return () => {
242
+ const callbacks = this.listeners.get(event);
243
+ if (callbacks) {
244
+ const index = callbacks.indexOf(callback);
245
+ if (index !== -1) {
246
+ callbacks.splice(index, 1);
247
+ }
248
+ }
249
+ };
250
+ }
251
+ /**
252
+ * Register a one-time event listener
253
+ *
254
+ * @param event - Event type to listen for
255
+ * @param callback - Callback function (called once then removed)
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * game.once('connected', (data) => {
260
+ * console.log('Connected with ID:', data.your_id);
261
+ * });
262
+ * ```
263
+ */
264
+ once(event, callback) {
265
+ const wrapper = (data) => {
266
+ this.off(event, wrapper);
267
+ callback(data);
268
+ };
269
+ this.on(event, wrapper);
270
+ }
271
+ /**
272
+ * Remove an event listener
273
+ *
274
+ * @param event - Event type
275
+ * @param callback - Callback to remove
276
+ */
277
+ off(event, callback) {
278
+ const callbacks = this.listeners.get(event);
279
+ if (callbacks) {
280
+ const index = callbacks.indexOf(callback);
281
+ if (index !== -1) {
282
+ callbacks.splice(index, 1);
283
+ }
284
+ }
285
+ }
286
+ /**
287
+ * Remove all listeners for an event (or all events)
288
+ *
289
+ * @param event - Optional event type. If not provided, removes all listeners.
290
+ */
291
+ removeAllListeners(event) {
292
+ if (event) {
293
+ this.listeners.delete(event);
294
+ }
295
+ else {
296
+ this.listeners.clear();
297
+ }
298
+ }
299
+ /**
300
+ * Disconnect from the game server
301
+ *
302
+ * @param disableReconnect - If true, prevents auto-reconnect
303
+ */
304
+ disconnect(disableReconnect = true) {
305
+ if (disableReconnect) {
306
+ this.reconnectEnabled = false;
307
+ }
308
+ if (this.reconnectTimeout) {
309
+ clearTimeout(this.reconnectTimeout);
310
+ this.reconnectTimeout = undefined;
311
+ }
312
+ if (this.pingInterval) {
313
+ clearInterval(this.pingInterval);
314
+ this.pingInterval = undefined;
315
+ }
316
+ if (this.ws) {
317
+ this.ws.close(1000, "Client disconnect");
318
+ this.ws = null;
319
+ }
320
+ this._isConnected = false;
321
+ this._playerId = undefined;
322
+ }
323
+ /**
324
+ * Enable or disable auto-reconnect
325
+ */
326
+ setAutoReconnect(enabled) {
327
+ this.reconnectEnabled = enabled;
328
+ if (!enabled && this.reconnectTimeout) {
329
+ clearTimeout(this.reconnectTimeout);
330
+ this.reconnectTimeout = undefined;
331
+ }
332
+ }
333
+ emit(event, data) {
334
+ const callbacks = this.listeners.get(event);
335
+ if (callbacks) {
336
+ callbacks.forEach((cb) => {
337
+ try {
338
+ cb(data);
339
+ }
340
+ catch (err) {
341
+ console.error(`Error in ${event} handler:`, err);
342
+ }
343
+ });
344
+ }
345
+ // Also emit to wildcard listeners
346
+ const wildcardCallbacks = this.listeners.get("*");
347
+ if (wildcardCallbacks) {
348
+ wildcardCallbacks.forEach((cb) => {
349
+ try {
350
+ cb({ event, data });
351
+ }
352
+ catch (err) {
353
+ console.error("Error in wildcard handler:", err);
354
+ }
355
+ });
356
+ }
357
+ }
358
+ scheduleReconnect() {
359
+ if (this.reconnectTimeout)
360
+ return;
361
+ this.reconnectTimeout = setTimeout(async () => {
362
+ this.reconnectTimeout = undefined;
363
+ if (this.lastConnectOptions && this.reconnectEnabled) {
364
+ try {
365
+ await this.connect(this.lastConnectOptions);
366
+ }
367
+ catch {
368
+ // Exponential backoff
369
+ this.currentReconnectDelay = Math.min(this.currentReconnectDelay * 2, this.maxReconnectDelay);
370
+ this.scheduleReconnect();
371
+ }
372
+ }
373
+ }, this.currentReconnectDelay);
374
+ }
375
+ }
376
+ exports.GameClient = GameClient;
377
+ /**
378
+ * List available game rooms for a function
379
+ *
380
+ * @param projectId - Project ID
381
+ * @param apiKey - API key (optional)
382
+ * @param publicOnly - Only list public rooms (default: true)
383
+ * @returns Promise resolving to room list
384
+ *
385
+ * @example
386
+ * ```typescript
387
+ * const { rooms, total } = await listGameRooms('my-project');
388
+ * rooms.forEach(room => {
389
+ * console.log(`${room.room_id}: ${room.player_count}/${room.max_players} players`);
390
+ * });
391
+ * ```
392
+ */
393
+ async function listGameRooms(projectId, apiKey, publicOnly = true) {
394
+ const url = `${utils_js_1.BASEURL}/ws/rooms/${projectId}?public_only=${publicOnly}`;
395
+ const res = await fetch(url, {
396
+ headers: apiKey ? { "X-API-Key": apiKey } : {},
397
+ });
398
+ if (!res.ok) {
399
+ const text = await res.text();
400
+ throw new Error(`Failed to list game rooms: ${text}`);
401
+ }
402
+ return res.json();
403
+ }
404
+ //# sourceMappingURL=multiplayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiplayer.js","sourceRoot":"","sources":["../../../src/realtime/multiplayer.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export interface CocobaseConfig {
9
9
  /** Your Cocobase project ID (required for cloud functions) */
10
10
  projectId?: string;
11
11
  }
12
+ export interface Response {
13
+ message: string;
14
+ }
12
15
  /**
13
16
  * Represents a collection in the database.
14
17
  */
@@ -91,9 +94,36 @@ export interface Query {
91
94
  * Response from authentication operations containing the access token.
92
95
  */
93
96
  export interface TokenResponse {
94
- /** JWT access token for authenticated requests */
97
+ /** JWT access token for authenticated requests (undefined if 2FA required) */
98
+ access_token?: string;
99
+ /** User object (undefined if 2FA required) */
100
+ user?: AppUser;
101
+ /** Whether 2FA verification is required to complete login */
102
+ requires_2fa?: boolean;
103
+ /** Message from the server (e.g., "2FA code sent to your email") */
104
+ message?: string;
105
+ }
106
+ /**
107
+ * Response from 2FA verification endpoint.
108
+ */
109
+ export interface TwoFAVerifyResponse {
110
+ /** JWT access token after successful 2FA verification */
95
111
  access_token: string;
112
+ /** User object */
96
113
  user: AppUser;
114
+ /** Success message */
115
+ message: string;
116
+ }
117
+ /**
118
+ * Login result that clearly indicates whether 2FA is required.
119
+ */
120
+ export interface LoginResult {
121
+ /** Whether 2FA verification is required */
122
+ requires_2fa: boolean;
123
+ /** User object (only present if login succeeded without 2FA) */
124
+ user?: AppUser;
125
+ /** Message from server (present when 2FA is required) */
126
+ message?: string;
97
127
  }
98
128
  /**
99
129
  * Paginated list of users with metadata.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CocobaseConfig, AppUser, AppUserList, Query, AuthCallbacks } from "../types/types.js";
1
+ import { CocobaseConfig, AppUser, AppUserList, Query, AuthCallbacks, Response, LoginResult } from "../types/types.js";
2
2
  /**
3
3
  * Authentication handler for Cocobase client.
4
4
  *
@@ -137,32 +137,46 @@ export declare class AuthHandler {
137
137
  *
138
138
  * @param email - User's email address
139
139
  * @param password - User's password
140
- * @returns Promise that resolves when login is complete
140
+ * @returns Promise resolving to LoginResult indicating success or 2FA requirement
141
141
  *
142
142
  * @example
143
143
  * ```typescript
144
- * await db.auth.login('user@example.com', 'password123');
145
- * console.log('Logged in as:', db.auth.getUser()?.email);
144
+ * const result = await db.auth.login('user@example.com', 'password123');
145
+ *
146
+ * if (result.requires_2fa) {
147
+ * // Show 2FA input form to user
148
+ * console.log(result.message); // "2FA code sent to your email"
149
+ * // Later, call verify2FALogin with the code
150
+ * } else {
151
+ * // Login successful
152
+ * console.log('Logged in as:', result.user?.email);
153
+ * }
146
154
  * ```
147
155
  */
148
- login(email: string, password: string): Promise<void>;
156
+ login(email: string, password: string): Promise<LoginResult>;
149
157
  /**
150
158
  * Registers a new user with email, password, and optional additional data.
151
159
  *
152
160
  * @param email - User's email address
153
161
  * @param password - User's password
154
162
  * @param data - Optional additional user data
155
- * @returns Promise that resolves when registration is complete
163
+ * @returns Promise resolving to LoginResult (registration may require 2FA if enabled)
156
164
  *
157
165
  * @example
158
166
  * ```typescript
159
- * await db.auth.register('user@example.com', 'password123', {
167
+ * const result = await db.auth.register('user@example.com', 'password123', {
160
168
  * username: 'johndoe',
161
169
  * fullName: 'John Doe'
162
170
  * });
171
+ *
172
+ * if (result.requires_2fa) {
173
+ * // Handle 2FA verification
174
+ * } else {
175
+ * console.log('Registered as:', result.user?.email);
176
+ * }
163
177
  * ```
164
178
  */
165
- register(email: string, password: string, data?: Record<string, any>): Promise<void>;
179
+ register(email: string, password: string, data?: Record<string, any>): Promise<LoginResult>;
166
180
  /**
167
181
  * Authenticates a user using Google Sign-In with ID token.
168
182
  *
@@ -259,7 +273,7 @@ export declare class AuthHandler {
259
273
  * );
260
274
  * ```
261
275
  */
262
- registerWithFiles(email: string, password: string, data?: Record<string, any>, files?: Record<string, File | File[]>): Promise<AppUser>;
276
+ registerWithFiles(email: string, password: string, data?: Record<string, any>, files?: Record<string, File | File[]>): Promise<LoginResult>;
263
277
  /**
264
278
  * Logs out the current user by clearing the token and user data.
265
279
  *
@@ -389,6 +403,99 @@ export declare class AuthHandler {
389
403
  * ```
390
404
  */
391
405
  getUserById<T = any>(userId: string): Promise<AppUser>;
406
+ /**
407
+ * Enables Two-Factor Authentication (2FA) for the current user.
408
+ *
409
+ * @returns Promise that resolves when 2FA is enabled
410
+ *
411
+ * @example
412
+ * ```typescript
413
+ * await db.auth.enable2FA();
414
+ * console.log('2FA enabled for user');
415
+ * ```
416
+ */
417
+ enable2FA(): Promise<void>;
418
+ /**
419
+ * Disables Two-Factor Authentication (2FA) for the current user.
420
+ *
421
+ * @returns Promise that resolves when 2FA is disabled
422
+ *
423
+ * @example
424
+ * ```typescript
425
+ * await db.auth.disable2FA();
426
+ * console.log('2FA disabled for user');
427
+ * ```
428
+ */
429
+ disable2FA(): Promise<void>;
430
+ /**
431
+ * Sends a Two-Factor Authentication (2FA) code to the user's registered method (e.g., email, SMS).
432
+ *
433
+ * @returns Promise that resolves when the 2FA code is sent
434
+ *
435
+ * @example
436
+ * ```typescript
437
+ * await db.auth.send2FACode();
438
+ * console.log('2FA code sent to user');
439
+ * ```
440
+ */
441
+ send2FACode(email: string): Promise<void>;
442
+ /**
443
+ * Completes login after 2FA verification.
444
+ * Call this after login() returns requires_2fa: true and the user provides the 2FA code.
445
+ *
446
+ * @param email - User's email address (same as used in login)
447
+ * @param code - The 2FA code from email/authenticator
448
+ * @returns Promise resolving to the authenticated user
449
+ *
450
+ * @example
451
+ * ```typescript
452
+ * // First, attempt login
453
+ * const result = await db.auth.login('user@example.com', 'password123');
454
+ *
455
+ * if (result.requires_2fa) {
456
+ * // User enters the 2FA code they received
457
+ * const user = await db.auth.verify2FALogin('user@example.com', '123456');
458
+ * console.log('Logged in as:', user.email);
459
+ * }
460
+ * ```
461
+ */
462
+ verify2FALogin(email: string, code: string): Promise<AppUser>;
463
+ /**
464
+ * Requests an email verification to be sent to the user's email address.
465
+ *
466
+ * @returns Promise that resolves when the verification email is requested
467
+ *
468
+ * @example
469
+ * ```typescript
470
+ * await db.auth.requestEmailVerification();
471
+ * console.log('Verification email requested');
472
+ * ```
473
+ */
474
+ requestEmailVerification(): Promise<Response>;
475
+ /**
476
+ * Verifies the user's email using the provided token.
477
+ *
478
+ * @param token - Verification token
479
+ * @returns Promise that resolves when the email is verified
480
+ *
481
+ * @example
482
+ * ```typescript
483
+ * await db.auth.verifyEmail('verification-token');
484
+ * console.log('Email verified');
485
+ * ```
486
+ */
487
+ verifyEmail(token: string): Promise<Response>;
488
+ /** * Resends the email verification to the user's email address.
489
+ *
490
+ * @returns Promise that resolves when the verification email is resent
491
+ *
492
+ * @example
493
+ * ```typescript
494
+ * await db.auth.resendVerificationEmail();
495
+ * console.log('Verification email resent');
496
+ * ```
497
+ */
498
+ resendVerificationEmail(): Promise<void>;
392
499
  }
393
500
  export default AuthHandler;
394
501
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}