UNPKG

firestore-queue

Version:

A powerful, scalable queue system built on Google Firestore with time-based indexing, auto-configuration, and connection reuse

110 lines โ€ข 4.71 kB
#!/usr/bin/env ts-node "use strict"; /** * Connection Reuse Example * Shows how to share Firestore connections and reuse configurations */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.connectionReuseExample = connectionReuseExample; const admin = __importStar(require("firebase-admin")); const index_1 = require("../index"); async function connectionReuseExample() { console.log('๐Ÿ”— Fire Queue - Connection Reuse Benefits'); console.log('==========================================\n'); // Scenario 1: You already have Firebase Admin initialized console.log('๐Ÿ“‹ Scenario 1: Existing Firebase Admin App'); console.log('------------------------------------------'); // Your existing Firebase setup if (admin.apps.length === 0) { admin.initializeApp({ credential: admin.credential.cert('./firebase-service-account.json'), projectId: 'your-project-id', }); } // Create a dedicated Firestore instance for your queues const queueFirestore = new admin.firestore.Firestore({ projectId: 'your-project-id', databaseId: 'firequeue', }); // Use it directly with Fire Queue (no additional connection overhead) const queue1 = await (0, index_1.createReadyQueue)({ projectId: 'your-project-id', firestoreInstance: queueFirestore, topic: 'user_events', }); const queue2 = await (0, index_1.createReadyQueue)({ projectId: 'your-project-id', firestoreInstance: queueFirestore, // Same connection! topic: 'notifications', }); console.log('โœ… Two queues sharing one Firestore connection\n'); // Scenario 2: Using manager for multiple queues console.log('๐Ÿ“‹ Scenario 2: FireQueueManager Pattern'); console.log('--------------------------------------'); const manager = await (0, index_1.setupFireQueue)({ projectId: 'your-project-id', serviceAccountPath: './firebase-service-account.json', }); // Create queues as needed - all share the same configuration const emailQueue = await manager.createQueue('emails'); const analyticsQueue = await manager.createQueue('analytics'); const backupQueue = await manager.createQueue('backups'); console.log(`โœ… Manager created ${manager.listQueues().length} queues`); console.log(`๐Ÿ“Š Active queues: ${manager.listQueues().join(', ')}\n`); // Benefits demonstration console.log('๐Ÿ’ก Key Benefits'); console.log('---------------'); console.log('โ€ข Reduced connection overhead'); console.log('โ€ข Reusable configuration'); console.log('โ€ข Centralized management'); console.log('โ€ข Standard initialization pattern'); console.log('โ€ข Easy testing with mocked instances\n'); // Test operations console.log('๐Ÿงช Quick Test'); console.log('--------------'); await emailQueue.enqueue('welcome', { userId: 'test' }); await analyticsQueue.enqueue('page_view', { page: '/home' }); console.log('๐Ÿ“ Messages queued successfully'); // Cleanup await queue1.shutdown(); await queue2.shutdown(); await manager.shutdown(); console.log('โœ… All connections closed'); } if (require.main === module) { connectionReuseExample().catch(console.error); } //# sourceMappingURL=connection-reuse-example.js.map