@replit/river 0.215.0 → 0.216.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/adapter-BXCk-dmy.d.ts +29 -0
- package/dist/adapter-D5X11kmP.d.cts +29 -0
- package/dist/{chunk-VXRAFUA3.js → chunk-75ZMPCKC.js} +26 -6
- package/dist/{chunk-VXRAFUA3.js.map → chunk-75ZMPCKC.js.map} +1 -1
- package/dist/chunk-SHND2JG6.js +86 -0
- package/dist/chunk-SHND2JG6.js.map +1 -0
- package/dist/{chunk-RDTQZ7HO.js → chunk-ZLMQQI43.js} +12 -2
- package/dist/chunk-ZLMQQI43.js.map +1 -0
- package/dist/{client-BhwlY0-L.d.ts → client-BNc5Pj_4.d.ts} +2 -2
- package/dist/{client-Dk4H7qeg.d.cts → client-BZUvFL6B.d.cts} +2 -2
- package/dist/codec/index.cjs.map +1 -1
- package/dist/codec/index.d.cts +3 -3
- package/dist/codec/index.d.ts +3 -3
- package/dist/codec/index.js +2 -2
- package/dist/{connection-DU9v3y8a.d.ts → connection-ou9w2dSY.d.ts} +3 -3
- package/dist/{connection-CS00EWuS.d.cts → connection-xxgJHs2o.d.cts} +3 -3
- package/dist/{index-CHCzvZ9D.d.cts → index-BAGGleT3.d.cts} +1 -1
- package/dist/{index-uF0cBM7z.d.ts → index-ZWkoesQD.d.ts} +1 -1
- package/dist/logging/index.d.cts +2 -2
- package/dist/logging/index.d.ts +2 -2
- package/dist/{message-aABg0s5M.d.cts → message-CpXWqmJw.d.cts} +1 -1
- package/dist/{message-aABg0s5M.d.ts → message-CpXWqmJw.d.ts} +1 -1
- package/dist/protobuf/codec.cjs +107 -0
- package/dist/protobuf/codec.cjs.map +1 -0
- package/dist/protobuf/codec.d.cts +13 -0
- package/dist/protobuf/codec.d.ts +13 -0
- package/dist/protobuf/codec.js +7 -0
- package/dist/protobuf/codec.js.map +1 -0
- package/dist/protobuf/index.cjs +1877 -0
- package/dist/protobuf/index.cjs.map +1 -0
- package/dist/protobuf/index.d.cts +488 -0
- package/dist/protobuf/index.d.ts +488 -0
- package/dist/protobuf/index.js +1260 -0
- package/dist/protobuf/index.js.map +1 -0
- package/dist/router/index.cjs +1 -1
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +12 -11
- package/dist/router/index.d.ts +12 -11
- package/dist/router/index.js +1 -1
- package/dist/{server-uNzkzIRh.d.ts → server-BPu7Td80.d.ts} +4 -4
- package/dist/{server-BR0DZaWi.d.cts → server-JdnoVO11.d.cts} +4 -4
- package/dist/{services-B5SY771g.d.ts → services-BrTFTO5Q.d.ts} +104 -93
- package/dist/{services-DBv2nmly.d.cts → services-cwGAC2rB.d.cts} +104 -93
- package/dist/testUtil/index.cjs +25 -5
- package/dist/testUtil/index.cjs.map +1 -1
- package/dist/testUtil/index.d.cts +8 -7
- package/dist/testUtil/index.d.ts +8 -7
- package/dist/testUtil/index.js +2 -2
- package/dist/transport/impls/ws/client.cjs +5 -1
- package/dist/transport/impls/ws/client.cjs.map +1 -1
- package/dist/transport/impls/ws/client.d.cts +7 -6
- package/dist/transport/impls/ws/client.d.ts +7 -6
- package/dist/transport/impls/ws/client.js +2 -2
- package/dist/transport/impls/ws/server.cjs +21 -5
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +7 -6
- package/dist/transport/impls/ws/server.d.ts +7 -6
- package/dist/transport/impls/ws/server.js +2 -2
- package/dist/transport/index.cjs +25 -5
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +8 -7
- package/dist/transport/index.d.ts +8 -7
- package/dist/transport/index.js +2 -2
- package/dist/{transport-BOL2p5s-.d.ts → transport-B1MUtXL7.d.ts} +7 -5
- package/dist/{transport-D3jzhFSi.d.cts → transport-BnU3Zb0Q.d.cts} +7 -5
- package/dist/types-BGGvYIJM.d.cts +20 -0
- package/dist/types-BGGvYIJM.d.ts +20 -0
- package/package.json +12 -1
- package/dist/adapter-CgF7vQPu.d.ts +0 -47
- package/dist/adapter-IGrG4KLL.d.cts +0 -47
- package/dist/chunk-RDTQZ7HO.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../protobuf/client.ts","../../protobuf/errors.ts","../../protobuf/shared.ts","../../protobuf/handshake.ts","../../protobuf/service.ts","../../protobuf/server.ts"],"sourcesContent":["import type {\n DescMethod,\n DescMethodBiDiStreaming,\n DescMethodClientStreaming,\n DescService,\n MessageInitShape,\n MessageShape,\n} from '@bufbuild/protobuf';\nimport { Value } from '@sinclair/typebox/value';\nimport { ClientTransport } from '../transport/client';\nimport { Connection } from '../transport/connection';\nimport { EventMap } from '../transport/events';\nimport {\n ControlFlags,\n ControlMessageCloseSchema,\n OpaqueTransportMessage,\n TransportClientId,\n cancelMessage,\n closeStreamMessage,\n isStreamCancel,\n isStreamClose,\n} from '../transport/message';\nimport { generateId } from '../transport/id';\nimport { ClientHandshakeOptions } from '../router/handshake';\nimport { Err, Ok, type Result } from '../router/result';\nimport {\n Readable,\n ReadableBrokenError,\n ReadableImpl,\n WritableImpl,\n} from '../router/streams';\nimport { Logger } from '../logging';\nimport { createProcTelemetryInfo, getPropagationContext } from '../tracing';\nimport { type ClientError, isSerializedClientErrorResult } from './errors';\nimport {\n CANCEL_CODE,\n INVALID_REQUEST_CODE,\n UNEXPECTED_DISCONNECT_CODE,\n} from '../router/errors';\nimport {\n EMPTY_PROTO_BYTES,\n decodeMessageBytes,\n encodeMessageBytes,\n methodKindToProcType,\n} from './shared';\nimport type {\n BiDiStreamingCall,\n CallOptions,\n Client as ProtobufClient,\n ClientMethod,\n ClientStreamingCall,\n} from './types';\n\n/**\n * Options for the protobuf client.\n */\nexport interface ClientOptions {\n readonly connectOnInvoke: boolean;\n readonly eagerlyConnect: boolean;\n}\n\nconst defaultClientOptions: ClientOptions = {\n connectOnInvoke: true,\n eagerlyConnect: true,\n};\n\ninterface StartedMethodCall<\n InputDesc extends DescMethod['input'],\n OutputDesc extends DescMethod['output'],\n> {\n readonly reqWritable: WritableImpl<MessageInitShape<InputDesc>>;\n readonly resReadable: ReadableImpl<MessageShape<OutputDesc>, ClientError>;\n}\n\n/**\n * Creates a protobuf client for a single protobuf service descriptor.\n */\nexport function createClient<Service extends DescService>(\n service: Service,\n transport: ClientTransport<Connection>,\n serverId: TransportClientId,\n providedClientOptions: Partial<\n ClientOptions & {\n handshakeOptions: ClientHandshakeOptions;\n }\n > = {},\n): ProtobufClient<Service> {\n if (providedClientOptions.handshakeOptions) {\n transport.extendHandshake(providedClientOptions.handshakeOptions);\n }\n\n const clientOptions = { ...defaultClientOptions, ...providedClientOptions };\n if (clientOptions.eagerlyConnect) {\n transport.connect(serverId);\n }\n\n const client: Partial<Record<keyof Service['method'], unknown>> = {};\n for (const methodName of Object.keys(service.method) as Array<\n keyof Service['method']\n >) {\n const method = (service.method as Service['method'])[methodName];\n client[methodName] = createMethodCaller(\n service,\n method,\n transport,\n serverId,\n clientOptions,\n );\n }\n\n return client as ProtobufClient<Service>;\n}\n\nfunction createMethodCaller<Method extends DescMethod>(\n service: DescService,\n method: Method,\n transport: ClientTransport<Connection>,\n serverId: TransportClientId,\n clientOptions: ClientOptions,\n): ClientMethod<Method> {\n switch (method.methodKind) {\n case 'unary':\n return ((\n request: MessageInitShape<Method['input']>,\n options?: CallOptions,\n ) => {\n if (transport.getStatus() === 'closed') {\n return Promise.resolve(\n Err({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: 'transport is closed',\n }),\n );\n }\n\n connectOnInvokeIfNeeded(clientOptions, transport, serverId);\n const { resReadable } = startMethodCall(\n service,\n method,\n transport,\n serverId,\n encodeMessageBytes(method.input, request),\n true,\n options?.signal,\n );\n\n return getSingleMessage(resReadable, transport.log);\n }) as unknown as ClientMethod<Method>;\n\n case 'server_streaming':\n return ((\n request: MessageInitShape<Method['input']>,\n options?: CallOptions,\n ) => {\n if (transport.getStatus() === 'closed') {\n return createPreClosedReadable<MessageShape<Method['output']>>({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: 'transport is closed',\n });\n }\n\n connectOnInvokeIfNeeded(clientOptions, transport, serverId);\n\n return startMethodCall(\n service,\n method,\n transport,\n serverId,\n encodeMessageBytes(method.input, request),\n true,\n options?.signal,\n ).resReadable;\n }) as unknown as ClientMethod<Method>;\n\n case 'client_streaming':\n return ((options?: CallOptions) => {\n if (transport.getStatus() === 'closed') {\n return createPreClosedClientStreamingCall<\n MessageInitShape<Method['input']>,\n MessageShape<Method['output']>\n >();\n }\n\n connectOnInvokeIfNeeded(clientOptions, transport, serverId);\n const { reqWritable, resReadable } = startMethodCall(\n service,\n method,\n transport,\n serverId,\n EMPTY_PROTO_BYTES,\n false,\n options?.signal,\n );\n\n let didFinalize = false;\n\n return {\n reqWritable,\n finalize: () => {\n if (didFinalize) {\n throw new Error('client streaming call already finalized');\n }\n\n didFinalize = true;\n if (!reqWritable.isClosed()) {\n reqWritable.close();\n }\n\n return getSingleMessage(resReadable, transport.log);\n },\n } satisfies ClientStreamingCall<DescMethodClientStreaming>;\n }) as unknown as ClientMethod<Method>;\n\n case 'bidi_streaming':\n return ((options?: CallOptions) => {\n if (transport.getStatus() === 'closed') {\n return createPreClosedBiDiStreamingCall<\n MessageInitShape<Method['input']>,\n MessageShape<Method['output']>\n >();\n }\n\n connectOnInvokeIfNeeded(clientOptions, transport, serverId);\n\n return startMethodCall(\n service,\n method,\n transport,\n serverId,\n EMPTY_PROTO_BYTES,\n false,\n options?.signal,\n ) satisfies BiDiStreamingCall<DescMethodBiDiStreaming>;\n }) as unknown as ClientMethod<Method>;\n }\n}\n\nfunction connectOnInvokeIfNeeded(\n clientOptions: ClientOptions,\n transport: ClientTransport<Connection>,\n serverId: TransportClientId,\n) {\n if (clientOptions.connectOnInvoke && !transport.sessions.has(serverId)) {\n transport.connect(serverId);\n }\n}\n\nfunction startMethodCall<Method extends DescMethod>(\n service: DescService,\n method: Method,\n transport: ClientTransport<Connection>,\n serverId: TransportClientId,\n initialPayload: Uint8Array,\n procClosesWithInit: boolean,\n abortSignal?: AbortSignal,\n): StartedMethodCall<Method['input'], Method['output']> {\n const session =\n transport.sessions.get(serverId) ??\n transport.createUnconnectedSession(serverId);\n const sessionScopedSend = transport.getSessionBoundSendFn(\n serverId,\n session.id,\n );\n\n const streamId = generateId();\n const { span, ctx } = createProcTelemetryInfo(\n transport.tracer,\n session,\n methodKindToProcType(method.methodKind),\n service.typeName,\n method.name,\n streamId,\n );\n\n let cleanClose = true;\n const reqWritable = new WritableImpl<MessageInitShape<Method['input']>>({\n writeCb: (value) => {\n sessionScopedSend({\n streamId,\n payload: encodeMessageBytes(method.input, value),\n controlFlags: 0,\n });\n },\n closeCb: () => {\n span.addEvent('reqWritable closed');\n\n if (!procClosesWithInit && cleanClose) {\n sessionScopedSend(closeStreamMessage(streamId));\n }\n\n if (resReadable.isClosed()) {\n cleanup();\n }\n },\n });\n\n const resReadable = new ReadableImpl<\n MessageShape<Method['output']>,\n ClientError\n >();\n const closeReadable = () => {\n if (resReadable.isClosed()) {\n return;\n }\n\n resReadable._triggerClose();\n span.addEvent('resReadable closed');\n\n if (reqWritable.isClosed()) {\n cleanup();\n }\n };\n\n function cleanup() {\n transport.removeEventListener('message', onMessage);\n transport.removeEventListener('sessionStatus', onSessionStatus);\n abortSignal?.removeEventListener('abort', onClientCancel);\n span.end();\n }\n\n function pushResponseError(error: ClientError) {\n if (!resReadable.isClosed()) {\n resReadable._pushValue(Err(error));\n closeReadable();\n }\n\n reqWritable.close();\n }\n\n function onClientCancel() {\n if (resReadable.isClosed() && reqWritable.isClosed()) {\n return;\n }\n\n span.addEvent('sending cancel');\n cleanClose = false;\n\n const error: ClientError = {\n code: CANCEL_CODE,\n message: 'cancelled by client',\n };\n pushResponseError(error);\n sessionScopedSend(cancelMessage(streamId, Err(error)));\n }\n\n function onMessage(msg: OpaqueTransportMessage) {\n if (msg.streamId !== streamId) {\n return;\n }\n\n if (msg.to !== transport.clientId) {\n transport.log?.error('got stream message from unexpected client', {\n clientId: transport.clientId,\n transportMessage: msg,\n });\n\n return;\n }\n\n if (isStreamCancel(msg.controlFlags)) {\n cleanClose = false;\n span.addEvent('received cancel');\n\n const error: ClientError = isSerializedClientErrorResult(msg.payload)\n ? msg.payload.payload\n : {\n code: CANCEL_CODE,\n message: 'stream cancelled with invalid payload',\n };\n pushResponseError(error);\n\n return;\n }\n\n if (resReadable.isClosed()) {\n transport.log?.error('received message after response stream is closed', {\n clientId: transport.clientId,\n transportMessage: msg,\n });\n\n return;\n }\n\n if (!Value.Check(ControlMessageCloseSchema, msg.payload)) {\n if (msg.payload instanceof Uint8Array) {\n try {\n resReadable._pushValue(\n Ok(\n decodeMessageBytes(method.output, msg.payload) as MessageShape<\n Method['output']\n >,\n ),\n );\n } catch (err) {\n pushResponseError({\n code: INVALID_REQUEST_CODE,\n message: 'failed to decode protobuf response payload',\n extras: { cause: err },\n });\n\n return;\n }\n } else if (isSerializedClientErrorResult(msg.payload)) {\n resReadable._pushValue(msg.payload);\n } else {\n pushResponseError({\n code: INVALID_REQUEST_CODE,\n message: 'received invalid protobuf response payload',\n });\n\n return;\n }\n }\n\n if (isStreamClose(msg.controlFlags)) {\n span.addEvent('received response close');\n closeReadable();\n }\n }\n\n function onSessionStatus(evt: EventMap['sessionStatus']) {\n if (\n evt.status !== 'closing' ||\n evt.session.to !== serverId ||\n session.id !== evt.session.id\n ) {\n return;\n }\n\n cleanClose = false;\n pushResponseError({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: `${serverId} unexpectedly disconnected`,\n });\n }\n\n abortSignal?.addEventListener('abort', onClientCancel);\n transport.addEventListener('message', onMessage);\n transport.addEventListener('sessionStatus', onSessionStatus);\n\n try {\n sessionScopedSend({\n streamId,\n serviceName: service.typeName,\n procedureName: method.name,\n tracing: getPropagationContext(ctx),\n payload: initialPayload,\n controlFlags: procClosesWithInit\n ? ControlFlags.StreamOpenBit | ControlFlags.StreamClosedBit\n : ControlFlags.StreamOpenBit,\n });\n } catch (err) {\n cleanup();\n throw err;\n }\n\n if (procClosesWithInit) {\n reqWritable.close();\n }\n\n return { reqWritable, resReadable };\n}\n\nfunction createPreClosedReadable<T>(\n error: ClientError,\n): Readable<T, ClientError> {\n const readable = new ReadableImpl<T, ClientError>();\n readable._pushValue(Err(error));\n readable._triggerClose();\n\n return readable;\n}\n\nfunction createPreClosedWritable<T>(): WritableImpl<T> {\n const writable = new WritableImpl<T>({\n writeCb: () => undefined,\n closeCb: () => undefined,\n });\n writable.close();\n\n return writable;\n}\n\nfunction createPreClosedClientStreamingCall<Input, Output>(): {\n reqWritable: WritableImpl<Input>;\n finalize: () => Promise<Result<Output, ClientError>>;\n} {\n return {\n reqWritable: createPreClosedWritable<Input>(),\n finalize: () =>\n Promise.resolve(\n Err({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: 'transport is closed',\n }),\n ),\n };\n}\n\nfunction createPreClosedBiDiStreamingCall<Input, Output>(): {\n reqWritable: WritableImpl<Input>;\n resReadable: Readable<Output, ClientError>;\n} {\n return {\n reqWritable: createPreClosedWritable<Input>(),\n resReadable: createPreClosedReadable<Output>({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: 'transport is closed',\n }),\n };\n}\n\nasync function getSingleMessage<T>(\n resReadable: Readable<T, ClientError>,\n log?: Logger,\n): Promise<Result<T, ClientError>> {\n const ret = await resReadable.collect();\n if (ret.length === 0) {\n return Err({\n code: INVALID_REQUEST_CODE,\n message: 'expected single response from server, got none',\n });\n }\n\n if (ret.length > 1) {\n log?.error('expected single protobuf response from server, got multiple');\n }\n\n const first = ret[0];\n if (!first.ok) {\n if (first.payload.code === ReadableBrokenError.code) {\n return Err({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: first.payload.message,\n });\n }\n\n return Err(first.payload);\n }\n\n return first;\n}\n","import {\n CANCEL_CODE,\n INVALID_REQUEST_CODE,\n UNCAUGHT_ERROR_CODE,\n UNEXPECTED_DISCONNECT_CODE,\n} from '../router/errors';\nimport { type ErrResult, type ErrorPayload } from '../router/result';\n\n/**\n * Canonical RPC error codes shared by gRPC and Connect.\n *\n * The protobuf router uses these codes for unary rejections and streamed error\n * messages so applications can reason about familiar transport-agnostic error\n * categories.\n */\nexport enum RiverErrorCode {\n OK = 'OK',\n CANCELED = 'CANCELED',\n UNKNOWN = 'UNKNOWN',\n INVALID_ARGUMENT = 'INVALID_ARGUMENT',\n DEADLINE_EXCEEDED = 'DEADLINE_EXCEEDED',\n NOT_FOUND = 'NOT_FOUND',\n ALREADY_EXISTS = 'ALREADY_EXISTS',\n PERMISSION_DENIED = 'PERMISSION_DENIED',\n RESOURCE_EXHAUSTED = 'RESOURCE_EXHAUSTED',\n FAILED_PRECONDITION = 'FAILED_PRECONDITION',\n ABORTED = 'ABORTED',\n OUT_OF_RANGE = 'OUT_OF_RANGE',\n UNIMPLEMENTED = 'UNIMPLEMENTED',\n INTERNAL = 'INTERNAL',\n UNAVAILABLE = 'UNAVAILABLE',\n DATA_LOSS = 'DATA_LOSS',\n UNAUTHENTICATED = 'UNAUTHENTICATED',\n}\n\n/**\n * Protocol-level error codes surfaced by River itself rather than user\n * handlers.\n */\nexport type ProtocolErrorCode =\n | typeof CANCEL_CODE\n | typeof INVALID_REQUEST_CODE\n | typeof UNCAUGHT_ERROR_CODE\n | typeof UNEXPECTED_DISCONNECT_CODE;\n\n/**\n * Error codes visible from the protobuf client surface.\n */\nexport type ClientErrorCode = RiverErrorCode | ProtocolErrorCode;\n\nconst riverErrorCodeSet = new Set<string>(Object.values(RiverErrorCode));\nconst protocolErrorCodeSet = new Set<string>([\n CANCEL_CODE,\n INVALID_REQUEST_CODE,\n UNCAUGHT_ERROR_CODE,\n UNEXPECTED_DISCONNECT_CODE,\n]);\n\n/**\n * A serialized protobuf error detail.\n *\n * The `typeName` identifies the protobuf message descriptor the client can use\n * to decode `value`.\n */\nexport interface RiverErrorDetail {\n readonly typeName: string;\n readonly value: Uint8Array;\n}\n\n/**\n * A plain-object error payload used by the protobuf router.\n *\n * Handlers return these via `Err({ code, message, ... })`.\n */\nexport interface ClientError extends ErrorPayload {\n readonly code: ClientErrorCode;\n readonly metadata?: Readonly<Record<string, string>>;\n readonly details?: ReadonlyArray<RiverErrorDetail>;\n}\n\n/**\n * A protocol error emitted by the River runtime.\n */\nexport interface ProtocolError extends ClientError {\n readonly code: ProtocolErrorCode;\n}\n\n/**\n * Returns true when the given value matches the wire shape of a client error\n * with a canonical RPC error code.\n */\nexport function isRiverError(value: unknown): value is ClientError {\n if (!(typeof value === 'object' && value !== null)) {\n return false;\n }\n\n const candidate = value as Partial<ClientError>;\n\n return (\n isRiverErrorCode(candidate.code) && typeof candidate.message === 'string'\n );\n}\n\n/**\n * Returns true when the given value is a protocol error.\n */\nexport function isProtocolError(value: unknown): value is ProtocolError {\n if (!(typeof value === 'object' && value !== null)) {\n return false;\n }\n\n const candidate = value as Partial<ProtocolError>;\n\n return (\n isProtocolErrorCode(candidate.code) && typeof candidate.message === 'string'\n );\n}\n\n/**\n * Returns true when the given value is any client-visible error.\n */\nexport function isClientError(value: unknown): value is ClientError {\n return isRiverError(value) || isProtocolError(value);\n}\n\n/**\n * Returns true when the given value matches the `Err(...)` wrapper used for\n * protobuf cancel payloads sent by the runtime or handlers.\n */\nexport function isSerializedClientErrorResult(\n value: unknown,\n): value is ErrResult<ClientError> {\n return isErrResultWithPayload(value, isClientError);\n}\n\n/**\n * Returns true when the given value matches the protocol-only cancel payloads\n * sent by clients.\n */\nexport function isSerializedProtocolErrorResult(\n value: unknown,\n): value is ErrResult<ProtocolError> {\n return isErrResultWithPayload(value, isProtocolError);\n}\n\n// -- internal helpers --\n\nfunction isRiverErrorCode(value: unknown): value is RiverErrorCode {\n return typeof value === 'string' && riverErrorCodeSet.has(value);\n}\n\nfunction isProtocolErrorCode(value: unknown): value is ProtocolErrorCode {\n return typeof value === 'string' && protocolErrorCodeSet.has(value);\n}\n\nfunction isErrResultWithPayload<T extends ErrorPayload>(\n value: unknown,\n predicate: (payload: unknown) => payload is T,\n): value is ErrResult<T> {\n if (!(typeof value === 'object' && value !== null)) {\n return false;\n }\n\n const candidate = value as { ok?: unknown; payload?: unknown };\n\n return candidate.ok === false && predicate(candidate.payload);\n}\n","import { create, fromBinary, toBinary } from '@bufbuild/protobuf';\nimport type {\n DescMessage,\n DescMethod,\n MessageInitShape,\n MessageShape,\n} from '@bufbuild/protobuf';\nimport type { ValidProcType } from '../router';\n\n/**\n * Empty protobuf payload used to open client-streaming and bidi streams without\n * inventing a separate request-init concept.\n */\nexport const EMPTY_PROTO_BYTES = new Uint8Array(0);\n\n/**\n * Convert protobuf method kinds into River procedure kinds for telemetry and\n * stream lifecycle behavior.\n */\nexport function methodKindToProcType(\n methodKind: DescMethod['methodKind'],\n): ValidProcType {\n switch (methodKind) {\n case 'unary':\n return 'rpc';\n case 'server_streaming':\n return 'subscription';\n case 'client_streaming':\n return 'upload';\n case 'bidi_streaming':\n return 'stream';\n }\n}\n\n/**\n * A stable registration key for a protobuf method.\n */\nexport function methodKey(serviceName: string, methodName: string): string {\n return `${serviceName}/${methodName}`;\n}\n\n/**\n * Encode a protobuf message init shape into wire bytes.\n */\nexport function encodeMessageBytes<Schema extends DescMessage>(\n schema: Schema,\n message: MessageInitShape<Schema>,\n): Uint8Array {\n return toBinary(schema, create(schema, message)) as Uint8Array;\n}\n\n/**\n * Decode protobuf wire bytes into a typed message shape.\n */\nexport function decodeMessageBytes<Schema extends DescMessage>(\n schema: Schema,\n payload: Uint8Array,\n): MessageShape<Schema> {\n return fromBinary(schema, payload) as MessageShape<Schema>;\n}\n","import type {\n DescMessage,\n MessageInitShape,\n MessageShape,\n} from '@bufbuild/protobuf';\nimport { Static, Type } from '@sinclair/typebox';\nimport {\n createClientHandshakeOptions as createTransportClientHandshakeOptions,\n createServerHandshakeOptions as createTransportServerHandshakeOptions,\n type ClientHandshakeOptions,\n type ServerHandshakeOptions,\n} from '../router/handshake';\nimport { HandshakeErrorCustomHandlerFatalResponseCodes } from '../transport/message';\nimport { decodeMessageBytes, encodeMessageBytes } from './shared';\n\n/**\n * The handshake metadata for protobuf services travels as encoded protobuf bytes\n * over River's existing handshake extension slot.\n */\nconst HandshakeBytesSchema = Type.Uint8Array();\n\ntype ProtobufHandshakeFailureCode = Static<\n typeof HandshakeErrorCustomHandlerFatalResponseCodes\n>;\n\ntype ConstructHandshake<Schema extends DescMessage> = () =>\n | MessageInitShape<Schema>\n | Promise<MessageInitShape<Schema>>;\n\ntype ValidateHandshake<Schema extends DescMessage, ParsedMetadata> = (\n metadata: MessageShape<Schema>,\n previousParsedMetadata?: ParsedMetadata,\n) =>\n | ParsedMetadata\n | ProtobufHandshakeFailureCode\n | Promise<ParsedMetadata | ProtobufHandshakeFailureCode>;\n\n/**\n * Create client-side handshake options backed by a protobuf message type.\n */\nexport function createClientHandshakeOptions<Schema extends DescMessage>(\n schema: Schema,\n construct: ConstructHandshake<Schema>,\n): ClientHandshakeOptions<typeof HandshakeBytesSchema> {\n return createTransportClientHandshakeOptions(\n HandshakeBytesSchema,\n async () => {\n const metadata = await construct();\n\n return encodeMessageBytes(schema, metadata);\n },\n );\n}\n\n/**\n * Create server-side handshake options backed by a protobuf message type.\n */\nexport function createServerHandshakeOptions<\n Schema extends DescMessage,\n ParsedMetadata extends object = object,\n>(\n schema: Schema,\n validate: ValidateHandshake<Schema, ParsedMetadata>,\n): ServerHandshakeOptions<typeof HandshakeBytesSchema, ParsedMetadata> {\n return createTransportServerHandshakeOptions(\n HandshakeBytesSchema,\n async (metadata, previousParsedMetadata) => {\n let decoded;\n try {\n decoded = decodeMessageBytes(schema, metadata);\n } catch {\n return 'REJECTED_BY_CUSTOM_HANDLER' as ProtobufHandshakeFailureCode;\n }\n\n return await validate(decoded, previousParsedMetadata);\n },\n );\n}\n","import type { DescMethod, DescService } from '@bufbuild/protobuf';\nimport type { MethodImpl, ServiceImpl } from './types';\n\n/**\n * An object that may implement async or sync disposal.\n */\nexport type MaybeDisposable<T extends object = Record<string, unknown>> = T & {\n [Symbol.asyncDispose]?: () => PromiseLike<void>;\n [Symbol.dispose]?: () => void;\n};\n\n/**\n * Stored registration for a single protobuf method handler.\n */\nexport interface RegisteredMethod {\n readonly service: DescService;\n readonly method: DescMethod;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly impl: MethodImpl<DescMethod, any, any, any>;\n}\n\n/**\n * An instantiated protobuf service with initialized state and a disposal hook.\n */\nexport interface InstantiatedProtoService {\n readonly descriptor: DescService;\n readonly state: MaybeDisposable<object>;\n readonly methods: ReadonlyMap<string, RegisteredMethod>;\n [Symbol.asyncDispose]: () => PromiseLike<void>;\n}\n\n/**\n * Type-erased interface used by the server to interact with a\n * service definition without knowing its full generic signature.\n */\nexport interface AnyProtoService {\n readonly descriptor: DescService;\n readonly methods: ReadonlyMap<string, RegisteredMethod>;\n instantiate(ctx: object): InstantiatedProtoService;\n}\n\ninterface ServiceConfiguration<Context extends object, State extends object> {\n initializeState: (ctx: Context) => MaybeDisposable<State>;\n}\n\nfunction buildMethodMap<\n Service extends DescService,\n Context extends object,\n State extends object,\n ParsedMetadata extends object,\n>(\n descriptor: Service,\n handlers: ServiceImpl<Service, Context, State, ParsedMetadata>,\n): Map<string, RegisteredMethod> {\n const methods = new Map<string, RegisteredMethod>();\n const typedMethods = descriptor.method as Service['method'];\n\n for (const methodName of Object.keys(handlers) as Array<\n keyof typeof handlers & string\n >) {\n const handler = handlers[methodName];\n if (handler === undefined) {\n continue;\n }\n\n const method = typedMethods[methodName as keyof Service['method']] as\n | DescMethod\n | undefined;\n if (!method) {\n throw new Error(`unknown method ${methodName} on ${descriptor.typeName}`);\n }\n\n methods.set(method.name, {\n service: descriptor,\n method,\n impl: handler as MethodImpl<DescMethod>,\n });\n }\n\n return methods;\n}\n\n/**\n * A scaffold for defining a protobuf service's handlers across multiple files.\n *\n * @see {@link ProtoServiceSchema.scaffold}\n */\nclass ProtoServiceScaffold<\n Service extends DescService,\n Context extends object,\n State extends object,\n ParsedMetadata extends object,\n> {\n private readonly descriptor: Service;\n private readonly config: ServiceConfiguration<Context, State>;\n\n constructor(\n descriptor: Service,\n config: ServiceConfiguration<Context, State>,\n ) {\n this.descriptor = descriptor;\n this.config = config;\n }\n\n /**\n * Type-check a partial set of handler implementations against this\n * service's types. Returns the input unchanged -- this is purely a\n * type-level helper for splitting handlers across files.\n *\n * @param handlers - A partial set of method implementations.\n */\n procedures(\n handlers: ServiceImpl<Service, Context, State, ParsedMetadata>,\n ): ServiceImpl<Service, Context, State, ParsedMetadata> {\n return handlers;\n }\n\n /**\n * Finalize the scaffold into a service definition. Provide all handlers\n * here (or spread in handler objects from {@link procedures}).\n *\n * @param handlers - Method implementations (missing methods return\n * UNIMPLEMENTED at runtime).\n */\n finalize(handlers: ServiceImpl<Service, Context, State, ParsedMetadata>) {\n return createProtoService<Context, ParsedMetadata>().define(\n this.descriptor,\n this.config,\n handlers,\n );\n }\n}\n\n/**\n * Creates a factory for defining protobuf services with typed context and\n * metadata.\n *\n * This mirrors {@link createServiceSchema} from the TypeBox router. The\n * factory binds the `Context` and `ParsedMetadata` types, then provides\n * `.define()` and `.scaffold()` methods for creating service definitions.\n *\n * @example\n * ```ts\n * const ProtoService = createProtoService<AppContext, ParsedMetadata>();\n *\n * // all-in-one (stateless)\n * const testSvc = ProtoService.define(TestService, {\n * echo: (req, ctx) => Ok({ text: req.text }),\n * });\n *\n * // all-in-one (with state)\n * const testSvc = ProtoService.define(\n * TestService,\n * { initializeState: (ctx) => ({ counter: 0 }) },\n * {\n * echo: (req, ctx) => {\n * ctx.state.counter++;\n * return Ok({ text: req.text });\n * },\n * },\n * );\n *\n * // scaffold for file-splitting\n * const scaffold = ProtoService.scaffold(TestService, {\n * initializeState: (ctx) => ({ counter: 0 }),\n * });\n * const echoHandlers = scaffold.procedures({\n * echo: (req, ctx) => Ok({ text: req.text }),\n * });\n * const testSvc = scaffold.finalize({\n * ...echoHandlers,\n * });\n *\n * const server = createServer(transport, [testSvc], {\n * context: myAppContext,\n * });\n * ```\n */\nexport function createProtoService<\n Context extends object = object,\n ParsedMetadata extends object = object,\n>() {\n return class ProtoServiceSchema<\n Service extends DescService,\n State extends object,\n > implements AnyProtoService\n {\n readonly descriptor: Service;\n readonly methods: ReadonlyMap<string, RegisteredMethod>;\n\n /** @internal */\n readonly initializeStateFn:\n | ((ctx: Context) => MaybeDisposable<State>)\n | undefined;\n\n constructor(\n descriptor: Service,\n initializeStateFn: ((ctx: Context) => MaybeDisposable<State>) | undefined,\n methods: Map<string, RegisteredMethod>,\n ) {\n this.descriptor = descriptor;\n this.initializeStateFn = initializeStateFn;\n this.methods = methods;\n }\n\n /**\n * Create a live service instance with initialized state.\n *\n * @param ctx - The user-provided context, passed to `initializeState`.\n */\n instantiate(ctx: Context): InstantiatedProtoService {\n const state = this.initializeStateFn\n ? this.initializeStateFn(ctx)\n : ({} as MaybeDisposable<State>);\n\n return Object.freeze({\n descriptor: this.descriptor,\n state,\n methods: this.methods,\n async [Symbol.asyncDispose]() {\n await state[Symbol.asyncDispose]?.();\n state[Symbol.dispose]?.();\n },\n });\n }\n\n /**\n * Define a stateless protobuf service with the given handlers.\n *\n * @param descriptor - The generated protobuf service descriptor.\n * @param handlers - Method implementations (missing methods return\n * UNIMPLEMENTED at runtime).\n */\n static define<S extends DescService>(\n descriptor: S,\n handlers: ServiceImpl<S, Context, object, ParsedMetadata>,\n ): ProtoServiceSchema<S, object>;\n /**\n * Define a stateful protobuf service with configuration and handlers.\n *\n * @param descriptor - The generated protobuf service descriptor.\n * @param config - Service configuration including `initializeState`.\n * @param handlers - Method implementations (missing methods return\n * UNIMPLEMENTED at runtime).\n */\n static define<S extends DescService, St extends object>(\n descriptor: S,\n config: ServiceConfiguration<Context, St>,\n handlers: ServiceImpl<S, Context, St, ParsedMetadata>,\n ): ProtoServiceSchema<S, St>;\n static define<S extends DescService, St extends object>(\n descriptor: S,\n configOrHandlers:\n | ServiceConfiguration<Context, St>\n | ServiceImpl<S, Context, St, ParsedMetadata>,\n maybeHandlers?: ServiceImpl<S, Context, St, ParsedMetadata>,\n ): ProtoServiceSchema<S, St> {\n let initializeStateFn:\n | ((ctx: Context) => MaybeDisposable<St>)\n | undefined;\n let handlers: ServiceImpl<S, Context, St, ParsedMetadata>;\n\n if (\n 'initializeState' in configOrHandlers &&\n typeof configOrHandlers.initializeState === 'function'\n ) {\n if (!maybeHandlers) {\n throw new Error('expected handlers as third argument');\n }\n\n initializeStateFn = (\n configOrHandlers as ServiceConfiguration<Context, St>\n ).initializeState;\n handlers = maybeHandlers;\n } else {\n initializeStateFn = undefined;\n handlers = configOrHandlers as ServiceImpl<\n S,\n Context,\n St,\n ParsedMetadata\n >;\n }\n\n return new ProtoServiceSchema(\n descriptor,\n initializeStateFn,\n buildMethodMap(descriptor, handlers),\n );\n }\n\n /**\n * Create a scaffold for splitting handler implementations across files.\n *\n * @param descriptor - The generated protobuf service descriptor.\n * @param config - Service configuration including `initializeState`.\n */\n static scaffold<S extends DescService, St extends object>(\n descriptor: S,\n config: ServiceConfiguration<Context, St>,\n ) {\n return new ProtoServiceScaffold<S, Context, St, ParsedMetadata>(\n descriptor,\n config,\n );\n }\n };\n}\n","import type {\n DescMethod,\n DescService,\n MessageInitShape,\n MessageShape,\n} from '@bufbuild/protobuf';\nimport { TSchema } from '@sinclair/typebox';\nimport { Value } from '@sinclair/typebox/value';\nimport { context as otelContext, trace, type Span } from '@opentelemetry/api';\nimport { Logger } from '../logging';\nimport { ServerHandshakeOptions } from '../router/handshake';\nimport { Err, Ok, type Result } from '../router/result';\nimport { ReadableImpl, WritableImpl } from '../router/streams';\nimport { Connection } from '../transport/connection';\nimport { EventMap } from '../transport/events';\nimport {\n ControlFlags,\n ControlMessageCloseSchema,\n OpaqueTransportMessage,\n TransportClientId,\n cancelMessage,\n closeStreamMessage,\n isStreamCancel,\n isStreamClose,\n isStreamOpen,\n} from '../transport/message';\nimport { ServerTransport } from '../transport/server';\nimport { coerceErrorString } from '../transport/stringifyError';\nimport type { SessionBoundSendFn } from '../transport/transport';\nimport type { IdentifiedSession } from '../transport/sessionStateMachine/common';\nimport {\n PropagationContext,\n createHandlerSpan,\n getTracer,\n recordRiverError,\n} from '../tracing';\nimport type { ProtobufHandlerContext } from './context';\nimport {\n type ClientError,\n type ProtocolError,\n RiverErrorCode,\n isSerializedProtocolErrorResult,\n} from './errors';\nimport {\n CANCEL_CODE,\n INVALID_REQUEST_CODE,\n UNCAUGHT_ERROR_CODE,\n UNEXPECTED_DISCONNECT_CODE,\n} from '../router/errors';\nimport {\n decodeMessageBytes,\n encodeMessageBytes,\n methodKey,\n methodKindToProcType,\n} from './shared';\nimport type {\n AnyProtoService,\n InstantiatedProtoService,\n MaybeDisposable,\n RegisteredMethod,\n} from './service';\n\ntype StreamId = string;\n\ntype HandlerResponse<Method extends DescMethod> = Result<\n MessageInitShape<Method['output']>,\n ClientError\n>;\n\ninterface StreamInitProps {\n readonly streamId: StreamId;\n readonly service: DescService;\n readonly method: DescMethod;\n readonly impl: RegisteredMethod['impl'];\n readonly serviceContext: object;\n readonly serviceState: object;\n readonly sessionMetadata: object;\n readonly initialSession: IdentifiedSession;\n readonly initialRequest: MessageShape<DescMethod['input']> | null;\n readonly closeRequestOnStart: boolean;\n readonly tracingCtx: PropagationContext | undefined;\n}\n\ninterface ProcStream {\n readonly streamId: StreamId;\n readonly from: TransportClientId;\n readonly service: DescService;\n readonly method: DescMethod;\n readonly handleMsg: (msg: OpaqueTransportMessage) => void;\n readonly handleSessionDisconnect: () => void;\n}\n\n/**\n * Server instance for the protobuf router.\n */\nexport interface Server {\n readonly streams: Map<StreamId, ProcStream>;\n close(): Promise<void>;\n}\n\n/**\n * Context passed to protobuf middleware.\n */\nexport type MiddlewareContext<ParsedMetadata extends object = object> =\n Readonly<\n Omit<ProtobufHandlerContext<object, object, ParsedMetadata>, 'cancel'>\n > & {\n readonly streamId: StreamId;\n readonly procedureName: string;\n readonly serviceName: string;\n };\n\n/**\n * Parameters passed to protobuf middleware.\n */\nexport interface MiddlewareParam<ParsedMetadata extends object = object> {\n readonly ctx: MiddlewareContext<ParsedMetadata>;\n readonly reqInit: MessageShape<DescMethod['input']> | null;\n next: () => void;\n}\n\n/**\n * Middleware is a function that can inspect protobuf requests as they are\n * received.\n */\nexport type Middleware<ParsedMetadata extends object = object> = (\n param: MiddlewareParam<ParsedMetadata>,\n) => void;\n\n/**\n * Options for creating a protobuf server.\n */\nexport interface ServerOptions<\n MetadataSchema extends TSchema,\n ParsedMetadata extends object,\n> {\n readonly extendedContext?: object;\n readonly handshakeOptions?: ServerHandshakeOptions<\n MetadataSchema,\n ParsedMetadata\n >;\n readonly middlewares?: Array<Middleware<ParsedMetadata>>;\n readonly maxCancelledStreamTombstonesPerSession?: number;\n}\n\nclass ProtobufServer<\n MetadataSchema extends TSchema,\n ParsedMetadata extends object,\n> implements Server\n{\n readonly streams: Map<StreamId, ProcStream>;\n\n private readonly transport: ServerTransport<\n Connection,\n MetadataSchema,\n ParsedMetadata\n >;\n\n private readonly methods: Map<string, RegisteredMethod>;\n private readonly serviceInstances: Map<string, InstantiatedProtoService>;\n private readonly userContext: object;\n\n private readonly log?: Logger;\n private readonly middlewares: Array<Middleware<ParsedMetadata>>;\n private readonly serverCancelledStreams: Map<\n TransportClientId,\n LRUSet<StreamId>\n >;\n\n private readonly maxCancelledStreamTombstonesPerSession: number;\n private unregisterTransportListeners: () => void;\n\n constructor(\n transport: ServerTransport<Connection, MetadataSchema, ParsedMetadata>,\n services: ReadonlyArray<AnyProtoService>,\n options: ServerOptions<MetadataSchema, ParsedMetadata> = {},\n ) {\n this.transport = transport;\n this.log = transport.log;\n this.middlewares = options.middlewares ?? [];\n this.maxCancelledStreamTombstonesPerSession =\n options.maxCancelledStreamTombstonesPerSession ?? 200;\n this.serverCancelledStreams = new Map();\n this.streams = new Map();\n this.userContext = options.extendedContext ?? {};\n\n // merge method registrations from all services\n this.methods = new Map();\n this.serviceInstances = new Map();\n\n for (const svc of services) {\n if (this.serviceInstances.has(svc.descriptor.typeName)) {\n throw new Error(\n `duplicate protobuf service registration for ${svc.descriptor.typeName}`,\n );\n }\n\n const instance = svc.instantiate(this.userContext);\n this.serviceInstances.set(svc.descriptor.typeName, instance);\n\n for (const [, reg] of instance.methods) {\n this.methods.set(\n methodKey(svc.descriptor.typeName, reg.method.name),\n reg,\n );\n }\n }\n\n if (options.handshakeOptions) {\n transport.extendHandshake(options.handshakeOptions);\n }\n\n const handleCreatingNewStreams = (message: EventMap['message']) => {\n if (message.to !== this.transport.clientId) {\n this.log?.info(\n `got msg with destination that isn't this server, ignoring`,\n {\n clientId: this.transport.clientId,\n transportMessage: message,\n },\n );\n\n return;\n }\n\n const stream = this.streams.get(message.streamId);\n if (stream) {\n stream.handleMsg(message);\n\n return;\n }\n\n if (\n this.serverCancelledStreams.get(message.from)?.has(message.streamId)\n ) {\n return;\n }\n\n const newStreamProps = this.validateNewProcStream(message);\n if (!newStreamProps) {\n return;\n }\n\n createHandlerSpan(\n transport.tracer,\n newStreamProps.initialSession,\n methodKindToProcType(newStreamProps.method.methodKind),\n newStreamProps.service.typeName,\n newStreamProps.method.name,\n newStreamProps.streamId,\n newStreamProps.tracingCtx,\n (span) => {\n this.createNewProcStream(span, newStreamProps);\n },\n );\n };\n\n const handleSessionStatus = (evt: EventMap['sessionStatus']) => {\n if (evt.status !== 'closing') {\n return;\n }\n\n const disconnectedClientId = evt.session.to;\n this.log?.info(\n `got session disconnect from ${disconnectedClientId}, cleaning up protobuf streams`,\n evt.session.loggingMetadata,\n );\n\n for (const stream of this.streams.values()) {\n if (stream.from === disconnectedClientId) {\n stream.handleSessionDisconnect();\n }\n }\n\n this.serverCancelledStreams.delete(disconnectedClientId);\n };\n\n const handleTransportStatus = (evt: EventMap['transportStatus']) => {\n if (evt.status === 'closed') {\n this.unregisterTransportListeners();\n }\n };\n\n this.unregisterTransportListeners = () => {\n this.transport.removeEventListener('message', handleCreatingNewStreams);\n this.transport.removeEventListener('sessionStatus', handleSessionStatus);\n this.transport.removeEventListener(\n 'transportStatus',\n handleTransportStatus,\n );\n };\n\n this.transport.addEventListener('message', handleCreatingNewStreams);\n this.transport.addEventListener('sessionStatus', handleSessionStatus);\n this.transport.addEventListener('transportStatus', handleTransportStatus);\n }\n\n async close() {\n this.unregisterTransportListeners();\n\n for (const instance of this.serviceInstances.values()) {\n await instance[Symbol.asyncDispose]();\n }\n\n const ctx = this.userContext as MaybeDisposable;\n if (ctx[Symbol.asyncDispose]) {\n await ctx[Symbol.asyncDispose]?.();\n } else if (ctx[Symbol.dispose]) {\n ctx[Symbol.dispose]?.();\n } else {\n for (const value of Object.values(ctx)) {\n if (value && typeof value === 'object') {\n const v = value as MaybeDisposable;\n if (v[Symbol.asyncDispose]) {\n await v[Symbol.asyncDispose]?.();\n } else if (v[Symbol.dispose]) {\n v[Symbol.dispose]?.();\n }\n }\n }\n }\n }\n\n private createNewProcStream(span: Span, props: StreamInitProps) {\n const {\n streamId,\n service,\n method,\n impl,\n serviceContext,\n serviceState,\n sessionMetadata,\n initialSession,\n initialRequest,\n closeRequestOnStart,\n } = props;\n const { to: from, loggingMetadata, id: sessionId } = initialSession;\n\n loggingMetadata.telemetry = {\n traceId: span.spanContext().traceId,\n spanId: span.spanContext().spanId,\n };\n\n let cleanClose = true;\n const finishedController = new AbortController();\n const sessionScopedSend = this.transport.getSessionBoundSendFn(\n from,\n sessionId,\n );\n\n const deferredCleanups: Array<() => void | Promise<void>> = [];\n let cleanupsHaveRun = false;\n\n const runCleanupSafe = async (fn: () => void | Promise<void>) => {\n try {\n await fn();\n } catch (err) {\n span.recordException(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n };\n\n const deferCleanup = (fn: () => void | Promise<void>) => {\n if (cleanupsHaveRun) {\n void runCleanupSafe(fn);\n\n return;\n }\n\n deferredCleanups.push(fn);\n };\n\n const runDeferredCleanups = async () => {\n if (deferredCleanups.length === 0) {\n cleanupsHaveRun = true;\n span.end();\n\n return;\n }\n\n const cleanupSpan = getTracer().startSpan(\n 'river.cleanup',\n {},\n trace.setSpan(otelContext.active(), span),\n );\n\n try {\n for (let fn = deferredCleanups.pop(); fn; fn = deferredCleanups.pop()) {\n await runCleanupSafe(fn);\n }\n } finally {\n cleanupsHaveRun = true;\n cleanupSpan.end();\n span.end();\n }\n };\n\n const cleanup = () => {\n finishedController.abort();\n this.streams.delete(streamId);\n void runDeferredCleanups();\n };\n\n const reqReadable = new ReadableImpl<\n MessageShape<DescMethod['input']>,\n ProtocolError\n >();\n const closeReadable = () => {\n if (reqReadable.isClosed()) {\n return;\n }\n\n reqReadable._triggerClose();\n if (resWritable.isClosed()) {\n cleanup();\n }\n };\n\n const procClosesWithResponse =\n method.methodKind === 'unary' || method.methodKind === 'client_streaming';\n\n const resWritable = new WritableImpl<HandlerResponse<DescMethod>>({\n writeCb: (response) => {\n const payload = response.ok\n ? encodeMessageBytes(method.output, response.payload)\n : Err(response.payload);\n\n if (!response.ok) {\n recordRiverError(span, response.payload);\n }\n\n sessionScopedSend({\n streamId,\n controlFlags: procClosesWithResponse\n ? ControlFlags.StreamClosedBit\n : 0,\n payload,\n });\n\n if (procClosesWithResponse) {\n resWritable.close();\n }\n },\n closeCb: () => {\n if (!procClosesWithResponse && cleanClose) {\n sessionScopedSend(closeStreamMessage(streamId));\n }\n\n if (reqReadable.isClosed()) {\n cleanup();\n }\n },\n });\n\n const cancelStream = (error: ClientError) => {\n this.cancelStream(from, sessionScopedSend, streamId, error);\n };\n\n const pushRequestError = (error: ProtocolError) => {\n if (!reqReadable.isClosed()) {\n reqReadable._pushValue(Err(error));\n closeReadable();\n }\n\n resWritable.close();\n };\n\n const onServerCancel = (error: ProtocolError) => {\n recordRiverError(span, error);\n\n if (reqReadable.isClosed() && resWritable.isClosed()) {\n return;\n }\n\n cleanClose = false;\n pushRequestError(error);\n cancelStream(error);\n };\n\n const onHandlerError = (err: unknown) => {\n const errorMsg = coerceErrorString(err);\n\n span.recordException(err instanceof Error ? err : new Error(errorMsg));\n\n this.log?.error(\n `${service.typeName}.${method.name} handler threw an uncaught error`,\n {\n ...loggingMetadata,\n transportMessage: {\n procedureName: method.name,\n serviceName: service.typeName,\n },\n extras: {\n error: errorMsg,\n originalException: err,\n },\n tags: ['uncaught-handler-error'],\n },\n );\n\n const error: ClientError = {\n code: UNCAUGHT_ERROR_CODE,\n message: errorMsg,\n };\n recordRiverError(span, error);\n\n if (reqReadable.isClosed() && resWritable.isClosed()) {\n return;\n }\n\n if (!resWritable.isClosed()) {\n resWritable.write(Err(error));\n if (!procClosesWithResponse) {\n resWritable.close();\n }\n }\n\n if (!reqReadable.isClosed()) {\n closeReadable();\n }\n };\n\n const onMessage = (msg: OpaqueTransportMessage) => {\n if (msg.from !== from) {\n this.log?.error('got stream message from unexpected client', {\n ...loggingMetadata,\n transportMessage: msg,\n tags: ['invariant-violation'],\n });\n\n return;\n }\n\n if (isStreamCancel(msg.controlFlags)) {\n const error: ProtocolError = isSerializedProtocolErrorResult(\n msg.payload,\n )\n ? msg.payload.payload\n : {\n code: CANCEL_CODE,\n message: 'stream cancelled, client sent invalid payload',\n };\n\n pushRequestError(error);\n\n return;\n }\n\n if (reqReadable.isClosed()) {\n this.log?.warn('received message after request stream is closed', {\n ...loggingMetadata,\n transportMessage: msg,\n tags: ['invalid-request'],\n });\n onServerCancel({\n code: INVALID_REQUEST_CODE,\n message: 'received message after request stream is closed',\n });\n\n return;\n }\n\n if (msg.payload instanceof Uint8Array) {\n try {\n reqReadable._pushValue(\n Ok(decodeMessageBytes(method.input, msg.payload)),\n );\n } catch {\n onServerCancel({\n code: INVALID_REQUEST_CODE,\n message: 'failed to decode protobuf request payload',\n });\n\n return;\n }\n\n if (isStreamClose(msg.controlFlags)) {\n closeReadable();\n }\n\n return;\n }\n\n if (\n Value.Check(ControlMessageCloseSchema, msg.payload) &&\n isStreamClose(msg.controlFlags)\n ) {\n closeReadable();\n\n return;\n }\n\n onServerCancel({\n code: INVALID_REQUEST_CODE,\n message: 'received invalid protobuf request payload',\n });\n };\n\n const procStream: ProcStream = {\n from,\n streamId,\n service,\n method,\n handleMsg: onMessage,\n handleSessionDisconnect: () => {\n cleanClose = false;\n pushRequestError({\n code: UNEXPECTED_DISCONNECT_CODE,\n message: 'client unexpectedly disconnected',\n });\n },\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n const handlerContext: ProtobufHandlerContext<any, any, any> = {\n ...serviceContext,\n state: serviceState,\n from,\n sessionId,\n metadata: sessionMetadata,\n span,\n service,\n method,\n deferCleanup,\n cancel: (message?: string) => {\n const error: ProtocolError = {\n code: CANCEL_CODE,\n message: message ?? 'cancelled by server procedure handler',\n };\n onServerCancel(error);\n\n return Err(error);\n },\n signal: finishedController.signal,\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const middlewareContext: MiddlewareContext<ParsedMetadata> = {\n ...handlerContext,\n streamId,\n procedureName: method.name,\n serviceName: service.typeName,\n };\n\n if (initialRequest !== null) {\n reqReadable._pushValue(Ok(initialRequest));\n }\n if (closeRequestOnStart) {\n closeReadable();\n }\n\n // type-erased handler dispatch; ProtoService.define() enforces the\n // correct handler signatures at registration time.\n /* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any */\n const handler = impl as (...args: Array<any>) => any;\n\n const runProcedureHandler = async () => {\n try {\n switch (method.methodKind) {\n case 'unary': {\n const response: HandlerResponse<DescMethod> = await handler(\n requireInitialRequest(initialRequest, method),\n handlerContext,\n );\n if (!resWritable.isClosed()) {\n resWritable.write(response);\n }\n break;\n }\n\n case 'server_streaming':\n await handler({\n request: requireInitialRequest(initialRequest, method),\n ctx: handlerContext,\n resWritable,\n });\n break;\n\n case 'client_streaming': {\n const response: HandlerResponse<DescMethod> = await handler({\n ctx: handlerContext,\n reqReadable,\n });\n if (!resWritable.isClosed()) {\n resWritable.write(response);\n }\n break;\n }\n\n case 'bidi_streaming':\n await handler({\n ctx: handlerContext,\n reqReadable,\n resWritable,\n });\n break;\n }\n } catch (err) {\n onHandlerError(err);\n }\n };\n /* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any */\n\n this.middlewares.reduceRight(\n (next: () => void, middleware: Middleware<ParsedMetadata>) => {\n return () => {\n middleware({\n ctx: middlewareContext,\n reqInit: initialRequest,\n next,\n });\n };\n },\n () => {\n void runProcedureHandler();\n },\n )();\n\n if (!finishedController.signal.aborted) {\n this.streams.set(streamId, procStream);\n }\n }\n\n private validateNewProcStream(\n initMessage: OpaqueTransportMessage,\n ): StreamInitProps | null {\n const session = this.transport.sessions.get(initMessage.from);\n if (!session) {\n this.log?.error(`couldn't find session for ${initMessage.from}`, {\n clientId: this.transport.clientId,\n transportMessage: initMessage,\n tags: ['invariant-violation'],\n });\n\n return null;\n }\n\n const sessionScopedSend = this.transport.getSessionBoundSendFn(\n initMessage.from,\n session.id,\n );\n const sendCancel = (error: ClientError) => {\n this.cancelStream(\n initMessage.from,\n sessionScopedSend,\n initMessage.streamId,\n error,\n );\n };\n\n const sessionMetadata = this.transport.sessionHandshakeMetadata.get(\n session.to,\n );\n if (!sessionMetadata) {\n sendCancel({\n code: UNCAUGHT_ERROR_CODE,\n message: `session doesn't have handshake metadata`,\n });\n\n return null;\n }\n\n if (!isStreamOpen(initMessage.controlFlags)) {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: `can't create a new procedure stream from a message without the stream open bit set`,\n });\n\n return null;\n }\n\n if (!initMessage.serviceName) {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: `missing service name in stream open message`,\n });\n\n return null;\n }\n\n if (!initMessage.procedureName) {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: `missing procedure name in stream open message`,\n });\n\n return null;\n }\n\n const route = this.methods.get(\n methodKey(initMessage.serviceName, initMessage.procedureName),\n );\n if (!route) {\n sendCancel({\n code: RiverErrorCode.UNIMPLEMENTED,\n message: `${initMessage.serviceName}.${initMessage.procedureName} is not implemented`,\n });\n\n return null;\n }\n\n const serviceInstance = this.serviceInstances.get(initMessage.serviceName);\n\n let initialRequest: MessageShape<DescMethod['input']> | null = null;\n let closeRequestOnStart = false;\n\n if (\n route.method.methodKind === 'unary' ||\n route.method.methodKind === 'server_streaming'\n ) {\n if (!(initMessage.payload instanceof Uint8Array)) {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: 'expected protobuf request payload in opening frame',\n });\n\n return null;\n }\n\n try {\n initialRequest = decodeMessageBytes(\n route.method.input,\n initMessage.payload,\n );\n } catch {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: 'failed to decode protobuf request payload',\n });\n\n return null;\n }\n\n if (!isStreamClose(initMessage.controlFlags)) {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message:\n 'protobuf unary and server-streaming calls must close the request stream in the opening frame',\n });\n\n return null;\n }\n\n closeRequestOnStart = true;\n } else if (initMessage.payload instanceof Uint8Array) {\n if (initMessage.payload.byteLength > 0) {\n try {\n initialRequest = decodeMessageBytes(\n route.method.input,\n initMessage.payload,\n );\n } catch {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: 'failed to decode protobuf request payload',\n });\n\n return null;\n }\n }\n\n closeRequestOnStart = isStreamClose(initMessage.controlFlags);\n } else if (\n Value.Check(ControlMessageCloseSchema, initMessage.payload) &&\n isStreamClose(initMessage.controlFlags)\n ) {\n closeRequestOnStart = true;\n } else {\n sendCancel({\n code: INVALID_REQUEST_CODE,\n message: 'received invalid protobuf request payload',\n });\n\n return null;\n }\n\n return {\n streamId: initMessage.streamId,\n service: route.service,\n method: route.method,\n impl: route.impl,\n serviceContext: this.userContext,\n serviceState: serviceInstance?.state ?? {},\n sessionMetadata,\n initialSession: session,\n initialRequest,\n closeRequestOnStart,\n tracingCtx: initMessage.tracing,\n };\n }\n\n private cancelStream(\n to: TransportClientId,\n sessionScopedSend: SessionBoundSendFn,\n streamId: StreamId,\n error: ClientError,\n ) {\n let cancelledStreamsInSession = this.serverCancelledStreams.get(to);\n if (!cancelledStreamsInSession) {\n cancelledStreamsInSession = new LRUSet(\n this.maxCancelledStreamTombstonesPerSession,\n );\n this.serverCancelledStreams.set(to, cancelledStreamsInSession);\n }\n\n cancelledStreamsInSession.add(streamId);\n sessionScopedSend(cancelMessage(streamId, Err(error)));\n }\n}\n\nfunction requireInitialRequest<Method extends DescMethod>(\n initialRequest: MessageShape<Method['input']> | null,\n method: Method,\n): MessageShape<Method['input']> {\n if (initialRequest === null) {\n throw new Error(\n `missing initial request for protobuf ${method.parent.typeName}.${method.name}`,\n );\n }\n\n return initialRequest;\n}\n\nclass LRUSet<T> {\n private readonly items = new Set<T>();\n\n constructor(private readonly maxItems: number) {}\n\n add(item: T) {\n if (this.items.has(item)) {\n this.items.delete(item);\n } else if (this.items.size >= this.maxItems) {\n const first = this.items.values().next();\n if (!first.done) {\n this.items.delete(first.value);\n }\n }\n\n this.items.add(item);\n }\n\n has(item: T) {\n return this.items.has(item);\n }\n}\n\n/**\n * Creates a protobuf server that listens on an existing River transport.\n *\n * @param transport - The server transport to listen on.\n * @param services - Array of {@link ProtoService} definitions.\n * @param options - Server options including context, handshake, and middleware.\n */\nexport function createServer<\n MetadataSchema extends TSchema,\n ParsedMetadata extends object,\n>(\n transport: ServerTransport<Connection, MetadataSchema, ParsedMetadata>,\n services: ReadonlyArray<AnyProtoService>,\n options?: ServerOptions<MetadataSchema, ParsedMetadata>,\n): Server {\n return new ProtobufServer(transport, services, options);\n}\n"],"mappings":"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","names":["RiverErrorCode","createClientHandshakeOptions","createServerHandshakeOptions","Value","Value"]}
|
package/dist/router/index.cjs
CHANGED
|
@@ -2009,7 +2009,7 @@ function createServerHandshakeOptions(schema, validate) {
|
|
|
2009
2009
|
}
|
|
2010
2010
|
|
|
2011
2011
|
// package.json
|
|
2012
|
-
var version = "0.
|
|
2012
|
+
var version = "0.216.0";
|
|
2013
2013
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2014
2014
|
0 && (module.exports = {
|
|
2015
2015
|
CANCEL_CODE,
|