85d2225e0c
* Fix loading within the CLI * Remove app * Remove promise handle * Add initial travis file * Add libxkbfile dependency * Add libxkbfile-dev * Add build script * Fix malformed bash statement * Remove yarn from script * Improve build script * Extract upx before usage * Only run upx if on linux * Ensure resource directory exists * Pack runnable binary * Export binary with platform * Improve build process * Install upx before running install script * Update typescript version before running nexe * Add os.release() function for multi-platform support * Update travis.yml to improve deployment * Add on CI * Update to v1.31.0 * Add libsecret * Update build target * Skip cleanup * Fix built-in extensions * Add basics for apps * Create custom DNS server * Fix forking within CLI. Fixes TS language features * Fix filename resolve * Fix default extensions path * Add custom dialog * Store workspace path * Remove outfiles * Cleanup * Always authed outside of CLI * Use location.host for client * Remove useless app interface * Remove debug file for building wordlist * Use chromes tcp host * Update patch * Build browser app before packaging * Replace all css containing file:// URLs, fix webviews * Fix save * Fix mkdir
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { Event, Emitter } from "@coder/events";
|
|
import { TunnelCloseCode } from "./common";
|
|
|
|
export interface TunnelCloseEvent {
|
|
readonly code: TunnelCloseCode;
|
|
readonly reason: string;
|
|
}
|
|
|
|
export interface ClientConnection {
|
|
readonly onData: Event<ArrayBuffer>;
|
|
readonly onClose: Event<TunnelCloseEvent>;
|
|
send(data: ArrayBuffer): void;
|
|
}
|
|
|
|
export const forward = (connectionUrl: string): Promise<ClientConnection> => {
|
|
return new Promise((resolve, reject): void => {
|
|
const socket = new WebSocket(connectionUrl);
|
|
const closeEmitter = new Emitter<TunnelCloseEvent>();
|
|
const dataEmitter = new Emitter<ArrayBuffer>();
|
|
const connection: ClientConnection = {
|
|
get onClose(): Event<TunnelCloseEvent> {
|
|
return closeEmitter.event;
|
|
},
|
|
get onData(): Event<ArrayBuffer> {
|
|
return dataEmitter.event;
|
|
},
|
|
send(data: ArrayBuffer): void {
|
|
socket.send(data);
|
|
},
|
|
};
|
|
socket.binaryType = "arraybuffer";
|
|
socket.addEventListener("message", (event) => {
|
|
dataEmitter.emit(event.data);
|
|
});
|
|
socket.addEventListener("error", (event) => {
|
|
reject("uncertain");
|
|
});
|
|
socket.addEventListener("open", () => {
|
|
resolve(connection);
|
|
});
|
|
socket.addEventListener("close", (event) => {
|
|
closeEmitter.emit({
|
|
code: event.code,
|
|
reason: event.reason,
|
|
});
|
|
});
|
|
});
|
|
};
|