@replit/river 0.21.0 → 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-NFV77C2M.js → chunk-GCLEWC26.js} +340 -507
- 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-DT5JS6TM.js → chunk-OTQNCLFH.js} +1 -1
- package/dist/chunk-OTQNCLFH.js.map +1 -0
- package/dist/{chunk-MJR36SUY.js → chunk-S3YKQT4J.js} +2 -2
- package/dist/{chunk-QU2EE6YU.js → chunk-ZPBWKBM5.js} +361 -394
- package/dist/chunk-ZPBWKBM5.js.map +1 -0
- package/dist/{connection-8a71dbe2.d.ts → connection-8b059ac4.d.ts} +6 -4
- package/dist/{connection-d49d5d56.d.ts → connection-bbfe1147.d.ts} +1 -1
- package/dist/{index-3ac92295.d.ts → index-2ece5234.d.ts} +18 -7
- package/dist/logging/index.cjs.map +1 -1
- package/dist/logging/index.d.cts +2 -1
- package/dist/logging/index.d.ts +2 -1
- package/dist/logging/index.js +1 -1
- package/dist/router/index.cjs +384 -492
- 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 +5 -4
- package/dist/{services-abc077db.d.ts → services-acbcc441.d.ts} +1 -1
- package/dist/{services-8496d6e8.d.ts → services-cb01a7a8.d.ts} +1 -1
- package/dist/transport/impls/uds/client.cjs +202 -155
- 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 +4 -4
- package/dist/transport/impls/uds/server.cjs +295 -264
- 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 +4 -4
- package/dist/transport/impls/ws/client.cjs +256 -214
- 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 +34 -49
- package/dist/transport/impls/ws/client.js.map +1 -1
- package/dist/transport/impls/ws/server.cjs +317 -278
- 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 +4 -4
- package/dist/transport/impls/ws/server.js.map +1 -1
- package/dist/transport/index.cjs +406 -391
- 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 +3 -3
- package/dist/util/testHelpers.cjs +71 -19
- package/dist/util/testHelpers.cjs.map +1 -1
- package/dist/util/testHelpers.d.cts +20 -8
- package/dist/util/testHelpers.d.ts +20 -8
- package/dist/util/testHelpers.js +13 -12
- package/dist/util/testHelpers.js.map +1 -1
- package/dist/wslike-e0b32dd5.d.ts +40 -0
- package/package.json +4 -5
- package/dist/chunk-2ERP6FUE.js +0 -42
- package/dist/chunk-2ERP6FUE.js.map +0 -1
- package/dist/chunk-5WFL722S.js.map +0 -1
- package/dist/chunk-DT5JS6TM.js.map +0 -1
- package/dist/chunk-NFV77C2M.js.map +0 -1
- package/dist/chunk-QU2EE6YU.js.map +0 -1
- /package/dist/{chunk-MJR36SUY.js.map → chunk-S3YKQT4J.js.map} +0 -0
package/dist/router/index.cjs
CHANGED
|
@@ -322,9 +322,6 @@ var Procedure = {
|
|
|
322
322
|
stream
|
|
323
323
|
};
|
|
324
324
|
|
|
325
|
-
// router/client.ts
|
|
326
|
-
var import_api2 = require("@opentelemetry/api");
|
|
327
|
-
|
|
328
325
|
// node_modules/p-defer/index.js
|
|
329
326
|
function pDefer() {
|
|
330
327
|
const deferred = {};
|
|
@@ -707,8 +704,58 @@ var log = void 0;
|
|
|
707
704
|
|
|
708
705
|
// tracing/index.ts
|
|
709
706
|
var import_api = require("@opentelemetry/api");
|
|
710
|
-
|
|
711
|
-
|
|
707
|
+
|
|
708
|
+
// package.json
|
|
709
|
+
var version = "0.22.0";
|
|
710
|
+
|
|
711
|
+
// tracing/index.ts
|
|
712
|
+
function getPropagationContext(ctx) {
|
|
713
|
+
const tracing = {
|
|
714
|
+
traceparent: "",
|
|
715
|
+
tracestate: ""
|
|
716
|
+
};
|
|
717
|
+
import_api.propagation.inject(ctx, tracing);
|
|
718
|
+
return tracing;
|
|
719
|
+
}
|
|
720
|
+
function createProcTelemetryInfo(kind, serviceName, procedureName, streamId) {
|
|
721
|
+
const ctx = import_api.context.active();
|
|
722
|
+
const span = tracer.startSpan(
|
|
723
|
+
`procedure call ${serviceName}.${procedureName}`,
|
|
724
|
+
{
|
|
725
|
+
attributes: {
|
|
726
|
+
component: "river",
|
|
727
|
+
"river.method.kind": kind,
|
|
728
|
+
"river.method.service": serviceName,
|
|
729
|
+
"river.method.name": procedureName,
|
|
730
|
+
"river.streamId": streamId,
|
|
731
|
+
"span.kind": "client"
|
|
732
|
+
},
|
|
733
|
+
kind: import_api.SpanKind.CLIENT
|
|
734
|
+
},
|
|
735
|
+
ctx
|
|
736
|
+
);
|
|
737
|
+
return { span, ctx };
|
|
738
|
+
}
|
|
739
|
+
function createHandlerSpan(kind, message, fn) {
|
|
740
|
+
const ctx = message.tracing ? import_api.propagation.extract(import_api.context.active(), message.tracing) : import_api.context.active();
|
|
741
|
+
return tracer.startActiveSpan(
|
|
742
|
+
`procedure handler ${message.serviceName}.${message.procedureName}`,
|
|
743
|
+
{
|
|
744
|
+
attributes: {
|
|
745
|
+
component: "river",
|
|
746
|
+
"river.method.kind": kind,
|
|
747
|
+
"river.method.service": message.serviceName,
|
|
748
|
+
"river.method.name": message.procedureName,
|
|
749
|
+
"river.streamId": message.streamId,
|
|
750
|
+
"span.kind": "server"
|
|
751
|
+
},
|
|
752
|
+
kind: import_api.SpanKind.SERVER
|
|
753
|
+
},
|
|
754
|
+
ctx,
|
|
755
|
+
fn
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
var tracer = import_api.trace.getTracer("river", version);
|
|
712
759
|
|
|
713
760
|
// router/client.ts
|
|
714
761
|
var noop = () => {
|
|
@@ -781,318 +828,254 @@ function createSessionDisconnectHandler(from, cb) {
|
|
|
781
828
|
}
|
|
782
829
|
function handleRpc(transport, serverId, input, serviceName, procedureName) {
|
|
783
830
|
const streamId = (0, import_nanoid2.nanoid)();
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
"river.method.kind": "rpc",
|
|
790
|
-
"river.method.service": serviceName,
|
|
791
|
-
"river.method.name": procedureName,
|
|
792
|
-
"river.streamId": streamId,
|
|
793
|
-
"span.kind": "client"
|
|
794
|
-
},
|
|
795
|
-
kind: import_api2.SpanKind.CLIENT
|
|
796
|
-
},
|
|
797
|
-
(span) => {
|
|
798
|
-
const tracing = { traceparent: "", tracestate: "" };
|
|
799
|
-
import_api2.propagation.inject(import_api2.context.active(), tracing);
|
|
800
|
-
transport.send(serverId, {
|
|
801
|
-
streamId,
|
|
802
|
-
serviceName,
|
|
803
|
-
procedureName,
|
|
804
|
-
tracing,
|
|
805
|
-
payload: input,
|
|
806
|
-
controlFlags: 2 /* StreamOpenBit */ | 4 /* StreamClosedBit */
|
|
807
|
-
});
|
|
808
|
-
const responsePromise = new Promise((resolve) => {
|
|
809
|
-
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
810
|
-
span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
|
|
811
|
-
cleanup();
|
|
812
|
-
resolve(
|
|
813
|
-
Err({
|
|
814
|
-
code: UNEXPECTED_DISCONNECT,
|
|
815
|
-
message: `${serverId} unexpectedly disconnected`
|
|
816
|
-
})
|
|
817
|
-
);
|
|
818
|
-
});
|
|
819
|
-
function cleanup() {
|
|
820
|
-
transport.removeEventListener("message", onMessage);
|
|
821
|
-
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
822
|
-
span.end();
|
|
823
|
-
}
|
|
824
|
-
function onMessage(msg) {
|
|
825
|
-
if (msg.streamId !== streamId)
|
|
826
|
-
return;
|
|
827
|
-
if (msg.to !== transport.clientId)
|
|
828
|
-
return;
|
|
829
|
-
if (msg.payload && typeof msg.payload === "object" && "ok" in msg.payload) {
|
|
830
|
-
span.setStatus({
|
|
831
|
-
code: msg.payload.ok ? import_api2.SpanStatusCode.OK : import_api2.SpanStatusCode.ERROR
|
|
832
|
-
});
|
|
833
|
-
}
|
|
834
|
-
cleanup();
|
|
835
|
-
resolve(msg.payload);
|
|
836
|
-
}
|
|
837
|
-
transport.addEventListener("message", onMessage);
|
|
838
|
-
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
839
|
-
});
|
|
840
|
-
return responsePromise;
|
|
841
|
-
}
|
|
831
|
+
const { span, ctx } = createProcTelemetryInfo(
|
|
832
|
+
"rpc",
|
|
833
|
+
serviceName,
|
|
834
|
+
procedureName,
|
|
835
|
+
streamId
|
|
842
836
|
);
|
|
837
|
+
transport.send(serverId, {
|
|
838
|
+
streamId,
|
|
839
|
+
serviceName,
|
|
840
|
+
procedureName,
|
|
841
|
+
payload: input,
|
|
842
|
+
tracing: getPropagationContext(ctx),
|
|
843
|
+
controlFlags: 2 /* StreamOpenBit */ | 4 /* StreamClosedBit */
|
|
844
|
+
});
|
|
845
|
+
const responsePromise = new Promise((resolve) => {
|
|
846
|
+
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
847
|
+
cleanup();
|
|
848
|
+
resolve(
|
|
849
|
+
Err({
|
|
850
|
+
code: UNEXPECTED_DISCONNECT,
|
|
851
|
+
message: `${serverId} unexpectedly disconnected`
|
|
852
|
+
})
|
|
853
|
+
);
|
|
854
|
+
});
|
|
855
|
+
function cleanup() {
|
|
856
|
+
transport.removeEventListener("message", onMessage);
|
|
857
|
+
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
858
|
+
span.end();
|
|
859
|
+
}
|
|
860
|
+
function onMessage(msg) {
|
|
861
|
+
if (msg.streamId !== streamId)
|
|
862
|
+
return;
|
|
863
|
+
if (msg.to !== transport.clientId)
|
|
864
|
+
return;
|
|
865
|
+
cleanup();
|
|
866
|
+
resolve(msg.payload);
|
|
867
|
+
}
|
|
868
|
+
transport.addEventListener("message", onMessage);
|
|
869
|
+
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
870
|
+
});
|
|
871
|
+
return responsePromise;
|
|
843
872
|
}
|
|
844
873
|
function handleStream(transport, serverId, init, serviceName, procedureName) {
|
|
845
874
|
const streamId = (0, import_nanoid2.nanoid)();
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
controlFlags: 2 /* StreamOpenBit */
|
|
874
|
-
});
|
|
875
|
-
firstMessage = false;
|
|
876
|
-
}
|
|
877
|
-
const pipeInputToTransport = async () => {
|
|
878
|
-
for await (const rawIn of inputStream) {
|
|
879
|
-
const m = {
|
|
880
|
-
streamId,
|
|
881
|
-
payload: rawIn,
|
|
882
|
-
controlFlags: 0
|
|
883
|
-
};
|
|
884
|
-
if (firstMessage) {
|
|
885
|
-
m.serviceName = serviceName;
|
|
886
|
-
m.procedureName = procedureName;
|
|
887
|
-
m.tracing = tracing;
|
|
888
|
-
m.controlFlags |= 2 /* StreamOpenBit */;
|
|
889
|
-
firstMessage = false;
|
|
890
|
-
}
|
|
891
|
-
transport.send(serverId, m);
|
|
892
|
-
}
|
|
893
|
-
if (!healthyClose)
|
|
894
|
-
return;
|
|
895
|
-
transport.sendCloseStream(serverId, streamId);
|
|
896
|
-
span.setStatus({ code: import_api2.SpanStatusCode.OK });
|
|
875
|
+
const { span, ctx } = createProcTelemetryInfo(
|
|
876
|
+
"stream",
|
|
877
|
+
serviceName,
|
|
878
|
+
procedureName,
|
|
879
|
+
streamId
|
|
880
|
+
);
|
|
881
|
+
const inputStream = pushable({ objectMode: true });
|
|
882
|
+
const outputStream = pushable({ objectMode: true });
|
|
883
|
+
let firstMessage = true;
|
|
884
|
+
let healthyClose = true;
|
|
885
|
+
if (init) {
|
|
886
|
+
transport.send(serverId, {
|
|
887
|
+
streamId,
|
|
888
|
+
serviceName,
|
|
889
|
+
procedureName,
|
|
890
|
+
payload: init,
|
|
891
|
+
tracing: getPropagationContext(ctx),
|
|
892
|
+
controlFlags: 2 /* StreamOpenBit */
|
|
893
|
+
});
|
|
894
|
+
firstMessage = false;
|
|
895
|
+
}
|
|
896
|
+
const pipeInputToTransport = async () => {
|
|
897
|
+
for await (const rawIn of inputStream) {
|
|
898
|
+
const m = {
|
|
899
|
+
streamId,
|
|
900
|
+
payload: rawIn,
|
|
901
|
+
controlFlags: 0
|
|
897
902
|
};
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
if (isStreamClose(msg.controlFlags)) {
|
|
905
|
-
cleanup();
|
|
906
|
-
} else {
|
|
907
|
-
outputStream.push(msg.payload);
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
function cleanup() {
|
|
911
|
-
inputStream.end();
|
|
912
|
-
outputStream.end();
|
|
913
|
-
transport.removeEventListener("message", onMessage);
|
|
914
|
-
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
915
|
-
span.end();
|
|
903
|
+
if (firstMessage) {
|
|
904
|
+
m.serviceName = serviceName;
|
|
905
|
+
m.procedureName = procedureName;
|
|
906
|
+
m.tracing = getPropagationContext(ctx);
|
|
907
|
+
m.controlFlags |= 2 /* StreamOpenBit */;
|
|
908
|
+
firstMessage = false;
|
|
916
909
|
}
|
|
917
|
-
|
|
918
|
-
outputStream.push(
|
|
919
|
-
Err({
|
|
920
|
-
code: UNEXPECTED_DISCONNECT,
|
|
921
|
-
message: `${serverId} unexpectedly disconnected`
|
|
922
|
-
})
|
|
923
|
-
);
|
|
924
|
-
healthyClose = false;
|
|
925
|
-
span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
|
|
926
|
-
cleanup();
|
|
927
|
-
});
|
|
928
|
-
transport.addEventListener("message", onMessage);
|
|
929
|
-
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
930
|
-
return [inputStream, outputStream, cleanup];
|
|
910
|
+
transport.send(serverId, m);
|
|
931
911
|
}
|
|
932
|
-
|
|
912
|
+
if (!healthyClose)
|
|
913
|
+
return;
|
|
914
|
+
transport.sendCloseStream(serverId, streamId);
|
|
915
|
+
};
|
|
916
|
+
void pipeInputToTransport();
|
|
917
|
+
function onMessage(msg) {
|
|
918
|
+
if (msg.streamId !== streamId)
|
|
919
|
+
return;
|
|
920
|
+
if (msg.to !== transport.clientId)
|
|
921
|
+
return;
|
|
922
|
+
if (isStreamClose(msg.controlFlags)) {
|
|
923
|
+
cleanup();
|
|
924
|
+
} else {
|
|
925
|
+
outputStream.push(msg.payload);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
function cleanup() {
|
|
929
|
+
inputStream.end();
|
|
930
|
+
outputStream.end();
|
|
931
|
+
transport.removeEventListener("message", onMessage);
|
|
932
|
+
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
933
|
+
span.end();
|
|
934
|
+
}
|
|
935
|
+
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
936
|
+
outputStream.push(
|
|
937
|
+
Err({
|
|
938
|
+
code: UNEXPECTED_DISCONNECT,
|
|
939
|
+
message: `${serverId} unexpectedly disconnected`
|
|
940
|
+
})
|
|
941
|
+
);
|
|
942
|
+
healthyClose = false;
|
|
943
|
+
cleanup();
|
|
944
|
+
});
|
|
945
|
+
transport.addEventListener("message", onMessage);
|
|
946
|
+
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
947
|
+
return [inputStream, outputStream, cleanup];
|
|
933
948
|
}
|
|
934
949
|
function handleSubscribe(transport, serverId, input, serviceName, procedureName) {
|
|
935
950
|
const streamId = (0, import_nanoid2.nanoid)();
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
"river.method.kind": "subscribe",
|
|
942
|
-
"river.method.service": serviceName,
|
|
943
|
-
"river.method.name": procedureName,
|
|
944
|
-
"river.streamId": streamId,
|
|
945
|
-
"span.kind": "client"
|
|
946
|
-
},
|
|
947
|
-
kind: import_api2.SpanKind.CLIENT
|
|
948
|
-
},
|
|
949
|
-
(span) => {
|
|
950
|
-
const tracing = { traceparent: "", tracestate: "" };
|
|
951
|
-
import_api2.propagation.inject(import_api2.context.active(), tracing);
|
|
952
|
-
transport.send(serverId, {
|
|
953
|
-
streamId,
|
|
954
|
-
serviceName,
|
|
955
|
-
procedureName,
|
|
956
|
-
tracing,
|
|
957
|
-
payload: input,
|
|
958
|
-
controlFlags: 2 /* StreamOpenBit */
|
|
959
|
-
});
|
|
960
|
-
let healthyClose = true;
|
|
961
|
-
const outputStream = pushable({ objectMode: true });
|
|
962
|
-
function onMessage(msg) {
|
|
963
|
-
if (msg.streamId !== streamId)
|
|
964
|
-
return;
|
|
965
|
-
if (msg.to !== transport.clientId)
|
|
966
|
-
return;
|
|
967
|
-
if (isStreamClose(msg.controlFlags)) {
|
|
968
|
-
cleanup();
|
|
969
|
-
} else {
|
|
970
|
-
outputStream.push(msg.payload);
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
function cleanup() {
|
|
974
|
-
outputStream.end();
|
|
975
|
-
transport.removeEventListener("message", onMessage);
|
|
976
|
-
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
977
|
-
span.end();
|
|
978
|
-
}
|
|
979
|
-
const closeHandler = () => {
|
|
980
|
-
cleanup();
|
|
981
|
-
if (!healthyClose)
|
|
982
|
-
return;
|
|
983
|
-
transport.sendCloseStream(serverId, streamId);
|
|
984
|
-
};
|
|
985
|
-
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
986
|
-
outputStream.push(
|
|
987
|
-
Err({
|
|
988
|
-
code: UNEXPECTED_DISCONNECT,
|
|
989
|
-
message: `${serverId} unexpectedly disconnected`
|
|
990
|
-
})
|
|
991
|
-
);
|
|
992
|
-
healthyClose = false;
|
|
993
|
-
span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
|
|
994
|
-
cleanup();
|
|
995
|
-
});
|
|
996
|
-
transport.addEventListener("message", onMessage);
|
|
997
|
-
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
998
|
-
return [outputStream, closeHandler];
|
|
999
|
-
}
|
|
951
|
+
const { span, ctx } = createProcTelemetryInfo(
|
|
952
|
+
"subscription",
|
|
953
|
+
serviceName,
|
|
954
|
+
procedureName,
|
|
955
|
+
streamId
|
|
1000
956
|
);
|
|
957
|
+
transport.send(serverId, {
|
|
958
|
+
streamId,
|
|
959
|
+
serviceName,
|
|
960
|
+
procedureName,
|
|
961
|
+
payload: input,
|
|
962
|
+
tracing: getPropagationContext(ctx),
|
|
963
|
+
controlFlags: 2 /* StreamOpenBit */
|
|
964
|
+
});
|
|
965
|
+
let healthyClose = true;
|
|
966
|
+
const outputStream = pushable({ objectMode: true });
|
|
967
|
+
function onMessage(msg) {
|
|
968
|
+
if (msg.streamId !== streamId)
|
|
969
|
+
return;
|
|
970
|
+
if (msg.to !== transport.clientId)
|
|
971
|
+
return;
|
|
972
|
+
if (isStreamClose(msg.controlFlags)) {
|
|
973
|
+
cleanup();
|
|
974
|
+
} else {
|
|
975
|
+
outputStream.push(msg.payload);
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
function cleanup() {
|
|
979
|
+
outputStream.end();
|
|
980
|
+
transport.removeEventListener("message", onMessage);
|
|
981
|
+
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
982
|
+
span.end();
|
|
983
|
+
}
|
|
984
|
+
const closeHandler = () => {
|
|
985
|
+
cleanup();
|
|
986
|
+
if (!healthyClose)
|
|
987
|
+
return;
|
|
988
|
+
transport.sendCloseStream(serverId, streamId);
|
|
989
|
+
};
|
|
990
|
+
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
991
|
+
outputStream.push(
|
|
992
|
+
Err({
|
|
993
|
+
code: UNEXPECTED_DISCONNECT,
|
|
994
|
+
message: `${serverId} unexpectedly disconnected`
|
|
995
|
+
})
|
|
996
|
+
);
|
|
997
|
+
healthyClose = false;
|
|
998
|
+
cleanup();
|
|
999
|
+
});
|
|
1000
|
+
transport.addEventListener("message", onMessage);
|
|
1001
|
+
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
1002
|
+
return [outputStream, closeHandler];
|
|
1001
1003
|
}
|
|
1002
1004
|
function handleUpload(transport, serverId, init, serviceName, procedureName) {
|
|
1003
1005
|
const streamId = (0, import_nanoid2.nanoid)();
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1006
|
+
const { span, ctx } = createProcTelemetryInfo(
|
|
1007
|
+
"upload",
|
|
1008
|
+
serviceName,
|
|
1009
|
+
procedureName,
|
|
1010
|
+
streamId
|
|
1011
|
+
);
|
|
1012
|
+
const inputStream = pushable({ objectMode: true });
|
|
1013
|
+
let firstMessage = true;
|
|
1014
|
+
let healthyClose = true;
|
|
1015
|
+
if (init) {
|
|
1016
|
+
transport.send(serverId, {
|
|
1017
|
+
streamId,
|
|
1018
|
+
serviceName,
|
|
1019
|
+
procedureName,
|
|
1020
|
+
payload: init,
|
|
1021
|
+
tracing: getPropagationContext(ctx),
|
|
1022
|
+
controlFlags: 2 /* StreamOpenBit */
|
|
1023
|
+
});
|
|
1024
|
+
firstMessage = false;
|
|
1025
|
+
}
|
|
1026
|
+
const pipeInputToTransport = async () => {
|
|
1027
|
+
for await (const rawIn of inputStream) {
|
|
1028
|
+
const m = {
|
|
1029
|
+
streamId,
|
|
1030
|
+
payload: rawIn,
|
|
1031
|
+
controlFlags: 0
|
|
1032
|
+
};
|
|
1033
|
+
if (firstMessage) {
|
|
1034
|
+
m.serviceName = serviceName;
|
|
1035
|
+
m.procedureName = procedureName;
|
|
1036
|
+
m.tracing = getPropagationContext(ctx);
|
|
1037
|
+
m.controlFlags |= 2 /* StreamOpenBit */;
|
|
1032
1038
|
firstMessage = false;
|
|
1033
1039
|
}
|
|
1034
|
-
|
|
1035
|
-
for await (const rawIn of inputStream) {
|
|
1036
|
-
const m = {
|
|
1037
|
-
streamId,
|
|
1038
|
-
payload: rawIn,
|
|
1039
|
-
controlFlags: 0
|
|
1040
|
-
};
|
|
1041
|
-
if (firstMessage) {
|
|
1042
|
-
m.serviceName = serviceName;
|
|
1043
|
-
m.procedureName = procedureName;
|
|
1044
|
-
m.tracing = tracing;
|
|
1045
|
-
m.controlFlags |= 2 /* StreamOpenBit */;
|
|
1046
|
-
firstMessage = false;
|
|
1047
|
-
}
|
|
1048
|
-
transport.send(serverId, m);
|
|
1049
|
-
}
|
|
1050
|
-
if (!healthyClose)
|
|
1051
|
-
return;
|
|
1052
|
-
transport.sendCloseStream(serverId, streamId);
|
|
1053
|
-
};
|
|
1054
|
-
void pipeInputToTransport();
|
|
1055
|
-
const responsePromise = new Promise((resolve) => {
|
|
1056
|
-
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
1057
|
-
healthyClose = false;
|
|
1058
|
-
span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
|
|
1059
|
-
cleanup();
|
|
1060
|
-
resolve(
|
|
1061
|
-
Err({
|
|
1062
|
-
code: UNEXPECTED_DISCONNECT,
|
|
1063
|
-
message: `${serverId} unexpectedly disconnected`
|
|
1064
|
-
})
|
|
1065
|
-
);
|
|
1066
|
-
});
|
|
1067
|
-
function cleanup() {
|
|
1068
|
-
inputStream.end();
|
|
1069
|
-
transport.removeEventListener("message", onMessage);
|
|
1070
|
-
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
1071
|
-
span.end();
|
|
1072
|
-
}
|
|
1073
|
-
function onMessage(msg) {
|
|
1074
|
-
if (msg.streamId !== streamId)
|
|
1075
|
-
return;
|
|
1076
|
-
if (msg.to !== transport.clientId)
|
|
1077
|
-
return;
|
|
1078
|
-
if (msg.payload && typeof msg.payload === "object" && "ok" in msg.payload) {
|
|
1079
|
-
span.setStatus({
|
|
1080
|
-
code: msg.payload.ok ? import_api2.SpanStatusCode.OK : import_api2.SpanStatusCode.ERROR
|
|
1081
|
-
});
|
|
1082
|
-
}
|
|
1083
|
-
cleanup();
|
|
1084
|
-
resolve(msg.payload);
|
|
1085
|
-
}
|
|
1086
|
-
transport.addEventListener("message", onMessage);
|
|
1087
|
-
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
1088
|
-
});
|
|
1089
|
-
return [inputStream, responsePromise];
|
|
1040
|
+
transport.send(serverId, m);
|
|
1090
1041
|
}
|
|
1091
|
-
|
|
1042
|
+
if (!healthyClose)
|
|
1043
|
+
return;
|
|
1044
|
+
transport.sendCloseStream(serverId, streamId);
|
|
1045
|
+
};
|
|
1046
|
+
void pipeInputToTransport();
|
|
1047
|
+
const responsePromise = new Promise((resolve) => {
|
|
1048
|
+
const onSessionStatus = createSessionDisconnectHandler(serverId, () => {
|
|
1049
|
+
healthyClose = false;
|
|
1050
|
+
cleanup();
|
|
1051
|
+
resolve(
|
|
1052
|
+
Err({
|
|
1053
|
+
code: UNEXPECTED_DISCONNECT,
|
|
1054
|
+
message: `${serverId} unexpectedly disconnected`
|
|
1055
|
+
})
|
|
1056
|
+
);
|
|
1057
|
+
});
|
|
1058
|
+
function cleanup() {
|
|
1059
|
+
inputStream.end();
|
|
1060
|
+
transport.removeEventListener("message", onMessage);
|
|
1061
|
+
transport.removeEventListener("sessionStatus", onSessionStatus);
|
|
1062
|
+
span.end();
|
|
1063
|
+
}
|
|
1064
|
+
function onMessage(msg) {
|
|
1065
|
+
if (msg.streamId !== streamId)
|
|
1066
|
+
return;
|
|
1067
|
+
if (msg.to !== transport.clientId)
|
|
1068
|
+
return;
|
|
1069
|
+
cleanup();
|
|
1070
|
+
resolve(msg.payload);
|
|
1071
|
+
}
|
|
1072
|
+
transport.addEventListener("message", onMessage);
|
|
1073
|
+
transport.addEventListener("sessionStatus", onSessionStatus);
|
|
1074
|
+
});
|
|
1075
|
+
return [inputStream, responsePromise];
|
|
1092
1076
|
}
|
|
1093
1077
|
|
|
1094
1078
|
// router/server.ts
|
|
1095
|
-
var import_api3 = require("@opentelemetry/api");
|
|
1096
1079
|
var import_value = require("@sinclair/typebox/value");
|
|
1097
1080
|
|
|
1098
1081
|
// util/stringify.ts
|
|
@@ -1104,6 +1087,7 @@ function coerceErrorString(err) {
|
|
|
1104
1087
|
}
|
|
1105
1088
|
|
|
1106
1089
|
// router/server.ts
|
|
1090
|
+
var import_api2 = require("@opentelemetry/api");
|
|
1107
1091
|
var RiverServer = class {
|
|
1108
1092
|
transport;
|
|
1109
1093
|
services;
|
|
@@ -1174,9 +1158,9 @@ var RiverServer = class {
|
|
|
1174
1158
|
this.transport.removeEventListener("message", this.onMessage);
|
|
1175
1159
|
this.transport.removeEventListener("sessionStatus", this.onSessionStatus);
|
|
1176
1160
|
await Promise.all([...this.streamMap.keys()].map(this.cleanupStream));
|
|
1177
|
-
for (const
|
|
1178
|
-
if (Symbol.dispose in
|
|
1179
|
-
const dispose =
|
|
1161
|
+
for (const context2 of this.contextMap.values()) {
|
|
1162
|
+
if (Symbol.dispose in context2.state) {
|
|
1163
|
+
const dispose = context2.state[Symbol.dispose];
|
|
1180
1164
|
if (typeof dispose === "function") {
|
|
1181
1165
|
dispose();
|
|
1182
1166
|
}
|
|
@@ -1187,7 +1171,11 @@ var RiverServer = class {
|
|
|
1187
1171
|
if (!isStreamOpen(message.controlFlags)) {
|
|
1188
1172
|
log?.error(
|
|
1189
1173
|
`can't create a new procedure stream from a message that doesn't have the stream open bit set`,
|
|
1190
|
-
{
|
|
1174
|
+
{
|
|
1175
|
+
clientId: this.transport.clientId,
|
|
1176
|
+
fullTransportMessage: message,
|
|
1177
|
+
tags: ["invariant-violation"]
|
|
1178
|
+
}
|
|
1191
1179
|
);
|
|
1192
1180
|
return;
|
|
1193
1181
|
}
|
|
@@ -1205,10 +1193,6 @@ var RiverServer = class {
|
|
|
1205
1193
|
});
|
|
1206
1194
|
return;
|
|
1207
1195
|
}
|
|
1208
|
-
let activeContext = import_api3.context.active();
|
|
1209
|
-
if (message.tracing) {
|
|
1210
|
-
activeContext = import_api3.propagation.extract(activeContext, message.tracing);
|
|
1211
|
-
}
|
|
1212
1196
|
const service = this.services[message.serviceName];
|
|
1213
1197
|
const serviceContext = this.getContext(service, message.serviceName);
|
|
1214
1198
|
if (!(message.procedureName in service.procedures)) {
|
|
@@ -1272,12 +1256,8 @@ var RiverServer = class {
|
|
|
1272
1256
|
`procedure ${message.serviceName}.${message.procedureName} threw an uncaught error: ${errorMsg}`,
|
|
1273
1257
|
session.loggingMetadata
|
|
1274
1258
|
);
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
} else {
|
|
1278
|
-
span.recordException(errorMsg);
|
|
1279
|
-
}
|
|
1280
|
-
span.setStatus({ code: import_api3.SpanStatusCode.ERROR });
|
|
1259
|
+
span.recordException(err instanceof Error ? err : new Error(errorMsg));
|
|
1260
|
+
span.setStatus({ code: import_api2.SpanStatusCode.ERROR });
|
|
1281
1261
|
outgoing.push(
|
|
1282
1262
|
Err({
|
|
1283
1263
|
code: UNCAUGHT_ERROR,
|
|
@@ -1286,10 +1266,10 @@ var RiverServer = class {
|
|
|
1286
1266
|
);
|
|
1287
1267
|
};
|
|
1288
1268
|
if (session.metadata === void 0) {
|
|
1289
|
-
log?.error(
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
);
|
|
1269
|
+
log?.error(`session doesn't have handshake metadata`, {
|
|
1270
|
+
...session.loggingMetadata,
|
|
1271
|
+
tags: ["invariant-violation"]
|
|
1272
|
+
});
|
|
1293
1273
|
return;
|
|
1294
1274
|
}
|
|
1295
1275
|
let inputHandler;
|
|
@@ -1304,32 +1284,48 @@ var RiverServer = class {
|
|
|
1304
1284
|
};
|
|
1305
1285
|
switch (procedure.type) {
|
|
1306
1286
|
case "rpc":
|
|
1307
|
-
inputHandler = (
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1287
|
+
inputHandler = createHandlerSpan(
|
|
1288
|
+
procedure.type,
|
|
1289
|
+
message,
|
|
1290
|
+
async (span) => {
|
|
1291
|
+
const inputMessage = await incoming.next();
|
|
1292
|
+
if (inputMessage.done) {
|
|
1293
|
+
return;
|
|
1294
|
+
}
|
|
1295
|
+
try {
|
|
1296
|
+
const outputMessage = await procedure.handler(
|
|
1297
|
+
serviceContextWithTransportInfo,
|
|
1298
|
+
inputMessage.value
|
|
1299
|
+
);
|
|
1300
|
+
outgoing.push(outputMessage);
|
|
1301
|
+
} catch (err) {
|
|
1302
|
+
errorHandler(err, span);
|
|
1303
|
+
} finally {
|
|
1304
|
+
span.end();
|
|
1305
|
+
}
|
|
1311
1306
|
}
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
"river.method.name": message.procedureName,
|
|
1320
|
-
"river.streamId": message.streamId,
|
|
1321
|
-
"span.kind": "server"
|
|
1322
|
-
},
|
|
1323
|
-
kind: import_api3.SpanKind.SERVER
|
|
1324
|
-
},
|
|
1325
|
-
activeContext,
|
|
1307
|
+
);
|
|
1308
|
+
break;
|
|
1309
|
+
case "stream":
|
|
1310
|
+
if (procHasInitMessage) {
|
|
1311
|
+
inputHandler = createHandlerSpan(
|
|
1312
|
+
procedure.type,
|
|
1313
|
+
message,
|
|
1326
1314
|
async (span) => {
|
|
1315
|
+
const initMessage = await incoming.next();
|
|
1316
|
+
if (initMessage.done) {
|
|
1317
|
+
return;
|
|
1318
|
+
}
|
|
1327
1319
|
try {
|
|
1328
|
-
const
|
|
1320
|
+
const dispose = await procedure.handler(
|
|
1329
1321
|
serviceContextWithTransportInfo,
|
|
1330
|
-
|
|
1322
|
+
initMessage.value,
|
|
1323
|
+
incoming,
|
|
1324
|
+
outgoing
|
|
1331
1325
|
);
|
|
1332
|
-
|
|
1326
|
+
if (dispose) {
|
|
1327
|
+
disposables.push(dispose);
|
|
1328
|
+
}
|
|
1333
1329
|
} catch (err) {
|
|
1334
1330
|
errorHandler(err, span);
|
|
1335
1331
|
} finally {
|
|
@@ -1337,67 +1333,10 @@ var RiverServer = class {
|
|
|
1337
1333
|
}
|
|
1338
1334
|
}
|
|
1339
1335
|
);
|
|
1340
|
-
})();
|
|
1341
|
-
break;
|
|
1342
|
-
case "stream":
|
|
1343
|
-
if (procHasInitMessage) {
|
|
1344
|
-
inputHandler = (async () => {
|
|
1345
|
-
const initMessage = await incoming.next();
|
|
1346
|
-
if (initMessage.done) {
|
|
1347
|
-
return;
|
|
1348
|
-
}
|
|
1349
|
-
await tracing_default.startActiveSpan(
|
|
1350
|
-
`${message.serviceName}.${message.procedureName}`,
|
|
1351
|
-
{
|
|
1352
|
-
attributes: {
|
|
1353
|
-
component: "river",
|
|
1354
|
-
"river.method.kind": "stream-with-init",
|
|
1355
|
-
"river.method.service": message.serviceName,
|
|
1356
|
-
"river.method.name": message.procedureName,
|
|
1357
|
-
"river.streamId": message.streamId,
|
|
1358
|
-
"span.kind": "server"
|
|
1359
|
-
},
|
|
1360
|
-
kind: import_api3.SpanKind.SERVER
|
|
1361
|
-
},
|
|
1362
|
-
activeContext,
|
|
1363
|
-
async (span) => {
|
|
1364
|
-
try {
|
|
1365
|
-
const dispose = await procedure.handler(
|
|
1366
|
-
serviceContextWithTransportInfo,
|
|
1367
|
-
initMessage.value,
|
|
1368
|
-
incoming,
|
|
1369
|
-
outgoing
|
|
1370
|
-
);
|
|
1371
|
-
if (dispose) {
|
|
1372
|
-
disposables.push(() => {
|
|
1373
|
-
dispose();
|
|
1374
|
-
span.end();
|
|
1375
|
-
});
|
|
1376
|
-
} else {
|
|
1377
|
-
span.end();
|
|
1378
|
-
}
|
|
1379
|
-
} catch (err) {
|
|
1380
|
-
errorHandler(err, span);
|
|
1381
|
-
span.end();
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
);
|
|
1385
|
-
})();
|
|
1386
1336
|
} else {
|
|
1387
|
-
inputHandler =
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
attributes: {
|
|
1391
|
-
component: "river",
|
|
1392
|
-
"river.method.kind": "stream",
|
|
1393
|
-
"river.method.service": message.serviceName,
|
|
1394
|
-
"river.method.name": message.procedureName,
|
|
1395
|
-
"river.streamId": message.streamId,
|
|
1396
|
-
"span.kind": "server"
|
|
1397
|
-
},
|
|
1398
|
-
kind: import_api3.SpanKind.SERVER
|
|
1399
|
-
},
|
|
1400
|
-
activeContext,
|
|
1337
|
+
inputHandler = createHandlerSpan(
|
|
1338
|
+
procedure.type,
|
|
1339
|
+
message,
|
|
1401
1340
|
async (span) => {
|
|
1402
1341
|
try {
|
|
1403
1342
|
const dispose = await procedure.handler(
|
|
@@ -1406,15 +1345,11 @@ var RiverServer = class {
|
|
|
1406
1345
|
outgoing
|
|
1407
1346
|
);
|
|
1408
1347
|
if (dispose) {
|
|
1409
|
-
disposables.push(
|
|
1410
|
-
dispose();
|
|
1411
|
-
span.end();
|
|
1412
|
-
});
|
|
1413
|
-
} else {
|
|
1414
|
-
span.end();
|
|
1348
|
+
disposables.push(dispose);
|
|
1415
1349
|
}
|
|
1416
1350
|
} catch (err) {
|
|
1417
1351
|
errorHandler(err, span);
|
|
1352
|
+
} finally {
|
|
1418
1353
|
span.end();
|
|
1419
1354
|
}
|
|
1420
1355
|
}
|
|
@@ -1422,102 +1357,61 @@ var RiverServer = class {
|
|
|
1422
1357
|
}
|
|
1423
1358
|
break;
|
|
1424
1359
|
case "subscription":
|
|
1425
|
-
inputHandler = (
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1360
|
+
inputHandler = createHandlerSpan(
|
|
1361
|
+
procedure.type,
|
|
1362
|
+
message,
|
|
1363
|
+
async (span) => {
|
|
1364
|
+
const inputMessage = await incoming.next();
|
|
1365
|
+
if (inputMessage.done) {
|
|
1366
|
+
return;
|
|
1367
|
+
}
|
|
1368
|
+
try {
|
|
1369
|
+
const dispose = await procedure.handler(
|
|
1370
|
+
serviceContextWithTransportInfo,
|
|
1371
|
+
inputMessage.value,
|
|
1372
|
+
outgoing
|
|
1373
|
+
);
|
|
1374
|
+
if (dispose) {
|
|
1375
|
+
disposables.push(dispose);
|
|
1376
|
+
}
|
|
1377
|
+
} catch (err) {
|
|
1378
|
+
errorHandler(err, span);
|
|
1379
|
+
} finally {
|
|
1380
|
+
span.end();
|
|
1381
|
+
}
|
|
1429
1382
|
}
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
"river.method.name": message.procedureName,
|
|
1438
|
-
"river.streamId": message.streamId,
|
|
1439
|
-
"span.kind": "server"
|
|
1440
|
-
},
|
|
1441
|
-
kind: import_api3.SpanKind.SERVER
|
|
1442
|
-
},
|
|
1443
|
-
activeContext,
|
|
1383
|
+
);
|
|
1384
|
+
break;
|
|
1385
|
+
case "upload":
|
|
1386
|
+
if (procHasInitMessage) {
|
|
1387
|
+
inputHandler = createHandlerSpan(
|
|
1388
|
+
procedure.type,
|
|
1389
|
+
message,
|
|
1444
1390
|
async (span) => {
|
|
1391
|
+
const initMessage = await incoming.next();
|
|
1392
|
+
if (initMessage.done) {
|
|
1393
|
+
return;
|
|
1394
|
+
}
|
|
1445
1395
|
try {
|
|
1446
|
-
const
|
|
1396
|
+
const outputMessage = await procedure.handler(
|
|
1447
1397
|
serviceContextWithTransportInfo,
|
|
1448
|
-
|
|
1449
|
-
|
|
1398
|
+
initMessage.value,
|
|
1399
|
+
incoming
|
|
1450
1400
|
);
|
|
1451
|
-
if (
|
|
1452
|
-
|
|
1453
|
-
dispose();
|
|
1454
|
-
span.end();
|
|
1455
|
-
});
|
|
1456
|
-
} else {
|
|
1457
|
-
span.end();
|
|
1401
|
+
if (!this.disconnectedSessions.has(message.from)) {
|
|
1402
|
+
outgoing.push(outputMessage);
|
|
1458
1403
|
}
|
|
1459
1404
|
} catch (err) {
|
|
1460
1405
|
errorHandler(err, span);
|
|
1406
|
+
} finally {
|
|
1461
1407
|
span.end();
|
|
1462
1408
|
}
|
|
1463
1409
|
}
|
|
1464
1410
|
);
|
|
1465
|
-
})();
|
|
1466
|
-
break;
|
|
1467
|
-
case "upload":
|
|
1468
|
-
if (procHasInitMessage) {
|
|
1469
|
-
inputHandler = (async () => {
|
|
1470
|
-
const initMessage = await incoming.next();
|
|
1471
|
-
if (initMessage.done) {
|
|
1472
|
-
return;
|
|
1473
|
-
}
|
|
1474
|
-
await tracing_default.startActiveSpan(
|
|
1475
|
-
`${message.serviceName}.${message.procedureName}`,
|
|
1476
|
-
{
|
|
1477
|
-
attributes: {
|
|
1478
|
-
component: "river",
|
|
1479
|
-
"river.method.kind": "upload-with-init",
|
|
1480
|
-
"river.method.service": message.serviceName,
|
|
1481
|
-
"river.method.name": message.procedureName,
|
|
1482
|
-
"river.streamId": message.streamId,
|
|
1483
|
-
"span.kind": "server"
|
|
1484
|
-
},
|
|
1485
|
-
kind: import_api3.SpanKind.SERVER
|
|
1486
|
-
},
|
|
1487
|
-
activeContext,
|
|
1488
|
-
async (span) => {
|
|
1489
|
-
try {
|
|
1490
|
-
const outputMessage = await procedure.handler(
|
|
1491
|
-
serviceContextWithTransportInfo,
|
|
1492
|
-
initMessage.value,
|
|
1493
|
-
incoming
|
|
1494
|
-
);
|
|
1495
|
-
if (!this.disconnectedSessions.has(message.from)) {
|
|
1496
|
-
outgoing.push(outputMessage);
|
|
1497
|
-
}
|
|
1498
|
-
} catch (err) {
|
|
1499
|
-
errorHandler(err, span);
|
|
1500
|
-
} finally {
|
|
1501
|
-
span.end();
|
|
1502
|
-
}
|
|
1503
|
-
}
|
|
1504
|
-
);
|
|
1505
|
-
})();
|
|
1506
1411
|
} else {
|
|
1507
|
-
inputHandler =
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
attributes: {
|
|
1511
|
-
component: "river",
|
|
1512
|
-
"river.method.kind": "upload",
|
|
1513
|
-
"river.method.service": message.serviceName,
|
|
1514
|
-
"river.method.name": message.procedureName,
|
|
1515
|
-
"river.streamId": message.streamId,
|
|
1516
|
-
"span.kind": "server"
|
|
1517
|
-
},
|
|
1518
|
-
kind: import_api3.SpanKind.SERVER
|
|
1519
|
-
},
|
|
1520
|
-
activeContext,
|
|
1412
|
+
inputHandler = createHandlerSpan(
|
|
1413
|
+
procedure.type,
|
|
1414
|
+
message,
|
|
1521
1415
|
async (span) => {
|
|
1522
1416
|
try {
|
|
1523
1417
|
const outputMessage = await procedure.handler(
|
|
@@ -1583,15 +1477,16 @@ var RiverServer = class {
|
|
|
1583
1477
|
}
|
|
1584
1478
|
}
|
|
1585
1479
|
getContext(service, serviceName) {
|
|
1586
|
-
const
|
|
1587
|
-
if (!
|
|
1480
|
+
const context2 = this.contextMap.get(service);
|
|
1481
|
+
if (!context2) {
|
|
1588
1482
|
const err = `no context found for ${serviceName}`;
|
|
1589
1483
|
log?.error(err, {
|
|
1590
|
-
clientId: this.transport.clientId
|
|
1484
|
+
clientId: this.transport.clientId,
|
|
1485
|
+
tags: ["invariant-violation"]
|
|
1591
1486
|
});
|
|
1592
1487
|
throw new Error(err);
|
|
1593
1488
|
}
|
|
1594
|
-
return
|
|
1489
|
+
return context2;
|
|
1595
1490
|
}
|
|
1596
1491
|
cleanupStream = async (id) => {
|
|
1597
1492
|
const stream2 = this.streamMap.get(id);
|
|
@@ -1608,9 +1503,6 @@ var RiverServer = class {
|
|
|
1608
1503
|
function createServer(transport, services, extendedContext) {
|
|
1609
1504
|
return new RiverServer(transport, services, extendedContext);
|
|
1610
1505
|
}
|
|
1611
|
-
|
|
1612
|
-
// package.json
|
|
1613
|
-
var version = "0.21.0";
|
|
1614
1506
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1615
1507
|
0 && (module.exports = {
|
|
1616
1508
|
Err,
|