mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-05-08 11:19:43 +00:00
* feat: implement LightPush v3 protocol support Add comprehensive LightPush v3 protocol implementation with: Core Features: - LightPush v3 protocol codec and multicodec detection - Status code-based error handling and validation - Protocol version inference and compatibility layers - Enhanced error types with detailed failure information Protocol Support: - Automatic v3/v2 protocol negotiation and fallback - Status code mapping to LightPush error types - Protocol version tracking in SDK results - Mixed protocol environment support Testing Infrastructure: - Comprehensive v3 error code handling tests - Mock functions for v3/v2 response scenarios - Protocol version detection and validation tests - Backward compatibility verification Implementation Details: - Clean separation between v2 and v3 response handling - Type-safe status code validation with isSuccess helper - Enhanced failure reporting with protocol version context - Proper error propagation through SDK layers This implementation maintains full backward compatibility with v2 while providing enhanced functionality for v3 protocol features. * feat: handle both light push protocols * fix: unsubscribe test * feat: consolidate lpv2/v3 types * feat(tests): bump nwaku to 0.36.0 * fix: remove extraneous exports * fix: add delay to tests * fix: remove protocol result types * feat: consolidate light push codec branching * fix: revert nwaku image * fix: remove multicodec * fix: remove protocolversion * feat: simplify v2/v3 branching logic to use two stream managers * fix: remove unused utils * fix: remove comments * fix: revert store test * fix: cleanup lightpush sdk * fix: remove unused util * fix: remove unused exports * fix: rename file from public to protocol_handler * fix: use proper type for sdk result * fix: update return types in filter * fix: rebase against latest master * fix: use both lightpush codecs when waiting for peer * fix: handle both lp codecs * fix: remove unused code * feat: use array for multicodec fields * fix: add timestamp if missing in v3 rpc * fix: resolve on either lp codec when waiting for peer * fix: remove unused util * fix: remove unnecessary abstraction * feat: accept nwaku docker image as arg, test lp backwards compat * fix: revert filter error * feat: add legacy flag to enable lightpushv2 only * Revert "feat: accept nwaku docker image as arg, test lp backwards compat" This reverts commit 857e12cbc73305e5c51abd057665bd34708b2737. * fix: remove unused test * feat: improve lp3 (#2597) * improve light push core * move back to singualar multicodec property, enable array prop only for light push * implement v2/v3 interop e2e test, re-add useLegacy flag, ensure e2e runs for v2 and v3 * fix v2 v3 condition * generate message package earlier * add log, fix condition --------- Co-authored-by: Sasha <118575614+weboko@users.noreply.github.com> Co-authored-by: Sasha <oleksandr@status.im>
84 lines
2.4 KiB
TypeScript
84 lines
2.4 KiB
TypeScript
import { LightNode } from "@waku/interfaces";
|
|
import { createLightNode, utf8ToBytes } from "@waku/sdk";
|
|
import { expect } from "chai";
|
|
|
|
import {
|
|
afterEachCustom,
|
|
beforeEachCustom,
|
|
NOISE_KEY_2,
|
|
runMultipleNodes,
|
|
ServiceNodesFleet,
|
|
teardownNodesWithRedundancy
|
|
} from "../../src/index.js";
|
|
import { DEFAULT_DISCOVERIES_ENABLED } from "../../src/lib/runNodes.js";
|
|
|
|
import { TestContentTopic, TestEncoder, TestRoutingInfo } from "./utils.js";
|
|
|
|
describe(`Waku Light Push V2 and V3 interop`, function () {
|
|
this.timeout(15000);
|
|
let waku: LightNode;
|
|
let waku2: LightNode;
|
|
let serviceNodes: ServiceNodesFleet;
|
|
|
|
beforeEachCustom(this, async () => {
|
|
[serviceNodes, waku] = await runMultipleNodes(
|
|
this.ctx,
|
|
TestRoutingInfo,
|
|
{ lightpush: true, filter: true, relay: true },
|
|
true,
|
|
2,
|
|
true
|
|
);
|
|
|
|
waku2 = await createLightNode({
|
|
staticNoiseKey: NOISE_KEY_2,
|
|
libp2p: {
|
|
addresses: { listen: ["/ip4/0.0.0.0/tcp/0/ws"] }
|
|
},
|
|
networkConfig: TestRoutingInfo.networkConfig,
|
|
lightPush: { numPeersToUse: 1 },
|
|
discovery: DEFAULT_DISCOVERIES_ENABLED
|
|
});
|
|
|
|
await waku2.dial(await serviceNodes.nodes[1].getMultiaddrWithId());
|
|
});
|
|
|
|
afterEachCustom(this, async () => {
|
|
await teardownNodesWithRedundancy(serviceNodes, [waku, waku2]);
|
|
});
|
|
|
|
it(`Push messages througth V2 and V3 from 2 js-waku and receives`, async function () {
|
|
let pushResponse = await waku.lightPush.send(
|
|
TestEncoder,
|
|
{
|
|
payload: utf8ToBytes("v2")
|
|
},
|
|
{ useLegacy: true }
|
|
);
|
|
expect(pushResponse.successes.length).to.eq(2);
|
|
|
|
expect(await serviceNodes.messageCollector.waitForMessages(1)).to.eq(true);
|
|
serviceNodes.messageCollector.verifyReceivedMessage(0, {
|
|
expectedMessageText: "v2",
|
|
expectedContentTopic: TestContentTopic,
|
|
expectedPubsubTopic: TestRoutingInfo.pubsubTopic
|
|
});
|
|
|
|
pushResponse = await waku2.lightPush.send(
|
|
TestEncoder,
|
|
{
|
|
payload: utf8ToBytes("v3")
|
|
},
|
|
{ useLegacy: false }
|
|
);
|
|
expect(pushResponse.successes.length).to.eq(1);
|
|
|
|
expect(await serviceNodes.messageCollector.waitForMessages(1)).to.eq(true);
|
|
serviceNodes.messageCollector.verifyReceivedMessage(0, {
|
|
expectedMessageText: "v3",
|
|
expectedContentTopic: TestContentTopic,
|
|
expectedPubsubTopic: TestRoutingInfo.pubsubTopic
|
|
});
|
|
});
|
|
});
|