@entropic-bond/firebase-admin 1.7.28 → 1.7.29

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/lib/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("entropic-bond"),f=require("firebase-admin/app"),p=require("firebase-admin/auth"),u=require("firebase-admin/firestore"),g=require("firebase-functions/v2");function y(c){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const t in c)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(c,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>c[t]})}}return e.default=c,Object.freeze(e)}const d=y(g);class o{static setFirebaseConfig(e){o._firebaseConfig=e}constructor(){f.initializeApp(o._firebaseConfig)}static get instance(){return this._instance||(this._instance=new o)}firestore(){return u.getFirestore()}auth(){return p.getAuth()}}class b extends h.DataSource{constructor(e){super(),this._lastLimit=0,e&&d.setGlobalOptions(e)}findById(e,t){const r=o.instance.firestore();return new Promise(async n=>{try{const i=await r.doc(`${t}/${e}`).get();n(i.data())}catch(s){return console.log(s),null}})}save(e){const t=o.instance.firestore(),r=t.batch();return Object.entries(e).forEach(([n,s])=>{s?.forEach(i=>{const a=t.doc(`${n}/${i.id}`);r.set(a,i)})}),r.commit()}find(e,t){const r=this.queryObjectToFirebaseQuery(e,t);return this._lastQuery=r,this.getFromQuery(r)}async count(e,t){return(await this.queryObjectToFirebaseQuery(e,t).count().get()).data().count}delete(e,t){const r=o.instance.firestore();return r.recursiveDelete(r.doc(`${t}/${e}`))}next(e){if(!this._lastQuery)throw new Error("You should perform a query prior to using method next");this._lastLimit=e||this._lastLimit;const t=this._lastQuery.limit(this._lastLimit).startAfter(this._lastDocRetrieved);return this.getFromQuery(t)}getFromQuery(e){return new Promise(async t=>{const r=await e.get();this._lastDocRetrieved=r.docs[r.docs.length-1],t(r.docs.map(n=>n.data()))})}queryObjectToFirebaseQuery(e,t){const r=o.instance.firestore(),n=[],s=[];h.DataSource.toPropertyPathOperations(e.operations).forEach(a=>{const l=this.toFirebaseOperator(a.operator);a.aggregate?s.push(u.Filter.where(a.property,l,a.value)):n.push(u.Filter.where(a.property,l,a.value))});let i=r.collection(t).where(u.Filter.or(...s,u.Filter.and(...n)));return e.sort?.propertyName&&(i=i.orderBy(e.sort.propertyName,e.sort.order)),e.limit&&(this._lastLimit=e.limit,i=i.limit(e.limit)),i}toFirebaseOperator(e){switch(e){case"==":case"!=":case"<":case"<=":case">":case">=":return e;case"contains":return"array-contains";case"containsAny":return"array-contains-any";default:return e}}async resolveCollectionPaths(e){const t=e.split("/");if(t.length>3||t.length<1)throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${e}`);const[r,n,s]=t;if(!r||!n||!s)throw new Error("FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection");if(n[0]!=="{")return[e];const i=o.instance.firestore();d.logger.info(`Resolving collection paths matching template ${e}`);const a=await i.collection(r).get();d.logger.info(`Found ${a.size} documents in collection ${r}`);const l=[];return a.docs.forEach(m=>{s?l.push(`${r}/${m.id}/${s}`):l.push(r)}),l}onCollectionChange(e,t,r){throw new Error("Not implemented yet")}onDocumentChange(e,t,r){throw new Error("Not implemented yet")}}class w extends h.ServerAuthService{async getUser(e){try{return this.convertToUserCredentials(await o.instance.auth().getUser(e))}catch(t){if(t.code==="auth/user-not-found")return;throw new Error(t)}}setCustomCredentials(e,t){return o.instance.auth().setCustomUserClaims(e,t)}async updateUser(e,t){return this.convertToUserCredentials(await o.instance.auth().updateUser(e,t))}async deleteUser(e){try{await o.instance.auth().deleteUser(e)}catch(t){if(t.code==="auth/user-not-found")return;throw new Error(t)}}convertToUserCredentials(e){return{id:e.uid,email:e.email??"",emailVerified:e.emailVerified??void 0,creationDate:e.metadata.creationTime?new Date(e.metadata.creationTime).getTime():void 0,lastLogin:e.metadata.lastSignInTime?new Date(e.metadata.lastSignInTime).getTime():void 0,name:e.displayName,phoneNumber:e.phoneNumber??void 0,pictureUrl:e.photoURL??void 0,customData:e.customClaims}}}exports.FirebaseAdminDatasource=b;exports.FirebaseAdminHelper=o;exports.FirebaseServerAuth=w;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("entropic-bond"),m=require("firebase-admin/app"),f=require("firebase-admin/auth"),u=require("firebase-admin/firestore"),p=require("firebase-functions/v2");function y(c){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(c){for(const t in c)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(c,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>c[t]})}}return e.default=c,Object.freeze(e)}const g=y(p);class n{static setFirebaseConfig(e){n._firebaseConfig=e}constructor(){m.initializeApp(n._firebaseConfig)}static get instance(){return this._instance||(this._instance=new n)}firestore(){return u.getFirestore()}auth(){return f.getAuth()}}class b extends d.DataSource{constructor(e){super(),this._lastLimit=0,e&&g.setGlobalOptions(e)}findById(e,t){const r=n.instance.firestore();return new Promise(async o=>{try{const i=await r.doc(`${t}/${e}`).get();o(i.data())}catch(s){return console.log(s),null}})}save(e){const t=n.instance.firestore(),r=t.batch();return Object.entries(e).forEach(([o,s])=>{s?.forEach(i=>{const a=t.doc(`${o}/${i.id}`);r.set(a,i)})}),r.commit()}find(e,t){const r=this.queryObjectToFirebaseQuery(e,t);return this._lastQuery=r,this.getFromQuery(r)}async count(e,t){return(await this.queryObjectToFirebaseQuery(e,t).count().get()).data().count}delete(e,t){const r=n.instance.firestore();return r.recursiveDelete(r.doc(`${t}/${e}`))}next(e){if(!this._lastQuery)throw new Error("You should perform a query prior to using method next");this._lastLimit=e||this._lastLimit;const t=this._lastQuery.limit(this._lastLimit).startAfter(this._lastDocRetrieved);return this.getFromQuery(t)}getFromQuery(e){return new Promise(async t=>{const r=await e.get();this._lastDocRetrieved=r.docs[r.docs.length-1],t(r.docs.map(o=>o.data()))})}queryObjectToFirebaseQuery(e,t){const r=n.instance.firestore(),o=[],s=[];d.DataSource.toPropertyPathOperations(e.operations).forEach(a=>{const l=this.toFirebaseOperator(a.operator);a.aggregate?s.push(u.Filter.where(a.property,l,a.value)):o.push(u.Filter.where(a.property,l,a.value))});let i=r.collection(t).where(u.Filter.or(...s,u.Filter.and(...o)));return e.sort?.propertyName&&(i=i.orderBy(e.sort.propertyName,e.sort.order)),e.limit&&(this._lastLimit=e.limit,i=i.limit(e.limit)),i}toFirebaseOperator(e){switch(e){case"==":case"!=":case"<":case"<=":case">":case">=":return e;case"contains":return"array-contains";case"containsAny":return"array-contains-any";default:return e}}async resolveCollectionPaths(e){const t=e.split("/");if(t.length>3||t.length<1)throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${e}`);const[r,o,s]=t;if(!r||!o||!s)throw new Error("FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection");if(o[0]!=="{")return[e];const a=await n.instance.firestore().collection(r).get(),l=[];return a.docs.forEach(h=>{s?l.push(`${r}/${h.id}/${s}`):l.push(r)}),l}onCollectionChange(e,t,r){throw new Error("Not implemented yet")}onDocumentChange(e,t,r){throw new Error("Not implemented yet")}}class w extends d.ServerAuthService{async getUser(e){try{return this.convertToUserCredentials(await n.instance.auth().getUser(e))}catch(t){if(t.code==="auth/user-not-found")return;throw new Error(t)}}setCustomCredentials(e,t){return n.instance.auth().setCustomUserClaims(e,t)}async updateUser(e,t){return this.convertToUserCredentials(await n.instance.auth().updateUser(e,t))}async deleteUser(e){try{await n.instance.auth().deleteUser(e)}catch(t){if(t.code==="auth/user-not-found")return;throw new Error(t)}}convertToUserCredentials(e){return{id:e.uid,email:e.email??"",emailVerified:e.emailVerified??void 0,creationDate:e.metadata.creationTime?new Date(e.metadata.creationTime).getTime():void 0,lastLogin:e.metadata.lastSignInTime?new Date(e.metadata.lastSignInTime).getTime():void 0,name:e.displayName,phoneNumber:e.phoneNumber??void 0,pictureUrl:e.photoURL??void 0,customData:e.customClaims}}}exports.FirebaseAdminDatasource=b;exports.FirebaseAdminHelper=n;exports.FirebaseServerAuth=w;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/firebase-admin-helper.ts","../../src/store/firebase-admin-datasource.ts","../../src/server-auth/firebase-server-auth.ts"],"sourcesContent":["import { AppOptions, initializeApp } from 'firebase-admin/app'\nimport { Auth, getAuth } from 'firebase-admin/auth'\nimport { getFirestore } from 'firebase-admin/firestore'\n\nexport class FirebaseAdminHelper {\n\t\n\tstatic setFirebaseConfig( config?: AppOptions ) {\n\t\tFirebaseAdminHelper._firebaseConfig = config\n\t}\n\n\tprivate constructor() {\n\t\tinitializeApp( FirebaseAdminHelper._firebaseConfig )\n\t}\n\n\tstatic get instance() {\n\t\treturn this._instance || ( this._instance = new FirebaseAdminHelper() )\n\t}\n\n\tfirestore() {\n\t\treturn getFirestore()\n\t}\n\n\tauth(): Auth{\n\t\treturn getAuth()\n\t}\n\n\tprivate static _instance: FirebaseAdminHelper\n\tprivate static _firebaseConfig: AppOptions | undefined\n}\n","import { CollectionChangeListener, Collections, DataSource, DocumentChangeListener, DocumentObject, QueryObject, QueryOperator, Unsubscriber } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { Filter, WhereFilterOp } from 'firebase-admin/firestore'\nimport * as functions from 'firebase-functions/v2'\n\nexport class FirebaseAdminDatasource extends DataSource {\n\n\tconstructor( firebaseFunctionsGlobalOptions?: functions.GlobalOptions ) {\n\t\tsuper()\n\t\tif ( firebaseFunctionsGlobalOptions )\tfunctions.setGlobalOptions( firebaseFunctionsGlobalOptions )\n\t}\n\n\toverride findById( id: string, collectionName: string ): Promise< DocumentObject > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\t\n\t\treturn new Promise<DocumentObject>( async resolve => {\n\t\t\ttry {\n\t\t\t\tconst docSnap = db.doc( `${ collectionName }/${ id }`)\n\t\t\t\tconst retrievedObj = await docSnap.get()\n\t\t\t\tresolve( retrievedObj.data() as DocumentObject )\n\t\t\t} \n\t\t\tcatch( error ) {\n\t\t\t\tconsole.log( error )\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\t}\n\n\toverride save( collections: Collections ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\tconst batch = db.batch()\n\n\t\tObject.entries( collections ).forEach(([ collectionName, collection ]) => {\n\t\t\tcollection?.forEach( document => {\n\t\t\t\t\tconst ref = db.doc( `${ collectionName }/${ document.id }` )\n\t\t\t\t\tbatch.set( ref, document ) \n\t\t\t})\n\t\t})\n\n\t\treturn batch.commit() as unknown as Promise<void>\n\t}\n\n\toverride find( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise< DocumentObject[] > {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\n\t\tthis._lastQuery = query\n\t\treturn this.getFromQuery( query )\n\t}\n\n\toverride async count( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise<number> {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\t\tconst snapShot = await query.count().get()\n\n\t\treturn snapShot.data().count\n\t}\n\n\toverride delete( id: string, collectionName: string ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\treturn db.recursiveDelete( db.doc( `${ collectionName }/${ id }` ) )\n\t}\n\n\toverride next( maxDocs?: number ): Promise< DocumentObject[] > {\n\t\tif( !this._lastQuery ) throw new Error('You should perform a query prior to using method next')\n\n\t\tthis._lastLimit = maxDocs || this._lastLimit\n\n\t\tconst query = this._lastQuery.limit( this._lastLimit ).startAfter( this._lastDocRetrieved )\n\n\t\treturn this.getFromQuery( query )\n\t}\n\n\t// prev should be used with next in reverse order\n\t// prev( limit?: number ): Promise< DocumentObject[] > {\n\t// }\n\n\tprivate getFromQuery( query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> ): Promise<DocumentObject[]> {\n\t\treturn new Promise< DocumentObject[] >( async resolve => {\n\t\t\tconst doc = await query.get()\n\t\t\tthis._lastDocRetrieved = doc.docs[ doc.docs.length-1 ]\n\n\t\t\tresolve( doc.docs.map( doc => doc.data() as DocumentObject ) ) \n\t\t})\n\t}\n\n\tprivate queryObjectToFirebaseQuery( queryObject: QueryObject<DocumentObject>, collectionName: string ): FirebaseFirestore.Query<FirebaseFirestore.DocumentData> {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst andConstraints: Filter[] = []\n\t\tconst orConstraints: Filter[] = []\n\n\t\tDataSource.toPropertyPathOperations( queryObject.operations as any ).forEach( operation =>\t{\n\t\t\tconst operator = this.toFirebaseOperator( operation.operator )\n\t\t\tif ( operation.aggregate) orConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t\telse andConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t})\n\n\t\tlet query = db.collection( collectionName ).where( Filter.or( ...orConstraints, Filter.and( ...andConstraints ) )) \n\n\t\tif ( queryObject.sort?.propertyName ) {\n\t\t\tquery = query.orderBy( queryObject.sort.propertyName, queryObject.sort.order ) \n\t\t}\n\n\t\tif ( queryObject.limit ) {\n\t\t\tthis._lastLimit = queryObject.limit\n\t\t\tquery = query.limit( queryObject.limit )\n\t\t}\n\n\t\treturn query\n\t}\n\n\ttoFirebaseOperator( operator: QueryOperator ): WhereFilterOp {\n\t\tswitch( operator ) {\n\t\t\tcase '==': \n\t\t\tcase '!=':\n\t\t\tcase '<':\n\t\t\tcase '<=':\n\t\t\tcase '>':\n\t\t\tcase '>=': return operator\n\t\t\tcase 'contains': return 'array-contains'\n\t\t\tcase 'containsAny': return 'array-contains-any'\n\t\t\tdefault: return operator\n\t\t}\n\t}\n\n\tprotected override async resolveCollectionPaths( template: string ): Promise<string[]> {\n\t\tconst templateTokens = template.split( '/' )\n\t\tif ( templateTokens.length > 3 || templateTokens.length < 1 ) throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${ template }`)\n\t\tconst [ mainCollection, document, subcollection ] = templateTokens\n\t\tif ( !mainCollection || !document || !subcollection ) throw new Error('FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection')\n\t\t\n\t\tif ( document[0] !== '{' ) return [ template ] // if the second token is not a document, we are in a simple collection path and we can return it as is\n\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tfunctions.logger.info( `Resolving collection paths matching template ${ template }` )\n\t\tconst docs = await db.collection( mainCollection ).get()\n\t\tfunctions.logger.info( `Found ${ docs.size } documents in collection ${ mainCollection }` )\n\n\t\tconst collectionList: string[] = []\n\t\tdocs.docs.forEach(( doc ) => {\n\t\t\tif ( subcollection ) collectionList.push( `${ mainCollection }/${ doc.id }/${ subcollection }` )\n\t\t\telse collectionList.push( mainCollection )\n\t\t})\n\t\treturn collectionList\n\t}\n\t\n\toverride onCollectionChange( query: QueryObject<DocumentObject>, collectionName: string, listener: CollectionChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const queryConstraints = this.queryObjectToQueryConstraints( query as unknown as QueryObject<DocumentObject>, collectionName )\n\t\t// return onSnapshot( queryConstraints, snapshot => {\n\t\t// \tsnapshot.docChanges().forEach( change => {\n\t\t// \t\tlistener({\n\t\t// \t\t\ttype: change.type === 'added'? 'create' : change.type === 'modified'? 'update' : 'delete',\n\t\t// \t\t\tafter: change.doc.data() as DocumentObject,\n\t\t// \t\t\tbefore: undefined,\n\t\t// \t\t\tparams: {}\n\t\t// \t\t})\n\t\t// \t})\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\n\toverride onDocumentChange( documentPath: string, documentId: string, listener: DocumentChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const db = FirebaseHelper.instance.firestore()\n\n\t\t// return onSnapshot( doc( db, documentPath, documentId ), snapshot => {\n\t\t// \tlistener({\n\t\t// \t\ttype: 'update',\n\t\t// \t\tbefore: undefined,\n\t\t// \t\tafter: snapshot.data() as DocumentObject,\n\t\t// \t\tparams: {}\n\t\t// \t})\n\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\t\n\n\tprivate _lastQuery: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> | undefined\n\tprivate _lastLimit: number = 0\n\tprivate _lastDocRetrieved: FirebaseFirestore.QueryDocumentSnapshot<FirebaseFirestore.DocumentData> | undefined\n}","import { ServerAuthService, UserCredentials, CustomCredentials } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { UserRecord } from 'firebase-admin/auth'\n\nexport class FirebaseServerAuth extends ServerAuthService {\n\n\tasync getUser<T extends {}>( userId: string ): Promise<UserCredentials<T> | undefined> {\n\t\ttry {\n\t\t\treturn this.convertToUserCredentials(\n\t\t\t\tawait FirebaseAdminHelper.instance.auth().getUser( userId )\n\t\t\t)\n\t\t} catch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tsetCustomCredentials<T extends CustomCredentials>( userId: string, customCredentials: T ): Promise<void> {\n\t\treturn FirebaseAdminHelper.instance.auth().setCustomUserClaims( userId, customCredentials )\n\t}\n\n\tasync updateUser<T extends {}>( userId: string, credentials: UserCredentials<T> ): Promise<UserCredentials<T>> {\n\t\treturn this.convertToUserCredentials(\n\t\t\tawait FirebaseAdminHelper.instance.auth().updateUser( userId, credentials )\n\t\t)\n\t}\n\n\tasync deleteUser( userId: string ): Promise<void> {\n\t\ttry {\n\t\t\tawait FirebaseAdminHelper.instance.auth().deleteUser( userId )\n\t\t}\n\t\tcatch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tprivate convertToUserCredentials<T extends {}>( userData: UserRecord ): UserCredentials<T> {\n\t\treturn {\n\t\t\tid: userData.uid,\n\t\t\temail: userData.email ?? '',\n\t\t\temailVerified: userData.emailVerified ?? undefined,\n\t\t\tcreationDate: userData.metadata.creationTime? new Date( userData.metadata.creationTime ).getTime() : undefined,\n\t\t\tlastLogin: userData.metadata.lastSignInTime? new Date( userData.metadata.lastSignInTime ).getTime() : undefined,\n\t\t\tname: userData.displayName,\n\t\t\tphoneNumber: userData.phoneNumber ?? undefined,\n\t\t\tpictureUrl: userData.photoURL ?? undefined,\n\t\t\tcustomData: userData.customClaims as T\n\t\t}\n\t}\n}"],"names":["FirebaseAdminHelper","config","initializeApp","getFirestore","getAuth","FirebaseAdminDatasource","DataSource","firebaseFunctionsGlobalOptions","functions","id","collectionName","db","resolve","retrievedObj","error","collections","batch","collection","document","ref","queryObject","query","maxDocs","doc","andConstraints","orConstraints","operation","operator","Filter","template","templateTokens","mainCollection","subcollection","docs","collectionList","listener","documentPath","documentId","FirebaseServerAuth","ServerAuthService","userId","customCredentials","credentials","userData"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/firebase-admin-helper.ts","../../src/store/firebase-admin-datasource.ts","../../src/server-auth/firebase-server-auth.ts"],"sourcesContent":["import { AppOptions, initializeApp } from 'firebase-admin/app'\nimport { Auth, getAuth } from 'firebase-admin/auth'\nimport { getFirestore } from 'firebase-admin/firestore'\n\nexport class FirebaseAdminHelper {\n\t\n\tstatic setFirebaseConfig( config?: AppOptions ) {\n\t\tFirebaseAdminHelper._firebaseConfig = config\n\t}\n\n\tprivate constructor() {\n\t\tinitializeApp( FirebaseAdminHelper._firebaseConfig )\n\t}\n\n\tstatic get instance() {\n\t\treturn this._instance || ( this._instance = new FirebaseAdminHelper() )\n\t}\n\n\tfirestore() {\n\t\treturn getFirestore()\n\t}\n\n\tauth(): Auth{\n\t\treturn getAuth()\n\t}\n\n\tprivate static _instance: FirebaseAdminHelper\n\tprivate static _firebaseConfig: AppOptions | undefined\n}\n","import { CollectionChangeListener, Collections, DataSource, DocumentChangeListener, DocumentObject, QueryObject, QueryOperator, Unsubscriber } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { Filter, WhereFilterOp } from 'firebase-admin/firestore'\nimport * as functions from 'firebase-functions/v2'\n\nexport class FirebaseAdminDatasource extends DataSource {\n\n\tconstructor( firebaseFunctionsGlobalOptions?: functions.GlobalOptions ) {\n\t\tsuper()\n\t\tif ( firebaseFunctionsGlobalOptions )\tfunctions.setGlobalOptions( firebaseFunctionsGlobalOptions )\n\t}\n\n\toverride findById( id: string, collectionName: string ): Promise< DocumentObject > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\t\n\t\treturn new Promise<DocumentObject>( async resolve => {\n\t\t\ttry {\n\t\t\t\tconst docSnap = db.doc( `${ collectionName }/${ id }`)\n\t\t\t\tconst retrievedObj = await docSnap.get()\n\t\t\t\tresolve( retrievedObj.data() as DocumentObject )\n\t\t\t} \n\t\t\tcatch( error ) {\n\t\t\t\tconsole.log( error )\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\t}\n\n\toverride save( collections: Collections ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\tconst batch = db.batch()\n\n\t\tObject.entries( collections ).forEach(([ collectionName, collection ]) => {\n\t\t\tcollection?.forEach( document => {\n\t\t\t\t\tconst ref = db.doc( `${ collectionName }/${ document.id }` )\n\t\t\t\t\tbatch.set( ref, document ) \n\t\t\t})\n\t\t})\n\n\t\treturn batch.commit() as unknown as Promise<void>\n\t}\n\n\toverride find( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise< DocumentObject[] > {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\n\t\tthis._lastQuery = query\n\t\treturn this.getFromQuery( query )\n\t}\n\n\toverride async count( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise<number> {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\t\tconst snapShot = await query.count().get()\n\n\t\treturn snapShot.data().count\n\t}\n\n\toverride delete( id: string, collectionName: string ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\treturn db.recursiveDelete( db.doc( `${ collectionName }/${ id }` ) )\n\t}\n\n\toverride next( maxDocs?: number ): Promise< DocumentObject[] > {\n\t\tif( !this._lastQuery ) throw new Error('You should perform a query prior to using method next')\n\n\t\tthis._lastLimit = maxDocs || this._lastLimit\n\n\t\tconst query = this._lastQuery.limit( this._lastLimit ).startAfter( this._lastDocRetrieved )\n\n\t\treturn this.getFromQuery( query )\n\t}\n\n\t// prev should be used with next in reverse order\n\t// prev( limit?: number ): Promise< DocumentObject[] > {\n\t// }\n\n\tprivate getFromQuery( query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> ): Promise<DocumentObject[]> {\n\t\treturn new Promise< DocumentObject[] >( async resolve => {\n\t\t\tconst doc = await query.get()\n\t\t\tthis._lastDocRetrieved = doc.docs[ doc.docs.length-1 ]\n\n\t\t\tresolve( doc.docs.map( doc => doc.data() as DocumentObject ) ) \n\t\t})\n\t}\n\n\tprivate queryObjectToFirebaseQuery( queryObject: QueryObject<DocumentObject>, collectionName: string ): FirebaseFirestore.Query<FirebaseFirestore.DocumentData> {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst andConstraints: Filter[] = []\n\t\tconst orConstraints: Filter[] = []\n\n\t\tDataSource.toPropertyPathOperations( queryObject.operations as any ).forEach( operation =>\t{\n\t\t\tconst operator = this.toFirebaseOperator( operation.operator )\n\t\t\tif ( operation.aggregate) orConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t\telse andConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t})\n\n\t\tlet query = db.collection( collectionName ).where( Filter.or( ...orConstraints, Filter.and( ...andConstraints ) )) \n\n\t\tif ( queryObject.sort?.propertyName ) {\n\t\t\tquery = query.orderBy( queryObject.sort.propertyName, queryObject.sort.order ) \n\t\t}\n\n\t\tif ( queryObject.limit ) {\n\t\t\tthis._lastLimit = queryObject.limit\n\t\t\tquery = query.limit( queryObject.limit )\n\t\t}\n\n\t\treturn query\n\t}\n\n\ttoFirebaseOperator( operator: QueryOperator ): WhereFilterOp {\n\t\tswitch( operator ) {\n\t\t\tcase '==': \n\t\t\tcase '!=':\n\t\t\tcase '<':\n\t\t\tcase '<=':\n\t\t\tcase '>':\n\t\t\tcase '>=': return operator\n\t\t\tcase 'contains': return 'array-contains'\n\t\t\tcase 'containsAny': return 'array-contains-any'\n\t\t\tdefault: return operator\n\t\t}\n\t}\n\n\tprotected override async resolveCollectionPaths( template: string ): Promise<string[]> {\n\t\tconst templateTokens = template.split( '/' )\n\t\tif ( templateTokens.length > 3 || templateTokens.length < 1 ) throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${ template }`)\n\t\tconst [ mainCollection, document, subcollection ] = templateTokens\n\t\tif ( !mainCollection || !document || !subcollection ) throw new Error('FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection')\n\t\t\n\t\tif ( document[0] !== '{' ) return [ template ] // if the second token is not a document, we are in a simple collection path and we can return it as is\n\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst docs = await db.collection( mainCollection ).get()\n\n\t\tconst collectionList: string[] = []\n\t\tdocs.docs.forEach(( doc ) => {\n\t\t\tif ( subcollection ) collectionList.push( `${ mainCollection }/${ doc.id }/${ subcollection }` )\n\t\t\telse collectionList.push( mainCollection )\n\t\t})\n\t\treturn collectionList\n\t}\n\t\n\toverride onCollectionChange( query: QueryObject<DocumentObject>, collectionName: string, listener: CollectionChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const queryConstraints = this.queryObjectToQueryConstraints( query as unknown as QueryObject<DocumentObject>, collectionName )\n\t\t// return onSnapshot( queryConstraints, snapshot => {\n\t\t// \tsnapshot.docChanges().forEach( change => {\n\t\t// \t\tlistener({\n\t\t// \t\t\ttype: change.type === 'added'? 'create' : change.type === 'modified'? 'update' : 'delete',\n\t\t// \t\t\tafter: change.doc.data() as DocumentObject,\n\t\t// \t\t\tbefore: undefined,\n\t\t// \t\t\tparams: {}\n\t\t// \t\t})\n\t\t// \t})\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\n\toverride onDocumentChange( documentPath: string, documentId: string, listener: DocumentChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const db = FirebaseHelper.instance.firestore()\n\n\t\t// return onSnapshot( doc( db, documentPath, documentId ), snapshot => {\n\t\t// \tlistener({\n\t\t// \t\ttype: 'update',\n\t\t// \t\tbefore: undefined,\n\t\t// \t\tafter: snapshot.data() as DocumentObject,\n\t\t// \t\tparams: {}\n\t\t// \t})\n\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\t\n\n\tprivate _lastQuery: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> | undefined\n\tprivate _lastLimit: number = 0\n\tprivate _lastDocRetrieved: FirebaseFirestore.QueryDocumentSnapshot<FirebaseFirestore.DocumentData> | undefined\n}","import { ServerAuthService, UserCredentials, CustomCredentials } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { UserRecord } from 'firebase-admin/auth'\n\nexport class FirebaseServerAuth extends ServerAuthService {\n\n\tasync getUser<T extends {}>( userId: string ): Promise<UserCredentials<T> | undefined> {\n\t\ttry {\n\t\t\treturn this.convertToUserCredentials(\n\t\t\t\tawait FirebaseAdminHelper.instance.auth().getUser( userId )\n\t\t\t)\n\t\t} catch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tsetCustomCredentials<T extends CustomCredentials>( userId: string, customCredentials: T ): Promise<void> {\n\t\treturn FirebaseAdminHelper.instance.auth().setCustomUserClaims( userId, customCredentials )\n\t}\n\n\tasync updateUser<T extends {}>( userId: string, credentials: UserCredentials<T> ): Promise<UserCredentials<T>> {\n\t\treturn this.convertToUserCredentials(\n\t\t\tawait FirebaseAdminHelper.instance.auth().updateUser( userId, credentials )\n\t\t)\n\t}\n\n\tasync deleteUser( userId: string ): Promise<void> {\n\t\ttry {\n\t\t\tawait FirebaseAdminHelper.instance.auth().deleteUser( userId )\n\t\t}\n\t\tcatch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tprivate convertToUserCredentials<T extends {}>( userData: UserRecord ): UserCredentials<T> {\n\t\treturn {\n\t\t\tid: userData.uid,\n\t\t\temail: userData.email ?? '',\n\t\t\temailVerified: userData.emailVerified ?? undefined,\n\t\t\tcreationDate: userData.metadata.creationTime? new Date( userData.metadata.creationTime ).getTime() : undefined,\n\t\t\tlastLogin: userData.metadata.lastSignInTime? new Date( userData.metadata.lastSignInTime ).getTime() : undefined,\n\t\t\tname: userData.displayName,\n\t\t\tphoneNumber: userData.phoneNumber ?? undefined,\n\t\t\tpictureUrl: userData.photoURL ?? undefined,\n\t\t\tcustomData: userData.customClaims as T\n\t\t}\n\t}\n}"],"names":["FirebaseAdminHelper","config","initializeApp","getFirestore","getAuth","FirebaseAdminDatasource","DataSource","firebaseFunctionsGlobalOptions","functions","id","collectionName","db","resolve","retrievedObj","error","collections","batch","collection","document","ref","queryObject","query","maxDocs","doc","andConstraints","orConstraints","operation","operator","Filter","template","templateTokens","mainCollection","subcollection","docs","collectionList","listener","documentPath","documentId","FirebaseServerAuth","ServerAuthService","userId","customCredentials","credentials","userData"],"mappings":"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"}
package/lib/esm/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { DataSource as d, ServerAuthService as f } from "entropic-bond";
1
+ import { DataSource as u, ServerAuthService as m } from "entropic-bond";
2
2
  import { initializeApp as p } from "firebase-admin/app";
3
- import { getAuth as g } from "firebase-admin/auth";
3
+ import { getAuth as f } from "firebase-admin/auth";
4
4
  import { getFirestore as y, Filter as l } from "firebase-admin/firestore";
5
- import * as u from "firebase-functions/v2";
5
+ import * as g from "firebase-functions/v2";
6
6
  class o {
7
7
  static setFirebaseConfig(e) {
8
8
  o._firebaseConfig = e;
@@ -17,29 +17,29 @@ class o {
17
17
  return y();
18
18
  }
19
19
  auth() {
20
- return g();
20
+ return f();
21
21
  }
22
22
  }
23
- class T extends d {
23
+ class T extends u {
24
24
  constructor(e) {
25
- super(), this._lastLimit = 0, e && u.setGlobalOptions(e);
25
+ super(), this._lastLimit = 0, e && g.setGlobalOptions(e);
26
26
  }
27
27
  findById(e, t) {
28
28
  const r = o.instance.firestore();
29
- return new Promise(async (n) => {
29
+ return new Promise(async (s) => {
30
30
  try {
31
31
  const i = await r.doc(`${t}/${e}`).get();
32
- n(i.data());
33
- } catch (s) {
34
- return console.log(s), null;
32
+ s(i.data());
33
+ } catch (n) {
34
+ return console.log(n), null;
35
35
  }
36
36
  });
37
37
  }
38
38
  save(e) {
39
39
  const t = o.instance.firestore(), r = t.batch();
40
- return Object.entries(e).forEach(([n, s]) => {
41
- s?.forEach((i) => {
42
- const a = t.doc(`${n}/${i.id}`);
40
+ return Object.entries(e).forEach(([s, n]) => {
41
+ n?.forEach((i) => {
42
+ const a = t.doc(`${s}/${i.id}`);
43
43
  r.set(a, i);
44
44
  });
45
45
  }), r.commit();
@@ -67,16 +67,16 @@ class T extends d {
67
67
  getFromQuery(e) {
68
68
  return new Promise(async (t) => {
69
69
  const r = await e.get();
70
- this._lastDocRetrieved = r.docs[r.docs.length - 1], t(r.docs.map((n) => n.data()));
70
+ this._lastDocRetrieved = r.docs[r.docs.length - 1], t(r.docs.map((s) => s.data()));
71
71
  });
72
72
  }
73
73
  queryObjectToFirebaseQuery(e, t) {
74
- const r = o.instance.firestore(), n = [], s = [];
75
- d.toPropertyPathOperations(e.operations).forEach((a) => {
74
+ const r = o.instance.firestore(), s = [], n = [];
75
+ u.toPropertyPathOperations(e.operations).forEach((a) => {
76
76
  const c = this.toFirebaseOperator(a.operator);
77
- a.aggregate ? s.push(l.where(a.property, c, a.value)) : n.push(l.where(a.property, c, a.value));
77
+ a.aggregate ? n.push(l.where(a.property, c, a.value)) : s.push(l.where(a.property, c, a.value));
78
78
  });
79
- let i = r.collection(t).where(l.or(...s, l.and(...n)));
79
+ let i = r.collection(t).where(l.or(...n, l.and(...s)));
80
80
  return e.sort?.propertyName && (i = i.orderBy(e.sort.propertyName, e.sort.order)), e.limit && (this._lastLimit = e.limit, i = i.limit(e.limit)), i;
81
81
  }
82
82
  toFirebaseOperator(e) {
@@ -99,16 +99,12 @@ class T extends d {
99
99
  async resolveCollectionPaths(e) {
100
100
  const t = e.split("/");
101
101
  if (t.length > 3 || t.length < 1) throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${e}`);
102
- const [r, n, s] = t;
103
- if (!r || !n || !s) throw new Error("FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection");
104
- if (n[0] !== "{") return [e];
105
- const i = o.instance.firestore();
106
- u.logger.info(`Resolving collection paths matching template ${e}`);
107
- const a = await i.collection(r).get();
108
- u.logger.info(`Found ${a.size} documents in collection ${r}`);
109
- const c = [];
110
- return a.docs.forEach((m) => {
111
- s ? c.push(`${r}/${m.id}/${s}`) : c.push(r);
102
+ const [r, s, n] = t;
103
+ if (!r || !s || !n) throw new Error("FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection");
104
+ if (s[0] !== "{") return [e];
105
+ const a = await o.instance.firestore().collection(r).get(), c = [];
106
+ return a.docs.forEach((h) => {
107
+ n ? c.push(`${r}/${h.id}/${n}`) : c.push(r);
112
108
  }), c;
113
109
  }
114
110
  onCollectionChange(e, t, r) {
@@ -118,7 +114,7 @@ class T extends d {
118
114
  throw new Error("Not implemented yet");
119
115
  }
120
116
  }
121
- class F extends f {
117
+ class F extends m {
122
118
  async getUser(e) {
123
119
  try {
124
120
  return this.convertToUserCredentials(
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/firebase-admin-helper.ts","../../src/store/firebase-admin-datasource.ts","../../src/server-auth/firebase-server-auth.ts"],"sourcesContent":["import { AppOptions, initializeApp } from 'firebase-admin/app'\nimport { Auth, getAuth } from 'firebase-admin/auth'\nimport { getFirestore } from 'firebase-admin/firestore'\n\nexport class FirebaseAdminHelper {\n\t\n\tstatic setFirebaseConfig( config?: AppOptions ) {\n\t\tFirebaseAdminHelper._firebaseConfig = config\n\t}\n\n\tprivate constructor() {\n\t\tinitializeApp( FirebaseAdminHelper._firebaseConfig )\n\t}\n\n\tstatic get instance() {\n\t\treturn this._instance || ( this._instance = new FirebaseAdminHelper() )\n\t}\n\n\tfirestore() {\n\t\treturn getFirestore()\n\t}\n\n\tauth(): Auth{\n\t\treturn getAuth()\n\t}\n\n\tprivate static _instance: FirebaseAdminHelper\n\tprivate static _firebaseConfig: AppOptions | undefined\n}\n","import { CollectionChangeListener, Collections, DataSource, DocumentChangeListener, DocumentObject, QueryObject, QueryOperator, Unsubscriber } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { Filter, WhereFilterOp } from 'firebase-admin/firestore'\nimport * as functions from 'firebase-functions/v2'\n\nexport class FirebaseAdminDatasource extends DataSource {\n\n\tconstructor( firebaseFunctionsGlobalOptions?: functions.GlobalOptions ) {\n\t\tsuper()\n\t\tif ( firebaseFunctionsGlobalOptions )\tfunctions.setGlobalOptions( firebaseFunctionsGlobalOptions )\n\t}\n\n\toverride findById( id: string, collectionName: string ): Promise< DocumentObject > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\t\n\t\treturn new Promise<DocumentObject>( async resolve => {\n\t\t\ttry {\n\t\t\t\tconst docSnap = db.doc( `${ collectionName }/${ id }`)\n\t\t\t\tconst retrievedObj = await docSnap.get()\n\t\t\t\tresolve( retrievedObj.data() as DocumentObject )\n\t\t\t} \n\t\t\tcatch( error ) {\n\t\t\t\tconsole.log( error )\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\t}\n\n\toverride save( collections: Collections ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\tconst batch = db.batch()\n\n\t\tObject.entries( collections ).forEach(([ collectionName, collection ]) => {\n\t\t\tcollection?.forEach( document => {\n\t\t\t\t\tconst ref = db.doc( `${ collectionName }/${ document.id }` )\n\t\t\t\t\tbatch.set( ref, document ) \n\t\t\t})\n\t\t})\n\n\t\treturn batch.commit() as unknown as Promise<void>\n\t}\n\n\toverride find( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise< DocumentObject[] > {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\n\t\tthis._lastQuery = query\n\t\treturn this.getFromQuery( query )\n\t}\n\n\toverride async count( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise<number> {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\t\tconst snapShot = await query.count().get()\n\n\t\treturn snapShot.data().count\n\t}\n\n\toverride delete( id: string, collectionName: string ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\treturn db.recursiveDelete( db.doc( `${ collectionName }/${ id }` ) )\n\t}\n\n\toverride next( maxDocs?: number ): Promise< DocumentObject[] > {\n\t\tif( !this._lastQuery ) throw new Error('You should perform a query prior to using method next')\n\n\t\tthis._lastLimit = maxDocs || this._lastLimit\n\n\t\tconst query = this._lastQuery.limit( this._lastLimit ).startAfter( this._lastDocRetrieved )\n\n\t\treturn this.getFromQuery( query )\n\t}\n\n\t// prev should be used with next in reverse order\n\t// prev( limit?: number ): Promise< DocumentObject[] > {\n\t// }\n\n\tprivate getFromQuery( query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> ): Promise<DocumentObject[]> {\n\t\treturn new Promise< DocumentObject[] >( async resolve => {\n\t\t\tconst doc = await query.get()\n\t\t\tthis._lastDocRetrieved = doc.docs[ doc.docs.length-1 ]\n\n\t\t\tresolve( doc.docs.map( doc => doc.data() as DocumentObject ) ) \n\t\t})\n\t}\n\n\tprivate queryObjectToFirebaseQuery( queryObject: QueryObject<DocumentObject>, collectionName: string ): FirebaseFirestore.Query<FirebaseFirestore.DocumentData> {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst andConstraints: Filter[] = []\n\t\tconst orConstraints: Filter[] = []\n\n\t\tDataSource.toPropertyPathOperations( queryObject.operations as any ).forEach( operation =>\t{\n\t\t\tconst operator = this.toFirebaseOperator( operation.operator )\n\t\t\tif ( operation.aggregate) orConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t\telse andConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t})\n\n\t\tlet query = db.collection( collectionName ).where( Filter.or( ...orConstraints, Filter.and( ...andConstraints ) )) \n\n\t\tif ( queryObject.sort?.propertyName ) {\n\t\t\tquery = query.orderBy( queryObject.sort.propertyName, queryObject.sort.order ) \n\t\t}\n\n\t\tif ( queryObject.limit ) {\n\t\t\tthis._lastLimit = queryObject.limit\n\t\t\tquery = query.limit( queryObject.limit )\n\t\t}\n\n\t\treturn query\n\t}\n\n\ttoFirebaseOperator( operator: QueryOperator ): WhereFilterOp {\n\t\tswitch( operator ) {\n\t\t\tcase '==': \n\t\t\tcase '!=':\n\t\t\tcase '<':\n\t\t\tcase '<=':\n\t\t\tcase '>':\n\t\t\tcase '>=': return operator\n\t\t\tcase 'contains': return 'array-contains'\n\t\t\tcase 'containsAny': return 'array-contains-any'\n\t\t\tdefault: return operator\n\t\t}\n\t}\n\n\tprotected override async resolveCollectionPaths( template: string ): Promise<string[]> {\n\t\tconst templateTokens = template.split( '/' )\n\t\tif ( templateTokens.length > 3 || templateTokens.length < 1 ) throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${ template }`)\n\t\tconst [ mainCollection, document, subcollection ] = templateTokens\n\t\tif ( !mainCollection || !document || !subcollection ) throw new Error('FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection')\n\t\t\n\t\tif ( document[0] !== '{' ) return [ template ] // if the second token is not a document, we are in a simple collection path and we can return it as is\n\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tfunctions.logger.info( `Resolving collection paths matching template ${ template }` )\n\t\tconst docs = await db.collection( mainCollection ).get()\n\t\tfunctions.logger.info( `Found ${ docs.size } documents in collection ${ mainCollection }` )\n\n\t\tconst collectionList: string[] = []\n\t\tdocs.docs.forEach(( doc ) => {\n\t\t\tif ( subcollection ) collectionList.push( `${ mainCollection }/${ doc.id }/${ subcollection }` )\n\t\t\telse collectionList.push( mainCollection )\n\t\t})\n\t\treturn collectionList\n\t}\n\t\n\toverride onCollectionChange( query: QueryObject<DocumentObject>, collectionName: string, listener: CollectionChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const queryConstraints = this.queryObjectToQueryConstraints( query as unknown as QueryObject<DocumentObject>, collectionName )\n\t\t// return onSnapshot( queryConstraints, snapshot => {\n\t\t// \tsnapshot.docChanges().forEach( change => {\n\t\t// \t\tlistener({\n\t\t// \t\t\ttype: change.type === 'added'? 'create' : change.type === 'modified'? 'update' : 'delete',\n\t\t// \t\t\tafter: change.doc.data() as DocumentObject,\n\t\t// \t\t\tbefore: undefined,\n\t\t// \t\t\tparams: {}\n\t\t// \t\t})\n\t\t// \t})\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\n\toverride onDocumentChange( documentPath: string, documentId: string, listener: DocumentChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const db = FirebaseHelper.instance.firestore()\n\n\t\t// return onSnapshot( doc( db, documentPath, documentId ), snapshot => {\n\t\t// \tlistener({\n\t\t// \t\ttype: 'update',\n\t\t// \t\tbefore: undefined,\n\t\t// \t\tafter: snapshot.data() as DocumentObject,\n\t\t// \t\tparams: {}\n\t\t// \t})\n\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\t\n\n\tprivate _lastQuery: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> | undefined\n\tprivate _lastLimit: number = 0\n\tprivate _lastDocRetrieved: FirebaseFirestore.QueryDocumentSnapshot<FirebaseFirestore.DocumentData> | undefined\n}","import { ServerAuthService, UserCredentials, CustomCredentials } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { UserRecord } from 'firebase-admin/auth'\n\nexport class FirebaseServerAuth extends ServerAuthService {\n\n\tasync getUser<T extends {}>( userId: string ): Promise<UserCredentials<T> | undefined> {\n\t\ttry {\n\t\t\treturn this.convertToUserCredentials(\n\t\t\t\tawait FirebaseAdminHelper.instance.auth().getUser( userId )\n\t\t\t)\n\t\t} catch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tsetCustomCredentials<T extends CustomCredentials>( userId: string, customCredentials: T ): Promise<void> {\n\t\treturn FirebaseAdminHelper.instance.auth().setCustomUserClaims( userId, customCredentials )\n\t}\n\n\tasync updateUser<T extends {}>( userId: string, credentials: UserCredentials<T> ): Promise<UserCredentials<T>> {\n\t\treturn this.convertToUserCredentials(\n\t\t\tawait FirebaseAdminHelper.instance.auth().updateUser( userId, credentials )\n\t\t)\n\t}\n\n\tasync deleteUser( userId: string ): Promise<void> {\n\t\ttry {\n\t\t\tawait FirebaseAdminHelper.instance.auth().deleteUser( userId )\n\t\t}\n\t\tcatch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tprivate convertToUserCredentials<T extends {}>( userData: UserRecord ): UserCredentials<T> {\n\t\treturn {\n\t\t\tid: userData.uid,\n\t\t\temail: userData.email ?? '',\n\t\t\temailVerified: userData.emailVerified ?? undefined,\n\t\t\tcreationDate: userData.metadata.creationTime? new Date( userData.metadata.creationTime ).getTime() : undefined,\n\t\t\tlastLogin: userData.metadata.lastSignInTime? new Date( userData.metadata.lastSignInTime ).getTime() : undefined,\n\t\t\tname: userData.displayName,\n\t\t\tphoneNumber: userData.phoneNumber ?? undefined,\n\t\t\tpictureUrl: userData.photoURL ?? undefined,\n\t\t\tcustomData: userData.customClaims as T\n\t\t}\n\t}\n}"],"names":["FirebaseAdminHelper","config","initializeApp","getFirestore","getAuth","FirebaseAdminDatasource","DataSource","firebaseFunctionsGlobalOptions","functions","id","collectionName","db","resolve","retrievedObj","error","collections","batch","collection","document","ref","queryObject","query","maxDocs","doc","andConstraints","orConstraints","operation","operator","Filter","template","templateTokens","mainCollection","subcollection","docs","collectionList","listener","documentPath","documentId","FirebaseServerAuth","ServerAuthService","userId","customCredentials","credentials","userData"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/firebase-admin-helper.ts","../../src/store/firebase-admin-datasource.ts","../../src/server-auth/firebase-server-auth.ts"],"sourcesContent":["import { AppOptions, initializeApp } from 'firebase-admin/app'\nimport { Auth, getAuth } from 'firebase-admin/auth'\nimport { getFirestore } from 'firebase-admin/firestore'\n\nexport class FirebaseAdminHelper {\n\t\n\tstatic setFirebaseConfig( config?: AppOptions ) {\n\t\tFirebaseAdminHelper._firebaseConfig = config\n\t}\n\n\tprivate constructor() {\n\t\tinitializeApp( FirebaseAdminHelper._firebaseConfig )\n\t}\n\n\tstatic get instance() {\n\t\treturn this._instance || ( this._instance = new FirebaseAdminHelper() )\n\t}\n\n\tfirestore() {\n\t\treturn getFirestore()\n\t}\n\n\tauth(): Auth{\n\t\treturn getAuth()\n\t}\n\n\tprivate static _instance: FirebaseAdminHelper\n\tprivate static _firebaseConfig: AppOptions | undefined\n}\n","import { CollectionChangeListener, Collections, DataSource, DocumentChangeListener, DocumentObject, QueryObject, QueryOperator, Unsubscriber } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { Filter, WhereFilterOp } from 'firebase-admin/firestore'\nimport * as functions from 'firebase-functions/v2'\n\nexport class FirebaseAdminDatasource extends DataSource {\n\n\tconstructor( firebaseFunctionsGlobalOptions?: functions.GlobalOptions ) {\n\t\tsuper()\n\t\tif ( firebaseFunctionsGlobalOptions )\tfunctions.setGlobalOptions( firebaseFunctionsGlobalOptions )\n\t}\n\n\toverride findById( id: string, collectionName: string ): Promise< DocumentObject > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\t\n\t\treturn new Promise<DocumentObject>( async resolve => {\n\t\t\ttry {\n\t\t\t\tconst docSnap = db.doc( `${ collectionName }/${ id }`)\n\t\t\t\tconst retrievedObj = await docSnap.get()\n\t\t\t\tresolve( retrievedObj.data() as DocumentObject )\n\t\t\t} \n\t\t\tcatch( error ) {\n\t\t\t\tconsole.log( error )\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\t}\n\n\toverride save( collections: Collections ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\t\tconst batch = db.batch()\n\n\t\tObject.entries( collections ).forEach(([ collectionName, collection ]) => {\n\t\t\tcollection?.forEach( document => {\n\t\t\t\t\tconst ref = db.doc( `${ collectionName }/${ document.id }` )\n\t\t\t\t\tbatch.set( ref, document ) \n\t\t\t})\n\t\t})\n\n\t\treturn batch.commit() as unknown as Promise<void>\n\t}\n\n\toverride find( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise< DocumentObject[] > {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\n\t\tthis._lastQuery = query\n\t\treturn this.getFromQuery( query )\n\t}\n\n\toverride async count( queryObject: QueryObject<DocumentObject>, collectionName: string ): Promise<number> {\n\t\tconst query = this.queryObjectToFirebaseQuery( queryObject, collectionName )\n\t\tconst snapShot = await query.count().get()\n\n\t\treturn snapShot.data().count\n\t}\n\n\toverride delete( id: string, collectionName: string ): Promise< void > {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\treturn db.recursiveDelete( db.doc( `${ collectionName }/${ id }` ) )\n\t}\n\n\toverride next( maxDocs?: number ): Promise< DocumentObject[] > {\n\t\tif( !this._lastQuery ) throw new Error('You should perform a query prior to using method next')\n\n\t\tthis._lastLimit = maxDocs || this._lastLimit\n\n\t\tconst query = this._lastQuery.limit( this._lastLimit ).startAfter( this._lastDocRetrieved )\n\n\t\treturn this.getFromQuery( query )\n\t}\n\n\t// prev should be used with next in reverse order\n\t// prev( limit?: number ): Promise< DocumentObject[] > {\n\t// }\n\n\tprivate getFromQuery( query: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> ): Promise<DocumentObject[]> {\n\t\treturn new Promise< DocumentObject[] >( async resolve => {\n\t\t\tconst doc = await query.get()\n\t\t\tthis._lastDocRetrieved = doc.docs[ doc.docs.length-1 ]\n\n\t\t\tresolve( doc.docs.map( doc => doc.data() as DocumentObject ) ) \n\t\t})\n\t}\n\n\tprivate queryObjectToFirebaseQuery( queryObject: QueryObject<DocumentObject>, collectionName: string ): FirebaseFirestore.Query<FirebaseFirestore.DocumentData> {\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst andConstraints: Filter[] = []\n\t\tconst orConstraints: Filter[] = []\n\n\t\tDataSource.toPropertyPathOperations( queryObject.operations as any ).forEach( operation =>\t{\n\t\t\tconst operator = this.toFirebaseOperator( operation.operator )\n\t\t\tif ( operation.aggregate) orConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t\telse andConstraints.push( Filter.where( operation.property, operator, operation.value ) )\n\t\t})\n\n\t\tlet query = db.collection( collectionName ).where( Filter.or( ...orConstraints, Filter.and( ...andConstraints ) )) \n\n\t\tif ( queryObject.sort?.propertyName ) {\n\t\t\tquery = query.orderBy( queryObject.sort.propertyName, queryObject.sort.order ) \n\t\t}\n\n\t\tif ( queryObject.limit ) {\n\t\t\tthis._lastLimit = queryObject.limit\n\t\t\tquery = query.limit( queryObject.limit )\n\t\t}\n\n\t\treturn query\n\t}\n\n\ttoFirebaseOperator( operator: QueryOperator ): WhereFilterOp {\n\t\tswitch( operator ) {\n\t\t\tcase '==': \n\t\t\tcase '!=':\n\t\t\tcase '<':\n\t\t\tcase '<=':\n\t\t\tcase '>':\n\t\t\tcase '>=': return operator\n\t\t\tcase 'contains': return 'array-contains'\n\t\t\tcase 'containsAny': return 'array-contains-any'\n\t\t\tdefault: return operator\n\t\t}\n\t}\n\n\tprotected override async resolveCollectionPaths( template: string ): Promise<string[]> {\n\t\tconst templateTokens = template.split( '/' )\n\t\tif ( templateTokens.length > 3 || templateTokens.length < 1 ) throw new Error(`FirebaseAdminDatasource.collectionsMatchingTemplate only supports collection and subcollection paths (max 3 tokens). Collection path provided: ${ template }`)\n\t\tconst [ mainCollection, document, subcollection ] = templateTokens\n\t\tif ( !mainCollection || !document || !subcollection ) throw new Error('FirebaseAdminDatasource.collectionsMatchingTemplate requires a document and subcollection')\n\t\t\n\t\tif ( document[0] !== '{' ) return [ template ] // if the second token is not a document, we are in a simple collection path and we can return it as is\n\n\t\tconst db = FirebaseAdminHelper.instance.firestore()\n\n\t\tconst docs = await db.collection( mainCollection ).get()\n\n\t\tconst collectionList: string[] = []\n\t\tdocs.docs.forEach(( doc ) => {\n\t\t\tif ( subcollection ) collectionList.push( `${ mainCollection }/${ doc.id }/${ subcollection }` )\n\t\t\telse collectionList.push( mainCollection )\n\t\t})\n\t\treturn collectionList\n\t}\n\t\n\toverride onCollectionChange( query: QueryObject<DocumentObject>, collectionName: string, listener: CollectionChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const queryConstraints = this.queryObjectToQueryConstraints( query as unknown as QueryObject<DocumentObject>, collectionName )\n\t\t// return onSnapshot( queryConstraints, snapshot => {\n\t\t// \tsnapshot.docChanges().forEach( change => {\n\t\t// \t\tlistener({\n\t\t// \t\t\ttype: change.type === 'added'? 'create' : change.type === 'modified'? 'update' : 'delete',\n\t\t// \t\t\tafter: change.doc.data() as DocumentObject,\n\t\t// \t\t\tbefore: undefined,\n\t\t// \t\t\tparams: {}\n\t\t// \t\t})\n\t\t// \t})\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\n\toverride onDocumentChange( documentPath: string, documentId: string, listener: DocumentChangeListener<DocumentObject> ): Unsubscriber {\n\t\t// const db = FirebaseHelper.instance.firestore()\n\n\t\t// return onSnapshot( doc( db, documentPath, documentId ), snapshot => {\n\t\t// \tlistener({\n\t\t// \t\ttype: 'update',\n\t\t// \t\tbefore: undefined,\n\t\t// \t\tafter: snapshot.data() as DocumentObject,\n\t\t// \t\tparams: {}\n\t\t// \t})\n\n\t\t// })\n\t\tthrow new Error( 'Not implemented yet')\n\t}\n\t\n\n\tprivate _lastQuery: FirebaseFirestore.Query<FirebaseFirestore.DocumentData> | undefined\n\tprivate _lastLimit: number = 0\n\tprivate _lastDocRetrieved: FirebaseFirestore.QueryDocumentSnapshot<FirebaseFirestore.DocumentData> | undefined\n}","import { ServerAuthService, UserCredentials, CustomCredentials } from 'entropic-bond'\nimport { FirebaseAdminHelper } from '../firebase-admin-helper'\nimport { UserRecord } from 'firebase-admin/auth'\n\nexport class FirebaseServerAuth extends ServerAuthService {\n\n\tasync getUser<T extends {}>( userId: string ): Promise<UserCredentials<T> | undefined> {\n\t\ttry {\n\t\t\treturn this.convertToUserCredentials(\n\t\t\t\tawait FirebaseAdminHelper.instance.auth().getUser( userId )\n\t\t\t)\n\t\t} catch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tsetCustomCredentials<T extends CustomCredentials>( userId: string, customCredentials: T ): Promise<void> {\n\t\treturn FirebaseAdminHelper.instance.auth().setCustomUserClaims( userId, customCredentials )\n\t}\n\n\tasync updateUser<T extends {}>( userId: string, credentials: UserCredentials<T> ): Promise<UserCredentials<T>> {\n\t\treturn this.convertToUserCredentials(\n\t\t\tawait FirebaseAdminHelper.instance.auth().updateUser( userId, credentials )\n\t\t)\n\t}\n\n\tasync deleteUser( userId: string ): Promise<void> {\n\t\ttry {\n\t\t\tawait FirebaseAdminHelper.instance.auth().deleteUser( userId )\n\t\t}\n\t\tcatch ( error ) {\n\t\t\tif ( error.code === 'auth/user-not-found' ) return undefined\n\t\t\telse throw new Error( error )\n\t\t}\n\t}\n\n\tprivate convertToUserCredentials<T extends {}>( userData: UserRecord ): UserCredentials<T> {\n\t\treturn {\n\t\t\tid: userData.uid,\n\t\t\temail: userData.email ?? '',\n\t\t\temailVerified: userData.emailVerified ?? undefined,\n\t\t\tcreationDate: userData.metadata.creationTime? new Date( userData.metadata.creationTime ).getTime() : undefined,\n\t\t\tlastLogin: userData.metadata.lastSignInTime? new Date( userData.metadata.lastSignInTime ).getTime() : undefined,\n\t\t\tname: userData.displayName,\n\t\t\tphoneNumber: userData.phoneNumber ?? undefined,\n\t\t\tpictureUrl: userData.photoURL ?? undefined,\n\t\t\tcustomData: userData.customClaims as T\n\t\t}\n\t}\n}"],"names":["FirebaseAdminHelper","config","initializeApp","getFirestore","getAuth","FirebaseAdminDatasource","DataSource","firebaseFunctionsGlobalOptions","functions","id","collectionName","db","resolve","retrievedObj","error","collections","batch","collection","document","ref","queryObject","query","maxDocs","doc","andConstraints","orConstraints","operation","operator","Filter","template","templateTokens","mainCollection","subcollection","docs","collectionList","listener","documentPath","documentId","FirebaseServerAuth","ServerAuthService","userId","customCredentials","credentials","userData"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@entropic-bond/firebase-admin",
3
3
  "type": "module",
4
- "version": "1.7.28",
4
+ "version": "1.7.29",
5
5
  "description": "Firebase Admin plugins for Entropic Bond",
6
6
  "main": "lib/cjs/index.js",
7
7
  "module": "lib/esm/index.js",