@norskvideo/norsk-studio-built-ins 1.12.0-2025-02-03-6cdc30e8 → 1.12.0-2025-02-04-9551fc82
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/client/info.js +110 -69
- package/client/style.css +22 -0
- package/lib/output.whep/info.d.ts +2 -2
- package/lib/output.whep/info.js +10 -2
- package/lib/output.whep/info.js.map +1 -1
- package/lib/output.whep/inline-view.d.ts +2 -2
- package/lib/output.whep/inline-view.js.map +1 -1
- package/lib/output.whep/runtime.d.ts +24 -10
- package/lib/output.whep/runtime.js +143 -10
- package/lib/output.whep/runtime.js.map +1 -1
- package/lib/output.whep/summary-view.d.ts +4 -0
- package/lib/output.whep/summary-view.js +24 -0
- package/lib/output.whep/summary-view.js.map +1 -0
- package/lib/test/whep-output.js +184 -3
- package/lib/test/whep-output.js.map +1 -1
- package/package.json +3 -3
package/client/info.js
CHANGED
@@ -823,6 +823,39 @@ var init_info = __esm({
|
|
823
823
|
}
|
824
824
|
});
|
825
825
|
|
826
|
+
// build/output.whep/summary-view.js
|
827
|
+
var summary_view_exports3 = {};
|
828
|
+
__export(summary_view_exports3, {
|
829
|
+
default: () => summary_view_default3
|
830
|
+
});
|
831
|
+
function SummaryView5({ state, sendCommand }) {
|
832
|
+
const handleEnableOutput = () => {
|
833
|
+
void enableOutput();
|
834
|
+
};
|
835
|
+
const enableOutput = async () => {
|
836
|
+
sendCommand({
|
837
|
+
type: "enable-output"
|
838
|
+
});
|
839
|
+
};
|
840
|
+
const handleDisableOutput = () => {
|
841
|
+
void disableOutput();
|
842
|
+
};
|
843
|
+
const disableOutput = async () => {
|
844
|
+
sendCommand({
|
845
|
+
type: "disable-output"
|
846
|
+
});
|
847
|
+
};
|
848
|
+
return (0, import_jsx_runtime11.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, import_jsx_runtime11.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-blue-500" : "bg-red-500"}` }), (0, import_jsx_runtime11.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, import_jsx_runtime11.jsx)("div", { children: state.enabled ? (0, import_jsx_runtime11.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" }) : (0, import_jsx_runtime11.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-blue-700 text-white rounded", children: "Enable Output" }) })] }) });
|
849
|
+
}
|
850
|
+
var import_jsx_runtime11, summary_view_default3;
|
851
|
+
var init_summary_view3 = __esm({
|
852
|
+
"build/output.whep/summary-view.js"() {
|
853
|
+
"use strict";
|
854
|
+
import_jsx_runtime11 = __toESM(require_jsx_runtime());
|
855
|
+
summary_view_default3 = SummaryView5;
|
856
|
+
}
|
857
|
+
});
|
858
|
+
|
826
859
|
// build/output.whep/inline-view.js
|
827
860
|
var inline_view_exports6 = {};
|
828
861
|
__export(inline_view_exports6, {
|
@@ -870,19 +903,19 @@ function InlineView8({ state, config, raise }) {
|
|
870
903
|
}, [config.showPreview]);
|
871
904
|
raise && (0, import_react11.useEffect)(raise, []);
|
872
905
|
if (!url)
|
873
|
-
return (0,
|
906
|
+
return (0, import_jsx_runtime12.jsx)(import_jsx_runtime12.Fragment, { children: "..." });
|
874
907
|
const videoStyles = `
|
875
908
|
#whep-${id} video::-webkit-media-controls-play-button {
|
876
909
|
display: none;
|
877
910
|
}
|
878
911
|
`;
|
879
|
-
return (0,
|
912
|
+
return (0, import_jsx_runtime12.jsxs)("div", { className: "whep-container", children: [(0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [(0, import_jsx_runtime12.jsx)("input", { type: "checkbox", id: `video-toggle-${id}`, checked: showPreview, onChange: (e) => setShowPreview(e.target.checked), className: "h-4 w-4" }), (0, import_jsx_runtime12.jsx)("label", { htmlFor: `video-toggle-${id}`, className: "text-sm", children: "Show Preview" })] }), showPreview ? (0, import_jsx_runtime12.jsx)("div", { className: "whep-video", id: `whep-${id}`, children: (0, import_jsx_runtime12.jsx)("style", { children: videoStyles }) }) : (0, import_jsx_runtime12.jsx)("div", { className: "whep-video bg-black flex items-center justify-center text-white h-full", children: "Preview turned off" })] });
|
880
913
|
}
|
881
|
-
var
|
914
|
+
var import_jsx_runtime12, import_react11, import_webrtc_client2, inline_view_default6;
|
882
915
|
var init_inline_view6 = __esm({
|
883
916
|
"build/output.whep/inline-view.js"() {
|
884
917
|
"use strict";
|
885
|
-
|
918
|
+
import_jsx_runtime12 = __toESM(require_jsx_runtime());
|
886
919
|
import_react11 = __toESM(require_react());
|
887
920
|
import_webrtc_client2 = __toESM(require_webrtc_client());
|
888
921
|
inline_view_default6 = InlineView8;
|
@@ -890,18 +923,18 @@ var init_inline_view6 = __esm({
|
|
890
923
|
});
|
891
924
|
|
892
925
|
// build/processor.browserOverlay/summary-view.js
|
893
|
-
var
|
894
|
-
__export(
|
895
|
-
default: () =>
|
926
|
+
var summary_view_exports4 = {};
|
927
|
+
__export(summary_view_exports4, {
|
928
|
+
default: () => summary_view_default4
|
896
929
|
});
|
897
|
-
function
|
930
|
+
function SummaryView7({ state, sendCommand }) {
|
898
931
|
const [url, setUrl] = (0, import_react13.useState)(state.currentUrl);
|
899
932
|
const [enabled, setEnabled] = (0, import_react13.useState)(state.enabled);
|
900
933
|
const stateChanged = (0, import_react13.useMemo)(() => {
|
901
934
|
return url !== state.currentUrl || enabled !== state.enabled;
|
902
935
|
}, [url, enabled]);
|
903
936
|
const buttonClass = "mt-2 mb-5 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800";
|
904
|
-
return (0,
|
937
|
+
return (0, import_jsx_runtime13.jsxs)("div", { className: "space-y-3 mb-5", children: [(0, import_jsx_runtime13.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime13.jsxs)("div", { className: "mb-5", children: [(0, import_jsx_runtime13.jsx)("label", { htmlFor: "url", className: "mb-2 mr-2 text-sm font-medium text-gray-900 dark:text-white", children: "URL" }), (0, import_jsx_runtime13.jsx)("input", { type: "email", id: "url", className: "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500", value: url, onChange: (e) => setUrl(e.target.value), required: true })] }), (0, import_jsx_runtime13.jsx)("div", { className: "mb-5", children: (0, import_jsx_runtime13.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime13.jsx)("span", { className: "me-3 text-sm font-medium text-gray-900 dark:text-gray-300", children: "Enabled" }), (0, import_jsx_runtime13.jsx)("input", { type: "checkbox", checked: enabled, onChange: (e) => setEnabled(e.target.checked), className: "sr-only peer" }), (0, import_jsx_runtime13.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) }), (0, import_jsx_runtime13.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, disabled: !stateChanged, onClick: () => {
|
905
938
|
if (url !== state.currentUrl) {
|
906
939
|
sendCommand({ type: "change-url", url });
|
907
940
|
}
|
@@ -914,13 +947,13 @@ function SummaryView5({ state, sendCommand }) {
|
|
914
947
|
}
|
915
948
|
}, children: "Commit" })] });
|
916
949
|
}
|
917
|
-
var
|
918
|
-
var
|
950
|
+
var import_jsx_runtime13, import_react13, summary_view_default4;
|
951
|
+
var init_summary_view4 = __esm({
|
919
952
|
"build/processor.browserOverlay/summary-view.js"() {
|
920
953
|
"use strict";
|
921
|
-
|
954
|
+
import_jsx_runtime13 = __toESM(require_jsx_runtime());
|
922
955
|
import_react13 = __toESM(require_react());
|
923
|
-
|
956
|
+
summary_view_default4 = SummaryView7;
|
924
957
|
}
|
925
958
|
});
|
926
959
|
|
@@ -930,13 +963,13 @@ __export(inline_view_exports7, {
|
|
930
963
|
default: () => inline_view_default7
|
931
964
|
});
|
932
965
|
function InlineView9({ state, config }) {
|
933
|
-
return (0,
|
966
|
+
return (0, import_jsx_runtime14.jsx)("div", { id: `browser-overlay-${config.id}`, children: (0, import_jsx_runtime14.jsxs)("div", { className: "w-64 grid grid-cols-[min-content,1fr] gap-2", children: [(0, import_jsx_runtime14.jsx)("div", { children: "URL:" }), (0, import_jsx_runtime14.jsx)("div", { className: "truncate", children: state.currentUrl }), (0, import_jsx_runtime14.jsx)("div", { children: "Enabled:" }), (0, import_jsx_runtime14.jsx)("div", { children: (0, import_jsx_runtime14.jsxs)("label", { className: "inline-flex items-center cursor-pointer", children: [(0, import_jsx_runtime14.jsx)("input", { type: "checkbox", checked: state.enabled, disabled: true, className: "sr-only peer" }), (0, import_jsx_runtime14.jsx)("div", { className: "relative w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full rtl:peer-checked:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:start-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600" })] }) })] }) });
|
934
967
|
}
|
935
|
-
var
|
968
|
+
var import_jsx_runtime14, inline_view_default7;
|
936
969
|
var init_inline_view7 = __esm({
|
937
970
|
"build/processor.browserOverlay/inline-view.js"() {
|
938
971
|
"use strict";
|
939
|
-
|
972
|
+
import_jsx_runtime14 = __toESM(require_jsx_runtime());
|
940
973
|
inline_view_default7 = InlineView9;
|
941
974
|
}
|
942
975
|
});
|
@@ -952,10 +985,10 @@ function OrderInput(props) {
|
|
952
985
|
}, [props.defaultValue]);
|
953
986
|
const [value, setValue] = (0, import_react15.useState)(props.defaultValue ?? []);
|
954
987
|
if (value.length == 0) {
|
955
|
-
return (0,
|
988
|
+
return (0, import_jsx_runtime15.jsx)("p", { className: "node-editor-helper-text", children: "Sources will appear here when subscriptions have been added to this node" });
|
956
989
|
} else {
|
957
|
-
return (0,
|
958
|
-
return (0,
|
990
|
+
return (0, import_jsx_runtime15.jsx)("div", { id: props.id, children: (0, import_jsx_runtime15.jsx)("ul", { children: value.map((v, ix) => {
|
991
|
+
return (0, import_jsx_runtime15.jsxs)("li", { className: "flex", children: [(0, import_jsx_runtime15.jsx)("span", { className: "node-editor-label flex-grow", children: v }), ix == 0 ? (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {}) : (0, import_jsx_runtime15.jsx)("svg", { onClick: moveUp(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime15.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8.25 6.75L12 3m0 0l3.75 3.75M12 3v18" }) }), ix == value.length - 1 ? (0, import_jsx_runtime15.jsx)(import_jsx_runtime15.Fragment, {}) : (0, import_jsx_runtime15.jsx)("svg", { onClick: moveDown(ix), xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, className: "w-4 h-6 shrink cursor-pointer stroke-gray-700 dark:stroke-gray-50", children: (0, import_jsx_runtime15.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15.75 17.25L12 21m0 0l-3.75-3.75M12 21V3" }) })] }, v);
|
959
992
|
}) }) });
|
960
993
|
}
|
961
994
|
function moveUp(ix) {
|
@@ -977,11 +1010,11 @@ function OrderInput(props) {
|
|
977
1010
|
};
|
978
1011
|
}
|
979
1012
|
}
|
980
|
-
var
|
1013
|
+
var import_jsx_runtime15, import_react15, source_selection_default;
|
981
1014
|
var init_source_selection = __esm({
|
982
1015
|
"build/processor.cascadingSwitch/source-selection.js"() {
|
983
1016
|
"use strict";
|
984
|
-
|
1017
|
+
import_jsx_runtime15 = __toESM(require_jsx_runtime());
|
985
1018
|
import_react15 = __toESM(require_react());
|
986
1019
|
source_selection_default = OrderInput;
|
987
1020
|
}
|
@@ -993,13 +1026,13 @@ __export(inline_view_exports8, {
|
|
993
1026
|
default: () => inline_view_default8
|
994
1027
|
});
|
995
1028
|
function InlineView11({ state, config }) {
|
996
|
-
return (0,
|
1029
|
+
return (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [(0, import_jsx_runtime16.jsx)("h5", { children: "Sources" }), (0, import_jsx_runtime16.jsxs)("ul", { children: [config.sources.map((s, i) => state.activeSource == s ? (0, import_jsx_runtime16.jsxs)("li", { className: activeClasses, children: [s, " <--"] }, i) : state.availableSources.includes(s) ? (0, import_jsx_runtime16.jsxs)("li", { className: availableClasses, children: [s, " (available)"] }, i) : (0, import_jsx_runtime16.jsxs)("li", { className: inactiveClasses, children: [s, " (inactive)"] }, i)), (0, import_jsx_runtime16.jsx)("li", { className: state.activeSource == "fallback" ? activeClasses : availableClasses, children: "fallback" }, "fallback")] })] });
|
997
1030
|
}
|
998
|
-
var
|
1031
|
+
var import_jsx_runtime16, activeClasses, availableClasses, inactiveClasses, inline_view_default8;
|
999
1032
|
var init_inline_view8 = __esm({
|
1000
1033
|
"build/processor.cascadingSwitch/inline-view.js"() {
|
1001
1034
|
"use strict";
|
1002
|
-
|
1035
|
+
import_jsx_runtime16 = __toESM(require_jsx_runtime());
|
1003
1036
|
activeClasses = "active text-green-500 dark:text-green-300";
|
1004
1037
|
availableClasses = "available text-green-500 dark:text-green-300";
|
1005
1038
|
inactiveClasses = "inactive text-orange-500 dark:text-orange-300";
|
@@ -1013,13 +1046,13 @@ __export(rung_view_exports, {
|
|
1013
1046
|
default: () => rung_view_default
|
1014
1047
|
});
|
1015
1048
|
function rung_view_default(rung) {
|
1016
|
-
return (0,
|
1049
|
+
return (0, import_jsx_runtime17.jsx)("div", { className: "text-gray-900 dark:text-white", children: rung.name });
|
1017
1050
|
}
|
1018
|
-
var
|
1051
|
+
var import_jsx_runtime17;
|
1019
1052
|
var init_rung_view = __esm({
|
1020
1053
|
"build/processor.fixedLadder/rung-view.js"() {
|
1021
1054
|
"use strict";
|
1022
|
-
|
1055
|
+
import_jsx_runtime17 = __toESM(require_jsx_runtime());
|
1023
1056
|
}
|
1024
1057
|
});
|
1025
1058
|
|
@@ -1042,7 +1075,7 @@ function CodecEditor(props) {
|
|
1042
1075
|
target.style.height = target.scrollHeight + "px";
|
1043
1076
|
}
|
1044
1077
|
}, []);
|
1045
|
-
return (0,
|
1078
|
+
return (0, import_jsx_runtime18.jsx)("textarea", { ref: textAreaRef, className: "w-full min-h-fit bg-white text-gray-900 dark:text-white dark:bg-black", onChange: (e) => {
|
1046
1079
|
const target = e.currentTarget;
|
1047
1080
|
try {
|
1048
1081
|
const codec = JSON.parse(target.value);
|
@@ -1052,11 +1085,11 @@ function CodecEditor(props) {
|
|
1052
1085
|
}
|
1053
1086
|
}, defaultValue: JSON.stringify(value, void 0, 2) });
|
1054
1087
|
}
|
1055
|
-
var
|
1088
|
+
var import_jsx_runtime18, import_react16;
|
1056
1089
|
var init_codec_editor = __esm({
|
1057
1090
|
"build/processor.fixedLadder/codec-editor.js"() {
|
1058
1091
|
"use strict";
|
1059
|
-
|
1092
|
+
import_jsx_runtime18 = __toESM(require_jsx_runtime());
|
1060
1093
|
import_react16 = __toESM(require_react());
|
1061
1094
|
}
|
1062
1095
|
});
|
@@ -1067,13 +1100,13 @@ __export(codec_view_exports, {
|
|
1067
1100
|
default: () => CodecEditor2
|
1068
1101
|
});
|
1069
1102
|
function CodecEditor2(props) {
|
1070
|
-
return (0,
|
1103
|
+
return (0, import_jsx_runtime19.jsxs)("div", { className: "text-gray-900 dark:text-white", children: [props.width, "x", props.height] });
|
1071
1104
|
}
|
1072
|
-
var
|
1105
|
+
var import_jsx_runtime19;
|
1073
1106
|
var init_codec_view = __esm({
|
1074
1107
|
"build/processor.fixedLadder/codec-view.js"() {
|
1075
1108
|
"use strict";
|
1076
|
-
|
1109
|
+
import_jsx_runtime19 = __toESM(require_jsx_runtime());
|
1077
1110
|
}
|
1078
1111
|
});
|
1079
1112
|
|
@@ -1102,34 +1135,34 @@ function GraphicSelection(props) {
|
|
1102
1135
|
}, []);
|
1103
1136
|
const [graphcs, setGraphics] = (0, import_react18.useState)([]);
|
1104
1137
|
if (loading) {
|
1105
|
-
return (0,
|
1138
|
+
return (0, import_jsx_runtime20.jsx)("div", { children: "Loading.." });
|
1106
1139
|
}
|
1107
1140
|
if (graphcs.length == 0) {
|
1108
|
-
return (0,
|
1141
|
+
return (0, import_jsx_runtime20.jsx)("div", { children: "No graphics loaded" });
|
1109
1142
|
}
|
1110
|
-
return (0,
|
1111
|
-
return (0,
|
1143
|
+
return (0, import_jsx_runtime20.jsx)("div", { children: (0, import_jsx_runtime20.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime20.jsx)("option", { value: "", children: "---" }, "empty"), graphcs.map((o, i) => {
|
1144
|
+
return (0, import_jsx_runtime20.jsx)("option", { value: o, children: o }, i);
|
1112
1145
|
})] }) });
|
1113
1146
|
function myOnChange(e) {
|
1114
1147
|
props.onChanged(e.target.value);
|
1115
1148
|
}
|
1116
1149
|
}
|
1117
|
-
var
|
1150
|
+
var import_jsx_runtime20, import_react18, image_selection_default;
|
1118
1151
|
var init_image_selection = __esm({
|
1119
1152
|
"build/processor.onscreenGraphic/image-selection.js"() {
|
1120
1153
|
"use strict";
|
1121
|
-
|
1154
|
+
import_jsx_runtime20 = __toESM(require_jsx_runtime());
|
1122
1155
|
import_react18 = __toESM(require_react());
|
1123
1156
|
image_selection_default = GraphicSelection;
|
1124
1157
|
}
|
1125
1158
|
});
|
1126
1159
|
|
1127
1160
|
// build/processor.onscreenGraphic/summary-view.js
|
1128
|
-
var
|
1129
|
-
__export(
|
1130
|
-
default: () =>
|
1161
|
+
var summary_view_exports5 = {};
|
1162
|
+
__export(summary_view_exports5, {
|
1163
|
+
default: () => summary_view_default5
|
1131
1164
|
});
|
1132
|
-
function
|
1165
|
+
function SummaryView9({ state, sendCommand, urls }) {
|
1133
1166
|
const [graphic, setGraphic] = (0, import_react19.useState)(state.activeGraphic?.file);
|
1134
1167
|
const [position, setPosition] = (0, import_react19.useState)(state.activeGraphic?.position ?? { type: "named", position: "topleft" });
|
1135
1168
|
const [graphics, setGraphics] = (0, import_react19.useState)([]);
|
@@ -1264,7 +1297,7 @@ function SummaryView7({ state, sendCommand, urls }) {
|
|
1264
1297
|
const buttonClass = "mt-2 mb-5 text-white w-full justify-center bg-primary-700 hover:bg-primary-800 focus:ring-4 focus:outline-none focus:ring-primary-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-primary-600 dark:hover:bg-primary-700 dark:focus:ring-primary-800";
|
1265
1298
|
const deleteButtonClass = "mt-2 text-white w-full justify-center bg-red-600 hover:bg-red-700 focus:ring-4 focus:outline-none focus:ring-red-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center dark:bg-red-700 dark:hover:bg-red-800 dark:focus:ring-red-900";
|
1266
1299
|
const fileInputClass = "block w-full text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400";
|
1267
|
-
return (0,
|
1300
|
+
return (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-3", children: [(0, import_jsx_runtime21.jsx)("h2", { className: "text-xl font-bold text-gray-900 dark:text-white", children: "Controls" }), (0, import_jsx_runtime21.jsxs)("div", { children: [(0, import_jsx_runtime21.jsx)("label", { htmlFor: "select-graphic", className: "block text-gray-900 dark:text-white mb-1", children: "Source" }), (0, import_jsx_runtime21.jsxs)("select", { id: "select-graphic", className: "w-full node-editor-select-input", value: graphic || "", onChange: (e) => setGraphic(e.target.value || void 0), children: [(0, import_jsx_runtime21.jsx)("option", { value: "", children: "---" }), graphics.map((s) => (0, import_jsx_runtime21.jsx)("option", { value: s, children: s }, s))] })] }), graphic && (0, import_jsx_runtime21.jsxs)("div", { children: [(0, import_jsx_runtime21.jsx)("label", { htmlFor: "select-position", className: "block text-gray-900 dark:text-white mb-1", children: "Graphic position" }), (0, import_jsx_runtime21.jsx)(PositionSelector, { initialPosition: position, onChange: setPosition, graphicChanged, ...state })] }), (0, import_jsx_runtime21.jsx)("button", { type: "button", className: `${buttonClass} ${!stateChanged ? "opacity-50 cursor-not-allowed" : ""}`, onClick: () => sendCommand({ type: "change-graphic", file: graphic, position }), disabled: !stateChanged, children: "Commit" }), !showFileInput && !uploadStatus.success && (0, import_jsx_runtime21.jsx)("button", { type: "button", className: buttonClass, onClick: () => setShowFileInput(true), style: { marginBottom: "1rem" }, children: "Upload Graphic" }), showFileInput && (0, import_jsx_runtime21.jsxs)("form", { style: { display: "block", marginBottom: "1rem" }, children: [(0, import_jsx_runtime21.jsx)("input", { type: "file", id: "file", name: "filename", onChange: onFileChange, className: fileInputClass }), showUploadButton && (0, import_jsx_runtime21.jsx)("button", { type: "button", className: buttonClass, onClick: uploadFile, children: "Upload" })] }), (0, import_jsx_runtime21.jsx)("button", { type: "button", className: deleteButtonClass, onClick: () => setShowDeleteDropdown(!showDeleteDropdown), style: { marginBottom: "1rem" }, children: showDeleteDropdown ? "Hide Delete Options" : "Delete Graphics" }), showDeleteDropdown && (0, import_jsx_runtime21.jsxs)("div", { className: "mt-2 p-2 bg-gray-100 dark:bg-gray-800 rounded-lg", children: [(0, import_jsx_runtime21.jsx)("h3", { className: "text-lg font-semibold mb-2 text-gray-900 dark:text-white", children: "Select Graphic to Delete" }), (0, import_jsx_runtime21.jsxs)("select", { className: "w-full mb-2 node-editor-select-input", value: graphicToDelete, onChange: (e) => setGraphicToDelete(e.target.value), children: [(0, import_jsx_runtime21.jsx)("option", { value: "", children: " Select a graphic" }), graphics.map((graphicName) => (0, import_jsx_runtime21.jsx)("option", { value: graphicName, children: graphicName }, graphicName))] }), (0, import_jsx_runtime21.jsx)("button", { onClick: deleteBug, disabled: !graphicToDelete, className: `${deleteButtonClass} ${!graphicToDelete ? "opacity-50 cursor-not-allowed" : ""}`, children: "Delete Selected Graphic" })] }), uploadStatus.message && (0, import_jsx_runtime21.jsx)("div", { className: `mt-2 text-center ${uploadStatus.success ? "text-green-600" : "text-red-600"}`, children: uploadStatus.message })] });
|
1268
1301
|
}
|
1269
1302
|
function convertPosition(givenPosition, currentVideo, currentGraphic) {
|
1270
1303
|
if (!givenPosition)
|
@@ -1310,11 +1343,11 @@ function clamp(min, num, max) {
|
|
1310
1343
|
function assertUnreachable12(_) {
|
1311
1344
|
throw new Error("Didn't expect to get here");
|
1312
1345
|
}
|
1313
|
-
var
|
1314
|
-
var
|
1346
|
+
var import_jsx_runtime21, import_react19, PositionSelector, summary_view_default5;
|
1347
|
+
var init_summary_view5 = __esm({
|
1315
1348
|
"build/processor.onscreenGraphic/summary-view.js"() {
|
1316
1349
|
"use strict";
|
1317
|
-
|
1350
|
+
import_jsx_runtime21 = __toESM(require_jsx_runtime());
|
1318
1351
|
import_react19 = __toESM(require_react());
|
1319
1352
|
PositionSelector = ({ initialPosition: givenPosition = { type: "named", position: "topleft" }, onChange, currentVideo, currentGraphic, graphicChanged }) => {
|
1320
1353
|
const convertPos = (pos) => convertPosition(pos, currentVideo, currentGraphic);
|
@@ -1382,7 +1415,7 @@ var init_summary_view4 = __esm({
|
|
1382
1415
|
window.removeEventListener("mouseup", handleMouseUp);
|
1383
1416
|
};
|
1384
1417
|
}, [isDragging]);
|
1385
|
-
return (0,
|
1418
|
+
return (0, import_jsx_runtime21.jsxs)("div", { className: "relative w-full max-w-lg mx-auto mt-4 mb-8", children: [(0, import_jsx_runtime21.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime21.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Type:" }), (0, import_jsx_runtime21.jsxs)("select", { value: position.type, onChange: (e) => {
|
1386
1419
|
const newType = e.target.value;
|
1387
1420
|
if (newType === "named") {
|
1388
1421
|
setPosition(convertPos({ type: "named", position: "topleft" }));
|
@@ -1390,12 +1423,12 @@ var init_summary_view4 = __esm({
|
|
1390
1423
|
setPositionUnit("%");
|
1391
1424
|
setPosition({ ...convertPos(position), type: "percentage" });
|
1392
1425
|
}
|
1393
|
-
}, className: "node-editor-select-input", children: [(0,
|
1426
|
+
}, className: "node-editor-select-input", children: [(0, import_jsx_runtime21.jsx)("option", { value: "coordinate", children: "Custom Position" }), (0, import_jsx_runtime21.jsx)("option", { value: "named", children: "Preset Position" })] })] }), position.type === "named" ? (0, import_jsx_runtime21.jsx)("div", { className: "mb-4", children: (0, import_jsx_runtime21.jsxs)("select", { value: position.position, onChange: (e) => {
|
1394
1427
|
setPosition(convertPos({
|
1395
1428
|
type: "named",
|
1396
1429
|
position: e.target.value
|
1397
1430
|
}));
|
1398
|
-
}, className: "w-full node-editor-select-input", children: [(0,
|
1431
|
+
}, className: "w-full node-editor-select-input", children: [(0, import_jsx_runtime21.jsx)("option", { value: "topleft", children: "Top Left" }), (0, import_jsx_runtime21.jsx)("option", { value: "topright", children: "Top Right" }), (0, import_jsx_runtime21.jsx)("option", { value: "bottomleft", children: "Bottom Left" }), (0, import_jsx_runtime21.jsx)("option", { value: "bottomright", children: "Bottom Right" }), (0, import_jsx_runtime21.jsx)("option", { value: "center", children: "Centered" })] }) }) : (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [(0, import_jsx_runtime21.jsxs)("div", { className: "mb-4 flex items-center gap-2", children: [(0, import_jsx_runtime21.jsx)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: "Position Unit:" }), (0, import_jsx_runtime21.jsxs)("select", { value: positionUnit, onChange: (e) => {
|
1399
1432
|
setPositionUnit(e.target.value);
|
1400
1433
|
if (e.target.value === "px" && position.type !== "coordinate" && currentVideo && currentGraphic) {
|
1401
1434
|
const { width: videoWidth, height: videoHeight } = currentVideo;
|
@@ -1420,18 +1453,18 @@ var init_summary_view4 = __esm({
|
|
1420
1453
|
yStr: void 0
|
1421
1454
|
});
|
1422
1455
|
}
|
1423
|
-
}, className: "node-editor-select-input", children: [(0,
|
1456
|
+
}, className: "node-editor-select-input", children: [(0, import_jsx_runtime21.jsx)("option", { value: "px", children: "Pixels" }), (0, import_jsx_runtime21.jsx)("option", { value: "%", children: "Percentage" })] })] }), (0, import_jsx_runtime21.jsxs)("div", { className: "relative bg-gray-200 dark:bg-gray-700 rounded-lg", style: {
|
1424
1457
|
width: "100%",
|
1425
1458
|
userSelect: "none",
|
1426
1459
|
aspectRatio: currentVideo ? `${currentVideo.width} / ${currentVideo.height}` : `3 / 2`
|
1427
|
-
}, ref: previewAreaRef, children: [(0,
|
1460
|
+
}, ref: previewAreaRef, children: [(0, import_jsx_runtime21.jsxs)("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-gray-500 dark:text-gray-400", children: [(0, import_jsx_runtime21.jsx)("span", { children: currentVideo ? "Video Preview Area" : "Video Dimensions Unknown" }), " ", currentVideo ? (0, import_jsx_runtime21.jsxs)("span", { children: [currentVideo.width, "x", currentVideo.height, "px"] }) : ""] }), (0, import_jsx_runtime21.jsx)("div", { className: `absolute cursor-move ${currentGraphic && !graphicChanged ? "" : "p-2"} rounded-lg bg-primary-500 bg-opacity-50 hover:bg-opacity-75 transition-colors
|
1428
1461
|
${isDragging ? "bg-opacity-75" : ""}`, style: {
|
1429
1462
|
left: `${position.xPct}%`,
|
1430
1463
|
top: `${position.yPct}%`,
|
1431
1464
|
transform: `translate(-${position.xPct}%, -${position.yPct}%)`,
|
1432
1465
|
aspectRatio: currentGraphic && !graphicChanged ? `${currentGraphic.width} / ${currentGraphic.height}` : `1`,
|
1433
1466
|
width: currentGraphic && currentVideo && !graphicChanged ? currentGraphic.width / currentVideo.width * 100 + "%" : void 0
|
1434
|
-
}, onMouseDown: handleMouseDown, ref: previewTargetRef, children: (0,
|
1467
|
+
}, onMouseDown: handleMouseDown, ref: previewTargetRef, children: (0, import_jsx_runtime21.jsx)("svg", { className: `${currentGraphic && !graphicChanged ? "w-full h-full" : "w-6 h-6"} text-white`, "aria-hidden": "true", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: (0, import_jsx_runtime21.jsx)("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M12 6v12m-6-6h12m-6-6 1.5 1.5M12 6l-1.5 1.5m1.5 10.5L10.5 16.5M12 18l1.5-1.5M6 12l1.5-1.5M7.5 13.5 6 12m12 0-1.5-1.5M16.5 13.5 18 12" }) }) })] }), (0, import_jsx_runtime21.jsxs)("div", { className: "mt-2 text-sm text-gray-600 dark:text-gray-300 text-center", children: ["Position:", " ", position.type === "percentage" ? `${position.xPct.toFixed(1)}%, ${position.yPct.toFixed(1)}%` : `${Math.round(position.x)}px, ${Math.round(position.y)}px`] }), (0, import_jsx_runtime21.jsxs)("div", { className: "mt-2 flex gap-4", children: [(0, import_jsx_runtime21.jsxs)("div", { children: [(0, import_jsx_runtime21.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["X Position ", positionUnit] }), (0, import_jsx_runtime21.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.xStr ?? (positionUnit === "%" ? position.xPct.toFixed(1) : Math.round(position.x)), onChange: (e) => {
|
1435
1468
|
const newX = Number(e.target.value);
|
1436
1469
|
setPosition(convertPos({
|
1437
1470
|
type: positionUnit === "%" ? "percentage" : "coordinate",
|
@@ -1440,7 +1473,7 @@ var init_summary_view4 = __esm({
|
|
1440
1473
|
y: position.y,
|
1441
1474
|
yStr: position.yStr
|
1442
1475
|
}));
|
1443
|
-
}, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] }), (0,
|
1476
|
+
}, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] }), (0, import_jsx_runtime21.jsxs)("div", { children: [(0, import_jsx_runtime21.jsxs)("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-300", children: ["Y Position ", positionUnit] }), (0, import_jsx_runtime21.jsx)("input", { type: "number", step: positionUnit === "%" ? "0.1" : "1", value: position.yStr ?? (positionUnit === "%" ? position.yPct.toFixed(1) : Math.round(position.y)), onChange: (e) => {
|
1444
1477
|
const newY = Number(e.target.value);
|
1445
1478
|
setPosition(convertPos({
|
1446
1479
|
type: positionUnit === "%" ? "percentage" : "coordinate",
|
@@ -1451,7 +1484,7 @@ var init_summary_view4 = __esm({
|
|
1451
1484
|
}));
|
1452
1485
|
}, className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-primary-500 focus:ring-primary-500 sm:text-sm dark:bg-gray-700 dark:border-gray-600" })] })] })] })] });
|
1453
1486
|
};
|
1454
|
-
|
1487
|
+
summary_view_default5 = SummaryView9;
|
1455
1488
|
}
|
1456
1489
|
});
|
1457
1490
|
|
@@ -15840,13 +15873,13 @@ function InlineView12({ state, config: _2 }) {
|
|
15840
15873
|
return;
|
15841
15874
|
chartControl.data = makeData(state);
|
15842
15875
|
}, [state]);
|
15843
|
-
return (0,
|
15876
|
+
return (0, import_jsx_runtime22.jsx)("div", { className: "bg-gray-50 dark:bg-gray-700 rounded", style: { width: "360px", height: "200px", padding: "10px" }, children: (0, import_jsx_runtime22.jsx)("canvas", { className: "bg-gray-50 dark:bg-gray-700 rounded", ref: chartContainer }) });
|
15844
15877
|
}
|
15845
|
-
var
|
15878
|
+
var import_jsx_runtime22, import_react21, inline_view_default9;
|
15846
15879
|
var init_inline_view9 = __esm({
|
15847
15880
|
"build/util.stats.latency/inline-view.js"() {
|
15848
15881
|
"use strict";
|
15849
|
-
|
15882
|
+
import_jsx_runtime22 = __toESM(require_jsx_runtime());
|
15850
15883
|
import_react21 = __toESM(require_react());
|
15851
15884
|
init_auto();
|
15852
15885
|
inline_view_default9 = InlineView12;
|
@@ -15859,22 +15892,22 @@ __export(source_node_selection_exports, {
|
|
15859
15892
|
default: () => source_node_selection_default
|
15860
15893
|
});
|
15861
15894
|
function SourceNodeSelection(props) {
|
15862
|
-
return (0,
|
15895
|
+
return (0, import_jsx_runtime23.jsx)("div", { children: (0, import_jsx_runtime23.jsxs)("select", { defaultValue: props.defaultValue, className: `node-editor-select-input`, id: props.id, onChange: myOnChange, onBlur: myOnChange, children: [(0, import_jsx_runtime23.jsx)("option", { value: "", children: "---" }, "empty"), Object.values(props.latestDocument.components).map((o, i) => {
|
15863
15896
|
if (o.id == props.id)
|
15864
|
-
return (0,
|
15897
|
+
return (0, import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment, {});
|
15865
15898
|
if (o.info.category === "output")
|
15866
15899
|
return;
|
15867
|
-
return (0,
|
15900
|
+
return (0, import_jsx_runtime23.jsx)("option", { value: o.id, children: o.config.displayName }, i);
|
15868
15901
|
})] }) });
|
15869
15902
|
function myOnChange(e) {
|
15870
15903
|
props.onChanged(e.target.value);
|
15871
15904
|
}
|
15872
15905
|
}
|
15873
|
-
var
|
15906
|
+
var import_jsx_runtime23, source_node_selection_default;
|
15874
15907
|
var init_source_node_selection = __esm({
|
15875
15908
|
"build/util.stats.latency/source-node-selection.js"() {
|
15876
15909
|
"use strict";
|
15877
|
-
|
15910
|
+
import_jsx_runtime23 = __toESM(require_jsx_runtime());
|
15878
15911
|
source_node_selection_default = SourceNodeSelection;
|
15879
15912
|
}
|
15880
15913
|
});
|
@@ -16871,6 +16904,7 @@ function info_default12({ defineComponent, All, validation: { Port, Hostname, Ji
|
|
16871
16904
|
// build/output.whep/info.js
|
16872
16905
|
var import_config3 = __toESM(require_config());
|
16873
16906
|
var import_react12 = __toESM(require_react());
|
16907
|
+
var SummaryView6 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_summary_view3(), summary_view_exports3)));
|
16874
16908
|
function info_default13(R) {
|
16875
16909
|
const { defineComponent, Av, validation: { JitterBuffer } } = R;
|
16876
16910
|
const InlineView13 = import_react12.default.lazy(async () => Promise.resolve().then(() => (init_inline_view6(), inline_view_exports6)));
|
@@ -16895,19 +16929,26 @@ function info_default13(R) {
|
|
16895
16929
|
},
|
16896
16930
|
css: ["styles.css"],
|
16897
16931
|
runtime: {
|
16898
|
-
initialState: () => ({}),
|
16932
|
+
initialState: () => ({ enabled: true }),
|
16899
16933
|
handleEvent(ev, state) {
|
16900
16934
|
const evType = ev.type;
|
16901
16935
|
switch (evType) {
|
16902
16936
|
case "url-published":
|
16903
16937
|
state.url = ev.url;
|
16904
16938
|
break;
|
16939
|
+
case "output-enabled":
|
16940
|
+
state.enabled = true;
|
16941
|
+
break;
|
16942
|
+
case "output-disabled":
|
16943
|
+
state.enabled = false;
|
16944
|
+
break;
|
16905
16945
|
default:
|
16906
16946
|
assertUnreachable8(evType);
|
16907
16947
|
}
|
16908
16948
|
return { ...state };
|
16909
16949
|
},
|
16910
|
-
inline: InlineView13
|
16950
|
+
inline: InlineView13,
|
16951
|
+
summary: SummaryView6
|
16911
16952
|
},
|
16912
16953
|
configForm: {
|
16913
16954
|
global: {
|
@@ -16928,7 +16969,7 @@ function assertUnreachable8(_) {
|
|
16928
16969
|
// build/processor.browserOverlay/info.js
|
16929
16970
|
var import_config4 = __toESM(require_config());
|
16930
16971
|
var import_react14 = __toESM(require_react());
|
16931
|
-
var
|
16972
|
+
var SummaryView8 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_summary_view4(), summary_view_exports4)));
|
16932
16973
|
var InlineView10 = import_react14.default.lazy(async () => Promise.resolve().then(() => (init_inline_view7(), inline_view_exports7)));
|
16933
16974
|
function info_default14({ defineComponent, Video, validation: { Z } }) {
|
16934
16975
|
return defineComponent({
|
@@ -16956,7 +16997,7 @@ function info_default14({ defineComponent, Video, validation: { Z } }) {
|
|
16956
16997
|
};
|
16957
16998
|
},
|
16958
16999
|
runtime: {
|
16959
|
-
summary:
|
17000
|
+
summary: SummaryView8,
|
16960
17001
|
inline: InlineView10,
|
16961
17002
|
initialState: () => ({
|
16962
17003
|
currentUrl: "",
|
@@ -17463,7 +17504,7 @@ var import_config6 = __toESM(require_config());
|
|
17463
17504
|
var import_react20 = __toESM(require_react());
|
17464
17505
|
function info_default17({ defineComponent, Video }) {
|
17465
17506
|
const GraphicSelection2 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_image_selection(), image_selection_exports)));
|
17466
|
-
const
|
17507
|
+
const SummaryView10 = import_react20.default.lazy(async () => Promise.resolve().then(() => (init_summary_view5(), summary_view_exports5)));
|
17467
17508
|
return defineComponent({
|
17468
17509
|
identifier: "processor.onscreenGraphic",
|
17469
17510
|
category: "processor",
|
@@ -17489,7 +17530,7 @@ function info_default17({ defineComponent, Video }) {
|
|
17489
17530
|
};
|
17490
17531
|
},
|
17491
17532
|
runtime: {
|
17492
|
-
summary:
|
17533
|
+
summary: SummaryView10,
|
17493
17534
|
initialState: () => ({}),
|
17494
17535
|
handleEvent: (ev, state) => {
|
17495
17536
|
const evType = ev.type;
|
package/client/style.css
CHANGED
@@ -193,6 +193,10 @@
|
|
193
193
|
display: block;
|
194
194
|
}
|
195
195
|
|
196
|
+
.inline-block {
|
197
|
+
display: inline-block;
|
198
|
+
}
|
199
|
+
|
196
200
|
.inline {
|
197
201
|
display: inline;
|
198
202
|
}
|
@@ -213,6 +217,10 @@
|
|
213
217
|
display: none;
|
214
218
|
}
|
215
219
|
|
220
|
+
.h-2 {
|
221
|
+
height: 0.5rem;
|
222
|
+
}
|
223
|
+
|
216
224
|
.h-4 {
|
217
225
|
height: 1rem;
|
218
226
|
}
|
@@ -242,6 +250,10 @@
|
|
242
250
|
width: 2.75rem;
|
243
251
|
}
|
244
252
|
|
253
|
+
.w-2 {
|
254
|
+
width: 0.5rem;
|
255
|
+
}
|
256
|
+
|
245
257
|
.w-4 {
|
246
258
|
width: 1rem;
|
247
259
|
}
|
@@ -413,6 +425,11 @@
|
|
413
425
|
background-color: rgb(0 0 0 / var(--tw-bg-opacity));
|
414
426
|
}
|
415
427
|
|
428
|
+
.bg-blue-500 {
|
429
|
+
--tw-bg-opacity: 1;
|
430
|
+
background-color: rgb(63 131 248 / var(--tw-bg-opacity));
|
431
|
+
}
|
432
|
+
|
416
433
|
.bg-blue-600 {
|
417
434
|
--tw-bg-opacity: 1;
|
418
435
|
background-color: rgb(28 100 242 / var(--tw-bg-opacity));
|
@@ -443,6 +460,11 @@
|
|
443
460
|
background-color: rgb(29 78 216 / var(--tw-bg-opacity));
|
444
461
|
}
|
445
462
|
|
463
|
+
.bg-red-500 {
|
464
|
+
--tw-bg-opacity: 1;
|
465
|
+
background-color: rgb(240 82 82 / var(--tw-bg-opacity));
|
466
|
+
}
|
467
|
+
|
446
468
|
.bg-red-600 {
|
447
469
|
--tw-bg-opacity: 1;
|
448
470
|
background-color: rgb(224 36 36 / var(--tw-bg-opacity));
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import { type WhepOutputEvent, type WhepOutputSettings, type WhepOutputState } from "./runtime";
|
1
|
+
import { WhepOutputCommand, type WhepOutputEvent, type WhepOutputSettings, type WhepOutputState } from "./runtime";
|
2
2
|
import type Registration from "@norskvideo/norsk-studio/lib/extension/registration";
|
3
|
-
export default function (R: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<WhepOutputSettings, WhepOutputState,
|
3
|
+
export default function (R: Registration): import("@norskvideo/norsk-studio/lib/extension/client-types").NodeInfo<WhepOutputSettings, WhepOutputState, WhepOutputCommand, WhepOutputEvent>;
|
package/lib/output.whep/info.js
CHANGED
@@ -29,6 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.default = default_1;
|
30
30
|
const config_1 = require("@norskvideo/norsk-studio/lib/shared/config");
|
31
31
|
const react_1 = __importDefault(require("react"));
|
32
|
+
const SummaryView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./summary-view'))));
|
32
33
|
function default_1(R) {
|
33
34
|
const { defineComponent, Av, validation: { JitterBuffer }, } = R;
|
34
35
|
const InlineView = react_1.default.lazy(async () => Promise.resolve().then(() => __importStar(require('./inline-view'))));
|
@@ -46,19 +47,26 @@ function default_1(R) {
|
|
46
47
|
display: (_desc) => { return {}; },
|
47
48
|
css: ["styles.css"],
|
48
49
|
runtime: {
|
49
|
-
initialState: () => ({}),
|
50
|
+
initialState: () => ({ enabled: true }),
|
50
51
|
handleEvent(ev, state) {
|
51
52
|
const evType = ev.type;
|
52
53
|
switch (evType) {
|
53
54
|
case 'url-published':
|
54
55
|
state.url = ev.url;
|
55
56
|
break;
|
57
|
+
case "output-enabled":
|
58
|
+
state.enabled = true;
|
59
|
+
break;
|
60
|
+
case "output-disabled":
|
61
|
+
state.enabled = false;
|
62
|
+
break;
|
56
63
|
default:
|
57
64
|
assertUnreachable(evType);
|
58
65
|
}
|
59
66
|
return { ...state };
|
60
67
|
},
|
61
|
-
inline: InlineView
|
68
|
+
inline: InlineView,
|
69
|
+
summary: SummaryView
|
62
70
|
},
|
63
71
|
configForm: {
|
64
72
|
global: {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.whep/info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/output.whep/info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,4BA2DC;AAhED,uEAA6E;AAC7E,kDAA0B;AAC1B,MAAM,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,mDAAQ,gBAAgB,GAAC,CAAC,CAAC;AAGrE,mBAAwB,CAAe;IACrC,MAAM,EACJ,eAAe,EACf,EAAE,EACF,UAAU,EAAE,EAAE,YAAY,EAAE,GAC7B,GAAG,CAAC,CAAC;IACN,MAAM,UAAU,GAAG,eAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,mDAAQ,eAAe,GAAC,CAAC,CAAC;IAEnE,OAAO,eAAe,CAA0E;QAC9F,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,4DAA4D;QACzE,YAAY,EAAE;YAMZ,OAAO,EAAE;gBACP,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,EAAE;aACV;SACF;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;QAClC,GAAG,EAAE,CAAC,YAAY,CAAC;QACnB,OAAO,EAAE;YACP,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,WAAW,CAAC,EAAE,EAAE,KAAK;gBACnB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;gBACvB,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,eAAe;wBAClB,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;wBACnB,MAAM;oBACR,KAAK,gBAAgB;wBACnB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;wBACrB,MAAM;oBACR,KAAK,iBAAiB;wBACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;wBACtB,MAAM;oBACR;wBACE,iBAAiB,CAAC,MAAM,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;YACtB,CAAC;YACD,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,WAAW;SACrB;QACD,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,UAAU,EAAE,IAAA,yBAAgB,EAAC,CAAC,CAAC;aAChC;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;gBACrF,aAAa,EAAE,EAAE,IAAI,EAAE,4CAA4C,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;gBAC/I,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,EAAC;aACzF;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAQ;IACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type { WhepOutputState, WhepOutputSettings } from "./runtime";
|
1
|
+
import type { WhepOutputState, WhepOutputSettings, WhepOutputCommand } from "./runtime";
|
2
2
|
import type { ViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
|
3
|
-
declare function InlineView({ state, config, raise }: ViewProps<WhepOutputSettings, WhepOutputState>): import("react/jsx-runtime").JSX.Element;
|
3
|
+
declare function InlineView({ state, config, raise }: ViewProps<WhepOutputSettings, WhepOutputState, WhepOutputCommand>): import("react/jsx-runtime").JSX.Element;
|
4
4
|
export default InlineView;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.whep/inline-view.tsx"],"names":[],"mappings":";;;AAAA,iCAA4C;AAE5C,6DAAuD;AAGvD,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,
|
1
|
+
{"version":3,"file":"inline-view.js","sourceRoot":"","sources":["../../src/output.whep/inline-view.tsx"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Norsk, WhepOutputSettings as SdkSettings, WhepOutputNode } from '@norskvideo/norsk-sdk';
|
2
|
-
import {
|
3
|
-
import { CustomSinkNode,
|
1
|
+
import { AutoProcessorMediaNode, Norsk, WhepOutputSettings as SdkSettings, WhepOutputNode } from '@norskvideo/norsk-sdk';
|
2
|
+
import { CreatedMediaNode, InstanceRouteInfo, OnCreated, ServerComponentDefinition, StudioNodeSubscriptionSource, StudioRuntime } from '@norskvideo/norsk-studio/lib/extension/runtime-types';
|
3
|
+
import { CustomSinkNode, SubscriptionOpts } from '@norskvideo/norsk-studio/lib/extension/base-nodes';
|
4
4
|
import { IceServer } from '@norskvideo/norsk-studio/lib/shared/config';
|
5
5
|
import { ContextPromiseControl } from '@norskvideo/norsk-studio/lib/runtime/util';
|
6
6
|
export type WhepOutputSettings = {
|
@@ -15,24 +15,38 @@ export type WhepOutputSettings = {
|
|
15
15
|
};
|
16
16
|
export type WhepOutputState = {
|
17
17
|
url?: string;
|
18
|
+
enabled: boolean;
|
18
19
|
};
|
19
20
|
export type WhepOutputEvent = {
|
21
|
+
type: 'output-enabled' | 'output-disabled';
|
22
|
+
} | {
|
20
23
|
type: 'url-published';
|
21
24
|
url: string;
|
22
25
|
};
|
23
|
-
export type WhepOutputCommand =
|
26
|
+
export type WhepOutputCommand = {
|
27
|
+
type: "enable-output" | "disable-output";
|
28
|
+
};
|
24
29
|
export declare class WhepOutput extends CustomSinkNode {
|
25
|
-
initialised: Promise<void>;
|
26
30
|
norsk: Norsk;
|
27
|
-
|
28
|
-
shared: StudioShared;
|
31
|
+
runtime: StudioRuntime<WhepOutputState, WhepOutputCommand, WhepOutputEvent>;
|
29
32
|
cfg: WhepOutputSettings;
|
30
33
|
whep?: WhepOutputNode;
|
31
34
|
context: ContextPromiseControl;
|
32
|
-
|
35
|
+
currentSources: Map<CreatedMediaNode, StudioNodeSubscriptionSource>;
|
36
|
+
currentMedia: {
|
37
|
+
node: AutoProcessorMediaNode<string>;
|
38
|
+
}[];
|
39
|
+
initialised: Promise<void>;
|
40
|
+
enabled: boolean;
|
41
|
+
static create(norsk: Norsk, cfg: WhepOutputSettings, runtime: StudioRuntime<WhepOutputState, WhepOutputCommand, WhepOutputEvent>): Promise<WhepOutput>;
|
42
|
+
constructor(cfg: WhepOutputSettings, norsk: Norsk, runtime: StudioRuntime<WhepOutputState, WhepOutputCommand, WhepOutputEvent>);
|
33
43
|
subscribe(sources: StudioNodeSubscriptionSource[], _opts?: SubscriptionOpts): void;
|
34
44
|
subscribeImpl(sources: StudioNodeSubscriptionSource[]): Promise<void>;
|
45
|
+
enableOutput(): Promise<void>;
|
46
|
+
disableOutput(): Promise<void>;
|
35
47
|
}
|
36
|
-
export default class WhepOutputDefinition implements ServerComponentDefinition<WhepOutputSettings,
|
37
|
-
create(norsk: Norsk, cfg: WhepOutputSettings, cb: OnCreated<
|
48
|
+
export default class WhepOutputDefinition implements ServerComponentDefinition<WhepOutputSettings, WhepOutput, WhepOutputState, WhepOutputCommand, WhepOutputEvent> {
|
49
|
+
create(norsk: Norsk, cfg: WhepOutputSettings, cb: OnCreated<WhepOutput>, runtime: StudioRuntime<WhepOutputState, WhepOutputCommand, WhepOutputEvent>): Promise<void>;
|
50
|
+
handleCommand(node: WhepOutput, command: WhepOutputCommand): Promise<void>;
|
51
|
+
instanceRoutes(): Promise<InstanceRouteInfo<WhepOutputSettings, WhepOutput, WhepOutputState, WhepOutputCommand, WhepOutputEvent>[]>;
|
38
52
|
}
|
@@ -1,29 +1,51 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
6
|
exports.WhepOutput = void 0;
|
4
7
|
const base_nodes_1 = require("@norskvideo/norsk-studio/lib/extension/base-nodes");
|
5
8
|
const webrtcSettings_1 = require("../shared/webrtcSettings");
|
6
9
|
const util_1 = require("@norskvideo/norsk-studio/lib/runtime/util");
|
10
|
+
const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
|
11
|
+
const json_refs_1 = require("json-refs");
|
12
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
13
|
+
const path_1 = __importDefault(require("path"));
|
14
|
+
const yaml_1 = __importDefault(require("yaml"));
|
7
15
|
class WhepOutput extends base_nodes_1.CustomSinkNode {
|
8
|
-
initialised;
|
9
16
|
norsk;
|
10
|
-
|
11
|
-
shared;
|
17
|
+
runtime;
|
12
18
|
cfg;
|
13
19
|
whep;
|
14
20
|
context = new util_1.ContextPromiseControl(this.subscribeImpl.bind(this));
|
15
|
-
|
21
|
+
currentSources = new Map();
|
22
|
+
currentMedia = [];
|
23
|
+
initialised;
|
24
|
+
enabled = true;
|
25
|
+
static async create(norsk, cfg, runtime) {
|
26
|
+
const node = new WhepOutput(cfg, norsk, runtime);
|
27
|
+
await node.initialised;
|
28
|
+
return node;
|
29
|
+
}
|
30
|
+
constructor(cfg, norsk, runtime) {
|
16
31
|
super(cfg.id);
|
17
32
|
this.cfg = cfg;
|
18
33
|
this.norsk = norsk;
|
19
|
-
this.
|
20
|
-
this.shared = shared;
|
34
|
+
this.runtime = runtime;
|
21
35
|
this.initialised = Promise.resolve();
|
22
36
|
}
|
23
37
|
subscribe(sources, _opts) {
|
38
|
+
this.currentSources = new Map();
|
39
|
+
sources.forEach((s) => {
|
40
|
+
this.currentSources.set(s.source, s);
|
41
|
+
});
|
24
42
|
this.context.setSources(sources);
|
25
43
|
}
|
26
44
|
async subscribeImpl(sources) {
|
45
|
+
if (!this.enabled) {
|
46
|
+
(0, logging_1.debuglog)("Skipping subscription - output disabled", { id: this.id });
|
47
|
+
return;
|
48
|
+
}
|
27
49
|
const videoSource = sources.filter((s) => s.streams.select.includes("video")).at(0)?.selectVideo();
|
28
50
|
const audioSource = sources.filter((s) => s.streams.select.includes("audio")).at(0)?.selectAudio();
|
29
51
|
const subscriptions = [];
|
@@ -41,8 +63,11 @@ class WhepOutput extends base_nodes_1.CustomSinkNode {
|
|
41
63
|
onPublishStart: () => {
|
42
64
|
const url = this.whep?.endpointUrl;
|
43
65
|
if (url) {
|
44
|
-
this.updates.raiseEvent({ type: 'url-published', url });
|
45
|
-
this.updates.update({
|
66
|
+
this.runtime.updates.raiseEvent({ type: 'url-published', url });
|
67
|
+
this.runtime.updates.update({
|
68
|
+
url,
|
69
|
+
enabled: true,
|
70
|
+
});
|
46
71
|
}
|
47
72
|
},
|
48
73
|
...(0, webrtcSettings_1.webRtcSettings)(this.cfg.__global.iceServers)
|
@@ -56,18 +81,126 @@ class WhepOutput extends base_nodes_1.CustomSinkNode {
|
|
56
81
|
else {
|
57
82
|
await this.whep?.close();
|
58
83
|
this.whep = undefined;
|
59
|
-
this.updates.update({
|
84
|
+
this.runtime.updates.update({
|
85
|
+
enabled: false
|
86
|
+
});
|
87
|
+
}
|
88
|
+
}
|
89
|
+
async enableOutput() {
|
90
|
+
if (!this.enabled) {
|
91
|
+
this.enabled = true;
|
92
|
+
const sources = Array.from(this.currentSources.values());
|
93
|
+
(0, logging_1.debuglog)("Sources", sources);
|
94
|
+
await this.subscribeImpl(sources);
|
95
|
+
this.runtime.updates.raiseEvent({ type: 'output-enabled' });
|
96
|
+
this.runtime.updates.update({
|
97
|
+
enabled: true
|
98
|
+
});
|
99
|
+
(0, logging_1.debuglog)("Output enabled", { id: this.id });
|
100
|
+
}
|
101
|
+
}
|
102
|
+
async disableOutput() {
|
103
|
+
if (this.enabled) {
|
104
|
+
this.enabled = false;
|
105
|
+
if (this.whep) {
|
106
|
+
await this.whep.close();
|
107
|
+
this.whep = undefined;
|
108
|
+
}
|
109
|
+
this.runtime.updates.raiseEvent({ type: 'output-disabled' });
|
110
|
+
this.runtime.updates.update({
|
111
|
+
enabled: false
|
112
|
+
});
|
113
|
+
(0, logging_1.debuglog)("Output disabled", { id: this.id });
|
60
114
|
}
|
61
115
|
}
|
62
116
|
}
|
63
117
|
exports.WhepOutput = WhepOutput;
|
118
|
+
function coreInfo(path, op) {
|
119
|
+
return {
|
120
|
+
url: path,
|
121
|
+
summary: op.summary,
|
122
|
+
description: op.description,
|
123
|
+
requestBody: op.requestBody,
|
124
|
+
responses: op.responses,
|
125
|
+
};
|
126
|
+
}
|
127
|
+
function post(path, paths) {
|
128
|
+
return {
|
129
|
+
...coreInfo(path, paths[path]['post']),
|
130
|
+
method: 'POST',
|
131
|
+
};
|
132
|
+
}
|
64
133
|
class WhepOutputDefinition {
|
65
134
|
async create(norsk, cfg, cb, runtime) {
|
66
|
-
const node = new WhepOutput(norsk, runtime
|
135
|
+
const node = new WhepOutput(cfg, norsk, runtime);
|
67
136
|
runtime.report.registerOutput(cfg.id, node.whep?.endpointUrl);
|
68
137
|
await node.initialised;
|
69
138
|
cb(node);
|
70
139
|
}
|
140
|
+
async handleCommand(node, command) {
|
141
|
+
switch (command.type) {
|
142
|
+
case 'enable-output':
|
143
|
+
await node.enableOutput();
|
144
|
+
break;
|
145
|
+
case 'disable-output':
|
146
|
+
await node.disableOutput();
|
147
|
+
break;
|
148
|
+
}
|
149
|
+
}
|
150
|
+
async instanceRoutes() {
|
151
|
+
const types = await promises_1.default.readFile(path_1.default.join(__dirname, 'types.yaml'));
|
152
|
+
const root = yaml_1.default.parse(types.toString());
|
153
|
+
const resolved = await (0, json_refs_1.resolveRefs)(root, {}).then((r) => r.resolved);
|
154
|
+
const paths = resolved.paths;
|
155
|
+
return [
|
156
|
+
{
|
157
|
+
...post('/enable', paths),
|
158
|
+
handler: ({ runtime }) => async (_req, res) => {
|
159
|
+
try {
|
160
|
+
const state = runtime.updates.latest();
|
161
|
+
if (state.enabled) {
|
162
|
+
return res.status(400).json({ error: 'Output is already enabled' });
|
163
|
+
}
|
164
|
+
runtime.updates.update({ ...state, enabled: true });
|
165
|
+
runtime.updates.sendCommand({
|
166
|
+
type: 'enable-output'
|
167
|
+
});
|
168
|
+
runtime.updates.raiseEvent({
|
169
|
+
type: 'output-enabled'
|
170
|
+
});
|
171
|
+
res.sendStatus(204);
|
172
|
+
}
|
173
|
+
catch (error) {
|
174
|
+
console.error('Error in enable handler:', error);
|
175
|
+
res.status(500).json({ error: 'Failed to enable output' });
|
176
|
+
}
|
177
|
+
}
|
178
|
+
},
|
179
|
+
{
|
180
|
+
...post('/disable', paths),
|
181
|
+
handler: ({ runtime }) => async (_req, res) => {
|
182
|
+
try {
|
183
|
+
const state = runtime.updates.latest();
|
184
|
+
if (!state.enabled) {
|
185
|
+
return res.status(400).json({ error: 'Output is already disabled' });
|
186
|
+
}
|
187
|
+
runtime.updates.update({ ...state, enabled: false });
|
188
|
+
runtime.updates.sendCommand({
|
189
|
+
type: 'disable-output'
|
190
|
+
});
|
191
|
+
runtime.updates.raiseEvent({
|
192
|
+
type: 'output-disabled'
|
193
|
+
});
|
194
|
+
res.sendStatus(204);
|
195
|
+
}
|
196
|
+
catch (error) {
|
197
|
+
console.error('Error in disable handler:', error);
|
198
|
+
res.status(500).json({ error: 'Failed to disable output' });
|
199
|
+
}
|
200
|
+
}
|
201
|
+
}
|
202
|
+
];
|
203
|
+
}
|
71
204
|
}
|
72
205
|
exports.default = WhepOutputDefinition;
|
73
206
|
//# sourceMappingURL=runtime.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.whep/runtime.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.whep/runtime.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { WhepOutputSettings, WhepOutputCommand, WhepOutputState } from "./runtime";
|
2
|
+
import { ViewProps } from "@norskvideo/norsk-studio/lib/extension/client-types";
|
3
|
+
declare function SummaryView({ state, sendCommand, }: ViewProps<WhepOutputSettings, WhepOutputState, WhepOutputCommand>): import("react/jsx-runtime").JSX.Element;
|
4
|
+
export default SummaryView;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
4
|
+
function SummaryView({ state, sendCommand, }) {
|
5
|
+
const handleEnableOutput = () => {
|
6
|
+
void enableOutput();
|
7
|
+
};
|
8
|
+
const enableOutput = async () => {
|
9
|
+
sendCommand({
|
10
|
+
type: "enable-output",
|
11
|
+
});
|
12
|
+
};
|
13
|
+
const handleDisableOutput = () => {
|
14
|
+
void disableOutput();
|
15
|
+
};
|
16
|
+
const disableOutput = async () => {
|
17
|
+
sendCommand({
|
18
|
+
type: "disable-output",
|
19
|
+
});
|
20
|
+
};
|
21
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "mb-5", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center space-x-2", children: [(0, jsx_runtime_1.jsx)("span", { className: `inline-block w-2 h-2 rounded-full ${state.enabled ? "bg-blue-500" : "bg-red-500"}` }), (0, jsx_runtime_1.jsxs)("span", { className: "text-sm", children: ["Status: ", state.enabled ? "Enabled" : "Disabled"] })] }), (0, jsx_runtime_1.jsx)("div", { children: state.enabled ? ((0, jsx_runtime_1.jsx)("button", { onClick: handleDisableOutput, className: "px-3 py-1 text-sm bg-red-600 hover:bg-red-700 text-white rounded", children: "Disable Output" })) : ((0, jsx_runtime_1.jsx)("button", { onClick: handleEnableOutput, className: "px-3 py-1 text-sm bg-blue-600 hover:bg-blue-700 text-white rounded", children: "Enable Output" })) })] }) }));
|
22
|
+
}
|
23
|
+
exports.default = SummaryView;
|
24
|
+
//# sourceMappingURL=summary-view.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"summary-view.js","sourceRoot":"","sources":["../../src/output.whep/summary-view.tsx"],"names":[],"mappings":";;;AAOA,SAAS,WAAW,CAAC,EACnB,KAAK,EACL,WAAW,GACuD;IAElE,MAAM,kBAAkB,GAAG,GAAS,EAAE;QACpC,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;QAC9B,WAAW,CAAC;YACV,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAS,EAAE;QACrC,KAAK,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,WAAW,CAAC;YACV,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACL,gCAAK,SAAS,EAAC,MAAM,YACnB,iCAAK,SAAS,EAAC,wCAAwC,aACrD,iCAAK,SAAS,EAAC,6BAA6B,aAC1C,iCACE,SAAS,EAAE,qCACT,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAClC,EAAE,GACI,EACR,kCAAM,SAAS,EAAC,SAAS,yBACd,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAC1C,IACH,EACN,0CACG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,mCACE,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAC,kEAAkE,+BAGrE,CACV,CAAC,CAAC,CAAC,CACF,mCACE,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAC,oEAAoE,8BAGvE,CACV,GACG,IACF,GACF,CACP,CAAC;AACJ,CAAC;AAED,kBAAe,WAAW,CAAC"}
|
package/lib/test/whep-output.js
CHANGED
@@ -38,6 +38,8 @@ const puppeteer_1 = __importDefault(require("puppeteer"));
|
|
38
38
|
const info_1 = __importDefault(require("../output.whep/info"));
|
39
39
|
const client_types_1 = require("@norskvideo/norsk-studio/lib/extension/client-types");
|
40
40
|
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
41
|
+
const node_fetch_1 = __importDefault(require("node-fetch"));
|
42
|
+
const express_1 = __importDefault(require("express"));
|
41
43
|
async function defaultRuntime() {
|
42
44
|
const runtime = (0, builder_1.emptyRuntime)();
|
43
45
|
await (0, __1.registerAll)(runtime);
|
@@ -58,9 +60,21 @@ describe("WHEP Output", () => {
|
|
58
60
|
let whep = undefined;
|
59
61
|
let source = undefined;
|
60
62
|
afterEach(async () => {
|
61
|
-
|
62
|
-
|
63
|
-
|
63
|
+
try {
|
64
|
+
if (page) {
|
65
|
+
await page.close().catch(() => { });
|
66
|
+
}
|
67
|
+
if (browser) {
|
68
|
+
await browser.close().catch(() => { });
|
69
|
+
}
|
70
|
+
if (norsk) {
|
71
|
+
await norsk.close().catch(() => { });
|
72
|
+
}
|
73
|
+
await new Promise(f => setTimeout(f, 1000));
|
74
|
+
}
|
75
|
+
catch (error) {
|
76
|
+
console.error('Error in afterEach cleanup:', error);
|
77
|
+
}
|
64
78
|
});
|
65
79
|
beforeEach(async () => {
|
66
80
|
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
@@ -141,5 +155,172 @@ describe("WHEP Output", () => {
|
|
141
155
|
void doIt();
|
142
156
|
});
|
143
157
|
});
|
158
|
+
describe("WHEP Output API", () => {
|
159
|
+
let norsk = undefined;
|
160
|
+
let whep = undefined;
|
161
|
+
let source = undefined;
|
162
|
+
let browser = undefined;
|
163
|
+
let page = undefined;
|
164
|
+
let app;
|
165
|
+
let server;
|
166
|
+
let port;
|
167
|
+
let testCounter = 0;
|
168
|
+
beforeEach(async () => {
|
169
|
+
norsk = await norsk_sdk_1.Norsk.connect({ onShutdown: () => { } });
|
170
|
+
app = (0, express_1.default)();
|
171
|
+
app.use(express_1.default.json());
|
172
|
+
server = app.listen(0);
|
173
|
+
port = server.address().port;
|
174
|
+
testCounter++;
|
175
|
+
const compiled = await testDocument();
|
176
|
+
const result = await (0, execution_1.default)(norsk, compiled, app);
|
177
|
+
whep = result.components["whep"];
|
178
|
+
source = await (0, sources_1.videoAndAudio)(norsk, `source-${testCounter}`);
|
179
|
+
whep.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(source, (0, sources_1.testSourceDescription)(), { type: "take-all-streams", select: client_types_1.Av })]);
|
180
|
+
});
|
181
|
+
afterEach(async () => {
|
182
|
+
try {
|
183
|
+
if (page) {
|
184
|
+
await page.close().catch(() => { });
|
185
|
+
}
|
186
|
+
if (browser) {
|
187
|
+
await browser.close().catch(() => { });
|
188
|
+
}
|
189
|
+
if (server) {
|
190
|
+
await new Promise((resolve) => {
|
191
|
+
server?.close(() => resolve());
|
192
|
+
});
|
193
|
+
}
|
194
|
+
if (norsk) {
|
195
|
+
await norsk.close().catch(() => { });
|
196
|
+
}
|
197
|
+
await new Promise(f => setTimeout(f, 1000));
|
198
|
+
}
|
199
|
+
catch (error) {
|
200
|
+
console.error('Error in afterEach cleanup:', error);
|
201
|
+
}
|
202
|
+
});
|
203
|
+
it("should handle initial state correctly", async () => {
|
204
|
+
browser = await puppeteer_1.default.launch({
|
205
|
+
headless: 'new',
|
206
|
+
executablePath: process.env.BROWSER_FOR_TESTING ? process.env.BROWSER_FOR_TESTING : undefined,
|
207
|
+
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
208
|
+
});
|
209
|
+
page = await browser.newPage();
|
210
|
+
await new Promise((r) => {
|
211
|
+
async function doIt() {
|
212
|
+
await page?.goto('http://127.0.0.1:8080/whep/whep/whep.html');
|
213
|
+
await page?.waitForSelector('video', { timeout: 100.0 })
|
214
|
+
.catch(() => {
|
215
|
+
setTimeout(() => void doIt(), 100.0);
|
216
|
+
}).then((v) => {
|
217
|
+
(0, chai_1.expect)(v).exist;
|
218
|
+
}).finally(() => {
|
219
|
+
r();
|
220
|
+
});
|
221
|
+
}
|
222
|
+
void doIt();
|
223
|
+
});
|
224
|
+
});
|
225
|
+
it("should handle disable and enable cycle", async () => {
|
226
|
+
browser = await puppeteer_1.default.launch({
|
227
|
+
headless: 'new',
|
228
|
+
executablePath: process.env.BROWSER_FOR_TESTING ? process.env.BROWSER_FOR_TESTING : undefined,
|
229
|
+
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
230
|
+
});
|
231
|
+
page = await browser.newPage();
|
232
|
+
await new Promise((r) => {
|
233
|
+
async function doIt() {
|
234
|
+
await page?.goto('http://127.0.0.1:8080/whep/whep/whep.html');
|
235
|
+
await page?.waitForSelector('video', { timeout: 100.0 })
|
236
|
+
.catch(() => {
|
237
|
+
setTimeout(() => void doIt(), 100.0);
|
238
|
+
}).then((v) => {
|
239
|
+
(0, chai_1.expect)(v).exist;
|
240
|
+
}).finally(() => {
|
241
|
+
r();
|
242
|
+
});
|
243
|
+
}
|
244
|
+
void doIt();
|
245
|
+
});
|
246
|
+
const disableResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/disable`, {
|
247
|
+
method: 'POST'
|
248
|
+
});
|
249
|
+
(0, chai_1.expect)(disableResponse.status).to.equal(204);
|
250
|
+
await page.reload();
|
251
|
+
await new Promise((r) => {
|
252
|
+
async function doIt() {
|
253
|
+
await page?.waitForSelector('video', { timeout: 1000.0 })
|
254
|
+
.catch(() => {
|
255
|
+
}).then((v) => {
|
256
|
+
(0, chai_1.expect)(v).not.exist;
|
257
|
+
}).finally(() => {
|
258
|
+
r();
|
259
|
+
});
|
260
|
+
}
|
261
|
+
void doIt();
|
262
|
+
});
|
263
|
+
const enableResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/enable`, {
|
264
|
+
method: 'POST'
|
265
|
+
});
|
266
|
+
(0, chai_1.expect)(enableResponse.status).to.equal(204);
|
267
|
+
await page.reload();
|
268
|
+
await new Promise((r) => {
|
269
|
+
async function doIt() {
|
270
|
+
await page?.goto('http://127.0.0.1:8080/whep/whep/whep.html');
|
271
|
+
await page?.waitForSelector('video', { timeout: 100.0 })
|
272
|
+
.catch(() => {
|
273
|
+
setTimeout(() => void doIt(), 100.0);
|
274
|
+
}).then((v) => {
|
275
|
+
(0, chai_1.expect)(v).exist;
|
276
|
+
}).finally(() => {
|
277
|
+
r();
|
278
|
+
});
|
279
|
+
}
|
280
|
+
void doIt();
|
281
|
+
});
|
282
|
+
});
|
283
|
+
it("handles invalid API requests appropriately", async () => {
|
284
|
+
const alreadyEnabledResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/enable`, {
|
285
|
+
method: 'POST'
|
286
|
+
});
|
287
|
+
(0, chai_1.expect)(alreadyEnabledResponse.status).to.equal(400);
|
288
|
+
const disableResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/disable`, {
|
289
|
+
method: 'POST'
|
290
|
+
});
|
291
|
+
(0, chai_1.expect)(disableResponse.status).to.equal(204);
|
292
|
+
const alreadyDisabledResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/disable`, {
|
293
|
+
method: 'POST'
|
294
|
+
});
|
295
|
+
(0, chai_1.expect)(alreadyDisabledResponse.status).to.equal(400);
|
296
|
+
});
|
297
|
+
it("should maintain disabled state across source changes", async () => {
|
298
|
+
browser = await puppeteer_1.default.launch({
|
299
|
+
headless: 'new',
|
300
|
+
executablePath: process.env.BROWSER_FOR_TESTING ? process.env.BROWSER_FOR_TESTING : undefined,
|
301
|
+
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
302
|
+
});
|
303
|
+
page = await browser.newPage();
|
304
|
+
const disableResponse = await (0, node_fetch_1.default)(`http://localhost:${port}/${whep.id}/disable`, {
|
305
|
+
method: 'POST'
|
306
|
+
});
|
307
|
+
(0, chai_1.expect)(disableResponse.status).to.equal(204);
|
308
|
+
const newSource = await (0, sources_1.videoAndAudio)(norsk, 'new-source');
|
309
|
+
whep.subscribe([new runtime_types_1.StudioNodeSubscriptionSource(newSource, (0, sources_1.testSourceDescription)(), { type: "take-all-streams", select: client_types_1.Av })]);
|
310
|
+
await page.goto('http://127.0.0.1:8080/whep/whep/whep.html');
|
311
|
+
await new Promise((r) => {
|
312
|
+
async function doIt() {
|
313
|
+
await page?.waitForSelector('video', { timeout: 1000.0 })
|
314
|
+
.catch(() => {
|
315
|
+
}).then((v) => {
|
316
|
+
(0, chai_1.expect)(v).not.exist;
|
317
|
+
}).finally(() => {
|
318
|
+
r();
|
319
|
+
});
|
320
|
+
}
|
321
|
+
void doIt();
|
322
|
+
});
|
323
|
+
});
|
324
|
+
});
|
144
325
|
});
|
145
326
|
//# sourceMappingURL=whep-output.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"whep-output.js","sourceRoot":"","sources":["../../src/test/whep-output.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"whep-output.js","sourceRoot":"","sources":["../../src/test/whep-output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@norskvideo/norsk-studio-built-ins",
|
3
|
-
"version": "1.12.0-2025-02-
|
3
|
+
"version": "1.12.0-2025-02-04-9551fc82",
|
4
4
|
"description": "",
|
5
5
|
"scripts": {
|
6
6
|
"clean": "rm -rf lib",
|
@@ -21,8 +21,8 @@
|
|
21
21
|
],
|
22
22
|
"license": "MIT",
|
23
23
|
"dependencies": {
|
24
|
-
"@norskvideo/norsk-sdk": "^1.0.400-2025-02-
|
25
|
-
"@norskvideo/norsk-studio": "^1.20.1-2025-02-
|
24
|
+
"@norskvideo/norsk-sdk": "^1.0.400-2025-02-04-effc9d4a",
|
25
|
+
"@norskvideo/norsk-studio": "^1.20.1-2025-02-04-5160b6de",
|
26
26
|
"@norskvideo/webrtc-client": "^0.1.2",
|
27
27
|
"body-parser": "^1.20.2",
|
28
28
|
"cors": "^2.8.5",
|