mirror of
https://github.com/waku-org/js-waku.git
synced 2025-01-11 21:15:01 +00:00
Merge pull request #1054 from waku-org/feat/protocol-interfaces
This commit is contained in:
commit
2ff4ac16ee
@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- `waitForRemotePeer` must now be directly imported from `@waku/core`.
|
||||
- `V0` suffix removed from the version 0 objects.
|
||||
- `createEncoder`/`createDecoder`/`DecodedMessage` for Waku Message Version 0 (no Waku level encryption) can now be imported directly from `@waku/core`.
|
||||
- Removed `Waku` and `waku_` prefixed on protocol implementations.
|
||||
|
||||
## [@waku/core@0.0.6] - 2022-11-18
|
||||
|
||||
|
@ -13,13 +13,13 @@
|
||||
"types": "./dist/lib/predefined_bootstrap_nodes.d.ts",
|
||||
"import": "./dist/lib/predefined_bootstrap_nodes.js"
|
||||
},
|
||||
"./lib/waku_message/version_0": {
|
||||
"types": "./dist/lib/waku_message/version_0.d.ts",
|
||||
"import": "./dist/lib/waku_message/version_0.js"
|
||||
"./lib/message/version_0": {
|
||||
"types": "./dist/lib/message/version_0.d.ts",
|
||||
"import": "./dist/lib/message/version_0.js"
|
||||
},
|
||||
"./lib/waku_message/topic_only_message": {
|
||||
"types": "./dist/lib/waku_message/topic_only_message.d.ts",
|
||||
"import": "./dist/lib/waku_message/topic_only_message.js"
|
||||
"./lib/message/topic_only_message": {
|
||||
"types": "./dist/lib/message/topic_only_message.d.ts",
|
||||
"import": "./dist/lib/message/topic_only_message.js"
|
||||
}
|
||||
},
|
||||
"typesVersions": {
|
||||
|
@ -6,9 +6,8 @@ export default {
|
||||
input: {
|
||||
index: "dist/index.js",
|
||||
"lib/predefined_bootstrap_nodes": "dist/lib/predefined_bootstrap_nodes.js",
|
||||
"lib/waku_message/version_0": "dist/lib/waku_message/version_0.js",
|
||||
"lib/waku_message/topic_only_message":
|
||||
"dist/lib/waku_message/topic_only_message.js",
|
||||
"lib/message/version_0": "dist/lib/message/version_0.js",
|
||||
"lib/message/topic_only_message": "dist/lib/message/topic_only_message.js",
|
||||
},
|
||||
output: {
|
||||
dir: "bundle",
|
||||
|
@ -5,30 +5,30 @@ export {
|
||||
createEncoder,
|
||||
createDecoder,
|
||||
DecodedMessage,
|
||||
} from "./lib/waku_message/version_0.js";
|
||||
} from "./lib/message/version_0.js";
|
||||
|
||||
export * as waku from "./lib/waku.js";
|
||||
export { WakuNode } from "./lib/waku.js";
|
||||
|
||||
export * as waku_filter from "./lib/waku_filter/index.js";
|
||||
export { wakuFilter } from "./lib/waku_filter/index.js";
|
||||
export * as waku_filter from "./lib/filter/index.js";
|
||||
export { wakuFilter } from "./lib/filter/index.js";
|
||||
|
||||
export * as waku_light_push from "./lib/waku_light_push/index.js";
|
||||
export * as waku_light_push from "./lib/light_push/index.js";
|
||||
export {
|
||||
wakuLightPush,
|
||||
LightPushCodec,
|
||||
PushResponse,
|
||||
} from "./lib/waku_light_push/index.js";
|
||||
} from "./lib/light_push/index.js";
|
||||
|
||||
export * as waku_relay from "./lib/waku_relay/index.js";
|
||||
export { wakuRelay } from "./lib/waku_relay/index.js";
|
||||
export * as waku_relay from "./lib/relay/index.js";
|
||||
export { wakuRelay } from "./lib/relay/index.js";
|
||||
|
||||
export * as waku_store from "./lib/waku_store/index.js";
|
||||
export * as waku_store from "./lib/store/index.js";
|
||||
export {
|
||||
PageDirection,
|
||||
wakuStore,
|
||||
StoreCodec,
|
||||
createCursor,
|
||||
} from "./lib/waku_store/index.js";
|
||||
} from "./lib/store/index.js";
|
||||
|
||||
export { waitForRemotePeer } from "./lib/wait_for_remote_peer.js";
|
||||
|
@ -7,9 +7,9 @@ import type { IncomingStreamData } from "@libp2p/interface-registrar";
|
||||
import type { Registrar } from "@libp2p/interface-registrar";
|
||||
import type {
|
||||
Callback,
|
||||
Filter,
|
||||
IDecodedMessage,
|
||||
IDecoder,
|
||||
IFilter,
|
||||
IMessage,
|
||||
ProtocolOptions,
|
||||
} from "@waku/interfaces";
|
||||
@ -64,7 +64,7 @@ export type UnsubscribeFunction = () => Promise<void>;
|
||||
* - https://github.com/status-im/go-waku/issues/245
|
||||
* - https://github.com/status-im/nwaku/issues/948
|
||||
*/
|
||||
class WakuFilter implements Filter {
|
||||
class Filter implements IFilter {
|
||||
pubSubTopic: string;
|
||||
private subscriptions: Map<string, Callback<any>>;
|
||||
private decoders: Map<
|
||||
@ -308,6 +308,6 @@ class WakuFilter implements Filter {
|
||||
|
||||
export function wakuFilter(
|
||||
init: Partial<CreateOptions> = {}
|
||||
): (components: FilterComponents) => Filter {
|
||||
return (components: FilterComponents) => new WakuFilter(components, init);
|
||||
): (components: FilterComponents) => IFilter {
|
||||
return (components: FilterComponents) => new Filter(components, init);
|
||||
}
|
@ -4,8 +4,8 @@ import type { Peer } from "@libp2p/interface-peer-store";
|
||||
import type { PeerStore } from "@libp2p/interface-peer-store";
|
||||
import type {
|
||||
IEncoder,
|
||||
ILightPush,
|
||||
IMessage,
|
||||
LightPush,
|
||||
ProtocolOptions,
|
||||
SendResult,
|
||||
} from "@waku/interfaces";
|
||||
@ -51,7 +51,7 @@ export interface CreateOptions {
|
||||
/**
|
||||
* Implements the [Waku v2 Light Push protocol](https://rfc.vac.dev/spec/19/).
|
||||
*/
|
||||
class WakuLightPush implements LightPush {
|
||||
class LightPush implements ILightPush {
|
||||
pubSubTopic: string;
|
||||
|
||||
constructor(public components: LightPushComponents, options?: CreateOptions) {
|
||||
@ -151,7 +151,6 @@ class WakuLightPush implements LightPush {
|
||||
|
||||
export function wakuLightPush(
|
||||
init: Partial<CreateOptions> = {}
|
||||
): (components: LightPushComponents) => LightPush {
|
||||
return (components: LightPushComponents) =>
|
||||
new WakuLightPush(components, init);
|
||||
): (components: LightPushComponents) => ILightPush {
|
||||
return (components: LightPushComponents) => new LightPush(components, init);
|
||||
}
|
@ -11,15 +11,15 @@ import type {
|
||||
IDecoder,
|
||||
IEncoder,
|
||||
IMessage,
|
||||
Relay,
|
||||
IRelay,
|
||||
SendResult,
|
||||
} from "@waku/interfaces";
|
||||
import { IDecodedMessage } from "@waku/interfaces";
|
||||
import debug from "debug";
|
||||
|
||||
import { DefaultPubSubTopic } from "../constants.js";
|
||||
import { TopicOnlyDecoder } from "../message/topic_only_message.js";
|
||||
import { pushOrInitMapSet } from "../push_or_init_map.js";
|
||||
import { TopicOnlyDecoder } from "../waku_message/topic_only_message.js";
|
||||
|
||||
import * as constants from "./constants.js";
|
||||
|
||||
@ -53,7 +53,7 @@ export type CreateOptions = {
|
||||
*
|
||||
* @implements {require('libp2p-interfaces/src/pubsub')}
|
||||
*/
|
||||
class WakuRelay extends GossipSub implements Relay {
|
||||
class Relay extends GossipSub implements IRelay {
|
||||
pubSubTopic: string;
|
||||
defaultDecoder: IDecoder<IDecodedMessage>;
|
||||
public static multicodec: string = constants.RelayCodecs[0];
|
||||
@ -185,10 +185,10 @@ class WakuRelay extends GossipSub implements Relay {
|
||||
}
|
||||
}
|
||||
|
||||
WakuRelay.multicodec = constants.RelayCodecs[constants.RelayCodecs.length - 1];
|
||||
Relay.multicodec = constants.RelayCodecs[constants.RelayCodecs.length - 1];
|
||||
|
||||
export function wakuRelay(
|
||||
init: Partial<CreateOptions> = {}
|
||||
): (components: GossipSubComponents) => Relay {
|
||||
return (components: GossipSubComponents) => new WakuRelay(components, init);
|
||||
): (components: GossipSubComponents) => IRelay {
|
||||
return (components: GossipSubComponents) => new Relay(components, init);
|
||||
}
|
@ -9,7 +9,7 @@ import {
|
||||
IDecodedMessage,
|
||||
IDecoder,
|
||||
Index,
|
||||
Store,
|
||||
IStore,
|
||||
} from "@waku/interfaces";
|
||||
import {
|
||||
getPeersForProtocol,
|
||||
@ -104,7 +104,7 @@ export interface QueryOptions {
|
||||
*
|
||||
* The Waku Store protocol can be used to retrieved historical messages.
|
||||
*/
|
||||
class WakuStore implements Store {
|
||||
class Store implements IStore {
|
||||
pubSubTopic: string;
|
||||
|
||||
constructor(public components: StoreComponents, options?: CreateOptions) {
|
||||
@ -432,6 +432,6 @@ export async function createCursor(
|
||||
|
||||
export function wakuStore(
|
||||
init: Partial<CreateOptions> = {}
|
||||
): (components: StoreComponents) => Store {
|
||||
return (components: StoreComponents) => new WakuStore(components, init);
|
||||
): (components: StoreComponents) => IStore {
|
||||
return (components: StoreComponents) => new Store(components, init);
|
||||
}
|
@ -1,13 +1,13 @@
|
||||
import { PeerProtocolsChangeData } from "@libp2p/interface-peer-store";
|
||||
import type { PointToPointProtocol, Relay, Waku } from "@waku/interfaces";
|
||||
import type { IRelay, PointToPointProtocol, Waku } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { PeerExchangeCodec } from "@waku/peer-exchange";
|
||||
import debug from "debug";
|
||||
import { pEvent } from "p-event";
|
||||
|
||||
import { FilterCodec } from "./waku_filter/index.js";
|
||||
import { LightPushCodec } from "./waku_light_push/index.js";
|
||||
import { StoreCodec } from "./waku_store/index.js";
|
||||
import { FilterCodec } from "./filter/index.js";
|
||||
import { LightPushCodec } from "./light_push/index.js";
|
||||
import { StoreCodec } from "./store/index.js";
|
||||
|
||||
const log = debug("waku:wait-for-remote-peer");
|
||||
|
||||
@ -117,7 +117,7 @@ async function waitForConnectedPeer(
|
||||
* Wait for a peer with the given protocol to be connected and in the gossipsub
|
||||
* mesh.
|
||||
*/
|
||||
async function waitForGossipSubPeerInMesh(waku: Relay): Promise<void> {
|
||||
async function waitForGossipSubPeerInMesh(waku: IRelay): Promise<void> {
|
||||
let peers = waku.getMeshPeers();
|
||||
|
||||
while (peers.length == 0) {
|
||||
|
@ -3,12 +3,12 @@ import type { PeerId } from "@libp2p/interface-peer-id";
|
||||
import type { PubSub } from "@libp2p/interface-pubsub";
|
||||
import type { Multiaddr } from "@multiformats/multiaddr";
|
||||
import type {
|
||||
Filter,
|
||||
LightPush,
|
||||
PeerExchange,
|
||||
IFilter,
|
||||
ILightPush,
|
||||
IPeerExchange,
|
||||
IRelay,
|
||||
IStore,
|
||||
PeerExchangeComponents,
|
||||
Relay,
|
||||
Store,
|
||||
Waku,
|
||||
} from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
@ -16,15 +16,12 @@ import { PeerExchangeCodec } from "@waku/peer-exchange";
|
||||
import debug from "debug";
|
||||
import type { Libp2p } from "libp2p";
|
||||
|
||||
import { FilterCodec, FilterComponents } from "./waku_filter/index.js";
|
||||
import {
|
||||
LightPushCodec,
|
||||
LightPushComponents,
|
||||
} from "./waku_light_push/index.js";
|
||||
import { createEncoder } from "./waku_message/version_0.js";
|
||||
import * as relayConstants from "./waku_relay/constants.js";
|
||||
import { RelayCodecs, RelayPingContentTopic } from "./waku_relay/constants.js";
|
||||
import { StoreCodec, StoreComponents } from "./waku_store/index.js";
|
||||
import { FilterCodec, FilterComponents } from "./filter/index.js";
|
||||
import { LightPushCodec, LightPushComponents } from "./light_push/index.js";
|
||||
import { createEncoder } from "./message/version_0.js";
|
||||
import * as relayConstants from "./relay/constants.js";
|
||||
import { RelayCodecs, RelayPingContentTopic } from "./relay/constants.js";
|
||||
import { StoreCodec, StoreComponents } from "./store/index.js";
|
||||
|
||||
export const DefaultPingKeepAliveValueSecs = 0;
|
||||
export const DefaultRelayKeepAliveValueSecs = 5 * 60;
|
||||
@ -56,11 +53,11 @@ export interface WakuOptions {
|
||||
|
||||
export class WakuNode implements Waku {
|
||||
public libp2p: Libp2p;
|
||||
public relay?: Relay;
|
||||
public store?: Store;
|
||||
public filter?: Filter;
|
||||
public lightPush?: LightPush;
|
||||
public peerExchange?: PeerExchange;
|
||||
public relay?: IRelay;
|
||||
public store?: IStore;
|
||||
public filter?: IFilter;
|
||||
public lightPush?: ILightPush;
|
||||
public peerExchange?: IPeerExchange;
|
||||
|
||||
private pingKeepAliveTimers: {
|
||||
[peer: string]: ReturnType<typeof setInterval>;
|
||||
@ -72,10 +69,10 @@ export class WakuNode implements Waku {
|
||||
constructor(
|
||||
options: WakuOptions,
|
||||
libp2p: Libp2p,
|
||||
store?: (components: StoreComponents) => Store,
|
||||
lightPush?: (components: LightPushComponents) => LightPush,
|
||||
filter?: (components: FilterComponents) => Filter,
|
||||
peerExchange?: (components: PeerExchangeComponents) => PeerExchange
|
||||
store?: (components: StoreComponents) => IStore,
|
||||
lightPush?: (components: LightPushComponents) => ILightPush,
|
||||
filter?: (components: FilterComponents) => IFilter,
|
||||
peerExchange?: (components: PeerExchangeComponents) => IPeerExchange
|
||||
) {
|
||||
this.libp2p = libp2p;
|
||||
|
||||
@ -274,7 +271,7 @@ export class WakuNode implements Waku {
|
||||
}
|
||||
}
|
||||
|
||||
function isRelay(pubsub: PubSub): pubsub is Relay {
|
||||
function isRelay(pubsub: PubSub): pubsub is IRelay {
|
||||
if (pubsub) {
|
||||
try {
|
||||
return pubsub.multicodecs.includes(
|
||||
|
24
packages/create/CHANGELOG.md
Normal file
24
packages/create/CHANGELOG.md
Normal file
@ -0,0 +1,24 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- Renamed `createPrivacyNode` to `createRelayNode`.
|
||||
|
||||
## [0.0.4] - 2022-11-18
|
||||
|
||||
### Added
|
||||
|
||||
- Alpha version of `@waku/create`.
|
||||
|
||||
[unreleased]: https://github.com/waku-org/js-waku/compare/@waku/create@0.0.4...HEAD
|
||||
[0.0.4]: https://github.com/waku-org/js-waku/compare/@waku/create@0.0.3...@waku/create@0.0.4
|
||||
[0.0.3]: https://github.com/waku-org/js-waku/compare/@waku/create@0.0.2...%40waku/create@0.0.3
|
||||
[0.0.2]: https://github.com/waku-org/js-waku/compare/@waku/create@0.0.1...%40waku/create@0.0.2
|
||||
[0.0.1]: https://github.com/status-im/js-waku/compare/a20b7809d61ff9a9732aba82b99bbe99f229b935...%40waku/create%400.0.2
|
@ -15,7 +15,7 @@ import {
|
||||
} from "@waku/core";
|
||||
import { DefaultUserAgent } from "@waku/core";
|
||||
import { getPredefinedBootstrapNodes } from "@waku/core/lib/predefined_bootstrap_nodes";
|
||||
import type { Relay, WakuFull, WakuLight, WakuPrivacy } from "@waku/interfaces";
|
||||
import type { FullNode, IRelay, LightNode, RelayNode } from "@waku/interfaces";
|
||||
import { wakuPeerExchange } from "@waku/peer-exchange";
|
||||
import type { Libp2p } from "libp2p";
|
||||
import { createLibp2p, Libp2pOptions } from "libp2p";
|
||||
@ -69,7 +69,7 @@ export interface CreateOptions {
|
||||
*/
|
||||
export async function createLightNode(
|
||||
options?: CreateOptions & WakuOptions
|
||||
): Promise<WakuLight> {
|
||||
): Promise<LightNode> {
|
||||
const libp2pOptions = options?.libp2p ?? {};
|
||||
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
|
||||
if (options?.defaultBootstrap) {
|
||||
@ -95,16 +95,16 @@ export async function createLightNode(
|
||||
lightPush,
|
||||
filter,
|
||||
peerExchange
|
||||
) as WakuLight;
|
||||
) as LightNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Waku node that uses Waku Relay to send and receive messages,
|
||||
* enabling some privacy preserving properties.
|
||||
*/
|
||||
export async function createPrivacyNode(
|
||||
export async function createRelayNode(
|
||||
options?: CreateOptions & WakuOptions & Partial<RelayCreateOptions>
|
||||
): Promise<WakuPrivacy> {
|
||||
): Promise<RelayNode> {
|
||||
const libp2pOptions = options?.libp2p ?? {};
|
||||
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
|
||||
if (options?.defaultBootstrap) {
|
||||
@ -118,7 +118,7 @@ export async function createPrivacyNode(
|
||||
options?.userAgent
|
||||
);
|
||||
|
||||
return new WakuNode(options ?? {}, libp2p) as WakuPrivacy;
|
||||
return new WakuNode(options ?? {}, libp2p) as RelayNode;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,7 +136,7 @@ export async function createPrivacyNode(
|
||||
*/
|
||||
export async function createFullNode(
|
||||
options?: CreateOptions & WakuOptions & Partial<RelayCreateOptions>
|
||||
): Promise<WakuFull> {
|
||||
): Promise<FullNode> {
|
||||
const libp2pOptions = options?.libp2p ?? {};
|
||||
const peerDiscovery = libp2pOptions.peerDiscovery ?? [];
|
||||
if (options?.defaultBootstrap) {
|
||||
@ -162,7 +162,7 @@ export async function createFullNode(
|
||||
lightPush,
|
||||
filter,
|
||||
peerExchange
|
||||
) as WakuFull;
|
||||
) as FullNode;
|
||||
}
|
||||
|
||||
export function defaultPeerDiscovery(): (
|
||||
@ -172,7 +172,7 @@ export function defaultPeerDiscovery(): (
|
||||
}
|
||||
|
||||
export async function defaultLibp2p(
|
||||
wakuRelay?: (components: Libp2pComponents) => Relay,
|
||||
wakuRelay?: (components: Libp2pComponents) => IRelay,
|
||||
options?: Partial<Libp2pOptions>,
|
||||
userAgent?: string
|
||||
): Promise<Libp2p> {
|
||||
|
27
packages/interfaces/CHANGELOG.md
Normal file
27
packages/interfaces/CHANGELOG.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- Add `I` prefix to protocol and messages interfaces.
|
||||
- Renamed node interfaces to include `Node`.
|
||||
- Renamed `WakuPrivacy` to `RelayNode`.
|
||||
|
||||
## [0.0.5] - 2022-11-18
|
||||
|
||||
### Added
|
||||
|
||||
- Alpha version of `@waku/interfaces`.
|
||||
|
||||
[unreleased]: https://github.com/waku-org/js-waku/compare/@waku/interfaces@0.0.5...HEAD
|
||||
[0.0.5]: https://github.com/waku-org/js-waku/compare/@waku/interfaces@0.0.4...@waku/interfaces@0.0.5
|
||||
[0.0.4]: https://github.com/waku-org/js-waku/compare/@waku/interfaces@0.0.3...@waku/interfaces@0.0.4
|
||||
[0.0.3]: https://github.com/waku-org/js-waku/compare/@waku/interfaces@0.0.2...%40waku/create@0.0.3
|
||||
[0.0.2]: https://github.com/waku-org/js-waku/compare/@waku/interfaces@0.0.1...%40waku/create@0.0.2
|
||||
[0.0.1]: https://github.com/status-im/js-waku/compare/a20b7809d61ff9a9732aba82b99bbe99f229b935...%40waku/create%400.0.2
|
@ -5,7 +5,7 @@ import type {
|
||||
ProtocolOptions,
|
||||
} from "./protocols.js";
|
||||
|
||||
export interface Filter extends PointToPointProtocol {
|
||||
export interface IFilter extends PointToPointProtocol {
|
||||
subscribe: <T extends IDecodedMessage>(
|
||||
decoders: IDecoder<T>[],
|
||||
callback: Callback<T>,
|
||||
|
@ -5,7 +5,7 @@ import type {
|
||||
SendResult,
|
||||
} from "./protocols.js";
|
||||
|
||||
export interface LightPush extends PointToPointProtocol {
|
||||
export interface ILightPush extends PointToPointProtocol {
|
||||
push: (
|
||||
encoder: IEncoder,
|
||||
message: IMessage,
|
||||
|
@ -5,7 +5,7 @@ import { ENR } from "@waku/enr";
|
||||
|
||||
import { PointToPointProtocol } from "./protocols.js";
|
||||
|
||||
export interface PeerExchange extends PointToPointProtocol {
|
||||
export interface IPeerExchange extends PointToPointProtocol {
|
||||
query(
|
||||
params: PeerExchangeQueryParams,
|
||||
callback: (response: PeerExchangeResponse) => Promise<void> | void
|
||||
|
@ -8,7 +8,7 @@ import type {
|
||||
} from "./message.js";
|
||||
import type { Callback, SendResult } from "./protocols.js";
|
||||
|
||||
export interface Relay extends GossipSub {
|
||||
export interface IRelay extends GossipSub {
|
||||
send: (encoder: IEncoder, message: IMessage) => Promise<SendResult>;
|
||||
addObserver: <T extends IDecodedMessage>(
|
||||
decoder: IDecoder<T>,
|
||||
|
@ -50,7 +50,7 @@ export type StoreQueryOptions = {
|
||||
cursor?: Cursor;
|
||||
} & ProtocolOptions;
|
||||
|
||||
export interface Store extends PointToPointProtocol {
|
||||
export interface IStore extends PointToPointProtocol {
|
||||
queryOrderedCallback: <T extends IDecodedMessage>(
|
||||
decoders: IDecoder<T>[],
|
||||
callback: (message: T) => Promise<void | boolean> | boolean | void,
|
||||
|
@ -3,20 +3,20 @@ import type { PeerId } from "@libp2p/interface-peer-id";
|
||||
import type { Multiaddr } from "@multiformats/multiaddr";
|
||||
import type { Libp2p } from "libp2p";
|
||||
|
||||
import type { Filter } from "./filter.js";
|
||||
import type { LightPush } from "./light_push.js";
|
||||
import type { PeerExchange } from "./peer_exchange.js";
|
||||
import type { IFilter } from "./filter.js";
|
||||
import type { ILightPush } from "./light_push.js";
|
||||
import type { IPeerExchange } from "./peer_exchange.js";
|
||||
import { Protocols } from "./protocols.js";
|
||||
import type { Relay } from "./relay.js";
|
||||
import type { Store } from "./store.js";
|
||||
import type { IRelay } from "./relay.js";
|
||||
import type { IStore } from "./store.js";
|
||||
|
||||
export interface Waku {
|
||||
libp2p: Libp2p;
|
||||
relay?: Relay;
|
||||
store?: Store;
|
||||
filter?: Filter;
|
||||
lightPush?: LightPush;
|
||||
peerExchange?: PeerExchange;
|
||||
relay?: IRelay;
|
||||
store?: IStore;
|
||||
filter?: IFilter;
|
||||
lightPush?: ILightPush;
|
||||
peerExchange?: IPeerExchange;
|
||||
|
||||
dial(peer: PeerId | Multiaddr, protocols?: Protocols[]): Promise<Stream>;
|
||||
|
||||
@ -27,26 +27,26 @@ export interface Waku {
|
||||
isStarted(): boolean;
|
||||
}
|
||||
|
||||
export interface WakuLight extends Waku {
|
||||
export interface LightNode extends Waku {
|
||||
relay: undefined;
|
||||
store: Store;
|
||||
filter: Filter;
|
||||
lightPush: LightPush;
|
||||
peerExchange: PeerExchange;
|
||||
store: IStore;
|
||||
filter: IFilter;
|
||||
lightPush: ILightPush;
|
||||
peerExchange: IPeerExchange;
|
||||
}
|
||||
|
||||
export interface WakuPrivacy extends Waku {
|
||||
relay: Relay;
|
||||
export interface RelayNode extends Waku {
|
||||
relay: IRelay;
|
||||
store: undefined;
|
||||
filter: undefined;
|
||||
lightPush: undefined;
|
||||
peerExchange: undefined;
|
||||
}
|
||||
|
||||
export interface WakuFull extends Waku {
|
||||
relay: Relay;
|
||||
store: Store;
|
||||
filter: Filter;
|
||||
lightPush: LightPush;
|
||||
peerExchange: PeerExchange;
|
||||
export interface FullNode extends Waku {
|
||||
relay: IRelay;
|
||||
store: IStore;
|
||||
filter: IFilter;
|
||||
lightPush: ILightPush;
|
||||
peerExchange: IPeerExchange;
|
||||
}
|
||||
|
@ -1,7 +1,4 @@
|
||||
import {
|
||||
Decoder as DecoderV0,
|
||||
proto,
|
||||
} from "@waku/core/lib/waku_message/version_0";
|
||||
import { Decoder as DecoderV0, proto } from "@waku/core/lib/message/version_0";
|
||||
import type {
|
||||
IDecoder,
|
||||
IEncoder,
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {
|
||||
DecodedMessage as DecodedMessageV0,
|
||||
proto,
|
||||
} from "@waku/core/lib/waku_message/version_0";
|
||||
} from "@waku/core/lib/message/version_0";
|
||||
import type { IDecodedMessage } from "@waku/interfaces";
|
||||
|
||||
import {
|
||||
|
@ -1,7 +1,4 @@
|
||||
import {
|
||||
Decoder as DecoderV0,
|
||||
proto,
|
||||
} from "@waku/core/lib/waku_message/version_0";
|
||||
import { Decoder as DecoderV0, proto } from "@waku/core/lib/message/version_0";
|
||||
import type {
|
||||
IDecoder,
|
||||
IEncoder,
|
||||
|
@ -4,7 +4,7 @@ import type { Peer, PeerStore } from "@libp2p/interface-peer-store";
|
||||
import type { IncomingStreamData } from "@libp2p/interface-registrar";
|
||||
import { ENR } from "@waku/enr";
|
||||
import type {
|
||||
PeerExchange,
|
||||
IPeerExchange,
|
||||
PeerExchangeComponents,
|
||||
PeerExchangeQueryParams,
|
||||
PeerExchangeResponse,
|
||||
@ -26,7 +26,7 @@ export const PeerExchangeCodec = "/vac/waku/peer-exchange/2.0.0-alpha1";
|
||||
|
||||
const log = debug("waku:peer-exchange");
|
||||
|
||||
export class WakuPeerExchange implements PeerExchange {
|
||||
export class WakuPeerExchange implements IPeerExchange {
|
||||
private callback:
|
||||
| ((response: PeerExchangeResponse) => Promise<void>)
|
||||
| undefined;
|
||||
|
@ -1,14 +1,14 @@
|
||||
import { waitForRemotePeer } from "@waku/core";
|
||||
import { createPrivacyNode } from "@waku/create";
|
||||
import { createRelayNode } from "@waku/create";
|
||||
import { ENR } from "@waku/enr";
|
||||
import type { WakuPrivacy } from "@waku/interfaces";
|
||||
import type { RelayNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { expect } from "chai";
|
||||
|
||||
import { makeLogFileName, NOISE_KEY_1, Nwaku } from "../src/index.js";
|
||||
|
||||
describe("ENR Interop: nwaku", function () {
|
||||
let waku: WakuPrivacy;
|
||||
let waku: RelayNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
@ -27,7 +27,7 @@ describe("ENR Interop: nwaku", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku = await createPrivacyNode({
|
||||
waku = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku.start();
|
||||
@ -59,7 +59,7 @@ describe("ENR Interop: nwaku", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku = await createPrivacyNode({
|
||||
waku = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku.start();
|
||||
@ -91,7 +91,7 @@ describe("ENR Interop: nwaku", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku = await createPrivacyNode({
|
||||
waku = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku.start();
|
||||
|
@ -7,7 +7,7 @@ import {
|
||||
} from "@waku/core";
|
||||
import { createLightNode } from "@waku/create";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import type { WakuLight } from "@waku/interfaces";
|
||||
import type { LightNode } from "@waku/interfaces";
|
||||
import {
|
||||
createDecoder as eciesDecoder,
|
||||
createEncoder as eciesEncoder,
|
||||
@ -37,7 +37,7 @@ const TestEncoder = createEncoder(TestContentTopic);
|
||||
const TestDecoder = createDecoder(TestContentTopic);
|
||||
|
||||
describe("Waku Message Ephemeral field", () => {
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
|
@ -6,7 +6,7 @@ import {
|
||||
waitForRemotePeer,
|
||||
} from "@waku/core";
|
||||
import { createLightNode } from "@waku/create";
|
||||
import type { WakuLight } from "@waku/interfaces";
|
||||
import type { LightNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { expect } from "chai";
|
||||
import debug from "debug";
|
||||
@ -20,7 +20,7 @@ const TestEncoder = createEncoder(TestContentTopic);
|
||||
const TestDecoder = createDecoder(TestContentTopic);
|
||||
|
||||
describe("Waku Filter", () => {
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { bytesToUtf8, utf8ToBytes } from "@waku/byte-utils";
|
||||
import { createEncoder, waitForRemotePeer } from "@waku/core";
|
||||
import { createLightNode } from "@waku/create";
|
||||
import type { WakuLight } from "@waku/interfaces";
|
||||
import type { LightNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { expect } from "chai";
|
||||
import debug from "debug";
|
||||
@ -20,7 +20,7 @@ const TestContentTopic = "/test/1/waku-light-push/utf8";
|
||||
const TestEncoder = createEncoder(TestContentTopic);
|
||||
|
||||
describe("Waku Light Push [node only]", () => {
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
|
@ -5,12 +5,12 @@ import {
|
||||
getPredefinedBootstrapNodes,
|
||||
} from "@waku/core/lib/predefined_bootstrap_nodes";
|
||||
import { createLightNode } from "@waku/create";
|
||||
import type { PeerExchangeResponse, WakuFull } from "@waku/interfaces";
|
||||
import type { LightNode, PeerExchangeResponse } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { expect } from "chai";
|
||||
|
||||
describe("Peer Exchange: Node", () => {
|
||||
let waku: WakuFull;
|
||||
let waku: LightNode;
|
||||
afterEach(async function () {
|
||||
!!waku && waku.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||
});
|
||||
|
@ -7,8 +7,8 @@ import {
|
||||
DefaultPubSubTopic,
|
||||
waitForRemotePeer,
|
||||
} from "@waku/core";
|
||||
import { createPrivacyNode } from "@waku/create";
|
||||
import type { WakuPrivacy } from "@waku/interfaces";
|
||||
import { createRelayNode } from "@waku/create";
|
||||
import type { RelayNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import {
|
||||
createDecoder as createEciesDecoder,
|
||||
@ -50,17 +50,17 @@ describe("Waku Relay [node only]", () => {
|
||||
}
|
||||
});
|
||||
|
||||
let waku1: WakuPrivacy;
|
||||
let waku2: WakuPrivacy;
|
||||
let waku1: RelayNode;
|
||||
let waku2: RelayNode;
|
||||
beforeEach(async function () {
|
||||
this.timeout(10000);
|
||||
|
||||
log("Starting JS Waku instances");
|
||||
[waku1, waku2] = await Promise.all([
|
||||
createPrivacyNode({ staticNoiseKey: NOISE_KEY_1 }).then((waku) =>
|
||||
createRelayNode({ staticNoiseKey: NOISE_KEY_1 }).then((waku) =>
|
||||
waku.start().then(() => waku)
|
||||
),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_2,
|
||||
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } },
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
@ -250,9 +250,9 @@ describe("Waku Relay [node only]", () => {
|
||||
});
|
||||
|
||||
describe("Custom pubsub topic", () => {
|
||||
let waku1: WakuPrivacy;
|
||||
let waku2: WakuPrivacy;
|
||||
let waku3: WakuPrivacy;
|
||||
let waku1: RelayNode;
|
||||
let waku2: RelayNode;
|
||||
let waku3: RelayNode;
|
||||
afterEach(async function () {
|
||||
!!waku1 &&
|
||||
waku1.stop().catch((e) => console.log("Waku failed to stop", e));
|
||||
@ -270,16 +270,16 @@ describe("Waku Relay [node only]", () => {
|
||||
// 1 and 2 uses a custom pubsub
|
||||
// 3 uses the default pubsub
|
||||
[waku1, waku2, waku3] = await Promise.all([
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
pubSubTopic: pubSubTopic,
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
pubSubTopic: pubSubTopic,
|
||||
staticNoiseKey: NOISE_KEY_2,
|
||||
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } },
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_3,
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
]);
|
||||
@ -331,12 +331,12 @@ describe("Waku Relay [node only]", () => {
|
||||
});
|
||||
|
||||
describe("Interop: nwaku", function () {
|
||||
let waku: WakuPrivacy;
|
||||
let waku: RelayNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
beforeEach(async function () {
|
||||
this.timeout(30_000);
|
||||
waku = await createPrivacyNode({
|
||||
waku = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku.start();
|
||||
@ -416,8 +416,8 @@ describe("Waku Relay [node only]", () => {
|
||||
});
|
||||
|
||||
describe.skip("Two nodes connected to nwaku", function () {
|
||||
let waku1: WakuPrivacy;
|
||||
let waku2: WakuPrivacy;
|
||||
let waku1: RelayNode;
|
||||
let waku2: RelayNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
@ -431,11 +431,11 @@ describe("Waku Relay [node only]", () => {
|
||||
it("Js publishes, other Js receives", async function () {
|
||||
this.timeout(60_000);
|
||||
[waku1, waku2] = await Promise.all([
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
emitSelf: true,
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_2,
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
]);
|
||||
|
@ -7,7 +7,7 @@ import {
|
||||
waitForRemotePeer,
|
||||
} from "@waku/core";
|
||||
import { createLightNode } from "@waku/create";
|
||||
import type { IDecodedMessage, IMessage, WakuLight } from "@waku/interfaces";
|
||||
import type { IDecodedMessage, IMessage, LightNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import {
|
||||
createDecoder as createEciesDecoder,
|
||||
@ -38,7 +38,7 @@ const TestEncoder = createEncoder(TestContentTopic);
|
||||
const TestDecoder = createDecoder(TestContentTopic);
|
||||
|
||||
describe("Waku Store", () => {
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
beforeEach(async function () {
|
||||
@ -559,7 +559,7 @@ describe("Waku Store", () => {
|
||||
|
||||
describe("Waku Store, custom pubsub topic", () => {
|
||||
const customPubSubTopic = "/waku/2/custom-dapp/proto";
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
beforeEach(async function () {
|
||||
|
@ -1,14 +1,14 @@
|
||||
import { waitForRemotePeer } from "@waku/core";
|
||||
import { createLightNode, createPrivacyNode } from "@waku/create";
|
||||
import type { WakuLight, WakuPrivacy } from "@waku/interfaces";
|
||||
import { createLightNode, createRelayNode } from "@waku/create";
|
||||
import type { LightNode, RelayNode } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import { expect } from "chai";
|
||||
|
||||
import { delay, makeLogFileName, NOISE_KEY_1, Nwaku } from "../src/index.js";
|
||||
|
||||
describe("Wait for remote peer", function () {
|
||||
let waku1: WakuPrivacy;
|
||||
let waku2: WakuLight;
|
||||
let waku1: RelayNode;
|
||||
let waku2: LightNode;
|
||||
let nwaku: Nwaku | undefined;
|
||||
|
||||
afterEach(async function () {
|
||||
@ -31,7 +31,7 @@ describe("Wait for remote peer", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku1 = await createPrivacyNode({
|
||||
waku1 = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku1.start();
|
||||
@ -56,7 +56,7 @@ describe("Wait for remote peer", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku1 = await createPrivacyNode({
|
||||
waku1 = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku1.start();
|
||||
@ -75,7 +75,7 @@ describe("Wait for remote peer", function () {
|
||||
|
||||
it("Relay - times out", function (done) {
|
||||
this.timeout(5000);
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
})
|
||||
.then((waku1) => waku1.start().then(() => waku1))
|
||||
@ -253,7 +253,7 @@ describe("Wait for remote peer", function () {
|
||||
});
|
||||
const multiAddrWithId = await nwaku.getMultiaddrWithId();
|
||||
|
||||
waku1 = await createPrivacyNode({
|
||||
waku1 = await createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
});
|
||||
await waku1.start();
|
||||
|
@ -6,8 +6,8 @@ import {
|
||||
DefaultUserAgent,
|
||||
waitForRemotePeer,
|
||||
} from "@waku/core";
|
||||
import { createLightNode, createPrivacyNode } from "@waku/create";
|
||||
import type { Waku, WakuLight, WakuPrivacy } from "@waku/interfaces";
|
||||
import { createLightNode, createRelayNode } from "@waku/create";
|
||||
import type { LightNode, RelayNode, Waku } from "@waku/interfaces";
|
||||
import { Protocols } from "@waku/interfaces";
|
||||
import {
|
||||
createDecoder,
|
||||
@ -62,7 +62,7 @@ describe("Waku Dial [node only]", function () {
|
||||
});
|
||||
|
||||
describe("Bootstrap", function () {
|
||||
let waku: WakuLight;
|
||||
let waku: LightNode;
|
||||
let nwaku: Nwaku;
|
||||
|
||||
afterEach(async function () {
|
||||
@ -134,15 +134,15 @@ describe("Decryption Keys", () => {
|
||||
}
|
||||
});
|
||||
|
||||
let waku1: WakuPrivacy;
|
||||
let waku2: WakuPrivacy;
|
||||
let waku1: RelayNode;
|
||||
let waku2: RelayNode;
|
||||
beforeEach(async function () {
|
||||
this.timeout(5000);
|
||||
[waku1, waku2] = await Promise.all([
|
||||
createPrivacyNode({ staticNoiseKey: NOISE_KEY_1 }).then((waku) =>
|
||||
createRelayNode({ staticNoiseKey: NOISE_KEY_1 }).then((waku) =>
|
||||
waku.start().then(() => waku)
|
||||
),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_2,
|
||||
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } },
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
@ -210,11 +210,11 @@ describe("User Agent", () => {
|
||||
const waku1UserAgent = "test-user-agent";
|
||||
|
||||
[waku1, waku2] = await Promise.all([
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_1,
|
||||
userAgent: waku1UserAgent,
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
createPrivacyNode({
|
||||
createRelayNode({
|
||||
staticNoiseKey: NOISE_KEY_2,
|
||||
libp2p: { addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] } },
|
||||
}).then((waku) => waku.start().then(() => waku)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user