From 1430198b5a96ba71f48c027d61e56bbc36a4bbd4 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Wed, 28 Apr 2021 15:11:16 +0300 Subject: [PATCH] feat(config): use env vars for config --- .env.example | 9 ++++ config/local.json | 24 ++++++++++ package.json | 3 +- src/config.ts | 73 +++++++++++++++++++++++++++++++ src/reducer/slices/collections.ts | 2 +- src/reducer/slices/marketplace.ts | 2 +- src/reducer/slices/system.ts | 2 +- yarn.lock | 5 +++ 8 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 .env.example create mode 100644 config/local.json create mode 100644 src/config.ts diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..d69c619f --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +REACT_APP_CONFIG_RPC=https://rpctest.tzbeta.net +REACT_APP_CONFIG_TZKT_API=https://staging.api.edo2net.tzkt.io +REACT_APP_CONFIG_NETWORK=edonet +REACT_APP_CONFIG_BCD_API=https://api.better-call.dev +REACT_APP_CONFIG_BCD_GUI=https://better-call.dev +REACT_APP_CONFIG_CONTRACTS_NFT_FAUCET=KT1Hagc5XQYzkX7HfRbUNXdi4CBfiENzbHiU +REACT_APP_CONFIG_CONTRACTS_MARKETPLACE_FIXED_PRICE_TEZ=KT1H4tMRW3o9GdPJ3r82ZC7BJiR6WgmYazUC +REACT_APP_CONFIG_IPFS_API=https://minter-api.tqhosted.com +REACT_APP_CONFIG_IPFS_GATEWAY=https://tqtezos.mypinata.cloud diff --git a/config/local.json b/config/local.json new file mode 100644 index 00000000..e8a84f8f --- /dev/null +++ b/config/local.json @@ -0,0 +1,24 @@ +{ + "rpc": "https://rpctest.tzbeta.net", + "admin": { + "secret": "edsk2xHxaCtgpKpncPBXgLbZhAz17yp5qgwv6K88zMqqwsrui3UaRB" + }, + "tzkt": { + "api": "https://staging.api.edo2net.tzkt.io" + }, + "network": "edonet", + "bcd": { + "api": "https://api.better-call.dev", + "gui": "https://better-call.dev" + }, + "contracts": { + "nftFaucet": "KT1NXuDT1xczTMNcLPj6ymqTAZhTEQARy3YL", + "marketplace": { + "fixedPrice": { + "tez": "KT1SgCbeuKsbUtQnndYSG9rdM9h8mRADxhSr" + } + } + }, + "ipfsApi": "http://localhost:3300", + "ipfsGateway": "https://mypinata.cloud" +} diff --git a/package.json b/package.json index 94f9aed2..1841f207 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "immer": "8.0.0", "io-ts": "2.2.16", "joi": "17.3.0", + "lodash": "4.17.21", "react": "16.13.1", "react-dom": "16.13.1", "react-dropzone": "11.2.4", @@ -51,7 +52,7 @@ "ts-node": "9.1.1" }, "scripts": { - "start": "yarn start:testnet", + "start": "react-scripts start", "start:testnet": "cp ./config/testnet.json src/config.json && react-scripts start", "start:sandbox": "cp ./config/sandbox-bootstrapped.json src/config.json && react-scripts start", "start:mainnet": "cp ./config/mainnet.json src/config.json && react-scripts start", diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 00000000..09597752 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,73 @@ +import configFile from './config.json'; +import { Config } from './lib/system'; + +const { + REACT_APP_CONFIG_RPC = '', + REACT_APP_CONFIG_TZKT_API = '', + REACT_APP_CONFIG_NETWORK = '', + REACT_APP_CONFIG_BCD_API = '', + REACT_APP_CONFIG_BCD_GUI = '', + REACT_APP_CONFIG_CONTRACTS_NFT_FAUCET = '', + REACT_APP_CONFIG_CONTRACTS_MARKETPLACE_FIXED_PRICE_TEZ = '', + REACT_APP_CONFIG_IPFS_API = '', + REACT_APP_CONFIG_IPFS_GATEWAY = '' +} = process.env; + +const defaultConfig: Config = { + rpc: 'https://rpctest.tzbeta.net', + tzkt: { + api: 'https://staging.api.edo2net.tzkt.io' + }, + network: 'edonet', + bcd: { + api: 'https://api.better-call.dev', + gui: 'https://better-call.dev' + }, + contracts: { + nftFaucet: '', + marketplace: { + fixedPrice: { + tez: '' + } + } + }, + ipfsApi: 'http://localhost:3300', + ipfsGateway: 'https://mypinata.cloud' +}; + +const config: Config = { + rpc: REACT_APP_CONFIG_RPC || configFile.rpc || defaultConfig.rpc, + tzkt: { + api: + REACT_APP_CONFIG_TZKT_API || configFile.tzkt.api || defaultConfig.tzkt.api + }, + network: + REACT_APP_CONFIG_NETWORK || configFile.network || defaultConfig.network, + bcd: { + api: + REACT_APP_CONFIG_BCD_API || configFile.bcd.api || defaultConfig.bcd.api, + gui: REACT_APP_CONFIG_BCD_GUI || configFile.bcd.gui || defaultConfig.bcd.gui + }, + contracts: { + nftFaucet: + REACT_APP_CONFIG_CONTRACTS_NFT_FAUCET || + configFile.contracts.nftFaucet || + defaultConfig.contracts.nftFaucet, + marketplace: { + fixedPrice: { + tez: + REACT_APP_CONFIG_CONTRACTS_MARKETPLACE_FIXED_PRICE_TEZ || + configFile.contracts.marketplace.fixedPrice.tez || + defaultConfig.contracts.marketplace.fixedPrice.tez + } + } + }, + ipfsApi: + REACT_APP_CONFIG_IPFS_API || configFile.ipfsApi || defaultConfig.ipfsApi, + ipfsGateway: + REACT_APP_CONFIG_IPFS_GATEWAY || + configFile.ipfsGateway || + defaultConfig.ipfsGateway +}; + +export default config; diff --git a/src/reducer/slices/collections.ts b/src/reducer/slices/collections.ts index 111a38e1..ee73bd9f 100644 --- a/src/reducer/slices/collections.ts +++ b/src/reducer/slices/collections.ts @@ -5,7 +5,7 @@ import { getWalletAssetContractsQuery } from '../async/queries'; import { Nft, AssetContract } from '../../lib/nfts/decoders'; -import config from '../../config.json'; +import config from '../../config'; //// State diff --git a/src/reducer/slices/marketplace.ts b/src/reducer/slices/marketplace.ts index 880fbb97..c1df7bd3 100644 --- a/src/reducer/slices/marketplace.ts +++ b/src/reducer/slices/marketplace.ts @@ -5,7 +5,7 @@ import { } from '../async/queries'; import { Nft } from '../../lib/nfts/decoders'; import { MarketplaceNftLoadingData } from '../../lib/nfts/queries'; -import config from '../../config.json'; +import config from '../../config'; //// State diff --git a/src/reducer/slices/system.ts b/src/reducer/slices/system.ts index 7036716d..5b5d4f36 100644 --- a/src/reducer/slices/system.ts +++ b/src/reducer/slices/system.ts @@ -1,6 +1,6 @@ import { Minter, SystemWithToolkit, SystemWithWallet } from '../../lib/system'; import { createSlice } from '@reduxjs/toolkit'; -import config from '../../config.json'; +import config from '../../config'; import { connectWallet, disconnectWallet, diff --git a/yarn.lock b/yarn.lock index 41552070..fc6c0f54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8218,6 +8218,11 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= +lodash@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + "lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"