A TypeScript Firebase service wrapper that provides a simplified interface for Firebase Authentication, Firestore, and Cloud Functions.
- 🔥 Firebase Authentication: Custom token sign-in, user management
- 📦 Firestore: Document operations with intelligent path handling
- ⚡ Cloud Functions: Call Firebase Functions with ease
- 🎯 TypeScript: Full type safety and IntelliSense support
- 🔧 Flexible: Works with any Firebase project configuration
npm install @crewdle/firebase-serviceNote: Firebase is a peer dependency, so you need to install it separately:
npm install firebase1. Install the package:
npm install @crewdle/firebase-service firebase2. Configure in your app module:
import { NgModule } from '@angular/core';
import { FirebaseServiceModule } from '@crewdle/firebase-service';
import { environment } from '../environments/environment';
@NgModule({
imports: [
FirebaseServiceModule.forRoot({
firebaseConfig: environment.firebaseConfig,
functionsRegion: 'us-central1' // optional
})
]
})
export class AppModule { }Alternative: Using providers directly (for standalone apps):
import { bootstrapApplication } from '@angular/platform-browser';
import { FirebaseService, FIREBASE_SERVICE_CONFIG } from '@crewdle/firebase-service';
import { environment } from './environments/environment';
bootstrapApplication(AppComponent, {
providers: [
{
provide: FIREBASE_SERVICE_CONFIG,
useValue: {
firebaseConfig: environment.firebaseConfig,
functionsRegion: 'us-central1'
}
},
FirebaseService
]
});3. Inject and use in your components/services:
import { Component, inject } from '@angular/core';
import { FirebaseService } from '@crewdle/firebase-service';
@Component({
selector: 'app-example',
template: '...'
})
export class ExampleComponent {
private readonly firebaseService = inject(FirebaseService);
async loadData() {
const doc = await this.firebaseService.getDocument('users/123');
console.log(doc.data);
}
}import { FirebaseService } from '@crewdle/firebase-service';
const firebaseService = FirebaseService.create({
firebaseConfig: {
apiKey: "your-api-key",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project-id",
// ... other config
},
functionsRegion: "us-central1" // optional, defaults to us-central1
});// Sign in with custom token
const user = await firebaseService.signInWithCustomToken(customToken);
// Get current user
const currentUser = firebaseService.getCurrentUser();
// Sign out
await firebaseService.signOut();// Add document with auto-generated ID
const result = await firebaseService.addDocument('users', {
name: 'John Doe',
email: '[email protected]'
});
console.log('Document ID:', result.id);
// Add document with specific ID
await firebaseService.addDocument('users/user123', {
name: 'Jane Doe',
email: '[email protected]'
});
// Get document
const doc = await firebaseService.getDocument('users/user123');
if (doc.exists) {
console.log('User data:', doc.data);
}// Call a function
const result = await firebaseService.callFunction('myFunction', {
param1: 'value1',
param2: 'value2'
});
// Call a function with streaming response
const stream = firebaseService.callFunctionStream('streamingFunction', data);// Get underlying Firebase instances if needed
const app = firebaseService.getApp();
const auth = firebaseService.getAuth();
const firestore = firebaseService.getFirestore();
const functions = firebaseService.getFunctions();const firebaseService = new FirebaseService({
firebaseConfig: {
// Your Firebase config
},
functionsRegion: "europe-west1" // Use European region
});try {
const doc = await firebaseService.getDocument('nonexistent/doc');
} catch (error) {
console.error('Failed to get document:', error);
}The package includes full TypeScript definitions:
import {
FirebaseService,
FirebaseServiceConfig,
FirestoreDocument,
DocumentResult
} from '@crewdle/firebase-service';MIT © Crewdle