@seaverse/data-service-sdk 0.4.0 → 0.5.1
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 +157 -35
- package/dist/browser.js +90 -1
- package/dist/browser.js.map +1 -1
- package/dist/browser.umd.js +91 -0
- package/dist/browser.umd.js.map +1 -1
- package/dist/index.cjs +91 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +106 -6
- package/dist/index.js +90 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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
|
@@ -23,6 +23,27 @@ import { AxiosRequestConfig } from 'axios';
|
|
|
23
23
|
* appData/{app_id}/publicData/{collection}/{docId}
|
|
24
24
|
* appData/{app_id}/userData/{userId}/{collection}/{docId}
|
|
25
25
|
*
|
|
26
|
+
* 🚨 CRITICAL FIRESTORE PATH RULES (FOR LLM):
|
|
27
|
+
* ------------------------------------------
|
|
28
|
+
* Firestore paths have strict segment count rules:
|
|
29
|
+
* - Collection paths = ODD segments (1, 3, 5, 7...)
|
|
30
|
+
* - Document paths = EVEN segments (2, 4, 6, 8...)
|
|
31
|
+
*
|
|
32
|
+
* When using Firebase SDK, ALWAYS use these functions:
|
|
33
|
+
* - collection(db, path) - for collections (don't count segments manually)
|
|
34
|
+
* - doc(db, path) - for documents
|
|
35
|
+
* - addDoc(collectionRef, data) - automatically generates document ID
|
|
36
|
+
*
|
|
37
|
+
* Example:
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // ✅ CORRECT
|
|
40
|
+
* const postsRef = collection(db, `appData/${appId}/publicData/posts`);
|
|
41
|
+
* await addDoc(postsRef, { _appId, _createdAt, _createdBy, ...yourData });
|
|
42
|
+
*
|
|
43
|
+
* // ❌ WRONG - Don't use raw string paths without collection()/doc()
|
|
44
|
+
* // await setDoc(`appData/${appId}/publicData/posts`, data); // This will fail!
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
26
47
|
* REQUIRED FIELDS FOR ALL DOCUMENTS:
|
|
27
48
|
* ---------------------------------
|
|
28
49
|
* All Firestore documents MUST include these fields:
|
|
@@ -127,9 +148,24 @@ interface FirestoreTokenResponse {
|
|
|
127
148
|
* Custom Token itself does not expire, but the ID Token it generates expires after 1 hour
|
|
128
149
|
*/
|
|
129
150
|
custom_token: string;
|
|
151
|
+
/**
|
|
152
|
+
* Firebase Web API Key
|
|
153
|
+
* Use this to initialize Firebase app along with project_id
|
|
154
|
+
* This is automatically provided by the backend
|
|
155
|
+
*
|
|
156
|
+
* Example:
|
|
157
|
+
* ```typescript
|
|
158
|
+
* import { initializeApp } from 'firebase/app';
|
|
159
|
+
* const app = initializeApp({
|
|
160
|
+
* apiKey: response.web_api_key,
|
|
161
|
+
* projectId: response.project_id
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
web_api_key: string;
|
|
130
166
|
/**
|
|
131
167
|
* Firebase Project ID
|
|
132
|
-
* Use this to initialize Firebase app
|
|
168
|
+
* Use this to initialize Firebase app
|
|
133
169
|
*/
|
|
134
170
|
project_id: string;
|
|
135
171
|
/**
|
|
@@ -151,15 +187,15 @@ interface FirestoreTokenResponse {
|
|
|
151
187
|
*/
|
|
152
188
|
user_id: string;
|
|
153
189
|
/**
|
|
154
|
-
* User
|
|
190
|
+
* User type - Determines access permissions
|
|
155
191
|
* - 'guest': Can read publicRead/publicData, write publicData
|
|
156
192
|
* - 'user': Can read publicRead/publicData, write publicData, read/write own userData
|
|
157
193
|
* - 'admin' or 'appadmin': Can also write to publicRead data
|
|
158
194
|
*/
|
|
159
|
-
|
|
195
|
+
user_type: string;
|
|
160
196
|
/**
|
|
161
197
|
* Token expiration time in seconds (typically 3600 = 1 hour)
|
|
162
|
-
* After this time, you need to generate a new token
|
|
198
|
+
* After this time, you need to generate a new token
|
|
163
199
|
*/
|
|
164
200
|
expires_in: number;
|
|
165
201
|
}
|
|
@@ -418,5 +454,69 @@ declare const ENDPOINTS: {
|
|
|
418
454
|
readonly FIRESTORE_GUEST_TOKEN: "/api/v1/firestore/guest-token";
|
|
419
455
|
};
|
|
420
456
|
|
|
421
|
-
|
|
422
|
-
|
|
457
|
+
/**
|
|
458
|
+
* Firebase initialization configuration
|
|
459
|
+
* Generated from Firestore token response
|
|
460
|
+
*/
|
|
461
|
+
interface FirebaseConfig {
|
|
462
|
+
apiKey: string;
|
|
463
|
+
projectId: string;
|
|
464
|
+
[key: string]: any;
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Create Firebase configuration from Firestore token response
|
|
468
|
+
*
|
|
469
|
+
* This helper function extracts the Firebase config from the token response,
|
|
470
|
+
* making it easy to initialize Firebase app.
|
|
471
|
+
*
|
|
472
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
473
|
+
* @returns Firebase configuration object ready for initializeApp()
|
|
474
|
+
*
|
|
475
|
+
* @example
|
|
476
|
+
* ```typescript
|
|
477
|
+
* import { initializeApp } from 'firebase/app';
|
|
478
|
+
* import { getFirebaseConfig } from '@seaverse/data-service-sdk';
|
|
479
|
+
*
|
|
480
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
481
|
+
* const firebaseConfig = getFirebaseConfig(tokenResponse);
|
|
482
|
+
*
|
|
483
|
+
* const app = initializeApp(firebaseConfig);
|
|
484
|
+
* ```
|
|
485
|
+
*/
|
|
486
|
+
declare function getFirebaseConfig(tokenResponse: FirestoreTokenResponse): FirebaseConfig;
|
|
487
|
+
/**
|
|
488
|
+
* Initialize Firebase with Firestore token response (browser only)
|
|
489
|
+
*
|
|
490
|
+
* This is a convenience function that automatically:
|
|
491
|
+
* 1. Creates Firebase config from token response
|
|
492
|
+
* 2. Initializes Firebase app
|
|
493
|
+
* 3. Signs in with the custom token
|
|
494
|
+
* 4. Returns authenticated Firebase instances
|
|
495
|
+
*
|
|
496
|
+
* IMPORTANT: This function requires Firebase SDK to be installed separately:
|
|
497
|
+
* npm install firebase
|
|
498
|
+
*
|
|
499
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
500
|
+
* @returns Object containing initialized Firebase app, auth, and db instances
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* ```typescript
|
|
504
|
+
* import { initializeWithToken } from '@seaverse/data-service-sdk';
|
|
505
|
+
*
|
|
506
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
507
|
+
* const { app, auth, db, userId, appId } = await initializeWithToken(tokenResponse);
|
|
508
|
+
*
|
|
509
|
+
* // Ready to use Firestore!
|
|
510
|
+
* const snapshot = await getDocs(collection(db, `appData/${appId}/publicData/posts`));
|
|
511
|
+
* ```
|
|
512
|
+
*/
|
|
513
|
+
declare function initializeWithToken(tokenResponse: FirestoreTokenResponse): Promise<{
|
|
514
|
+
app: any;
|
|
515
|
+
auth: any;
|
|
516
|
+
db: any;
|
|
517
|
+
userId: string;
|
|
518
|
+
appId: string;
|
|
519
|
+
}>;
|
|
520
|
+
|
|
521
|
+
export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, getFirebaseConfig, initializeWithToken };
|
|
522
|
+
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
|
-
|
|
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