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.

236 lines (235 loc) 7.85 kB
// @ts-nocheck import { join } from 'path'; import { existsSync, lstatSync, readFileSync } from 'fs'; import AuthSystem from './cookieSession.mjs'; import domainRedirect from './domainRedirect.mjs'; import database from './database/index.mjs'; import * as dbEscape from './escape.mjs'; import mySQL from './mySQL.mjs'; import getDBAsync from './getDBAsync.mjs'; import getDBValue from './getDBValue.mjs'; import getDBData from './getDBData.mjs'; import transactionDBAsync from './transactionDBAsync.mjs'; import databaseEscape from './databaseEscape.mjs'; import isEmulator from './isEmulator.mjs'; /** * 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 = AuthSystem; /** * Manages domain redirection. * * @type {domainRedirect} */ firebaseObject.domainRedirect = domainRedirect; /** * Handles Firebase Database interactions. * * @type {database} */ firebaseObject.database = database; /** * Handles database escaping for safe queries. * * @type {Record<string, any>} */ firebaseObject.escape = dbEscape; /** * 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 = join(item.keysFolder, item.appID + '.json'); // Exist File if (keyFile && existsSync(keyFile) && lstatSync(keyFile).isFile()) { try { const jsonData = 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); } }; // Send Module export default firebaseObject;