as-app/src/env.js
2025-07-02 00:54:30 +02:00

138 lines
3.8 KiB
JavaScript

import { Platform } from "react-native";
import { secureStore } from "~/storage/memorySecureStore";
import { STORAGE_KEYS } from "~/storage/storageKeys";
// Logging configuration
const LOG_SCOPES = process.env.APP_LOG_SCOPES;
const LOG_MIN_LEVEL = process.env.APP_LOG_MIN_LEVEL;
const LOCAL_DEV = process.env.LOCAL_DEV !== "false" ? true : false;
const BEARER_COOKIE_NAME = "bearer";
const BEARER_USE_COOKIE = false;
// Helper function to get the correct development host based on platform
const getDevelopmentHost = () => {
if (Platform.OS === "ios") {
return "localhost";
}
// Android uses 10.0.2.2 to access host machine's localhost
return "10.0.2.2";
};
const DEV_HOST = getDevelopmentHost();
const OA_FILES_URL =
process.env.APP_OA_FILES_URL || `http://${DEV_HOST}:4292/api/v1/oas`;
const MINIO_URL = process.env.APP_MINIO_URL || `http://${DEV_HOST}:4290`;
const GRAPHQL_URL =
process.env.APP_GRAPHQL_URL || `http://${DEV_HOST}:4201/v1/graphql`;
const GRAPHQL_WS_URL =
process.env.APP_GRAPHQL_WS_URL || `ws://${DEV_HOST}:4201/v1/graphql`;
const GEOLOC_SYNC_URL =
process.env.APP_GEOLOC_SYNC_URL ||
`http://${DEV_HOST}:4200/api/v1/oas/geoloc/sync`;
const OSRM_CAR_URL = process.env.APP_OSRM_CAR_URL || `http://${DEV_HOST}:4261`;
const OSRM_FOOT_URL =
process.env.APP_OSRM_FOOT_URL || `http://${DEV_HOST}:4262`;
const OSRM_BICYCLE_URL =
process.env.APP_OSRM_BICYCLE_URL || `http://${DEV_HOST}:4263`;
const CLAIMS_NAMESPACE =
process.env.CLAIMS_NAMESPACE || "https://alertesecours.fr/claims";
const MAPVIEW_STYLE_URL =
process.env.APP_MAPVIEW_STYLE_URL || `http://${DEV_HOST}:4203/app/style.json`;
const MAPVIEW_DARK_STYLE_URL =
process.env.APP_MAPVIEW_DARK_STYLE_URL ||
`http://${DEV_HOST}:4203/app/dark-matter/style.json`;
const SENTRY_DSN = process.env.SENTRY_DSN;
const BUILD_TIME = process.env.BUILD_TIME;
const envMap = {
LOG_SCOPES,
LOG_MIN_LEVEL,
LOCAL_DEV,
BEARER_COOKIE_NAME,
BEARER_USE_COOKIE,
OA_FILES_URL,
MINIO_URL,
GRAPHQL_URL,
GRAPHQL_WS_URL,
GEOLOC_SYNC_URL,
OSRM_CAR_URL,
OSRM_FOOT_URL,
OSRM_BICYCLE_URL,
CLAIMS_NAMESPACE,
MAPVIEW_STYLE_URL,
MAPVIEW_DARK_STYLE_URL,
SENTRY_DSN,
BUILD_TIME,
IS_STAGING: false,
};
const stagingMap = {
MINIO_URL: process.env.STAGING_APP_MINIO_URL || MINIO_URL,
OA_FILES_URL: process.env.STAGING_APP_OA_FILES_URL || OA_FILES_URL,
GRAPHQL_URL: process.env.STAGING_APP_GRAPHQL_URL || GRAPHQL_URL,
GRAPHQL_WS_URL: process.env.STAGING_APP_GRAPHQL_WS_URL || GRAPHQL_WS_URL,
GEOLOC_SYNC_URL: process.env.STAGING_APP_GEOLOC_SYNC_URL || GEOLOC_SYNC_URL,
IS_STAGING: true,
};
export const setStaging = async (enabled) => {
for (const key of Object.keys(env)) {
if (stagingMap[key] !== undefined) {
env[key] = enabled ? stagingMap[key] : envMap[key];
}
}
// Persist the staging setting
await secureStore.setItemAsync(STORAGE_KEYS.ENV_IS_STAGING, String(enabled));
};
// Initialize with default values
const env = { ...envMap };
// Load the staging setting from secureStore
export const initializeEnv = async () => {
try {
const storedStaging = await secureStore.getItemAsync(
STORAGE_KEYS.ENV_IS_STAGING,
);
if (storedStaging !== null) {
const isStaging = storedStaging === "true";
if (isStaging) {
// Apply staging settings without persisting again
for (const key of Object.keys(env)) {
if (stagingMap[key] !== undefined) {
env[key] = stagingMap[key];
}
}
}
}
} catch (error) {
console.error("Failed to load staging setting from secureStore:", error);
}
};
// Initialize environment settings
// We use an IIFE to handle the async initialization
(async () => {
try {
await initializeEnv();
} catch (error) {
console.error("Failed to initialize environment settings:", error);
}
})();
export default env;
// +1