Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: configs #45

Merged
merged 5 commits into from
Jul 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ services:
dockerfile: Dockerfile
ports:
- 50000:50000
command: relay
command: -m relay

volumes:
ssl_data:
16 changes: 11 additions & 5 deletions packages/network/src/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ import { stringToStream } from "./stream.js";
import { bootstrap } from "@libp2p/bootstrap";
import { webTransport } from "@libp2p/webtransport";

export interface TopologyNetworkNodeConfig {}
// snake_casing to match the JSON config
export interface TopologyNetworkNodeConfig {
addresses: string[];
bootstrap_peers: string[];
}

export class TopologyNetworkNode {
private _config?: TopologyNetworkNodeConfig;
Expand All @@ -34,7 +38,7 @@ export class TopologyNetworkNode {
async start() {
this._node = await createLibp2p({
addresses: {
listen: ["/webrtc"],
listen: this._config ? this._config.addresses : ["/webrtc"],
},
connectionEncryption: [noise()],
connectionGater: {
Expand All @@ -48,9 +52,11 @@ export class TopologyNetworkNode {
topics: ["topology::discovery"],
}),
bootstrap({
list: [
"/dns4/relay.droak.sh/tcp/443/wss/p2p/Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP",
],
list: this._config
? this._config.bootstrap_peers
: [
"/dns4/relay.droak.sh/tcp/443/wss/p2p/Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP",
],
}),
],
services: {
Expand Down
7 changes: 5 additions & 2 deletions packages/network/src/relay.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ import { createLibp2p } from "libp2p";

import relayerJson from "./peer-id-relayer.js";
import { autoNAT } from "@libp2p/autonat";
import { TopologyNetworkNodeConfig } from "./node.js";

// TODO:
// - remove the peer-id-relayer in favor of static configs
// - create a "relay" mode that can be activated in the main node.ts logic
// - improve the circuit-relay setup
export const createRelayNode = async () => {
export const createRelayNode = async (config?: TopologyNetworkNodeConfig) => {
const idRelayer = await createFromJSON(relayerJson);
const node = await createLibp2p({
peerId: idRelayer,
addresses: {
listen: ["/ip4/0.0.0.0/tcp/50000/ws", "/ip4/0.0.0.0/tcp/50001"],
listen: config
? config.addresses
: ["/ip4/0.0.0.0/tcp/50000/ws", "/ip4/0.0.0.0/tcp/50001"],
},
connectionEncryption: [noise()],
peerDiscovery: [
Expand Down
1 change: 1 addition & 0 deletions packages/node/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ FROM node:22.3-bookworm-slim
WORKDIR /node
COPY . .

RUN yarn
RUN chmod +x /node/entrypoint.sh

ENTRYPOINT ["/bin/bash", "/node/entrypoint.sh"]
8 changes: 8 additions & 0 deletions packages/node/configs/node.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"network_config": {
"addresses": ["/webrtc"],
"bootstrap_peers": [
"/dns4/relay.droak.sh/tcp/443/wss/p2p/Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP"
]
}
}
8 changes: 8 additions & 0 deletions packages/node/configs/relay.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"network_config": {
"addresses": ["/ip4/0.0.0.0/tcp/50000/ws", "/ip4/0.0.0.0/tcp/50001"],
"bootstrap_peers": [
"/dns4/relay.droak.sh/tcp/443/wss/p2p/Qma3GsJmB47xYuyahPZPSadh1avvxfyYQwk8R3UnFrQ6aP"
]
}
}
3 changes: 1 addition & 2 deletions packages/node/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
#!/bin/bash
yarn
exec yarn run "$@"
exec yarn cli "$@"
8 changes: 4 additions & 4 deletions packages/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@
"scripts": {
"build": "tsc -b",
"clean": "rm -rf dist/ node_modules/",
"node": "tsx ./src/run_node.ts",
"cli": "tsx ./src/run.ts",
"prebuild": "node -p \"'export const VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
"prepack": "tsc -b",
"relay": "tsx ./src/run_relay.ts",
"start": "tsx ./src/index.ts",
"test": "vitest"
},
"devDependencies": {
Expand All @@ -38,6 +37,7 @@
"dependencies": {
"@topology-foundation/crdt": "0.0.22-2",
"@topology-foundation/network": "0.0.22-2",
"@topology-foundation/object": "0.0.22-2"
"@topology-foundation/object": "0.0.22-2",
"commander": "^12.1.0"
}
}
12 changes: 12 additions & 0 deletions packages/node/src/cli/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Command, Option } from "commander";
import { VERSION } from "../version.js";

export const program = new Command();
program.version(VERSION);

program.addOption(new Option("-c, --config <file>", "config file"));
program.addOption(
new Option("-m, --mode <mode>", "mode to run in")
.default("node")
.choices(["node", "relay"]),
);
5 changes: 3 additions & 2 deletions packages/node/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ import { TopologyObjectStore } from "./store.js";
import { fromString as uint8ArrayFromString } from "uint8arrays/from-string";
import { toString as uint8ArrayToString } from "uint8arrays/to-string";

// snake_casing to match the JSON config
export interface TopologyNodeConfig {
networkConfig?: TopologyNetworkNodeConfig;
network_config?: TopologyNetworkNodeConfig;
}

export class TopologyNode {
Expand All @@ -21,7 +22,7 @@ export class TopologyNode {

constructor(config?: TopologyNodeConfig) {
this._config = config;
this._networkNode = new TopologyNetworkNode(config?.networkConfig);
this._networkNode = new TopologyNetworkNode(config?.network_config);
this._objectStore = new TopologyObjectStore();
}

Expand Down
31 changes: 31 additions & 0 deletions packages/node/src/run.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { program } from "./cli";
import { TopologyNode, TopologyNodeConfig } from ".";
import { createRelayNode } from "@topology-foundation/network";
import fs from "fs";

async function startNode(config?: TopologyNodeConfig) {
const node = new TopologyNode(config);
node.start();
}

async function startRelay(config?: TopologyNodeConfig) {
const node = await createRelayNode(config?.network_config);
console.log("peer_id:", node.peerId.toString());
for (let ma of node.getMultiaddrs()) {
console.log(ma);
}
}

program.parse(process.argv);
const opts = program.opts();

let config: TopologyNodeConfig | undefined;
if (opts.config) {
config = JSON.parse(fs.readFileSync(opts.config, "utf8"));
}

if (opts.mode === "node") {
startNode(config);
} else if (opts.mode === "relay") {
startRelay(config);
}
8 changes: 0 additions & 8 deletions packages/node/src/run_node.ts

This file was deleted.

16 changes: 0 additions & 16 deletions packages/node/src/run_relay.ts

This file was deleted.

1 change: 1 addition & 0 deletions packages/node/src/version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const VERSION = "0.0.22-2";
5 changes: 5 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2087,6 +2087,11 @@ commander@^10.0.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==

commander@^12.1.0:
version "12.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==

commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
Expand Down