mirror of
https://github.com/LukeHagar/crossws.git
synced 2025-12-09 20:37:49 +00:00
feat: support throwing responses in upgrade hook (#91)
Co-authored-by: Pooya Parsa <pooya@pi0.io>
This commit is contained in:
47
src/hooks.ts
47
src/hooks.ts
@@ -39,6 +39,32 @@ export class AdapterHookable {
|
||||
},
|
||||
) as Promise<any>;
|
||||
}
|
||||
|
||||
async upgrade(request: UpgradeRequest): Promise<{
|
||||
upgradeHeaders?: HeadersInit;
|
||||
endResponse?: Response;
|
||||
}> {
|
||||
try {
|
||||
const res = await this.callHook("upgrade", request);
|
||||
if (!res) {
|
||||
return {};
|
||||
}
|
||||
if ((res as Response).ok === false) {
|
||||
return { endResponse: res as Response };
|
||||
}
|
||||
if (res.headers) {
|
||||
return {
|
||||
upgradeHeaders: res.headers,
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof Response) {
|
||||
return { endResponse: error };
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
// --- types ---
|
||||
@@ -60,16 +86,23 @@ type HookFn<ArgsT extends any[] = any, RT = void> = (
|
||||
...args: ArgsT
|
||||
) => MaybePromise<RT>;
|
||||
|
||||
export type UpgradeRequest =
|
||||
| Request
|
||||
| {
|
||||
url: string;
|
||||
headers: Headers;
|
||||
};
|
||||
|
||||
export interface Hooks {
|
||||
/** Upgrading */
|
||||
/**
|
||||
*
|
||||
* @param request
|
||||
* @throws {Response}
|
||||
*/
|
||||
upgrade: (
|
||||
request:
|
||||
| Request
|
||||
| {
|
||||
url: string;
|
||||
headers: Headers;
|
||||
},
|
||||
) => MaybePromise<Response | ResponseInit | void>;
|
||||
request: UpgradeRequest,
|
||||
) => MaybePromise<Response | ResponseInit | undefined>;
|
||||
|
||||
/** A message is received */
|
||||
message: (peer: Peer, message: Message) => MaybePromise<void>;
|
||||
|
||||
Reference in New Issue
Block a user