@norskvideo/norsk-studio-alpha 1.27.0-2025-07-09-0fcad3ea
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 +10 -0
- package/client/info.js +43461 -0
- package/client/processor.audioLevel/styles.css +165 -0
- package/client/shared/style.css +1627 -0
- package/client/shared/tailwind.css +31 -0
- package/client/style.css +1074 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +14 -0
- package/lib/index.js.map +1 -0
- package/lib/info.d.ts +3 -0
- package/lib/info.js +44 -0
- package/lib/info.js.map +1 -0
- package/lib/input.decklink/info.d.ts +3 -0
- package/lib/input.decklink/info.js +51 -0
- package/lib/input.decklink/info.js.map +1 -0
- package/lib/input.decklink/runtime.d.ts +12 -0
- package/lib/input.decklink/runtime.js +22 -0
- package/lib/input.decklink/runtime.js.map +1 -0
- package/lib/input.decklink/types.d.ts +23 -0
- package/lib/input.decklink/types.js +3 -0
- package/lib/input.decklink/types.js.map +1 -0
- package/lib/input.decklink/types.yaml +32 -0
- package/lib/input.mp4file/info.d.ts +3 -0
- package/lib/input.mp4file/info.js +34 -0
- package/lib/input.mp4file/info.js.map +1 -0
- package/lib/input.mp4file/runtime.d.ts +14 -0
- package/lib/input.mp4file/runtime.js +33 -0
- package/lib/input.mp4file/runtime.js.map +1 -0
- package/lib/input.mp4file/types.d.ts +23 -0
- package/lib/input.mp4file/types.js +3 -0
- package/lib/input.mp4file/types.js.map +1 -0
- package/lib/input.mp4file/types.yaml +30 -0
- package/lib/input.ndi/info.d.ts +3 -0
- package/lib/input.ndi/info.js +52 -0
- package/lib/input.ndi/info.js.map +1 -0
- package/lib/input.ndi/runtime.d.ts +24 -0
- package/lib/input.ndi/runtime.js +60 -0
- package/lib/input.ndi/runtime.js.map +1 -0
- package/lib/input.ndi/source-selection.d.ts +10 -0
- package/lib/input.ndi/source-selection.js +84 -0
- package/lib/input.ndi/source-selection.js.map +1 -0
- package/lib/input.ndi/types.d.ts +52 -0
- package/lib/input.ndi/types.js +3 -0
- package/lib/input.ndi/types.js.map +1 -0
- package/lib/input.ndi/types.yaml +37 -0
- package/lib/output.ndi/info.d.ts +8 -0
- package/lib/output.ndi/info.js +61 -0
- package/lib/output.ndi/info.js.map +1 -0
- package/lib/output.ndi/inline-view.d.ts +6 -0
- package/lib/output.ndi/inline-view.js +12 -0
- package/lib/output.ndi/inline-view.js.map +1 -0
- package/lib/output.ndi/runtime.d.ts +14 -0
- package/lib/output.ndi/runtime.js +35 -0
- package/lib/output.ndi/runtime.js.map +1 -0
- package/lib/output.ndi/types.d.ts +35 -0
- package/lib/output.ndi/types.js +3 -0
- package/lib/output.ndi/types.js.map +1 -0
- package/lib/output.ndi/types.yaml +72 -0
- package/lib/output.recorder/info.d.ts +10 -0
- package/lib/output.recorder/info.js +79 -0
- package/lib/output.recorder/info.js.map +1 -0
- package/lib/output.recorder/runtime.d.ts +66 -0
- package/lib/output.recorder/runtime.js +301 -0
- package/lib/output.recorder/runtime.js.map +1 -0
- package/lib/output.recorder/types.d.ts +225 -0
- package/lib/output.recorder/types.js +3 -0
- package/lib/output.recorder/types.js.map +1 -0
- package/lib/output.recorder/types.yaml +211 -0
- package/lib/processor.actionReplay/info.d.ts +25 -0
- package/lib/processor.actionReplay/info.js +77 -0
- package/lib/processor.actionReplay/info.js.map +1 -0
- package/lib/processor.actionReplay/runtime.d.ts +38 -0
- package/lib/processor.actionReplay/runtime.js +225 -0
- package/lib/processor.actionReplay/runtime.js.map +1 -0
- package/lib/processor.actionReplay/summary.d.ts +4 -0
- package/lib/processor.actionReplay/summary.js +76 -0
- package/lib/processor.actionReplay/summary.js.map +1 -0
- package/lib/processor.actionReplay/types.d.ts +38 -0
- package/lib/processor.actionReplay/types.js +3 -0
- package/lib/processor.actionReplay/types.js.map +1 -0
- package/lib/processor.actionReplay/types.yaml +74 -0
- package/lib/processor.audioLevel/info.d.ts +27 -0
- package/lib/processor.audioLevel/info.js +61 -0
- package/lib/processor.audioLevel/info.js.map +1 -0
- package/lib/processor.audioLevel/inline-view.d.ts +4 -0
- package/lib/processor.audioLevel/inline-view.js +26 -0
- package/lib/processor.audioLevel/inline-view.js.map +1 -0
- package/lib/processor.audioLevel/runtime.d.ts +26 -0
- package/lib/processor.audioLevel/runtime.js +86 -0
- package/lib/processor.audioLevel/runtime.js.map +1 -0
- package/lib/processor.audioLevel/summary-view.d.ts +7 -0
- package/lib/processor.audioLevel/summary-view.js +37 -0
- package/lib/processor.audioLevel/summary-view.js.map +1 -0
- package/lib/processor.audioLevel/types.d.ts +42 -0
- package/lib/processor.audioLevel/types.js +3 -0
- package/lib/processor.audioLevel/types.js.map +1 -0
- package/lib/processor.audioLevel/types.yaml +83 -0
- package/lib/processor.gemini-poc/info.d.ts +8 -0
- package/lib/processor.gemini-poc/info.js +59 -0
- package/lib/processor.gemini-poc/info.js.map +1 -0
- package/lib/processor.gemini-poc/runtime.d.ts +38 -0
- package/lib/processor.gemini-poc/runtime.js +132 -0
- package/lib/processor.gemini-poc/runtime.js.map +1 -0
- package/lib/processor.gemini-poc/types.d.ts +23 -0
- package/lib/processor.gemini-poc/types.js +3 -0
- package/lib/processor.gemini-poc/types.js.map +1 -0
- package/lib/processor.gemini-poc/types.yaml +43 -0
- package/lib/processor.mixMinus/info.d.ts +7 -0
- package/lib/processor.mixMinus/info.js +40 -0
- package/lib/processor.mixMinus/info.js.map +1 -0
- package/lib/processor.mixMinus/runtime.d.ts +23 -0
- package/lib/processor.mixMinus/runtime.js +85 -0
- package/lib/processor.mixMinus/runtime.js.map +1 -0
- package/lib/processor.mixMinus/types.d.ts +18 -0
- package/lib/processor.mixMinus/types.js +3 -0
- package/lib/processor.mixMinus/types.js.map +1 -0
- package/lib/processor.mixMinus/types.yaml +19 -0
- package/lib/processor.monetise/info.d.ts +3 -0
- package/lib/processor.monetise/info.js +72 -0
- package/lib/processor.monetise/info.js.map +1 -0
- package/lib/processor.monetise/runtime.d.ts +62 -0
- package/lib/processor.monetise/runtime.js +217 -0
- package/lib/processor.monetise/runtime.js.map +1 -0
- package/lib/processor.monetise/summary.d.ts +7 -0
- package/lib/processor.monetise/summary.js +40 -0
- package/lib/processor.monetise/summary.js.map +1 -0
- package/lib/processor.monetise/types.d.ts +16 -0
- package/lib/processor.monetise/types.js +3 -0
- package/lib/processor.monetise/types.js.map +1 -0
- package/lib/processor.monetise/types.yaml +9 -0
- package/lib/processor.whisper-transcribe/info.d.ts +9 -0
- package/lib/processor.whisper-transcribe/info.js +46 -0
- package/lib/processor.whisper-transcribe/info.js.map +1 -0
- package/lib/processor.whisper-transcribe/runtime.d.ts +22 -0
- package/lib/processor.whisper-transcribe/runtime.js +70 -0
- package/lib/processor.whisper-transcribe/runtime.js.map +1 -0
- package/lib/processor.whisper-transcribe/types.d.ts +21 -0
- package/lib/processor.whisper-transcribe/types.js +3 -0
- package/lib/processor.whisper-transcribe/types.js.map +1 -0
- package/lib/processor.whisper-transcribe/types.yaml +28 -0
- package/lib/shared/schemas.d.ts +8 -0
- package/lib/shared/schemas.js +44 -0
- package/lib/shared/schemas.js.map +1 -0
- package/lib/test/output.recorder.d.ts +1 -0
- package/lib/test/output.recorder.js +186 -0
- package/lib/test/output.recorder.js.map +1 -0
- package/lib/util.timestamps/info.d.ts +14 -0
- package/lib/util.timestamps/info.js +64 -0
- package/lib/util.timestamps/info.js.map +1 -0
- package/lib/util.timestamps/inline-view.d.ts +6 -0
- package/lib/util.timestamps/inline-view.js +95 -0
- package/lib/util.timestamps/inline-view.js.map +1 -0
- package/lib/util.timestamps/runtime.d.ts +13 -0
- package/lib/util.timestamps/runtime.js +51 -0
- package/lib/util.timestamps/runtime.js.map +1 -0
- package/lib/util.timestamps/types.d.ts +36 -0
- package/lib/util.timestamps/types.js +3 -0
- package/lib/util.timestamps/types.js.map +1 -0
- package/lib/util.timestamps/types.yaml +74 -0
- package/package.json +57 -0
@@ -0,0 +1,301 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.Recorder = void 0;
|
7
|
+
const norsk_sdk_1 = require("@norskvideo/norsk-sdk");
|
8
|
+
const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
|
9
|
+
const api_1 = require("@norskvideo/norsk-studio/lib/server/api");
|
10
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
11
|
+
const path_1 = __importDefault(require("path"));
|
12
|
+
const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
|
13
|
+
const util_1 = require("@norskvideo/norsk-studio/lib/shared/util");
|
14
|
+
const schemas_1 = require("@norskvideo/norsk-studio-built-ins/lib/shared/schemas");
|
15
|
+
function idToPath(id, cfg) {
|
16
|
+
return path_1.default.join(cfg.cuts_path, `cut-${id}.mp4`);
|
17
|
+
}
|
18
|
+
class RecorderDefinition {
|
19
|
+
async create(norsk, cfg, cb, runtime) {
|
20
|
+
const node = new Recorder(norsk, runtime, cfg);
|
21
|
+
await node.initialised;
|
22
|
+
cb(node);
|
23
|
+
}
|
24
|
+
async schemas() {
|
25
|
+
return (0, schemas_1.schemaFromTypes)(path_1.default.join(__dirname, 'types.yaml'), {
|
26
|
+
config: 'RecorderSettings'
|
27
|
+
});
|
28
|
+
}
|
29
|
+
handleCommand(recorder, command) {
|
30
|
+
const ct = command.type;
|
31
|
+
switch (ct) {
|
32
|
+
case 'make-cut':
|
33
|
+
void recorder.makeCut(new Date(command.start), command.duration_s);
|
34
|
+
break;
|
35
|
+
default:
|
36
|
+
(0, util_1.assertUnreachable)(ct);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
async instanceRoutes() {
|
40
|
+
return (0, api_1.defineApi)(path_1.default.join(__dirname, 'types.yaml'), {
|
41
|
+
'/timeline': {
|
42
|
+
get: ({ runtime }) => async (_req, res) => {
|
43
|
+
res.status(200).json(runtime.updates.latest());
|
44
|
+
}
|
45
|
+
},
|
46
|
+
'/cut': {
|
47
|
+
post: ({ runtime }) => async (req, res) => {
|
48
|
+
const previousCuts = runtime.updates.latest().cuts;
|
49
|
+
const previousCutId = previousCuts.at(-1)?.id;
|
50
|
+
if (previousCuts.length > 0 && previousCuts[previousCuts.length - 1].percent < 100.0) {
|
51
|
+
res.status(400).json("Cut already in progress");
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
const d = Date.parse(req.body.start);
|
55
|
+
const s = parseInt(req.body.duration_s, 10);
|
56
|
+
if (Number.isNaN(d)) {
|
57
|
+
res.status(400).json("Invalid date");
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
if (Number.isNaN(s)) {
|
61
|
+
res.status(400).json("Invalid duration");
|
62
|
+
return;
|
63
|
+
}
|
64
|
+
runtime.updates.sendCommand({
|
65
|
+
type: 'make-cut',
|
66
|
+
start: req.body.start,
|
67
|
+
duration_s: s
|
68
|
+
});
|
69
|
+
await (0, util_1.waitForCondition)(() => {
|
70
|
+
const latest = runtime.updates.latest().cuts;
|
71
|
+
if (latest.length > 0 && latest[latest.length - 1].id !== previousCutId)
|
72
|
+
return true;
|
73
|
+
return false;
|
74
|
+
}).catch((r) => {
|
75
|
+
(0, logging_1.errorlog)("Cut failed for some reason", r);
|
76
|
+
res.status(400).json(r);
|
77
|
+
return;
|
78
|
+
});
|
79
|
+
const latest = runtime.updates.latest().cuts;
|
80
|
+
if (latest.length == 0 || latest[latest.length - 1].id == previousCutId) {
|
81
|
+
(0, logging_1.warninglog)("Something went wrong and the cut wasn't started");
|
82
|
+
res.status(400).json("Something went wrong");
|
83
|
+
return;
|
84
|
+
}
|
85
|
+
const started = latest[latest.length - 1];
|
86
|
+
(0, logging_1.debuglog)("Cut signalled as started", started.id);
|
87
|
+
res.status(201).json({
|
88
|
+
cutId: started.id.toString(10),
|
89
|
+
url: path_1.default.join('cut/', started.id.toString(10))
|
90
|
+
});
|
91
|
+
}
|
92
|
+
},
|
93
|
+
'/cut/{id}': {
|
94
|
+
get: ({ runtime }) => async (req, res) => {
|
95
|
+
const id = parseInt(req.params.id, 10);
|
96
|
+
if (Number.isNaN(id)) {
|
97
|
+
res.status(400).json("Invalid id");
|
98
|
+
return;
|
99
|
+
}
|
100
|
+
const cuts = runtime.updates.latest().cuts;
|
101
|
+
const cut = cuts.find((c) => c.id == id);
|
102
|
+
if (!cut) {
|
103
|
+
res.status(404).json("Cut not found");
|
104
|
+
return;
|
105
|
+
}
|
106
|
+
let status;
|
107
|
+
if (cut.percent == 100.0) {
|
108
|
+
status = {
|
109
|
+
status: 'CutReady',
|
110
|
+
url: path_1.default.join('download', id.toString(10))
|
111
|
+
};
|
112
|
+
}
|
113
|
+
else {
|
114
|
+
status = {
|
115
|
+
status: 'CutNotReady',
|
116
|
+
percent_complete: cut.percent
|
117
|
+
};
|
118
|
+
}
|
119
|
+
res.status(200).json(status);
|
120
|
+
return;
|
121
|
+
}
|
122
|
+
},
|
123
|
+
'/download/{cut_id}': {
|
124
|
+
get: ({ config }) => async (req, res) => {
|
125
|
+
const id = parseInt(req.params.cut_id, 10);
|
126
|
+
if (Number.isNaN(id)) {
|
127
|
+
res.status(400).json("Invalid id");
|
128
|
+
return;
|
129
|
+
}
|
130
|
+
const pathToFile = idToPath(id, config);
|
131
|
+
await promises_1.default.stat(pathToFile).catch(() => {
|
132
|
+
res.status(404).json("Cut doesn't exist");
|
133
|
+
return;
|
134
|
+
});
|
135
|
+
(0, logging_1.debuglog)("Sending file to client", pathToFile);
|
136
|
+
res.contentType(".mp4");
|
137
|
+
res.sendFile(pathToFile);
|
138
|
+
}
|
139
|
+
}
|
140
|
+
});
|
141
|
+
}
|
142
|
+
}
|
143
|
+
exports.default = RecorderDefinition;
|
144
|
+
const VideoKey = {
|
145
|
+
streamId: 256,
|
146
|
+
programNumber: 1,
|
147
|
+
sourceName: 'recorder',
|
148
|
+
renditionName: 'default'
|
149
|
+
};
|
150
|
+
const AudioKey = {
|
151
|
+
streamId: 257,
|
152
|
+
programNumber: 1,
|
153
|
+
sourceName: 'recorder',
|
154
|
+
renditionName: 'default'
|
155
|
+
};
|
156
|
+
class Recorder {
|
157
|
+
initialised;
|
158
|
+
norsk;
|
159
|
+
updates;
|
160
|
+
recorder;
|
161
|
+
videoKey;
|
162
|
+
audioKey;
|
163
|
+
id;
|
164
|
+
cfg;
|
165
|
+
cutting = false;
|
166
|
+
cutIndex = 0;
|
167
|
+
timer;
|
168
|
+
constructor(norsk, { updates }, cfg) {
|
169
|
+
this.cfg = cfg;
|
170
|
+
this.id = cfg.id;
|
171
|
+
this.norsk = norsk;
|
172
|
+
this.updates = updates;
|
173
|
+
this.relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
|
174
|
+
this.initialised = this.initialise();
|
175
|
+
this.timer = setInterval(() => void this.pruneCutStore, this.cfg.pruneIntervalMs ?? 60000);
|
176
|
+
}
|
177
|
+
async pruneCutStore() {
|
178
|
+
const files = await promises_1.default.readdir(this.cfg.cuts_path);
|
179
|
+
const now = new Date().valueOf();
|
180
|
+
const expiryMs = this.cfg.expiry_hours * 60 * 60 * 1000;
|
181
|
+
for (const f of files) {
|
182
|
+
const full = path_1.default.join(this.cfg.cuts_path, f);
|
183
|
+
const info = await promises_1.default.stat(full);
|
184
|
+
if (!info.isFile())
|
185
|
+
continue;
|
186
|
+
if (path_1.default.extname(f) !== '.mp4')
|
187
|
+
continue;
|
188
|
+
if (now - info.ctimeMs > expiryMs) {
|
189
|
+
(0, logging_1.debuglog)("Deleting old cut file", { file: full });
|
190
|
+
await promises_1.default.rm(full, { force: true }).catch((e) => {
|
191
|
+
(0, logging_1.errorlog)("Error deleting file", e);
|
192
|
+
});
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
relatedMediaNodes;
|
197
|
+
async initialise() {
|
198
|
+
this.recorder = await this.norsk.mediaStore.recorder({
|
199
|
+
id: `${this.id}-recorder`,
|
200
|
+
name: this.id,
|
201
|
+
path: this.cfg.store_path,
|
202
|
+
chunkFileDurationSeconds: 3600,
|
203
|
+
expiry: {
|
204
|
+
expire: 'byTime',
|
205
|
+
durationS: this.cfg.expiry_hours * 60 * 60
|
206
|
+
},
|
207
|
+
onClose: () => {
|
208
|
+
this.recorder = undefined;
|
209
|
+
}
|
210
|
+
});
|
211
|
+
this.videoKey = await this.norsk.processor.transform.streamKeyOverride({
|
212
|
+
streamKey: VideoKey
|
213
|
+
});
|
214
|
+
this.audioKey = await this.norsk.processor.transform.streamKeyOverride({
|
215
|
+
streamKey: AudioKey
|
216
|
+
});
|
217
|
+
this.recorder.subscribe([
|
218
|
+
{ source: this.videoKey, sourceSelector: norsk_sdk_1.selectVideo },
|
219
|
+
{ source: this.audioKey, sourceSelector: norsk_sdk_1.selectAudio }
|
220
|
+
]);
|
221
|
+
this.relatedMediaNodes.addInputs([this.audioKey, this.videoKey]);
|
222
|
+
const update = () => {
|
223
|
+
const work = async () => {
|
224
|
+
if (!this.recorder)
|
225
|
+
return;
|
226
|
+
const d = await this.recorder.metadata();
|
227
|
+
const timeline = d
|
228
|
+
.flatMap(({ streams }) => streams.flatMap((s) => s.versions.map((v) => ({
|
229
|
+
start: v.startDateTime.toISOString(),
|
230
|
+
duration_s: v.durationMs / 1000.0
|
231
|
+
}))));
|
232
|
+
this.updates.raiseEvent({
|
233
|
+
type: 'timeline-updated',
|
234
|
+
timeline
|
235
|
+
});
|
236
|
+
};
|
237
|
+
void work().then(() => {
|
238
|
+
if (this.recorder)
|
239
|
+
setTimeout(update, 1000);
|
240
|
+
});
|
241
|
+
};
|
242
|
+
update();
|
243
|
+
}
|
244
|
+
async makeCut(start, durationS) {
|
245
|
+
if (!this.recorder) {
|
246
|
+
(0, logging_1.warninglog)("Invalid state to start cut");
|
247
|
+
return;
|
248
|
+
}
|
249
|
+
if (this.cutting) {
|
250
|
+
(0, logging_1.warninglog)("Cut already in progress");
|
251
|
+
return;
|
252
|
+
}
|
253
|
+
this.cutting = true;
|
254
|
+
const cutId = ++this.cutIndex;
|
255
|
+
this.updates.raiseEvent({
|
256
|
+
type: 'cut-started',
|
257
|
+
id: cutId,
|
258
|
+
createdMs: new Date().valueOf()
|
259
|
+
});
|
260
|
+
const outputFile = idToPath(cutId, this.cfg);
|
261
|
+
await promises_1.default.mkdir(path_1.default.dirname(outputFile), { recursive: true });
|
262
|
+
const cut = this.norsk.mediaStore.makeCut({
|
263
|
+
id: `${this.id}-cut-${cutId}`,
|
264
|
+
fileFormat: 'mp4',
|
265
|
+
cuts: [
|
266
|
+
this.recorder.cutListEntry({
|
267
|
+
streamSelection: [[AudioKey, AudioKey], [VideoKey, VideoKey]],
|
268
|
+
trimPartialGops: false,
|
269
|
+
startDateTime: start,
|
270
|
+
durationMs: Math.round(durationS * 1000)
|
271
|
+
})
|
272
|
+
],
|
273
|
+
fileName: outputFile,
|
274
|
+
progressCb: (p) => {
|
275
|
+
this.updates.raiseEvent({
|
276
|
+
type: 'cut-progress',
|
277
|
+
percentage: p,
|
278
|
+
id: cutId
|
279
|
+
});
|
280
|
+
},
|
281
|
+
});
|
282
|
+
void cut.complete().then(() => {
|
283
|
+
this.cutting = false;
|
284
|
+
this.updates.raiseEvent({
|
285
|
+
type: 'cut-progress',
|
286
|
+
percentage: 100,
|
287
|
+
id: cutId
|
288
|
+
});
|
289
|
+
this.updates.raiseEvent({
|
290
|
+
type: 'cut-finished',
|
291
|
+
id: cutId
|
292
|
+
});
|
293
|
+
});
|
294
|
+
}
|
295
|
+
async subscribe(sources) {
|
296
|
+
this.audioKey?.subscribe(sources.filter((s) => s.isMedia("audio")).map((s) => s.select()));
|
297
|
+
this.videoKey?.subscribe(sources.filter((s) => s.isMedia("video")).map((s) => s.select()));
|
298
|
+
}
|
299
|
+
}
|
300
|
+
exports.Recorder = Recorder;
|
301
|
+
//# sourceMappingURL=runtime.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/output.recorder/runtime.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAkI;AAClI,wFAAuP;AACvP,iEAAoE;AAEpE,2DAA6B;AAE7B,gDAAwB;AACxB,yEAA6F;AAC7F,mEAA+F;AAC/F,mFAAwF;AAmCxF,SAAS,QAAQ,CAAC,EAAU,EAAE,GAAqB;IACjD,OAAO,cAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAqB,kBAAkB;IACrC,KAAK,CAAC,MAAM,CAAC,KAAY,EAAE,GAAqB,EAAE,EAAuB,EAAE,OAAqE;QAC9I,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,WAAW,CAAC;QACvB,EAAE,CAAC,IAAI,CAAC,CAAC;IACX,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAA,yBAAe,EAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;YACzD,MAAM,EAAE,kBAAkB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,QAAkB,EAAE,OAAwB;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;QACxB,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,UAAU;gBACb,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;gBAClE,MAAM;YACR;gBACE,IAAA,wBAAiB,EAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAA,eAAS,EACd,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAClC;YACE,WAAW,EAAE;gBACX,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;oBACxC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;gBAChD,CAAC;aACF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;oBACxC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;oBACnD,MAAM,aAAa,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAE9C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,EAAE,CAAC;wBACrF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAE5C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBACrC,OAAO;oBACT,CAAC;oBACD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBACzC,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;wBAC1B,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;wBACrB,UAAU,EAAE,CAAC;qBACd,CAAC,CAAA;oBAEF,MAAM,IAAA,uBAAgB,EAAC,GAAG,EAAE;wBAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;wBAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa;4BAAE,OAAO,IAAI,CAAC;wBACrF,OAAO,KAAK,CAAC;oBAEf,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;wBACb,IAAA,kBAAQ,EAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;wBAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxB,OAAO;oBACT,CAAC,CAAC,CAAA;oBAEF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;oBAE7C,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,aAAa,EAAE,CAAC;wBACxE,IAAA,oBAAU,EAAC,iDAAiD,CAAC,CAAC;wBAC9D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;wBAC7C,OAAO;oBACT,CAAC;oBAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE1C,IAAA,kBAAQ,EAAC,0BAA0B,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;oBAEjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;qBAChD,CAAC,CAAC;gBACL,CAAC;aACF;YACD,WAAW,EAAE;gBACX,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;oBACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAEvC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACnC,OAAO;oBACT,CAAC;oBAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;oBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;oBAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACtC,OAAO;oBACT,CAAC;oBAED,IAAI,MAAiB,CAAC;oBACtB,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,GAAG;4BACP,MAAM,EAAE,UAAU;4BAClB,GAAG,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;yBAC5C,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG;4BACP,MAAM,EAAE,aAAa;4BACrB,gBAAgB,EAAE,GAAG,CAAC,OAAO;yBAC9B,CAAC;oBACJ,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;aACF;YACD,oBAAoB,EAAE;gBACpB,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;oBACtC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAE3C,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;wBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACnC,OAAO;oBACT,CAAC;oBAED,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBACxC,MAAM,kBAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAC1C,OAAO;oBACT,CAAC,CAAC,CAAA;oBAEF,IAAA,kBAAQ,EAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;oBAC/C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACxB,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC3B,CAAC;aACF;SACF,CAAC,CAAC;IACP,CAAC;CACF;AAjJD,qCAiJC;AAGD,MAAM,QAAQ,GAAc;IAC1B,QAAQ,EAAE,GAAG;IACb,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,UAAU;IACtB,aAAa,EAAE,SAAS;CAEzB,CAAA;AACD,MAAM,QAAQ,GAAc;IAC1B,QAAQ,EAAE,GAAG;IACb,aAAa,EAAE,CAAC;IAChB,UAAU,EAAE,UAAU;IACtB,aAAa,EAAE,SAAS;CACzB,CAAA;AAED,MAAa,QAAQ;IACnB,WAAW,CAAgB;IAC3B,KAAK,CAAQ;IACb,OAAO,CAAgE;IACvE,QAAQ,CAA0B;IAClC,QAAQ,CAAyB;IACjC,QAAQ,CAAyB;IAEjC,EAAE,CAAS;IACX,GAAG,CAAmB;IACtB,OAAO,GAAY,KAAK,CAAC;IACzB,QAAQ,GAAW,CAAC,CAAC;IACrB,KAAK,CAAiB;IAEtB,YAAY,KAAY,EAAE,EAAE,OAAO,EAAgE,EAAE,GAAqB;QACxH,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,iCAAiB,EAAE,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;IAC7F,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC7B,IAAI,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM;gBAAE,SAAS;YACzC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,CAAC;gBAClC,IAAA,kBAAQ,EAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7C,IAAA,kBAAQ,EAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;gBACpC,CAAC,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB,CAAoB;IAErC,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YACnD,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,WAAW;YACzB,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU;YACzB,wBAAwB,EAAE,IAAI;YAC9B,MAAM,EAAE;gBACN,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE;aAC3C;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,CAAC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACrE,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACrE,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtB,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,uBAAW,EAAE;YACtD,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,uBAAW,EAAE;SACvD,CAAC,CAAA;QACF,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBAC3B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAoB,CAAC;qBAChC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACvB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACrB,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE;oBACpC,UAAU,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM;iBAClC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;oBACtB,IAAI,EAAE,kBAAkB;oBACxB,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC,CAAA;YACD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,IAAI,IAAI,CAAC,QAAQ;oBACf,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QACD,MAAM,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAW,EAAE,SAAiB;QAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAA,oBAAU,EAAC,4BAA4B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAA,oBAAU,EAAC,yBAAyB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;SAChC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YACxC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,QAAQ,KAAK,EAAE;YAC7B,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE;gBACJ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;oBACzB,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC7D,eAAe,EAAE,KAAK;oBACtB,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;iBACzC,CAAC;aACH;YACD,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;oBACtB,IAAI,EAAE,cAAc;oBACpB,UAAU,EAAE,CAAC;oBACb,EAAE,EAAE,KAAK;iBACV,CAAC,CAAA;YACJ,CAAC;SACF,CAAC,CAAA;QACF,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACtB,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE,GAAG;gBACf,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;YACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACtB,IAAI,EAAE,cAAc;gBACpB,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;QACJ,CAAC,CAAC,CAAC;IAEL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAqC;QAEnD,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAC1F,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5F,CAAC;CACF;AA5JD,4BA4JC"}
|
@@ -0,0 +1,225 @@
|
|
1
|
+
export interface paths {
|
2
|
+
"/timeline": {
|
3
|
+
parameters: {
|
4
|
+
query?: never;
|
5
|
+
header?: never;
|
6
|
+
path?: never;
|
7
|
+
cookie?: never;
|
8
|
+
};
|
9
|
+
get: {
|
10
|
+
parameters: {
|
11
|
+
query?: never;
|
12
|
+
header?: never;
|
13
|
+
path?: never;
|
14
|
+
cookie?: never;
|
15
|
+
};
|
16
|
+
requestBody?: never;
|
17
|
+
responses: {
|
18
|
+
200: {
|
19
|
+
headers: {
|
20
|
+
[name: string]: unknown;
|
21
|
+
};
|
22
|
+
content: {
|
23
|
+
"application/json": components["schemas"]["AvailableData"][];
|
24
|
+
};
|
25
|
+
};
|
26
|
+
};
|
27
|
+
};
|
28
|
+
put?: never;
|
29
|
+
post?: never;
|
30
|
+
delete?: never;
|
31
|
+
options?: never;
|
32
|
+
head?: never;
|
33
|
+
patch?: never;
|
34
|
+
trace?: never;
|
35
|
+
};
|
36
|
+
"/cut": {
|
37
|
+
parameters: {
|
38
|
+
query?: never;
|
39
|
+
header?: never;
|
40
|
+
path?: never;
|
41
|
+
cookie?: never;
|
42
|
+
};
|
43
|
+
get?: never;
|
44
|
+
put?: never;
|
45
|
+
post: {
|
46
|
+
parameters: {
|
47
|
+
query?: never;
|
48
|
+
header?: never;
|
49
|
+
path?: never;
|
50
|
+
cookie?: never;
|
51
|
+
};
|
52
|
+
requestBody?: {
|
53
|
+
content: {
|
54
|
+
"application/json": {
|
55
|
+
start: string;
|
56
|
+
duration_s: number;
|
57
|
+
};
|
58
|
+
};
|
59
|
+
};
|
60
|
+
responses: {
|
61
|
+
204: {
|
62
|
+
headers: {
|
63
|
+
[name: string]: unknown;
|
64
|
+
};
|
65
|
+
content: {
|
66
|
+
"application/json": {
|
67
|
+
url: string;
|
68
|
+
cutId: string;
|
69
|
+
};
|
70
|
+
};
|
71
|
+
};
|
72
|
+
400: {
|
73
|
+
headers: {
|
74
|
+
[name: string]: unknown;
|
75
|
+
};
|
76
|
+
content: {
|
77
|
+
"application/json": string;
|
78
|
+
};
|
79
|
+
};
|
80
|
+
};
|
81
|
+
};
|
82
|
+
delete?: never;
|
83
|
+
options?: never;
|
84
|
+
head?: never;
|
85
|
+
patch?: never;
|
86
|
+
trace?: never;
|
87
|
+
};
|
88
|
+
"/cut/{id}": {
|
89
|
+
parameters: {
|
90
|
+
query?: never;
|
91
|
+
header?: never;
|
92
|
+
path?: never;
|
93
|
+
cookie?: never;
|
94
|
+
};
|
95
|
+
get: {
|
96
|
+
parameters: {
|
97
|
+
query?: never;
|
98
|
+
header?: never;
|
99
|
+
path: {
|
100
|
+
id: number;
|
101
|
+
};
|
102
|
+
cookie?: never;
|
103
|
+
};
|
104
|
+
requestBody?: never;
|
105
|
+
responses: {
|
106
|
+
200: {
|
107
|
+
headers: {
|
108
|
+
[name: string]: unknown;
|
109
|
+
};
|
110
|
+
content: {
|
111
|
+
"application/json": components["schemas"]["CutStatus"];
|
112
|
+
};
|
113
|
+
};
|
114
|
+
404: {
|
115
|
+
headers: {
|
116
|
+
[name: string]: unknown;
|
117
|
+
};
|
118
|
+
content: {
|
119
|
+
"application/json": string;
|
120
|
+
};
|
121
|
+
};
|
122
|
+
};
|
123
|
+
};
|
124
|
+
put?: never;
|
125
|
+
post?: never;
|
126
|
+
delete?: never;
|
127
|
+
options?: never;
|
128
|
+
head?: never;
|
129
|
+
patch?: never;
|
130
|
+
trace?: never;
|
131
|
+
};
|
132
|
+
"/download/{cut_id}": {
|
133
|
+
parameters: {
|
134
|
+
query?: never;
|
135
|
+
header?: never;
|
136
|
+
path?: never;
|
137
|
+
cookie?: never;
|
138
|
+
};
|
139
|
+
get: {
|
140
|
+
parameters: {
|
141
|
+
query?: never;
|
142
|
+
header?: never;
|
143
|
+
path: {
|
144
|
+
cut_id: number;
|
145
|
+
};
|
146
|
+
cookie?: never;
|
147
|
+
};
|
148
|
+
requestBody?: never;
|
149
|
+
responses: {
|
150
|
+
200: {
|
151
|
+
headers: {
|
152
|
+
[name: string]: unknown;
|
153
|
+
};
|
154
|
+
content: {
|
155
|
+
"video/mp4": string;
|
156
|
+
};
|
157
|
+
};
|
158
|
+
404: {
|
159
|
+
headers: {
|
160
|
+
[name: string]: unknown;
|
161
|
+
};
|
162
|
+
content: {
|
163
|
+
"application/json": {
|
164
|
+
message: string;
|
165
|
+
};
|
166
|
+
};
|
167
|
+
};
|
168
|
+
500: {
|
169
|
+
headers: {
|
170
|
+
[name: string]: unknown;
|
171
|
+
};
|
172
|
+
content: {
|
173
|
+
"application/json": {
|
174
|
+
message: string;
|
175
|
+
};
|
176
|
+
};
|
177
|
+
};
|
178
|
+
};
|
179
|
+
};
|
180
|
+
put?: never;
|
181
|
+
post?: never;
|
182
|
+
delete?: never;
|
183
|
+
options?: never;
|
184
|
+
head?: never;
|
185
|
+
patch?: never;
|
186
|
+
trace?: never;
|
187
|
+
};
|
188
|
+
}
|
189
|
+
export type webhooks = Record<string, never>;
|
190
|
+
export interface components {
|
191
|
+
schemas: {
|
192
|
+
RecorderSettings: {
|
193
|
+
id: string;
|
194
|
+
displayName: string;
|
195
|
+
store_path: string;
|
196
|
+
cuts_path: string;
|
197
|
+
expiry_hours: number;
|
198
|
+
pruneIntervalMs?: number | null;
|
199
|
+
};
|
200
|
+
AvailableData: {
|
201
|
+
start: string;
|
202
|
+
duration_s: number;
|
203
|
+
};
|
204
|
+
CutNotReady: {
|
205
|
+
status: "CutNotReady";
|
206
|
+
percent_complete: number;
|
207
|
+
};
|
208
|
+
CutReady: {
|
209
|
+
status: "CutReady";
|
210
|
+
url: string;
|
211
|
+
};
|
212
|
+
CutFailed: {
|
213
|
+
status: "CutFailed";
|
214
|
+
reason: string;
|
215
|
+
};
|
216
|
+
CutStatus: components["schemas"]["CutNotReady"] | components["schemas"]["CutReady"] | components["schemas"]["CutFailed"];
|
217
|
+
};
|
218
|
+
responses: never;
|
219
|
+
parameters: never;
|
220
|
+
requestBodies: never;
|
221
|
+
headers: never;
|
222
|
+
pathItems: never;
|
223
|
+
}
|
224
|
+
export type $defs = Record<string, never>;
|
225
|
+
export type operations = Record<string, never>;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/output.recorder/types.ts"],"names":[],"mappings":""}
|