@seaverse/data-service-sdk 0.6.0 → 0.8.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/README.md +82 -63
- package/dist/browser.js +483 -99
- package/dist/browser.js.map +1 -1
- package/dist/browser.umd.js +595 -102
- package/dist/browser.umd.js.map +1 -1
- package/dist/index.cjs +592 -98
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +295 -10
- package/dist/index.js +482 -99
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
+
export { addDoc, arrayRemove, arrayUnion, collection, collectionGroup, deleteDoc, deleteField, doc, endAt, endBefore, getDoc, getDocs, getFirestore, increment, limit, limitToLast, onSnapshot, orderBy, query, runTransaction, serverTimestamp, setDoc, startAfter, startAt, updateDoc, where, writeBatch } from 'firebase/firestore';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Data Service SDK configuration
|
|
@@ -263,96 +264,6 @@ class DataServiceClient {
|
|
|
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 with correct database ID
|
|
345
|
-
// IMPORTANT: Must specify database_id, not just use default!
|
|
346
|
-
const db = getFirestore(app, tokenResponse.database_id);
|
|
347
|
-
return {
|
|
348
|
-
app,
|
|
349
|
-
auth,
|
|
350
|
-
db,
|
|
351
|
-
userId: tokenResponse.user_id,
|
|
352
|
-
appId: tokenResponse.app_id || '',
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
|
|
356
267
|
/**
|
|
357
268
|
* Firestore Path Helper Functions
|
|
358
269
|
*
|
|
@@ -378,7 +289,7 @@ async function initializeWithToken(tokenResponse) {
|
|
|
378
289
|
* ```typescript
|
|
379
290
|
* // Read system announcements
|
|
380
291
|
* const path = getPublicReadPath('my-app', 'announcements');
|
|
381
|
-
* // Returns: 'appData/my-app/publicRead/announcements'
|
|
292
|
+
* // Returns: 'appData/my-app/publicRead/_data/announcements'
|
|
382
293
|
*
|
|
383
294
|
* const snapshot = await getDocs(collection(db, path));
|
|
384
295
|
* ```
|
|
@@ -386,7 +297,7 @@ async function initializeWithToken(tokenResponse) {
|
|
|
386
297
|
function getPublicReadPath(appId, collectionName) {
|
|
387
298
|
validateSegment('appId', appId);
|
|
388
299
|
validateSegment('collectionName', collectionName);
|
|
389
|
-
return `appData/${appId}/publicRead/${collectionName}`;
|
|
300
|
+
return `appData/${appId}/publicRead/_data/${collectionName}`;
|
|
390
301
|
}
|
|
391
302
|
/**
|
|
392
303
|
* Generate path for publicData (read/write for all authenticated users)
|
|
@@ -399,7 +310,7 @@ function getPublicReadPath(appId, collectionName) {
|
|
|
399
310
|
* ```typescript
|
|
400
311
|
* // Write a public post
|
|
401
312
|
* const path = getPublicDataPath('my-app', 'posts');
|
|
402
|
-
* // Returns: 'appData/my-app/publicData/posts'
|
|
313
|
+
* // Returns: 'appData/my-app/publicData/_data/posts'
|
|
403
314
|
*
|
|
404
315
|
* await addDoc(collection(db, path), {
|
|
405
316
|
* _appId: appId,
|
|
@@ -412,7 +323,7 @@ function getPublicReadPath(appId, collectionName) {
|
|
|
412
323
|
function getPublicDataPath(appId, collectionName) {
|
|
413
324
|
validateSegment('appId', appId);
|
|
414
325
|
validateSegment('collectionName', collectionName);
|
|
415
|
-
return `appData/${appId}/publicData/${collectionName}`;
|
|
326
|
+
return `appData/${appId}/publicData/_data/${collectionName}`;
|
|
416
327
|
}
|
|
417
328
|
/**
|
|
418
329
|
* Generate path for userData (private, read/write only by owner)
|
|
@@ -453,7 +364,7 @@ function getUserDataPath(appId, userId, collectionName) {
|
|
|
453
364
|
* @example
|
|
454
365
|
* ```typescript
|
|
455
366
|
* const path = getPublicReadDocPath('my-app', 'announcements', 'announcement-1');
|
|
456
|
-
* // Returns: 'appData/my-app/publicRead/announcements/announcement-1'
|
|
367
|
+
* // Returns: 'appData/my-app/publicRead/_data/announcements/announcement-1'
|
|
457
368
|
*
|
|
458
369
|
* const docSnap = await getDoc(doc(db, path));
|
|
459
370
|
* ```
|
|
@@ -462,7 +373,7 @@ function getPublicReadDocPath(appId, collectionName, docId) {
|
|
|
462
373
|
validateSegment('appId', appId);
|
|
463
374
|
validateSegment('collectionName', collectionName);
|
|
464
375
|
validateSegment('docId', docId);
|
|
465
|
-
return `appData/${appId}/publicRead/${collectionName}/${docId}`;
|
|
376
|
+
return `appData/${appId}/publicRead/_data/${collectionName}/${docId}`;
|
|
466
377
|
}
|
|
467
378
|
/**
|
|
468
379
|
* Generate path for a specific document in publicData
|
|
@@ -475,7 +386,7 @@ function getPublicReadDocPath(appId, collectionName, docId) {
|
|
|
475
386
|
* @example
|
|
476
387
|
* ```typescript
|
|
477
388
|
* const path = getPublicDataDocPath('my-app', 'posts', 'post-123');
|
|
478
|
-
* // Returns: 'appData/my-app/publicData/posts/post-123'
|
|
389
|
+
* // Returns: 'appData/my-app/publicData/_data/posts/post-123'
|
|
479
390
|
*
|
|
480
391
|
* const docSnap = await getDoc(doc(db, path));
|
|
481
392
|
* ```
|
|
@@ -484,7 +395,7 @@ function getPublicDataDocPath(appId, collectionName, docId) {
|
|
|
484
395
|
validateSegment('appId', appId);
|
|
485
396
|
validateSegment('collectionName', collectionName);
|
|
486
397
|
validateSegment('docId', docId);
|
|
487
|
-
return `appData/${appId}/publicData/${collectionName}/${docId}`;
|
|
398
|
+
return `appData/${appId}/publicData/_data/${collectionName}/${docId}`;
|
|
488
399
|
}
|
|
489
400
|
/**
|
|
490
401
|
* Generate path for a specific document in userData
|
|
@@ -607,5 +518,477 @@ const PATH_PATTERNS = {
|
|
|
607
518
|
USER_DATA: 'userData',
|
|
608
519
|
};
|
|
609
520
|
|
|
610
|
-
|
|
521
|
+
/**
|
|
522
|
+
* Firestore Helper - LLM-Friendly Firestore Operations
|
|
523
|
+
*
|
|
524
|
+
* This helper class automatically handles required fields (_appId, _createdAt, _createdBy)
|
|
525
|
+
* so LLM doesn't need to remember them. It provides a simple, high-level API.
|
|
526
|
+
*
|
|
527
|
+
* 🎯 LLM-FIRST DESIGN:
|
|
528
|
+
* - No need to remember required fields
|
|
529
|
+
* - No need to construct paths manually
|
|
530
|
+
* - No need to import serverTimestamp
|
|
531
|
+
* - One method does everything
|
|
532
|
+
*/
|
|
533
|
+
/**
|
|
534
|
+
* Firestore operations helper with automatic metadata injection
|
|
535
|
+
*
|
|
536
|
+
* This class wraps Firestore operations and automatically adds required fields:
|
|
537
|
+
* - _appId: Application ID (for data isolation)
|
|
538
|
+
* - _createdAt: Server timestamp (for creation time)
|
|
539
|
+
* - _createdBy: User ID (for ownership tracking)
|
|
540
|
+
*
|
|
541
|
+
* @example
|
|
542
|
+
* ```typescript
|
|
543
|
+
* const helper = new FirestoreHelper(db, appId, userId);
|
|
544
|
+
*
|
|
545
|
+
* // ✅ LLM-friendly: Just pass your data, required fields auto-injected
|
|
546
|
+
* await helper.addToPublicData('posts', {
|
|
547
|
+
* title: 'My Post',
|
|
548
|
+
* content: 'Hello world'
|
|
549
|
+
* });
|
|
550
|
+
*
|
|
551
|
+
* // ❌ OLD WAY: LLM needs to remember 3 required fields
|
|
552
|
+
* await addDoc(collection(db, path), {
|
|
553
|
+
* _appId: appId,
|
|
554
|
+
* _createdAt: serverTimestamp(),
|
|
555
|
+
* _createdBy: userId,
|
|
556
|
+
* title: 'My Post',
|
|
557
|
+
* content: 'Hello world'
|
|
558
|
+
* });
|
|
559
|
+
* ```
|
|
560
|
+
*/
|
|
561
|
+
class FirestoreHelper {
|
|
562
|
+
constructor(db, appId, userId) {
|
|
563
|
+
this.db = db;
|
|
564
|
+
this.appId = appId;
|
|
565
|
+
this.userId = userId;
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Add document to publicData (shared, read/write for all users)
|
|
569
|
+
*
|
|
570
|
+
* Automatically injects: _appId, _createdAt, _createdBy
|
|
571
|
+
*
|
|
572
|
+
* @param collectionName - Collection name (e.g., 'posts', 'comments')
|
|
573
|
+
* @param data - Your business data
|
|
574
|
+
* @returns Document reference
|
|
575
|
+
*
|
|
576
|
+
* @example
|
|
577
|
+
* ```typescript
|
|
578
|
+
* // ✅ LLM-friendly: Simple and clean
|
|
579
|
+
* const docRef = await helper.addToPublicData('posts', {
|
|
580
|
+
* title: 'My First Post',
|
|
581
|
+
* content: 'Hello world'
|
|
582
|
+
* });
|
|
583
|
+
* console.log('Created post:', docRef.id);
|
|
584
|
+
* ```
|
|
585
|
+
*/
|
|
586
|
+
async addToPublicData(collectionName, data) {
|
|
587
|
+
const path = getPublicDataPath(this.appId, collectionName);
|
|
588
|
+
return this.addDocWithMeta(path, data);
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Add document to userData (private, only owner can read/write)
|
|
592
|
+
*
|
|
593
|
+
* Automatically injects: _appId, _createdAt, _createdBy
|
|
594
|
+
*
|
|
595
|
+
* @param collectionName - Collection name (e.g., 'notes', 'settings')
|
|
596
|
+
* @param data - Your business data
|
|
597
|
+
* @returns Document reference
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```typescript
|
|
601
|
+
* // ✅ LLM-friendly: Private data, auto-isolated
|
|
602
|
+
* await helper.addToUserData('notes', {
|
|
603
|
+
* title: 'Private Note',
|
|
604
|
+
* content: 'Only I can see this'
|
|
605
|
+
* });
|
|
606
|
+
* ```
|
|
607
|
+
*/
|
|
608
|
+
async addToUserData(collectionName, data) {
|
|
609
|
+
const path = getUserDataPath(this.appId, this.userId, collectionName);
|
|
610
|
+
return this.addDocWithMeta(path, data);
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Get all documents from publicData collection
|
|
614
|
+
*
|
|
615
|
+
* @param collectionName - Collection name
|
|
616
|
+
* @returns QuerySnapshot with documents
|
|
617
|
+
*
|
|
618
|
+
* @example
|
|
619
|
+
* ```typescript
|
|
620
|
+
* const snapshot = await helper.getPublicData('posts');
|
|
621
|
+
* snapshot.forEach(doc => {
|
|
622
|
+
* console.log(doc.id, doc.data());
|
|
623
|
+
* });
|
|
624
|
+
* ```
|
|
625
|
+
*/
|
|
626
|
+
async getPublicData(collectionName) {
|
|
627
|
+
const path = getPublicDataPath(this.appId, collectionName);
|
|
628
|
+
return this.getDocs(path);
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* Get all documents from userData collection (user's private data)
|
|
632
|
+
*
|
|
633
|
+
* @param collectionName - Collection name
|
|
634
|
+
* @returns QuerySnapshot with documents
|
|
635
|
+
*
|
|
636
|
+
* @example
|
|
637
|
+
* ```typescript
|
|
638
|
+
* const snapshot = await helper.getUserData('notes');
|
|
639
|
+
* snapshot.forEach(doc => {
|
|
640
|
+
* console.log('My note:', doc.data());
|
|
641
|
+
* });
|
|
642
|
+
* ```
|
|
643
|
+
*/
|
|
644
|
+
async getUserData(collectionName) {
|
|
645
|
+
const path = getUserDataPath(this.appId, this.userId, collectionName);
|
|
646
|
+
return this.getDocs(path);
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Get all documents from publicRead collection (read-only for users)
|
|
650
|
+
*
|
|
651
|
+
* @param collectionName - Collection name
|
|
652
|
+
* @returns QuerySnapshot with documents
|
|
653
|
+
*
|
|
654
|
+
* @example
|
|
655
|
+
* ```typescript
|
|
656
|
+
* const configs = await helper.getPublicRead('config');
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
async getPublicRead(collectionName) {
|
|
660
|
+
const path = getPublicReadPath(this.appId, collectionName);
|
|
661
|
+
return this.getDocs(path);
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Get collection reference for publicData
|
|
665
|
+
* Use this for advanced queries with where(), orderBy(), limit()
|
|
666
|
+
*
|
|
667
|
+
* @param collectionName - Collection name
|
|
668
|
+
* @returns Collection reference
|
|
669
|
+
*
|
|
670
|
+
* @example
|
|
671
|
+
* ```typescript
|
|
672
|
+
* import { query, where, orderBy } from 'firebase/firestore';
|
|
673
|
+
*
|
|
674
|
+
* const postsRef = helper.publicDataCollection('posts');
|
|
675
|
+
* const q = query(
|
|
676
|
+
* postsRef,
|
|
677
|
+
* where('_createdBy', '==', userId),
|
|
678
|
+
* orderBy('_createdAt', 'desc')
|
|
679
|
+
* );
|
|
680
|
+
* const snapshot = await getDocs(q);
|
|
681
|
+
* ```
|
|
682
|
+
*/
|
|
683
|
+
publicDataCollection(collectionName) {
|
|
684
|
+
const path = getPublicDataPath(this.appId, collectionName);
|
|
685
|
+
return this.getCollection(path);
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* Get collection reference for userData
|
|
689
|
+
*
|
|
690
|
+
* @param collectionName - Collection name
|
|
691
|
+
* @returns Collection reference
|
|
692
|
+
*/
|
|
693
|
+
userDataCollection(collectionName) {
|
|
694
|
+
const path = getUserDataPath(this.appId, this.userId, collectionName);
|
|
695
|
+
return this.getCollection(path);
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Get collection reference for publicRead
|
|
699
|
+
*
|
|
700
|
+
* @param collectionName - Collection name
|
|
701
|
+
* @returns Collection reference
|
|
702
|
+
*/
|
|
703
|
+
publicReadCollection(collectionName) {
|
|
704
|
+
const path = getPublicReadPath(this.appId, collectionName);
|
|
705
|
+
return this.getCollection(path);
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Update document with automatic metadata update
|
|
709
|
+
*
|
|
710
|
+
* Automatically sets: _updatedAt, _updatedBy
|
|
711
|
+
*
|
|
712
|
+
* @param collectionPath - Full collection path
|
|
713
|
+
* @param docId - Document ID
|
|
714
|
+
* @param data - Data to update
|
|
715
|
+
*
|
|
716
|
+
* @example
|
|
717
|
+
* ```typescript
|
|
718
|
+
* await helper.updateDoc(
|
|
719
|
+
* getPublicDataPath(appId, 'posts'),
|
|
720
|
+
* 'post-123',
|
|
721
|
+
* { title: 'Updated Title' }
|
|
722
|
+
* );
|
|
723
|
+
* ```
|
|
724
|
+
*/
|
|
725
|
+
async updateDoc(collectionPath, docId, data) {
|
|
726
|
+
const { updateDoc, doc, serverTimestamp } = await this.loadFirestore();
|
|
727
|
+
const docRef = doc(this.db, collectionPath, docId);
|
|
728
|
+
return updateDoc(docRef, {
|
|
729
|
+
...data,
|
|
730
|
+
_updatedAt: serverTimestamp(),
|
|
731
|
+
_updatedBy: this.userId
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
/**
|
|
735
|
+
* Delete document
|
|
736
|
+
*
|
|
737
|
+
* @param collectionPath - Full collection path
|
|
738
|
+
* @param docId - Document ID
|
|
739
|
+
*/
|
|
740
|
+
async deleteDoc(collectionPath, docId) {
|
|
741
|
+
const { deleteDoc, doc } = await this.loadFirestore();
|
|
742
|
+
const docRef = doc(this.db, collectionPath, docId);
|
|
743
|
+
return deleteDoc(docRef);
|
|
744
|
+
}
|
|
745
|
+
/**
|
|
746
|
+
* Get single document by ID
|
|
747
|
+
*
|
|
748
|
+
* @param collectionPath - Full collection path
|
|
749
|
+
* @param docId - Document ID
|
|
750
|
+
*
|
|
751
|
+
* @example
|
|
752
|
+
* ```typescript
|
|
753
|
+
* const docSnap = await helper.getDoc(
|
|
754
|
+
* getPublicDataPath(appId, 'posts'),
|
|
755
|
+
* 'post-123'
|
|
756
|
+
* );
|
|
757
|
+
* if (docSnap.exists()) {
|
|
758
|
+
* console.log(docSnap.data());
|
|
759
|
+
* }
|
|
760
|
+
* ```
|
|
761
|
+
*/
|
|
762
|
+
async getDoc(collectionPath, docId) {
|
|
763
|
+
const { getDoc, doc } = await this.loadFirestore();
|
|
764
|
+
const docRef = doc(this.db, collectionPath, docId);
|
|
765
|
+
return getDoc(docRef);
|
|
766
|
+
}
|
|
767
|
+
// ============================================================================
|
|
768
|
+
// Private Helper Methods
|
|
769
|
+
// ============================================================================
|
|
770
|
+
/**
|
|
771
|
+
* Internal: Add document with metadata injection
|
|
772
|
+
*/
|
|
773
|
+
async addDocWithMeta(collectionPath, data) {
|
|
774
|
+
const { addDoc, collection, serverTimestamp } = await this.loadFirestore();
|
|
775
|
+
const colRef = collection(this.db, collectionPath);
|
|
776
|
+
return addDoc(colRef, {
|
|
777
|
+
_appId: this.appId,
|
|
778
|
+
_createdAt: serverTimestamp(),
|
|
779
|
+
_createdBy: this.userId,
|
|
780
|
+
...data
|
|
781
|
+
});
|
|
782
|
+
}
|
|
783
|
+
/**
|
|
784
|
+
* Internal: Get all documents from collection
|
|
785
|
+
*/
|
|
786
|
+
async getDocs(collectionPath) {
|
|
787
|
+
const { getDocs, collection } = await this.loadFirestore();
|
|
788
|
+
const colRef = collection(this.db, collectionPath);
|
|
789
|
+
return getDocs(colRef);
|
|
790
|
+
}
|
|
791
|
+
/**
|
|
792
|
+
* Internal: Get collection reference
|
|
793
|
+
*/
|
|
794
|
+
getCollection(collectionPath) {
|
|
795
|
+
// Note: This is sync, so we can't use dynamic import
|
|
796
|
+
// We assume firebase/firestore is already loaded by initializeWithToken
|
|
797
|
+
const { collection } = require('firebase/firestore');
|
|
798
|
+
return collection(this.db, collectionPath);
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Internal: Lazy load Firebase Firestore functions
|
|
802
|
+
*/
|
|
803
|
+
async loadFirestore() {
|
|
804
|
+
const firestore = await import('firebase/firestore');
|
|
805
|
+
return {
|
|
806
|
+
collection: firestore.collection,
|
|
807
|
+
doc: firestore.doc,
|
|
808
|
+
addDoc: firestore.addDoc,
|
|
809
|
+
setDoc: firestore.setDoc,
|
|
810
|
+
getDoc: firestore.getDoc,
|
|
811
|
+
getDocs: firestore.getDocs,
|
|
812
|
+
updateDoc: firestore.updateDoc,
|
|
813
|
+
deleteDoc: firestore.deleteDoc,
|
|
814
|
+
serverTimestamp: firestore.serverTimestamp,
|
|
815
|
+
query: firestore.query,
|
|
816
|
+
where: firestore.where,
|
|
817
|
+
orderBy: firestore.orderBy,
|
|
818
|
+
limit: firestore.limit
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
/**
|
|
823
|
+
* Standalone helper function: Add document with automatic metadata injection
|
|
824
|
+
*
|
|
825
|
+
* Use this if you don't want to create a FirestoreHelper instance.
|
|
826
|
+
*
|
|
827
|
+
* @param db - Firestore instance
|
|
828
|
+
* @param collectionPath - Full collection path
|
|
829
|
+
* @param appId - Application ID
|
|
830
|
+
* @param userId - User ID
|
|
831
|
+
* @param data - Your business data
|
|
832
|
+
* @returns Document reference
|
|
833
|
+
*
|
|
834
|
+
* @example
|
|
835
|
+
* ```typescript
|
|
836
|
+
* import { addDocWithMeta, getPublicDataPath } from '@seaverse/data-service-sdk';
|
|
837
|
+
*
|
|
838
|
+
* const docRef = await addDocWithMeta(
|
|
839
|
+
* db,
|
|
840
|
+
* getPublicDataPath(appId, 'posts'),
|
|
841
|
+
* appId,
|
|
842
|
+
* userId,
|
|
843
|
+
* { title: 'Post', content: 'Hello' }
|
|
844
|
+
* );
|
|
845
|
+
* ```
|
|
846
|
+
*/
|
|
847
|
+
async function addDocWithMeta(db, collectionPath, appId, userId, data) {
|
|
848
|
+
const { addDoc, collection, serverTimestamp } = await import('firebase/firestore');
|
|
849
|
+
const colRef = collection(db, collectionPath);
|
|
850
|
+
return addDoc(colRef, {
|
|
851
|
+
_appId: appId,
|
|
852
|
+
_createdAt: serverTimestamp(),
|
|
853
|
+
_createdBy: userId,
|
|
854
|
+
...data
|
|
855
|
+
});
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* Standalone helper function: Update document with automatic metadata
|
|
859
|
+
*
|
|
860
|
+
* @param db - Firestore instance
|
|
861
|
+
* @param collectionPath - Full collection path
|
|
862
|
+
* @param docId - Document ID
|
|
863
|
+
* @param userId - User ID (for _updatedBy field)
|
|
864
|
+
* @param data - Data to update
|
|
865
|
+
*
|
|
866
|
+
* @example
|
|
867
|
+
* ```typescript
|
|
868
|
+
* import { updateDocWithMeta, getPublicDataPath } from '@seaverse/data-service-sdk';
|
|
869
|
+
*
|
|
870
|
+
* await updateDocWithMeta(
|
|
871
|
+
* db,
|
|
872
|
+
* getPublicDataPath(appId, 'posts'),
|
|
873
|
+
* 'post-123',
|
|
874
|
+
* userId,
|
|
875
|
+
* { title: 'Updated Title' }
|
|
876
|
+
* );
|
|
877
|
+
* ```
|
|
878
|
+
*/
|
|
879
|
+
async function updateDocWithMeta(db, collectionPath, docId, userId, data) {
|
|
880
|
+
const { updateDoc, doc, serverTimestamp } = await import('firebase/firestore');
|
|
881
|
+
const docRef = doc(db, collectionPath, docId);
|
|
882
|
+
return updateDoc(docRef, {
|
|
883
|
+
...data,
|
|
884
|
+
_updatedAt: serverTimestamp(),
|
|
885
|
+
_updatedBy: userId
|
|
886
|
+
});
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/**
|
|
890
|
+
* Create Firebase configuration from Firestore token response
|
|
891
|
+
*
|
|
892
|
+
* This helper function extracts the Firebase config from the token response,
|
|
893
|
+
* making it easy to initialize Firebase app.
|
|
894
|
+
*
|
|
895
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
896
|
+
* @returns Firebase configuration object ready for initializeApp()
|
|
897
|
+
*
|
|
898
|
+
* @example
|
|
899
|
+
* ```typescript
|
|
900
|
+
* import { initializeApp } from 'firebase/app';
|
|
901
|
+
* import { getFirebaseConfig } from '@seaverse/data-service-sdk';
|
|
902
|
+
*
|
|
903
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
904
|
+
* const firebaseConfig = getFirebaseConfig(tokenResponse);
|
|
905
|
+
*
|
|
906
|
+
* const app = initializeApp(firebaseConfig);
|
|
907
|
+
* ```
|
|
908
|
+
*/
|
|
909
|
+
function getFirebaseConfig(tokenResponse) {
|
|
910
|
+
return {
|
|
911
|
+
apiKey: tokenResponse.web_api_key,
|
|
912
|
+
projectId: tokenResponse.project_id,
|
|
913
|
+
};
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* Initialize Firebase with Firestore token response (browser only)
|
|
917
|
+
*
|
|
918
|
+
* This is a convenience function that automatically:
|
|
919
|
+
* 1. Creates Firebase config from token response
|
|
920
|
+
* 2. Initializes Firebase app
|
|
921
|
+
* 3. Signs in with the custom token
|
|
922
|
+
* 4. Creates FirestoreHelper for LLM-friendly operations
|
|
923
|
+
* 5. Returns authenticated Firebase instances
|
|
924
|
+
*
|
|
925
|
+
* IMPORTANT: This function requires Firebase SDK to be installed separately:
|
|
926
|
+
* npm install firebase
|
|
927
|
+
*
|
|
928
|
+
* 🎯 LLM RECOMMENDED: Use the `helper` object for simplified operations
|
|
929
|
+
*
|
|
930
|
+
* @param tokenResponse - The Firestore token response from SDK
|
|
931
|
+
* @returns Object containing initialized Firebase instances and LLM-friendly helper
|
|
932
|
+
*
|
|
933
|
+
* @example
|
|
934
|
+
* ```typescript
|
|
935
|
+
* import { initializeWithToken } from '@seaverse/data-service-sdk';
|
|
936
|
+
*
|
|
937
|
+
* const tokenResponse = await client.generateGuestFirestoreToken({ app_id: 'my-app' });
|
|
938
|
+
* const { db, userId, appId, helper } = await initializeWithToken(tokenResponse);
|
|
939
|
+
*
|
|
940
|
+
* // ✅ LLM-FRIENDLY: Use helper (automatic required fields)
|
|
941
|
+
* await helper.addToPublicData('posts', {
|
|
942
|
+
* title: 'My Post',
|
|
943
|
+
* content: 'Hello'
|
|
944
|
+
* });
|
|
945
|
+
*
|
|
946
|
+
* // ❌ OLD WAY: Manual (need to remember required fields)
|
|
947
|
+
* // await addDoc(collection(db, path), { _appId, _createdAt, _createdBy, ...data });
|
|
948
|
+
* ```
|
|
949
|
+
*/
|
|
950
|
+
async function initializeWithToken(tokenResponse) {
|
|
951
|
+
// Check if Firebase SDK is available
|
|
952
|
+
let initializeApp;
|
|
953
|
+
let getAuth;
|
|
954
|
+
let signInWithCustomToken;
|
|
955
|
+
let getFirestore;
|
|
956
|
+
try {
|
|
957
|
+
// Try to import Firebase modules
|
|
958
|
+
const firebaseApp = await import('firebase/app');
|
|
959
|
+
const firebaseAuth = await import('firebase/auth');
|
|
960
|
+
const firebaseFirestore = await import('firebase/firestore');
|
|
961
|
+
initializeApp = firebaseApp.initializeApp;
|
|
962
|
+
getAuth = firebaseAuth.getAuth;
|
|
963
|
+
signInWithCustomToken = firebaseAuth.signInWithCustomToken;
|
|
964
|
+
getFirestore = firebaseFirestore.getFirestore;
|
|
965
|
+
}
|
|
966
|
+
catch (error) {
|
|
967
|
+
throw new Error('Firebase SDK not found. Please install it: npm install firebase\n' +
|
|
968
|
+
'Or import manually and use getFirebaseConfig() helper instead.');
|
|
969
|
+
}
|
|
970
|
+
// Initialize Firebase
|
|
971
|
+
const config = getFirebaseConfig(tokenResponse);
|
|
972
|
+
const app = initializeApp(config);
|
|
973
|
+
// Sign in with custom token
|
|
974
|
+
const auth = getAuth(app);
|
|
975
|
+
await signInWithCustomToken(auth, tokenResponse.custom_token);
|
|
976
|
+
// Get Firestore instance with correct database ID
|
|
977
|
+
// IMPORTANT: Must specify database_id, not just use default!
|
|
978
|
+
const db = getFirestore(app, tokenResponse.database_id);
|
|
979
|
+
const userId = tokenResponse.user_id;
|
|
980
|
+
const appId = tokenResponse.app_id || '';
|
|
981
|
+
// Create LLM-friendly helper
|
|
982
|
+
const helper = new FirestoreHelper(db, appId, userId);
|
|
983
|
+
return {
|
|
984
|
+
app,
|
|
985
|
+
auth,
|
|
986
|
+
db,
|
|
987
|
+
userId,
|
|
988
|
+
appId,
|
|
989
|
+
helper,
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
export { DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DataServiceClient, ENDPOINTS, FirestoreHelper, PATH_PATTERNS, PathBuilder, addDocWithMeta, getFirebaseConfig, getPublicDataDocPath, getPublicDataPath, getPublicReadDocPath, getPublicReadPath, getUserDataDocPath, getUserDataPath, initializeWithToken, updateDocWithMeta };
|
|
611
994
|
//# 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","../src/helpers.ts","../src/path-helpers.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/config.ts","../src/client.ts","../src/path-helpers.ts","../src/firestore-helper.ts","../src/helpers.ts"],"sourcesContent":[null,null,null,null,null],"names":[],"mappings":"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"}
|