mirror of
https://github.com/waku-org/js-waku.git
synced 2025-02-25 18:45:35 +00:00
chore: move libp2p utils from @waku/core to new package (#1056)
* add: libp2p-utils * address: comments
This commit is contained in:
parent
a15436d786
commit
03e00225bd
52
package-lock.json
generated
52
package-lock.json
generated
@ -8,6 +8,7 @@
|
|||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/byte-utils",
|
"packages/byte-utils",
|
||||||
"packages/interfaces",
|
"packages/interfaces",
|
||||||
|
"packages/libp2p-utils",
|
||||||
"packages/core",
|
"packages/core",
|
||||||
"packages/enr",
|
"packages/enr",
|
||||||
"packages/dns-discovery",
|
"packages/dns-discovery",
|
||||||
@ -3210,6 +3211,10 @@
|
|||||||
"resolved": "packages/interfaces",
|
"resolved": "packages/interfaces",
|
||||||
"link": true
|
"link": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@waku/libp2p-utils": {
|
||||||
|
"resolved": "packages/libp2p-utils",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@waku/message-encryption": {
|
"node_modules/@waku/message-encryption": {
|
||||||
"resolved": "packages/message-encryption",
|
"resolved": "packages/message-encryption",
|
||||||
"link": true
|
"link": true
|
||||||
@ -17457,6 +17462,32 @@
|
|||||||
"node": ">=16"
|
"node": ">=16"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/libp2p-utils": {
|
||||||
|
"name": "@waku/libp2p-utils",
|
||||||
|
"version": "0.0.2",
|
||||||
|
"license": "MIT OR Apache-2.0",
|
||||||
|
"devDependencies": {
|
||||||
|
"@rollup/plugin-commonjs": "^22.0.0",
|
||||||
|
"@rollup/plugin-json": "^4.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
||||||
|
"@typescript-eslint/parser": "^5.8.1",
|
||||||
|
"cspell": "^5.14.0",
|
||||||
|
"eslint": "^8.6.0",
|
||||||
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
|
"eslint-plugin-functional": "^4.0.2",
|
||||||
|
"eslint-plugin-import": "^2.25.3",
|
||||||
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"prettier": "^2.1.1",
|
||||||
|
"rollup": "^2.75.0",
|
||||||
|
"typescript": "^4.6.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
}
|
||||||
|
},
|
||||||
"packages/message-encryption": {
|
"packages/message-encryption": {
|
||||||
"name": "@waku/message-encryption",
|
"name": "@waku/message-encryption",
|
||||||
"version": "0.0.4",
|
"version": "0.0.4",
|
||||||
@ -20282,6 +20313,27 @@
|
|||||||
"typescript": "^4.6.3"
|
"typescript": "^4.6.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@waku/libp2p-utils": {
|
||||||
|
"version": "file:packages/libp2p-utils",
|
||||||
|
"requires": {
|
||||||
|
"@rollup/plugin-commonjs": "^22.0.0",
|
||||||
|
"@rollup/plugin-json": "^4.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
||||||
|
"@typescript-eslint/parser": "^5.8.1",
|
||||||
|
"cspell": "^5.14.0",
|
||||||
|
"eslint": "^8.6.0",
|
||||||
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
|
"eslint-plugin-functional": "^4.0.2",
|
||||||
|
"eslint-plugin-import": "^2.25.3",
|
||||||
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"prettier": "^2.1.1",
|
||||||
|
"rollup": "^2.75.0",
|
||||||
|
"typescript": "^4.6.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@waku/message-encryption": {
|
"@waku/message-encryption": {
|
||||||
"version": "file:packages/message-encryption",
|
"version": "file:packages/message-encryption",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/byte-utils",
|
"packages/byte-utils",
|
||||||
"packages/interfaces",
|
"packages/interfaces",
|
||||||
|
"packages/libp2p-utils",
|
||||||
"packages/core",
|
"packages/core",
|
||||||
"packages/enr",
|
"packages/enr",
|
||||||
"packages/dns-discovery",
|
"packages/dns-discovery",
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
import { PeerInfo } from "@libp2p/interface-peer-info";
|
|
||||||
import { peerIdFromString } from "@libp2p/peer-id";
|
|
||||||
import { Multiaddr } from "@multiformats/multiaddr";
|
|
||||||
|
|
||||||
export function multiaddrsToPeerInfo(mas: Multiaddr[]): PeerInfo[] {
|
|
||||||
return mas
|
|
||||||
.map((ma) => {
|
|
||||||
const peerIdStr = ma.getPeerId();
|
|
||||||
const protocols: string[] = [];
|
|
||||||
return {
|
|
||||||
id: peerIdStr ? peerIdFromString(peerIdStr) : null,
|
|
||||||
multiaddrs: [ma.decapsulateCode(421)],
|
|
||||||
protocols,
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.filter((peerInfo): peerInfo is PeerInfo => peerInfo.id !== null);
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
import { Connection } from "@libp2p/interface-connection";
|
|
||||||
|
|
||||||
export function selectConnection(
|
|
||||||
connections: Connection[]
|
|
||||||
): Connection | undefined {
|
|
||||||
if (!connections.length) return;
|
|
||||||
if (connections.length === 1) return connections[0];
|
|
||||||
|
|
||||||
let latestConnection: Connection | undefined;
|
|
||||||
|
|
||||||
connections.forEach((connection) => {
|
|
||||||
if (connection.stat.status === "OPEN") {
|
|
||||||
if (!latestConnection) {
|
|
||||||
latestConnection = connection;
|
|
||||||
} else if (
|
|
||||||
connection.stat.timeline.open > latestConnection.stat.timeline.open
|
|
||||||
) {
|
|
||||||
latestConnection = connection;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return latestConnection;
|
|
||||||
}
|
|
@ -13,6 +13,12 @@ import type {
|
|||||||
Message,
|
Message,
|
||||||
ProtocolOptions,
|
ProtocolOptions,
|
||||||
} from "@waku/interfaces";
|
} from "@waku/interfaces";
|
||||||
|
import {
|
||||||
|
getPeersForProtocol,
|
||||||
|
selectConnection,
|
||||||
|
selectPeerForProtocol,
|
||||||
|
selectRandomPeer,
|
||||||
|
} from "@waku/libp2p-utils";
|
||||||
import debug from "debug";
|
import debug from "debug";
|
||||||
import all from "it-all";
|
import all from "it-all";
|
||||||
import * as lp from "it-length-prefixed";
|
import * as lp from "it-length-prefixed";
|
||||||
@ -21,12 +27,6 @@ import { pipe } from "it-pipe";
|
|||||||
import { WakuMessage as WakuMessageProto } from "../../proto/message.js";
|
import { WakuMessage as WakuMessageProto } from "../../proto/message.js";
|
||||||
import { DefaultPubSubTopic } from "../constants.js";
|
import { DefaultPubSubTopic } from "../constants.js";
|
||||||
import { groupByContentTopic } from "../group_by.js";
|
import { groupByContentTopic } from "../group_by.js";
|
||||||
import { selectConnection } from "../select_connection.js";
|
|
||||||
import {
|
|
||||||
getPeersForProtocol,
|
|
||||||
selectPeerForProtocol,
|
|
||||||
selectRandomPeer,
|
|
||||||
} from "../select_peer.js";
|
|
||||||
import { toProtoMessage } from "../to_proto_message.js";
|
import { toProtoMessage } from "../to_proto_message.js";
|
||||||
|
|
||||||
import { ContentFilter, FilterRPC } from "./filter_rpc.js";
|
import { ContentFilter, FilterRPC } from "./filter_rpc.js";
|
||||||
|
@ -9,6 +9,12 @@ import type {
|
|||||||
ProtocolOptions,
|
ProtocolOptions,
|
||||||
SendResult,
|
SendResult,
|
||||||
} from "@waku/interfaces";
|
} from "@waku/interfaces";
|
||||||
|
import {
|
||||||
|
getPeersForProtocol,
|
||||||
|
selectConnection,
|
||||||
|
selectPeerForProtocol,
|
||||||
|
selectRandomPeer,
|
||||||
|
} from "@waku/libp2p-utils";
|
||||||
import debug from "debug";
|
import debug from "debug";
|
||||||
import all from "it-all";
|
import all from "it-all";
|
||||||
import * as lp from "it-length-prefixed";
|
import * as lp from "it-length-prefixed";
|
||||||
@ -17,12 +23,6 @@ import { Uint8ArrayList } from "uint8arraylist";
|
|||||||
|
|
||||||
import { PushResponse } from "../../proto/light_push.js";
|
import { PushResponse } from "../../proto/light_push.js";
|
||||||
import { DefaultPubSubTopic } from "../constants.js";
|
import { DefaultPubSubTopic } from "../constants.js";
|
||||||
import { selectConnection } from "../select_connection.js";
|
|
||||||
import {
|
|
||||||
getPeersForProtocol,
|
|
||||||
selectPeerForProtocol,
|
|
||||||
selectRandomPeer,
|
|
||||||
} from "../select_peer.js";
|
|
||||||
|
|
||||||
import { PushRPC } from "./push_rpc.js";
|
import { PushRPC } from "./push_rpc.js";
|
||||||
|
|
||||||
|
@ -11,6 +11,11 @@ import {
|
|||||||
Index,
|
Index,
|
||||||
Store,
|
Store,
|
||||||
} from "@waku/interfaces";
|
} from "@waku/interfaces";
|
||||||
|
import {
|
||||||
|
getPeersForProtocol,
|
||||||
|
selectConnection,
|
||||||
|
selectPeerForProtocol,
|
||||||
|
} from "@waku/libp2p-utils";
|
||||||
import debug from "debug";
|
import debug from "debug";
|
||||||
import all from "it-all";
|
import all from "it-all";
|
||||||
import * as lp from "it-length-prefixed";
|
import * as lp from "it-length-prefixed";
|
||||||
@ -19,8 +24,6 @@ import { Uint8ArrayList } from "uint8arraylist";
|
|||||||
|
|
||||||
import * as proto from "../../proto/store.js";
|
import * as proto from "../../proto/store.js";
|
||||||
import { DefaultPubSubTopic } from "../constants.js";
|
import { DefaultPubSubTopic } from "../constants.js";
|
||||||
import { selectConnection } from "../select_connection.js";
|
|
||||||
import { getPeersForProtocol, selectPeerForProtocol } from "../select_peer.js";
|
|
||||||
import { toProtoMessage } from "../to_proto_message.js";
|
import { toProtoMessage } from "../to_proto_message.js";
|
||||||
|
|
||||||
import { HistoryRPC, PageDirection, Params } from "./history_rpc.js";
|
import { HistoryRPC, PageDirection, Params } from "./history_rpc.js";
|
||||||
|
6
packages/libp2p-utils/.eslintrc.cjs
Normal file
6
packages/libp2p-utils/.eslintrc.cjs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
module.exports = {
|
||||||
|
parserOptions: {
|
||||||
|
tsconfigRootDir: __dirname,
|
||||||
|
project: "./tsconfig.dev.json",
|
||||||
|
},
|
||||||
|
};
|
4
packages/libp2p-utils/.prettierignore
Normal file
4
packages/libp2p-utils/.prettierignore
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
build
|
||||||
|
bundle
|
||||||
|
dist
|
||||||
|
node_modules
|
93
packages/libp2p-utils/package.json
Normal file
93
packages/libp2p-utils/package.json
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"name": "@waku/libp2p-utils",
|
||||||
|
"version": "0.0.2",
|
||||||
|
"description": "Utilities to help with libp2p",
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"module": "./dist/index.js",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"import": "./dist/index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "module",
|
||||||
|
"author": "Waku Team",
|
||||||
|
"homepage": "https://github.com/waku-org/js-waku/tree/master/packages/libp2p-utils#readme",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/waku-org/js-waku.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/waku-org/js-waku/issues"
|
||||||
|
},
|
||||||
|
"license": "MIT OR Apache-2.0",
|
||||||
|
"keywords": [
|
||||||
|
"waku",
|
||||||
|
"decentralized",
|
||||||
|
"secure",
|
||||||
|
"communication",
|
||||||
|
"web3",
|
||||||
|
"ethereum",
|
||||||
|
"dapps",
|
||||||
|
"privacy"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"build": "run-s build:**",
|
||||||
|
"build:esm": "tsc",
|
||||||
|
"build:bundle": "rollup --config rollup.config.js",
|
||||||
|
"fix": "run-s fix:*",
|
||||||
|
"fix:prettier": "prettier . --write",
|
||||||
|
"fix:lint": "eslint src --ext .ts --ext .cjs --fix",
|
||||||
|
"check": "run-s check:*",
|
||||||
|
"check:lint": "eslint src --ext .ts",
|
||||||
|
"check:prettier": "prettier . --list-different",
|
||||||
|
"check:spelling": "cspell \"{README.md,src/**/*.ts}\"",
|
||||||
|
"check:tsc": "tsc -p tsconfig.dev.json",
|
||||||
|
"prepublish": "npm run build",
|
||||||
|
"reset-hard": "git clean -dfx -e .idea && git reset --hard && npm i && npm run build"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@multiformats/multiaddr": "^11.0.6",
|
||||||
|
"@libp2p/interface-peer-info": "^1.0.1",
|
||||||
|
"@libp2p/peer-id": "^1.1.10",
|
||||||
|
"@libp2p/interface-connection": "^3.0.3",
|
||||||
|
"@libp2p/interface-peer-id": "^1.0.6",
|
||||||
|
"@libp2p/interface-peer-store": "^1.2.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@rollup/plugin-commonjs": "^22.0.0",
|
||||||
|
"@rollup/plugin-json": "^4.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^13.3.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.8.1",
|
||||||
|
"@typescript-eslint/parser": "^5.8.1",
|
||||||
|
"cspell": "^5.14.0",
|
||||||
|
"eslint": "^8.6.0",
|
||||||
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
"eslint-plugin-eslint-comments": "^3.2.0",
|
||||||
|
"eslint-plugin-functional": "^4.0.2",
|
||||||
|
"eslint-plugin-import": "^2.25.3",
|
||||||
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
|
"prettier": "^2.1.1",
|
||||||
|
"rollup": "^2.75.0",
|
||||||
|
"typescript": "^4.6.3"
|
||||||
|
},
|
||||||
|
"typedoc": {
|
||||||
|
"entryPoint": "./src/index.ts"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"bundle",
|
||||||
|
"src/*.ts",
|
||||||
|
"src/lib/**/*.ts",
|
||||||
|
"src/proto/**/*.ts",
|
||||||
|
"!**/*.spec.*",
|
||||||
|
"!**/*.json",
|
||||||
|
"CHANGELOG.md",
|
||||||
|
"LICENSE",
|
||||||
|
"README.md"
|
||||||
|
]
|
||||||
|
}
|
21
packages/libp2p-utils/rollup.config.js
Normal file
21
packages/libp2p-utils/rollup.config.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import commonjs from "@rollup/plugin-commonjs";
|
||||||
|
import json from "@rollup/plugin-json";
|
||||||
|
import { nodeResolve } from "@rollup/plugin-node-resolve";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: {
|
||||||
|
index: "dist/index.js",
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
dir: "bundle",
|
||||||
|
format: "esm",
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
commonjs(),
|
||||||
|
json(),
|
||||||
|
nodeResolve({
|
||||||
|
browser: true,
|
||||||
|
preferBuiltins: false,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
@ -1,8 +1,12 @@
|
|||||||
|
import type { Connection } from "@libp2p/interface-connection";
|
||||||
import type { PeerId } from "@libp2p/interface-peer-id";
|
import type { PeerId } from "@libp2p/interface-peer-id";
|
||||||
|
import type { PeerInfo } from "@libp2p/interface-peer-info";
|
||||||
import type { Peer, PeerStore } from "@libp2p/interface-peer-store";
|
import type { Peer, PeerStore } from "@libp2p/interface-peer-store";
|
||||||
|
import { peerIdFromString } from "@libp2p/peer-id";
|
||||||
|
import type { Multiaddr } from "@multiformats/multiaddr";
|
||||||
import debug from "debug";
|
import debug from "debug";
|
||||||
|
|
||||||
const log = debug("waku:select-peer");
|
const log = debug("waku:libp2p-utils");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a pseudo-random peer that supports the given protocol.
|
* Returns a pseudo-random peer that supports the given protocol.
|
||||||
@ -75,3 +79,40 @@ export async function selectPeerForProtocol(
|
|||||||
|
|
||||||
return { peer, protocol };
|
return { peer, protocol };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function multiaddrsToPeerInfo(mas: Multiaddr[]): PeerInfo[] {
|
||||||
|
return mas
|
||||||
|
.map((ma) => {
|
||||||
|
const peerIdStr = ma.getPeerId();
|
||||||
|
const protocols: string[] = [];
|
||||||
|
return {
|
||||||
|
id: peerIdStr ? peerIdFromString(peerIdStr) : null,
|
||||||
|
multiaddrs: [ma.decapsulateCode(421)],
|
||||||
|
protocols,
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.filter((peerInfo): peerInfo is PeerInfo => peerInfo.id !== null);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function selectConnection(
|
||||||
|
connections: Connection[]
|
||||||
|
): Connection | undefined {
|
||||||
|
if (!connections.length) return;
|
||||||
|
if (connections.length === 1) return connections[0];
|
||||||
|
|
||||||
|
let latestConnection: Connection | undefined;
|
||||||
|
|
||||||
|
connections.forEach((connection) => {
|
||||||
|
if (connection.stat.status === "OPEN") {
|
||||||
|
if (!latestConnection) {
|
||||||
|
latestConnection = connection;
|
||||||
|
} else if (
|
||||||
|
connection.stat.timeline.open > latestConnection.stat.timeline.open
|
||||||
|
) {
|
||||||
|
latestConnection = connection;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return latestConnection;
|
||||||
|
}
|
3
packages/libp2p-utils/tsconfig.dev.json
Normal file
3
packages/libp2p-utils/tsconfig.dev.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.dev"
|
||||||
|
}
|
10
packages/libp2p-utils/tsconfig.json
Normal file
10
packages/libp2p-utils/tsconfig.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "dist/",
|
||||||
|
"rootDir": "src",
|
||||||
|
"tsBuildInfoFile": "dist/.tsbuildinfo"
|
||||||
|
},
|
||||||
|
"include": ["src"],
|
||||||
|
"exclude": ["src/**/*.spec.ts", "src/test_utils"]
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user