@replit/river 0.21.1 → 0.22.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.
Files changed (63) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-5WFL722S.js → chunk-3MFX6NXA.js} +94 -3
  3. package/dist/chunk-3MFX6NXA.js.map +1 -0
  4. package/dist/{chunk-NCXUFDVL.js → chunk-GCLEWC26.js} +328 -500
  5. package/dist/chunk-GCLEWC26.js.map +1 -0
  6. package/dist/chunk-HUBFYN37.js +60 -0
  7. package/dist/chunk-HUBFYN37.js.map +1 -0
  8. package/dist/{chunk-FDLAPYCK.js → chunk-S3YKQT4J.js} +2 -2
  9. package/dist/{chunk-JMXO5L2X.js → chunk-ZPBWKBM5.js} +344 -384
  10. package/dist/chunk-ZPBWKBM5.js.map +1 -0
  11. package/dist/{connection-76c5ed01.d.ts → connection-8b059ac4.d.ts} +6 -4
  12. package/dist/{connection-975b25c9.d.ts → connection-bbfe1147.d.ts} +1 -1
  13. package/dist/{index-dfad460e.d.ts → index-2ece5234.d.ts} +16 -7
  14. package/dist/logging/index.d.cts +2 -1
  15. package/dist/logging/index.d.ts +2 -1
  16. package/dist/router/index.cjs +373 -486
  17. package/dist/router/index.cjs.map +1 -1
  18. package/dist/router/index.d.cts +5 -4
  19. package/dist/router/index.d.ts +5 -4
  20. package/dist/router/index.js +4 -3
  21. package/dist/{services-7b716dcf.d.ts → services-acbcc441.d.ts} +1 -1
  22. package/dist/{services-9c496c6e.d.ts → services-cb01a7a8.d.ts} +1 -1
  23. package/dist/transport/impls/uds/client.cjs +186 -145
  24. package/dist/transport/impls/uds/client.cjs.map +1 -1
  25. package/dist/transport/impls/uds/client.d.cts +3 -2
  26. package/dist/transport/impls/uds/client.d.ts +3 -2
  27. package/dist/transport/impls/uds/client.js +3 -3
  28. package/dist/transport/impls/uds/server.cjs +281 -256
  29. package/dist/transport/impls/uds/server.cjs.map +1 -1
  30. package/dist/transport/impls/uds/server.d.cts +3 -2
  31. package/dist/transport/impls/uds/server.d.ts +3 -2
  32. package/dist/transport/impls/uds/server.js +3 -3
  33. package/dist/transport/impls/ws/client.cjs +240 -204
  34. package/dist/transport/impls/ws/client.cjs.map +1 -1
  35. package/dist/transport/impls/ws/client.d.cts +6 -6
  36. package/dist/transport/impls/ws/client.d.ts +6 -6
  37. package/dist/transport/impls/ws/client.js +33 -48
  38. package/dist/transport/impls/ws/client.js.map +1 -1
  39. package/dist/transport/impls/ws/server.cjs +303 -270
  40. package/dist/transport/impls/ws/server.cjs.map +1 -1
  41. package/dist/transport/impls/ws/server.d.cts +5 -4
  42. package/dist/transport/impls/ws/server.d.ts +5 -4
  43. package/dist/transport/impls/ws/server.js +3 -3
  44. package/dist/transport/impls/ws/server.js.map +1 -1
  45. package/dist/transport/index.cjs +390 -382
  46. package/dist/transport/index.cjs.map +1 -1
  47. package/dist/transport/index.d.cts +5 -5
  48. package/dist/transport/index.d.ts +5 -5
  49. package/dist/transport/index.js +2 -2
  50. package/dist/util/testHelpers.cjs +57 -7
  51. package/dist/util/testHelpers.cjs.map +1 -1
  52. package/dist/util/testHelpers.d.cts +14 -5
  53. package/dist/util/testHelpers.d.ts +14 -5
  54. package/dist/util/testHelpers.js +10 -4
  55. package/dist/util/testHelpers.js.map +1 -1
  56. package/dist/wslike-e0b32dd5.d.ts +40 -0
  57. package/package.json +4 -5
  58. package/dist/chunk-3Y7AB5EB.js +0 -42
  59. package/dist/chunk-3Y7AB5EB.js.map +0 -1
  60. package/dist/chunk-5WFL722S.js.map +0 -1
  61. package/dist/chunk-JMXO5L2X.js.map +0 -1
  62. package/dist/chunk-NCXUFDVL.js.map +0 -1
  63. /package/dist/{chunk-FDLAPYCK.js.map → chunk-S3YKQT4J.js.map} +0 -0
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  ControlMessagePayloadSchema,
3
3
  coerceErrorString,
4
+ createHandlerSpan,
5
+ createProcTelemetryInfo,
6
+ getPropagationContext,
4
7
  isStreamClose,
5
- isStreamOpen,
6
- tracing_default
7
- } from "./chunk-5WFL722S.js";
8
+ isStreamOpen
9
+ } from "./chunk-3MFX6NXA.js";
8
10
  import {
9
11
  log
10
12
  } from "./chunk-OTQNCLFH.js";
@@ -298,14 +300,6 @@ var Procedure = {
298
300
  stream
299
301
  };
300
302
 
301
- // router/client.ts
302
- import {
303
- context,
304
- propagation,
305
- SpanKind,
306
- SpanStatusCode
307
- } from "@opentelemetry/api";
308
-
309
303
  // node_modules/p-defer/index.js
310
304
  function pDefer() {
311
305
  const deferred = {};
@@ -688,324 +682,256 @@ function createSessionDisconnectHandler(from, cb) {
688
682
  }
689
683
  function handleRpc(transport, serverId, input, serviceName, procedureName) {
690
684
  const streamId = nanoid();
691
- return tracing_default.startActiveSpan(
692
- `${serviceName}.${procedureName}`,
693
- {
694
- attributes: {
695
- component: "river",
696
- "river.method.kind": "rpc",
697
- "river.method.service": serviceName,
698
- "river.method.name": procedureName,
699
- "river.streamId": streamId,
700
- "span.kind": "client"
701
- },
702
- kind: SpanKind.CLIENT
703
- },
704
- (span) => {
705
- const tracing = { traceparent: "", tracestate: "" };
706
- propagation.inject(context.active(), tracing);
707
- transport.send(serverId, {
708
- streamId,
709
- serviceName,
710
- procedureName,
711
- tracing,
712
- payload: input,
713
- controlFlags: 2 /* StreamOpenBit */ | 4 /* StreamClosedBit */
714
- });
715
- const responsePromise = new Promise((resolve) => {
716
- const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
717
- span.setStatus({ code: SpanStatusCode.ERROR });
718
- cleanup();
719
- resolve(
720
- Err({
721
- code: UNEXPECTED_DISCONNECT,
722
- message: `${serverId} unexpectedly disconnected`
723
- })
724
- );
725
- });
726
- function cleanup() {
727
- transport.removeEventListener("message", onMessage);
728
- transport.removeEventListener("sessionStatus", onSessionStatus);
729
- span.end();
730
- }
731
- function onMessage(msg) {
732
- if (msg.streamId !== streamId)
733
- return;
734
- if (msg.to !== transport.clientId)
735
- return;
736
- if (msg.payload && typeof msg.payload === "object" && "ok" in msg.payload) {
737
- span.setStatus({
738
- code: msg.payload.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR
739
- });
740
- }
741
- cleanup();
742
- resolve(msg.payload);
743
- }
744
- transport.addEventListener("message", onMessage);
745
- transport.addEventListener("sessionStatus", onSessionStatus);
746
- });
747
- return responsePromise;
748
- }
685
+ const { span, ctx } = createProcTelemetryInfo(
686
+ "rpc",
687
+ serviceName,
688
+ procedureName,
689
+ streamId
749
690
  );
691
+ transport.send(serverId, {
692
+ streamId,
693
+ serviceName,
694
+ procedureName,
695
+ payload: input,
696
+ tracing: getPropagationContext(ctx),
697
+ controlFlags: 2 /* StreamOpenBit */ | 4 /* StreamClosedBit */
698
+ });
699
+ const responsePromise = new Promise((resolve) => {
700
+ const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
701
+ cleanup();
702
+ resolve(
703
+ Err({
704
+ code: UNEXPECTED_DISCONNECT,
705
+ message: `${serverId} unexpectedly disconnected`
706
+ })
707
+ );
708
+ });
709
+ function cleanup() {
710
+ transport.removeEventListener("message", onMessage);
711
+ transport.removeEventListener("sessionStatus", onSessionStatus);
712
+ span.end();
713
+ }
714
+ function onMessage(msg) {
715
+ if (msg.streamId !== streamId)
716
+ return;
717
+ if (msg.to !== transport.clientId)
718
+ return;
719
+ cleanup();
720
+ resolve(msg.payload);
721
+ }
722
+ transport.addEventListener("message", onMessage);
723
+ transport.addEventListener("sessionStatus", onSessionStatus);
724
+ });
725
+ return responsePromise;
750
726
  }
751
727
  function handleStream(transport, serverId, init, serviceName, procedureName) {
752
728
  const streamId = nanoid();
753
- return tracing_default.startActiveSpan(
754
- `${serviceName}.${procedureName}`,
755
- {
756
- attributes: {
757
- component: "river",
758
- "river.method.kind": init ? "stream-with-init" : "stream",
759
- "river.method.service": serviceName,
760
- "river.method.name": procedureName,
761
- "river.streamId": streamId,
762
- "span.kind": "client"
763
- },
764
- kind: SpanKind.CLIENT
765
- },
766
- (span) => {
767
- const tracing = { traceparent: "", tracestate: "" };
768
- propagation.inject(context.active(), tracing);
769
- const inputStream = pushable({ objectMode: true });
770
- const outputStream = pushable({ objectMode: true });
771
- let firstMessage = true;
772
- let healthyClose = true;
773
- if (init) {
774
- transport.send(serverId, {
775
- streamId,
776
- serviceName,
777
- procedureName,
778
- tracing,
779
- payload: init,
780
- controlFlags: 2 /* StreamOpenBit */
781
- });
782
- firstMessage = false;
783
- }
784
- const pipeInputToTransport = async () => {
785
- for await (const rawIn of inputStream) {
786
- const m = {
787
- streamId,
788
- payload: rawIn,
789
- controlFlags: 0
790
- };
791
- if (firstMessage) {
792
- m.serviceName = serviceName;
793
- m.procedureName = procedureName;
794
- m.tracing = tracing;
795
- m.controlFlags |= 2 /* StreamOpenBit */;
796
- firstMessage = false;
797
- }
798
- transport.send(serverId, m);
799
- }
800
- if (!healthyClose)
801
- return;
802
- transport.sendCloseStream(serverId, streamId);
803
- span.setStatus({ code: SpanStatusCode.OK });
729
+ const { span, ctx } = createProcTelemetryInfo(
730
+ "stream",
731
+ serviceName,
732
+ procedureName,
733
+ streamId
734
+ );
735
+ const inputStream = pushable({ objectMode: true });
736
+ const outputStream = pushable({ objectMode: true });
737
+ let firstMessage = true;
738
+ let healthyClose = true;
739
+ if (init) {
740
+ transport.send(serverId, {
741
+ streamId,
742
+ serviceName,
743
+ procedureName,
744
+ payload: init,
745
+ tracing: getPropagationContext(ctx),
746
+ controlFlags: 2 /* StreamOpenBit */
747
+ });
748
+ firstMessage = false;
749
+ }
750
+ const pipeInputToTransport = async () => {
751
+ for await (const rawIn of inputStream) {
752
+ const m = {
753
+ streamId,
754
+ payload: rawIn,
755
+ controlFlags: 0
804
756
  };
805
- void pipeInputToTransport();
806
- function onMessage(msg) {
807
- if (msg.streamId !== streamId)
808
- return;
809
- if (msg.to !== transport.clientId)
810
- return;
811
- if (isStreamClose(msg.controlFlags)) {
812
- cleanup();
813
- } else {
814
- outputStream.push(msg.payload);
815
- }
816
- }
817
- function cleanup() {
818
- inputStream.end();
819
- outputStream.end();
820
- transport.removeEventListener("message", onMessage);
821
- transport.removeEventListener("sessionStatus", onSessionStatus);
822
- span.end();
757
+ if (firstMessage) {
758
+ m.serviceName = serviceName;
759
+ m.procedureName = procedureName;
760
+ m.tracing = getPropagationContext(ctx);
761
+ m.controlFlags |= 2 /* StreamOpenBit */;
762
+ firstMessage = false;
823
763
  }
824
- const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
825
- outputStream.push(
826
- Err({
827
- code: UNEXPECTED_DISCONNECT,
828
- message: `${serverId} unexpectedly disconnected`
829
- })
830
- );
831
- healthyClose = false;
832
- span.setStatus({ code: SpanStatusCode.ERROR });
833
- cleanup();
834
- });
835
- transport.addEventListener("message", onMessage);
836
- transport.addEventListener("sessionStatus", onSessionStatus);
837
- return [inputStream, outputStream, cleanup];
764
+ transport.send(serverId, m);
838
765
  }
839
- );
766
+ if (!healthyClose)
767
+ return;
768
+ transport.sendCloseStream(serverId, streamId);
769
+ };
770
+ void pipeInputToTransport();
771
+ function onMessage(msg) {
772
+ if (msg.streamId !== streamId)
773
+ return;
774
+ if (msg.to !== transport.clientId)
775
+ return;
776
+ if (isStreamClose(msg.controlFlags)) {
777
+ cleanup();
778
+ } else {
779
+ outputStream.push(msg.payload);
780
+ }
781
+ }
782
+ function cleanup() {
783
+ inputStream.end();
784
+ outputStream.end();
785
+ transport.removeEventListener("message", onMessage);
786
+ transport.removeEventListener("sessionStatus", onSessionStatus);
787
+ span.end();
788
+ }
789
+ const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
790
+ outputStream.push(
791
+ Err({
792
+ code: UNEXPECTED_DISCONNECT,
793
+ message: `${serverId} unexpectedly disconnected`
794
+ })
795
+ );
796
+ healthyClose = false;
797
+ cleanup();
798
+ });
799
+ transport.addEventListener("message", onMessage);
800
+ transport.addEventListener("sessionStatus", onSessionStatus);
801
+ return [inputStream, outputStream, cleanup];
840
802
  }
841
803
  function handleSubscribe(transport, serverId, input, serviceName, procedureName) {
842
804
  const streamId = nanoid();
843
- return tracing_default.startActiveSpan(
844
- `${serviceName}.${procedureName}`,
845
- {
846
- attributes: {
847
- component: "river",
848
- "river.method.kind": "subscribe",
849
- "river.method.service": serviceName,
850
- "river.method.name": procedureName,
851
- "river.streamId": streamId,
852
- "span.kind": "client"
853
- },
854
- kind: SpanKind.CLIENT
855
- },
856
- (span) => {
857
- const tracing = { traceparent: "", tracestate: "" };
858
- propagation.inject(context.active(), tracing);
859
- transport.send(serverId, {
860
- streamId,
861
- serviceName,
862
- procedureName,
863
- tracing,
864
- payload: input,
865
- controlFlags: 2 /* StreamOpenBit */
866
- });
867
- let healthyClose = true;
868
- const outputStream = pushable({ objectMode: true });
869
- function onMessage(msg) {
870
- if (msg.streamId !== streamId)
871
- return;
872
- if (msg.to !== transport.clientId)
873
- return;
874
- if (isStreamClose(msg.controlFlags)) {
875
- cleanup();
876
- } else {
877
- outputStream.push(msg.payload);
878
- }
879
- }
880
- function cleanup() {
881
- outputStream.end();
882
- transport.removeEventListener("message", onMessage);
883
- transport.removeEventListener("sessionStatus", onSessionStatus);
884
- span.end();
885
- }
886
- const closeHandler = () => {
887
- cleanup();
888
- if (!healthyClose)
889
- return;
890
- transport.sendCloseStream(serverId, streamId);
891
- };
892
- const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
893
- outputStream.push(
894
- Err({
895
- code: UNEXPECTED_DISCONNECT,
896
- message: `${serverId} unexpectedly disconnected`
897
- })
898
- );
899
- healthyClose = false;
900
- span.setStatus({ code: SpanStatusCode.ERROR });
901
- cleanup();
902
- });
903
- transport.addEventListener("message", onMessage);
904
- transport.addEventListener("sessionStatus", onSessionStatus);
905
- return [outputStream, closeHandler];
906
- }
805
+ const { span, ctx } = createProcTelemetryInfo(
806
+ "subscription",
807
+ serviceName,
808
+ procedureName,
809
+ streamId
907
810
  );
811
+ transport.send(serverId, {
812
+ streamId,
813
+ serviceName,
814
+ procedureName,
815
+ payload: input,
816
+ tracing: getPropagationContext(ctx),
817
+ controlFlags: 2 /* StreamOpenBit */
818
+ });
819
+ let healthyClose = true;
820
+ const outputStream = pushable({ objectMode: true });
821
+ function onMessage(msg) {
822
+ if (msg.streamId !== streamId)
823
+ return;
824
+ if (msg.to !== transport.clientId)
825
+ return;
826
+ if (isStreamClose(msg.controlFlags)) {
827
+ cleanup();
828
+ } else {
829
+ outputStream.push(msg.payload);
830
+ }
831
+ }
832
+ function cleanup() {
833
+ outputStream.end();
834
+ transport.removeEventListener("message", onMessage);
835
+ transport.removeEventListener("sessionStatus", onSessionStatus);
836
+ span.end();
837
+ }
838
+ const closeHandler = () => {
839
+ cleanup();
840
+ if (!healthyClose)
841
+ return;
842
+ transport.sendCloseStream(serverId, streamId);
843
+ };
844
+ const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
845
+ outputStream.push(
846
+ Err({
847
+ code: UNEXPECTED_DISCONNECT,
848
+ message: `${serverId} unexpectedly disconnected`
849
+ })
850
+ );
851
+ healthyClose = false;
852
+ cleanup();
853
+ });
854
+ transport.addEventListener("message", onMessage);
855
+ transport.addEventListener("sessionStatus", onSessionStatus);
856
+ return [outputStream, closeHandler];
908
857
  }
909
858
  function handleUpload(transport, serverId, init, serviceName, procedureName) {
910
859
  const streamId = nanoid();
911
- return tracing_default.startActiveSpan(
912
- `${serviceName}.${procedureName}`,
913
- {
914
- attributes: {
915
- component: "river",
916
- "river.method.kind": init ? "upload-with-init" : "upload",
917
- "river.method.service": serviceName,
918
- "river.method.name": procedureName,
919
- "river.streamId": streamId,
920
- "span.kind": "client"
921
- },
922
- kind: SpanKind.CLIENT
923
- },
924
- (span) => {
925
- const tracing = { traceparent: "", tracestate: "" };
926
- propagation.inject(context.active(), tracing);
927
- const inputStream = pushable({ objectMode: true });
928
- let firstMessage = true;
929
- let healthyClose = true;
930
- if (init) {
931
- transport.send(serverId, {
932
- streamId,
933
- serviceName,
934
- procedureName,
935
- tracing,
936
- payload: init,
937
- controlFlags: 2 /* StreamOpenBit */
938
- });
860
+ const { span, ctx } = createProcTelemetryInfo(
861
+ "upload",
862
+ serviceName,
863
+ procedureName,
864
+ streamId
865
+ );
866
+ const inputStream = pushable({ objectMode: true });
867
+ let firstMessage = true;
868
+ let healthyClose = true;
869
+ if (init) {
870
+ transport.send(serverId, {
871
+ streamId,
872
+ serviceName,
873
+ procedureName,
874
+ payload: init,
875
+ tracing: getPropagationContext(ctx),
876
+ controlFlags: 2 /* StreamOpenBit */
877
+ });
878
+ firstMessage = false;
879
+ }
880
+ const pipeInputToTransport = async () => {
881
+ for await (const rawIn of inputStream) {
882
+ const m = {
883
+ streamId,
884
+ payload: rawIn,
885
+ controlFlags: 0
886
+ };
887
+ if (firstMessage) {
888
+ m.serviceName = serviceName;
889
+ m.procedureName = procedureName;
890
+ m.tracing = getPropagationContext(ctx);
891
+ m.controlFlags |= 2 /* StreamOpenBit */;
939
892
  firstMessage = false;
940
893
  }
941
- const pipeInputToTransport = async () => {
942
- for await (const rawIn of inputStream) {
943
- const m = {
944
- streamId,
945
- payload: rawIn,
946
- controlFlags: 0
947
- };
948
- if (firstMessage) {
949
- m.serviceName = serviceName;
950
- m.procedureName = procedureName;
951
- m.tracing = tracing;
952
- m.controlFlags |= 2 /* StreamOpenBit */;
953
- firstMessage = false;
954
- }
955
- transport.send(serverId, m);
956
- }
957
- if (!healthyClose)
958
- return;
959
- transport.sendCloseStream(serverId, streamId);
960
- };
961
- void pipeInputToTransport();
962
- const responsePromise = new Promise((resolve) => {
963
- const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
964
- healthyClose = false;
965
- span.setStatus({ code: SpanStatusCode.ERROR });
966
- cleanup();
967
- resolve(
968
- Err({
969
- code: UNEXPECTED_DISCONNECT,
970
- message: `${serverId} unexpectedly disconnected`
971
- })
972
- );
973
- });
974
- function cleanup() {
975
- inputStream.end();
976
- transport.removeEventListener("message", onMessage);
977
- transport.removeEventListener("sessionStatus", onSessionStatus);
978
- span.end();
979
- }
980
- function onMessage(msg) {
981
- if (msg.streamId !== streamId)
982
- return;
983
- if (msg.to !== transport.clientId)
984
- return;
985
- if (msg.payload && typeof msg.payload === "object" && "ok" in msg.payload) {
986
- span.setStatus({
987
- code: msg.payload.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR
988
- });
989
- }
990
- cleanup();
991
- resolve(msg.payload);
992
- }
993
- transport.addEventListener("message", onMessage);
994
- transport.addEventListener("sessionStatus", onSessionStatus);
995
- });
996
- return [inputStream, responsePromise];
894
+ transport.send(serverId, m);
997
895
  }
998
- );
896
+ if (!healthyClose)
897
+ return;
898
+ transport.sendCloseStream(serverId, streamId);
899
+ };
900
+ void pipeInputToTransport();
901
+ const responsePromise = new Promise((resolve) => {
902
+ const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
903
+ healthyClose = false;
904
+ cleanup();
905
+ resolve(
906
+ Err({
907
+ code: UNEXPECTED_DISCONNECT,
908
+ message: `${serverId} unexpectedly disconnected`
909
+ })
910
+ );
911
+ });
912
+ function cleanup() {
913
+ inputStream.end();
914
+ transport.removeEventListener("message", onMessage);
915
+ transport.removeEventListener("sessionStatus", onSessionStatus);
916
+ span.end();
917
+ }
918
+ function onMessage(msg) {
919
+ if (msg.streamId !== streamId)
920
+ return;
921
+ if (msg.to !== transport.clientId)
922
+ return;
923
+ cleanup();
924
+ resolve(msg.payload);
925
+ }
926
+ transport.addEventListener("message", onMessage);
927
+ transport.addEventListener("sessionStatus", onSessionStatus);
928
+ });
929
+ return [inputStream, responsePromise];
999
930
  }
1000
931
 
1001
932
  // router/server.ts
1002
- import {
1003
- context as context2,
1004
- propagation as propagation2,
1005
- SpanKind as SpanKind2,
1006
- SpanStatusCode as SpanStatusCode2
1007
- } from "@opentelemetry/api";
1008
933
  import { Value } from "@sinclair/typebox/value";
934
+ import { SpanStatusCode } from "@opentelemetry/api";
1009
935
  var RiverServer = class {
1010
936
  transport;
1011
937
  services;
@@ -1076,9 +1002,9 @@ var RiverServer = class {
1076
1002
  this.transport.removeEventListener("message", this.onMessage);
1077
1003
  this.transport.removeEventListener("sessionStatus", this.onSessionStatus);
1078
1004
  await Promise.all([...this.streamMap.keys()].map(this.cleanupStream));
1079
- for (const context3 of this.contextMap.values()) {
1080
- if (Symbol.dispose in context3.state) {
1081
- const dispose = context3.state[Symbol.dispose];
1005
+ for (const context of this.contextMap.values()) {
1006
+ if (Symbol.dispose in context.state) {
1007
+ const dispose = context.state[Symbol.dispose];
1082
1008
  if (typeof dispose === "function") {
1083
1009
  dispose();
1084
1010
  }
@@ -1111,10 +1037,6 @@ var RiverServer = class {
1111
1037
  });
1112
1038
  return;
1113
1039
  }
1114
- let activeContext = context2.active();
1115
- if (message.tracing) {
1116
- activeContext = propagation2.extract(activeContext, message.tracing);
1117
- }
1118
1040
  const service = this.services[message.serviceName];
1119
1041
  const serviceContext = this.getContext(service, message.serviceName);
1120
1042
  if (!(message.procedureName in service.procedures)) {
@@ -1178,12 +1100,8 @@ var RiverServer = class {
1178
1100
  `procedure ${message.serviceName}.${message.procedureName} threw an uncaught error: ${errorMsg}`,
1179
1101
  session.loggingMetadata
1180
1102
  );
1181
- if (err instanceof Error) {
1182
- span.recordException(err);
1183
- } else {
1184
- span.recordException(errorMsg);
1185
- }
1186
- span.setStatus({ code: SpanStatusCode2.ERROR });
1103
+ span.recordException(err instanceof Error ? err : new Error(errorMsg));
1104
+ span.setStatus({ code: SpanStatusCode.ERROR });
1187
1105
  outgoing.push(
1188
1106
  Err({
1189
1107
  code: UNCAUGHT_ERROR,
@@ -1210,32 +1128,48 @@ var RiverServer = class {
1210
1128
  };
1211
1129
  switch (procedure.type) {
1212
1130
  case "rpc":
1213
- inputHandler = (async () => {
1214
- const inputMessage = await incoming.next();
1215
- if (inputMessage.done) {
1216
- return;
1131
+ inputHandler = createHandlerSpan(
1132
+ procedure.type,
1133
+ message,
1134
+ async (span) => {
1135
+ const inputMessage = await incoming.next();
1136
+ if (inputMessage.done) {
1137
+ return;
1138
+ }
1139
+ try {
1140
+ const outputMessage = await procedure.handler(
1141
+ serviceContextWithTransportInfo,
1142
+ inputMessage.value
1143
+ );
1144
+ outgoing.push(outputMessage);
1145
+ } catch (err) {
1146
+ errorHandler(err, span);
1147
+ } finally {
1148
+ span.end();
1149
+ }
1217
1150
  }
1218
- await tracing_default.startActiveSpan(
1219
- `${message.serviceName}.${message.procedureName}`,
1220
- {
1221
- attributes: {
1222
- component: "river",
1223
- "river.method.kind": "rpc",
1224
- "river.method.service": message.serviceName,
1225
- "river.method.name": message.procedureName,
1226
- "river.streamId": message.streamId,
1227
- "span.kind": "server"
1228
- },
1229
- kind: SpanKind2.SERVER
1230
- },
1231
- activeContext,
1151
+ );
1152
+ break;
1153
+ case "stream":
1154
+ if (procHasInitMessage) {
1155
+ inputHandler = createHandlerSpan(
1156
+ procedure.type,
1157
+ message,
1232
1158
  async (span) => {
1159
+ const initMessage = await incoming.next();
1160
+ if (initMessage.done) {
1161
+ return;
1162
+ }
1233
1163
  try {
1234
- const outputMessage = await procedure.handler(
1164
+ const dispose = await procedure.handler(
1235
1165
  serviceContextWithTransportInfo,
1236
- inputMessage.value
1166
+ initMessage.value,
1167
+ incoming,
1168
+ outgoing
1237
1169
  );
1238
- outgoing.push(outputMessage);
1170
+ if (dispose) {
1171
+ disposables.push(dispose);
1172
+ }
1239
1173
  } catch (err) {
1240
1174
  errorHandler(err, span);
1241
1175
  } finally {
@@ -1243,67 +1177,10 @@ var RiverServer = class {
1243
1177
  }
1244
1178
  }
1245
1179
  );
1246
- })();
1247
- break;
1248
- case "stream":
1249
- if (procHasInitMessage) {
1250
- inputHandler = (async () => {
1251
- const initMessage = await incoming.next();
1252
- if (initMessage.done) {
1253
- return;
1254
- }
1255
- await tracing_default.startActiveSpan(
1256
- `${message.serviceName}.${message.procedureName}`,
1257
- {
1258
- attributes: {
1259
- component: "river",
1260
- "river.method.kind": "stream-with-init",
1261
- "river.method.service": message.serviceName,
1262
- "river.method.name": message.procedureName,
1263
- "river.streamId": message.streamId,
1264
- "span.kind": "server"
1265
- },
1266
- kind: SpanKind2.SERVER
1267
- },
1268
- activeContext,
1269
- async (span) => {
1270
- try {
1271
- const dispose = await procedure.handler(
1272
- serviceContextWithTransportInfo,
1273
- initMessage.value,
1274
- incoming,
1275
- outgoing
1276
- );
1277
- if (dispose) {
1278
- disposables.push(() => {
1279
- dispose();
1280
- span.end();
1281
- });
1282
- } else {
1283
- span.end();
1284
- }
1285
- } catch (err) {
1286
- errorHandler(err, span);
1287
- span.end();
1288
- }
1289
- }
1290
- );
1291
- })();
1292
1180
  } else {
1293
- inputHandler = tracing_default.startActiveSpan(
1294
- `${message.serviceName}.${message.procedureName}`,
1295
- {
1296
- attributes: {
1297
- component: "river",
1298
- "river.method.kind": "stream",
1299
- "river.method.service": message.serviceName,
1300
- "river.method.name": message.procedureName,
1301
- "river.streamId": message.streamId,
1302
- "span.kind": "server"
1303
- },
1304
- kind: SpanKind2.SERVER
1305
- },
1306
- activeContext,
1181
+ inputHandler = createHandlerSpan(
1182
+ procedure.type,
1183
+ message,
1307
1184
  async (span) => {
1308
1185
  try {
1309
1186
  const dispose = await procedure.handler(
@@ -1312,15 +1189,11 @@ var RiverServer = class {
1312
1189
  outgoing
1313
1190
  );
1314
1191
  if (dispose) {
1315
- disposables.push(() => {
1316
- dispose();
1317
- span.end();
1318
- });
1319
- } else {
1320
- span.end();
1192
+ disposables.push(dispose);
1321
1193
  }
1322
1194
  } catch (err) {
1323
1195
  errorHandler(err, span);
1196
+ } finally {
1324
1197
  span.end();
1325
1198
  }
1326
1199
  }
@@ -1328,102 +1201,61 @@ var RiverServer = class {
1328
1201
  }
1329
1202
  break;
1330
1203
  case "subscription":
1331
- inputHandler = (async () => {
1332
- const inputMessage = await incoming.next();
1333
- if (inputMessage.done) {
1334
- return;
1204
+ inputHandler = createHandlerSpan(
1205
+ procedure.type,
1206
+ message,
1207
+ async (span) => {
1208
+ const inputMessage = await incoming.next();
1209
+ if (inputMessage.done) {
1210
+ return;
1211
+ }
1212
+ try {
1213
+ const dispose = await procedure.handler(
1214
+ serviceContextWithTransportInfo,
1215
+ inputMessage.value,
1216
+ outgoing
1217
+ );
1218
+ if (dispose) {
1219
+ disposables.push(dispose);
1220
+ }
1221
+ } catch (err) {
1222
+ errorHandler(err, span);
1223
+ } finally {
1224
+ span.end();
1225
+ }
1335
1226
  }
1336
- await tracing_default.startActiveSpan(
1337
- `${message.serviceName}.${message.procedureName}`,
1338
- {
1339
- attributes: {
1340
- component: "river",
1341
- "river.method.kind": "subscription",
1342
- "river.method.service": message.serviceName,
1343
- "river.method.name": message.procedureName,
1344
- "river.streamId": message.streamId,
1345
- "span.kind": "server"
1346
- },
1347
- kind: SpanKind2.SERVER
1348
- },
1349
- activeContext,
1227
+ );
1228
+ break;
1229
+ case "upload":
1230
+ if (procHasInitMessage) {
1231
+ inputHandler = createHandlerSpan(
1232
+ procedure.type,
1233
+ message,
1350
1234
  async (span) => {
1235
+ const initMessage = await incoming.next();
1236
+ if (initMessage.done) {
1237
+ return;
1238
+ }
1351
1239
  try {
1352
- const dispose = await procedure.handler(
1240
+ const outputMessage = await procedure.handler(
1353
1241
  serviceContextWithTransportInfo,
1354
- inputMessage.value,
1355
- outgoing
1242
+ initMessage.value,
1243
+ incoming
1356
1244
  );
1357
- if (dispose) {
1358
- disposables.push(() => {
1359
- dispose();
1360
- span.end();
1361
- });
1362
- } else {
1363
- span.end();
1245
+ if (!this.disconnectedSessions.has(message.from)) {
1246
+ outgoing.push(outputMessage);
1364
1247
  }
1365
1248
  } catch (err) {
1366
1249
  errorHandler(err, span);
1250
+ } finally {
1367
1251
  span.end();
1368
1252
  }
1369
1253
  }
1370
1254
  );
1371
- })();
1372
- break;
1373
- case "upload":
1374
- if (procHasInitMessage) {
1375
- inputHandler = (async () => {
1376
- const initMessage = await incoming.next();
1377
- if (initMessage.done) {
1378
- return;
1379
- }
1380
- await tracing_default.startActiveSpan(
1381
- `${message.serviceName}.${message.procedureName}`,
1382
- {
1383
- attributes: {
1384
- component: "river",
1385
- "river.method.kind": "upload-with-init",
1386
- "river.method.service": message.serviceName,
1387
- "river.method.name": message.procedureName,
1388
- "river.streamId": message.streamId,
1389
- "span.kind": "server"
1390
- },
1391
- kind: SpanKind2.SERVER
1392
- },
1393
- activeContext,
1394
- async (span) => {
1395
- try {
1396
- const outputMessage = await procedure.handler(
1397
- serviceContextWithTransportInfo,
1398
- initMessage.value,
1399
- incoming
1400
- );
1401
- if (!this.disconnectedSessions.has(message.from)) {
1402
- outgoing.push(outputMessage);
1403
- }
1404
- } catch (err) {
1405
- errorHandler(err, span);
1406
- } finally {
1407
- span.end();
1408
- }
1409
- }
1410
- );
1411
- })();
1412
1255
  } else {
1413
- inputHandler = tracing_default.startActiveSpan(
1414
- `${message.serviceName}.${message.procedureName}`,
1415
- {
1416
- attributes: {
1417
- component: "river",
1418
- "river.method.kind": "upload",
1419
- "river.method.service": message.serviceName,
1420
- "river.method.name": message.procedureName,
1421
- "river.streamId": message.streamId,
1422
- "span.kind": "server"
1423
- },
1424
- kind: SpanKind2.SERVER
1425
- },
1426
- activeContext,
1256
+ inputHandler = createHandlerSpan(
1257
+ procedure.type,
1258
+ message,
1427
1259
  async (span) => {
1428
1260
  try {
1429
1261
  const outputMessage = await procedure.handler(
@@ -1489,8 +1321,8 @@ var RiverServer = class {
1489
1321
  }
1490
1322
  }
1491
1323
  getContext(service, serviceName) {
1492
- const context3 = this.contextMap.get(service);
1493
- if (!context3) {
1324
+ const context = this.contextMap.get(service);
1325
+ if (!context) {
1494
1326
  const err = `no context found for ${serviceName}`;
1495
1327
  log?.error(err, {
1496
1328
  clientId: this.transport.clientId,
@@ -1498,7 +1330,7 @@ var RiverServer = class {
1498
1330
  });
1499
1331
  throw new Error(err);
1500
1332
  }
1501
- return context3;
1333
+ return context;
1502
1334
  }
1503
1335
  cleanupStream = async (id) => {
1504
1336
  const stream2 = this.streamMap.get(id);
@@ -1516,9 +1348,6 @@ function createServer(transport, services, extendedContext) {
1516
1348
  return new RiverServer(transport, services, extendedContext);
1517
1349
  }
1518
1350
 
1519
- // package.json
1520
- var version = "0.21.1";
1521
-
1522
1351
  export {
1523
1352
  serializeSchema,
1524
1353
  ServiceSchema,
@@ -1529,7 +1358,6 @@ export {
1529
1358
  Ok,
1530
1359
  Err,
1531
1360
  createClient,
1532
- createServer,
1533
- version
1361
+ createServer
1534
1362
  };
1535
- //# sourceMappingURL=chunk-NCXUFDVL.js.map
1363
+ //# sourceMappingURL=chunk-GCLEWC26.js.map