@remavideo/sdk 0.9.0 → 0.11.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/dist/index.d.ts +883 -6
- package/dist/index.js +38 -24
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { readFile } from "fs/promises";
|
|
3
3
|
|
|
4
4
|
// src/node.ts
|
|
5
|
+
import { TypedEmitter } from "tiny-typed-emitter";
|
|
5
6
|
var NODE_STATES = /* @__PURE__ */ new Set([
|
|
6
7
|
"READY",
|
|
7
8
|
"ACTIVE",
|
|
@@ -9,24 +10,30 @@ var NODE_STATES = /* @__PURE__ */ new Set([
|
|
|
9
10
|
"ERROR",
|
|
10
11
|
"CLOSED"
|
|
11
12
|
]);
|
|
12
|
-
function dispatchNodeCallbacks(evt, callbacks) {
|
|
13
|
+
function dispatchNodeCallbacks(node, evt, callbacks) {
|
|
13
14
|
if (NODE_STATES.has(evt.kind)) {
|
|
14
|
-
|
|
15
|
+
const state = evt.kind;
|
|
16
|
+
callbacks.onStatusChange?.(state, evt.message);
|
|
17
|
+
node.emit("statusChange", state, evt.message);
|
|
15
18
|
}
|
|
16
19
|
if (evt.kind === "ERROR") {
|
|
17
|
-
|
|
20
|
+
const err = new Error(evt.message ?? "node error");
|
|
21
|
+
callbacks.onError?.(err);
|
|
22
|
+
node.emit("error", err);
|
|
18
23
|
}
|
|
19
24
|
if (evt.kind === "CLOSED") {
|
|
20
25
|
callbacks.onClose?.();
|
|
26
|
+
node.emit("close");
|
|
21
27
|
}
|
|
22
28
|
}
|
|
23
|
-
var BaseNode = class _BaseNode {
|
|
29
|
+
var BaseNode = class _BaseNode extends TypedEmitter {
|
|
24
30
|
nodeId;
|
|
25
31
|
workflowId;
|
|
26
32
|
client;
|
|
27
33
|
_eventCleanup = null;
|
|
28
34
|
_callbacks = {};
|
|
29
35
|
constructor(nodeId, client, workflowId) {
|
|
36
|
+
super();
|
|
30
37
|
this.nodeId = nodeId;
|
|
31
38
|
this.workflowId = workflowId;
|
|
32
39
|
this.client = client;
|
|
@@ -133,6 +140,7 @@ var BaseNode = class _BaseNode {
|
|
|
133
140
|
nodeId: this.nodeId
|
|
134
141
|
});
|
|
135
142
|
this._callbacks.onClose?.();
|
|
143
|
+
this.emit("close");
|
|
136
144
|
}
|
|
137
145
|
};
|
|
138
146
|
|
|
@@ -196,7 +204,7 @@ async function createCaptionSourceNode(workflow, settings = {}, nodeId) {
|
|
|
196
204
|
const node = new CaptionSourceNode(id, workflow, settings);
|
|
197
205
|
node._bindCallbacks(settings);
|
|
198
206
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
199
|
-
dispatchNodeCallbacks(evt, settings);
|
|
207
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
200
208
|
});
|
|
201
209
|
node._setEventCleanup(removeHandler);
|
|
202
210
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -244,7 +252,7 @@ async function createFileInputNode(workflow, settings, nodeId) {
|
|
|
244
252
|
if (evt.kind === "ACTIVE" && evt.message !== void 0)
|
|
245
253
|
settings.onStreamStart?.(Number(evt.message));
|
|
246
254
|
if (evt.kind === "ENDED") settings.onEnded?.();
|
|
247
|
-
dispatchNodeCallbacks(evt, settings);
|
|
255
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
248
256
|
});
|
|
249
257
|
node._setEventCleanup(removeHandler);
|
|
250
258
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -329,7 +337,7 @@ async function createNodeStreamInputNode(workflow, settings, nodeId) {
|
|
|
329
337
|
if (evt.kind === "ACTIVE" && evt.message !== void 0)
|
|
330
338
|
settings.onStreamStart?.(Number(evt.message));
|
|
331
339
|
if (evt.kind === "ENDED") settings.onEnded?.();
|
|
332
|
-
dispatchNodeCallbacks(evt, settings);
|
|
340
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
333
341
|
});
|
|
334
342
|
node._setEventCleanup(removeHandler);
|
|
335
343
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -387,7 +395,7 @@ async function createRtmpAnnouncerNode(workflow, settings, nodeId) {
|
|
|
387
395
|
const info = JSON.parse(evt.message);
|
|
388
396
|
settings.onDisconnect?.(info);
|
|
389
397
|
}
|
|
390
|
-
dispatchNodeCallbacks(evt, settings);
|
|
398
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
391
399
|
});
|
|
392
400
|
node._setEventCleanup(removeHandler);
|
|
393
401
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -426,7 +434,7 @@ async function createRtmpMultiplexerNode(workflow, settings, nodeId) {
|
|
|
426
434
|
const activeStreams = /* @__PURE__ */ new Map();
|
|
427
435
|
node._bindCallbacks(settings);
|
|
428
436
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
429
|
-
dispatchNodeCallbacks(evt, settings);
|
|
437
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
430
438
|
if (evt.kind === "CHILD_CREATED" && evt.message !== void 0) {
|
|
431
439
|
const { childNodeId, sourceName } = JSON.parse(evt.message);
|
|
432
440
|
Promise.resolve(settings.onConnect?.({ app, sourceName })).then(async (result) => {
|
|
@@ -504,7 +512,7 @@ async function createRtmpReaderNode(workflow, settings, nodeId) {
|
|
|
504
512
|
settings.onStreamStart?.(Number(evt.message));
|
|
505
513
|
}
|
|
506
514
|
if (evt.kind === "ENDED") settings.onStreamEnded?.();
|
|
507
|
-
dispatchNodeCallbacks(evt, settings);
|
|
515
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
508
516
|
});
|
|
509
517
|
node._setEventCleanup(removeHandler);
|
|
510
518
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -552,7 +560,7 @@ async function createSrtAnnouncerNode(workflow, settings, nodeId) {
|
|
|
552
560
|
const info = JSON.parse(evt.message);
|
|
553
561
|
settings.onDisconnect?.(info);
|
|
554
562
|
}
|
|
555
|
-
dispatchNodeCallbacks(evt, settings);
|
|
563
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
556
564
|
});
|
|
557
565
|
node._setEventCleanup(removeHandler);
|
|
558
566
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -599,7 +607,7 @@ async function createSrtReaderNode(workflow, settings, nodeId) {
|
|
|
599
607
|
settings.onStreamStart?.(Number(evt.message));
|
|
600
608
|
}
|
|
601
609
|
if (evt.kind === "ENDED") settings.onStreamEnded?.();
|
|
602
|
-
dispatchNodeCallbacks(evt, settings);
|
|
610
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
603
611
|
});
|
|
604
612
|
node._setEventCleanup(removeHandler);
|
|
605
613
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -628,7 +636,7 @@ async function createFileOutputNode(workflow, settings, nodeId) {
|
|
|
628
636
|
const node = new FileOutputNode(id, workflow, settings);
|
|
629
637
|
node._bindCallbacks(settings);
|
|
630
638
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
631
|
-
dispatchNodeCallbacks(evt, settings);
|
|
639
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
632
640
|
});
|
|
633
641
|
node._setEventCleanup(removeHandler);
|
|
634
642
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -674,7 +682,7 @@ async function createHlsOutputNode(workflow, settings, nodeId) {
|
|
|
674
682
|
const node = new HlsOutputNode(id, workflow, settings);
|
|
675
683
|
node._bindCallbacks(settings);
|
|
676
684
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
677
|
-
dispatchNodeCallbacks(evt, settings);
|
|
685
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
678
686
|
});
|
|
679
687
|
node._setEventCleanup(removeHandler);
|
|
680
688
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -709,7 +717,7 @@ async function createRtmpOutputNode(workflow, settings, nodeId) {
|
|
|
709
717
|
const node = new RtmpOutputNode(id, workflow, settings);
|
|
710
718
|
node._bindCallbacks(settings);
|
|
711
719
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
712
|
-
dispatchNodeCallbacks(evt, settings);
|
|
720
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
713
721
|
});
|
|
714
722
|
node._setEventCleanup(removeHandler);
|
|
715
723
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -738,7 +746,7 @@ async function createSrtOutputNode(workflow, settings, nodeId) {
|
|
|
738
746
|
const node = new SrtOutputNode(id, workflow, settings);
|
|
739
747
|
node._bindCallbacks(settings);
|
|
740
748
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
741
|
-
dispatchNodeCallbacks(evt, settings);
|
|
749
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
742
750
|
});
|
|
743
751
|
node._setEventCleanup(removeHandler);
|
|
744
752
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -767,7 +775,7 @@ async function createBufferNode(workflow, settings, nodeId) {
|
|
|
767
775
|
const node = new BufferNode(id, workflow, settings);
|
|
768
776
|
node._bindCallbacks(settings);
|
|
769
777
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
770
|
-
dispatchNodeCallbacks(evt, settings);
|
|
778
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
771
779
|
});
|
|
772
780
|
node._setEventCleanup(removeHandler);
|
|
773
781
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -796,7 +804,7 @@ async function createCambAiTranslateNode(workflow, settings, nodeId) {
|
|
|
796
804
|
const node = new CambAiTranslateNode(id, workflow, settings);
|
|
797
805
|
node._bindCallbacks(settings);
|
|
798
806
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
799
|
-
dispatchNodeCallbacks(evt, settings);
|
|
807
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
800
808
|
});
|
|
801
809
|
node._setEventCleanup(removeHandler);
|
|
802
810
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -832,7 +840,7 @@ async function createCea608EncoderNode(workflow, settings = {}, nodeId) {
|
|
|
832
840
|
const node = new Cea608EncoderNode(id, workflow, settings);
|
|
833
841
|
node._bindCallbacks(settings);
|
|
834
842
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
835
|
-
dispatchNodeCallbacks(evt, settings);
|
|
843
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
836
844
|
});
|
|
837
845
|
node._setEventCleanup(removeHandler);
|
|
838
846
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -882,7 +890,7 @@ async function createFfprobeMonitorNode(workflow, settings = {}, nodeId) {
|
|
|
882
890
|
const node = new FfprobeMonitorNode(id, workflow, settings);
|
|
883
891
|
node._bindCallbacks(settings);
|
|
884
892
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
885
|
-
dispatchNodeCallbacks(evt, settings);
|
|
893
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
886
894
|
});
|
|
887
895
|
node._setEventCleanup(removeHandler);
|
|
888
896
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -914,7 +922,7 @@ async function createGateNode(workflow, settings = {}, nodeId) {
|
|
|
914
922
|
const node = new GateNode(id, workflow, settings);
|
|
915
923
|
node._bindCallbacks(settings);
|
|
916
924
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
917
|
-
dispatchNodeCallbacks(evt, settings);
|
|
925
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
918
926
|
});
|
|
919
927
|
node._setEventCleanup(removeHandler);
|
|
920
928
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -950,7 +958,7 @@ async function createGeminiTranslateNode(workflow, settings, nodeId) {
|
|
|
950
958
|
const node = new GeminiTranslateNode(id, workflow, settings);
|
|
951
959
|
node._bindCallbacks(settings);
|
|
952
960
|
const removeHandler = workflow._onNodeEvent(id, (evt) => {
|
|
953
|
-
dispatchNodeCallbacks(evt, settings);
|
|
961
|
+
dispatchNodeCallbacks(node, evt, settings);
|
|
954
962
|
});
|
|
955
963
|
node._setEventCleanup(removeHandler);
|
|
956
964
|
await workflow.client.trpc.createNode.mutate({
|
|
@@ -1031,7 +1039,8 @@ var RemaClient = class _RemaClient {
|
|
|
1031
1039
|
};
|
|
1032
1040
|
|
|
1033
1041
|
// src/workflow.ts
|
|
1034
|
-
|
|
1042
|
+
import { TypedEmitter as TypedEmitter2 } from "tiny-typed-emitter";
|
|
1043
|
+
var Workflow = class extends TypedEmitter2 {
|
|
1035
1044
|
workflowId;
|
|
1036
1045
|
/** Non-private: accessible to factory functions via WorkflowHandle. */
|
|
1037
1046
|
client;
|
|
@@ -1044,6 +1053,7 @@ var Workflow = class {
|
|
|
1044
1053
|
_closedFired = false;
|
|
1045
1054
|
/** @internal — use `rema.workflow.create()` instead */
|
|
1046
1055
|
constructor(workflowId, client, callbacks = {}) {
|
|
1056
|
+
super();
|
|
1047
1057
|
this.workflowId = workflowId;
|
|
1048
1058
|
this.client = client;
|
|
1049
1059
|
this._callbacks = callbacks;
|
|
@@ -1098,7 +1108,9 @@ var Workflow = class {
|
|
|
1098
1108
|
this._seenInList = true;
|
|
1099
1109
|
if (entry.status === "crashed" && !this._erroredFired) {
|
|
1100
1110
|
this._erroredFired = true;
|
|
1101
|
-
|
|
1111
|
+
const err = new Error("workflow worker crashed");
|
|
1112
|
+
this._callbacks.onError?.(err);
|
|
1113
|
+
this.emit("error", err);
|
|
1102
1114
|
}
|
|
1103
1115
|
return;
|
|
1104
1116
|
}
|
|
@@ -1114,6 +1126,7 @@ var Workflow = class {
|
|
|
1114
1126
|
this._closedFired = true;
|
|
1115
1127
|
this._stateSub?.unsubscribe();
|
|
1116
1128
|
this._callbacks.onClose?.();
|
|
1129
|
+
this.emit("close");
|
|
1117
1130
|
}
|
|
1118
1131
|
// ─── Input nodes ─────────────────────────────────────────────────────────
|
|
1119
1132
|
input = {
|
|
@@ -1199,6 +1212,7 @@ var Workflow = class {
|
|
|
1199
1212
|
if (!this._closedFired) {
|
|
1200
1213
|
this._closedFired = true;
|
|
1201
1214
|
this._callbacks.onClose?.();
|
|
1215
|
+
this.emit("close");
|
|
1202
1216
|
}
|
|
1203
1217
|
}
|
|
1204
1218
|
};
|