Fewer helper functions
This commit is contained in:
+24
-19
@@ -1,6 +1,7 @@
|
|||||||
import {sleep} from "@welshman/lib"
|
import {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 {Socket, SocketStatus, SocketUnsubscriber} from "./socket.js"
|
import {Socket, SocketStatus, SocketUnsubscriber} from "./socket.js"
|
||||||
|
|
||||||
export const makeAuthEvent = (url: string, challenge: string) =>
|
export const makeAuthEvent = (url: string, challenge: string) =>
|
||||||
@@ -34,7 +35,7 @@ export type AuthManagerOptions = {
|
|||||||
export class AuthManager {
|
export class AuthManager {
|
||||||
challenge: string | undefined
|
challenge: string | undefined
|
||||||
request: string | undefined
|
request: string | undefined
|
||||||
message: string | undefined
|
details: string | undefined
|
||||||
status = AuthStatus.None
|
status = AuthStatus.None
|
||||||
_unsubscribers: SocketUnsubscriber[] = []
|
_unsubscribers: SocketUnsubscriber[] = []
|
||||||
|
|
||||||
@@ -43,28 +44,32 @@ export class AuthManager {
|
|||||||
readonly options: AuthManagerOptions,
|
readonly options: AuthManagerOptions,
|
||||||
) {
|
) {
|
||||||
this._unsubscribers.push(
|
this._unsubscribers.push(
|
||||||
socket.onOk(([id, ok, message]) => {
|
socket.onMessage((message: RelayMessage) => {
|
||||||
if (id === this.request) {
|
if (isRelayOkMessage(message)) {
|
||||||
this.message = message
|
const [_, id, ok, details] = message
|
||||||
|
|
||||||
if (ok) {
|
if (id === this.request) {
|
||||||
this.status = AuthStatus.Ok
|
this.details = details
|
||||||
} else {
|
|
||||||
this.status = AuthStatus.Forbidden
|
if (ok) {
|
||||||
|
this.status = AuthStatus.Ok
|
||||||
|
} else {
|
||||||
|
this.status = AuthStatus.Forbidden
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
)
|
|
||||||
|
|
||||||
this._unsubscribers.push(
|
if (isRelayAuthMessage(message)) {
|
||||||
socket.onAuth(([challenge]) => {
|
const [_, challenge] = message
|
||||||
this.challenge = challenge
|
|
||||||
this.request = undefined
|
|
||||||
this.message = undefined
|
|
||||||
this.status = AuthStatus.Requested
|
|
||||||
|
|
||||||
if (this.options.eager) {
|
this.challenge = challenge
|
||||||
this.respond()
|
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) {
|
if (status === SocketStatus.Closed) {
|
||||||
this.challenge = undefined
|
this.challenge = undefined
|
||||||
this.request = undefined
|
this.request = undefined
|
||||||
this.message = undefined
|
this.details = undefined
|
||||||
this.status = AuthStatus.None
|
this.status = AuthStatus.None
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|||||||
@@ -1,19 +1,6 @@
|
|||||||
import WebSocket from "isomorphic-ws"
|
import WebSocket from "isomorphic-ws"
|
||||||
import {remove, now, ago, TaskQueue} from "@welshman/lib"
|
import {remove, now, ago, TaskQueue} from "@welshman/lib"
|
||||||
import type {
|
import type {RelayMessage, ClientMessage} from "./message.js"
|
||||||
RelayMessage,
|
|
||||||
RelayAuthPayload,
|
|
||||||
RelayEosePayload,
|
|
||||||
RelayEventPayload,
|
|
||||||
RelayOkPayload,
|
|
||||||
ClientMessage,
|
|
||||||
} from "./message.js"
|
|
||||||
import {
|
|
||||||
isRelayAuthMessage,
|
|
||||||
isRelayEoseMessage,
|
|
||||||
isRelayEventMessage,
|
|
||||||
isRelayOkMessage,
|
|
||||||
} from "./message.js"
|
|
||||||
|
|
||||||
export enum SocketStatus {
|
export enum SocketStatus {
|
||||||
Open = "socket:status:open",
|
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) => {
|
export const socketPolicySendWhenOpen = (socket: Socket) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user