add more client message types

This commit is contained in:
Jon Staab
2025-03-21 13:24:47 -07:00
parent 6f0b6acddb
commit be3ce11110
5 changed files with 53 additions and 33 deletions
+3 -3
View File
@@ -1,7 +1,7 @@
import {on, sleep} from "@welshman/lib" import {on, sleep} from "@welshman/lib"
import type {SignedEvent, StampedEvent} from "@welshman/util" import type {SignedEvent, StampedEvent} from "@welshman/util"
import {makeEvent, CLIENT_AUTH} from "@welshman/util" import {makeEvent, CLIENT_AUTH} from "@welshman/util"
import {isRelayAuthMessage, isRelayOkMessage, RelayMessage} from "./message.js" import {isRelayAuth, isRelayOk, RelayMessage} from "./message.js"
import {Socket, SocketStatus, SocketEventType, SocketUnsubscriber} from "./socket.js" import {Socket, SocketStatus, SocketEventType, SocketUnsubscriber} from "./socket.js"
export const makeAuthEvent = (url: string, challenge: string) => export const makeAuthEvent = (url: string, challenge: string) =>
@@ -45,7 +45,7 @@ export class AuthManager {
) { ) {
this._unsubscribers.push( this._unsubscribers.push(
on(socket, SocketEventType.Receive, (message: RelayMessage) => { on(socket, SocketEventType.Receive, (message: RelayMessage) => {
if (isRelayOkMessage(message)) { if (isRelayOk(message)) {
const [_, id, ok, details] = message const [_, id, ok, details] = message
if (id === this.request) { if (id === this.request) {
@@ -59,7 +59,7 @@ export class AuthManager {
} }
} }
if (isRelayAuthMessage(message)) { if (isRelayAuth(message)) {
const [_, challenge] = message const [_, challenge] = message
this.challenge = challenge this.challenge = challenge
+3 -3
View File
@@ -1,7 +1,7 @@
import {EventEmitter} from "events" import {EventEmitter} from "events"
import {on, randomId} from "@welshman/lib" import {on, randomId} from "@welshman/lib"
import {SignedEvent, Filter} from "@welshman/util" import {SignedEvent, Filter} from "@welshman/util"
import {RelayMessage, isRelayNegErrMessage, isRelayNegMsgMessage} from "./message.js" import {RelayMessage, isRelayNegErr, isRelayNegMsg} from "./message.js"
import {AbstractAdapter, AdapterEventType} from "./adapter.js" import {AbstractAdapter, AdapterEventType} from "./adapter.js"
import {Negentropy, NegentropyStorageVector} from "./negentropy.js" import {Negentropy, NegentropyStorageVector} from "./negentropy.js"
import {TypedEmitter} from "./util.js" import {TypedEmitter} from "./util.js"
@@ -43,7 +43,7 @@ export class Diff extends (EventEmitter as new () => TypedEmitter<DiffEvents>) {
adapter, adapter,
AdapterEventType.Receive, AdapterEventType.Receive,
async (message: RelayMessage, url: string) => { async (message: RelayMessage, url: string) => {
if (isRelayNegMsgMessage(message)) { if (isRelayNegMsg(message)) {
const [_, negid, msg] = message const [_, negid, msg] = message
if (negid === this._id) { if (negid === this._id) {
@@ -59,7 +59,7 @@ export class Diff extends (EventEmitter as new () => TypedEmitter<DiffEvents>) {
} }
} }
if (isRelayNegErrMessage(message)) { if (isRelayNegErr(message)) {
const [_, negid, msg] = message const [_, negid, msg] = message
if (negid === this._id) { if (negid === this._id) {
+42 -22
View File
@@ -11,6 +11,8 @@ export enum RelayMessageType {
Ok = "OK", Ok = "OK",
} }
export type RelayMessage = any[]
export type RelayAuthPayload = [string] export type RelayAuthPayload = [string]
export type RelayEosePayload = [string, SignedEvent] export type RelayEosePayload = [string, SignedEvent]
@@ -23,45 +25,63 @@ export type RelayNegMsgPayload = [string, string]
export type RelayOkPayload = [string, boolean, string] export type RelayOkPayload = [string, boolean, string]
export type RelayAuthMessage = [RelayMessageType.Auth, ...RelayAuthPayload] export type RelayAuth = [RelayMessageType.Auth, ...RelayAuthPayload]
export type RelayEoseMessage = [RelayMessageType.Eose, ...RelayEosePayload] export type RelayEose = [RelayMessageType.Eose, ...RelayEosePayload]
export type RelayEventMessage = [RelayMessageType.Event, ...RelayEventPayload] export type RelayEvent = [RelayMessageType.Event, ...RelayEventPayload]
export type RelayNegErrMessage = [RelayMessageType.NegErr, ...RelayNegErrPayload] export type RelayNegErr = [RelayMessageType.NegErr, ...RelayNegErrPayload]
export type RelayNegMsgMessage = [RelayMessageType.NegMsg, ...RelayNegMsgPayload] export type RelayNegMsg = [RelayMessageType.NegMsg, ...RelayNegMsgPayload]
export type RelayOkMessage = [RelayMessageType.Ok, ...RelayOkPayload] export type RelayOk = [RelayMessageType.Ok, ...RelayOkPayload]
export type RelayMessage = any[] export const isRelayAuth = (m: RelayMessage): m is RelayAuth => m[0] === RelayMessageType.Auth
export const isRelayAuthMessage = (m: RelayMessage): m is RelayAuthMessage => export const isRelayEose = (m: RelayMessage): m is RelayEose => m[0] === RelayMessageType.Eose
m[0] === RelayMessageType.Auth
export const isRelayEoseMessage = (m: RelayMessage): m is RelayEoseMessage => export const isRelayEvent = (m: RelayMessage): m is RelayEvent => m[0] === RelayMessageType.Event
m[0] === RelayMessageType.Eose
export const isRelayEventMessage = (m: RelayMessage): m is RelayEventMessage => export const isRelayNegErr = (m: RelayMessage): m is RelayNegErr => m[0] === RelayMessageType.NegErr
m[0] === RelayMessageType.Event
export const isRelayNegErrMessage = (m: RelayMessage): m is RelayNegErrMessage => export const isRelayNegMsg = (m: RelayMessage): m is RelayNegMsg => m[0] === RelayMessageType.NegMsg
m[0] === RelayMessageType.NegErr
export const isRelayNegMsgMessage = (m: RelayMessage): m is RelayNegMsgMessage => export const isRelayOk = (m: RelayMessage): m is RelayOk => m[0] === RelayMessageType.Ok
m[0] === RelayMessageType.NegMsg
export const isRelayOkMessage = (m: RelayMessage): m is RelayOkMessage =>
m[0] === RelayMessageType.Ok
// client -> relay // client -> relay
export type ClientMessage = any[]
export enum ClientMessageType { export enum ClientMessageType {
Auth = "AUTH", Auth = "AUTH",
Event = "EVENT", Event = "EVENT",
NegClose = "NEG-CLOSE", NegClose = "NEG-CLOSE",
Req = "REQ", Req = "REQ",
} }
export type ClientMessage = any[]
export type ClientAuthPayload = []
export type ClientEventPayload = []
export type ClientNegClosePayload = []
export type ClientReqPayload = []
export type ClientAuth = [ClientMessageType.Req, ...ClientAuthPayload]
export type ClientEvent = [ClientMessageType.Req, ...ClientEventPayload]
export type ClientNegClose = [ClientMessageType.Req, ...ClientNegClosePayload]
export type ClientReq = [ClientMessageType.Req, ...ClientReqPayload]
export const isClientAuth = (m: ClientMessage): m is ClientAuth => m[0] === ClientMessageType.Auth
export const isClientEvent = (m: ClientMessage): m is ClientEvent =>
m[0] === ClientMessageType.Event
export const isClientNegClose = (m: ClientMessage): m is ClientNegClose =>
m[0] === ClientMessageType.NegClose
export const isClientReq = (m: ClientMessage): m is ClientReq => m[0] === ClientMessageType.Req
+2 -2
View File
@@ -1,7 +1,7 @@
import {EventEmitter} from "events" import {EventEmitter} from "events"
import {on} from "@welshman/lib" import {on} from "@welshman/lib"
import {SignedEvent} from "@welshman/util" import {SignedEvent} from "@welshman/util"
import {RelayMessage, isRelayOkMessage} from "./message.js" import {RelayMessage, isRelayOk} from "./message.js"
import {AbstractAdapter, AdapterEventType} from "./adapter.js" import {AbstractAdapter, AdapterEventType} from "./adapter.js"
import {TypedEmitter} from "./util.js" import {TypedEmitter} from "./util.js"
@@ -27,7 +27,7 @@ export class Publish extends (EventEmitter as new () => TypedEmitter<PublishEven
adapter, adapter,
AdapterEventType.Receive, AdapterEventType.Receive,
(message: RelayMessage, url: string) => { (message: RelayMessage, url: string) => {
if (isRelayOkMessage(message)) { if (isRelayOk(message)) {
const [_, id, ok, detail] = message const [_, id, ok, detail] = message
if (id === event.id) { if (id === event.id) {
+3 -3
View File
@@ -1,7 +1,7 @@
import {EventEmitter} from "events" import {EventEmitter} from "events"
import {on, randomId} from "@welshman/lib" import {on, randomId} from "@welshman/lib"
import {Filter, SignedEvent} from "@welshman/util" import {Filter, SignedEvent} from "@welshman/util"
import {RelayMessage, isRelayEventMessage, isRelayEoseMessage} from "./message.js" import {RelayMessage, isRelayEvent, isRelayEose} from "./message.js"
import {AbstractAdapter, AdapterEventType} from "./adapter.js" import {AbstractAdapter, AdapterEventType} from "./adapter.js"
import {TypedEmitter} from "./util.js" import {TypedEmitter} from "./util.js"
@@ -30,7 +30,7 @@ export class Subscribe extends (EventEmitter as new () => TypedEmitter<Subscribe
adapter, adapter,
AdapterEventType.Receive, AdapterEventType.Receive,
(message: RelayMessage, url: string) => { (message: RelayMessage, url: string) => {
if (isRelayEventMessage(message)) { if (isRelayEvent(message)) {
const [_, id, event] = message const [_, id, event] = message
if (id === this._id) { if (id === this._id) {
@@ -38,7 +38,7 @@ export class Subscribe extends (EventEmitter as new () => TypedEmitter<Subscribe
} }
} }
if (isRelayEoseMessage(message)) { if (isRelayEose(message)) {
const [_, id] = message const [_, id] = message
if (id === this._id) { if (id === this._id) {