Add example nested network config
This commit is contained in:
parent
98e9d1a6c3
commit
ad6b146aa0
@ -1,4 +1,14 @@
|
|||||||
{
|
{
|
||||||
|
"NETWORKS": {
|
||||||
|
"TESTNET": {
|
||||||
|
"ENABLED": true,
|
||||||
|
"WEIGHT": "__NETWORKS_TESTNET_WEIGHT__"
|
||||||
|
},
|
||||||
|
"MAINNET": {
|
||||||
|
"ENABLED": true,
|
||||||
|
"WEIGHT": "__NETWORKS_MAINNET_WEIGHT__"
|
||||||
|
}
|
||||||
|
},
|
||||||
"MEMPOOL": {
|
"MEMPOOL": {
|
||||||
"ENABLED": true,
|
"ENABLED": true,
|
||||||
"OFFICIAL": false,
|
"OFFICIAL": false,
|
||||||
|
@ -157,6 +157,17 @@ describe('Mempool Backend Config', () => {
|
|||||||
PAID: false,
|
PAID: false,
|
||||||
API_KEY: '',
|
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.MEMPOOL_SERVICES).toStrictEqual(fixture.MEMPOOL_SERVICES);
|
||||||
|
|
||||||
expect(config.REDIS).toStrictEqual(fixture.REDIS);
|
expect(config.REDIS).toStrictEqual(fixture.REDIS);
|
||||||
|
|
||||||
|
expect(config.NETWORKS).toStrictEqual(fixture.NETWORKS);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -197,6 +210,22 @@ describe('Mempool Backend Config', () => {
|
|||||||
jest.isolateModules(() => {
|
jest.isolateModules(() => {
|
||||||
const startSh = fs.readFileSync(`${__dirname}/../../../docker/backend/start.sh`, 'utf-8');
|
const startSh = fs.readFileSync(`${__dirname}/../../../docker/backend/start.sh`, 'utf-8');
|
||||||
const fixture = JSON.parse(fs.readFileSync(`${__dirname}/../__fixtures__/mempool-config.template.json`, 'utf8'));
|
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?) {
|
function parseJson(jsonObj, root?) {
|
||||||
for (const [key, value] of Object.entries(jsonObj)) {
|
for (const [key, value] of Object.entries(jsonObj)) {
|
||||||
@ -208,6 +237,31 @@ describe('Mempool Backend Config', () => {
|
|||||||
continue;
|
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) {
|
if (root) {
|
||||||
//The flattened string, i.e, __MEMPOOL_ENABLED__
|
//The flattened string, i.e, __MEMPOOL_ENABLED__
|
||||||
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
|
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
|
||||||
@ -264,6 +318,8 @@ describe('Mempool Backend Config', () => {
|
|||||||
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
|
const replaceStr = `${root ? '__' + root + '_' : '__'}${key}__`;
|
||||||
expect(dockerJson).toContain(`"${key}": ${replaceStr}`);
|
expect(dockerJson).toContain(`"${key}": ${replaceStr}`);
|
||||||
break;
|
break;
|
||||||
|
} else if (typeof value === 'object') {
|
||||||
|
break;
|
||||||
} else {
|
} else {
|
||||||
//Check for top level config keys
|
//Check for top level config keys
|
||||||
expect(dockerJson).toContain(`"${key}"`);
|
expect(dockerJson).toContain(`"${key}"`);
|
||||||
|
@ -160,6 +160,16 @@ interface IConfig {
|
|||||||
PAID: boolean;
|
PAID: boolean;
|
||||||
API_KEY: string;
|
API_KEY: string;
|
||||||
},
|
},
|
||||||
|
NETWORKS: {
|
||||||
|
MAINNET: {
|
||||||
|
ENABLED: boolean;
|
||||||
|
WEIGHT: 'foo';
|
||||||
|
},
|
||||||
|
TESTNET: {
|
||||||
|
ENABLED: boolean;
|
||||||
|
WEIGHT: 'bar'
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaults: IConfig = {
|
const defaults: IConfig = {
|
||||||
@ -320,6 +330,16 @@ const defaults: IConfig = {
|
|||||||
'PAID': false,
|
'PAID': false,
|
||||||
'API_KEY': '',
|
'API_KEY': '',
|
||||||
},
|
},
|
||||||
|
'NETWORKS': {
|
||||||
|
'MAINNET': {
|
||||||
|
'ENABLED': true,
|
||||||
|
'WEIGHT': 'foo',
|
||||||
|
},
|
||||||
|
'TESTNET': {
|
||||||
|
'ENABLED': false,
|
||||||
|
'WEIGHT': 'bar'
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Config implements IConfig {
|
class Config implements IConfig {
|
||||||
@ -341,6 +361,7 @@ class Config implements IConfig {
|
|||||||
MEMPOOL_SERVICES: IConfig['MEMPOOL_SERVICES'];
|
MEMPOOL_SERVICES: IConfig['MEMPOOL_SERVICES'];
|
||||||
REDIS: IConfig['REDIS'];
|
REDIS: IConfig['REDIS'];
|
||||||
FIAT_PRICE: IConfig['FIAT_PRICE'];
|
FIAT_PRICE: IConfig['FIAT_PRICE'];
|
||||||
|
NETWORKS: IConfig['NETWORKS'];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
const configs = this.merge(configFromFile, defaults);
|
const configs = this.merge(configFromFile, defaults);
|
||||||
@ -362,6 +383,7 @@ class Config implements IConfig {
|
|||||||
this.MEMPOOL_SERVICES = configs.MEMPOOL_SERVICES;
|
this.MEMPOOL_SERVICES = configs.MEMPOOL_SERVICES;
|
||||||
this.REDIS = configs.REDIS;
|
this.REDIS = configs.REDIS;
|
||||||
this.FIAT_PRICE = configs.FIAT_PRICE;
|
this.FIAT_PRICE = configs.FIAT_PRICE;
|
||||||
|
this.NETWORKS = configs.NETWORKS;
|
||||||
}
|
}
|
||||||
|
|
||||||
merge = (...objects: object[]): IConfig => {
|
merge = (...objects: object[]): IConfig => {
|
||||||
|
@ -155,5 +155,15 @@
|
|||||||
"ENABLED": __FIAT_PRICE_ENABLED__,
|
"ENABLED": __FIAT_PRICE_ENABLED__,
|
||||||
"PAID": __FIAT_PRICE_PAID__,
|
"PAID": __FIAT_PRICE_PAID__,
|
||||||
"API_KEY": "__FIAT_PRICE_API_KEY__"
|
"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__"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,6 +157,12 @@ __FIAT_PRICE_ENABLED__=${FIAT_PRICE_ENABLED:=true}
|
|||||||
__FIAT_PRICE_PAID__=${FIAT_PRICE_PAID:=false}
|
__FIAT_PRICE_PAID__=${FIAT_PRICE_PAID:=false}
|
||||||
__FIAT_PRICE_API_KEY__=${FIAT_PRICE_API_KEY:=""}
|
__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__}"
|
mkdir -p "${__MEMPOOL_CACHE_DIR__}"
|
||||||
|
|
||||||
sed -i "s!__MEMPOOL_NETWORK__!${__MEMPOOL_NETWORK__}!g" mempool-config.json
|
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_PAID__!${__FIAT_PRICE_PAID__}!g" mempool-config.json
|
||||||
sed -i "s!__FIAT_PRICE_API_KEY__!${__FIAT_PRICE_API_KEY__}!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
|
node /backend/package/index.js
|
||||||
|
Loading…
x
Reference in New Issue
Block a user