UNPKG

tiny-essentials

Version:

Collection of small, essential scripts designed to be used across various projects. These simple utilities are crafted for speed, ease of use, and versatility.

265 lines (225 loc) 7.13 kB
'use strict'; var path = require('path'); var fs = require('fs'); var cookieSession = require('./cookieSession.cjs'); var domainRedirect = require('./domainRedirect.cjs'); var index = require('./database/index.cjs'); var escape = require('./escape.cjs'); var mySQL = require('./mySQL.cjs'); var getDBAsync = require('./getDBAsync.cjs'); var getDBValue = require('./getDBValue.cjs'); var getDBData = require('./getDBData.cjs'); var transactionDBAsync = require('./transactionDBAsync.cjs'); var databaseEscape = require('./databaseEscape.cjs'); var isEmulator = require('./isEmulator.cjs'); // @ts-nocheck /** * Firebase Object to handle various Firebase services and utilities. * Includes database, authentication, Firestore, storage, and more. * * @namespace firebaseObject */ const firebaseObject = { apps: {} }; /** * Retrieves a Firebase app by its identifier. * * @param {string|number} value - The app identifier to retrieve. * @returns {Object|null} The Firebase app or `null` if not found. */ firebaseObject.get = function (value) { // Check if ((typeof value === 'string' || typeof value === 'number') && firebaseObject.apps[value]) { // Send Item return firebaseObject.apps[value]; } // Nope else return null; }; /** * Manages cookie session for authentication. * * @type {AuthSystem} */ firebaseObject.cookieSession = cookieSession; /** * Manages domain redirection. * * @type {domainRedirect} */ firebaseObject.domainRedirect = domainRedirect; /** * Handles Firebase Database interactions. * * @type {database} */ firebaseObject.database = index; /** * Handles database escaping for safe queries. * * @type {Record<string, any>} */ firebaseObject.escape = escape; /** * Manages MySQL database interactions. * * @type {mySQL} */ firebaseObject.mysql = mySQL; /** * Retrieves the database asynchronously. * * @type {getDBAsync} */ firebaseObject.getDBAsync = getDBAsync; /** * Retrieves a specific database value. * * @type {getDBValue} */ firebaseObject.getDBValue = getDBValue; /** * Retrieves database data asynchronously. * * @type {getDBData} */ firebaseObject.getDBData = getDBData; /** * Handles asynchronous database transactions. * * @type {transactionDBAsync} */ firebaseObject.transactionDBAsync = transactionDBAsync; /** * Provides database escape functionality for safe querying. * * @type {databaseEscape} */ firebaseObject.databaseEscape = databaseEscape; /** * Logger to log information using Firebase or console. * * @type {Record<string, any>} */ firebaseObject.logger = logger; /** * Checks if the Firebase environment is running in emulator mode. * * @type {isEmulator} */ firebaseObject.isEmulator = isEmulator; /** * Starts Firebase modules based on the provided configuration. * Initializes services such as Database, Auth, Firestore, etc. * * @param {string} value - The Firebase app ID. * @param {Record<string, any>} item - Configuration for the Firebase app and services to initialize. * @returns {boolean} `true` if the modules were successfully started, `false` otherwise. */ firebaseObject.startModule = function (value, item) { // Check if ((typeof value === 'string' || typeof value === 'number') && firebaseObject.apps[value]) { // Confirm Action let action_confirmed = false; // Database if (item.database) { firebaseObject.apps[value].db = firebaseObject.apps[value].root.database(); action_confirmed = true; } // Auth if (item.auth) { firebaseObject.apps[value].auth = firebaseObject.apps[value].root.auth(); action_confirmed = true; } // Firestore if (item.firestore) { firebaseObject.apps[value].store = firebaseObject.apps[value].root.firestore(); action_confirmed = true; } // Storage if (item.storage) { firebaseObject.apps[value].storage = firebaseObject.apps[value].root.storage(); action_confirmed = true; } // Cloud Messaging if (item.messaging) { firebaseObject.apps[value].messaging = firebaseObject.apps[value].root.messaging(); action_confirmed = true; } // Send positive result return action_confirmed; } // Nope else return false; }; /** * Starts the Firebase app and initializes required services. * * @param {Record<string, any>} admin - The Firebase Admin SDK. * @param {Record<string, any>} item - Configuration containing app details and options. * @param {Record<string, any>} data - Additional data to initialize the app. * @throws {Error} Throws an error if the Firebase file is not found or if the app ID is missing. */ firebaseObject.start = function (admin, item, data) { // Try try { // Start Firebase const start_firebase = function (json_file = null) { // Check Exist if (!firebaseObject.apps[item.id]) { // Firebase Settings const firebase_settings = {}; // Exist File if (json_file) firebase_settings.credential = admin.credential.cert(json_file); // Read Data if (data) { for (const data_item in data) firebase_settings[data_item] = data[data_item]; } // Fix Database URL if (typeof firebase_settings.databaseURL === 'string') { if ( !firebase_settings.databaseURL.startsWith('https://') && !firebase_settings.databaseURL.endsWith('.firebaseio.com') ) firebase_settings.databaseURL = `https://${firebase_settings.databaseURL}.firebaseio.com`; } // Fix Storage URL if (typeof firebase_settings.storageBucket === 'string') if (!firebase_settings.storageBucket.endsWith('.appspot.com')) firebase_settings.storageBucket = `${firebase_settings.storageBucket}.appspot.com`; // Prepare Base firebaseObject.apps[item.id] = {}; // Initialize App firebaseObject.apps[item.id].root = admin.initializeApp(firebase_settings, item.id); // Auto Start if (item.autoStart) firebaseObject.startModule(item.id, item.autoStart); } }; // Exist ID if (item && typeof item.id === 'string' && item.id !== 'start') { // Check Variables if (typeof item.appID === 'string') { // Key File let keyFile = null; if (item.keysFolder) keyFile = path.join(item.keysFolder, item.appID + '.json'); // Exist File if (keyFile && fs.existsSync(keyFile) && fs.lstatSync(keyFile).isFile()) { try { const jsonData = fs.readFileSync(keyFile, 'utf8'); const parsedKey = JSON.parse(jsonData); start_firebase(parsedKey); } catch (err) { console.error(new Error('Failed to parse Firebase JSON file: ' + err.message)); } } else console.error(new Error('Firebase File Not Found.')); } // Nope else start_firebase(); } // Nope else console.error(new Error('You need to insert a ID value!')); } catch (err) { // Get Error console.error(err); } }; module.exports = firebaseObject;