@crowbartools/firebot-types 5.67.0-alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +43 -0
- package/index.d.ts +5 -0
- package/index.js +5 -0
- package/package.json +44 -0
- package/types/accounts.d.ts +13 -0
- package/types/auth.d.ts +51 -0
- package/types/channel-rewards.d.ts +63 -0
- package/types/chat.d.ts +159 -0
- package/types/commands.d.ts +138 -0
- package/types/counters.d.ts +13 -0
- package/types/currency.d.ts +15 -0
- package/types/discord.d.ts +10 -0
- package/types/effects.d.ts +223 -0
- package/types/events.d.ts +99 -0
- package/types/expressionish.d.ts +74 -0
- package/types/games.d.ts +22 -0
- package/types/goals.d.ts +7 -0
- package/types/hotkeys.d.ts +12 -0
- package/types/icons.d.ts +6 -0
- package/types/import.d.ts +69 -0
- package/types/index.d.ts +40 -0
- package/types/integrations.d.ts +93 -0
- package/types/moderation.d.ts +59 -0
- package/types/modules/event-manager.d.ts +29 -0
- package/types/modules/frontend-communicator.d.ts +53 -0
- package/types/modules/index.d.ts +2 -0
- package/types/overlay-widgets.d.ts +240 -0
- package/types/parameters.d.ts +414 -0
- package/types/plugins.d.ts +201 -0
- package/types/power-ups.d.ts +20 -0
- package/types/pronouns.d.ts +11 -0
- package/types/quick-actions.d.ts +18 -0
- package/types/quotes.d.ts +17 -0
- package/types/ranks.d.ts +23 -0
- package/types/restrictions.d.ts +65 -0
- package/types/roles.d.ts +21 -0
- package/types/script-api.d.ts +95 -0
- package/types/settings.d.ts +131 -0
- package/types/setups.d.ts +49 -0
- package/types/sort-tags.d.ts +4 -0
- package/types/timers.d.ts +36 -0
- package/types/triggers.d.ts +61 -0
- package/types/ui/angular.d.ts +31 -0
- package/types/ui/backend-communicator.d.ts +8 -0
- package/types/ui/effect-helper-service.d.ts +5 -0
- package/types/ui/effect-queues-service.d.ts +10 -0
- package/types/ui/firebot-root-scope.d.ts +5 -0
- package/types/ui/index.d.ts +12 -0
- package/types/ui/modal-factory.d.ts +30 -0
- package/types/ui/modal-service.d.ts +21 -0
- package/types/ui/ng-toast.d.ts +3 -0
- package/types/ui/object-copy-helper.d.ts +9 -0
- package/types/ui/platform-service.d.ts +7 -0
- package/types/ui/preset-effect-lists-service.d.ts +20 -0
- package/types/ui/settings-service.d.ts +5 -0
- package/types/util-types.d.ts +52 -0
- package/types/variable-macros.d.ts +7 -0
- package/types/variables.d.ts +59 -0
- package/types/viewers.d.ts +30 -0
- package/types/webhooks.d.ts +5 -0
- package/types/websocket.d.ts +70 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import ng from "angular";
|
|
2
|
+
import type { TriggerType, TriggersObject, Trigger } from "./triggers";
|
|
3
|
+
import type { Awaitable } from "./util-types";
|
|
4
|
+
|
|
5
|
+
type Func<T> = (...args: unknown[]) => T;
|
|
6
|
+
|
|
7
|
+
interface EffectScope<EffectModel> extends ng.IScope {
|
|
8
|
+
effect: EffectModel;
|
|
9
|
+
[x: string]: any;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type EffectCategory =
|
|
13
|
+
| "common"
|
|
14
|
+
| "twitch"
|
|
15
|
+
| "moderation"
|
|
16
|
+
| "chat based"
|
|
17
|
+
| "dashboard"
|
|
18
|
+
| "overlay"
|
|
19
|
+
| "fun"
|
|
20
|
+
| "integrations"
|
|
21
|
+
| "firebot control"
|
|
22
|
+
| "advanced"
|
|
23
|
+
| "scripting";
|
|
24
|
+
|
|
25
|
+
export type EffectTriggerResponse = {
|
|
26
|
+
success: boolean;
|
|
27
|
+
execution?: {
|
|
28
|
+
stop: boolean;
|
|
29
|
+
bubbleStop: boolean;
|
|
30
|
+
};
|
|
31
|
+
outputs?: {
|
|
32
|
+
[x: string]: unknown;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type EffectOutput = {
|
|
37
|
+
label: string;
|
|
38
|
+
description: string;
|
|
39
|
+
defaultName: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type EffectDependencies = {
|
|
43
|
+
twitch?: boolean;
|
|
44
|
+
integrations?: Record<string, boolean>;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type OverlayExtension<OverlayData = unknown> = {
|
|
48
|
+
dependencies?: {
|
|
49
|
+
globalStyles?: string;
|
|
50
|
+
css?: string[];
|
|
51
|
+
js?: Array<string | { module: boolean, url: string }>;
|
|
52
|
+
};
|
|
53
|
+
event: {
|
|
54
|
+
name: string;
|
|
55
|
+
onOverlayEvent: (data: OverlayData) => void;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export type OverlayDimensions = {
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type OverlayPosition = {
|
|
65
|
+
position: string;
|
|
66
|
+
customCoords?: {
|
|
67
|
+
top: number;
|
|
68
|
+
bottom: number;
|
|
69
|
+
left: number;
|
|
70
|
+
right: number;
|
|
71
|
+
};
|
|
72
|
+
zIndex?: number;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export type OverlayRotation = {
|
|
76
|
+
rotation: number;
|
|
77
|
+
rotType: "deg" | "rad" | "turn";
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export type OverlayEnterExitAnimations = {
|
|
81
|
+
enterAnimation: string;
|
|
82
|
+
enterDuration: number;
|
|
83
|
+
|
|
84
|
+
inbetweenAnimation: string;
|
|
85
|
+
inbetweenDuration: number;
|
|
86
|
+
inbetweenDelay: number;
|
|
87
|
+
inbetweenRepeat: number;
|
|
88
|
+
|
|
89
|
+
exitAnimation: string;
|
|
90
|
+
exitDuration: number;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export type OverlayInstance = {
|
|
94
|
+
overlayInstance: string;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export type EffectDefinition<EffectModel = unknown> = {
|
|
98
|
+
id: string;
|
|
99
|
+
name: string;
|
|
100
|
+
description: string;
|
|
101
|
+
icon: string;
|
|
102
|
+
categories: EffectCategory[];
|
|
103
|
+
hidden?: boolean | Func<boolean>;
|
|
104
|
+
deprecated?: boolean;
|
|
105
|
+
triggers?: TriggerType[] | TriggersObject;
|
|
106
|
+
dependencies?: EffectDependencies | Array<"chat">;
|
|
107
|
+
showWhenDependenciesNotMet?: boolean;
|
|
108
|
+
outputs?: EffectOutput[];
|
|
109
|
+
/**
|
|
110
|
+
* If true, this effect cannot be aborted via the "Timeout" feature
|
|
111
|
+
*/
|
|
112
|
+
exemptFromTimeouts?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* If true, this effect type cannot be set as "async" in the UI
|
|
115
|
+
*/
|
|
116
|
+
exemptFromAsync?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Keys of the effect model that should be exempt from having variables replaced in them automatically.
|
|
119
|
+
* This is useful when you want to run variable replacement manually, or not at all.
|
|
120
|
+
*/
|
|
121
|
+
keysExemptFromAutoVariableReplacement?: Array<keyof EffectModel>;
|
|
122
|
+
/**
|
|
123
|
+
* If true, this effect does nothing when triggered (ex Comment effect)
|
|
124
|
+
* No-op effects are ignored by the random and sequential effects
|
|
125
|
+
*/
|
|
126
|
+
isNoOp?: boolean;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
export type EffectInstance<EffectModel = unknown> = {
|
|
130
|
+
id: string;
|
|
131
|
+
type: string;
|
|
132
|
+
effectLabel?: string | null;
|
|
133
|
+
effectComment?: string | null;
|
|
134
|
+
active?: boolean;
|
|
135
|
+
abortTimeout?: number | null;
|
|
136
|
+
percentWeight?: number | null;
|
|
137
|
+
outputNames?: Record<string, string>;
|
|
138
|
+
async?: boolean;
|
|
139
|
+
} & {
|
|
140
|
+
[K in keyof EffectModel]: EffectModel[K];
|
|
141
|
+
} & {
|
|
142
|
+
[x: string]: unknown;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export type EffectType<EffectModel = unknown, OverlayData = unknown> = {
|
|
146
|
+
definition: EffectDefinition<EffectModel>;
|
|
147
|
+
optionsTemplate: string;
|
|
148
|
+
optionsTemplateUrl?: string;
|
|
149
|
+
optionsController?: ($scope: EffectScope<EffectModel>, ...args: any[]) => void;
|
|
150
|
+
optionsValidator?: (effect: EffectModel, $scope: EffectScope<EffectModel>) => string[];
|
|
151
|
+
getDefaultLabel?: (effect: EffectModel, ...args: any[]) => Awaitable<string | undefined>;
|
|
152
|
+
onTriggerEvent: (event: {
|
|
153
|
+
effect: EffectInstance<EffectModel>;
|
|
154
|
+
trigger: Trigger;
|
|
155
|
+
sendDataToOverlay: (data: OverlayData, overlayInstance?: string) => void;
|
|
156
|
+
outputs: Record<string, unknown>;
|
|
157
|
+
abortSignal: AbortSignal;
|
|
158
|
+
}) => Awaitable<void | boolean | EffectTriggerResponse>;
|
|
159
|
+
overlayExtension?: OverlayExtension<OverlayData>;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export type EffectListRunMode = "all" | "random" | "sequential";
|
|
163
|
+
|
|
164
|
+
export interface EffectList {
|
|
165
|
+
id: string;
|
|
166
|
+
list: EffectInstance[];
|
|
167
|
+
queue?: string | null;
|
|
168
|
+
queuePriority?: "high" | "none";
|
|
169
|
+
queueDuration?: number;
|
|
170
|
+
runMode?: EffectListRunMode;
|
|
171
|
+
weighted?: boolean;
|
|
172
|
+
dontRepeatUntilAllUsed?: boolean;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export type PresetEffectList = {
|
|
176
|
+
id: string;
|
|
177
|
+
name: string;
|
|
178
|
+
args: Array<{
|
|
179
|
+
name: string;
|
|
180
|
+
}>;
|
|
181
|
+
effects: EffectList;
|
|
182
|
+
sortTags: string[];
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
type QueueMode = "auto" | "interval" | "custom" | "manual";
|
|
186
|
+
|
|
187
|
+
export type EffectQueueConfig = {
|
|
188
|
+
id: string;
|
|
189
|
+
name: string;
|
|
190
|
+
mode: QueueMode;
|
|
191
|
+
interval?: number;
|
|
192
|
+
sortTags: string[];
|
|
193
|
+
active: boolean;
|
|
194
|
+
runEffectsImmediatelyWhenPaused: boolean;
|
|
195
|
+
length: number;
|
|
196
|
+
queue: any[];
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
export type QueueStatus = "running" | "paused" | "idle" | "canceled";
|
|
200
|
+
|
|
201
|
+
export type RunEffectsContext = {
|
|
202
|
+
trigger: Trigger;
|
|
203
|
+
effects: EffectList;
|
|
204
|
+
outputs?: {
|
|
205
|
+
[x: string]: unknown;
|
|
206
|
+
};
|
|
207
|
+
[key: string]: unknown;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
type QueueItem = {
|
|
211
|
+
runEffectsContext: RunEffectsContext;
|
|
212
|
+
duration?: number;
|
|
213
|
+
priority?: "none" | "high";
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
export type QueueState = {
|
|
217
|
+
status: QueueStatus;
|
|
218
|
+
queuedItems: QueueItem[];
|
|
219
|
+
activeItems: QueueItem[];
|
|
220
|
+
interval: number;
|
|
221
|
+
mode: QueueMode;
|
|
222
|
+
runEffectsImmediatelyWhenPaused?: boolean;
|
|
223
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { EffectList } from "./effects";
|
|
2
|
+
import type { Awaitable } from "./util-types";
|
|
3
|
+
|
|
4
|
+
export type ComparisonType =
|
|
5
|
+
| "is"
|
|
6
|
+
| "is not"
|
|
7
|
+
| "greater than"
|
|
8
|
+
| "greater than or equal to"
|
|
9
|
+
| "less than"
|
|
10
|
+
| "less than or equal to"
|
|
11
|
+
| "contains"
|
|
12
|
+
| "doesn't contain"
|
|
13
|
+
| "doesn't start with"
|
|
14
|
+
| "starts with"
|
|
15
|
+
| "doesn't end with"
|
|
16
|
+
| "ends with"
|
|
17
|
+
| "matches regex"
|
|
18
|
+
| "doesn't matches regex"
|
|
19
|
+
| "matches regex (case insensitive)"
|
|
20
|
+
| "doesn't match regex (case insensitive)";
|
|
21
|
+
|
|
22
|
+
export type EventDefinition = {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
cached?: boolean;
|
|
27
|
+
cacheMetaKey?: string;
|
|
28
|
+
cacheTtlInSecs?: number;
|
|
29
|
+
manualMetadata?: Record<string, unknown>;
|
|
30
|
+
activityFeed?: {
|
|
31
|
+
icon: string;
|
|
32
|
+
getMessage: (eventData: Record<string, any>) => string;
|
|
33
|
+
excludeFromChatFeed?: boolean;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type EventSource = {
|
|
38
|
+
id: string;
|
|
39
|
+
name: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
events: EventDefinition[];
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type PresetValue = {
|
|
45
|
+
value: any;
|
|
46
|
+
display: string;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type FilterSettings = {
|
|
50
|
+
type: string;
|
|
51
|
+
comparisonType: ComparisonType;
|
|
52
|
+
value: any;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export type EventSourceAndId = {
|
|
56
|
+
eventSourceId: string;
|
|
57
|
+
eventId: string;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type EventData = EventSourceAndId & {
|
|
61
|
+
eventMeta: Record<string, any>;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type EventFilter = {
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
description: string;
|
|
68
|
+
events: EventSourceAndId[];
|
|
69
|
+
comparisonTypes: string[];
|
|
70
|
+
valueType: "text" | "preset";
|
|
71
|
+
presetValues?(...args: unknown[]): Awaitable<PresetValue[]>;
|
|
72
|
+
valueIsStillValid?(filterSettings: FilterSettings, ...args: unknown[]): Awaitable<boolean>;
|
|
73
|
+
getSelectedValueDisplay?(filterSettings: FilterSettings, ...args: unknown[]): Awaitable<string>;
|
|
74
|
+
predicate(
|
|
75
|
+
filterSettings: FilterSettings,
|
|
76
|
+
eventData: EventData
|
|
77
|
+
): Awaitable<boolean>;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export type EventFilterData = {
|
|
81
|
+
mode: "inclusive" | "exclusive";
|
|
82
|
+
filters: FilterSettings[];
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export type EventSettings = {
|
|
86
|
+
id: string;
|
|
87
|
+
type: string;
|
|
88
|
+
active: boolean;
|
|
89
|
+
effectLabel?: string;
|
|
90
|
+
filterData?: EventFilterData;
|
|
91
|
+
effects: EffectList;
|
|
92
|
+
[x: string]: unknown;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export type EventGroup = {
|
|
96
|
+
id: string;
|
|
97
|
+
events: EventSettings[];
|
|
98
|
+
active?: boolean;
|
|
99
|
+
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
type ExpressionishBaseToken = {
|
|
2
|
+
type: "TEXT" | "VARIABLE" | "LOOKUP" | "IF" | "LOGICAL" | "CONDITION" | "UNKNOWN";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Rough character position of the token within the input string
|
|
6
|
+
*/
|
|
7
|
+
position: number;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Depends on token type.
|
|
11
|
+
*
|
|
12
|
+
* `TEXT` or `UNKNOWN`: raw text value
|
|
13
|
+
*
|
|
14
|
+
* `VAR`, `IF`, or `LOOKUP`: name of variable
|
|
15
|
+
*
|
|
16
|
+
* `CONDITION` or `LOGICAL`: operator
|
|
17
|
+
*/
|
|
18
|
+
value: string;
|
|
19
|
+
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type ExpressionishTokenWithArguments = {
|
|
23
|
+
/**
|
|
24
|
+
* Arguments to resolve then pass to calling registered handler
|
|
25
|
+
*/
|
|
26
|
+
arguments: Array<ExpressionishToken>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type ExpressionishTextToken = ExpressionishBaseToken & {
|
|
30
|
+
type: "TEXT";
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
type ExpressionishLookupToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
|
|
34
|
+
type: "LOOKUP";
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Lookup prefix
|
|
38
|
+
*/
|
|
39
|
+
prefix: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
type ExpressionishVariableToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
|
|
43
|
+
type: "VARIABLE";
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type ExpressionishComparisonToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
|
|
47
|
+
type: "CONDITION";
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
type ExpressionishLogicToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
|
|
51
|
+
type: "LOGICAL";
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
type ExpressionishIfToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
|
|
55
|
+
type: "IF";
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Condition used for evaluation
|
|
59
|
+
*/
|
|
60
|
+
condition: ExpressionishLogicToken | ExpressionishComparisonToken;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
type ExpressionishUnknownToken = ExpressionishBaseToken & {
|
|
64
|
+
type: "UNKNOWN";
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export type ExpressionishToken =
|
|
68
|
+
| ExpressionishTextToken
|
|
69
|
+
| ExpressionishLookupToken
|
|
70
|
+
| ExpressionishVariableToken
|
|
71
|
+
| ExpressionishComparisonToken
|
|
72
|
+
| ExpressionishLogicToken
|
|
73
|
+
| ExpressionishIfToken
|
|
74
|
+
| ExpressionishUnknownToken;
|
package/types/games.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FirebotParamCategory } from "./parameters";
|
|
2
|
+
|
|
3
|
+
export type GameSettings = {
|
|
4
|
+
active: boolean;
|
|
5
|
+
settings?: Record<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type GameDefinition = {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
subtitle: string;
|
|
12
|
+
description: string;
|
|
13
|
+
icon: string;
|
|
14
|
+
active?: boolean;
|
|
15
|
+
settingCategories: Record<string, FirebotParamCategory<Record<string, unknown>>>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type FirebotGame = GameDefinition & {
|
|
19
|
+
onLoad: (settings: GameSettings) => void;
|
|
20
|
+
onUnload: (settings: GameSettings) => void;
|
|
21
|
+
onSettingsUpdate: (settings: GameSettings) => void;
|
|
22
|
+
};
|
package/types/goals.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EffectList } from "./effects";
|
|
2
|
+
|
|
3
|
+
export type FirebotHotkey = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
active: boolean;
|
|
7
|
+
// Electron accelerator string (see https://www.electronjs.org/docs/latest/api/accelerator)
|
|
8
|
+
code: string;
|
|
9
|
+
warning: string;
|
|
10
|
+
effects: EffectList;
|
|
11
|
+
sortTags: string[];
|
|
12
|
+
};
|
package/types/icons.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Quote } from "./quotes";
|
|
2
|
+
import type { FileFilter, Awaitable } from "./util-types";
|
|
3
|
+
|
|
4
|
+
export interface LoadRequest {
|
|
5
|
+
appId: string;
|
|
6
|
+
filepath: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface LoadResult<T = unknown[]> {
|
|
10
|
+
success: boolean;
|
|
11
|
+
data?: T;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type ParsedQuotes = {
|
|
16
|
+
quotes: Quote[];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type ParsedViewers<V = unknown> = {
|
|
20
|
+
viewers: V[];
|
|
21
|
+
ranks: string[];
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export interface ImportRequest<Data = unknown, Settings = unknown> {
|
|
25
|
+
appId: string;
|
|
26
|
+
data: Data;
|
|
27
|
+
settings: Settings;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface ImportResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
error?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type CustomImporterSettings = {
|
|
36
|
+
quotes?: unknown;
|
|
37
|
+
viewers?: unknown;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type ThirdPartyImporter<
|
|
41
|
+
Settings extends CustomImporterSettings = CustomImporterSettings,
|
|
42
|
+
ViewerType = unknown
|
|
43
|
+
> = {
|
|
44
|
+
id: string;
|
|
45
|
+
appName: string;
|
|
46
|
+
defaultSettings?: Settings;
|
|
47
|
+
filetypes: FileFilter[];
|
|
48
|
+
|
|
49
|
+
loadQuotes?: (
|
|
50
|
+
filename: string,
|
|
51
|
+
settings?: Settings["quotes"]
|
|
52
|
+
) => Awaitable<LoadResult<ParsedQuotes>>;
|
|
53
|
+
|
|
54
|
+
importQuotes?: (
|
|
55
|
+
quotes: Quote[],
|
|
56
|
+
settings: Settings["quotes"]
|
|
57
|
+
) => Awaitable<ImportResult>;
|
|
58
|
+
|
|
59
|
+
loadViewers?: (
|
|
60
|
+
filename: string,
|
|
61
|
+
settings?: Settings["viewers"]
|
|
62
|
+
) => Awaitable<LoadResult<ParsedViewers>>;
|
|
63
|
+
|
|
64
|
+
importViewers?: (
|
|
65
|
+
viewers: ViewerType[],
|
|
66
|
+
settings: Settings["viewers"],
|
|
67
|
+
abortSignal: AbortSignal
|
|
68
|
+
) => Awaitable<ImportResult>;
|
|
69
|
+
};
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export * from "./accounts";
|
|
2
|
+
export * from "./auth";
|
|
3
|
+
export * from "./channel-rewards";
|
|
4
|
+
export * from "./chat";
|
|
5
|
+
export * from "./commands";
|
|
6
|
+
export * from "./counters";
|
|
7
|
+
export * from "./currency";
|
|
8
|
+
export * from "./discord";
|
|
9
|
+
export * from "./effects";
|
|
10
|
+
export * from "./events";
|
|
11
|
+
export * from "./expressionish";
|
|
12
|
+
export * from "./games";
|
|
13
|
+
export * from "./goals";
|
|
14
|
+
export * from "./hotkeys";
|
|
15
|
+
export * from "./icons";
|
|
16
|
+
export * from "./import";
|
|
17
|
+
export * from "./integrations";
|
|
18
|
+
export * from "./moderation";
|
|
19
|
+
export * from "./modules";
|
|
20
|
+
export * from "./overlay-widgets";
|
|
21
|
+
export * from "./parameters";
|
|
22
|
+
export * from "./pronouns";
|
|
23
|
+
export * from "./quick-actions";
|
|
24
|
+
export * from "./quotes";
|
|
25
|
+
export * from "./ranks";
|
|
26
|
+
export * from "./restrictions";
|
|
27
|
+
export * from "./roles";
|
|
28
|
+
export * from "./settings";
|
|
29
|
+
export * from "./setups";
|
|
30
|
+
export * from "./sort-tags";
|
|
31
|
+
export * from "./timers";
|
|
32
|
+
export * from "./triggers";
|
|
33
|
+
export * from "./ui";
|
|
34
|
+
export * from "./util-types";
|
|
35
|
+
export * from "./variable-macros";
|
|
36
|
+
export * from "./variables";
|
|
37
|
+
export * from "./viewers";
|
|
38
|
+
export * from "./webhooks";
|
|
39
|
+
export * from "./websocket";
|
|
40
|
+
export * from "./plugins";
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
FirebotParameterCategories,
|
|
3
|
+
FirebotParams
|
|
4
|
+
} from "./parameters";
|
|
5
|
+
import type { Awaitable, ObjectOfUnknowns } from "./util-types";
|
|
6
|
+
|
|
7
|
+
export type Integration<Params extends FirebotParams = FirebotParams> = {
|
|
8
|
+
definition: IntegrationDefinition<Params>;
|
|
9
|
+
integration: IntegrationController<Params>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type IntegrationDefinition<
|
|
13
|
+
Params extends FirebotParams = FirebotParams
|
|
14
|
+
> = {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
connectionToggle?: boolean;
|
|
19
|
+
configurable?: boolean;
|
|
20
|
+
settingCategories: FirebotParameterCategories<Params>;
|
|
21
|
+
} & (
|
|
22
|
+
| {
|
|
23
|
+
linkType: "id";
|
|
24
|
+
idDetails: {
|
|
25
|
+
steps: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
linkType: "auth";
|
|
30
|
+
authProviderDetails: {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
redirectUriHost?: string;
|
|
34
|
+
client: {
|
|
35
|
+
id: string;
|
|
36
|
+
secret: string;
|
|
37
|
+
};
|
|
38
|
+
auth: {
|
|
39
|
+
tokenHost: string;
|
|
40
|
+
tokenPath: string;
|
|
41
|
+
authorizePath: string;
|
|
42
|
+
};
|
|
43
|
+
autoRefreshToken?: boolean;
|
|
44
|
+
scopes: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
| { linkType: "other" | "none" }
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
export interface IntegrationEvents {
|
|
51
|
+
connected: (id: string) => void;
|
|
52
|
+
disconnected: (id: string) => void;
|
|
53
|
+
"settings-update": (id: string, settings: Record<string, any>) => void;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type LinkData =
|
|
57
|
+
| {
|
|
58
|
+
accountId: string;
|
|
59
|
+
}
|
|
60
|
+
| {
|
|
61
|
+
auth: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
| null;
|
|
64
|
+
|
|
65
|
+
export type IntegrationData<Params extends FirebotParams = FirebotParams> = {
|
|
66
|
+
settings: any;
|
|
67
|
+
userSettings?: Params;
|
|
68
|
+
oauth?: any;
|
|
69
|
+
accountId?: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export interface IntegrationController<
|
|
73
|
+
Params extends FirebotParams = FirebotParams
|
|
74
|
+
> {
|
|
75
|
+
connected: boolean;
|
|
76
|
+
init(
|
|
77
|
+
linked: boolean,
|
|
78
|
+
integrationData: IntegrationData<Params>
|
|
79
|
+
): Awaitable<void>;
|
|
80
|
+
link?(linkData: LinkData): Awaitable<void>;
|
|
81
|
+
connect?(
|
|
82
|
+
integrationData: IntegrationData<Params>
|
|
83
|
+
): Awaitable<void>;
|
|
84
|
+
disconnect?(): Awaitable<void>;
|
|
85
|
+
onUserSettingsUpdate?(
|
|
86
|
+
integrationData: IntegrationData<Params>
|
|
87
|
+
): Awaitable<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
type IntegrationWithUnknowns = {
|
|
91
|
+
definition: IntegrationDefinition & ObjectOfUnknowns;
|
|
92
|
+
integration: IntegrationController & ObjectOfUnknowns;
|
|
93
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type ModerationTerm = {
|
|
2
|
+
text: string;
|
|
3
|
+
createdAt: number;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export type ModerationUser = {
|
|
7
|
+
id: string;
|
|
8
|
+
username: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type AllowedUser = {
|
|
13
|
+
id: string;
|
|
14
|
+
username: string;
|
|
15
|
+
displayName: string;
|
|
16
|
+
createdAt: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type BannedWords = {
|
|
20
|
+
words: ModerationTerm[];
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type BannedRegularExpressions = {
|
|
24
|
+
regularExpressions: ModerationTerm[];
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type AllowList = {
|
|
28
|
+
urls: ModerationTerm[];
|
|
29
|
+
users: AllowedUser[];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type ModerationImportRequest = {
|
|
33
|
+
filePath: string;
|
|
34
|
+
delimiter: "newline" | "comma" | "space";
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export type ChatModerationSettings = {
|
|
38
|
+
bannedWordList: {
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
exemptRoles: string[];
|
|
41
|
+
outputMessage?: string;
|
|
42
|
+
};
|
|
43
|
+
emoteLimit: {
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
exemptRoles: string[];
|
|
46
|
+
max: number;
|
|
47
|
+
outputMessage?: string;
|
|
48
|
+
};
|
|
49
|
+
urlModeration: {
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
exemptRoles: string[];
|
|
52
|
+
viewTime: {
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
viewTimeInHours: number;
|
|
55
|
+
};
|
|
56
|
+
outputMessage?: string;
|
|
57
|
+
};
|
|
58
|
+
exemptRoles: string[];
|
|
59
|
+
};
|