UNPKG

notification-kit

Version:

A unified notification library for React + Capacitor apps. One API for push notifications, in-app notifications, and local notifications across Web, iOS, and Android.

159 lines (158 loc) 5.68 kB
import { L as Logger } from "./inApp-ClGwbWFU.js"; function isFirebaseAppConfig(config) { return "app" in config; } function isOneSignalInstanceConfig(config) { return "instance" in config; } const types = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, isFirebaseAppConfig, isOneSignalInstanceConfig }, Symbol.toStringTag, { value: "Module" })); class ConfigValidator { /** * Validate Firebase configuration */ static validateFirebaseConfig(config) { if (isFirebaseAppConfig(config)) { return; } const requiredFields = [ "apiKey", "authDomain", "projectId", "storageBucket", "messagingSenderId", "appId" ]; const missingFields = requiredFields.filter((field) => !(field in config)); if (missingFields.length > 0) { throw new Error( `Missing required Firebase configuration fields: ${missingFields.join(", ")}. Make sure all required environment variables are set.` ); } this.performSecurityChecks(config); } /** * Validate OneSignal configuration */ static validateOneSignalConfig(config) { if (isOneSignalInstanceConfig(config)) { return; } if (!config.appId) { throw new Error( "Missing required OneSignal appId. Make sure ONESIGNAL_APP_ID environment variable is set." ); } if ("restApiKey" in config && config.restApiKey && config.restApiKey.length < 48) { Logger.warn( "OneSignal REST API key appears to be invalid. Server-side operations may fail." ); } this.performSecurityChecks(config); } /** * Perform security checks on configuration */ static performSecurityChecks(config) { const suspiciousPatterns = [ { field: "apiKey", pattern: /^AIzaSy/, provider: "Firebase" }, { field: "appId", pattern: /^[0-9a-f]{8}-[0-9a-f]{4}-/, provider: "OneSignal" } ]; for (const { field, pattern, provider } of suspiciousPatterns) { if (config[field] && typeof config[field] === "string") { const value = config[field]; if (pattern.test(value)) { const isFromEnv = this.isFromEnvironmentVariable(value); if (!isFromEnv && process.env.NODE_ENV === "production") { Logger.warn( `Potential hardcoded ${provider} ${field} detected. Consider using environment variables for better security.` ); } } } } if (process.env.NODE_ENV === "production") { const localhostFields = ["authDomain", "databaseURL"]; for (const field of localhostFields) { if (config[field] && config[field].includes("localhost")) { Logger.warn( `Configuration field '${field}' contains 'localhost' in production. This may cause issues.` ); } } } } /** * Check if a value likely comes from an environment variable */ static isFromEnvironmentVariable(value) { if (typeof process !== "undefined" && process.env) { const commonEnvVars = [ "FIREBASE_API_KEY", "NEXT_PUBLIC_FIREBASE_API_KEY", "REACT_APP_FIREBASE_API_KEY", "VITE_FIREBASE_API_KEY", "VUE_APP_FIREBASE_API_KEY", "ONESIGNAL_APP_ID", "NEXT_PUBLIC_ONESIGNAL_APP_ID", "REACT_APP_ONESIGNAL_APP_ID", "VITE_ONESIGNAL_APP_ID", "VUE_APP_ONESIGNAL_APP_ID" ]; return commonEnvVars.some((envVar) => process.env[envVar] === value); } return false; } /** * Validate environment variables are set */ static validateEnvironmentVariables(provider) { if (typeof process === "undefined" || !process.env) { return; } const requiredEnvVars = provider === "firebase" ? this.getRequiredFirebaseEnvVars() : this.getRequiredOneSignalEnvVars(); const missingEnvVars = []; for (const envVars of requiredEnvVars) { const hasAny = envVars.some((envVar) => !!process.env[envVar]); if (!hasAny) { missingEnvVars.push(envVars.join(" or ")); } } if (missingEnvVars.length > 0) { Logger.warn( `Missing environment variables for ${provider}: ${missingEnvVars.join(", ")}. Make sure to set these in your .env file or deployment environment.` ); } } /** * Get required Firebase environment variables (with common prefixes) */ static getRequiredFirebaseEnvVars() { return [ ["FIREBASE_API_KEY", "NEXT_PUBLIC_FIREBASE_API_KEY", "REACT_APP_FIREBASE_API_KEY", "VITE_FIREBASE_API_KEY"], ["FIREBASE_AUTH_DOMAIN", "NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN", "REACT_APP_FIREBASE_AUTH_DOMAIN", "VITE_FIREBASE_AUTH_DOMAIN"], ["FIREBASE_PROJECT_ID", "NEXT_PUBLIC_FIREBASE_PROJECT_ID", "REACT_APP_FIREBASE_PROJECT_ID", "VITE_FIREBASE_PROJECT_ID"], ["FIREBASE_STORAGE_BUCKET", "NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET", "REACT_APP_FIREBASE_STORAGE_BUCKET", "VITE_FIREBASE_STORAGE_BUCKET"], ["FIREBASE_MESSAGING_SENDER_ID", "NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID", "REACT_APP_FIREBASE_MESSAGING_SENDER_ID", "VITE_FIREBASE_MESSAGING_SENDER_ID"], ["FIREBASE_APP_ID", "NEXT_PUBLIC_FIREBASE_APP_ID", "REACT_APP_FIREBASE_APP_ID", "VITE_FIREBASE_APP_ID"] ]; } /** * Get required OneSignal environment variables (with common prefixes) */ static getRequiredOneSignalEnvVars() { return [ ["ONESIGNAL_APP_ID", "NEXT_PUBLIC_ONESIGNAL_APP_ID", "REACT_APP_ONESIGNAL_APP_ID", "VITE_ONESIGNAL_APP_ID"] ]; } } export { ConfigValidator as C, isOneSignalInstanceConfig as a, isFirebaseAppConfig as i, types as t }; //# sourceMappingURL=config-validator-CiAZwcZR.js.map