diff --git a/generators/typescript/sdk/generator/src/SdkGenerator.ts b/generators/typescript/sdk/generator/src/SdkGenerator.ts index f3b376eb5ae..608d86ae2e0 100644 --- a/generators/typescript/sdk/generator/src/SdkGenerator.ts +++ b/generators/typescript/sdk/generator/src/SdkGenerator.ts @@ -773,6 +773,75 @@ export class SdkGenerator { private generateWebsocketClient() { console.log("Generating websocket client"); + + this.withSourceFile({ + filepath: { + directories: [], + file: { + nameOnDisk: "deep.ts", + } + }, + run: ({ sourceFile, importsManager }) => { + sourceFile.addStatements([ + "import { ReconnectingWebsocket } from './core/websocket/ReconnectingWebsocket';", + "import { WebsocketMessage } from './core/websocket/WebsocketMessage';", + "", + "interface WebsocketOptions {", + " reconnect?: boolean;", + " maxRetries?: number;", + " retryDelay?: number;", + "}", + "", + "const DEFAULT_OPTIONS: WebsocketOptions = {", + " reconnect: true,", + " maxRetries: 5,", + " retryDelay: 1000", + "};" + ]); + sourceFile.addClass({ + name: "Client", + isExported: true, + methods: [ + { + name: "connect", + isAsync: true, + returnType: "Promise", + parameters: [ + { + name: "url", + type: "string" + } + ], + statements: [ + "await this._ws?.connect(url)" + ] + }, + { + name: "disconnect", + isAsync: true, + returnType: "Promise", + statements: [ + "await this._ws?.disconnect()" + ] + }, + { + name: "send", + isAsync: true, + returnType: "Promise", + parameters: [ + { + name: "data", + type: "unknown" + } + ], + statements: [ + "await this._ws?.send(JSON.stringify(data))" + ] + } + ] + }); + } + }); // generate a Client.ts per channel diff --git a/seed/ts-sdk/websocket/src/deep.ts b/seed/ts-sdk/websocket/src/deep.ts new file mode 100644 index 00000000000..5faf4668693 --- /dev/null +++ b/seed/ts-sdk/websocket/src/deep.ts @@ -0,0 +1,31 @@ +/** + * This file was auto-generated by Fern from our API Definition. + */ + +import { ReconnectingWebsocket } from "./core/websocket/ReconnectingWebsocket"; +import { WebsocketMessage } from "./core/websocket/WebsocketMessage"; +interface WebsocketOptions { + reconnect?: boolean; + maxRetries?: number; + retryDelay?: number; +} + +const DEFAULT_OPTIONS: WebsocketOptions = { + reconnect: true, + maxRetries: 5, + retryDelay: 1000, +}; + +export class Client { + async connect(url: string): Promise { + await this._ws?.connect(url); + } + + async disconnect(): Promise { + await this._ws?.disconnect(); + } + + async send(data: unknown): Promise { + await this._ws?.send(JSON.stringify(data)); + } +}