@seaverse/data-service-sdk 0.4.0 → 0.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/index.cjs CHANGED
@@ -265,8 +265,99 @@ class DataServiceClient {
265
265
  }
266
266
  }
267
267
 
268
+ /**
269
+ * Create Firebase configuration from Firestore token response
270
+ *
271
+ * This helper function extracts the Firebase config from the token response,
272
+ * making it easy to initialize Firebase app.
273
+ *
274
+ * @param tokenResponse - The Firestore token response from SDK
275
+ * @returns Firebase configuration object ready for initializeApp()
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * import { initializeApp } from 'firebase/app';
280
+ * import { getFirebaseConfig } from '@seaverse/data-service-sdk';
281
+ *
282
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
283
+ * const firebaseConfig = getFirebaseConfig(tokenResponse);
284
+ *
285
+ * const app = initializeApp(firebaseConfig);
286
+ * ```
287
+ */
288
+ function getFirebaseConfig(tokenResponse) {
289
+ return {
290
+ apiKey: tokenResponse.web_api_key,
291
+ projectId: tokenResponse.project_id,
292
+ };
293
+ }
294
+ /**
295
+ * Initialize Firebase with Firestore token response (browser only)
296
+ *
297
+ * This is a convenience function that automatically:
298
+ * 1. Creates Firebase config from token response
299
+ * 2. Initializes Firebase app
300
+ * 3. Signs in with the custom token
301
+ * 4. Returns authenticated Firebase instances
302
+ *
303
+ * IMPORTANT: This function requires Firebase SDK to be installed separately:
304
+ * npm install firebase
305
+ *
306
+ * @param tokenResponse - The Firestore token response from SDK
307
+ * @returns Object containing initialized Firebase app, auth, and db instances
308
+ *
309
+ * @example
310
+ * ```typescript
311
+ * import { initializeWithToken } from '@seaverse/data-service-sdk';
312
+ *
313
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
314
+ * const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
315
+ *
316
+ * // Ready to use Firestore!
317
+ * const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
318
+ * ```
319
+ */
320
+ async function initializeWithToken(tokenResponse) {
321
+ // Check if Firebase SDK is available
322
+ let initializeApp;
323
+ let getAuth;
324
+ let signInWithCustomToken;
325
+ let getFirestore;
326
+ try {
327
+ // Try to import Firebase modules
328
+ const firebaseApp = await import('firebase/app');
329
+ const firebaseAuth = await import('firebase/auth');
330
+ const firebaseFirestore = await import('firebase/firestore');
331
+ initializeApp = firebaseApp.initializeApp;
332
+ getAuth = firebaseAuth.getAuth;
333
+ signInWithCustomToken = firebaseAuth.signInWithCustomToken;
334
+ getFirestore = firebaseFirestore.getFirestore;
335
+ }
336
+ catch (error) {
337
+ throw new Error('Firebase SDK not found. Please install it: npm install firebase\n' +
338
+ 'Or import manually and use getFirebaseConfig() helper instead.');
339
+ }
340
+ // Initialize Firebase
341
+ const config = getFirebaseConfig(tokenResponse);
342
+ const app = initializeApp(config);
343
+ // Sign in with custom token
344
+ const auth = getAuth(app);
345
+ await signInWithCustomToken(auth, tokenResponse.custom_token);
346
+ // Get Firestore instance
347
+ const db = getFirestore(app);
348
+ return {
349
+ app,
350
+ auth,
351
+ db,
352
+ userId: tokenResponse.user_id,
353
+ appId: tokenResponse.app_id || '',
354
+ };
355
+ }
356
+
268
357
  exports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;
269
358
  exports.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
270
359
  exports.DataServiceClient = DataServiceClient;
271
360
  exports.ENDPOINTS = ENDPOINTS;
361
+ exports.getFirebaseConfig = getFirebaseConfig;
362
+ exports.initializeWithToken = initializeWithToken;
272
363
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/config.ts","../src/client.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/config.ts","../src/client.ts","../src/helpers.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -127,9 +127,24 @@ interface FirestoreTokenResponse {
127
127
  * Custom Token itself does not expire, but the ID Token it generates expires after 1 hour
128
128
  */
129
129
  custom_token: string;
130
+ /**
131
+ * Firebase Web API Key
132
+ * Use this to initialize Firebase app along with project_id
133
+ * This is automatically provided by the backend
134
+ *
135
+ * Example:
136
+ * ```typescript
137
+ * import { initializeApp } from 'firebase/app';
138
+ * const app = initializeApp({
139
+ * apiKey: response.web_api_key,
140
+ * projectId: response.project_id
141
+ * });
142
+ * ```
143
+ */
144
+ web_api_key: string;
130
145
  /**
131
146
  * Firebase Project ID
132
- * Use this to initialize Firebase app: initializeApp({ projectId: '...' })
147
+ * Use this to initialize Firebase app
133
148
  */
134
149
  project_id: string;
135
150
  /**
@@ -151,15 +166,15 @@ interface FirestoreTokenResponse {
151
166
  */
152
167
  user_id: string;
153
168
  /**
154
- * User role - Determines write permissions
169
+ * User type - Determines access permissions
155
170
  * - 'guest': Can read publicRead/publicData, write publicData
156
171
  * - 'user': Can read publicRead/publicData, write publicData, read/write own userData
157
172
  * - 'admin' or 'appadmin': Can also write to publicRead data
158
173
  */
159
- role?: string;
174
+ user_type: string;
160
175
  /**
161
176
  * Token expiration time in seconds (typically 3600 = 1 hour)
162
- * After this time, you need to generate a new token or refresh using refresh_token
177
+ * After this time, you need to generate a new token
163
178
  */
164
179
  expires_in: number;
165
180
  }
@@ -418,5 +433,69 @@ declare const ENDPOINTS: {
418
433
  readonly FIRESTORE_GUEST_TOKEN: "/api/v1/firestore/guest-token";
419
434
  };
420
435
 
421
- export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS };
422
- export type { ApiError, ApiResponse, DataServiceClientOptions, FirestoreTokenResponse, GenerateFirestoreTokenRequest, GenerateGuestFirestoreTokenRequest };
436
+ /**
437
+ * Firebase initialization configuration
438
+ * Generated from Firestore token response
439
+ */
440
+ interface FirebaseConfig {
441
+ apiKey: string;
442
+ projectId: string;
443
+ [key: string]: any;
444
+ }
445
+ /**
446
+ * Create Firebase configuration from Firestore token response
447
+ *
448
+ * This helper function extracts the Firebase config from the token response,
449
+ * making it easy to initialize Firebase app.
450
+ *
451
+ * @param tokenResponse - The Firestore token response from SDK
452
+ * @returns Firebase configuration object ready for initializeApp()
453
+ *
454
+ * @example
455
+ * ```typescript
456
+ * import { initializeApp } from 'firebase/app';
457
+ * import { getFirebaseConfig } from '@seaverse/data-service-sdk';
458
+ *
459
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
460
+ * const firebaseConfig = getFirebaseConfig(tokenResponse);
461
+ *
462
+ * const app = initializeApp(firebaseConfig);
463
+ * ```
464
+ */
465
+ declare function getFirebaseConfig(tokenResponse: FirestoreTokenResponse): FirebaseConfig;
466
+ /**
467
+ * Initialize Firebase with Firestore token response (browser only)
468
+ *
469
+ * This is a convenience function that automatically:
470
+ * 1. Creates Firebase config from token response
471
+ * 2. Initializes Firebase app
472
+ * 3. Signs in with the custom token
473
+ * 4. Returns authenticated Firebase instances
474
+ *
475
+ * IMPORTANT: This function requires Firebase SDK to be installed separately:
476
+ * npm install firebase
477
+ *
478
+ * @param tokenResponse - The Firestore token response from SDK
479
+ * @returns Object containing initialized Firebase app, auth, and db instances
480
+ *
481
+ * @example
482
+ * ```typescript
483
+ * import { initializeWithToken } from '@seaverse/data-service-sdk';
484
+ *
485
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
486
+ * const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
487
+ *
488
+ * // Ready to use Firestore!
489
+ * const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
490
+ * ```
491
+ */
492
+ declare function initializeWithToken(tokenResponse: FirestoreTokenResponse): Promise<{
493
+ app: any;
494
+ auth: any;
495
+ db: any;
496
+ userId: string;
497
+ appId: string;
498
+ }>;
499
+
500
+ export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, getFirebaseConfig, initializeWithToken };
501
+ export type { ApiError, ApiResponse, DataServiceClientOptions, FirebaseConfig, FirestoreTokenResponse, GenerateFirestoreTokenRequest, GenerateGuestFirestoreTokenRequest };
package/dist/index.js CHANGED
@@ -263,5 +263,94 @@ class DataServiceClient {
263
263
  }
264
264
  }
265
265
 
266
- export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS };
266
+ /**
267
+ * Create Firebase configuration from Firestore token response
268
+ *
269
+ * This helper function extracts the Firebase config from the token response,
270
+ * making it easy to initialize Firebase app.
271
+ *
272
+ * @param tokenResponse - The Firestore token response from SDK
273
+ * @returns Firebase configuration object ready for initializeApp()
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * import { initializeApp } from 'firebase/app';
278
+ * import { getFirebaseConfig } from '@seaverse/data-service-sdk';
279
+ *
280
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
281
+ * const firebaseConfig = getFirebaseConfig(tokenResponse);
282
+ *
283
+ * const app = initializeApp(firebaseConfig);
284
+ * ```
285
+ */
286
+ function getFirebaseConfig(tokenResponse) {
287
+ return {
288
+ apiKey: tokenResponse.web_api_key,
289
+ projectId: tokenResponse.project_id,
290
+ };
291
+ }
292
+ /**
293
+ * Initialize Firebase with Firestore token response (browser only)
294
+ *
295
+ * This is a convenience function that automatically:
296
+ * 1. Creates Firebase config from token response
297
+ * 2. Initializes Firebase app
298
+ * 3. Signs in with the custom token
299
+ * 4. Returns authenticated Firebase instances
300
+ *
301
+ * IMPORTANT: This function requires Firebase SDK to be installed separately:
302
+ * npm install firebase
303
+ *
304
+ * @param tokenResponse - The Firestore token response from SDK
305
+ * @returns Object containing initialized Firebase app, auth, and db instances
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * import { initializeWithToken } from '@seaverse/data-service-sdk';
310
+ *
311
+ * const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
312
+ * const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
313
+ *
314
+ * // Ready to use Firestore!
315
+ * const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
316
+ * ```
317
+ */
318
+ async function initializeWithToken(tokenResponse) {
319
+ // Check if Firebase SDK is available
320
+ let initializeApp;
321
+ let getAuth;
322
+ let signInWithCustomToken;
323
+ let getFirestore;
324
+ try {
325
+ // Try to import Firebase modules
326
+ const firebaseApp = await import('firebase/app');
327
+ const firebaseAuth = await import('firebase/auth');
328
+ const firebaseFirestore = await import('firebase/firestore');
329
+ initializeApp = firebaseApp.initializeApp;
330
+ getAuth = firebaseAuth.getAuth;
331
+ signInWithCustomToken = firebaseAuth.signInWithCustomToken;
332
+ getFirestore = firebaseFirestore.getFirestore;
333
+ }
334
+ catch (error) {
335
+ throw new Error('Firebase SDK not found. Please install it: npm install firebase\n' +
336
+ 'Or import manually and use getFirebaseConfig() helper instead.');
337
+ }
338
+ // Initialize Firebase
339
+ const config = getFirebaseConfig(tokenResponse);
340
+ const app = initializeApp(config);
341
+ // Sign in with custom token
342
+ const auth = getAuth(app);
343
+ await signInWithCustomToken(auth, tokenResponse.custom_token);
344
+ // Get Firestore instance
345
+ const db = getFirestore(app);
346
+ return {
347
+ app,
348
+ auth,
349
+ db,
350
+ userId: tokenResponse.user_id,
351
+ appId: tokenResponse.app_id || '',
352
+ };
353
+ }
354
+
355
+ export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, getFirebaseConfig, initializeWithToken };
267
356
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/config.ts","../src/client.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/config.ts","../src/client.ts","../src/helpers.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seaverse/data-service-sdk",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "SDK for SeaVerse Data Service - Firestore token management with three-tier permission model",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",