@nxtedition/types 23.1.2 → 23.1.4

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.
Files changed (53) hide show
  1. package/dist/app.d.ts +7 -1
  2. package/dist/common/index.d.ts +3 -0
  3. package/dist/common/index.js +3 -0
  4. package/dist/common/json-schema.d.ts +95 -0
  5. package/dist/common/json-schema.js +1 -0
  6. package/dist/common/nxtpression.d.ts +1 -1
  7. package/dist/common/panel-property.d.ts +2 -29
  8. package/dist/common/print.d.ts +30 -0
  9. package/dist/common/print.js +1 -0
  10. package/dist/common/render-scene.d.ts +73 -12
  11. package/dist/common/schema-property.d.ts +36 -4
  12. package/dist/common/settings.d.ts +72 -43
  13. package/dist/common/settings.js +18 -1
  14. package/dist/common/widget.d.ts +16 -0
  15. package/dist/common/widget.js +1 -0
  16. package/dist/nxtpression.d.ts +745 -170
  17. package/dist/records/domains/condition.d.ts +1 -1
  18. package/dist/records/domains/connection/file/smb.d.ts +2 -0
  19. package/dist/records/domains/event.d.ts +10 -3
  20. package/dist/records/domains/gallery.d.ts +8 -0
  21. package/dist/records/domains/gallery.js +1 -0
  22. package/dist/records/domains/index.d.ts +9 -1
  23. package/dist/records/domains/index.js +4 -0
  24. package/dist/records/domains/ingestschedule.d.ts +1 -1
  25. package/dist/records/domains/media.d.ts +4 -0
  26. package/dist/records/domains/panel.d.ts +7 -19
  27. package/dist/records/domains/publish/file-legacy.d.ts +1 -1
  28. package/dist/records/domains/render.d.ts +54 -3
  29. package/dist/records/domains/role.d.ts +8 -0
  30. package/dist/records/domains/schema.d.ts +21 -0
  31. package/dist/records/domains/schema.js +1 -0
  32. package/dist/records/domains/search.d.ts +1 -1
  33. package/dist/records/domains/storage.d.ts +87 -0
  34. package/dist/records/domains/storage.js +1 -0
  35. package/dist/records/domains/stream.d.ts +80 -0
  36. package/dist/records/domains/stream.js +1 -0
  37. package/dist/records/domains/template.d.ts +34 -0
  38. package/dist/records/exact/asset.d.ts +17 -7
  39. package/dist/records/exact/index.d.ts +6 -0
  40. package/dist/records/exact/monitor.d.ts +1 -0
  41. package/dist/records/index.d.ts +1 -1
  42. package/dist/records/utils.d.ts +5 -1
  43. package/dist/records/validate/assert-guard.js +9235 -4387
  44. package/dist/records/validate/assert.js +9359 -4496
  45. package/dist/records/validate/is.js +224 -115
  46. package/dist/records/validate/schemas.d.ts +3 -10
  47. package/dist/records/validate/schemas.js +5652 -1454
  48. package/dist/records/validate/stringify.js +853 -180
  49. package/dist/records/validate/utils.d.ts +1 -1
  50. package/dist/records/validate/utils.js +2 -2
  51. package/dist/records/validate/validate-equals.js +11393 -5018
  52. package/dist/records/validate/validate.js +10257 -6113
  53. package/package.json +1 -1
@@ -58,6 +58,7 @@ declare interface AssetCreatedProvidedRecord {
58
58
 
59
59
  declare interface AssetDaemonRecord {
60
60
  "user-notify"?: boolean;
61
+ validate?: boolean;
61
62
  }
62
63
 
63
64
  declare interface AssetDaemonUserNotifyStateRecord {
@@ -65,6 +66,11 @@ declare interface AssetDaemonUserNotifyStateRecord {
65
66
  version?: number;
66
67
  }
67
68
 
69
+ declare interface AssetDaemonValidateStateRecord {
70
+ since?: string | 0 | null;
71
+ version?: number;
72
+ }
73
+
68
74
  declare interface AssetDeadlinesRecord {
69
75
  value?: Nxtpression<string, {
70
76
  id: string;
@@ -173,6 +179,12 @@ declare interface AssetFileRefsProvidedRecord {
173
179
  value?: string[];
174
180
  }
175
181
 
182
+ declare interface AssetHttpRecord {
183
+ whitelist?: string[] | null;
184
+ blacklist?: string[] | null;
185
+ allowImport?: boolean;
186
+ }
187
+
176
188
  declare interface AssetIconRecord {
177
189
  value?: Nxtpression<string, {
178
190
  id: string;
@@ -333,6 +345,7 @@ declare interface AssetRecords {
333
345
  "asset.tags": AssetTagsRecord;
334
346
  "asset.title": AssetTitleRecord;
335
347
  "asset.types": AssetTypesRecord;
348
+ "asset.http": AssetHttpRecord;
336
349
  }
337
350
 
338
351
  declare interface AssetRef {
@@ -399,6 +412,38 @@ declare interface AuthDomainRecords {
399
412
  ":auth": AuthDomainRecord;
400
413
  }
401
414
 
415
+ declare interface BaseSchemaProperty<Value = unknown> {
416
+ domain?: string;
417
+ path?: string;
418
+ /** Specifying what type of data will be entered into the field. */
419
+ type?: "array" | "asset" | "boolean" | "datetime" | "number" | "string" | "object" | "rpc" | undefined;
420
+ /** User-friendly title of the property. This will be used as the field's label in the UI. */
421
+ title?: string;
422
+ description?: string;
423
+ /** If present, indicates that the user must specify a value for the asset to be treated as valid. */
424
+ required?: boolean;
425
+ oneOf?: Array<BaseSchemaProperty>;
426
+ anyOf?: Array<BaseSchemaProperty>;
427
+ enum?: ReadonlyArray<Value>;
428
+ widget?: WidgetType | WidgetOptions;
429
+ placeholder?: string;
430
+ helpText?: string;
431
+ invalid?: boolean;
432
+ emptyValue?: Value;
433
+ minItems?: number;
434
+ maxItems?: number;
435
+ items?: BaseSchemaProperty<Value>;
436
+ properties?: Record<string, BaseSchemaProperty<unknown>>;
437
+ computed?: Nxtpression<Value>;
438
+ /** An object specifying where to index the data. Adding this will effectively make the data searchable. */
439
+ index?: {
440
+ /** A string specifying the user-friendly title of the search property. This is what users will see when creating search filters and bookmarks. */
441
+ label: string;
442
+ /** A string specifying where to store the data in the search index. Note that this should be a globally unique value in the system. Typically you'd use `{domain}.{path}` and you should prefer English in camel case */
443
+ path: string;
444
+ };
445
+ }
446
+
402
447
  declare interface BundleDomainRecords {
403
448
  [":bundle"]: BundleRecord;
404
449
  [":bundle.revisions"]: BundleRevisionsRecord;
@@ -648,23 +693,30 @@ declare interface DeviceDomainStatusRecord {
648
693
  version?: string;
649
694
  }
650
695
 
651
- declare interface DomainRecords extends AssetDomainRecords, AuthDomainRecords, BundleDomainRecords, CalendarEventDomainRecords, CloneDomainRecords, CommentReactionDomainRecords, CommentReadMarkDomainRecords, CommentDomainRecords, ConditionDomainRecords, ConnectionDomainRecords, ContactDomainRecords, DeepstreamDomainRecords, DesignDomainRecords, DeviceDomainRecords, EditDomainRecords, EventDomainRecords, FileDomainRecords, FolderDomainRecords, GeneralDomainRecords, HarvestDomainRecords, IngestclipDomainRecords, IngestScheduleDomainRecords, MediaDomainRecords, MonitorDomainRecords, NoteDomainRecords, PanelDomainRecords, PermissionDomainRecords, PipelinePresetDomainRecords, PipelineDomainRecords, PlanningDomainRecords, PrompterDomainRecords, PublishDomainRecords, PublishedDomainRecords, RenderPresetDomainRecords, RenderDomainRecords, RevsDomainRecords, RoleDomainRecords, ScriptDomainRecords, SearchDomainRecords, SettingsDomainRecords, ShotboxDomainRecords, StoryboardDomainRecords, SubtitleStyleDomainRecords, SubtitleDomainRecords, TemplateDomainRecords, UserNotificationStatusDomainRecords, UserNotificationDomainRecords, UserDomainRecords, UsernameDomainRecords {
696
+ declare interface DomainRecords extends AssetDomainRecords, AuthDomainRecords, BundleDomainRecords, CalendarEventDomainRecords, CloneDomainRecords, CommentReactionDomainRecords, CommentReadMarkDomainRecords, CommentDomainRecords, ConditionDomainRecords, ConnectionDomainRecords, ContactDomainRecords, DeepstreamDomainRecords, DesignDomainRecords, DeviceDomainRecords, EditDomainRecords, EventDomainRecords, FileDomainRecords, FolderDomainRecords, GalleryDomainRecords, GeneralDomainRecords, HarvestDomainRecords, IngestclipDomainRecords, IngestScheduleDomainRecords, MediaDomainRecords, MonitorDomainRecords, NoteDomainRecords, PanelDomainRecords, PermissionDomainRecords, PipelinePresetDomainRecords, PipelineDomainRecords, PlanningDomainRecords, PrompterDomainRecords, PublishDomainRecords, PublishedDomainRecords, RenderPresetDomainRecords, RenderDomainRecords, RevsDomainRecords, RoleDomainRecords, SchemaDomainRecords, ScriptDomainRecords, SearchDomainRecords, SettingsDomainRecords, ShotboxDomainRecords, StorageDomainRecords, StoryboardDomainRecords, StreamDomainRecords, SubtitleStyleDomainRecords, SubtitleDomainRecords, TemplateDomainRecords, UserNotificationStatusDomainRecords, UserNotificationDomainRecords, UserDomainRecords, UsernameDomainRecords {
652
697
  }
653
698
 
654
699
  declare type Dynamic = false | string[];
655
700
 
701
+ declare interface DynamicPanelProperty extends DynamicPropertyBase, Omit<PanelProperty, "path" | "domain"> {
702
+ /** ID of the panel asset that defines this property */
703
+ panel: string;
704
+ }
705
+
656
706
  /**
657
707
  * Dynamic property definition.
658
708
  * Properties come from :panel assets or :schema assets.
659
709
  */
660
- declare interface DynamicProperty extends Omit<PanelProperty, "path">, Omit<SchemaProperty, "path"> {
661
- /** ID of the panel asset that defines this property (for panel-sourced properties) */
662
- panel?: string;
663
- /** ID of the schema asset that defines this property (for schema-sourced properties) */
664
- schema?: string;
665
- /** List of asset types this property supports */
666
- supports: string[];
710
+ declare type DynamicProperty = DynamicPanelProperty | DynamicSchemaProperty;
711
+
712
+ declare interface DynamicPropertyBase {
667
713
  path: string;
714
+ domain: string;
715
+ }
716
+
717
+ declare interface DynamicSchemaProperty extends DynamicPropertyBase, Omit<SchemaProperty, "path" | "domain"> {
718
+ /** ID of the schema asset that defines this property */
719
+ schema: string;
668
720
  }
669
721
 
670
722
  declare interface EditDomainRecords {
@@ -694,6 +746,10 @@ declare interface EmptyConnectionRecord extends ConnectionBase {
694
746
  type?: null;
695
747
  }
696
748
 
749
+ declare type EmptyObject = {
750
+ [emptyObjectSymbol]?: never;
751
+ };
752
+
697
753
  /**
698
754
  Represents a strictly empty plain object, the `{}` value.
699
755
 
@@ -711,8 +767,11 @@ declare interface EmptyConnectionRecord extends ConnectionBase {
711
767
 
712
768
  // With `EmptyObject` only the first case is valid.
713
769
  const bar1: EmptyObject = {}; // Pass
714
- const bar2: EmptyObject = 42; // Fail
715
- const bar3: EmptyObject = []; // Fail
770
+ // @ts-expect-error
771
+ const bar2: EmptyObject = []; // Fail
772
+ // @ts-expect-error
773
+ const bar3: EmptyObject = 42; // Fail
774
+ // @ts-expect-error
716
775
  const bar4: EmptyObject = {a: 1}; // Fail
717
776
  ```
718
777
 
@@ -720,10 +779,12 @@ declare interface EmptyConnectionRecord extends ConnectionBase {
720
779
 
721
780
  @category Object
722
781
  */
723
- declare type EmptyObject = {[emptyObjectSymbol]?: never};
782
+ declare type EmptyObject_2 = {[emptyObjectSymbol_2]?: never};
724
783
 
725
784
  declare const emptyObjectSymbol: unique symbol;
726
785
 
786
+ declare const emptyObjectSymbol_2: unique symbol;
787
+
727
788
  declare interface EmptyPublishDef extends PublishDef<null> {
728
789
  publish: EmptyPublishRecord;
729
790
  }
@@ -755,6 +816,7 @@ declare interface EventDomainRecords {
755
816
  ":event.duration?": EventDurationRecord;
756
817
  ":event.children?": EventChildrenRecord;
757
818
  ":event.props?": EventPropsRecord;
819
+ ":event.stats?": EventStatsRecord;
758
820
  }
759
821
 
760
822
  declare interface EventDurationRecord {
@@ -780,6 +842,7 @@ declare interface EventOverlayRecord {
780
842
  declare type EventProps = {
781
843
  source?: string;
782
844
  cueCard?: boolean | string;
845
+ printRundownColor?: string;
783
846
  startTime?: number;
784
847
  shotboxGroup?: string | string[];
785
848
  shotboxVisible?: boolean;
@@ -788,21 +851,27 @@ declare type EventProps = {
788
851
  declare type EventPropsRecord = EventProps & Record<Exclude<string, keyof EventProps>, JsonValue>;
789
852
 
790
853
  declare interface EventRecord {
791
- start?: number;
792
- end?: number;
793
- duration?: number;
854
+ start?: number | null;
855
+ end?: number | null;
856
+ duration?: number | null;
857
+ position?: string;
794
858
  text?: string;
795
859
  lang?: string;
796
860
  style?: string;
797
861
  styleOverrides?: SubtitleEventStyleOverrides;
798
862
  }
799
863
 
864
+ declare interface EventStatsRecord {
865
+ type?: string;
866
+ }
867
+
800
868
  declare interface EventTemplateRecord {
801
869
  mixin?: string[];
802
870
  properties?: object;
803
871
  layout?: {
804
872
  title?: string;
805
873
  };
874
+ controller?: string;
806
875
  }
807
876
 
808
877
  declare type ExactRecords = MiscRecords & MediaRecords & AssetRecords & MonitorRecords & StorageRecords;
@@ -957,9 +1026,11 @@ declare interface FileConnectionSmbRecord extends FileConnectionBase {
957
1026
  protocol?: "smb";
958
1027
  host?: string;
959
1028
  share?: string;
1029
+ root?: string;
960
1030
  workgroup?: string;
961
1031
  username?: string;
962
1032
  password?: string;
1033
+ createFolders?: boolean;
963
1034
  }
964
1035
 
965
1036
  declare interface FileDomainRecords {
@@ -1114,14 +1185,14 @@ declare interface FolderItemsDomainRecord {
1114
1185
  value: string[];
1115
1186
  }
1116
1187
 
1117
- declare interface FontFace_2 {
1188
+ declare interface FontFace {
1118
1189
  name: string;
1119
1190
  family: string;
1120
1191
  asset: string;
1121
1192
  url: string;
1122
1193
  weight: number;
1123
1194
  style: "normal" | "italic";
1124
- ranges: Range_2[];
1195
+ ranges: Range[];
1125
1196
  }
1126
1197
 
1127
1198
  declare interface FormattedTextNodeContent {
@@ -1131,6 +1202,16 @@ declare interface FormattedTextNodeContent {
1131
1202
  format?: number;
1132
1203
  }
1133
1204
 
1205
+ declare interface GalleryDomainRecord {
1206
+ sources?: {
1207
+ program?: string;
1208
+ };
1209
+ }
1210
+
1211
+ declare interface GalleryDomainRecords {
1212
+ ":gallery": GalleryDomainRecord;
1213
+ }
1214
+
1134
1215
  declare interface GeneralAssetRecord {
1135
1216
  title?: string;
1136
1217
  tags?: string;
@@ -1305,7 +1386,7 @@ declare interface HttpConnectionResponseHandler<ResOutput = undefined> {
1305
1386
 
1306
1387
  @example
1307
1388
  ```
1308
- import {If} from 'type-fest';
1389
+ import type {If} from 'type-fest';
1309
1390
 
1310
1391
  type A = If<true, 'yes', 'no'>;
1311
1392
  //=> 'yes'
@@ -1325,7 +1406,7 @@ declare interface HttpConnectionResponseHandler<ResOutput = undefined> {
1325
1406
 
1326
1407
  @example
1327
1408
  ```
1328
- import {If, IsAny, IsNever} from 'type-fest';
1409
+ import type {If, IsAny, IsNever} from 'type-fest';
1329
1410
 
1330
1411
  type A = If<IsAny<unknown>, 'is any', 'not any'>;
1331
1412
  //=> 'not any'
@@ -1336,7 +1417,7 @@ declare interface HttpConnectionResponseHandler<ResOutput = undefined> {
1336
1417
 
1337
1418
  @example
1338
1419
  ```
1339
- import {If, IsEqual} from 'type-fest';
1420
+ import type {If, IsEqual} from 'type-fest';
1340
1421
 
1341
1422
  type IfEqual<T, U, IfBranch, ElseBranch> = If<IsEqual<T, U>, IfBranch, ElseBranch>;
1342
1423
 
@@ -1347,6 +1428,41 @@ declare interface HttpConnectionResponseHandler<ResOutput = undefined> {
1347
1428
  //=> 'not equal'
1348
1429
  ```
1349
1430
 
1431
+ Note: Sometimes using the `If` type can make an implementation non–tail-recursive, which can impact performance. In such cases, it’s better to use a conditional directly. Refer to the following example:
1432
+
1433
+ @example
1434
+ ```
1435
+ import type {If, IsEqual, StringRepeat} from 'type-fest';
1436
+
1437
+ type HundredZeroes = StringRepeat<'0', 100>;
1438
+
1439
+ // The following implementation is not tail recursive
1440
+ type Includes<S extends string, Char extends string> =
1441
+ S extends `${infer First}${infer Rest}`
1442
+ ? If<IsEqual<First, Char>,
1443
+ 'found',
1444
+ Includes<Rest, Char>>
1445
+ : 'not found';
1446
+
1447
+ // Hence, instantiations with long strings will fail
1448
+ // @ts-expect-error
1449
+ type Fails = Includes<HundredZeroes, '1'>;
1450
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1451
+ // Error: Type instantiation is excessively deep and possibly infinite.
1452
+
1453
+ // However, if we use a simple conditional instead of `If`, the implementation becomes tail-recursive
1454
+ type IncludesWithoutIf<S extends string, Char extends string> =
1455
+ S extends `${infer First}${infer Rest}`
1456
+ ? IsEqual<First, Char> extends true
1457
+ ? 'found'
1458
+ : IncludesWithoutIf<Rest, Char>
1459
+ : 'not found';
1460
+
1461
+ // Now, instantiations with long strings will work
1462
+ type Works = IncludesWithoutIf<HundredZeroes, '1'>;
1463
+ //=> 'not found'
1464
+ ```
1465
+
1350
1466
  @category Type Guard
1351
1467
  @category Utilities
1352
1468
  */
@@ -1430,7 +1546,7 @@ declare type InternalIsUnion<T, U = T> =
1430
1546
  IsNever<T> extends true
1431
1547
  ? false
1432
1548
  : T extends any
1433
- ? [U] extends [T]
1549
+ ? IsEqual<U, T> extends true
1434
1550
  ? false
1435
1551
  : true
1436
1552
  : never
@@ -1450,14 +1566,53 @@ declare type InternalIsUnion<T, U = T> =
1450
1566
  import type {IsEmptyObject} from 'type-fest';
1451
1567
 
1452
1568
  type Pass = IsEmptyObject<{}>; //=> true
1453
- type Fail = IsEmptyObject<[]>; //=> false
1454
- type Fail = IsEmptyObject<null>; //=> false
1569
+ type Fail1 = IsEmptyObject<[]>; //=> false
1570
+ type Fail2 = IsEmptyObject<null>; //=> false
1455
1571
  ```
1456
1572
 
1457
- @see EmptyObject
1573
+ @see {@link EmptyObject}
1458
1574
  @category Object
1459
1575
  */
1460
- declare type IsEmptyObject<T> = T extends EmptyObject ? true : false;
1576
+ declare type IsEmptyObject<T> = T extends EmptyObject_2 ? true : false;
1577
+
1578
+ /**
1579
+ Returns a boolean for whether the two given types are equal.
1580
+
1581
+ @link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
1582
+ @link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796
1583
+
1584
+ Use-cases:
1585
+ - If you want to make a conditional branch based on the result of a comparison of two types.
1586
+
1587
+ @example
1588
+ ```
1589
+ import type {IsEqual} from 'type-fest';
1590
+
1591
+ // This type returns a boolean for whether the given array includes the given item.
1592
+ // `IsEqual` is used to compare the given array at position 0 and the given item and then return true if they are equal.
1593
+ type Includes<Value extends readonly any[], Item> =
1594
+ Value extends readonly [Value[0], ...infer rest]
1595
+ ? IsEqual<Value[0], Item> extends true
1596
+ ? true
1597
+ : Includes<rest, Item>
1598
+ : false;
1599
+ ```
1600
+
1601
+ @category Type Guard
1602
+ @category Utilities
1603
+ */
1604
+ declare type IsEqual<A, B> =
1605
+ [A] extends [B]
1606
+ ? [B] extends [A]
1607
+ ? _IsEqual<A, B>
1608
+ : false
1609
+ : false;
1610
+
1611
+ declare type _IsEqual<A, B> =
1612
+ (<G>() => G extends A & G | G ? 1 : 2) extends
1613
+ (<G>() => G extends B & G | G ? 1 : 2)
1614
+ ? true
1615
+ : false;
1461
1616
 
1462
1617
  /**
1463
1618
  Returns a boolean for whether the given type is `never`.
@@ -1472,29 +1627,41 @@ declare type IsEmptyObject<T> = T extends EmptyObject ? true : false;
1472
1627
  ```
1473
1628
  import type {IsNever, And} from 'type-fest';
1474
1629
 
1475
- // https://github.com/andnp/SimplyTyped/blob/master/src/types/strings.ts
1476
- type AreStringsEqual<A extends string, B extends string> =
1477
- And<
1478
- IsNever<Exclude<A, B>> extends true ? true : false,
1479
- IsNever<Exclude<B, A>> extends true ? true : false
1480
- >;
1481
-
1482
- type EndIfEqual<I extends string, O extends string> =
1483
- AreStringsEqual<I, O> extends true
1484
- ? never
1485
- : void;
1486
-
1487
- function endIfEqual<I extends string, O extends string>(input: I, output: O): EndIfEqual<I, O> {
1488
- if (input === output) {
1489
- process.exit(0);
1490
- }
1491
- }
1492
-
1493
- endIfEqual('abc', 'abc');
1630
+ type A = IsNever<never>;
1631
+ //=> true
1632
+
1633
+ type B = IsNever<any>;
1634
+ //=> false
1635
+
1636
+ type C = IsNever<unknown>;
1637
+ //=> false
1638
+
1639
+ type D = IsNever<never[]>;
1640
+ //=> false
1641
+
1642
+ type E = IsNever<object>;
1643
+ //=> false
1644
+
1645
+ type F = IsNever<string>;
1646
+ //=> false
1647
+ ```
1648
+
1649
+ @example
1650
+ ```
1651
+ import type {IsNever} from 'type-fest';
1652
+
1653
+ type IsTrue<T> = T extends true ? true : false;
1654
+
1655
+ // When a distributive conditional is instantiated with `never`, the entire conditional results in `never`.
1656
+ type A = IsTrue<never>;
1494
1657
  //=> never
1495
1658
 
1496
- endIfEqual('abc', '123');
1497
- //=> void
1659
+ // If you don't want that behaviour, you can explicitly add an `IsNever` check before the distributive conditional.
1660
+ type IsTrueFixed<T> =
1661
+ IsNever<T> extends true ? false : T extends true ? true : false;
1662
+
1663
+ type B = IsTrueFixed<never>;
1664
+ //=> false
1498
1665
  ```
1499
1666
 
1500
1667
  @category Type Guard
@@ -1534,13 +1701,6 @@ declare type KeyedProvidedDomainRecords = {
1534
1701
  [Domain in ProvidedDomainKeys as `${string}${Domain}${string}`]: GettablePossibleEmpty<DomainRecords[Domain]>;
1535
1702
  };
1536
1703
 
1537
- declare interface KeymapSetting {
1538
- title?: string;
1539
- sequence?: string;
1540
- }
1541
-
1542
- declare type LayoutWidget = WidgetType | WidgetItem;
1543
-
1544
1704
  declare interface LinkNodeContent {
1545
1705
  type: "link" | "autolink";
1546
1706
  children: FormattedTextNodeContent[];
@@ -1623,6 +1783,11 @@ declare interface MediaDomainRecords {
1623
1783
  ":media.probe?": MediaProbeRecord;
1624
1784
  ":media.updateSubtitles?": MediaDomainUpdateSubtitlesRecord;
1625
1785
  ":media.updateGraphics?": MediaDomainUpdateGraphicsRecord;
1786
+ ":media.revisions": MediaDomainRevisionsRecord;
1787
+ }
1788
+
1789
+ declare interface MediaDomainRevisionsRecord {
1790
+ [revisionId: string]: RenderSceneObject;
1626
1791
  }
1627
1792
 
1628
1793
  declare interface MediaDomainUpdateGraphicsRecord {
@@ -1638,8 +1803,8 @@ declare interface MediaFontRecord {
1638
1803
  }
1639
1804
 
1640
1805
  declare interface MediaFonts {
1641
- fontFaces?: FontFace_2[];
1642
- fontFamilyNames?: Array<FontFace_2["family"]>;
1806
+ fontFaces?: FontFace[];
1807
+ fontFamilyNames?: Array<FontFace["family"]>;
1643
1808
  }
1644
1809
 
1645
1810
  declare interface MediaProbeRecord {
@@ -1770,6 +1935,7 @@ declare type Minimum<Value extends number | bigint> = TagBase<{
1770
1935
  declare interface MiscRecords {
1771
1936
  "asset-daemon": AssetDaemonRecord;
1772
1937
  "asset-daemon:user-notify.state": AssetDaemonUserNotifyStateRecord;
1938
+ "asset-daemon:validate.state": AssetDaemonValidateStateRecord;
1773
1939
  "deepstream-replicator.stats?": DeepstreamReplicatorStatsRecord;
1774
1940
  }
1775
1941
 
@@ -1949,7 +2115,7 @@ declare interface NxtError {
1949
2115
  errors?: NxtError[] | null;
1950
2116
  }
1951
2117
 
1952
- declare type Nxtpression<ReturnValue = unknown, Context extends object = object> = {
2118
+ declare type Nxtpression<ReturnValue = unknown, Context extends Record<string, unknown> = Record<string, unknown>> = {
1953
2119
  /**
1954
2120
  * TS-HACK: this property doesn't really exist on the nxtpression string,
1955
2121
  * it is only here to make sure the generic Context won't get stripped.
@@ -2009,6 +2175,7 @@ declare interface NxtStatusMessage {
2009
2175
  title: string;
2010
2176
  url: string;
2011
2177
  };
2178
+ data?: unknown;
2012
2179
  }
2013
2180
 
2014
2181
  declare interface NxtStatusNode extends NxtStatusObject {
@@ -2227,8 +2394,16 @@ declare interface Operator<T, R> {
2227
2394
  declare interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Observable<R>> {
2228
2395
  }
2229
2396
 
2397
+ declare type PageOrientation = "landscape" | "portrait";
2398
+
2399
+ declare type PageSize = "A5" | "A4" | "A3";
2400
+
2230
2401
  declare interface PanelDomainPanelRecord {
2231
2402
  title?: string;
2403
+ /**
2404
+ * - If an array: interpreted as a list of supported asset types
2405
+ * - If a string: interpreted as the ID of a search which contains supported assets
2406
+ */
2232
2407
  supports?: string[] | string;
2233
2408
  priority?: number;
2234
2409
  editorPriority?: number;
@@ -2236,8 +2411,8 @@ declare interface PanelDomainPanelRecord {
2236
2411
  [key: string]: PanelProperty;
2237
2412
  };
2238
2413
  layout?: {
2239
- panel?: PanelLayout;
2240
- editor?: PanelLayout;
2414
+ panel?: WidgetLayout;
2415
+ editor?: WidgetLayout;
2241
2416
  };
2242
2417
  filter?: Nxtpression;
2243
2418
  expand?: Nxtpression;
@@ -2247,47 +2422,7 @@ declare interface PanelDomainRecords {
2247
2422
  ":panel": PanelDomainPanelRecord;
2248
2423
  }
2249
2424
 
2250
- declare type PanelLayout = string | PanelLayoutDivider | PanelLayoutItem | PanelLayout[];
2251
-
2252
- declare interface PanelLayoutDivider {
2253
- type: "divider";
2254
- title?: string;
2255
- }
2256
-
2257
- declare interface PanelLayoutItem {
2258
- property: string;
2259
- width?: string | number;
2260
- widget?: LayoutWidget;
2261
- }
2262
-
2263
- declare interface PanelProperty<Value = unknown> {
2264
- /** Specifying what type of data will be entered into the field. */
2265
- type: "array" | "asset" | "boolean" | "datetime" | "number" | "string" | "object" | "rpc";
2266
- /** User-friendly title of the property. This will be used as the field's label in the UI. */
2267
- title?: string;
2268
- description?: string;
2269
- domain?: string;
2270
- path?: string;
2271
- computed?: Nxtpression<Value>;
2272
- /** An object specifying where to index the data. Adding this will effectively make the data searchable. */
2273
- index?: {
2274
- /** A string specifying the user-friendly title of the search property. This is what users will see when creating search filters and bookmarks. */
2275
- label: string;
2276
- /** A string specifying where to store the data in the search index. Note that this should be a globally unique value in the system. Typically you'd use `{domain}.{path}` and you should prefer English in camel case */
2277
- path: string;
2278
- };
2279
- /** If present, indicates that the user must specify a value for the asset to be treated as valid. */
2280
- required?: boolean;
2281
- oneOf?: Array<{
2282
- const?: Value;
2283
- title?: string;
2284
- }>;
2285
- anyOf?: Array<{
2286
- const?: Value;
2287
- title?: string;
2288
- }>;
2289
- enum?: Value[];
2290
- }
2425
+ declare type PanelProperty<Value = unknown> = BaseSchemaProperty<Value>;
2291
2426
 
2292
2427
  declare interface ParagraphNodeContent extends ElementNodeContent {
2293
2428
  type: "paragraph";
@@ -2384,6 +2519,39 @@ declare interface PlanningRecord {
2384
2519
  deadline?: string | null;
2385
2520
  }
2386
2521
 
2522
+ declare type PrintOptionalScriptNodes = "event" | "event-data" | "comment" | "heading" | "list" | "quote" | "paragraph" | "horizontalrule";
2523
+
2524
+ declare type PrintOptions = PrintScriptOptions | PrintRundownOptions;
2525
+
2526
+ declare interface PrintOptionsBase {
2527
+ title: string;
2528
+ horizontalMargin: number;
2529
+ pageSize: PageSize;
2530
+ orientation: PageOrientation;
2531
+ fontSize: number;
2532
+ fontFamily?: string;
2533
+ hide: PrintOptionalScriptNodes[];
2534
+ }
2535
+
2536
+ declare interface PrintRundownColumn {
2537
+ key: "id" | "title" | "time" | "duration" | "position" | "accDuration" | "type";
2538
+ label: string;
2539
+ width: string;
2540
+ textAlign: "right" | "left" | "center";
2541
+ }
2542
+
2543
+ declare interface PrintRundownOptions extends PrintOptionsBase {
2544
+ type: "rundown";
2545
+ columns: PrintRundownColumn[];
2546
+ rangeStart?: number;
2547
+ rangeEnd?: number;
2548
+ hide: Exclude<PrintOptionalScriptNodes, "event-data">[];
2549
+ }
2550
+
2551
+ declare interface PrintScriptOptions extends PrintOptionsBase {
2552
+ type: "script";
2553
+ }
2554
+
2387
2555
  declare interface PromotedTag {
2388
2556
  name: string | null;
2389
2557
  icon: string | null;
@@ -2507,7 +2675,7 @@ declare interface QuoteNodeContent extends ElementNodeContent {
2507
2675
  type: "quote";
2508
2676
  }
2509
2677
 
2510
- declare type Range_2 = [
2678
+ declare type Range = [
2511
2679
  number,
2512
2680
  number
2513
2681
  ];
@@ -2574,10 +2742,60 @@ declare interface RenderDomainRecords {
2574
2742
  }
2575
2743
 
2576
2744
  declare interface RenderDomainResultRecord {
2577
- [key: string]: unknown;
2745
+ id?: string;
2578
2746
  url?: string;
2747
+ files?: string[];
2748
+ refs?: Array<{
2749
+ file?: string;
2750
+ offset?: number;
2751
+ start?: number | null;
2752
+ end?: number | null;
2753
+ }>;
2579
2754
  result?: unknown;
2580
2755
  error?: null | Record<string, unknown> | Array<Record<string, unknown>>;
2756
+ extension?: string;
2757
+ extensions?: string[];
2758
+ type?: string;
2759
+ format?: string;
2760
+ formatName?: string;
2761
+ mimeType?: string;
2762
+ duration?: number;
2763
+ estimatedDuration?: number | null;
2764
+ video?: {
2765
+ codec?: string;
2766
+ width?: number;
2767
+ height?: number;
2768
+ interlaced?: boolean;
2769
+ alpha?: boolean | string;
2770
+ sar?: string | null;
2771
+ dar?: string;
2772
+ framerate?: number;
2773
+ format?: string;
2774
+ encoder?: string;
2775
+ codecName?: string;
2776
+ } | null;
2777
+ audio?: {
2778
+ codec?: string;
2779
+ codecName?: string;
2780
+ format?: string;
2781
+ channels?: number;
2782
+ samplerate?: number;
2783
+ peaksPerSecond?: number;
2784
+ streams?: number;
2785
+ encoder?: string;
2786
+ } | null;
2787
+ language?: string;
2788
+ transcribe?: {
2789
+ engine?: string;
2790
+ version?: string;
2791
+ language?: string;
2792
+ } | null;
2793
+ pan?: number[];
2794
+ translate?: {
2795
+ engine?: string;
2796
+ source?: string;
2797
+ target?: string;
2798
+ } | null;
2581
2799
  }
2582
2800
 
2583
2801
  declare interface RenderDomainSchedulersRecord {
@@ -2640,13 +2858,14 @@ declare interface RenderDomainStatsRecord {
2640
2858
  netTransferTotal?: number | null;
2641
2859
  cpu?: number | null;
2642
2860
  memory?: number | null;
2643
- activeCount: number | null;
2644
- totalCount: number | null;
2861
+ activeCount?: number | null;
2862
+ totalCount?: number | null;
2645
2863
  gpuStat?: RenderDomainGpuStats | null;
2646
2864
  cpuStat?: RenderDomainCpuStats | null;
2647
2865
  netStat?: RenderDomainNetStats | null;
2648
2866
  limits?: unknown;
2649
2867
  taskset?: string;
2868
+ end?: number | null;
2650
2869
  }
2651
2870
 
2652
2871
  declare type RenderPreset = RenderPresetObject | string;
@@ -2695,36 +2914,103 @@ declare interface RenderQuery {
2695
2914
 
2696
2915
  declare type RenderScene = (RenderSceneObject | string) | (RenderSceneObject | string)[];
2697
2916
 
2917
+ /** true = premultiplied alpha, 'straight' = straight alpha, null/undefined = auto */
2918
+ declare type RenderSceneAlpha = boolean | "straight";
2919
+
2920
+ declare interface RenderSceneCrop {
2921
+ x?: number;
2922
+ y?: number;
2923
+ width?: number;
2924
+ height?: number;
2925
+ }
2926
+
2927
+ declare interface RenderSceneFilters {
2928
+ eq?: {
2929
+ brightness?: number;
2930
+ contrast?: number;
2931
+ gamma?: number;
2932
+ saturation?: number;
2933
+ };
2934
+ hue?: {
2935
+ h?: number;
2936
+ s?: number;
2937
+ b?: number;
2938
+ };
2939
+ colorbalance?: {
2940
+ rs?: number;
2941
+ gs?: number;
2942
+ bs?: number;
2943
+ rm?: number;
2944
+ gm?: number;
2945
+ bm?: number;
2946
+ rh?: number;
2947
+ gh?: number;
2948
+ bh?: number;
2949
+ };
2950
+ }
2951
+
2952
+ declare type RenderSceneInterlaced = false | "tff" | "bff";
2953
+
2698
2954
  declare interface RenderSceneObject {
2699
2955
  id?: string;
2700
2956
  preset?: string;
2701
2957
  input?: {
2702
2958
  type?: string;
2703
2959
  file?: string | null;
2960
+ video?: {
2961
+ alpha?: RenderSceneAlpha | null;
2962
+ interlaced?: RenderSceneInterlaced | null;
2963
+ };
2964
+ proxy?: string | null;
2965
+ proxyManifest?: string | null;
2966
+ proxyFile?: string | null;
2967
+ manifest?: string | null;
2704
2968
  } | null;
2705
2969
  lang?: string;
2706
2970
  subtitle?: string;
2707
- subtitleTracks?: {
2708
- [trackId: string]: {
2709
- style?: string | null;
2710
- styleOverrides?: SubtitleStyle;
2711
- };
2712
- };
2971
+ graphics?: string;
2972
+ subtitleTracks?: RenderSceneSubtitleTracks;
2713
2973
  video?: {
2714
- crop?: {
2715
- x?: number;
2716
- y?: number;
2717
- width?: number;
2718
- height?: number;
2719
- };
2974
+ filters?: RenderSceneFilters;
2975
+ crop?: RenderSceneCrop;
2976
+ orientation?: number;
2977
+ /** @deprecated Use input.video.interlaced */
2978
+ interlaced?: RenderSceneInterlaced | null;
2979
+ /** @deprecated Use input.video.alpha */
2980
+ alpha?: RenderSceneAlpha | null;
2981
+ };
2982
+ audio?: {
2983
+ pan?: number[][];
2720
2984
  };
2721
2985
  start?: number;
2722
2986
  end?: number;
2723
2987
  transcribe?: {
2724
2988
  language?: string;
2725
2989
  pan?: number[];
2990
+ diarization?: boolean;
2726
2991
  };
2727
- }
2992
+ /** @deprecated Use video.crop instead */
2993
+ crop?: RenderSceneCrop;
2994
+ /** @deprecated Use video.filters instead */
2995
+ filters?: RenderSceneFilters;
2996
+ /** @deprecated Use video.orientation instead */
2997
+ orientation?: number;
2998
+ /** @deprecated Use video.orientation instead */
2999
+ rotate?: number;
3000
+ /** @deprecated Use input.video.interlaced instead */
3001
+ interlaced?: RenderSceneInterlaced | null;
3002
+ /** @deprecated Use input.video.alpha instead */
3003
+ alpha?: RenderSceneAlpha | null;
3004
+ }
3005
+
3006
+ declare interface RenderSceneSubtitleTrack {
3007
+ style?: string | null;
3008
+ styleOverrides?: SubtitleStyle;
3009
+ }
3010
+
3011
+ declare type RenderSceneSubtitleTracks = {
3012
+ [trackId: string]: RenderSceneSubtitleTrack;
3013
+ };
2728
3014
 
2729
3015
  /**
2730
3016
  * 0 = Monthly
@@ -2766,20 +3052,52 @@ declare interface RevsRecord {
2766
3052
  }
2767
3053
 
2768
3054
  declare interface RoleDomainRecords {
3055
+ ":role": RoleRecord;
3056
+ ":role.users?": RoleUsersRecord;
2769
3057
  ":role.tags": RoleTagsRecord;
2770
3058
  }
2771
3059
 
3060
+ declare type RoleRecord = {
3061
+ permissions?: Record<string, string[]>;
3062
+ };
3063
+
2772
3064
  declare interface RoleTagsRecord {
2773
3065
  value: string[];
2774
3066
  }
2775
3067
 
3068
+ declare type RoleUsersRecord = {
3069
+ value?: string[];
3070
+ };
3071
+
2776
3072
  declare interface RpcPermission {
2777
3073
  type: "rpc";
2778
3074
  method: string;
2779
3075
  tags?: undefined;
2780
3076
  }
2781
3077
 
2782
- declare interface SchemaProperty extends PanelProperty {
3078
+ declare interface SchemaDomainPanelRecord {
3079
+ title?: string;
3080
+ /**
3081
+ * - If an array: interpreted as a list of supported asset types
3082
+ * - If a string: interpreted as the ID of a search which contains supported assets
3083
+ */
3084
+ supports?: string[] | string;
3085
+ domain?: string;
3086
+ priority?: number;
3087
+ properties?: {
3088
+ [key: string]: SchemaProperty;
3089
+ };
3090
+ layout?: {
3091
+ panel?: WidgetLayout;
3092
+ editor?: WidgetLayout;
3093
+ };
3094
+ }
3095
+
3096
+ declare interface SchemaDomainRecords {
3097
+ ":schema": SchemaDomainPanelRecord;
3098
+ }
3099
+
3100
+ declare interface SchemaProperty<Value = unknown> extends BaseSchemaProperty<Value> {
2783
3101
  recordName?: Nxtpression<string, {
2784
3102
  id: string;
2785
3103
  }>;
@@ -2787,8 +3105,8 @@ declare interface SchemaProperty extends PanelProperty {
2787
3105
  id: string;
2788
3106
  value: unknown;
2789
3107
  }>;
2790
- default?: unknown;
2791
- const?: unknown;
3108
+ default?: Value;
3109
+ const?: Value;
2792
3110
  }
2793
3111
 
2794
3112
  /**
@@ -3008,6 +3326,18 @@ declare interface Settings {
3008
3326
  overrideUserContact?: boolean;
3009
3327
  overrideUserLogin?: boolean;
3010
3328
  };
3329
+ graphics?: {
3330
+ width?: number;
3331
+ height?: number;
3332
+ };
3333
+ googleWhitelist?: Array<{
3334
+ domain?: string;
3335
+ }>;
3336
+ googleUserRoles?: string[];
3337
+ azureWhitelist?: Array<{
3338
+ domain?: string;
3339
+ }>;
3340
+ azureUserRoles?: string[];
3011
3341
  module?: {
3012
3342
  editor?: string;
3013
3343
  tabs?: ModuleTabs;
@@ -3029,10 +3359,10 @@ declare interface Settings {
3029
3359
  map?: {
3030
3360
  clustering?: boolean;
3031
3361
  zoom?: number;
3032
- center?: {
3033
- lat?: number;
3034
- lon?: number;
3035
- };
3362
+ center?: [
3363
+ number,
3364
+ number
3365
+ ];
3036
3366
  };
3037
3367
  createMenu?: {
3038
3368
  sortOrder?: string[];
@@ -3085,6 +3415,7 @@ declare interface Settings {
3085
3415
  sortBy?: "index" | "title";
3086
3416
  showPreview?: boolean;
3087
3417
  };
3418
+ contentMaxWidth?: number;
3088
3419
  colorTags?: PromotedTag[];
3089
3420
  readType?: "characters" | "words" | "wordsPerMinute";
3090
3421
  readRate?: number;
@@ -3117,44 +3448,20 @@ declare interface Settings {
3117
3448
  countFloatedDuration?: boolean;
3118
3449
  };
3119
3450
  history?: boolean;
3120
- keymap?: {
3121
- display?: {
3122
- [actionKey: string]: KeymapSetting;
3123
- };
3124
- browser?: {
3125
- [actionKey: string]: KeymapSetting;
3126
- };
3127
- gallery?: {
3128
- [actionKey: string]: KeymapSetting;
3129
- };
3130
- global?: {
3131
- [actionKey: string]: KeymapSetting;
3132
- };
3133
- player?: {
3134
- [actionKey: string]: KeymapSetting;
3135
- };
3136
- script?: {
3137
- [actionKey: string]: KeymapSetting;
3138
- };
3139
- codeEditor?: {
3140
- [actionKey: string]: KeymapSetting;
3141
- };
3142
- bookmarks?: {
3143
- [actionKey: string]: KeymapSetting;
3144
- };
3145
- edit?: {
3146
- [actionKey: string]: KeymapSetting;
3147
- };
3148
- rundown?: {
3149
- [actionKey: string]: KeymapSetting;
3150
- };
3151
- segment?: {
3152
- [actionKey: string]: KeymapSetting;
3153
- };
3154
- };
3451
+ keymap?: SettingsKeymap;
3155
3452
  media?: {
3453
+ volume?: number;
3454
+ muted?: boolean;
3455
+ graphics?: boolean;
3456
+ waveform?: boolean;
3156
3457
  defaultFrameRate?: number;
3458
+ dropFrame?: boolean;
3157
3459
  placeholder?: string;
3460
+ warnSubclipDuration?: number;
3461
+ displayAspectRatioPresets?: Array<{
3462
+ label?: string;
3463
+ value?: string;
3464
+ }>;
3158
3465
  guide?: {
3159
3466
  mask?: boolean;
3160
3467
  actionSafe?: boolean;
@@ -3294,6 +3601,7 @@ declare interface Settings {
3294
3601
  };
3295
3602
  print?: {
3296
3603
  fontFamilies?: string[];
3604
+ presets?: Array<PrintOptions>;
3297
3605
  };
3298
3606
  hiddenPreviews?: Array<{
3299
3607
  id?: string;
@@ -3301,7 +3609,27 @@ declare interface Settings {
3301
3609
  }>;
3302
3610
  plugins?: {
3303
3611
  adobe?: {
3612
+ videoBin?: string;
3613
+ imageBin?: string;
3614
+ audioBin?: string;
3615
+ timelineBin?: string;
3616
+ clipBin?: string;
3617
+ downloadPath?: string;
3618
+ renderPath?: string;
3619
+ renderPresetPath?: string;
3620
+ renderPresets?: string[];
3621
+ videoRenderPreset?: string;
3622
+ imageRenderPreset?: string;
3623
+ audioRenderPreset?: string;
3624
+ forceRender?: boolean;
3304
3625
  useProxies?: boolean;
3626
+ deleteIntermediateFiles?: boolean;
3627
+ bodymovin?: {
3628
+ template?: string;
3629
+ };
3630
+ };
3631
+ ograf?: {
3632
+ template?: string;
3305
3633
  };
3306
3634
  rive?: {
3307
3635
  template?: string;
@@ -3311,6 +3639,7 @@ declare interface Settings {
3311
3639
  debug?: boolean;
3312
3640
  featurePreview?: {
3313
3641
  collections?: boolean;
3642
+ aiMetadata?: boolean;
3314
3643
  semanticSearch?: boolean;
3315
3644
  ameRemoteRendering?: boolean;
3316
3645
  };
@@ -3332,6 +3661,8 @@ declare interface Settings {
3332
3661
  hideInAssetMenu?: boolean;
3333
3662
  assetRoute?: boolean;
3334
3663
  devWarnings?: boolean;
3664
+ downloadFiles?: boolean;
3665
+ supportPortal?: boolean;
3335
3666
  multiplexWebSockets?: boolean;
3336
3667
  systemHealth?: boolean;
3337
3668
  systemHealthIgnore?: boolean;
@@ -3375,8 +3706,14 @@ declare interface Settings {
3375
3706
  layout?: string;
3376
3707
  };
3377
3708
  performance?: {
3378
- /** List of message identifiers to ignore in overall health aggregation (format: "serviceName:messageText") */
3379
- ignoredMessages?: string[];
3709
+ /** List of message identifiers to ignore warnings (format: "serviceName:messageText") */
3710
+ ignoredWarnings?: string[];
3711
+ /** List of message identifiers to ignore errors (format: "serviceName:messageText") */
3712
+ ignoredErrors?: string[];
3713
+ };
3714
+ app?: {
3715
+ enableUpdate?: boolean;
3716
+ autoUpdate?: boolean;
3380
3717
  };
3381
3718
  }
3382
3719
 
@@ -3385,6 +3722,20 @@ declare interface SettingsDomainRecords {
3385
3722
  ":settings.node": SettingsNodeRecord;
3386
3723
  }
3387
3724
 
3725
+ declare type SettingsKeymap = Record<string, SettingsKeymapScope>;
3726
+
3727
+ declare interface SettingsKeymapEntry {
3728
+ title?: string;
3729
+ sequence?: string | (string | [
3730
+ string,
3731
+ unknown
3732
+ ])[] | null | undefined;
3733
+ schema?: Record<string, any>;
3734
+ stopCallback?: boolean;
3735
+ }
3736
+
3737
+ declare type SettingsKeymapScope = Record<string, SettingsKeymapEntry>;
3738
+
3388
3739
  declare type SettingsNodeRecord = Record<string, {
3389
3740
  collapsed: boolean;
3390
3741
  hidden: boolean;
@@ -3443,16 +3794,12 @@ declare interface ShotboxStreamGroup {
3443
3794
  ```
3444
3795
  import type {SingleKeyObject} from 'type-fest';
3445
3796
 
3446
- const someFunction = <T>(parameter: SingleKeyObject<T>) => {};
3797
+ declare function someFunction<T>(parameter: SingleKeyObject<T>): void;
3447
3798
 
3448
- someFunction({
3449
- value: true
3450
- });
3799
+ someFunction({value: true});
3451
3800
 
3452
- someFunction({
3453
- value: true,
3454
- otherKey: true
3455
- });
3801
+ // @ts-expect-error
3802
+ someFunction({value: true, otherKey: true});
3456
3803
  // Error: Argument of type '{value: boolean; otherKey: boolean}' is not assignable to parameter of type 'never'.ts(2345)
3457
3804
  ```
3458
3805
 
@@ -3467,6 +3814,48 @@ declare type Spread<T1, T2> = Omit<T2, keyof T1> & T1;
3467
3814
 
3468
3815
  declare type StatsRecord = Union["stats"];
3469
3816
 
3817
+ declare interface StorageDomainRecord {
3818
+ zone: string;
3819
+ hostname: string | null;
3820
+ port?: number | null;
3821
+ location?: string;
3822
+ cache?: boolean | null;
3823
+ allows?: string[];
3824
+ capacity?: number | null;
3825
+ rxBytesSecMax?: number | null;
3826
+ txBytesSecMax?: number | null;
3827
+ rxBytesSecLimit?: number | null;
3828
+ txBytesSecLimit?: number | null;
3829
+ }
3830
+
3831
+ declare interface StorageDomainRecords {
3832
+ ":storage": StorageDomainRecord;
3833
+ ":storage.stats": StorageStatsDomainRecord;
3834
+ ":storage-zone": StorageZoneDomainRecord;
3835
+ }
3836
+
3837
+ declare interface StorageFsStats {
3838
+ concurrency?: number;
3839
+ path?: string;
3840
+ snapshot?: number | null;
3841
+ available?: number;
3842
+ free?: number;
3843
+ used?: number;
3844
+ size?: number;
3845
+ state?: string;
3846
+ [key: string]: unknown;
3847
+ }
3848
+
3849
+ declare interface StorageIoQueues {
3850
+ highest: number;
3851
+ higher: number;
3852
+ high: number;
3853
+ normal: number;
3854
+ low: number;
3855
+ lower: number;
3856
+ lowest: number;
3857
+ }
3858
+
3470
3859
  declare interface StorageLocationsRecord {
3471
3860
  [key: string]: StorageLocationsRecordEntry;
3472
3861
  }
@@ -3496,6 +3885,58 @@ declare interface StorageRecords {
3496
3885
  "storage.zones?": StorageZonesRecord;
3497
3886
  }
3498
3887
 
3888
+ declare interface StorageS3Stats {
3889
+ bucket?: string;
3890
+ region?: string;
3891
+ endpoint?: string;
3892
+ path?: string;
3893
+ storageClass?: string;
3894
+ [key: string]: unknown;
3895
+ }
3896
+
3897
+ declare interface StorageStatsDomainRecord {
3898
+ id: string;
3899
+ location: string;
3900
+ timestamp: string;
3901
+ type: string;
3902
+ zone: string;
3903
+ origin: string;
3904
+ free: number | null;
3905
+ size: number | null;
3906
+ available: number | null;
3907
+ cache: boolean | null;
3908
+ capacity: number | null;
3909
+ limiter: {
3910
+ readBytesPerSecond: number | undefined;
3911
+ writeBytesPerSecond: number | undefined;
3912
+ };
3913
+ http: {
3914
+ downstreamConnected: number;
3915
+ upstreamConnected: number;
3916
+ pending: number;
3917
+ completed: number;
3918
+ failed: number;
3919
+ };
3920
+ io: {
3921
+ read: {
3922
+ bytesPerSecond: number;
3923
+ pending: number;
3924
+ queues: StorageIoQueues;
3925
+ };
3926
+ write: {
3927
+ bytesPerSecond: number;
3928
+ pending: number;
3929
+ queues: StorageIoQueues;
3930
+ };
3931
+ };
3932
+ fs?: StorageFsStats;
3933
+ s3?: StorageS3Stats;
3934
+ }
3935
+
3936
+ declare interface StorageZoneDomainRecord {
3937
+ priority?: number;
3938
+ }
3939
+
3499
3940
  declare interface StorageZonesRecord {
3500
3941
  [key: string]: {
3501
3942
  priority: number;
@@ -3526,6 +3967,91 @@ declare interface StoryboardDomainRecords {
3526
3967
  ":storyboard.ancestors?": StoryboardAncestorsRecord;
3527
3968
  }
3528
3969
 
3970
+ declare interface StreamDomainIngestRecord {
3971
+ server?: string;
3972
+ enabled?: boolean;
3973
+ input?: {
3974
+ raw_format?: string;
3975
+ video_format?: string;
3976
+ };
3977
+ encoding?: {
3978
+ [preset: string]: Record<string, unknown>;
3979
+ };
3980
+ record?: {
3981
+ hls_time?: number;
3982
+ hls_list_size?: number;
3983
+ mainPreset?: string | {
3984
+ video: string;
3985
+ audio: string;
3986
+ };
3987
+ proxyPreset?: string | {
3988
+ video: string;
3989
+ audio: string;
3990
+ };
3991
+ main?: Record<string, unknown>;
3992
+ proxy?: Record<string, unknown>;
3993
+ };
3994
+ stream?: {
3995
+ mainPreset?: {
3996
+ video: string;
3997
+ audio: string;
3998
+ };
3999
+ proxyPreset?: {
4000
+ video: string;
4001
+ audio: string;
4002
+ };
4003
+ main?: Record<string, unknown>;
4004
+ proxy?: Record<string, unknown>;
4005
+ };
4006
+ subtitle?: {
4007
+ driver?: string;
4008
+ template?: string;
4009
+ };
4010
+ video?: string;
4011
+ audio?: string;
4012
+ channels?: number;
4013
+ audioDelay?: number;
4014
+ interlaced?: boolean;
4015
+ }
4016
+
4017
+ declare interface StreamDomainIngestStatsRecord {
4018
+ status?: "starting" | "recording" | "streaming" | "stopping" | "stopped" | "restarting" | "stalled" | "deleted" | "exited" | "not configured" | "initializing" | "error";
4019
+ server?: string;
4020
+ hostname?: string;
4021
+ port?: number;
4022
+ error?: string;
4023
+ }
4024
+
4025
+ declare interface StreamDomainRecord {
4026
+ input?: "webcam" | "screen" | "url" | "push" | `ingest:${string}` | "srt-listener" | "srt-caller";
4027
+ url?: string;
4028
+ enabled?: boolean;
4029
+ endpoints?: {
4030
+ enabled?: boolean;
4031
+ url?: string;
4032
+ asset?: string;
4033
+ }[];
4034
+ }
4035
+
4036
+ declare interface StreamDomainRecords {
4037
+ ":stream": StreamDomainRecord;
4038
+ ":stream.stats?": StreamDomainStatsRecord;
4039
+ ":stream.ingest": StreamDomainIngestRecord;
4040
+ ":stream.ingest.stats?": StreamDomainIngestStatsRecord;
4041
+ }
4042
+
4043
+ declare interface StreamDomainStatsRecord {
4044
+ status?: "stopped" | "broadcasting" | "error";
4045
+ proxyStatus?: "stopped" | "broadcasting" | "error";
4046
+ rtmpUrl?: string;
4047
+ rtmpPublishUrl?: string;
4048
+ endpoints?: {
4049
+ rtmpUrl?: string;
4050
+ status?: "broadcasting" | "failed" | "created" | "stopped" | "finished";
4051
+ }[];
4052
+ error?: string;
4053
+ }
4054
+
3529
4055
  /** OBSERVABLE INTERFACES */
3530
4056
  declare interface Subscribable<T> {
3531
4057
  subscribe(observer: Partial<Observer<T>>): Unsubscribable;
@@ -3895,10 +4421,45 @@ declare interface TemplateDomainRecords {
3895
4421
 
3896
4422
  declare interface TemplateProperty {
3897
4423
  path?: string;
4424
+ type?: string;
4425
+ label?: string;
4426
+ defaultValue?: string;
4427
+ widget?: {
4428
+ type: string;
4429
+ };
4430
+ properties?: object;
4431
+ items?: {
4432
+ properties?: Record<string, TemplatePropertySchema>;
4433
+ };
4434
+ render?: {
4435
+ type: "image";
4436
+ profile?: {
4437
+ format?: string;
4438
+ video?: {
4439
+ width: number;
4440
+ height: number;
4441
+ fit: "cover";
4442
+ };
4443
+ };
4444
+ };
4445
+ }
4446
+
4447
+ declare interface TemplatePropertySchema {
4448
+ path?: string;
4449
+ type?: string;
4450
+ label?: string;
4451
+ defaultValue?: string;
4452
+ widget?: {
4453
+ type: string;
4454
+ };
4455
+ items?: TemplatePropertySchema;
4456
+ properties?: Record<string, TemplatePropertySchema>;
3898
4457
  }
3899
4458
 
3900
4459
  declare interface TemplateRecord {
4460
+ source?: string;
3901
4461
  controller?: string;
4462
+ type?: string;
3902
4463
  mixin?: string[];
3903
4464
  properties?: Record<string, TemplateProperty>;
3904
4465
  }
@@ -4201,12 +4762,26 @@ declare interface UserNotificationUnassigned extends UserNotificationCommon {
4201
4762
  };
4202
4763
  }
4203
4764
 
4204
- declare interface WidgetItem {
4205
- type: WidgetType;
4765
+ declare type WidgetLayout = string | WidgetLayoutDivider | WidgetLayoutItem | WidgetLayout[];
4766
+
4767
+ declare interface WidgetLayoutDivider {
4768
+ type: "divider";
4769
+ title?: string;
4770
+ }
4771
+
4772
+ declare interface WidgetLayoutItem {
4773
+ property: string;
4774
+ width?: string | number;
4775
+ widget?: WidgetType | WidgetOptions;
4776
+ }
4777
+
4778
+ declare interface WidgetOptions {
4779
+ type?: WidgetType;
4206
4780
  readOnly?: boolean;
4781
+ [key: string]: unknown;
4207
4782
  }
4208
4783
 
4209
- declare type WidgetType = "default" | "assetTypes" | "assetTags" | "geopoint" | "poster" | "textarea" | "tags";
4784
+ declare type WidgetType = string;
4210
4785
 
4211
4786
  /**
4212
4787
  * A base64 encoded string representing a complete Yjs document state.