Add example nested network config

This commit is contained in:
Felipe Knorr Kuhn 2024-06-28 00:48:57 -07:00
parent 98e9d1a6c3
commit ad6b146aa0
No known key found for this signature in database
GPG Key ID: 79619B52BB097C1A
5 changed files with 110 additions and 0 deletions

View File

@ -1,4 +1,14 @@
{
"NETWORKS": {
"TESTNET": {
"ENABLED": true,
"WEIGHT": "__NETWORKS_TESTNET_WEIGHT__"
},
"MAINNET": {
"ENABLED": true,
"WEIGHT": "__NETWORKS_MAINNET_WEIGHT__"
}
},
"MEMPOOL": {
"ENABLED": true,
"OFFICIAL": false,

View File

@ -157,6 +157,17 @@ describe('Mempool Backend Config', () => {
PAID: false,
API_KEY: '',
});
expect(config.NETWORKS).toStrictEqual({
MAINNET: {
ENABLED: true,
WEIGHT: 'foo'
},
TESTNET: {
ENABLED: false,
WEIGHT: 'bar'
}
})
});
});
@ -190,6 +201,8 @@ describe('Mempool Backend Config', () => {
expect(config.MEMPOOL_SERVICES).toStrictEqual(fixture.MEMPOOL_SERVICES);
expect(config.REDIS).toStrictEqual(fixture.REDIS);
expect(config.NETWORKS).toStrictEqual(fixture.NETWORKS);
});
});
@ -197,6 +210,22 @@ describe('Mempool Backend Config', () => {
jest.isolateModules(() => {
const startSh = fs.readFileSync(`${__dirname}/../../../docker/backend/start.sh`, 'utf-8');
const fixture = JSON.parse(fs.readFileSync(`${__dirname}/../__fixtures__/mempool-config.template.json`, 'utf8'));
function generateKeys(obj, prefix = '') {
let keys: string[] = [];
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const newPrefix = prefix ? `${prefix}_${key}` : key;
if (typeof obj[key] === 'object' && obj[key] !== null) {
keys = keys.concat(generateKeys(obj[key], newPrefix));
} else {
keys.push(`${newPrefix}`);
}
}
}
return keys;
}
function parseJson(jsonObj, root?) {
for (const [key, value] of Object.entries(jsonObj)) {
@ -208,6 +237,31 @@ describe('Mempool Backend Config', () => {
continue;
}
if (root === 'NETWORKS') {
const keys = generateKeys(value);
keys.forEach(item => {
const replaceStr = `__${root}_${key}_${item}__`;
const envVarStr = `${root}_${key}_${item}`;
let defaultEntry = replaceStr + '=' + '\\${' + envVarStr + ':=(.*)' + '}';
if (process.env.CI) {
console.log(`looking for ${defaultEntry} in the start.sh script`);
}
const re = new RegExp(defaultEntry);
expect(startSh).toMatch(re);
const sedStr = 'sed -i "s!' + replaceStr + '!${' + replaceStr + '}!g" mempool-config.json';
if (process.env.CI) {
console.log(`looking for ${sedStr} in the start.sh script`);
}
expect(startSh).toContain(sedStr);
});
continue;
}
if (root) {
//The flattened string, i.e, __MEMPOOL_ENABLED__
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
@ -264,6 +318,8 @@ describe('Mempool Backend Config', () => {
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
expect(dockerJson).toContain(`"${key}": ${replaceStr}`);
break;
} else if (typeof value === 'object') {
break;
} else {
//Check for top level config keys
expect(dockerJson).toContain(`"${key}"`);

View File

@ -160,6 +160,16 @@ interface IConfig {
PAID: boolean;
API_KEY: string;
},
NETWORKS: {
MAINNET: {
ENABLED: boolean;
WEIGHT: 'foo';
},
TESTNET: {
ENABLED: boolean;
WEIGHT: 'bar'
}
};
}
const defaults: IConfig = {
@ -320,6 +330,16 @@ const defaults: IConfig = {
'PAID': false,
'API_KEY': '',
},
'NETWORKS': {
'MAINNET': {
'ENABLED': true,
'WEIGHT': 'foo',
},
'TESTNET': {
'ENABLED': false,
'WEIGHT': 'bar'
}
}
};
class Config implements IConfig {
@ -341,6 +361,7 @@ class Config implements IConfig {
MEMPOOL_SERVICES: IConfig['MEMPOOL_SERVICES'];
REDIS: IConfig['REDIS'];
FIAT_PRICE: IConfig['FIAT_PRICE'];
NETWORKS: IConfig['NETWORKS'];
constructor() {
const configs = this.merge(configFromFile, defaults);
@ -362,6 +383,7 @@ class Config implements IConfig {
this.MEMPOOL_SERVICES = configs.MEMPOOL_SERVICES;
this.REDIS = configs.REDIS;
this.FIAT_PRICE = configs.FIAT_PRICE;
this.NETWORKS = configs.NETWORKS;
}
merge = (...objects: object[]): IConfig => {

View File

@ -155,5 +155,15 @@
"ENABLED": __FIAT_PRICE_ENABLED__,
"PAID": __FIAT_PRICE_PAID__,
"API_KEY": "__FIAT_PRICE_API_KEY__"
},
"NETWORKS": {
"MAINNET": {
"ENABLED": __NETWORKS_MAINNET_ENABLED__,
"WEIGHT": "__NETWORKS_MAINNET_WEIGHT__,"
},
"TESTNET": {
"ENABLED": __NETWORKS_TESTNET_ENABLED__,
"WEIGHT": "__NETWORKS_TESTNET_WEIGHT__"
}
}
}

View File

@ -157,6 +157,12 @@ __FIAT_PRICE_ENABLED__=${FIAT_PRICE_ENABLED:=true}
__FIAT_PRICE_PAID__=${FIAT_PRICE_PAID:=false}
__FIAT_PRICE_API_KEY__=${FIAT_PRICE_API_KEY:=""}
# NETWORKS
__NETWORKS_TESTNET_ENABLED__=${NETWORKS_TESTNET_ENABLED:=true}
__NETWORKS_TESTNET_WEIGHT__=${NETWORKS_TESTNET_WEIGHT:="0.1"}
__NETWORKS_MAINNET_ENABLED__=${NETWORKS_MAINNET_ENABLED:=true}
__NETWORKS_MAINNET_WEIGHT__=${NETWORKS_MAINNET_WEIGHT:="0.2"}
mkdir -p "${__MEMPOOL_CACHE_DIR__}"
sed -i "s!__MEMPOOL_NETWORK__!${__MEMPOOL_NETWORK__}!g" mempool-config.json
@ -306,4 +312,10 @@ sed -i "s!__FIAT_PRICE_ENABLED__!${__FIAT_PRICE_ENABLED__}!g" mempool-config.jso
sed -i "s!__FIAT_PRICE_PAID__!${__FIAT_PRICE_PAID__}!g" mempool-config.json
sed -i "s!__FIAT_PRICE_API_KEY__!${__FIAT_PRICE_API_KEY__}!g" mempool-config.json
# NETWORKS
sed -i "s!__NETWORKS_TESTNET_ENABLED__!${__NETWORKS_TESTNET_ENABLED__}!g" mempool-config.json
sed -i "s!__NETWORKS_TESTNET_WEIGHT__!${__NETWORKS_TESTNET_WEIGHT__}!g" mempool-config.json
sed -i "s!__NETWORKS_MAINNET_ENABLED__!${__NETWORKS_MAINNET_ENABLED__}!g" mempool-config.json
sed -i "s!__NETWORKS_MAINNET_WEIGHT__!${__NETWORKS_MAINNET_WEIGHT__}!g" mempool-config.json
node /backend/package/index.js