@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.
- package/README.md +1 -1
- package/dist/{chunk-5WFL722S.js → chunk-3MFX6NXA.js} +94 -3
- package/dist/chunk-3MFX6NXA.js.map +1 -0
- package/dist/{chunk-NCXUFDVL.js → chunk-GCLEWC26.js} +328 -500
- package/dist/chunk-GCLEWC26.js.map +1 -0
- package/dist/chunk-HUBFYN37.js +60 -0
- package/dist/chunk-HUBFYN37.js.map +1 -0
- package/dist/{chunk-FDLAPYCK.js → chunk-S3YKQT4J.js} +2 -2
- package/dist/{chunk-JMXO5L2X.js → chunk-ZPBWKBM5.js} +344 -384
- package/dist/chunk-ZPBWKBM5.js.map +1 -0
- package/dist/{connection-76c5ed01.d.ts → connection-8b059ac4.d.ts} +6 -4
- package/dist/{connection-975b25c9.d.ts → connection-bbfe1147.d.ts} +1 -1
- package/dist/{index-dfad460e.d.ts → index-2ece5234.d.ts} +16 -7
- package/dist/logging/index.d.cts +2 -1
- package/dist/logging/index.d.ts +2 -1
- package/dist/router/index.cjs +373 -486
- package/dist/router/index.cjs.map +1 -1
- package/dist/router/index.d.cts +5 -4
- package/dist/router/index.d.ts +5 -4
- package/dist/router/index.js +4 -3
- package/dist/{services-7b716dcf.d.ts → services-acbcc441.d.ts} +1 -1
- package/dist/{services-9c496c6e.d.ts → services-cb01a7a8.d.ts} +1 -1
- package/dist/transport/impls/uds/client.cjs +186 -145
- package/dist/transport/impls/uds/client.cjs.map +1 -1
- package/dist/transport/impls/uds/client.d.cts +3 -2
- package/dist/transport/impls/uds/client.d.ts +3 -2
- package/dist/transport/impls/uds/client.js +3 -3
- package/dist/transport/impls/uds/server.cjs +281 -256
- package/dist/transport/impls/uds/server.cjs.map +1 -1
- package/dist/transport/impls/uds/server.d.cts +3 -2
- package/dist/transport/impls/uds/server.d.ts +3 -2
- package/dist/transport/impls/uds/server.js +3 -3
- package/dist/transport/impls/ws/client.cjs +240 -204
- 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 +33 -48
- package/dist/transport/impls/ws/client.js.map +1 -1
- package/dist/transport/impls/ws/server.cjs +303 -270
- package/dist/transport/impls/ws/server.cjs.map +1 -1
- package/dist/transport/impls/ws/server.d.cts +5 -4
- package/dist/transport/impls/ws/server.d.ts +5 -4
- package/dist/transport/impls/ws/server.js +3 -3
- package/dist/transport/impls/ws/server.js.map +1 -1
- package/dist/transport/index.cjs +390 -382
- package/dist/transport/index.cjs.map +1 -1
- package/dist/transport/index.d.cts +5 -5
- package/dist/transport/index.d.ts +5 -5
- package/dist/transport/index.js +2 -2
- package/dist/util/testHelpers.cjs +57 -7
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +14 -5
- package/dist/util/testHelpers.d.ts +14 -5
- package/dist/util/testHelpers.js +10 -4
- package/dist/util/testHelpers.js.map +1 -1
- package/dist/wslike-e0b32dd5.d.ts +40 -0
- package/package.json +4 -5
- package/dist/chunk-3Y7AB5EB.js +0 -42
- package/dist/chunk-3Y7AB5EB.js.map +0 -1
- package/dist/chunk-5WFL722S.js.map +0 -1
- package/dist/chunk-JMXO5L2X.js.map +0 -1
- package/dist/chunk-NCXUFDVL.js.map +0 -1
- /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
|
-
|
|
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
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
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
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
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
|
-
|
|
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
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
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
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
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
|
-
|
|
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
|
|
1080
|
-
if (Symbol.dispose in
|
|
1081
|
-
const 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
|
-
|
|
1182
|
-
|
|
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 = (
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
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
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
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
|
|
1164
|
+
const dispose = await procedure.handler(
|
|
1235
1165
|
serviceContextWithTransportInfo,
|
|
1236
|
-
|
|
1166
|
+
initMessage.value,
|
|
1167
|
+
incoming,
|
|
1168
|
+
outgoing
|
|
1237
1169
|
);
|
|
1238
|
-
|
|
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 =
|
|
1294
|
-
|
|
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 = (
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
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
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
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
|
|
1240
|
+
const outputMessage = await procedure.handler(
|
|
1353
1241
|
serviceContextWithTransportInfo,
|
|
1354
|
-
|
|
1355
|
-
|
|
1242
|
+
initMessage.value,
|
|
1243
|
+
incoming
|
|
1356
1244
|
);
|
|
1357
|
-
if (
|
|
1358
|
-
|
|
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 =
|
|
1414
|
-
|
|
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
|
|
1493
|
-
if (!
|
|
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
|
|
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-
|
|
1363
|
+
//# sourceMappingURL=chunk-GCLEWC26.js.map
|