mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
db158c242c
The portfolio URL added in #15407 was meant to be configurable via environment variable or the `.metamaskrc` file, but that configuration was broken. Instead the default value was always used. That configuration has been fixed. The portfolio URL can be set either by environment variable or configuration file.
103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
const path = require('path');
|
|
const { readFile } = require('fs/promises');
|
|
const ini = require('ini');
|
|
const { BuildType } = require('../lib/build-type');
|
|
|
|
/**
|
|
* Get configuration for non-production builds.
|
|
*
|
|
* @returns {object} The production configuration.
|
|
*/
|
|
async function getConfig() {
|
|
const configPath = path.resolve(__dirname, '..', '..', '.metamaskrc');
|
|
let configContents = '';
|
|
try {
|
|
configContents = await readFile(configPath, {
|
|
encoding: 'utf8',
|
|
});
|
|
} catch (error) {
|
|
if (error.code !== 'ENOENT') {
|
|
throw error;
|
|
}
|
|
}
|
|
return {
|
|
COLLECTIBLES_V1: process.env.COLLECTIBLES_V1,
|
|
INFURA_PROJECT_ID: process.env.INFURA_PROJECT_ID,
|
|
ONBOARDING_V2: process.env.ONBOARDING_V2,
|
|
PHISHING_WARNING_PAGE_URL: process.env.PHISHING_WARNING_PAGE_URL,
|
|
PORTFOLIO_URL: process.env.PORTFOLIO_URL,
|
|
PUBNUB_PUB_KEY: process.env.PUBNUB_PUB_KEY,
|
|
PUBNUB_SUB_KEY: process.env.PUBNUB_SUB_KEY,
|
|
SEGMENT_HOST: process.env.SEGMENT_HOST,
|
|
SEGMENT_WRITE_KEY: process.env.SEGMENT_WRITE_KEY,
|
|
SENTRY_DSN_DEV:
|
|
process.env.SENTRY_DSN_DEV ??
|
|
'https://f59f3dd640d2429d9d0e2445a87ea8e1@sentry.io/273496',
|
|
SIWE_V1: process.env.SIWE_V1,
|
|
SWAPS_USE_DEV_APIS: process.env.SWAPS_USE_DEV_APIS,
|
|
...ini.parse(configContents),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get configuration for production builds and perform validation.
|
|
*
|
|
* This function validates that all required variables are present, and that
|
|
* the production configuration file doesn't include any extraneous entries.
|
|
*
|
|
* @param {BuildType} buildType - The current build type (e.g. "main", "flask",
|
|
* etc.).
|
|
* @returns {object} The production configuration.
|
|
*/
|
|
async function getProductionConfig(buildType) {
|
|
const prodConfigPath = path.resolve(__dirname, '..', '..', '.metamaskprodrc');
|
|
let prodConfigContents = '';
|
|
try {
|
|
prodConfigContents = await readFile(prodConfigPath, {
|
|
encoding: 'utf8',
|
|
});
|
|
} catch (error) {
|
|
if (error.code !== 'ENOENT') {
|
|
throw error;
|
|
}
|
|
}
|
|
const prodConfig = {
|
|
INFURA_BETA_PROJECT_ID: process.env.INFURA_BETA_PROJECT_ID,
|
|
INFURA_FLASK_PROJECT_ID: process.env.INFURA_FLASK_PROJECT_ID,
|
|
INFURA_PROD_PROJECT_ID: process.env.INFURA_PROD_PROJECT_ID,
|
|
PUBNUB_PUB_KEY: process.env.PUBNUB_PUB_KEY,
|
|
PUBNUB_SUB_KEY: process.env.PUBNUB_SUB_KEY,
|
|
SEGMENT_BETA_WRITE_KEY: process.env.SEGMENT_BETA_WRITE_KEY,
|
|
SEGMENT_FLASK_WRITE_KEY: process.env.SEGMENT_FLASK_WRITE_KEY,
|
|
SEGMENT_PROD_WRITE_KEY: process.env.SEGMENT_PROD_WRITE_KEY,
|
|
SENTRY_DSN: process.env.SENTRY_DSN,
|
|
...ini.parse(prodConfigContents),
|
|
};
|
|
|
|
const requiredEnvironmentVariables = {
|
|
all: ['PUBNUB_PUB_KEY', 'PUBNUB_SUB_KEY', 'SENTRY_DSN'],
|
|
[BuildType.beta]: ['INFURA_BETA_PROJECT_ID', 'SEGMENT_BETA_WRITE_KEY'],
|
|
[BuildType.flask]: ['INFURA_FLASK_PROJECT_ID', 'SEGMENT_FLASK_WRITE_KEY'],
|
|
[BuildType.main]: ['INFURA_PROD_PROJECT_ID', 'SEGMENT_PROD_WRITE_KEY'],
|
|
};
|
|
|
|
for (const required of [
|
|
...requiredEnvironmentVariables.all,
|
|
...requiredEnvironmentVariables[buildType],
|
|
]) {
|
|
if (!prodConfig[required]) {
|
|
throw new Error(`Missing '${required}' environment variable`);
|
|
}
|
|
}
|
|
|
|
const allValid = Object.values(requiredEnvironmentVariables).flat();
|
|
for (const environmentVariable of Object.keys(prodConfig)) {
|
|
if (!allValid.includes(environmentVariable)) {
|
|
throw new Error(`Invalid environment variable: '${environmentVariable}'`);
|
|
}
|
|
}
|
|
return prodConfig;
|
|
}
|
|
|
|
module.exports = { getConfig, getProductionConfig };
|