{"version":3,"sources":["../src/http-core/rsocket/client.ts"],"names":["encodeCompositeMetadata","MESSAGE_RSOCKET_AUTHENTICATION","encodeBearerAuthMetadata","RSocketClient","MESSAGE_RSOCKET_COMPOSITE_METADATA","IdentitySerializer","RSocketWebSocketClient","MESSAGE_RSOCKET_ROUTING","encodeRoute","Observable"],"mappings":"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","file":"rsocket.cjs","sourcesContent":["/// <reference path=\"./rsocket-shims.d.ts\" />\nimport {\n\tIdentitySerializer,\n\tMESSAGE_RSOCKET_AUTHENTICATION,\n\tMESSAGE_RSOCKET_COMPOSITE_METADATA,\n\tMESSAGE_RSOCKET_ROUTING,\n\tRSocketClient,\n\tencodeBearerAuthMetadata,\n\tencodeCompositeMetadata,\n\tencodeRoute,\n} from \"rsocket-core\";\nimport RSocketWebSocketClient from \"rsocket-websocket-client\";\nimport { Observable } from \"rxjs\";\n\nexport type RSocketConnectionStatus = \"CONNECTED\" | \"CONNECTING\" | \"CLOSED\";\n\nexport type RSocketBuffer = Uint8Array;\n\nexport interface RSocketJsonCodec {\n\tencode(data?: unknown): RSocketBuffer;\n\tdecode(raw: unknown): unknown;\n}\n\nexport interface RSocketConnectOptions {\n\turl: string;\n\tjwt?: string;\n\tkeepAlive?: number;\n\tlifetime?: number;\n\tdataMimeType?: string;\n}\n\nexport interface RSocketReconnectOptions extends RSocketConnectOptions {\n\tmaxRetry?: number;\n\tbaseDelay?: number;\n\tmaxDelay?: number;\n\tjitter?: number;\n}\n\nexport interface RSocketPayload<Data = RSocketBuffer> {\n\tdata: Data;\n\tmetadata?: RSocketBuffer;\n}\n\nexport interface RSocketSubscription {\n\trequest(n: number): void;\n\tcancel(): void;\n}\n\nexport interface ReactiveSocketLike<Data = RSocketBuffer> {\n\trequestStream(payload: RSocketPayload<Data>): {\n\t\tsubscribe(observer: {\n\t\t\tonComplete?: () => void;\n\t\t\tonError?: (err: unknown) => void;\n\t\t\tonNext?: (payload: RSocketPayload<Data>) => void;\n\t\t\tonSubscribe?: (subscription: RSocketSubscription) => void;\n\t\t}): void;\n\t};\n\trequestResponse(payload: RSocketPayload<Data>): {\n\t\tsubscribe(observer: {\n\t\t\tonComplete?: (payload: RSocketPayload<Data>) => void;\n\t\t\tonError?: (err: unknown) => void;\n\t\t\tonSubscribe?: () => void;\n\t\t}): void;\n\t};\n\tconnectionStatus(): {\n\t\tsubscribe(observer: {\n\t\t\tonNext?: (status: { kind?: string }) => void;\n\t\t\tonError?: (err: unknown) => void;\n\t\t\tonSubscribe?: () => void;\n\t\t\tonComplete?: () => void;\n\t\t}): void;\n\t};\n\tclose?: () => void;\n}\n\nexport interface RSocketApiOptions {\n\tconnector: RSocketReconnect;\n\tjwt?: string;\n\tcodec?: RSocketJsonCodec;\n\tmaxRequest?: number;\n}\n\n\nexport interface RSocketOperationLike {\n\troute?: string;\n\tinteraction?: string;\n\tfireAndForget?: boolean;\n\trequest?: unknown;\n\tresponse?: unknown;\n}\n\nexport type RSocketOperationsLike = object;\n\nexport type RSocketRoute<Operations extends RSocketOperationsLike> = [Extract<\n\tkeyof Operations,\n\tstring\n>] extends [never]\n\t? string\n\t: Extract<keyof Operations, string>;\n\ntype RSocketOperationProperty<\n\tOperations extends RSocketOperationsLike,\n\tTRoute extends RSocketRoute<Operations>,\n\tTProperty extends string,\n> = TRoute extends keyof Operations\n\t? TProperty extends keyof Operations[TRoute]\n\t\t? Operations[TRoute][TProperty]\n\t\t: unknown\n\t: unknown;\n\nexport type RSocketOperationRequest<\n\tOperations extends RSocketOperationsLike,\n\tTRoute extends RSocketRoute<Operations>,\n> = RSocketOperationProperty<Operations, TRoute, \"request\">;\n\nexport type RSocketOperationResponse<\n\tOperations extends RSocketOperationsLike,\n\tTRoute extends RSocketRoute<Operations>,\n> = RSocketOperationProperty<Operations, TRoute, \"response\">;\n\nexport type RSocketOperationInteraction<\n\tOperations extends RSocketOperationsLike,\n\tTRoute extends RSocketRoute<Operations>,\n> = RSocketOperationProperty<Operations, TRoute, \"interaction\"> extends string\n\t? RSocketOperationProperty<Operations, TRoute, \"interaction\">\n\t: string;\n\nexport type RSocketRoutesByInteraction<\n\tOperations extends RSocketOperationsLike,\n\tTInteraction extends string,\n> = string extends RSocketRoute<Operations>\n\t? string\n\t: {\n\t\t\t[TRoute in RSocketRoute<Operations>]: RSocketOperationInteraction<\n\t\t\t\tOperations,\n\t\t\t\tTRoute\n\t\t\t> extends TInteraction\n\t\t\t\t? TRoute\n\t\t\t\t: never;\n\t\t}[RSocketRoute<Operations>];\n\nexport type RSocketStreamRoute<Operations extends RSocketOperationsLike> =\n\tRSocketRoutesByInteraction<Operations, \"requestStream\">;\n\nexport type RSocketMonoRoute<Operations extends RSocketOperationsLike> =\n\tRSocketRoutesByInteraction<Operations, \"requestResponse\">;\n\ntype IsUnknown<T> = unknown extends T\n\t? [T] extends [unknown]\n\t\t? true\n\t\t: false\n\t: false;\n\nexport type RSocketRequestArgs<\n\tOperations extends RSocketOperationsLike,\n\tTRoute extends RSocketRoute<Operations>,\n> = IsUnknown<RSocketOperationRequest<Operations, TRoute>> extends true\n\t? [data?: unknown]\n\t: [RSocketOperationRequest<Operations, TRoute>] extends [void | undefined]\n\t\t? [data?: RSocketOperationRequest<Operations, TRoute>]\n\t\t: {} extends RSocketOperationRequest<Operations, TRoute>\n\t\t\t? [data?: RSocketOperationRequest<Operations, TRoute>]\n\t\t\t: [data: RSocketOperationRequest<Operations, TRoute>];\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nconst toUint8Array = (raw: unknown): Uint8Array => {\n\tif (raw instanceof ArrayBuffer) return new Uint8Array(raw);\n\tif (ArrayBuffer.isView(raw)) {\n\t\treturn new Uint8Array(raw.buffer, raw.byteOffset, raw.byteLength);\n\t}\n\tthrow new TypeError(\n\t\t\"RSocket binary value must be an ArrayBuffer or ArrayBufferView.\",\n\t);\n};\n\nconst binaryEncoder = {\n\tbyteLength(value: unknown): number {\n\t\treturn toUint8Array(value).byteLength;\n\t},\n\tencode(\n\t\tvalue: unknown,\n\t\tbuffer: Uint8Array,\n\t\tstart: number,\n\t\tend: number,\n\t): number {\n\t\tbuffer.set(toUint8Array(value).subarray(0, end - start), start);\n\t\treturn end;\n\t},\n\tdecode(buffer: unknown, start: number, end: number): RSocketBuffer {\n\t\treturn toUint8Array(buffer).slice(start, end);\n\t},\n};\n\nconst utf8Encoder = {\n\tbyteLength(value: unknown): number {\n\t\tif (typeof value !== \"string\") {\n\t\t\tthrow new TypeError(\"RSocket UTF-8 value must be a string.\");\n\t\t}\n\t\treturn textEncoder.encode(value).byteLength;\n\t},\n\tencode(\n\t\tvalue: unknown,\n\t\tbuffer: Uint8Array,\n\t\tstart: number,\n\t\tend: number,\n\t): number {\n\t\tif (typeof value !== \"string\") {\n\t\t\tthrow new TypeError(\"RSocket UTF-8 value must be a string.\");\n\t\t}\n\t\tbuffer.set(textEncoder.encode(value).subarray(0, end - start), start);\n\t\treturn end;\n\t},\n\tdecode(buffer: unknown, start: number, end: number): string {\n\t\treturn textDecoder.decode(toUint8Array(buffer).subarray(start, end));\n\t},\n};\n\nconst rSocketEncoders = {\n\tdata: binaryEncoder,\n\tdataMimeType: utf8Encoder,\n\tmessage: utf8Encoder,\n\tmetadata: binaryEncoder,\n\tmetadataMimeType: utf8Encoder,\n\tresumeToken: binaryEncoder,\n};\n\nconst emptyRSocketBuffer = (): RSocketBuffer => new Uint8Array(0);\n\nconst encodeRSocketBuffer = (value: string): RSocketBuffer =>\n\ttextEncoder.encode(value);\n\nexport const defaultRSocketJsonCodec: RSocketJsonCodec = {\n\tencode(data?: unknown) {\n\t\tif (data == null) return emptyRSocketBuffer();\n\t\tif (typeof data === \"string\") return encodeRSocketBuffer(data);\n\t\treturn encodeRSocketBuffer(JSON.stringify(data));\n\t},\n\tdecode(raw: unknown) {\n\t\tif (!raw) return null;\n\t\tif (raw instanceof ArrayBuffer || ArrayBuffer.isView(raw)) {\n\t\t\tconst buffer = toUint8Array(raw);\n\t\t\tif (buffer.length === 0) return null;\n\t\t\tconst text = textDecoder.decode(buffer);\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(text);\n\t\t\t\tif (typeof parsed !== \"string\") return parsed;\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(parsed);\n\t\t\t\t} catch {\n\t\t\t\t\treturn parsed;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t\treturn raw;\n\t},\n};\n\nconst createAuthSetupMetadata = (\n\tjwt?: string,\n): RSocketBuffer | undefined => {\n\tif (!jwt) return undefined;\n\treturn encodeCompositeMetadata([\n\t\t[MESSAGE_RSOCKET_AUTHENTICATION, encodeBearerAuthMetadata(jwt)],\n\t]) as RSocketBuffer;\n};\n\nexport const connectRSocket = async (\n\toptions: RSocketConnectOptions,\n): Promise<ReactiveSocketLike<RSocketBuffer>> => {\n\tconst client = new RSocketClient({\n\t\tsetup: {\n\t\t\tkeepAlive: options.keepAlive ?? 30_000,\n\t\t\tlifetime: options.lifetime ?? 90_000,\n\t\t\tdataMimeType: options.dataMimeType ?? \"application/json\",\n\t\t\tmetadataMimeType: MESSAGE_RSOCKET_COMPOSITE_METADATA.string,\n\t\t\tpayload: {\n\t\t\t\tdata: emptyRSocketBuffer(),\n\t\t\t\tmetadata:\n\t\t\t\t\tcreateAuthSetupMetadata(options.jwt) ??\n\t\t\t\t\temptyRSocketBuffer(),\n\t\t\t},\n\t\t},\n\t\tserializers: {\n\t\t\tdata: IdentitySerializer,\n\t\t\tmetadata: IdentitySerializer,\n\t\t},\n\t\ttransport: new RSocketWebSocketClient(\n\t\t\t{ url: options.url },\n\t\t\trSocketEncoders,\n\t\t),\n\t});\n\n\treturn await new Promise<ReactiveSocketLike<RSocketBuffer>>(\n\t\t(resolve, reject) => {\n\t\t\tclient.connect().subscribe({\n\t\t\t\tonComplete: (rs: ReactiveSocketLike<RSocketBuffer>) =>\n\t\t\t\t\tresolve(rs),\n\t\t\t\tonError: reject,\n\t\t\t\tonSubscribe: () => {},\n\t\t\t});\n\t\t},\n\t);\n};\n\nexport class RSocketReconnect {\n\tprivate rsocket: ReactiveSocketLike<RSocketBuffer> | null = null;\n\tprivate status: RSocketConnectionStatus = \"CLOSED\";\n\tprivate retry = 0;\n\tprivate manuallyClosed = false;\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate connectingPromise: Promise<\n\t\tReactiveSocketLike<RSocketBuffer>\n\t> | null = null;\n\n\tprivate readonly maxRetry: number;\n\tprivate readonly baseDelay: number;\n\tprivate readonly maxDelay: number;\n\tprivate readonly jitter: number;\n\n\tconstructor(private readonly options: RSocketReconnectOptions) {\n\t\tthis.maxRetry = options.maxRetry ?? 8;\n\t\tthis.baseDelay = options.baseDelay ?? 500;\n\t\tthis.maxDelay = options.maxDelay ?? 10_000;\n\t\tthis.jitter = options.jitter ?? 250;\n\t}\n\n\tgetStatus(): RSocketConnectionStatus {\n\t\treturn this.status;\n\t}\n\n\tasync get(): Promise<ReactiveSocketLike<RSocketBuffer>> {\n\t\tthis.manuallyClosed = false;\n\t\tif (this.rsocket) return this.rsocket;\n\t\treturn this.connect();\n\t}\n\n\tprivate nextDelay(): number {\n\t\tconst base = Math.min(\n\t\t\tthis.maxDelay,\n\t\t\tthis.baseDelay * Math.pow(2, this.retry),\n\t\t);\n\t\treturn base + Math.floor(Math.random() * this.jitter);\n\t}\n\n\tprivate async connect(): Promise<\n\t\tReactiveSocketLike<RSocketBuffer>\n\t> {\n\t\tif (this.rsocket) return this.rsocket;\n\t\tif (this.connectingPromise) return this.connectingPromise;\n\n\t\tthis.manuallyClosed = false;\n\t\tthis.status = \"CONNECTING\";\n\t\tthis.connectingPromise = connectRSocket(this.options)\n\t\t\t.then((rs) => {\n\t\t\t\tif (this.manuallyClosed) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trs.close?.();\n\t\t\t\t\t} catch {}\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"RSocket connection was closed before it completed.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.rsocket = rs;\n\t\t\t\tthis.status = \"CONNECTED\";\n\t\t\t\tthis.retry = 0;\n\t\t\t\tthis.connectingPromise = null;\n\n\t\t\t\trs.connectionStatus().subscribe({\n\t\t\t\t\tonNext: (nextStatus: { kind?: string }) => {\n\t\t\t\t\t\tconst kind = (nextStatus as { kind?: string }).kind;\n\t\t\t\t\t\tif (kind === \"CLOSED\" || kind === \"ERROR\") {\n\t\t\t\t\t\t\tthis.handleClose();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonError: () => this.handleClose(),\n\t\t\t\t\tonSubscribe: () => {},\n\t\t\t\t\tonComplete: () => this.handleClose(),\n\t\t\t\t});\n\n\t\t\t\treturn rs;\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthis.connectingPromise = null;\n\t\t\t\tthis.handleClose();\n\t\t\t\tthrow err;\n\t\t\t});\n\n\t\treturn this.connectingPromise;\n\t}\n\n\tprivate handleClose() {\n\t\tthis.rsocket = null;\n\t\tthis.status = \"CLOSED\";\n\t\tif (!this.manuallyClosed) {\n\t\t\tthis.scheduleReconnect();\n\t\t}\n\t}\n\n\tprivate scheduleReconnect() {\n\t\tif (\n\t\t\tthis.status === \"CONNECTING\" ||\n\t\t\tthis.rsocket ||\n\t\t\tthis.reconnectTimer\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tif (this.retry >= this.maxRetry) return;\n\n\t\tconst delay = this.nextDelay();\n\t\tthis.retry += 1;\n\t\tthis.reconnectTimer = setTimeout(() => {\n\t\t\tthis.reconnectTimer = null;\n\t\t\tthis.connect().catch(() => {\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t});\n\t\t}, delay);\n\t}\n\n\tclose() {\n\t\tthis.manuallyClosed = true;\n\t\tif (this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\t\ttry {\n\t\t\tconst closable = this.rsocket as { close?: () => void } | null;\n\t\t\tclosable?.close?.();\n\t\t} catch {}\n\t\tthis.rsocket = null;\n\t\tthis.connectingPromise = null;\n\t\tthis.status = \"CLOSED\";\n\t}\n}\n\nexport class RSocketApi<\n\tOperations extends RSocketOperationsLike = RSocketOperationsLike,\n> {\n\tprivate readonly connector: RSocketReconnect;\n\tprivate readonly jwt?: string;\n\tprivate readonly codec: RSocketJsonCodec;\n\tprivate readonly maxRequest: number;\n\n\tconstructor(options: RSocketApiOptions) {\n\t\tthis.connector = options.connector;\n\t\tthis.jwt = options.jwt;\n\t\tthis.codec = options.codec ?? defaultRSocketJsonCodec;\n\t\tthis.maxRequest = options.maxRequest ?? 2_147_483_647;\n\t}\n\n\tprivate meta(route: string): RSocketBuffer {\n\t\tconst metadata: [any, RSocketBuffer][] = [];\n\n\t\tif (this.jwt) {\n\t\t\tmetadata.push([\n\t\t\t\tMESSAGE_RSOCKET_AUTHENTICATION,\n\t\t\t\tencodeBearerAuthMetadata(this.jwt),\n\t\t\t]);\n\t\t}\n\n\t\tmetadata.push([MESSAGE_RSOCKET_ROUTING, encodeRoute(route)]);\n\t\treturn encodeCompositeMetadata(metadata) as RSocketBuffer;\n\t}\n\n\tprivate async withSocket<T>(\n\t\tfn: (rs: ReactiveSocketLike<RSocketBuffer>) => T,\n\t): Promise<T> {\n\t\tconst rs = await this.connector.get();\n\t\treturn fn(rs);\n\t}\n\n\tstream<\n\t\tTRoute extends RSocketStreamRoute<Operations> & RSocketRoute<Operations>,\n\t>(\n\t\troute: TRoute,\n\t\tdata?: RSocketOperationRequest<Operations, TRoute>,\n\t): Observable<RSocketOperationResponse<Operations, TRoute>>;\n\tstream<R = unknown>(route: string, data?: unknown): Observable<R>;\n\tstream(route: string, data?: unknown): Observable<unknown> {\n\t\treturn new Observable<unknown>((subscriber) => {\n\t\t\tlet subscription: RSocketSubscription | null = null;\n\n\t\t\tthis.withSocket((rs) => {\n\t\t\t\tconst flowable = rs.requestStream({\n\t\t\t\t\tdata: this.codec.encode(data),\n\t\t\t\t\tmetadata: this.meta(route),\n\t\t\t\t});\n\n\t\t\t\tflowable.subscribe({\n\t\t\t\t\tonComplete: () => subscriber.complete(),\n\t\t\t\t\tonError: (err: unknown) => subscriber.error(err),\n\t\t\t\t\tonNext: (payload: RSocketPayload<RSocketBuffer>) => {\n\t\t\t\t\t\tsubscriber.next(this.codec.decode(payload.data));\n\t\t\t\t\t},\n\t\t\t\t\tonSubscribe: (nextSubscription: RSocketSubscription) => {\n\t\t\t\t\t\tsubscription = nextSubscription;\n\t\t\t\t\t\tnextSubscription.request(this.maxRequest);\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}).catch((err) => subscriber.error(err));\n\n\t\t\treturn () => {\n\t\t\t\ttry {\n\t\t\t\t\tsubscription?.cancel();\n\t\t\t\t} catch {}\n\t\t\t};\n\t\t});\n\t}\n\n\tmono<\n\t\tTRoute extends RSocketMonoRoute<Operations> & RSocketRoute<Operations>,\n\t>(\n\t\troute: TRoute,\n\t\tdata?: RSocketOperationRequest<Operations, TRoute>,\n\t): Observable<RSocketOperationResponse<Operations, TRoute>>;\n\tmono<R = unknown>(route: string, data?: unknown): Observable<R>;\n\tmono(route: string, data?: unknown): Observable<unknown> {\n\t\treturn new Observable<unknown>((subscriber) => {\n\t\t\tthis.withSocket((rs) => {\n\t\t\t\trs.requestResponse({\n\t\t\t\t\tdata: this.codec.encode(data),\n\t\t\t\t\tmetadata: this.meta(route),\n\t\t\t\t}).subscribe({\n\t\t\t\t\tonComplete: (\n\t\t\t\t\t\tpayload: RSocketPayload<RSocketBuffer>,\n\t\t\t\t\t) => {\n\t\t\t\t\t\tsubscriber.next(this.codec.decode(payload.data));\n\t\t\t\t\t\tsubscriber.complete();\n\t\t\t\t\t},\n\t\t\t\t\tonError: (err: unknown) => subscriber.error(err),\n\t\t\t\t\tonSubscribe: () => {},\n\t\t\t\t});\n\t\t\t}).catch((err) => subscriber.error(err));\n\t\t});\n\t}\n\n\tclose(): void {\n\t\tthis.connector.close();\n\t}\n}\n\nexport function createRSocketApi<\n\tOperations extends RSocketOperationsLike = RSocketOperationsLike,\n>(\n\turl: string,\n\tjwt?: string,\n\toptions: Omit<RSocketReconnectOptions, \"url\" | \"jwt\"> &\n\t\tPick<RSocketApiOptions, \"codec\" | \"maxRequest\"> = {},\n): RSocketApi<Operations> {\n\tconst connector = new RSocketReconnect({ url, jwt, ...options });\n\treturn new RSocketApi<Operations>({\n\t\tconnector,\n\t\tjwt,\n\t\tcodec: options.codec,\n\t\tmaxRequest: options.maxRequest,\n\t});\n}\n"]}