From fe9d26784e6a0460a0abe7fe9ec6097e6d52b64e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20Xu=C3=A2n=20Trung?= <66519569+trungnotchung@users.noreply.github.com> Date: Fri, 1 Nov 2024 10:52:19 +0700 Subject: [PATCH] #213 integrate dotenv for environment variable management (#215) Co-authored-by: Ly Dinh Minh Man <85622996+winprn@users.noreply.github.com> Co-authored-by: droak --- .gitignore | 1 + packages/node/.env.example | 4 +++ packages/node/package.json | 1 + packages/node/src/config.ts | 39 ++++++++++++++++++++++++++ packages/node/src/run.ts | 10 +++---- packages/node/src/version.ts | 2 +- pnpm-lock.yaml | 53 +++++++++++++++++++++--------------- 7 files changed, 81 insertions(+), 29 deletions(-) create mode 100644 packages/node/.env.example create mode 100644 packages/node/src/config.ts diff --git a/.gitignore b/.gitignore index 9f22aa2a..c1165b44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.env dist/ docs/ diff --git a/packages/node/.env.example b/packages/node/.env.example new file mode 100644 index 00000000..78860d76 --- /dev/null +++ b/packages/node/.env.example @@ -0,0 +1,4 @@ +ADDRESSES=/ip4/0.0.0.0/tcp/50000/ws,/ip4/0.0.0.0/tcp/50001 +BOOTSTRAP=true +BOOTSTRAP_PEERS=/dns4/relay.droak.sh/tcp/443/wss/p2p/Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP +PRIVATE_KEY_SEED=example \ No newline at end of file diff --git a/packages/node/package.json b/packages/node/package.json index 2427bc18..f7db895e 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -39,6 +39,7 @@ "@chainsafe/libp2p-gossipsub": "^14.1.0", "@grpc/grpc-js": "^1.12.2", "@libp2p/interface": "^2.1.3", + "dotenv": "^16.4.5", "@topology-foundation/blueprints": "0.2.1-4", "@topology-foundation/network": "0.2.1-4", "@topology-foundation/object": "0.2.1-4", diff --git a/packages/node/src/config.ts b/packages/node/src/config.ts new file mode 100644 index 00000000..f982e9da --- /dev/null +++ b/packages/node/src/config.ts @@ -0,0 +1,39 @@ +import fs from "node:fs"; +import * as dotenv from "dotenv"; +import type { TopologyNodeConfig } from "./index.js"; + +export function loadConfig( + configPath?: string | undefined, +): TopologyNodeConfig | undefined { + let config: TopologyNodeConfig | undefined; + + if (configPath) { + config = JSON.parse(fs.readFileSync(configPath, "utf8")); + return config; + } + + const result = dotenv.config(); + if (!result.error) { + config = {}; + config.network_config = { + addresses: process.env.ADDRESSES + ? process.env.ADDRESSES.split(",") + : undefined, + bootstrap: process.env.BOOTSTRAP + ? process.env.BOOTSTRAP === "true" + : undefined, + bootstrap_peers: process.env.BOOTSTRAP_PEERS + ? process.env.BOOTSTRAP_PEERS.split(",") + : undefined, + browser_metrics: process.env.BROWSER_METRICS + ? process.env.BROWSER_METRICS === "true" + : undefined, + private_key_seed: process.env.PRIVATE_KEY_SEED + ? process.env.PRIVATE_KEY_SEED + : undefined, + }; + return config; + } + + return config; +} diff --git a/packages/node/src/run.ts b/packages/node/src/run.ts index 4f1c8fd9..7de50daa 100644 --- a/packages/node/src/run.ts +++ b/packages/node/src/run.ts @@ -1,15 +1,13 @@ -import fs from "node:fs"; import { program } from "./cli/index.js"; -import { TopologyNode, type TopologyNodeConfig } from "./index.js"; +import { loadConfig } from "./config.js"; +import { TopologyNode } from "./index.js"; +import type { TopologyNodeConfig } from "./index.js"; import { init as rpc_init } from "./rpc/index.js"; const run = async () => { program.parse(process.argv); const opts = program.opts(); - let config: TopologyNodeConfig | undefined; - if (opts.config) { - config = JSON.parse(fs.readFileSync(opts.config, "utf8")); - } + const config: TopologyNodeConfig | undefined = loadConfig(opts.config); const node = new TopologyNode(config); await node.start(); diff --git a/packages/node/src/version.ts b/packages/node/src/version.ts index 2c9a3df9..bb1d4545 100644 --- a/packages/node/src/version.ts +++ b/packages/node/src/version.ts @@ -1 +1 @@ -export const VERSION = "0.2.1-3"; +export const VERSION = "0.2.1-4"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a582a596..d3cd3a6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,16 +45,16 @@ importers: examples/canvas: dependencies: '@topology-foundation/blueprints': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/blueprints '@topology-foundation/network': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/network '@topology-foundation/node': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/node '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/object crypto-browserify: specifier: ^3.12.0 @@ -91,16 +91,16 @@ importers: examples/chat: dependencies: '@topology-foundation/blueprints': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/blueprints '@topology-foundation/network': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/network '@topology-foundation/node': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/node '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/object assemblyscript: specifier: ^0.27.29 @@ -143,13 +143,13 @@ importers: examples/grid: dependencies: '@topology-foundation/network': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/network '@topology-foundation/node': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/node '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/object assemblyscript: specifier: ^0.27.29 @@ -198,16 +198,16 @@ importers: examples/local-bootstrap: dependencies: '@topology-foundation/blueprints': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/blueprints '@topology-foundation/network': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/network '@topology-foundation/node': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/node '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../../packages/object assemblyscript: specifier: ^0.27.29 @@ -254,7 +254,7 @@ importers: version: 4.1.2 devDependencies: '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../object assemblyscript: specifier: ^0.27.29 @@ -326,7 +326,7 @@ importers: specifier: ^12.3.1 version: 12.3.1 '@topology-foundation/logger': - specifier: ^0.2.1-3 + specifier: ^0.2.1-4 version: link:../logger it-length-prefixed: specifier: ^9.1.0 @@ -366,20 +366,23 @@ importers: specifier: ^2.1.3 version: 2.1.3 '@topology-foundation/blueprints': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../blueprints '@topology-foundation/logger': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../logger '@topology-foundation/network': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../network '@topology-foundation/object': - specifier: 0.2.1-3 + specifier: 0.2.1-4 version: link:../object commander: specifier: ^12.1.0 version: 12.1.0 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 google-protobuf: specifier: ^3.21.2 version: 3.21.4 @@ -406,7 +409,7 @@ importers: specifier: ^2.0.0 version: 2.2.0 '@topology-foundation/logger': - specifier: ^0.2.1-3 + specifier: ^0.2.1-4 version: link:../logger ts-proto: specifier: ^2.2.4 @@ -2899,6 +2902,10 @@ packages: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dprint-node@1.0.8: resolution: {integrity: sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg==} @@ -8502,6 +8509,8 @@ snapshots: dependencies: type-fest: 4.26.1 + dotenv@16.4.5: {} + dprint-node@1.0.8: dependencies: detect-libc: 1.0.3