87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
// env-loader.js
|
|
// This module is responsible for loading environment variables for the PWA
|
|
|
|
// Store environment variables in a global object
|
|
window.ENV_CONFIG = {
|
|
// Default values that will be overridden when config.env.js loads
|
|
PUBLIC_VAPID_KEY: 'your_public_vapid_key_here',
|
|
BACKEND_URL: 'https://your-push-server.example.com'
|
|
};
|
|
|
|
// Function to load environment variables from config.env.js
|
|
async function loadEnvVariables() {
|
|
try {
|
|
// Try to fetch the config.env.js file which will be generated at build time or deployment
|
|
const response = await fetch('/config.env.js');
|
|
|
|
if (!response.ok) {
|
|
console.warn('Could not load config.env.js file. Using default values.');
|
|
return;
|
|
}
|
|
|
|
const configText = await response.text();
|
|
|
|
// Extract the configuration object from the JavaScript file
|
|
// The file should be in format: window.ENV_CONFIG = { key: "value" };
|
|
try {
|
|
// Create a safe way to evaluate the config file
|
|
const configScript = document.createElement('script');
|
|
configScript.textContent = configText;
|
|
document.head.appendChild(configScript);
|
|
document.head.removeChild(configScript);
|
|
|
|
console.log('Environment variables loaded successfully from config.env.js');
|
|
|
|
// Dispatch an event to notify that environment variables have been loaded
|
|
window.dispatchEvent(new CustomEvent('env-config-loaded', {
|
|
detail: { config: window.ENV_CONFIG }
|
|
}));
|
|
} catch (parseError) {
|
|
console.error('Error parsing config.env.js:', parseError);
|
|
}
|
|
} catch (error) {
|
|
console.error('Error loading environment variables:', error);
|
|
}
|
|
}
|
|
|
|
// Export function to initialize environment variables
|
|
export async function initEnv() {
|
|
await loadEnvVariables();
|
|
return window.ENV_CONFIG;
|
|
}
|
|
|
|
// Start loading environment variables immediately
|
|
initEnv();
|
|
|
|
// Export access functions for environment variables
|
|
export function getEnv(key, defaultValue = '') {
|
|
return window.ENV_CONFIG[key] || defaultValue;
|
|
}
|
|
|
|
// Export a function to wait for environment variables to be loaded
|
|
export function waitForEnv() {
|
|
return new Promise((resolve) => {
|
|
// If we already have non-default values, resolve immediately
|
|
if (window.ENV_CONFIG.BACKEND_URL !== 'https://your-push-server.example.com') {
|
|
resolve(window.ENV_CONFIG);
|
|
return;
|
|
}
|
|
|
|
// Otherwise, wait for the env-config-loaded event
|
|
window.addEventListener('env-config-loaded', (event) => {
|
|
resolve(event.detail.config);
|
|
}, { once: true });
|
|
|
|
// Set a timeout to resolve with current values if loading takes too long
|
|
setTimeout(() => {
|
|
console.warn('Environment loading timed out, using current values');
|
|
resolve(window.ENV_CONFIG);
|
|
}, 3000);
|
|
});
|
|
}
|
|
|
|
export default {
|
|
initEnv,
|
|
getEnv,
|
|
waitForEnv
|
|
}; |