mirror of
https://github.com/logos-messaging/js-waku.git
synced 2026-01-04 23:03:07 +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>
57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { IEncoder, IMessage } from "./message.js";
|
|
import { LightPushSDKResult } from "./protocols.js";
|
|
import type { ISendOptions } from "./sender.js";
|
|
|
|
export type LightPushProtocolOptions = ISendOptions & {
|
|
/**
|
|
* The interval in milliseconds to wait before retrying a failed push.
|
|
* @default 1000
|
|
*/
|
|
retryIntervalMs: number;
|
|
|
|
/**
|
|
* Number of peers to send message to.
|
|
*
|
|
* @default 1
|
|
*/
|
|
numPeersToUse?: number;
|
|
};
|
|
|
|
export type ILightPush = {
|
|
readonly multicodec: string[];
|
|
start: () => void;
|
|
stop: () => void;
|
|
send: (
|
|
encoder: IEncoder,
|
|
message: IMessage,
|
|
options?: ISendOptions
|
|
) => Promise<LightPushSDKResult>;
|
|
};
|
|
|
|
export enum LightPushStatusCode {
|
|
SUCCESS = 200,
|
|
BAD_REQUEST = 400,
|
|
PAYLOAD_TOO_LARGE = 413,
|
|
INVALID_MESSAGE = 420,
|
|
UNSUPPORTED_TOPIC = 421,
|
|
TOO_MANY_REQUESTS = 429,
|
|
INTERNAL_ERROR = 500,
|
|
UNAVAILABLE = 503,
|
|
NO_RLN_PROOF = 504,
|
|
NO_PEERS = 505
|
|
}
|
|
|
|
export const StatusDescriptions: Record<LightPushStatusCode, string> = {
|
|
[LightPushStatusCode.SUCCESS]: "Message sent successfully",
|
|
[LightPushStatusCode.BAD_REQUEST]: "Bad request format",
|
|
[LightPushStatusCode.PAYLOAD_TOO_LARGE]:
|
|
"Message payload exceeds maximum size",
|
|
[LightPushStatusCode.INVALID_MESSAGE]: "Message validation failed",
|
|
[LightPushStatusCode.UNSUPPORTED_TOPIC]: "Unsupported pubsub topic",
|
|
[LightPushStatusCode.TOO_MANY_REQUESTS]: "Rate limit exceeded",
|
|
[LightPushStatusCode.INTERNAL_ERROR]: "Internal server error",
|
|
[LightPushStatusCode.UNAVAILABLE]: "Service temporarily unavailable",
|
|
[LightPushStatusCode.NO_RLN_PROOF]: "RLN proof generation failed",
|
|
[LightPushStatusCode.NO_PEERS]: "No relay peers available"
|
|
};
|