@crowbartools/firebot-types 5.67.0-alpha22 → 5.67.0-alpha24

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 (91) hide show
  1. package/backend/backup-manager.d.ts +1 -0
  2. package/backend/channel-rewards/channel-reward-manager.d.ts +1 -0
  3. package/backend/chat/moderation/chat-moderation-manager.d.ts +1 -0
  4. package/backend/common/frontend-communicator.d.ts +3 -3
  5. package/backend/common/icon-manager.d.ts +2 -0
  6. package/backend/control-deck/control-type-manager.d.ts +1 -0
  7. package/backend/currency/currency-access.d.ts +1 -0
  8. package/backend/effects/builtin/overlay-widgets/clear-chat-widget.d.ts +5 -0
  9. package/backend/effects/effect-manager.d.ts +0 -2
  10. package/backend/games/game-manager.d.ts +1 -0
  11. package/backend/integrations/builtin/obs/effects/change-scene-collection.d.ts +2 -1
  12. package/backend/integrations/builtin/obs/effects/change-scene-effect-type.d.ts +2 -1
  13. package/backend/integrations/builtin/obs/effects/create-recording-chapter.d.ts +1 -1
  14. package/backend/integrations/builtin/obs/effects/save-replay-buffer.d.ts +1 -1
  15. package/backend/integrations/builtin/obs/effects/send-raw-obs-websocket-request.d.ts +1 -1
  16. package/backend/integrations/builtin/obs/effects/set-obs-browser-source-url.d.ts +1 -1
  17. package/backend/integrations/builtin/obs/effects/set-obs-color-source-color.d.ts +1 -1
  18. package/backend/integrations/builtin/obs/effects/set-obs-image-source-file.d.ts +1 -1
  19. package/backend/integrations/builtin/obs/effects/set-obs-media-source-file.d.ts +1 -1
  20. package/backend/integrations/builtin/obs/effects/set-obs-source-text.d.ts +1 -1
  21. package/backend/integrations/builtin/obs/effects/start-stream.d.ts +1 -1
  22. package/backend/integrations/builtin/obs/effects/start-virtual-cam.d.ts +1 -1
  23. package/backend/integrations/builtin/obs/effects/stop-stream.d.ts +1 -1
  24. package/backend/integrations/builtin/obs/effects/stop-virtual-cam.d.ts +1 -1
  25. package/backend/integrations/builtin/obs/effects/toggle-obs-source-filter.d.ts +1 -1
  26. package/backend/integrations/builtin/obs/effects/toggle-obs-source-muted.d.ts +1 -1
  27. package/backend/integrations/builtin/obs/effects/toggle-obs-source-visibility.d.ts +1 -1
  28. package/backend/integrations/builtin/obs/effects/transform-obs-source.d.ts +2 -2
  29. package/backend/integrations/builtin/obs/events/obs-event-source.d.ts +1 -1
  30. package/backend/integrations/builtin/obs/filters/group-name-filter.d.ts +1 -1
  31. package/backend/integrations/builtin/obs/filters/scene-name-filter.d.ts +1 -1
  32. package/backend/integrations/builtin/obs/variables/group-item-id.d.ts +1 -1
  33. package/backend/integrations/builtin/obs/variables/group-name.d.ts +1 -1
  34. package/backend/integrations/builtin/obs/variables/input-active.d.ts +1 -1
  35. package/backend/integrations/builtin/obs/variables/input-audio-balance.d.ts +1 -1
  36. package/backend/integrations/builtin/obs/variables/input-audio-monitor-type.d.ts +1 -1
  37. package/backend/integrations/builtin/obs/variables/input-audio-sync-offset.d.ts +1 -1
  38. package/backend/integrations/builtin/obs/variables/input-audio-tracks.d.ts +1 -1
  39. package/backend/integrations/builtin/obs/variables/input-kind.d.ts +1 -1
  40. package/backend/integrations/builtin/obs/variables/input-muted.d.ts +1 -1
  41. package/backend/integrations/builtin/obs/variables/input-name.d.ts +1 -1
  42. package/backend/integrations/builtin/obs/variables/input-settings.d.ts +1 -1
  43. package/backend/integrations/builtin/obs/variables/input-showing.d.ts +1 -1
  44. package/backend/integrations/builtin/obs/variables/input-uuid.d.ts +1 -1
  45. package/backend/integrations/builtin/obs/variables/input-volume-db.d.ts +1 -1
  46. package/backend/integrations/builtin/obs/variables/input-volume-multiplier.d.ts +1 -1
  47. package/backend/integrations/builtin/obs/variables/is-connected.d.ts +1 -1
  48. package/backend/integrations/builtin/obs/variables/is-recording.d.ts +1 -1
  49. package/backend/integrations/builtin/obs/variables/is-streaming.d.ts +1 -1
  50. package/backend/integrations/builtin/obs/variables/obs-color-value.d.ts +1 -1
  51. package/backend/integrations/builtin/obs/variables/old-input-name.d.ts +1 -1
  52. package/backend/integrations/builtin/obs/variables/profile-name.d.ts +1 -1
  53. package/backend/integrations/builtin/obs/variables/replay-buffer-path.d.ts +1 -1
  54. package/backend/integrations/builtin/obs/variables/scene-collection-name.d.ts +1 -1
  55. package/backend/integrations/builtin/obs/variables/scene-item-enabled.d.ts +1 -1
  56. package/backend/integrations/builtin/obs/variables/scene-item-id.d.ts +1 -1
  57. package/backend/integrations/builtin/obs/variables/scene-item-name.d.ts +1 -1
  58. package/backend/integrations/builtin/obs/variables/scene-name-variable.d.ts +1 -1
  59. package/backend/integrations/builtin/obs/variables/transition-duration.d.ts +1 -1
  60. package/backend/integrations/builtin/obs/variables/transition-name.d.ts +1 -1
  61. package/backend/integrations/builtin/obs/variables/vendor-event-data.d.ts +1 -1
  62. package/backend/integrations/builtin/obs/variables/vendor-event-type.d.ts +1 -1
  63. package/backend/integrations/builtin/obs/variables/vendor-name.d.ts +1 -1
  64. package/backend/internal-bus.d.ts +16 -0
  65. package/backend/notifications/notification-manager.d.ts +1 -0
  66. package/backend/overlay-widgets/builtin-types/index.d.ts +1 -1
  67. package/backend/overlay-widgets/builtin-types/twitch-poll/twitch-poll.d.ts +17 -0
  68. package/backend/overlay-widgets/builtin-types/twitch-prediction/twitch-prediction.d.ts +16 -0
  69. package/backend/overlay-widgets/builtin-widget-helpers.d.ts +2 -0
  70. package/backend/overlay-widgets/overlay-widgets-manager.d.ts +17 -0
  71. package/backend/power-ups/power-ups-manager.d.ts +1 -0
  72. package/backend/roles/team-roles-manager.d.ts +2 -0
  73. package/backend/sort-tags/sort-tag-manager.d.ts +1 -0
  74. package/backend/streaming-platforms/twitch/api/twurple-logger.d.ts +2 -0
  75. package/backend/ui-extensions/ui-extension-manager.d.ts +5 -3
  76. package/backend/variables/builtin/metadata/arg.d.ts +1 -1
  77. package/backend/variables/builtin/metadata/target.d.ts +1 -1
  78. package/backend/variables/builtin/misc/discord-timestamp.d.ts +1 -1
  79. package/backend/variables/builtin/user/roles/has-role.d.ts +1 -1
  80. package/backend/variables/builtin/user/roles/has-roles.d.ts +1 -1
  81. package/backend/variables/replace-variable-manager.d.ts +1 -0
  82. package/backend/viewers/viewer-database.d.ts +13 -1
  83. package/backend/webhooks/webhook-config-manager.d.ts +1 -0
  84. package/package.json +2 -2
  85. package/types/effects.d.ts +0 -1
  86. package/types/index.d.ts +1 -0
  87. package/types/modules/frontend-communicator.d.ts +2 -2
  88. package/types/overlay-widgets.d.ts +71 -5
  89. package/types/plugins.d.ts +43 -1
  90. package/types/poll-predictions.d.ts +28 -0
  91. package/types/power-ups.d.ts +2 -0
@@ -27,6 +27,7 @@ declare class BackupManager {
27
27
  private extractBackupZip;
28
28
  private copyRestoreFilesToUserData;
29
29
  private moveBackupFolder;
30
+ triggerUiRefresh(): void;
30
31
  }
31
32
  declare const backupManager: BackupManager;
32
33
  export { backupManager as BackupManager };
@@ -25,6 +25,7 @@ declare class ChannelRewardManager {
25
25
  getChannelRewardRedemptions(): Record<string, RewardRedemption[]>;
26
26
  approveOrRejectChannelRewardRedemptions(request: RewardRedemptionsApprovalRequest): Promise<void>;
27
27
  approveOrRejectAllRedemptionsForChannelRewards(rewardIds: string[], approve?: boolean): Promise<void>;
28
+ triggerUiRefresh(): void;
28
29
  }
29
30
  declare const channelRewardManager: ChannelRewardManager;
30
31
  export = channelRewardManager;
@@ -39,6 +39,7 @@ declare class ChatModerationManager {
39
39
  private deleteMessage;
40
40
  load(): void;
41
41
  moderateMessage(chatMessage: FirebotChatMessage): Promise<void>;
42
+ triggerUiRefresh(): void;
42
43
  }
43
44
  declare const chatModerationManager: ChatModerationManager;
44
45
  export { chatModerationManager as ChatModerationManager };
@@ -2,9 +2,9 @@ import type { FrontendCommunicatorModule } from "../../types";
2
2
  declare class FrontendCommunicator implements FrontendCommunicatorModule {
3
3
  private _listeners;
4
4
  private registerEventWithElectron;
5
- send<ExpectedArg = unknown>(eventName: string, data?: ExpectedArg): void;
6
- sendToVariableInspector(eventName: string, data?: unknown): void;
7
- fireEventAsync<ReturnPayload = void, ExpectedArg = unknown>(eventName: string, data?: ExpectedArg): Promise<ReturnPayload>;
5
+ send<ExpectedArgs extends Array<unknown> = []>(eventName: string, ...data: ExpectedArgs): void;
6
+ sendToVariableInspector(eventName: string, ...data: unknown[]): void;
7
+ fireEventAsync<ReturnPayload = void, ExpectedArgs extends Array<unknown> = []>(eventName: string, ...data: ExpectedArgs): Promise<ReturnPayload>;
8
8
  private registerListener;
9
9
  on<ExpectedArgs extends Array<unknown> = [], ReturnPayload = void>(eventName: string, callback: (...args: ExpectedArgs) => ReturnPayload): string;
10
10
  onAsync<ExpectedArgs extends Array<unknown> = [], ReturnPayload = void>(eventName: string, callback: (...args: ExpectedArgs) => Promise<ReturnPayload>): string;
@@ -1,8 +1,10 @@
1
1
  import type { FontAwesomeIcon } from "../../types";
2
2
  declare class IconManager {
3
+ private logger;
3
4
  icons: FontAwesomeIcon[];
4
5
  constructor();
5
6
  loadFontAwesomeIcons(): Promise<void>;
7
+ triggerUiRefresh(): void;
6
8
  }
7
9
  declare const iconManager: IconManager;
8
10
  export { iconManager as IconManager };
@@ -8,6 +8,7 @@ declare class ControlDeckControlTypeManager {
8
8
  getControlType(id: string): ControlDeckControlType<any, any> | null;
9
9
  getAllControlTypes(): ControlDeckControlType<any, any>[];
10
10
  private getControlTypesForFrontend;
11
+ triggerUiRefresh(): void;
11
12
  }
12
13
  declare const manager: ControlDeckControlTypeManager;
13
14
  export { manager as ControlDeckControlTypeManager };
@@ -20,6 +20,7 @@ declare class CurrencyAccess extends EventEmitter {
20
20
  updateCurrency(currency: Currency): void;
21
21
  deleteCurrency(id: string): void;
22
22
  private saveAllCurrencies;
23
+ triggerUiRefresh(): void;
23
24
  }
24
25
  declare const currencyAccess: CurrencyAccess;
25
26
  export default currencyAccess;
@@ -0,0 +1,5 @@
1
+ import type { EffectType } from "../../../../types";
2
+ declare const model: EffectType<{
3
+ chatWidgetId: string;
4
+ }>;
5
+ export = model;
@@ -36,7 +36,6 @@ declare class EffectManager extends TypedEmitter<{
36
36
  mapEffectForFrontEnd(e: EffectType): {
37
37
  definition?: undefined;
38
38
  optionsTemplate?: undefined;
39
- optionsTemplateUrl?: undefined;
40
39
  optionsControllerRaw?: undefined;
41
40
  optionsValidatorRaw?: undefined;
42
41
  getDefaultLabelRaw?: undefined;
@@ -59,7 +58,6 @@ declare class EffectManager extends TypedEmitter<{
59
58
  isNoOp?: boolean;
60
59
  };
61
60
  optionsTemplate: string;
62
- optionsTemplateUrl: string;
63
61
  optionsControllerRaw: string;
64
62
  optionsValidatorRaw: string;
65
63
  getDefaultLabelRaw: string;
@@ -28,6 +28,7 @@ declare class GameManager {
28
28
  private getGameSettingsFromValues;
29
29
  private updateGameSettings;
30
30
  private saveAllGameSettings;
31
+ triggerUiRefresh(): void;
31
32
  }
32
33
  declare const manager: GameManager;
33
34
  export { manager as GameManager };
@@ -1,4 +1,5 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const ChangeSceneCollectionEffectType: EffectType<{
3
3
  sceneCollectionName: string;
4
+ custom: boolean;
4
5
  }>;
@@ -1,4 +1,5 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const ChangeSceneEffectType: EffectType<{
3
3
  sceneName: string;
4
+ custom: boolean;
4
5
  }>;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const CreateRecordChapter: EffectType<{
3
3
  chapterName: string;
4
4
  }>;
@@ -1,2 +1,2 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SaveReplayBufferEffectType: EffectType;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SendRawOBSWebSocketRequestEffectType: EffectType<{
3
3
  functionName: string;
4
4
  payload: string;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SetOBSBrowserSourceUrlEffectType: EffectType<{
3
3
  browserSourceName: string;
4
4
  url: string;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SetOBSColorSourceColorEffectType: EffectType<{
3
3
  colorSourceName: string;
4
4
  color: string;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SetOBSImageSourceFileEffectType: EffectType<{
3
3
  imageSourceName: string;
4
4
  file: string;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SetOBSMediaSourceFileEffectType: EffectType<{
3
3
  mediaSourceName: string;
4
4
  file: string;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const SetOBSSourceTextEffectType: EffectType<{
3
3
  textSourceName: string;
4
4
  textSource: "static" | "file";
@@ -1,2 +1,2 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const StartStreamEffectType: EffectType;
@@ -1,2 +1,2 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const StartVirtualCamEffectType: EffectType;
@@ -1,2 +1,2 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const StopStreamEffectType: EffectType;
@@ -1,2 +1,2 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  export declare const StopVirtualCamEffectType: EffectType;
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  type SourceAction = boolean | "toggle";
3
3
  type EffectProperties = {
4
4
  selectedFilters: Array<{
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  type SourceAction = boolean | "toggle";
3
3
  type EffectProperties = {
4
4
  selectedSources: Array<{
@@ -1,4 +1,4 @@
1
- import { EffectType } from "../../../../../types/effects";
1
+ import type { EffectType } from "../../../../../types";
2
2
  type SourceAction = boolean | "toggle";
3
3
  type EffectProperties = {
4
4
  selectedSources: Array<{
@@ -1,5 +1,5 @@
1
- import { EffectType } from "../../../../../types/effects";
2
- import { OBSSceneItem } from "../obs-remote";
1
+ import type { EffectType } from "../../../../../types";
2
+ import { type OBSSceneItem } from "../obs-remote";
3
3
  export declare const TransformSourceEffectType: EffectType<{
4
4
  sceneName?: string;
5
5
  sceneItem?: OBSSceneItem;
@@ -1,2 +1,2 @@
1
- import { EventSource } from "../../../../../types/events";
1
+ import type { EventSource } from "../../../../../types";
2
2
  export declare const OBSEventSource: EventSource;
@@ -1,3 +1,3 @@
1
- import { EventFilter } from "../../../../../types/events";
1
+ import type { EventFilter } from "../../../../../types";
2
2
  declare const filter: EventFilter;
3
3
  export default filter;
@@ -1,3 +1,3 @@
1
- import { EventFilter } from "../../../../../types/events";
1
+ import type { EventFilter } from "../../../../../types";
2
2
  declare const filter: EventFilter;
3
3
  export default filter;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const GroupItemIdVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const GroupNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputActiveVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputAudioBalanceVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputAudioMonitorTypeVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputAudioSyncOffsetVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputAudioTracksVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputKindVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputMutedVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputSettingsVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputShowingVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputUuidVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputVolumeDbVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const InputVolumeMultiplierVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const IsConnectedVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const IsRecordingVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const IsStreamingVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const ColorValueVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const OldInputNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const ProfileNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const ReplayBufferPathVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const SceneCollectionNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const SceneItemEnabledVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const SceneItemIdVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const SceneItemNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const SceneNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const TransitionDurationVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const TransitionNameVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const VendorEventDataVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const VendorEventTypeVariable: ReplaceVariable;
@@ -1,2 +1,2 @@
1
- import { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  export declare const VendorNameVariable: ReplaceVariable;
@@ -0,0 +1,16 @@
1
+ import { ChannelPoll, ChannelPrediction } from "../types";
2
+ import { TypedEmitter } from "tiny-typed-emitter";
3
+ type Events = {
4
+ 'channel-poll-begin': (poll: ChannelPoll) => void;
5
+ 'channel-poll-progress': (poll: ChannelPoll) => void;
6
+ 'channel-poll-end': (poll: ChannelPoll) => void;
7
+ 'channel-prediction-begin': (prediction: ChannelPrediction) => void;
8
+ 'channel-prediction-progress': (prediction: ChannelPrediction) => void;
9
+ 'channel-prediction-lock': (prediction: ChannelPrediction) => void;
10
+ 'channel-prediction-end': (prediction: ChannelPrediction) => void;
11
+ };
12
+ declare class InternalBus extends TypedEmitter<Events> {
13
+ constructor();
14
+ }
15
+ declare const bus: InternalBus;
16
+ export { bus as InternalBus };
@@ -19,6 +19,7 @@ declare class NotificationManager {
19
19
  startExternalNotificationCheck(): void;
20
20
  stopExternalNotificationCheck(): void;
21
21
  migrateLegacyScriptNotifications(): void;
22
+ triggerUiRefresh(): void;
22
23
  }
23
24
  declare const manager: NotificationManager;
24
25
  export { manager as NotificationManager };
@@ -44,5 +44,5 @@ declare const _default: (import("../../../types").OverlayWidgetType<{
44
44
  imageType: "local" | "url";
45
45
  filepath: string;
46
46
  url: string;
47
- }, {}> | import("../../../types").OverlayWidgetType<import("./chat/chat").ChatWidgetSettings, import("./chat/chat").ChatWidgetState> | import("../../../types").OverlayWidgetType<import("./chat/chat-advanced").AdvancedChatWidgetSettings, import("./chat/chat").ChatWidgetState>)[];
47
+ }, {}> | import("../../../types").OverlayWidgetType<import("./chat/chat").ChatWidgetSettings, import("./chat/chat").ChatWidgetState> | import("../../../types").OverlayWidgetType<import("./chat/chat-advanced").AdvancedChatWidgetSettings, import("./chat/chat").ChatWidgetState> | import("../../../types").OverlayWidgetType<import("./twitch-poll/twitch-poll").PollSettings, import("./twitch-poll/twitch-poll").PollState> | import("../../../types").OverlayWidgetType<import("./twitch-prediction/twitch-prediction").PredictionSettings, import("./twitch-prediction/twitch-prediction").PredictionState>)[];
48
48
  export default _default;
@@ -0,0 +1,17 @@
1
+ import { OverlayWidgetType } from "../../../../types/overlay-widgets";
2
+ import { FontOptions } from "../../../../types/parameters";
3
+ import { ChannelPoll } from "../../../../types";
4
+ export declare const TWITCH_POLL_TYPE_ID = "firebot:twitch-poll";
5
+ export type PollSettings = {
6
+ fontOptions?: FontOptions;
7
+ accentColor: string;
8
+ backgroundColor: string;
9
+ timeBarColor: string;
10
+ showPercentages: boolean;
11
+ /** How long (seconds) to keep the final results visible after the poll ends. */
12
+ lingerSeconds: number;
13
+ };
14
+ export type PollState = {
15
+ poll: ChannelPoll | null;
16
+ };
17
+ export declare const twitchPoll: OverlayWidgetType<PollSettings, PollState>;
@@ -0,0 +1,16 @@
1
+ import { OverlayWidgetType } from "../../../../types/overlay-widgets";
2
+ import { FontOptions } from "../../../../types/parameters";
3
+ import { ChannelPrediction } from "../../../../types";
4
+ export declare const TWITCH_PREDICTION_TYPE_ID = "firebot:twitch-prediction";
5
+ export type PredictionSettings = {
6
+ fontOptions?: FontOptions;
7
+ backgroundColor: string;
8
+ timeBarColor: string;
9
+ showUsers: boolean;
10
+ /** How long (seconds) to keep the final results visible after the prediction ends. */
11
+ lingerSeconds: number;
12
+ };
13
+ export type PredictionState = {
14
+ prediction: ChannelPrediction | null;
15
+ };
16
+ export declare const twitchPrediction: OverlayWidgetType<PredictionSettings, PredictionState>;
@@ -0,0 +1,2 @@
1
+ import { OverlayWidgetType } from "../../types";
2
+ export declare function loadComponentExtension(componentFileName: string): OverlayWidgetType<any, any>["componentExtension"];
@@ -26,11 +26,28 @@ declare class OverlayWidgetsManager extends TypedEmitter<Events> {
26
26
  eventHandler: (event: WidgetOverlayEvent, utils: import("../../types").IOverlayWidgetEventUtils) => void;
27
27
  onInitialLoad: (utils: import("../../types").IOverlayWidgetInitUtils) => import("../../types").Awaitable<void>;
28
28
  }[];
29
+ getOverlayComponents(): {
30
+ typeId: string;
31
+ dependencies: {
32
+ css?: string[];
33
+ js?: Array<string | {
34
+ module: boolean;
35
+ url: string;
36
+ }>;
37
+ globalStyles?: string;
38
+ };
39
+ }[];
40
+ /**
41
+ * Returns the inline ESM bundle source for a component widget registered with `bundleSource`
42
+ */
43
+ getOverlayComponentSource(typeId: string): string | null;
29
44
  sendWidgetEventToOverlay<EventName extends WidgetOverlayEvent["name"]>(eventName: EventName, widgetConfig: OverlayWidgetConfig, messageInfo?: EventName extends "message" ? {
30
45
  messageName: string;
31
46
  messageData?: unknown;
32
47
  } : undefined, previewMode?: boolean): Promise<void>;
33
48
  private formatForFrontend;
49
+ private formatStateDisplaysForFrontend;
50
+ triggerUiRefresh(): void;
34
51
  }
35
52
  declare const manager: OverlayWidgetsManager;
36
53
  export = manager;
@@ -12,6 +12,7 @@ declare class PowerUpsManager {
12
12
  getPowerUpIdByName(powerUpName: string): string;
13
13
  private triggerPowerUpEffects;
14
14
  triggerPowerUp(powerUpId: string, metadata: PowerUpRedemptionMetadata, manual?: boolean): Promise<boolean | void>;
15
+ triggerUiRefresh(): void;
15
16
  }
16
17
  declare const powerUpsManager: PowerUpsManager;
17
18
  export = powerUpsManager;
@@ -1,10 +1,12 @@
1
1
  import type { FirebotRole } from "../../types";
2
2
  declare class TeamRolesManager {
3
+ private logger;
3
4
  private _streamerTeams;
4
5
  constructor();
5
6
  loadTeamRoles(): Promise<void>;
6
7
  getTeamRoles(): Promise<FirebotRole[]>;
7
8
  getAllTeamRolesForViewer(userIdOrName: string): Promise<FirebotRole[]>;
9
+ triggerUiRefresh(): Promise<void>;
8
10
  }
9
11
  declare const teamRolesManager: TeamRolesManager;
10
12
  export = teamRolesManager;
@@ -12,6 +12,7 @@ declare class SortTagManager {
12
12
  saveSortTagsForContext(context: string, sortTags: SortTag[]): void;
13
13
  getSortTagsForContext(context: string): SortTag[];
14
14
  private saveAllSortTags;
15
+ triggerUiRefresh(): void;
15
16
  }
16
17
  declare const sortTagManager: SortTagManager;
17
18
  export { sortTagManager as SortTagManager };
@@ -0,0 +1,2 @@
1
+ import type { LogLevel } from "@d-fischer/logger";
2
+ export declare function logTwurpleMessage(level: LogLevel, message: string): void;
@@ -1,11 +1,13 @@
1
1
  import type { UIExtension } from "../../types";
2
2
  declare class UIExtensionManager {
3
+ private _logger;
3
4
  private _extensions;
4
5
  private uiReady;
5
- registerUIExtension(extension: UIExtension): void;
6
- setUIReadyForExtensions(): void;
6
+ constructor();
7
+ registerUIExtension(extension: UIExtension, pluginId?: string): boolean;
8
+ private setUIReadyForExtensions;
7
9
  private prepareExtensionForFrontend;
8
10
  private prepareFunc;
9
11
  }
10
12
  declare const manager: UIExtensionManager;
11
- export = manager;
13
+ export { manager as UIExtensionManager };
@@ -1,3 +1,3 @@
1
- import type { ReplaceVariable } from "../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../types";
2
2
  declare const model: ReplaceVariable;
3
3
  export default model;
@@ -1,4 +1,4 @@
1
- import type { ReplaceVariable } from "../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../types";
2
2
  /**
3
3
  * The $target variable
4
4
  */
@@ -1,3 +1,3 @@
1
- import type { ReplaceVariable } from "../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../types";
2
2
  declare const model: ReplaceVariable;
3
3
  export default model;
@@ -1,3 +1,3 @@
1
- import type { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  declare const model: ReplaceVariable;
3
3
  export default model;
@@ -1,3 +1,3 @@
1
- import type { ReplaceVariable } from "../../../../../types/variables";
1
+ import type { ReplaceVariable } from "../../../../../types";
2
2
  declare const model: ReplaceVariable;
3
3
  export default model;
@@ -40,6 +40,7 @@ declare class ReplaceVariableManager extends EventEmitter {
40
40
  addEventToVariable(variableHandle: string, eventSourceId: string, eventId: string): void;
41
41
  removeEventFromVariable(variableHandle: string, eventSourceId: string, eventId: string): void;
42
42
  getSuggestionsForVariable(variableHandle: string, triggerType: TriggerType, triggerMeta: TriggerMeta): Awaitable<VariableUsage[]>;
43
+ triggerUiRefresh(): void;
43
44
  }
44
45
  declare const manager: ReplaceVariableManager;
45
46
  export { manager as ReplaceVariableManager };
@@ -23,6 +23,18 @@ interface ViewerPurgeOptions {
23
23
  enabled: boolean;
24
24
  };
25
25
  }
26
+ interface ViewersPageRequest {
27
+ page: number;
28
+ pageSize: number;
29
+ sortField?: string;
30
+ sortReversed?: boolean;
31
+ search?: string;
32
+ }
33
+ interface ViewersPage {
34
+ viewers: FirebotViewer[];
35
+ total: number;
36
+ totalUnfiltered: number;
37
+ }
26
38
  interface UserDetails {
27
39
  firebotData: FirebotViewer;
28
40
  twitchData: Record<string, unknown>;
@@ -48,13 +60,13 @@ declare class ViewerDatabase extends TypedEmitter<{
48
60
  */
49
61
  isViewerDBOn(): boolean;
50
62
  connectViewerDatabase(): Promise<void>;
51
- disconnectViewerDatabase(): void;
52
63
  getViewerDb(): Datastore<FirebotViewer>;
53
64
  createNewViewer(viewer: NewFirebotViewer): Promise<FirebotViewer>;
54
65
  addNewViewerFromChat(viewerDetails: BasicViewer, isOnline?: boolean): Promise<FirebotViewer>;
55
66
  getViewerById(id: string): Promise<FirebotViewer>;
56
67
  getViewerByUsername(username: string): Promise<FirebotViewer>;
57
68
  getAllViewers(): Promise<FirebotViewer[]>;
69
+ getViewersPage({ page, pageSize, sortField, sortReversed, search }: ViewersPageRequest): Promise<ViewersPage>;
58
70
  getAllUsernames(): Promise<string[]>;
59
71
  getAllUsernamesWithIds(): Promise<{
60
72
  id: string;
@@ -21,6 +21,7 @@ declare class WebhookConfigManager extends JsonDbManager<WebhookConfig, ExtraEve
21
21
  getPluginWebhookUrl(pluginId: string, webhookName: string): string;
22
22
  registerPluginHandler(pluginId: string, handler: PluginWebhookEventHandler): boolean;
23
23
  unregisterPluginHandler(pluginId: string): boolean;
24
+ triggerUiRefresh(): void;
24
25
  }
25
26
  declare const webhookConfigManager: WebhookConfigManager;
26
27
  export = webhookConfigManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crowbartools/firebot-types",
3
- "version": "5.67.0-alpha22",
3
+ "version": "5.67.0-alpha24",
4
4
  "description": "Type definitions and plugin API for Firebot plugins.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -43,7 +43,7 @@
43
43
  "license": "GPL-3.0",
44
44
  "peerDependencies": {
45
45
  "@types/express": "^5.0.5",
46
- "@types/node": "^24.1.0"
46
+ "@types/node": "^22.19.21"
47
47
  },
48
48
  "publishConfig": {
49
49
  "access": "public"
@@ -121,7 +121,6 @@ export type EffectInstance<EffectModel = unknown> = {
121
121
  export type EffectType<EffectModel = unknown, OverlayData = unknown> = {
122
122
  definition: EffectDefinition<EffectModel>;
123
123
  optionsTemplate: string;
124
- optionsTemplateUrl?: string;
125
124
  optionsController?: ($scope: EffectScope<EffectModel>, ...args: any[]) => void;
126
125
  optionsValidator?: (effect: EffectModel, $scope: EffectScope<EffectModel>) => string[];
127
126
  getDefaultLabel?: (effect: EffectModel, ...args: any[]) => Awaitable<string | undefined>;
package/types/index.d.ts CHANGED
@@ -23,6 +23,7 @@ export * from "./notifications";
23
23
  export * from "./overlay-widgets";
24
24
  export * from "./parameters";
25
25
  export * from "./plugins";
26
+ export * from "./poll-predictions";
26
27
  export * from "./power-ups";
27
28
  export * from "./pronouns";
28
29
  export * from "./quick-actions";
@@ -4,7 +4,7 @@ export interface FrontendCommunicatorModule {
4
4
  * @param eventName The name of the event to send.
5
5
  * @param data Data to provide to the event handler.
6
6
  */
7
- send<ExpectedArg = unknown>(eventName: string, data?: ExpectedArg): void;
7
+ send<ExpectedArgs extends Array<unknown> = []>(eventName: string, ...data: ExpectedArgs): void;
8
8
  /** Handle a synchronous event triggered by the frontend.
9
9
  * @template ExpectedArgs The type of data provided with the event.
10
10
  * @template ReturnPayload The type of data returned from the event handler.
@@ -27,7 +27,7 @@ export interface FrontendCommunicatorModule {
27
27
  * @param eventName The name of the event to send.
28
28
  * @param data The data to provide with the event.
29
29
  */
30
- fireEventAsync<ReturnPayload = void, ExpectedArg = unknown>(eventName: string, data?: ExpectedArg): Promise<ReturnPayload>;
30
+ fireEventAsync<ReturnPayload = void, ExpectedArgs extends Array<unknown> = []>(eventName: string, ...data: ExpectedArgs): Promise<ReturnPayload>;
31
31
  /**
32
32
  * Unregisters a previously registered frontend event handler.
33
33
  * @param eventName The name of the event.
@@ -93,7 +93,7 @@ export type OverlayWidgetType<Settings extends Record<string, unknown> = Record<
93
93
  /**
94
94
  * State that is used when the widget is shown in live preview mode.
95
95
  */
96
- livePreviewState?: State;
96
+ livePreviewState?: State | (() => State);
97
97
  /**
98
98
  * Array of setting keys that reference local resource paths.
99
99
  * These properties will be automatically converted to resource tokens when sent to the overlay,
@@ -132,8 +132,10 @@ export type OverlayWidgetType<Settings extends Record<string, unknown> = Record<
132
132
  onOverlayMessage?: (config: OverlayWidgetConfig<Settings, State>, messageName: string, messageData?: unknown) => Awaitable<void>;
133
133
  /**
134
134
  * This code is injected into the overlay. Do not reference any variables outside this scope.
135
+ *
136
+ * A widget type must register exactly one of `overlayExtension` or `componentExtension`.
135
137
  */
136
- overlayExtension: {
138
+ overlayExtension?: {
137
139
  dependencies?: {
138
140
  css?: string[];
139
141
  js?: Array<string | {
@@ -148,7 +150,62 @@ export type OverlayWidgetType<Settings extends Record<string, unknown> = Record<
148
150
  */
149
151
  onInitialLoad?: (utils: IOverlayWidgetInitUtils) => Awaitable<void>;
150
152
  };
153
+ /**
154
+ * Points the overlay at a prebuilt ESM bundle whose default export is an {@link OverlayWidgetComponent}.
155
+ * The overlay dynamically imports the bundle and keeps an instance-based lifecycle, so a framework
156
+ * (such as Vue) owns the widget's DOM instead.
157
+ *
158
+ * A widget type must register exactly one of `overlayExtension` or `componentExtension`.
159
+ */
160
+ componentExtension?: {
161
+ /**
162
+ * The full string source of a prebuilt ESM bundle whose default export is an
163
+ * {@link OverlayWidgetComponent}
164
+ */
165
+ bundleSource: string;
166
+ /**
167
+ * Note: `"vue"` is already provided globally
168
+ */
169
+ dependencies?: {
170
+ css?: string[];
171
+ js?: Array<string | {
172
+ module: boolean;
173
+ url: string;
174
+ }>;
175
+ globalStyles?: string;
176
+ };
177
+ };
151
178
  };
179
+ /**
180
+ * A single mounted widget instance, returned by {@link OverlayWidgetComponent.mount}.
181
+ */
182
+ export interface OverlayWidgetInstance<Settings extends Record<string, unknown> = Record<string, unknown>, State = Record<string, unknown>> {
183
+ /**
184
+ * Called on `"settings-update"` and `"state-update"` events with a fresh widget config.
185
+ */
186
+ update(config: WidgetOverlayEvent<Settings, State>["data"]["widgetConfig"]): void;
187
+ /**
188
+ * Called on `"message"` events sent from the backend (via the Send Message effect).
189
+ */
190
+ onMessage?(messageName: string, messageData?: unknown): void;
191
+ /**
192
+ * Called on `"remove"`
193
+ */
194
+ destroy(): void;
195
+ }
196
+ /**
197
+ * The default export of a component widget's bundle. `mount` is called once when the widget is
198
+ * shown and returns an {@link OverlayWidgetInstance} the overlay uses for the rest of the lifecycle.
199
+ */
200
+ export interface OverlayWidgetComponent<Settings extends Record<string, unknown> = Record<string, unknown>, State = Record<string, unknown>> {
201
+ mount(args: {
202
+ /** The widget's container element, already positioned/sized by the overlay. */
203
+ container: HTMLElement;
204
+ /** The widget config at mount time (settings + initial state). */
205
+ config: WidgetOverlayEvent<Settings, State>["data"]["widgetConfig"];
206
+ utils: IOverlayWidgetEventUtils;
207
+ }): OverlayWidgetInstance<Settings, State> | Promise<OverlayWidgetInstance<Settings, State>>;
208
+ }
152
209
  export type OverlayWidgetConfig<Settings = Record<string, unknown>, State = Record<string, unknown>> = {
153
210
  id: string;
154
211
  name: string;
@@ -179,6 +236,10 @@ export type WidgetOverlayEvent<Settings = Record<string, unknown>, State = Recor
179
236
  };
180
237
  };
181
238
  widgetType: Pick<OverlayWidgetType, "id" | "userCanConfigure">;
239
+ /**
240
+ * True if the event is being fired for a component widget.
241
+ */
242
+ isComponentWidget: boolean;
182
243
  previewMode: boolean;
183
244
  /**
184
245
  * For "message" events, the name of the message being sent.
@@ -201,10 +262,15 @@ export interface IOverlayWidgetEventUtils {
201
262
  * @param updateOnMessage If true, the widget HTML will be updated when a "message" event is received. Default is false.
202
263
  */
203
264
  handleOverlayEvent(generateWidgetHtml: (widgetConfig: WidgetOverlayEvent["data"]["widgetConfig"]) => string, updateOnMessage?: boolean): void;
204
- getWidgetPositionStyle(position?: Position): string;
265
+ getWidgetPositionStyle(position?: Position, zIndex?: number, additionalStyles?: Record<string, string | number | undefined>): string;
205
266
  getWidgetContainerElement(): HTMLElement | null;
206
- initializeWidget(html: string): void;
207
- updateWidgetContent(newHtml: string): void;
267
+ /**
268
+ * Initializes the widget by injecting the provided HTML into the widget's container element and applying any specified container styles.
269
+ * @param html The HTML content to inject into the widget's container element.
270
+ * @param additionalContainerStyles Optional styles to apply to the widget's container element.
271
+ */
272
+ initializeWidget(html: string, additionalContainerStyles?: Record<string, string | number | undefined>): HTMLElement | null;
273
+ updateWidgetContent(newHtml: string): HTMLElement | null;
208
274
  updateWidgetPosition(): void;
209
275
  removeWidget(): void;
210
276
  stylesToString(styles: Record<string, string | number | undefined>): string;
@@ -15,11 +15,53 @@ import type { CustomWebSocketHandler } from "./websocket";
15
15
  import type { PluginWebhooks } from "./webhooks";
16
16
  type NoResult = Awaitable<void>;
17
17
  type GenericParameters = Record<string, unknown>;
18
+ export type ManagedPluginManifest = {
19
+ name: string;
20
+ author: string;
21
+ description: string;
22
+ /** Must be a semver string */
23
+ version: string;
24
+ downloadUrl: string;
25
+ sha256: string;
26
+ /** Must be an ISO-8601 string */
27
+ releaseDate: string;
28
+ type: "single-file" | "zip";
29
+ icon?: PluginIcon;
30
+ tags?: string[];
31
+ repo?: string;
32
+ website?: string;
33
+ support?: string;
34
+ minimumFirebotVersion?: ManifestFirebotVersion;
35
+ maximumFirebotVersion?: ManifestFirebotVersion;
36
+ };
37
+ export type ManagedPlugin = {
38
+ author: string;
39
+ name: string;
40
+ version: string;
41
+ };
42
+ export type ManagedPluginWithManifest = ManagedPlugin & {
43
+ manifest: ManagedPluginManifest;
44
+ };
45
+ export type ManagedPluginUpdateRequest = {
46
+ author: string;
47
+ name: string;
48
+ version: string;
49
+ firebotVersion: ManifestFirebotVersion;
50
+ };
51
+ export type ManagedPluginBatchUpdateRequest = {
52
+ plugins: Array<{
53
+ author: string;
54
+ name: string;
55
+ version: string;
56
+ }>;
57
+ firebotVersion: ManifestFirebotVersion;
58
+ };
18
59
  export type InstalledPluginConfig<Params extends GenericParameters = GenericParameters> = {
19
60
  id: string;
20
61
  fileName: string;
21
62
  enabled?: boolean;
22
63
  legacyImport?: boolean;
64
+ managedPluginDetails?: ManagedPlugin;
23
65
  parameters: Params;
24
66
  };
25
67
  export type PluginContext<Params extends FirebotParams = FirebotParams> = {
@@ -33,7 +75,7 @@ interface ManifestDescription {
33
75
  short: string;
34
76
  long?: string;
35
77
  }
36
- interface ManifestFirebotVersion {
78
+ export interface ManifestFirebotVersion {
37
79
  major: number;
38
80
  minor?: number;
39
81
  patch?: number;
@@ -0,0 +1,28 @@
1
+ import type { EventSubChannelPollChoice } from "@twurple/eventsub-base/lib";
2
+ type ChannelPollChoice = Pick<EventSubChannelPollChoice, "id" | "title" | "totalVotes" | "channelPointsVotes">;
3
+ export type ChannelPoll = {
4
+ title: string;
5
+ startDate: Date;
6
+ endDate: Date;
7
+ choices: ChannelPollChoice[];
8
+ winningChoiceIds: string[];
9
+ isChannelPointsVotingEnabled: boolean;
10
+ channelPointsPerVote: number;
11
+ status: "active" | "completed" | "archived" | "terminated";
12
+ };
13
+ type ChannelPredictionOutcome = {
14
+ id: string;
15
+ title: string;
16
+ channelPoints: number;
17
+ users: number;
18
+ color?: "blue" | "pink";
19
+ };
20
+ export type ChannelPrediction = {
21
+ title: string;
22
+ startDate: Date;
23
+ lockDate: Date;
24
+ outcomes: ChannelPredictionOutcome[];
25
+ winningOutcomeId: string | null;
26
+ status: "active" | "locked" | "resolved" | "canceled";
27
+ };
28
+ export {};
@@ -11,8 +11,10 @@ export type PowerUpRedemptionMetadata = {
11
11
  userId: string;
12
12
  userDisplayName: string;
13
13
  messageText: string;
14
+ args: string[];
14
15
  powerUpId: string;
15
16
  powerUpImage: string;
16
17
  powerUpName: string;
18
+ powerUpDescription: string;
17
19
  bits: number;
18
20
  };