@replit/river 0.208.0 → 0.208.1
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/dist/{adapter-ChksXKVN.d.ts → adapter-f2b6e211.d.ts} +2 -2
- package/dist/{chunk-2JNVDUMN.js → chunk-2WFRHXDZ.js} +17 -12
- package/dist/chunk-2WFRHXDZ.js.map +1 -0
- package/dist/{chunk-DKW3GC3M.js → chunk-BXKBENJE.js} +2 -2
- package/dist/{chunk-ETZAHFGQ.js → chunk-EVAQ2QMB.js} +25 -21
- package/dist/{chunk-ETZAHFGQ.js.map → chunk-EVAQ2QMB.js.map} +1 -1
- package/dist/codec/index.cjs +1 -1
- 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-Donr3JRB.d.ts → connection-098d4aad.d.ts} +4 -4
- package/dist/{index-D8IOd3LG.d.ts → index-02554794.d.ts} +2 -2
- package/dist/logging/index.d.cts +2 -2
- package/dist/logging/index.d.ts +2 -2
- package/dist/{message-Di94OL80.d.cts → message-01c3e85a.d.ts} +1 -1
- package/dist/router/index.cjs +9 -5
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +7 -7
- package/dist/router/index.d.ts +7 -7
- package/dist/router/index.js +1 -1
- package/dist/{transport-CZb3vdB4.d.ts → services-44be1b6b.d.ts} +275 -275
- package/dist/testUtil/index.cjs +14 -8
- package/dist/testUtil/index.cjs.map +1 -1
- package/dist/testUtil/index.d.cts +5 -5
- package/dist/testUtil/index.d.ts +5 -5
- package/dist/testUtil/index.js +5 -4
- package/dist/testUtil/index.js.map +1 -1
- package/dist/transport/impls/ws/client.cjs +10 -6
- package/dist/transport/impls/ws/client.cjs.map +1 -1
- package/dist/transport/impls/ws/client.d.cts +6 -6
- package/dist/transport/impls/ws/client.d.ts +6 -6
- package/dist/transport/impls/ws/client.js +3 -3
- package/dist/transport/impls/ws/server.cjs +12 -7
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +6 -6
- package/dist/transport/impls/ws/server.d.ts +6 -6
- package/dist/transport/impls/ws/server.js +3 -3
- package/dist/transport/index.cjs +12 -7
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +6 -6
- package/dist/transport/index.d.ts +6 -6
- package/dist/transport/index.js +3 -3
- package/dist/{wslike-Dng9H1C7.d.ts → wslike-e0b32dd5.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/adapter-Cuc4JtfV.d.cts +0 -46
- package/dist/chunk-2JNVDUMN.js.map +0 -1
- package/dist/connection-BF4zg6Qv.d.cts +0 -35
- package/dist/index-C9tpZjBN.d.cts +0 -37
- package/dist/message-Di94OL80.d.ts +0 -108
- package/dist/transport-CCaWx1Rb.d.cts +0 -1566
- package/dist/wslike-Dng9H1C7.d.cts +0 -40
- /package/dist/{chunk-DKW3GC3M.js.map → chunk-BXKBENJE.js.map} +0 -0
package/dist/codec/index.cjs
CHANGED
package/dist/codec/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../codec/index.ts","../../codec/binary.ts","../../codec/json.ts","../../codec/adapter.ts","../../transport/message.ts","../../transport/stringifyError.ts"],"sourcesContent":["export { BinaryCodec } from './binary';\nexport { NaiveJsonCodec } from './json';\nexport type { Codec } from './types';\nexport { CodecMessageAdapter } from './adapter';\n","import { decode, encode } from '@msgpack/msgpack';\nimport { Codec } from './types';\n\n/**\n * Binary codec, uses [msgpack](https://www.npmjs.com/package/@msgpack/msgpack) under the hood\n * @type {Codec}\n */\nexport const BinaryCodec: Codec = {\n toBuffer(obj) {\n return encode(obj, { ignoreUndefined: true });\n },\n fromBuffer: (buff: Uint8Array) => {\n const res = decode(buff);\n if (typeof res !== 'object' || res === null) {\n throw new Error('unpacked msg is not an object');\n }\n\n return res;\n },\n};\n","import { Codec } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n// Convert Uint8Array to base64\nfunction uint8ArrayToBase64(uint8Array: Uint8Array) {\n let binary = '';\n uint8Array.forEach((byte) => {\n binary += String.fromCharCode(byte);\n });\n\n return btoa(binary);\n}\n\n// Convert base64 to Uint8Array\nfunction base64ToUint8Array(base64: string) {\n const binaryString = atob(base64);\n const uint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n uint8Array[i] = binaryString.charCodeAt(i);\n }\n\n return uint8Array;\n}\n\ninterface Base64EncodedValue {\n $t: string;\n}\n\n/**\n * Naive JSON codec implementation using JSON.stringify and JSON.parse.\n * @type {Codec}\n */\nexport const NaiveJsonCodec: Codec = {\n toBuffer: (obj: object) => {\n return encoder.encode(\n JSON.stringify(obj, function replacer<\n T extends object,\n >(this: T, key: keyof T) {\n const val = this[key];\n if (val instanceof Uint8Array) {\n return { $t: uint8ArrayToBase64(val) } satisfies Base64EncodedValue;\n } else {\n return val;\n }\n }),\n );\n },\n fromBuffer: (buff: Uint8Array) => {\n const parsed = JSON.parse(\n decoder.decode(buff),\n function reviver(_key, val: unknown) {\n if ((val as Base64EncodedValue | undefined)?.$t) {\n return base64ToUint8Array((val as Base64EncodedValue).$t);\n } else {\n return val;\n }\n },\n ) as unknown;\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('unpacked msg is not an object');\n }\n\n return parsed;\n },\n};\n","import { Value } from '@sinclair/typebox/value';\nimport {\n OpaqueTransportMessage,\n OpaqueTransportMessageSchema,\n} from '../transport';\nimport { Codec } from './types';\nimport { DeserializeResult, SerializeResult } from '../transport/results';\nimport { coerceErrorString } from '../transport/stringifyError';\n\n/**\n * Adapts a {@link Codec} to the {@link OpaqueTransportMessage} format,\n * accounting for fallibility of toBuffer and fromBuffer and wrapping\n * it with a Result type.\n */\nexport class CodecMessageAdapter {\n constructor(private readonly codec: Codec) {}\n\n toBuffer(msg: OpaqueTransportMessage): SerializeResult {\n try {\n return {\n ok: true,\n value: this.codec.toBuffer(msg),\n };\n } catch (e) {\n return {\n ok: false,\n reason: coerceErrorString(e),\n };\n }\n }\n\n fromBuffer(buf: Uint8Array): DeserializeResult {\n try {\n const parsedMsg = this.codec.fromBuffer(buf);\n if (!Value.Check(OpaqueTransportMessageSchema, parsedMsg)) {\n return {\n ok: false,\n reason: 'transport message schema mismatch',\n };\n }\n\n return {\n ok: true,\n value: parsedMsg,\n };\n } catch (e) {\n return {\n ok: false,\n reason: coerceErrorString(e),\n };\n }\n }\n}\n","import { Type, TSchema, Static } from '@sinclair/typebox';\nimport { PropagationContext } from '../tracing';\nimport { generateId } from './id';\nimport { ErrResult, ReaderErrorSchema } from '../router';\n\n/**\n * Control flags for transport messages.\n */\nexport const enum ControlFlags {\n /**\n * Used in heartbeat messages.\n */\n AckBit = 0b00001,\n /**\n * Used in stream open requests.\n */\n StreamOpenBit = 0b00010,\n /**\n * Used when a stream is cancelled due errors or to explicit cancellation\n */\n StreamCancelBit = 0b00100,\n /**\n * Used when writer closes the stream.\n */\n StreamClosedBit = 0b01000,\n}\n\n/**\n * Generic Typebox schema for a transport message.\n * @template T The type of the payload.\n * @param {T} t The payload schema.\n * @returns The transport message schema.\n */\nexport const TransportMessageSchema = <T extends TSchema>(t: T) =>\n Type.Object({\n id: Type.String(),\n from: Type.String(),\n to: Type.String(),\n seq: Type.Integer(),\n ack: Type.Integer(),\n serviceName: Type.Optional(Type.String()),\n procedureName: Type.Optional(Type.String()),\n streamId: Type.String(),\n controlFlags: Type.Integer(),\n tracing: Type.Optional(\n Type.Object({\n traceparent: Type.String(),\n tracestate: Type.String(),\n }),\n ),\n payload: t,\n });\n\n/**\n * Defines the schema for a transport acknowledgement message. This is never constructed manually\n * and is only used internally by the library for tracking inflight messages.\n * @returns The transport message schema.\n */\nexport const ControlMessageAckSchema = Type.Object({\n type: Type.Literal('ACK'),\n});\n\n/**\n * Defines the schema for a transport close message. This is never constructed manually and is only\n * used internally by the library for closing and cleaning up streams.\n */\nexport const ControlMessageCloseSchema = Type.Object({\n type: Type.Literal('CLOSE'),\n});\n\nexport type ProtocolVersion = 'v1.1' | 'v2.0';\nexport const currentProtocolVersion = 'v2.0' satisfies ProtocolVersion;\nexport const acceptedProtocolVersions = ['v1.1', currentProtocolVersion];\nexport function isAcceptedProtocolVersion(\n version: string,\n): version is ProtocolVersion {\n return acceptedProtocolVersions.includes(version);\n}\n\nexport const ControlMessageHandshakeRequestSchema = Type.Object({\n type: Type.Literal('HANDSHAKE_REQ'),\n protocolVersion: Type.String(),\n sessionId: Type.String(),\n /**\n * Specifies what the server's expected session state (from the pov of the client). This can be\n * used by the server to know whether this is a new or a reestablished connection, and whether it\n * is compatible with what it already has.\n */\n expectedSessionState: Type.Object({\n // what the client expects the server to send next\n nextExpectedSeq: Type.Integer(),\n nextSentSeq: Type.Integer(),\n }),\n\n metadata: Type.Optional(Type.Unknown()),\n});\n\nexport const HandshakeErrorRetriableResponseCodes = Type.Union([\n Type.Literal('SESSION_STATE_MISMATCH'),\n]);\n\nexport const HandshakeErrorCustomHandlerFatalResponseCodes = Type.Union([\n // The custom validation handler rejected the handler because the client is unsupported.\n Type.Literal('REJECTED_UNSUPPORTED_CLIENT'),\n // The custom validation handler rejected the handshake.\n Type.Literal('REJECTED_BY_CUSTOM_HANDLER'),\n]);\n\nexport const HandshakeErrorFatalResponseCodes = Type.Union([\n HandshakeErrorCustomHandlerFatalResponseCodes,\n // The ciient sent a handshake that doesn't comply with the extended handshake metadata.\n Type.Literal('MALFORMED_HANDSHAKE_META'),\n // The ciient sent a handshake that doesn't comply with ControlMessageHandshakeRequestSchema.\n Type.Literal('MALFORMED_HANDSHAKE'),\n // The client's protocol version does not match the server's.\n Type.Literal('PROTOCOL_VERSION_MISMATCH'),\n]);\n\nexport const HandshakeErrorResponseCodes = Type.Union([\n HandshakeErrorRetriableResponseCodes,\n HandshakeErrorFatalResponseCodes,\n]);\n\nexport const ControlMessageHandshakeResponseSchema = Type.Object({\n type: Type.Literal('HANDSHAKE_RESP'),\n status: Type.Union([\n Type.Object({\n ok: Type.Literal(true),\n sessionId: Type.String(),\n }),\n Type.Object({\n ok: Type.Literal(false),\n reason: Type.String(),\n code: HandshakeErrorResponseCodes,\n }),\n ]),\n});\n\nexport const ControlMessagePayloadSchema = Type.Union([\n ControlMessageCloseSchema,\n ControlMessageAckSchema,\n ControlMessageHandshakeRequestSchema,\n ControlMessageHandshakeResponseSchema,\n]);\n\n/**\n * Defines the schema for an opaque transport message that is agnostic to any\n * procedure/service.\n * @returns The transport message schema.\n */\nexport const OpaqueTransportMessageSchema = TransportMessageSchema(\n Type.Unknown(),\n);\n\n/**\n * Represents a transport message. This is the same type as {@link TransportMessageSchema} but\n * we can't statically infer generics from generic Typebox schemas so we have to define it again here.\n *\n * TypeScript can't enforce types when a bitmask is involved, so these are the semantics of\n * `controlFlags`:\n * * If `controlFlags & StreamOpenBit == StreamOpenBit`, `streamId` must be set to a unique value\n * (suggestion: use `nanoid`).\n * * If `controlFlags & StreamOpenBit == StreamOpenBit`, `serviceName` and `procedureName` must be set.\n * * If `controlFlags & StreamClosedBit == StreamClosedBit` and the kind is `stream` or `subscription`,\n * `payload` should be discarded (usually contains a control message).\n * * If `controlFlags & AckBit == AckBit`, the message is an explicit acknowledgement message and doesn't\n * contain any payload that is relevant to the application so should not be delivered.\n * @template Payload The type of the payload.\n */\nexport interface TransportMessage<Payload = unknown> {\n id: string;\n from: TransportClientId;\n to: TransportClientId;\n seq: number;\n ack: number;\n serviceName?: string;\n procedureName?: string;\n streamId: string;\n controlFlags: number;\n tracing?: PropagationContext;\n payload: Payload;\n}\n\nexport type PartialTransportMessage<Payload = unknown> = Omit<\n TransportMessage<Payload>,\n 'id' | 'from' | 'to' | 'seq' | 'ack'\n>;\n\nexport function handshakeRequestMessage({\n from,\n to,\n sessionId,\n expectedSessionState,\n metadata,\n tracing,\n}: {\n from: TransportClientId;\n to: TransportClientId;\n sessionId: string;\n expectedSessionState: Static<\n typeof ControlMessageHandshakeRequestSchema\n >['expectedSessionState'];\n metadata?: unknown;\n tracing?: PropagationContext;\n}): TransportMessage<Static<typeof ControlMessageHandshakeRequestSchema>> {\n return {\n id: generateId(),\n from,\n to,\n seq: 0,\n ack: 0,\n streamId: generateId(),\n controlFlags: 0,\n tracing,\n payload: {\n type: 'HANDSHAKE_REQ',\n protocolVersion: currentProtocolVersion,\n sessionId,\n expectedSessionState,\n metadata,\n } satisfies Static<typeof ControlMessageHandshakeRequestSchema>,\n };\n}\n\n/**\n * This is a reason that can be given during the handshake to indicate that the peer has the wrong\n * session state.\n */\nexport const SESSION_STATE_MISMATCH = 'session state mismatch';\n\nexport function handshakeResponseMessage({\n from,\n to,\n status,\n}: {\n from: TransportClientId;\n to: TransportClientId;\n status: Static<typeof ControlMessageHandshakeResponseSchema>['status'];\n}): TransportMessage<Static<typeof ControlMessageHandshakeResponseSchema>> {\n return {\n id: generateId(),\n from,\n to,\n seq: 0,\n ack: 0,\n streamId: generateId(),\n controlFlags: 0,\n payload: {\n type: 'HANDSHAKE_RESP',\n status,\n } satisfies Static<typeof ControlMessageHandshakeResponseSchema>,\n };\n}\n\nexport function closeStreamMessage(streamId: string): PartialTransportMessage {\n return {\n streamId,\n controlFlags: ControlFlags.StreamClosedBit,\n payload: {\n type: 'CLOSE' as const,\n } satisfies Static<typeof ControlMessagePayloadSchema>,\n };\n}\n\nexport function cancelMessage(\n streamId: string,\n payload: ErrResult<Static<typeof ReaderErrorSchema>>,\n) {\n return {\n streamId,\n controlFlags: ControlFlags.StreamCancelBit,\n payload,\n };\n}\n\n/**\n * A type alias for a transport message with an opaque payload.\n * @template T - The type of the opaque payload.\n */\nexport type OpaqueTransportMessage = TransportMessage;\nexport type TransportClientId = string;\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is an ack message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the AckBit, false otherwise.\n */\nexport function isAck(controlFlag: number): boolean {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n return (controlFlag & ControlFlags.AckBit) === ControlFlags.AckBit;\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is a stream open message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the StreamOpenBit, false otherwise.\n */\nexport function isStreamOpen(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamOpenBit) === ControlFlags.StreamOpenBit\n );\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is a stream close message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the StreamCloseBit, false otherwise.\n */\nexport function isStreamClose(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamClosedBit) ===\n ControlFlags.StreamClosedBit\n );\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is an cancel message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the CancelBit, false otherwise\n */\nexport function isStreamCancel(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamCancelBit) ===\n ControlFlags.StreamCancelBit\n );\n}\n","export function coerceErrorString(err: unknown): string {\n if (err instanceof Error) {\n return err.message || 'unknown reason';\n }\n\n return `[coerced to error] ${String(err)}`;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../codec/index.ts","../../codec/binary.ts","../../codec/json.ts","../../codec/adapter.ts","../../transport/message.ts","../../transport/stringifyError.ts"],"sourcesContent":["export { BinaryCodec } from './binary';\nexport { NaiveJsonCodec } from './json';\nexport type { Codec } from './types';\nexport { CodecMessageAdapter } from './adapter';\n","import { decode, encode } from '@msgpack/msgpack';\nimport { Codec } from './types';\n\n/**\n * Binary codec, uses [msgpack](https://www.npmjs.com/package/@msgpack/msgpack) under the hood\n * @type {Codec}\n */\nexport const BinaryCodec: Codec = {\n toBuffer(obj) {\n return encode(obj, { ignoreUndefined: true });\n },\n fromBuffer: (buff: Uint8Array) => {\n const res = decode(buff);\n if (typeof res !== 'object' || res === null) {\n throw new Error('unpacked msg is not an object');\n }\n\n return res;\n },\n};\n","import { Codec } from './types';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n// Convert Uint8Array to base64\nfunction uint8ArrayToBase64(uint8Array: Uint8Array) {\n let binary = '';\n uint8Array.forEach((byte) => {\n binary += String.fromCharCode(byte);\n });\n\n return btoa(binary);\n}\n\n// Convert base64 to Uint8Array\nfunction base64ToUint8Array(base64: string) {\n const binaryString = atob(base64);\n const uint8Array = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n uint8Array[i] = binaryString.charCodeAt(i);\n }\n\n return uint8Array;\n}\n\ninterface Base64EncodedValue {\n $t: string;\n}\n\n/**\n * Naive JSON codec implementation using JSON.stringify and JSON.parse.\n * @type {Codec}\n */\nexport const NaiveJsonCodec: Codec = {\n toBuffer: (obj: object) => {\n return encoder.encode(\n JSON.stringify(obj, function replacer<\n T extends object,\n >(this: T, key: keyof T) {\n const val = this[key];\n if (val instanceof Uint8Array) {\n return { $t: uint8ArrayToBase64(val) } satisfies Base64EncodedValue;\n } else {\n return val;\n }\n }),\n );\n },\n fromBuffer: (buff: Uint8Array) => {\n const parsed = JSON.parse(\n decoder.decode(buff),\n function reviver(_key, val: unknown) {\n if ((val as Base64EncodedValue | undefined)?.$t !== undefined) {\n return base64ToUint8Array((val as Base64EncodedValue).$t);\n } else {\n return val;\n }\n },\n ) as unknown;\n\n if (typeof parsed !== 'object' || parsed === null) {\n throw new Error('unpacked msg is not an object');\n }\n\n return parsed;\n },\n};\n","import { Value } from '@sinclair/typebox/value';\nimport {\n OpaqueTransportMessage,\n OpaqueTransportMessageSchema,\n} from '../transport';\nimport { Codec } from './types';\nimport { DeserializeResult, SerializeResult } from '../transport/results';\nimport { coerceErrorString } from '../transport/stringifyError';\n\n/**\n * Adapts a {@link Codec} to the {@link OpaqueTransportMessage} format,\n * accounting for fallibility of toBuffer and fromBuffer and wrapping\n * it with a Result type.\n */\nexport class CodecMessageAdapter {\n constructor(private readonly codec: Codec) {}\n\n toBuffer(msg: OpaqueTransportMessage): SerializeResult {\n try {\n return {\n ok: true,\n value: this.codec.toBuffer(msg),\n };\n } catch (e) {\n return {\n ok: false,\n reason: coerceErrorString(e),\n };\n }\n }\n\n fromBuffer(buf: Uint8Array): DeserializeResult {\n try {\n const parsedMsg = this.codec.fromBuffer(buf);\n if (!Value.Check(OpaqueTransportMessageSchema, parsedMsg)) {\n return {\n ok: false,\n reason: 'transport message schema mismatch',\n };\n }\n\n return {\n ok: true,\n value: parsedMsg,\n };\n } catch (e) {\n return {\n ok: false,\n reason: coerceErrorString(e),\n };\n }\n }\n}\n","import { Type, TSchema, Static } from '@sinclair/typebox';\nimport { PropagationContext } from '../tracing';\nimport { generateId } from './id';\nimport { ErrResult, ReaderErrorSchema } from '../router';\n\n/**\n * Control flags for transport messages.\n */\nexport const enum ControlFlags {\n /**\n * Used in heartbeat messages.\n */\n AckBit = 0b00001,\n /**\n * Used in stream open requests.\n */\n StreamOpenBit = 0b00010,\n /**\n * Used when a stream is cancelled due errors or to explicit cancellation\n */\n StreamCancelBit = 0b00100,\n /**\n * Used when writer closes the stream.\n */\n StreamClosedBit = 0b01000,\n}\n\n/**\n * Generic Typebox schema for a transport message.\n * @template T The type of the payload.\n * @param {T} t The payload schema.\n * @returns The transport message schema.\n */\nexport const TransportMessageSchema = <T extends TSchema>(t: T) =>\n Type.Object({\n id: Type.String(),\n from: Type.String(),\n to: Type.String(),\n seq: Type.Integer(),\n ack: Type.Integer(),\n serviceName: Type.Optional(Type.String()),\n procedureName: Type.Optional(Type.String()),\n streamId: Type.String(),\n controlFlags: Type.Integer(),\n tracing: Type.Optional(\n Type.Object({\n traceparent: Type.String(),\n tracestate: Type.String(),\n }),\n ),\n payload: t,\n });\n\n/**\n * Defines the schema for a transport acknowledgement message. This is never constructed manually\n * and is only used internally by the library for tracking inflight messages.\n * @returns The transport message schema.\n */\nexport const ControlMessageAckSchema = Type.Object({\n type: Type.Literal('ACK'),\n});\n\n/**\n * Defines the schema for a transport close message. This is never constructed manually and is only\n * used internally by the library for closing and cleaning up streams.\n */\nexport const ControlMessageCloseSchema = Type.Object({\n type: Type.Literal('CLOSE'),\n});\n\nexport type ProtocolVersion = 'v1.1' | 'v2.0';\nexport const currentProtocolVersion = 'v2.0' satisfies ProtocolVersion;\nexport const acceptedProtocolVersions = ['v1.1', currentProtocolVersion];\nexport function isAcceptedProtocolVersion(\n version: string,\n): version is ProtocolVersion {\n return acceptedProtocolVersions.includes(version);\n}\n\nexport const ControlMessageHandshakeRequestSchema = Type.Object({\n type: Type.Literal('HANDSHAKE_REQ'),\n protocolVersion: Type.String(),\n sessionId: Type.String(),\n /**\n * Specifies what the server's expected session state (from the pov of the client). This can be\n * used by the server to know whether this is a new or a reestablished connection, and whether it\n * is compatible with what it already has.\n */\n expectedSessionState: Type.Object({\n // what the client expects the server to send next\n nextExpectedSeq: Type.Integer(),\n nextSentSeq: Type.Integer(),\n }),\n\n metadata: Type.Optional(Type.Unknown()),\n});\n\nexport const HandshakeErrorRetriableResponseCodes = Type.Union([\n Type.Literal('SESSION_STATE_MISMATCH'),\n]);\n\nexport const HandshakeErrorCustomHandlerFatalResponseCodes = Type.Union([\n // The custom validation handler rejected the handler because the client is unsupported.\n Type.Literal('REJECTED_UNSUPPORTED_CLIENT'),\n // The custom validation handler rejected the handshake.\n Type.Literal('REJECTED_BY_CUSTOM_HANDLER'),\n]);\n\nexport const HandshakeErrorFatalResponseCodes = Type.Union([\n HandshakeErrorCustomHandlerFatalResponseCodes,\n // The ciient sent a handshake that doesn't comply with the extended handshake metadata.\n Type.Literal('MALFORMED_HANDSHAKE_META'),\n // The ciient sent a handshake that doesn't comply with ControlMessageHandshakeRequestSchema.\n Type.Literal('MALFORMED_HANDSHAKE'),\n // The client's protocol version does not match the server's.\n Type.Literal('PROTOCOL_VERSION_MISMATCH'),\n]);\n\nexport const HandshakeErrorResponseCodes = Type.Union([\n HandshakeErrorRetriableResponseCodes,\n HandshakeErrorFatalResponseCodes,\n]);\n\nexport const ControlMessageHandshakeResponseSchema = Type.Object({\n type: Type.Literal('HANDSHAKE_RESP'),\n status: Type.Union([\n Type.Object({\n ok: Type.Literal(true),\n sessionId: Type.String(),\n }),\n Type.Object({\n ok: Type.Literal(false),\n reason: Type.String(),\n code: HandshakeErrorResponseCodes,\n }),\n ]),\n});\n\nexport const ControlMessagePayloadSchema = Type.Union([\n ControlMessageCloseSchema,\n ControlMessageAckSchema,\n ControlMessageHandshakeRequestSchema,\n ControlMessageHandshakeResponseSchema,\n]);\n\n/**\n * Defines the schema for an opaque transport message that is agnostic to any\n * procedure/service.\n * @returns The transport message schema.\n */\nexport const OpaqueTransportMessageSchema = TransportMessageSchema(\n Type.Unknown(),\n);\n\n/**\n * Represents a transport message. This is the same type as {@link TransportMessageSchema} but\n * we can't statically infer generics from generic Typebox schemas so we have to define it again here.\n *\n * TypeScript can't enforce types when a bitmask is involved, so these are the semantics of\n * `controlFlags`:\n * * If `controlFlags & StreamOpenBit == StreamOpenBit`, `streamId` must be set to a unique value\n * (suggestion: use `nanoid`).\n * * If `controlFlags & StreamOpenBit == StreamOpenBit`, `serviceName` and `procedureName` must be set.\n * * If `controlFlags & StreamClosedBit == StreamClosedBit` and the kind is `stream` or `subscription`,\n * `payload` should be discarded (usually contains a control message).\n * * If `controlFlags & AckBit == AckBit`, the message is an explicit acknowledgement message and doesn't\n * contain any payload that is relevant to the application so should not be delivered.\n * @template Payload The type of the payload.\n */\nexport interface TransportMessage<Payload = unknown> {\n id: string;\n from: TransportClientId;\n to: TransportClientId;\n seq: number;\n ack: number;\n serviceName?: string;\n procedureName?: string;\n streamId: string;\n controlFlags: number;\n tracing?: PropagationContext;\n payload: Payload;\n}\n\nexport type PartialTransportMessage<Payload = unknown> = Omit<\n TransportMessage<Payload>,\n 'id' | 'from' | 'to' | 'seq' | 'ack'\n>;\n\nexport function handshakeRequestMessage({\n from,\n to,\n sessionId,\n expectedSessionState,\n metadata,\n tracing,\n}: {\n from: TransportClientId;\n to: TransportClientId;\n sessionId: string;\n expectedSessionState: Static<\n typeof ControlMessageHandshakeRequestSchema\n >['expectedSessionState'];\n metadata?: unknown;\n tracing?: PropagationContext;\n}): TransportMessage<Static<typeof ControlMessageHandshakeRequestSchema>> {\n return {\n id: generateId(),\n from,\n to,\n seq: 0,\n ack: 0,\n streamId: generateId(),\n controlFlags: 0,\n tracing,\n payload: {\n type: 'HANDSHAKE_REQ',\n protocolVersion: currentProtocolVersion,\n sessionId,\n expectedSessionState,\n metadata,\n } satisfies Static<typeof ControlMessageHandshakeRequestSchema>,\n };\n}\n\n/**\n * This is a reason that can be given during the handshake to indicate that the peer has the wrong\n * session state.\n */\nexport const SESSION_STATE_MISMATCH = 'session state mismatch';\n\nexport function handshakeResponseMessage({\n from,\n to,\n status,\n}: {\n from: TransportClientId;\n to: TransportClientId;\n status: Static<typeof ControlMessageHandshakeResponseSchema>['status'];\n}): TransportMessage<Static<typeof ControlMessageHandshakeResponseSchema>> {\n return {\n id: generateId(),\n from,\n to,\n seq: 0,\n ack: 0,\n streamId: generateId(),\n controlFlags: 0,\n payload: {\n type: 'HANDSHAKE_RESP',\n status,\n } satisfies Static<typeof ControlMessageHandshakeResponseSchema>,\n };\n}\n\nexport function closeStreamMessage(streamId: string): PartialTransportMessage {\n return {\n streamId,\n controlFlags: ControlFlags.StreamClosedBit,\n payload: {\n type: 'CLOSE' as const,\n } satisfies Static<typeof ControlMessagePayloadSchema>,\n };\n}\n\nexport function cancelMessage(\n streamId: string,\n payload: ErrResult<Static<typeof ReaderErrorSchema>>,\n) {\n return {\n streamId,\n controlFlags: ControlFlags.StreamCancelBit,\n payload,\n };\n}\n\n/**\n * A type alias for a transport message with an opaque payload.\n * @template T - The type of the opaque payload.\n */\nexport type OpaqueTransportMessage = TransportMessage;\nexport type TransportClientId = string;\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is an ack message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the AckBit, false otherwise.\n */\nexport function isAck(controlFlag: number): boolean {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n return (controlFlag & ControlFlags.AckBit) === ControlFlags.AckBit;\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is a stream open message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the StreamOpenBit, false otherwise.\n */\nexport function isStreamOpen(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamOpenBit) === ControlFlags.StreamOpenBit\n );\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is a stream close message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the StreamCloseBit, false otherwise.\n */\nexport function isStreamClose(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamClosedBit) ===\n ControlFlags.StreamClosedBit\n );\n}\n\n/**\n * Checks if the given control flag (usually found in msg.controlFlag) is an cancel message.\n * @param controlFlag - The control flag to check.\n * @returns True if the control flag contains the CancelBit, false otherwise\n */\nexport function isStreamCancel(controlFlag: number): boolean {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison */\n (controlFlag & ControlFlags.StreamCancelBit) ===\n ControlFlags.StreamCancelBit\n );\n}\n","export function coerceErrorString(err: unknown): string {\n if (err instanceof Error) {\n return err.message || 'unknown reason';\n }\n\n return `[coerced to error] ${String(err)}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,qBAA+B;AAOxB,IAAM,cAAqB;AAAA,EAChC,SAAS,KAAK;AACZ,eAAO,uBAAO,KAAK,EAAE,iBAAiB,KAAK,CAAC;AAAA,EAC9C;AAAA,EACA,YAAY,CAAC,SAAqB;AAChC,UAAM,UAAM,uBAAO,IAAI;AACvB,QAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,WAAO;AAAA,EACT;AACF;;;ACjBA,IAAM,UAAU,IAAI,YAAY;AAChC,IAAM,UAAU,IAAI,YAAY;AAGhC,SAAS,mBAAmB,YAAwB;AAClD,MAAI,SAAS;AACb,aAAW,QAAQ,CAAC,SAAS;AAC3B,cAAU,OAAO,aAAa,IAAI;AAAA,EACpC,CAAC;AAED,SAAO,KAAK,MAAM;AACpB;AAGA,SAAS,mBAAmB,QAAgB;AAC1C,QAAM,eAAe,KAAK,MAAM;AAChC,QAAM,aAAa,IAAI,WAAW,aAAa,MAAM;AACrD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,eAAW,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,EAC3C;AAEA,SAAO;AACT;AAUO,IAAM,iBAAwB;AAAA,EACnC,UAAU,CAAC,QAAgB;AACzB,WAAO,QAAQ;AAAA,MACb,KAAK,UAAU,KAAK,SAAS,SAElB,KAAc;AACvB,cAAM,MAAM,KAAK,GAAG;AACpB,YAAI,eAAe,YAAY;AAC7B,iBAAO,EAAE,IAAI,mBAAmB,GAAG,EAAE;AAAA,QACvC,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,YAAY,CAAC,SAAqB;AAChC,UAAM,SAAS,KAAK;AAAA,MAClB,QAAQ,OAAO,IAAI;AAAA,MACnB,SAAS,QAAQ,MAAM,KAAc;AACnC,YAAK,KAAwC,OAAO,QAAW;AAC7D,iBAAO,mBAAoB,IAA2B,EAAE;AAAA,QAC1D,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,WAAO;AAAA,EACT;AACF;;;ACnEA,mBAAsB;;;ACAtB,qBAAsC;AAiC/B,IAAM,yBAAyB,CAAoB,MACxD,oBAAK,OAAO;AAAA,EACV,IAAI,oBAAK,OAAO;AAAA,EAChB,MAAM,oBAAK,OAAO;AAAA,EAClB,IAAI,oBAAK,OAAO;AAAA,EAChB,KAAK,oBAAK,QAAQ;AAAA,EAClB,KAAK,oBAAK,QAAQ;AAAA,EAClB,aAAa,oBAAK,SAAS,oBAAK,OAAO,CAAC;AAAA,EACxC,eAAe,oBAAK,SAAS,oBAAK,OAAO,CAAC;AAAA,EAC1C,UAAU,oBAAK,OAAO;AAAA,EACtB,cAAc,oBAAK,QAAQ;AAAA,EAC3B,SAAS,oBAAK;AAAA,IACZ,oBAAK,OAAO;AAAA,MACV,aAAa,oBAAK,OAAO;AAAA,MACzB,YAAY,oBAAK,OAAO;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EACA,SAAS;AACX,CAAC;AAOI,IAAM,0BAA0B,oBAAK,OAAO;AAAA,EACjD,MAAM,oBAAK,QAAQ,KAAK;AAC1B,CAAC;AAMM,IAAM,4BAA4B,oBAAK,OAAO;AAAA,EACnD,MAAM,oBAAK,QAAQ,OAAO;AAC5B,CAAC;AAWM,IAAM,uCAAuC,oBAAK,OAAO;AAAA,EAC9D,MAAM,oBAAK,QAAQ,eAAe;AAAA,EAClC,iBAAiB,oBAAK,OAAO;AAAA,EAC7B,WAAW,oBAAK,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB,sBAAsB,oBAAK,OAAO;AAAA;AAAA,IAEhC,iBAAiB,oBAAK,QAAQ;AAAA,IAC9B,aAAa,oBAAK,QAAQ;AAAA,EAC5B,CAAC;AAAA,EAED,UAAU,oBAAK,SAAS,oBAAK,QAAQ,CAAC;AACxC,CAAC;AAEM,IAAM,uCAAuC,oBAAK,MAAM;AAAA,EAC7D,oBAAK,QAAQ,wBAAwB;AACvC,CAAC;AAEM,IAAM,gDAAgD,oBAAK,MAAM;AAAA;AAAA,EAEtE,oBAAK,QAAQ,6BAA6B;AAAA;AAAA,EAE1C,oBAAK,QAAQ,4BAA4B;AAC3C,CAAC;AAEM,IAAM,mCAAmC,oBAAK,MAAM;AAAA,EACzD;AAAA;AAAA,EAEA,oBAAK,QAAQ,0BAA0B;AAAA;AAAA,EAEvC,oBAAK,QAAQ,qBAAqB;AAAA;AAAA,EAElC,oBAAK,QAAQ,2BAA2B;AAC1C,CAAC;AAEM,IAAM,8BAA8B,oBAAK,MAAM;AAAA,EACpD;AAAA,EACA;AACF,CAAC;AAEM,IAAM,wCAAwC,oBAAK,OAAO;AAAA,EAC/D,MAAM,oBAAK,QAAQ,gBAAgB;AAAA,EACnC,QAAQ,oBAAK,MAAM;AAAA,IACjB,oBAAK,OAAO;AAAA,MACV,IAAI,oBAAK,QAAQ,IAAI;AAAA,MACrB,WAAW,oBAAK,OAAO;AAAA,IACzB,CAAC;AAAA,IACD,oBAAK,OAAO;AAAA,MACV,IAAI,oBAAK,QAAQ,KAAK;AAAA,MACtB,QAAQ,oBAAK,OAAO;AAAA,MACpB,MAAM;AAAA,IACR,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAEM,IAAM,8BAA8B,oBAAK,MAAM;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOM,IAAM,+BAA+B;AAAA,EAC1C,oBAAK,QAAQ;AACf;;;ACxJO,SAAS,kBAAkB,KAAsB;AACtD,MAAI,eAAe,OAAO;AACxB,WAAO,IAAI,WAAW;AAAA,EACxB;AAEA,SAAO,sBAAsB,OAAO,GAAG,CAAC;AAC1C;;;AFQO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,OAAc;AAAd;AAAA,EAAe;AAAA,EAE5C,SAAS,KAA8C;AACrD,QAAI;AACF,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,KAAK,MAAM,SAAS,GAAG;AAAA,MAChC;AAAA,IACF,SAAS,GAAG;AACV,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,QAAQ,kBAAkB,CAAC;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,KAAoC;AAC7C,QAAI;AACF,YAAM,YAAY,KAAK,MAAM,WAAW,GAAG;AAC3C,UAAI,CAAC,mBAAM,MAAM,8BAA8B,SAAS,GAAG;AACzD,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,QAAQ;AAAA,QACV;AAAA,MACF;AAEA,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,IACF,SAAS,GAAG;AACV,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,QAAQ,kBAAkB,CAAC;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
package/dist/codec/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as Codec } from '../adapter-
|
|
2
|
-
export { a as CodecMessageAdapter } from '../adapter-
|
|
3
|
-
import '../message-
|
|
1
|
+
import { C as Codec } from '../adapter-f2b6e211.js';
|
|
2
|
+
export { a as CodecMessageAdapter } from '../adapter-f2b6e211.js';
|
|
3
|
+
import '../message-01c3e85a.js';
|
|
4
4
|
import '@sinclair/typebox';
|
|
5
5
|
import '@opentelemetry/api';
|
|
6
6
|
|
package/dist/codec/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as Codec } from '../adapter-
|
|
2
|
-
export { a as CodecMessageAdapter } from '../adapter-
|
|
3
|
-
import '../message-
|
|
1
|
+
import { C as Codec } from '../adapter-f2b6e211.js';
|
|
2
|
+
export { a as CodecMessageAdapter } from '../adapter-f2b6e211.js';
|
|
3
|
+
import '../message-01c3e85a.js';
|
|
4
4
|
import '@sinclair/typebox';
|
|
5
5
|
import '@opentelemetry/api';
|
|
6
6
|
|
package/dist/codec/index.js
CHANGED
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
BinaryCodec,
|
|
3
3
|
CodecMessageAdapter,
|
|
4
4
|
NaiveJsonCodec
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-2WFRHXDZ.js";
|
|
6
|
+
import "../chunk-EVAQ2QMB.js";
|
|
6
7
|
import "../chunk-CC7RN7GI.js";
|
|
7
|
-
import "../chunk-ETZAHFGQ.js";
|
|
8
8
|
export {
|
|
9
9
|
BinaryCodec,
|
|
10
10
|
CodecMessageAdapter,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as Tags } from './index-
|
|
2
|
-
import { P as ProtocolVersion, O as OpaqueTransportMessage } from './message-
|
|
3
|
-
import { b as Connection } from './
|
|
4
|
-
import { W as WsLike } from './wslike-
|
|
1
|
+
import { T as Tags } from './index-02554794.js';
|
|
2
|
+
import { P as ProtocolVersion, O as OpaqueTransportMessage } from './message-01c3e85a.js';
|
|
3
|
+
import { b as Connection } from './services-44be1b6b.js';
|
|
4
|
+
import { W as WsLike } from './wslike-e0b32dd5.js';
|
|
5
5
|
|
|
6
6
|
interface ConnectionInfoExtras extends Record<string, unknown> {
|
|
7
7
|
headers: Record<string, string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as ProtocolVersion, O as OpaqueTransportMessage } from './message-
|
|
1
|
+
import { P as ProtocolVersion, O as OpaqueTransportMessage } from './message-01c3e85a.js';
|
|
2
2
|
|
|
3
3
|
declare const LoggingLevels: {
|
|
4
4
|
readonly debug: -1;
|
|
@@ -34,4 +34,4 @@ declare const stringLogger: LogFn;
|
|
|
34
34
|
declare const coloredStringLogger: LogFn;
|
|
35
35
|
declare const jsonLogger: LogFn;
|
|
36
36
|
|
|
37
|
-
export {
|
|
37
|
+
export { Logger as L, MessageMetadata as M, Tags as T, LogFn as a, LoggingLevel as b, coloredStringLogger as c, jsonLogger as j, stringLogger as s };
|
package/dist/logging/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { a as LogFn, L as Logger, M as MessageMetadata, c as coloredStringLogger, j as jsonLogger, s as stringLogger } from '../index-
|
|
2
|
-
import '../message-
|
|
1
|
+
export { a as LogFn, L as Logger, M as MessageMetadata, c as coloredStringLogger, j as jsonLogger, s as stringLogger } from '../index-02554794.js';
|
|
2
|
+
import '../message-01c3e85a.js';
|
|
3
3
|
import '@sinclair/typebox';
|
|
4
4
|
import '@opentelemetry/api';
|
package/dist/logging/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { a as LogFn, L as Logger, M as MessageMetadata, c as coloredStringLogger, j as jsonLogger, s as stringLogger } from '../index-
|
|
2
|
-
import '../message-
|
|
1
|
+
export { a as LogFn, L as Logger, M as MessageMetadata, c as coloredStringLogger, j as jsonLogger, s as stringLogger } from '../index-02554794.js';
|
|
2
|
+
import '../message-01c3e85a.js';
|
|
3
3
|
import '@sinclair/typebox';
|
|
4
4
|
import '@opentelemetry/api';
|
|
@@ -105,4 +105,4 @@ declare function isStreamOpen(controlFlag: number): boolean;
|
|
|
105
105
|
*/
|
|
106
106
|
declare function isStreamClose(controlFlag: number): boolean;
|
|
107
107
|
|
|
108
|
-
export {
|
|
108
|
+
export { HandshakeErrorResponseCodes as H, OpaqueTransportMessage as O, ProtocolVersion as P, TransportClientId as T, PartialTransportMessage as a, TelemetryInfo as b, TransportMessage as c, HandshakeErrorCustomHandlerFatalResponseCodes as d, TransportMessageSchema as e, OpaqueTransportMessageSchema as f, isStreamClose as g, isStreamOpen as i };
|
package/dist/router/index.cjs
CHANGED
|
@@ -908,7 +908,8 @@ function _createRecursiveProxy(callback, path) {
|
|
|
908
908
|
const proxy = new Proxy(noop, {
|
|
909
909
|
// property access, recurse and add field to path
|
|
910
910
|
get(_obj, key) {
|
|
911
|
-
if (typeof key !== "string")
|
|
911
|
+
if (typeof key !== "string")
|
|
912
|
+
return void 0;
|
|
912
913
|
return _createRecursiveProxy(callback, [...path, key]);
|
|
913
914
|
},
|
|
914
915
|
// hit the end, let's invoke the handler
|
|
@@ -1037,7 +1038,8 @@ function handleProc(procType, transport, serverId, init, serviceName, procedureN
|
|
|
1037
1038
|
);
|
|
1038
1039
|
}
|
|
1039
1040
|
function onMessage(msg) {
|
|
1040
|
-
if (msg.streamId !== streamId)
|
|
1041
|
+
if (msg.streamId !== streamId)
|
|
1042
|
+
return;
|
|
1041
1043
|
if (msg.to !== transport.clientId) {
|
|
1042
1044
|
transport.log?.error("got stream message from unexpected client", {
|
|
1043
1045
|
clientId: transport.clientId,
|
|
@@ -1262,7 +1264,8 @@ var RiverServer = class {
|
|
|
1262
1264
|
);
|
|
1263
1265
|
};
|
|
1264
1266
|
const handleSessionStatus = (evt) => {
|
|
1265
|
-
if (evt.status !== "closing")
|
|
1267
|
+
if (evt.status !== "closing")
|
|
1268
|
+
return;
|
|
1266
1269
|
const disconnectedClientId = evt.session.to;
|
|
1267
1270
|
this.log?.info(
|
|
1268
1271
|
`got session disconnect from ${disconnectedClientId}, cleaning up streams`,
|
|
@@ -1276,7 +1279,8 @@ var RiverServer = class {
|
|
|
1276
1279
|
this.serverCancelledStreams.delete(disconnectedClientId);
|
|
1277
1280
|
};
|
|
1278
1281
|
const handleTransportStatus = (evt) => {
|
|
1279
|
-
if (evt.status !== "closed")
|
|
1282
|
+
if (evt.status !== "closed")
|
|
1283
|
+
return;
|
|
1280
1284
|
this.unregisterTransportListeners();
|
|
1281
1285
|
};
|
|
1282
1286
|
this.unregisterTransportListeners = () => {
|
|
@@ -1892,7 +1896,7 @@ function createServerHandshakeOptions(schema, validate) {
|
|
|
1892
1896
|
}
|
|
1893
1897
|
|
|
1894
1898
|
// package.json
|
|
1895
|
-
var version = "0.208.
|
|
1899
|
+
var version = "0.208.1";
|
|
1896
1900
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1897
1901
|
0 && (module.exports = {
|
|
1898
1902
|
CANCEL_CODE,
|