cocobase 1.3.5 → 1.5.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.
- package/dist/cjs/core/auth.d.ts +165 -62
- package/dist/cjs/core/auth.d.ts.map +1 -1
- package/dist/cjs/core/auth.js +229 -64
- package/dist/cjs/core/auth.js.map +1 -1
- package/dist/cjs/core/core.d.ts +73 -141
- package/dist/cjs/core/core.d.ts.map +1 -1
- package/dist/cjs/core/core.js +34 -160
- package/dist/cjs/core/core.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/realtime/multiplayer.d.ts +228 -0
- package/dist/cjs/realtime/multiplayer.d.ts.map +1 -0
- package/dist/cjs/realtime/multiplayer.js +404 -0
- package/dist/cjs/realtime/multiplayer.js.map +1 -0
- package/dist/cjs/types/params.d.ts +95 -0
- package/dist/cjs/types/params.d.ts.map +1 -0
- package/dist/cjs/types/params.js +7 -0
- package/dist/cjs/types/params.js.map +1 -0
- package/dist/cjs/types/types.d.ts +31 -1
- package/dist/cjs/types/types.d.ts.map +1 -1
- package/dist/core/auth.d.ts +165 -62
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +229 -64
- package/dist/core/auth.js.map +1 -1
- package/dist/core/core.d.ts +73 -141
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.js +34 -160
- package/dist/core/core.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/realtime/multiplayer.d.ts +228 -0
- package/dist/realtime/multiplayer.d.ts.map +1 -0
- package/dist/realtime/multiplayer.js +399 -0
- package/dist/realtime/multiplayer.js.map +1 -0
- package/dist/types/params.d.ts +95 -0
- package/dist/types/params.d.ts.map +1 -0
- package/dist/types/params.js +6 -0
- package/dist/types/params.js.map +1 -0
- package/dist/types/types.d.ts +31 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/core/auth.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
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
|
+
import { RegisterParams, RegisterWithFilesParams, LoginParams, UpdateUserParams, UpdateUserWithFilesParams, GoogleLoginParams, GithubLoginParams, Verify2FAParams } from "../types/params.js";
|
|
2
3
|
/**
|
|
3
4
|
* Authentication handler for Cocobase client.
|
|
4
5
|
*
|
|
@@ -15,7 +16,7 @@ export declare class AuthHandler {
|
|
|
15
16
|
private baseURL;
|
|
16
17
|
private apiKey?;
|
|
17
18
|
private token?;
|
|
18
|
-
|
|
19
|
+
user?: AppUser;
|
|
19
20
|
private callbacks;
|
|
20
21
|
/**
|
|
21
22
|
* Creates a new AuthHandler instance.
|
|
@@ -135,34 +136,50 @@ export declare class AuthHandler {
|
|
|
135
136
|
/**
|
|
136
137
|
* Authenticates a user with email and password.
|
|
137
138
|
*
|
|
138
|
-
* @param
|
|
139
|
-
* @
|
|
140
|
-
* @returns Promise that resolves when login is complete
|
|
139
|
+
* @param params - Login parameters
|
|
140
|
+
* @returns Promise resolving to LoginResult indicating success or 2FA requirement
|
|
141
141
|
*
|
|
142
142
|
* @example
|
|
143
143
|
* ```typescript
|
|
144
|
-
* await db.auth.login(
|
|
145
|
-
*
|
|
144
|
+
* const result = await db.auth.login({
|
|
145
|
+
* email: 'user@example.com',
|
|
146
|
+
* password: 'password123'
|
|
147
|
+
* });
|
|
148
|
+
*
|
|
149
|
+
* if (result.requires_2fa) {
|
|
150
|
+
* // Show 2FA input form to user
|
|
151
|
+
* console.log(result.message); // "2FA code sent to your email"
|
|
152
|
+
* // Later, call verify2FALogin with the code
|
|
153
|
+
* } else {
|
|
154
|
+
* // Login successful
|
|
155
|
+
* console.log('Logged in as:', result.user?.email);
|
|
156
|
+
* }
|
|
146
157
|
* ```
|
|
147
158
|
*/
|
|
148
|
-
login(
|
|
159
|
+
login(params: LoginParams): Promise<LoginResult>;
|
|
149
160
|
/**
|
|
150
161
|
* Registers a new user with email, password, and optional additional data.
|
|
151
162
|
*
|
|
152
|
-
* @param
|
|
153
|
-
* @
|
|
154
|
-
* @param data - Optional additional user data
|
|
155
|
-
* @returns Promise that resolves when registration is complete
|
|
163
|
+
* @param params - Registration parameters
|
|
164
|
+
* @returns Promise resolving to LoginResult (registration may require 2FA if enabled)
|
|
156
165
|
*
|
|
157
166
|
* @example
|
|
158
167
|
* ```typescript
|
|
159
|
-
* await db.auth.register(
|
|
160
|
-
*
|
|
161
|
-
*
|
|
168
|
+
* const result = await db.auth.register({
|
|
169
|
+
* email: 'user@example.com',
|
|
170
|
+
* password: 'password123',
|
|
171
|
+
* data: { username: 'johndoe', fullName: 'John Doe' },
|
|
172
|
+
* roles: ['user'] // optional, if allowed by project config
|
|
162
173
|
* });
|
|
174
|
+
*
|
|
175
|
+
* if (result.requires_2fa) {
|
|
176
|
+
* // Handle 2FA verification
|
|
177
|
+
* } else {
|
|
178
|
+
* console.log('Registered as:', result.user?.email);
|
|
179
|
+
* }
|
|
163
180
|
* ```
|
|
164
181
|
*/
|
|
165
|
-
register(
|
|
182
|
+
register(params: RegisterParams): Promise<LoginResult>;
|
|
166
183
|
/**
|
|
167
184
|
* Authenticates a user using Google Sign-In with ID token.
|
|
168
185
|
*
|
|
@@ -190,10 +207,10 @@ export declare class AuthHandler {
|
|
|
190
207
|
* });
|
|
191
208
|
*
|
|
192
209
|
* // Mobile - After getting ID token from Google Sign-In SDK
|
|
193
|
-
* const user = await db.auth.loginWithGoogle(idToken, 'mobile');
|
|
210
|
+
* const user = await db.auth.loginWithGoogle({ idToken, platform: 'mobile' });
|
|
194
211
|
* ```
|
|
195
212
|
*/
|
|
196
|
-
loginWithGoogle(
|
|
213
|
+
loginWithGoogle(params: GoogleLoginParams): Promise<AppUser>;
|
|
197
214
|
/**
|
|
198
215
|
* Authenticates a user using GitHub OAuth with authorization code.
|
|
199
216
|
*
|
|
@@ -231,35 +248,32 @@ export declare class AuthHandler {
|
|
|
231
248
|
* }
|
|
232
249
|
* ```
|
|
233
250
|
*/
|
|
234
|
-
loginWithGithub(
|
|
251
|
+
loginWithGithub(params: GithubLoginParams): Promise<AppUser>;
|
|
235
252
|
/**
|
|
236
253
|
* Register a new user with file uploads (avatar, cover photo, etc.)
|
|
237
254
|
*
|
|
238
|
-
* @param
|
|
239
|
-
* @param password - User password
|
|
240
|
-
* @param data - Additional user data (optional)
|
|
241
|
-
* @param files - Object mapping field names to File objects (optional)
|
|
255
|
+
* @param params - Registration parameters with files
|
|
242
256
|
*
|
|
243
257
|
* @example
|
|
244
258
|
* ```typescript
|
|
245
259
|
* // Register with avatar
|
|
246
|
-
* await db.auth.registerWithFiles(
|
|
247
|
-
* 'john@example.com',
|
|
248
|
-
* 'password123',
|
|
249
|
-
* { username: 'johndoe', full_name: 'John Doe' },
|
|
250
|
-
* { avatar: avatarFile }
|
|
251
|
-
* );
|
|
260
|
+
* await db.auth.registerWithFiles({
|
|
261
|
+
* email: 'john@example.com',
|
|
262
|
+
* password: 'password123',
|
|
263
|
+
* data: { username: 'johndoe', full_name: 'John Doe' },
|
|
264
|
+
* files: { avatar: avatarFile }
|
|
265
|
+
* });
|
|
252
266
|
*
|
|
253
267
|
* // Register with avatar and cover photo
|
|
254
|
-
* await db.auth.registerWithFiles(
|
|
255
|
-
* 'john@example.com',
|
|
256
|
-
* 'password123',
|
|
257
|
-
* { username: 'johndoe' },
|
|
258
|
-
* { avatar: avatarFile, cover_photo: coverFile }
|
|
259
|
-
* );
|
|
268
|
+
* await db.auth.registerWithFiles({
|
|
269
|
+
* email: 'john@example.com',
|
|
270
|
+
* password: 'password123',
|
|
271
|
+
* data: { username: 'johndoe' },
|
|
272
|
+
* files: { avatar: avatarFile, cover_photo: coverFile }
|
|
273
|
+
* });
|
|
260
274
|
* ```
|
|
261
275
|
*/
|
|
262
|
-
registerWithFiles(
|
|
276
|
+
registerWithFiles(params: RegisterWithFilesParams): Promise<LoginResult>;
|
|
263
277
|
/**
|
|
264
278
|
* Logs out the current user by clearing the token and user data.
|
|
265
279
|
*
|
|
@@ -298,53 +312,50 @@ export declare class AuthHandler {
|
|
|
298
312
|
/**
|
|
299
313
|
* Updates the current user's profile data.
|
|
300
314
|
*
|
|
301
|
-
* @param
|
|
302
|
-
* @param email - New email address (optional)
|
|
303
|
-
* @param password - New password (optional)
|
|
315
|
+
* @param params - Update parameters
|
|
304
316
|
* @returns Promise resolving to the updated user object
|
|
305
317
|
*
|
|
306
318
|
* @example
|
|
307
319
|
* ```typescript
|
|
308
320
|
* await db.auth.updateUser({
|
|
309
|
-
* bio: 'Updated bio',
|
|
310
|
-
* website: 'https://example.com'
|
|
321
|
+
* data: { bio: 'Updated bio', website: 'https://example.com' }
|
|
311
322
|
* });
|
|
323
|
+
*
|
|
324
|
+
* // Update email
|
|
325
|
+
* await db.auth.updateUser({ email: 'newemail@example.com' });
|
|
326
|
+
*
|
|
327
|
+
* // Update password
|
|
328
|
+
* await db.auth.updateUser({ password: 'newpassword123' });
|
|
312
329
|
* ```
|
|
313
330
|
*/
|
|
314
|
-
updateUser(
|
|
331
|
+
updateUser(params: UpdateUserParams): Promise<AppUser>;
|
|
315
332
|
/**
|
|
316
333
|
* Update current user with file uploads
|
|
317
334
|
*
|
|
318
|
-
* @param
|
|
319
|
-
* @param email - New email (optional)
|
|
320
|
-
* @param password - New password (optional)
|
|
321
|
-
* @param files - Object mapping field names to File objects (optional)
|
|
335
|
+
* @param params - Update parameters with files
|
|
322
336
|
*
|
|
323
337
|
* @example
|
|
324
338
|
* ```typescript
|
|
325
339
|
* // Update only avatar
|
|
326
|
-
* await db.auth.updateUserWithFiles(
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
* );
|
|
340
|
+
* await db.auth.updateUserWithFiles({
|
|
341
|
+
* files: { avatar: newAvatarFile }
|
|
342
|
+
* });
|
|
330
343
|
*
|
|
331
344
|
* // Update bio and avatar
|
|
332
|
-
* await db.auth.updateUserWithFiles(
|
|
333
|
-
* { bio: 'Updated bio' },
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
* );
|
|
345
|
+
* await db.auth.updateUserWithFiles({
|
|
346
|
+
* data: { bio: 'Updated bio' },
|
|
347
|
+
* files: { avatar: newAvatarFile }
|
|
348
|
+
* });
|
|
337
349
|
*
|
|
338
350
|
* // Update multiple fields and files
|
|
339
|
-
* await db.auth.updateUserWithFiles(
|
|
340
|
-
* { username: 'newusername', bio: 'New bio' },
|
|
341
|
-
* 'newemail@example.com',
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
* );
|
|
351
|
+
* await db.auth.updateUserWithFiles({
|
|
352
|
+
* data: { username: 'newusername', bio: 'New bio' },
|
|
353
|
+
* email: 'newemail@example.com',
|
|
354
|
+
* files: { avatar: newAvatar, cover_photo: newCover }
|
|
355
|
+
* });
|
|
345
356
|
* ```
|
|
346
357
|
*/
|
|
347
|
-
updateUserWithFiles(
|
|
358
|
+
updateUserWithFiles(params: UpdateUserWithFilesParams): Promise<AppUser>;
|
|
348
359
|
/**
|
|
349
360
|
* Checks if the current user has a specific role.
|
|
350
361
|
*
|
|
@@ -389,6 +400,98 @@ export declare class AuthHandler {
|
|
|
389
400
|
* ```
|
|
390
401
|
*/
|
|
391
402
|
getUserById<T = any>(userId: string): Promise<AppUser>;
|
|
403
|
+
/**
|
|
404
|
+
* Enables Two-Factor Authentication (2FA) for the current user.
|
|
405
|
+
*
|
|
406
|
+
* @returns Promise that resolves when 2FA is enabled
|
|
407
|
+
*
|
|
408
|
+
* @example
|
|
409
|
+
* ```typescript
|
|
410
|
+
* await db.auth.enable2FA();
|
|
411
|
+
* console.log('2FA enabled for user');
|
|
412
|
+
* ```
|
|
413
|
+
*/
|
|
414
|
+
enable2FA(): Promise<void>;
|
|
415
|
+
/**
|
|
416
|
+
* Disables Two-Factor Authentication (2FA) for the current user.
|
|
417
|
+
*
|
|
418
|
+
* @returns Promise that resolves when 2FA is disabled
|
|
419
|
+
*
|
|
420
|
+
* @example
|
|
421
|
+
* ```typescript
|
|
422
|
+
* await db.auth.disable2FA();
|
|
423
|
+
* console.log('2FA disabled for user');
|
|
424
|
+
* ```
|
|
425
|
+
*/
|
|
426
|
+
disable2FA(): Promise<void>;
|
|
427
|
+
/**
|
|
428
|
+
* Sends a Two-Factor Authentication (2FA) code to the user's registered method (e.g., email, SMS).
|
|
429
|
+
*
|
|
430
|
+
* @returns Promise that resolves when the 2FA code is sent
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
* ```typescript
|
|
434
|
+
* await db.auth.send2FACode();
|
|
435
|
+
* console.log('2FA code sent to user');
|
|
436
|
+
* ```
|
|
437
|
+
*/
|
|
438
|
+
send2FACode(email: string): Promise<void>;
|
|
439
|
+
/**
|
|
440
|
+
* Completes login after 2FA verification.
|
|
441
|
+
* Call this after login() returns requires_2fa: true and the user provides the 2FA code.
|
|
442
|
+
*
|
|
443
|
+
* @param params - 2FA verification parameters
|
|
444
|
+
* @returns Promise resolving to the authenticated user
|
|
445
|
+
*
|
|
446
|
+
* @example
|
|
447
|
+
* ```typescript
|
|
448
|
+
* // First, attempt login
|
|
449
|
+
* const result = await db.auth.login({ email: 'user@example.com', password: 'password123' });
|
|
450
|
+
*
|
|
451
|
+
* if (result.requires_2fa) {
|
|
452
|
+
* // User enters the 2FA code they received
|
|
453
|
+
* const user = await db.auth.verify2FALogin({ email: 'user@example.com', code: '123456' });
|
|
454
|
+
* console.log('Logged in as:', user.email);
|
|
455
|
+
* }
|
|
456
|
+
* ```
|
|
457
|
+
*/
|
|
458
|
+
verify2FALogin(params: Verify2FAParams): Promise<AppUser>;
|
|
459
|
+
/**
|
|
460
|
+
* Requests an email verification to be sent to the user's email address.
|
|
461
|
+
*
|
|
462
|
+
* @returns Promise that resolves when the verification email is requested
|
|
463
|
+
*
|
|
464
|
+
* @example
|
|
465
|
+
* ```typescript
|
|
466
|
+
* await db.auth.requestEmailVerification();
|
|
467
|
+
* console.log('Verification email requested');
|
|
468
|
+
* ```
|
|
469
|
+
*/
|
|
470
|
+
requestEmailVerification(): Promise<Response>;
|
|
471
|
+
/**
|
|
472
|
+
* Verifies the user's email using the provided token.
|
|
473
|
+
*
|
|
474
|
+
* @param token - Verification token
|
|
475
|
+
* @returns Promise that resolves when the email is verified
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* ```typescript
|
|
479
|
+
* await db.auth.verifyEmail('verification-token');
|
|
480
|
+
* console.log('Email verified');
|
|
481
|
+
* ```
|
|
482
|
+
*/
|
|
483
|
+
verifyEmail(token: string): Promise<Response>;
|
|
484
|
+
/** * Resends the email verification to the user's email address.
|
|
485
|
+
*
|
|
486
|
+
* @returns Promise that resolves when the verification email is resent
|
|
487
|
+
*
|
|
488
|
+
* @example
|
|
489
|
+
* ```typescript
|
|
490
|
+
* await db.auth.resendVerificationEmail();
|
|
491
|
+
* console.log('Verification email resent');
|
|
492
|
+
* ```
|
|
493
|
+
*/
|
|
494
|
+
resendVerificationEmail(): Promise<void>;
|
|
392
495
|
}
|
|
393
496
|
export default AuthHandler;
|
|
394
497
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,OAAO,EACP,WAAW,EACX,KAAK,EAEL,aAAa,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/core/auth.ts"],"names":[],"mappings":"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"}
|