Fewer helper functions
This commit is contained in:
+24
-19
@@ -1,6 +1,7 @@
|
||||
import {sleep} from "@welshman/lib"
|
||||
import type {SignedEvent, StampedEvent} from "@welshman/util"
|
||||
import {makeEvent, CLIENT_AUTH} from "@welshman/util"
|
||||
import {isRelayAuthMessage, isRelayOkMessage, RelayMessage} from "./message.js"
|
||||
import {Socket, SocketStatus, SocketUnsubscriber} from "./socket.js"
|
||||
|
||||
export const makeAuthEvent = (url: string, challenge: string) =>
|
||||
@@ -34,7 +35,7 @@ export type AuthManagerOptions = {
|
||||
export class AuthManager {
|
||||
challenge: string | undefined
|
||||
request: string | undefined
|
||||
message: string | undefined
|
||||
details: string | undefined
|
||||
status = AuthStatus.None
|
||||
_unsubscribers: SocketUnsubscriber[] = []
|
||||
|
||||
@@ -43,28 +44,32 @@ export class AuthManager {
|
||||
readonly options: AuthManagerOptions,
|
||||
) {
|
||||
this._unsubscribers.push(
|
||||
socket.onOk(([id, ok, message]) => {
|
||||
if (id === this.request) {
|
||||
this.message = message
|
||||
socket.onMessage((message: RelayMessage) => {
|
||||
if (isRelayOkMessage(message)) {
|
||||
const [_, id, ok, details] = message
|
||||
|
||||
if (ok) {
|
||||
this.status = AuthStatus.Ok
|
||||
} else {
|
||||
this.status = AuthStatus.Forbidden
|
||||
if (id === this.request) {
|
||||
this.details = details
|
||||
|
||||
if (ok) {
|
||||
this.status = AuthStatus.Ok
|
||||
} else {
|
||||
this.status = AuthStatus.Forbidden
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
this._unsubscribers.push(
|
||||
socket.onAuth(([challenge]) => {
|
||||
this.challenge = challenge
|
||||
this.request = undefined
|
||||
this.message = undefined
|
||||
this.status = AuthStatus.Requested
|
||||
if (isRelayAuthMessage(message)) {
|
||||
const [_, challenge] = message
|
||||
|
||||
if (this.options.eager) {
|
||||
this.respond()
|
||||
this.challenge = challenge
|
||||
this.request = undefined
|
||||
this.details = undefined
|
||||
this.status = AuthStatus.Requested
|
||||
|
||||
if (this.options.eager) {
|
||||
this.respond()
|
||||
}
|
||||
}
|
||||
}),
|
||||
)
|
||||
@@ -74,7 +79,7 @@ export class AuthManager {
|
||||
if (status === SocketStatus.Closed) {
|
||||
this.challenge = undefined
|
||||
this.request = undefined
|
||||
this.message = undefined
|
||||
this.details = undefined
|
||||
this.status = AuthStatus.None
|
||||
}
|
||||
}),
|
||||
|
||||
@@ -1,19 +1,6 @@
|
||||
import WebSocket from "isomorphic-ws"
|
||||
import {remove, now, ago, TaskQueue} from "@welshman/lib"
|
||||
import type {
|
||||
RelayMessage,
|
||||
RelayAuthPayload,
|
||||
RelayEosePayload,
|
||||
RelayEventPayload,
|
||||
RelayOkPayload,
|
||||
ClientMessage,
|
||||
} from "./message.js"
|
||||
import {
|
||||
isRelayAuthMessage,
|
||||
isRelayEoseMessage,
|
||||
isRelayEventMessage,
|
||||
isRelayOkMessage,
|
||||
} from "./message.js"
|
||||
import type {RelayMessage, ClientMessage} from "./message.js"
|
||||
|
||||
export enum SocketStatus {
|
||||
Open = "socket:status:open",
|
||||
@@ -209,50 +196,6 @@ export class Socket {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onAuth = (cb: (message: RelayAuthPayload) => void) => {
|
||||
return this.onMessage((message: RelayMessage) => {
|
||||
if (isRelayAuthMessage(message)) {
|
||||
cb(message.slice(1) as RelayAuthPayload)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onEose = (cb: (message: RelayEosePayload) => void) => {
|
||||
return this.onMessage((message: RelayMessage) => {
|
||||
if (isRelayEoseMessage(message)) {
|
||||
cb(message.slice(1) as RelayEosePayload)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onEvent = (cb: (message: RelayEventPayload) => void) => {
|
||||
return this.onMessage((message: RelayMessage) => {
|
||||
if (isRelayEventMessage(message)) {
|
||||
cb(message.slice(1) as RelayEventPayload)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onOk = (cb: (message: RelayOkPayload) => void) => {
|
||||
return this.onMessage((message: RelayMessage) => {
|
||||
if (isRelayOkMessage(message)) {
|
||||
cb(message.slice(1) as RelayOkPayload)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
wrap = (overrides: Partial<Socket>): Socket => {
|
||||
return new Proxy(this, {
|
||||
get: (target, prop: keyof Socket) => {
|
||||
if (prop in overrides) {
|
||||
return overrides[prop]
|
||||
}
|
||||
|
||||
return target[prop]
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export const socketPolicySendWhenOpen = (socket: Socket) => {
|
||||
|
||||
Reference in New Issue
Block a user