@lumiastream/lumia-types 3.3.5 → 3.3.7-alpha.1

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.
@@ -0,0 +1,157 @@
1
+ import { LumiaStreamingSites } from './activity.types';
2
+ /** Lifecycle of a single song request. */
3
+ export declare enum SongRequestStatus {
4
+ /** Awaiting moderator approval (only used when `config.approvalRequired`). */
5
+ PENDING = "pending",
6
+ /** Approved, waiting in the queue. */
7
+ QUEUED = "queued",
8
+ /** Currently playing. */
9
+ PLAYING = "playing",
10
+ /** Finished playing naturally. */
11
+ COMPLETED = "completed",
12
+ /** Rejected by streamer / mod before playing. */
13
+ DENIED = "denied",
14
+ /** Ended early (skip button or skip command). */
15
+ SKIPPED = "skipped"
16
+ }
17
+ /** Where a request entered the system. Used for analytics + permission checks. */
18
+ export declare enum SongRequestSource {
19
+ /** Triggered by the `!sr` system chatbot command. */
20
+ CHAT_COMMAND = "chat",
21
+ /** Triggered by the ADD_SONG_REQUEST Lumia action (decks, automations, …). */
22
+ LUMIA_ACTION = "action",
23
+ /** Streamer added directly from the dashboard. */
24
+ STREAMER = "streamer",
25
+ /** Mod added directly from the modtool window. */
26
+ MOD = "mod"
27
+ }
28
+ /** Format of the user's submission, before resolution. */
29
+ export declare enum SongRequestProvider {
30
+ /** YouTube watch URL or short URL. */
31
+ YOUTUBE = "youtube",
32
+ /** Spotify track URL — may be routed to Spotify queue or converted to YouTube. */
33
+ SPOTIFY = "spotify",
34
+ /** YouTube Music URL (less common; usually treated like YouTube). */
35
+ YOUTUBE_MUSIC = "youtubeMusic",
36
+ /** Free-text query that needs a search before it can play. */
37
+ TEXT = "text"
38
+ }
39
+ /** Where the resolved song actually plays once approved. */
40
+ export declare enum SongRequestPlaybackTarget {
41
+ /** Hidden YT iframe inside the songrequest overlay module (default). */
42
+ OVERLAY = "overlay",
43
+ /** Streamer's Spotify Premium player via Spotify Web API queue. */
44
+ SPOTIFY = "spotify",
45
+ /** Streamer's YouTube Music player via YT Music queue. */
46
+ YOUTUBE_MUSIC = "youtubeMusic"
47
+ }
48
+ /** A single request item — one row in the queue / pending tray / history. */
49
+ export interface SongRequestItem {
50
+ id: string;
51
+ status: SongRequestStatus;
52
+ source: SongRequestSource;
53
+ provider: SongRequestProvider;
54
+ /** Raw user input — the URL or text query they submitted. */
55
+ query: string;
56
+ resolvedUrl?: string;
57
+ /** YouTube video ID (resolved for both YOUTUBE and TEXT providers). */
58
+ videoId?: string;
59
+ /** Spotify track ID, when applicable. */
60
+ spotifyTrackId?: string;
61
+ title?: string;
62
+ artist?: string;
63
+ thumbnailUrl?: string;
64
+ durationSeconds?: number;
65
+ requesterUsername: string;
66
+ requesterPlatform?: LumiaStreamingSites;
67
+ requesterAvatar?: string;
68
+ approvedBy?: string;
69
+ approvedAt?: number;
70
+ deniedBy?: string;
71
+ deniedReason?: string;
72
+ /** Chosen at queue-entry time based on connected services + config. */
73
+ playbackTarget?: SongRequestPlaybackTarget;
74
+ createdAt: number;
75
+ startedAt?: number;
76
+ endedAt?: number;
77
+ tipAmount?: number;
78
+ tipCurrency?: string;
79
+ }
80
+ /**
81
+ * User-configurable settings for the song-request system. Lives in user
82
+ * settings (not in runtime state). Role gating for the `!sr` command piggybacks
83
+ * on the system command's own `userLevels` field — we deliberately do NOT
84
+ * duplicate it here.
85
+ */
86
+ export interface SongRequestConfig {
87
+ enabled: boolean;
88
+ /** Trigger word for the system chatbot command. Default: `!sr`. */
89
+ triggerCommand: string;
90
+ cooldownPerUserSeconds: number;
91
+ cooldownGlobalSeconds: number;
92
+ maxRequestsPerUserInSession: number;
93
+ /** When true, requests land in `pending` until a mod / streamer approves. */
94
+ approvalRequired: boolean;
95
+ maxQueueSize: number;
96
+ maxSongDurationSeconds: number;
97
+ allowYouTubeUrls: boolean;
98
+ allowSpotifyUrls: boolean;
99
+ allowFreeTextSearch: boolean;
100
+ /** Required for free-text → YouTube Data API v3 search. */
101
+ youtubeApiKey?: string;
102
+ /**
103
+ * Where approved songs play. `'auto'` = use the streamer's connected music
104
+ * service (Spotify Premium > YT Music) when available, otherwise the overlay
105
+ * iframe. The other values force a single target regardless of connections.
106
+ */
107
+ preferredPlaybackTarget: 'auto' | SongRequestPlaybackTarget;
108
+ announceInChat: boolean;
109
+ chatTemplateAdded: string;
110
+ chatTemplateNowPlaying: string;
111
+ chatTemplateDenied: string;
112
+ /** Used for dedup / cooldown / queue-full / disallowed-source rejections. */
113
+ chatTemplateRejected: string;
114
+ }
115
+ /** Runtime queue state. Lives in the LumiaStream Redux slice; the dashboard
116
+ * widgets and the overlay module consume slices of this shape. */
117
+ export interface SongRequestState {
118
+ /** Awaiting moderator approval (empty when `approvalRequired: false`). */
119
+ pending: SongRequestItem[];
120
+ /** Approved, waiting to play. Index 0 plays next. */
121
+ queue: SongRequestItem[];
122
+ /** Currently playing item, if any. */
123
+ nowPlaying: SongRequestItem | null;
124
+ /** Recently completed / skipped / denied items, newest first. Capped. */
125
+ history: SongRequestItem[];
126
+ }
127
+ /** Fired whenever the active queue or now-playing changes. */
128
+ export interface SongRequestQueueUpdatePayload {
129
+ queue: SongRequestItem[];
130
+ nowPlaying: SongRequestItem | null;
131
+ }
132
+ /** Fired whenever the pending tray changes (drives the moderation widget). */
133
+ export interface SongRequestPendingUpdatePayload {
134
+ pending: SongRequestItem[];
135
+ }
136
+ /** Lighter-weight ping when only nowPlaying changed (e.g., natural advance). */
137
+ export interface SongRequestNowPlayingPayload {
138
+ nowPlaying: SongRequestItem | null;
139
+ }
140
+ export interface SongRequestAddParams {
141
+ /** Raw input — URL or free text. The parser resolves it. */
142
+ query: string;
143
+ requesterUsername?: string;
144
+ requesterPlatform?: LumiaStreamingSites;
145
+ /** Defaults to `LUMIA_ACTION` when omitted (matches the action call site). */
146
+ source?: SongRequestSource;
147
+ /**
148
+ * Streamer / mod additions can skip the pending state. Chat-command
149
+ * additions ignore this flag — chat is always subject to `approvalRequired`.
150
+ */
151
+ forceApprove?: boolean;
152
+ }
153
+ export interface SongRequestModerationParams {
154
+ id: string;
155
+ /** Optional reason for deny actions (surfaced in chat / mod log). */
156
+ reason?: string;
157
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SongRequestPlaybackTarget = exports.SongRequestProvider = exports.SongRequestSource = exports.SongRequestStatus = void 0;
4
+ // ---------------------------------------------------------------------------
5
+ // Song Request — shared types for the native LumiaStream song-request system.
6
+ //
7
+ // Used by:
8
+ // - LumiaStream renderer (queue manager, system chatbot command, Lumia
9
+ // action handler, dashboard page + widgets)
10
+ // - Overlay-UI `songrequest` module (now-playing card + queue list + skip/
11
+ // pause UI; consumes SongRequestQueueUpdatePayload via SSE)
12
+ // - Lumia-UI `se-import` (`mapMediaShare` translates SE's
13
+ // `se-widget-media-share` widget into a Lumia `songrequest` module)
14
+ //
15
+ // Architecture summary (so this file's shape is legible standalone):
16
+ // 1. Viewers submit via `!sr <youtube-url|spotify-url|free text>` chat
17
+ // command. Streamer / mods can also add via the dashboard UI or via the
18
+ // ADD_SONG_REQUEST Lumia action.
19
+ // 2. Submission lands in `pending` for moderator approval (default) or
20
+ // jumps directly to `queue` when `forceApprove: true` (streamer / mod
21
+ // additions) or when `config.approvalRequired: false`.
22
+ // 3. Approved items get a `playbackTarget` chosen at queue time:
23
+ // - `OVERLAY` (default): hidden YT iframe inside the songrequest
24
+ // overlay module
25
+ // - `SPOTIFY`: routed to streamer's Spotify Premium queue via
26
+ // spotify.manager.SearchAndAddToQueue (already implemented)
27
+ // - `YOUTUBE_MUSIC`: routed to streamer's YT Music queue (handler
28
+ // to be added in Phase E)
29
+ // 4. Items move queue → nowPlaying → history (capped) as they play out.
30
+ // ---------------------------------------------------------------------------
31
+ /** Lifecycle of a single song request. */
32
+ var SongRequestStatus;
33
+ (function (SongRequestStatus) {
34
+ /** Awaiting moderator approval (only used when `config.approvalRequired`). */
35
+ SongRequestStatus["PENDING"] = "pending";
36
+ /** Approved, waiting in the queue. */
37
+ SongRequestStatus["QUEUED"] = "queued";
38
+ /** Currently playing. */
39
+ SongRequestStatus["PLAYING"] = "playing";
40
+ /** Finished playing naturally. */
41
+ SongRequestStatus["COMPLETED"] = "completed";
42
+ /** Rejected by streamer / mod before playing. */
43
+ SongRequestStatus["DENIED"] = "denied";
44
+ /** Ended early (skip button or skip command). */
45
+ SongRequestStatus["SKIPPED"] = "skipped";
46
+ })(SongRequestStatus || (exports.SongRequestStatus = SongRequestStatus = {}));
47
+ /** Where a request entered the system. Used for analytics + permission checks. */
48
+ var SongRequestSource;
49
+ (function (SongRequestSource) {
50
+ /** Triggered by the `!sr` system chatbot command. */
51
+ SongRequestSource["CHAT_COMMAND"] = "chat";
52
+ /** Triggered by the ADD_SONG_REQUEST Lumia action (decks, automations, …). */
53
+ SongRequestSource["LUMIA_ACTION"] = "action";
54
+ /** Streamer added directly from the dashboard. */
55
+ SongRequestSource["STREAMER"] = "streamer";
56
+ /** Mod added directly from the modtool window. */
57
+ SongRequestSource["MOD"] = "mod";
58
+ })(SongRequestSource || (exports.SongRequestSource = SongRequestSource = {}));
59
+ /** Format of the user's submission, before resolution. */
60
+ var SongRequestProvider;
61
+ (function (SongRequestProvider) {
62
+ /** YouTube watch URL or short URL. */
63
+ SongRequestProvider["YOUTUBE"] = "youtube";
64
+ /** Spotify track URL — may be routed to Spotify queue or converted to YouTube. */
65
+ SongRequestProvider["SPOTIFY"] = "spotify";
66
+ /** YouTube Music URL (less common; usually treated like YouTube). */
67
+ SongRequestProvider["YOUTUBE_MUSIC"] = "youtubeMusic";
68
+ /** Free-text query that needs a search before it can play. */
69
+ SongRequestProvider["TEXT"] = "text";
70
+ })(SongRequestProvider || (exports.SongRequestProvider = SongRequestProvider = {}));
71
+ /** Where the resolved song actually plays once approved. */
72
+ var SongRequestPlaybackTarget;
73
+ (function (SongRequestPlaybackTarget) {
74
+ /** Hidden YT iframe inside the songrequest overlay module (default). */
75
+ SongRequestPlaybackTarget["OVERLAY"] = "overlay";
76
+ /** Streamer's Spotify Premium player via Spotify Web API queue. */
77
+ SongRequestPlaybackTarget["SPOTIFY"] = "spotify";
78
+ /** Streamer's YouTube Music player via YT Music queue. */
79
+ SongRequestPlaybackTarget["YOUTUBE_MUSIC"] = "youtubeMusic";
80
+ })(SongRequestPlaybackTarget || (exports.SongRequestPlaybackTarget = SongRequestPlaybackTarget = {}));
@@ -158,6 +158,30 @@ export declare enum SystemVariables {
158
158
  SESSION_DONATOR_LIST_WITH_AMOUNT = "session_donator_list_with_amount",
159
159
  /** Raw donation total ignoring currency. Use as {{total_raw_donation_amount}}. */
160
160
  TOTAL_RAW_DONATION_AMOUNT = "total_raw_donation_amount",
161
+ /** Donation sum for the current calendar week. Use as {{week_donation_amount}}. */
162
+ WEEK_DONATION_AMOUNT = "week_donation_amount",
163
+ /** Donation sum for the current calendar month. Use as {{month_donation_amount}}. */
164
+ MONTH_DONATION_AMOUNT = "month_donation_amount",
165
+ /** Donation event count for the current calendar week. Use as {{week_donation_count}}. */
166
+ WEEK_DONATION_COUNT = "week_donation_count",
167
+ /** Donation event count for the current calendar month. Use as {{month_donation_count}}. */
168
+ MONTH_DONATION_COUNT = "month_donation_count",
169
+ /** Top donator for the current calendar week. Use as {{week_top_donator}}. */
170
+ WEEK_TOP_DONATOR = "week_top_donator",
171
+ /** Amount for WEEK_TOP_DONATOR. Use as {{week_top_donator_amount}}. */
172
+ WEEK_TOP_DONATOR_AMOUNT = "week_top_donator_amount",
173
+ /** Top donators this week (top 10, comma-separated usernames). Use as {{week_top_donator_list}}. */
174
+ WEEK_TOP_DONATOR_LIST = "week_top_donator_list",
175
+ /** Amounts for WEEK_TOP_DONATOR_LIST (parallel comma-separated). Use as {{week_top_donator_list_amount}}. */
176
+ WEEK_TOP_DONATOR_LIST_AMOUNT = "week_top_donator_list_amount",
177
+ /** Top donator for the current calendar month. Use as {{month_top_donator}}. */
178
+ MONTH_TOP_DONATOR = "month_top_donator",
179
+ /** Amount for MONTH_TOP_DONATOR. Use as {{month_top_donator_amount}}. */
180
+ MONTH_TOP_DONATOR_AMOUNT = "month_top_donator_amount",
181
+ /** Top donators this month. Use as {{month_top_donator_list}}. */
182
+ MONTH_TOP_DONATOR_LIST = "month_top_donator_list",
183
+ /** Amounts for MONTH_TOP_DONATOR_LIST. Use as {{month_top_donator_list_amount}}. */
184
+ MONTH_TOP_DONATOR_LIST_AMOUNT = "month_top_donator_list_amount",
161
185
  /** Raffle title. Use as {{raffle_title}}. */
162
186
  RAFFLE_TITLE = "raffle_title",
163
187
  /** Raffle description. Use as {{raffle_description}}. */
@@ -246,14 +270,32 @@ export declare enum SystemVariables {
246
270
  TWITCH_CURRENT_FOLLOWERS = "twitch_current_followers",
247
271
  /** Session followers count. Use as {{twitch_session_follower_count}}. */
248
272
  TWITCH_SESSION_FOLLOWER_COUNT = "twitch_session_follower_count",
273
+ /** Followers for the current calendar week. Use as {{twitch_week_follower_count}}. */
274
+ TWITCH_WEEK_FOLLOWER_COUNT = "twitch_week_follower_count",
275
+ /** Followers for the current calendar month. Use as {{twitch_month_follower_count}}. */
276
+ TWITCH_MONTH_FOLLOWER_COUNT = "twitch_month_follower_count",
249
277
  /** Current subscribers (comma-separated). Use as {{twitch_current_subscribers}}. */
250
278
  TWITCH_CURRENT_SUBSCRIBERS = "twitch_current_subscribers",
251
279
  /** Lifetime total subs. Use as {{twitch_total_subscriber_count}}. */
252
280
  TWITCH_TOTAL_SUBSCRIBER_COUNT = "twitch_total_subscriber_count",
253
281
  /** Session subs count. Use as {{twitch_session_subscribers_count}}. */
254
282
  TWITCH_SESSION_SUBSCRIBERS_COUNT = "twitch_session_subscribers_count",
283
+ /** Session NEW subscribers (excluding resubs / gifts). Use as {{twitch_session_new_subscribers_count}}. */
284
+ TWITCH_SESSION_NEW_SUBSCRIBERS_COUNT = "twitch_session_new_subscribers_count",
285
+ /** Session resubscribers (excluding new / gifts). Use as {{twitch_session_resub_subscribers_count}}. */
286
+ TWITCH_SESSION_RESUB_SUBSCRIBERS_COUNT = "twitch_session_resub_subscribers_count",
287
+ /** Session gifted subscribers. Use as {{twitch_session_gifted_subscribers_count}}. */
288
+ TWITCH_SESSION_GIFTED_SUBSCRIBERS_COUNT = "twitch_session_gifted_subscribers_count",
289
+ /** Subscribers for the current calendar week. Use as {{twitch_week_subscriber_count}}. */
290
+ TWITCH_WEEK_SUBSCRIBER_COUNT = "twitch_week_subscriber_count",
291
+ /** Subscribers for the current calendar month. Use as {{twitch_month_subscriber_count}}. */
292
+ TWITCH_MONTH_SUBSCRIBER_COUNT = "twitch_month_subscriber_count",
255
293
  /** Session gifts count. Use as {{twitch_session_gifts_count}}. */
256
294
  TWITCH_SESSION_GIFTS_COUNT = "twitch_session_gifts_count",
295
+ /** All-time top gifter. Use as {{twitch_alltime_top_gifter}}. */
296
+ TWITCH_ALLTIME_TOP_GIFTER = "twitch_alltime_top_gifter",
297
+ /** Lifetime gift count for TWITCH_ALLTIME_TOP_GIFTER. Use as {{twitch_alltime_top_gifter_amount}}. */
298
+ TWITCH_ALLTIME_TOP_GIFTER_AMOUNT = "twitch_alltime_top_gifter_amount",
257
299
  /** Lifetime gift members count. Use as {{twitch_total_gift_subscription_count}}. */
258
300
  TWITCH_TOTAL_GIFT_SUBSCRIPTION_COUNT = "twitch_total_gift_subscription_count",
259
301
  /** Current moderators (comma-separated). Use as {{twitch_current_mods}}. */
@@ -292,6 +334,10 @@ export declare enum SystemVariables {
292
334
  TWITCH_TOTAL_BITS_COUNT = "twitch_total_bits_count",
293
335
  /** Session bits count. Use as {{twitch_session_bits_count}}. */
294
336
  TWITCH_SESSION_BITS_COUNT = "twitch_session_bits_count",
337
+ /** Bits for the current calendar week. Use as {{twitch_week_bits_count}}. */
338
+ TWITCH_WEEK_BITS_COUNT = "twitch_week_bits_count",
339
+ /** Bits for the current calendar month. Use as {{twitch_month_bits_count}}. */
340
+ TWITCH_MONTH_BITS_COUNT = "twitch_month_bits_count",
295
341
  /** Last bit sender. Use as {{twitch_last_bit}}. */
296
342
  TWITCH_LAST_BIT = "twitch_last_bit",
297
343
  /** Last bit amount. Use as {{twitch_last_bit_amount}}. */
@@ -300,6 +346,64 @@ export declare enum SystemVariables {
300
346
  TWITCH_SESSION_BITS = "twitch_session_bits",
301
347
  /** Session bits with amounts list. Use as {{twitch_session_bits_with_amount}}. */
302
348
  TWITCH_SESSION_BITS_WITH_AMOUNT = "twitch_session_bits_with_amount",
349
+ /** Top single cheer this session. Use as {{twitch_session_top_cheer}}. */
350
+ TWITCH_SESSION_TOP_CHEER = "twitch_session_top_cheer",
351
+ /** Amount for TWITCH_SESSION_TOP_CHEER. Use as {{twitch_session_top_cheer_amount}}. */
352
+ TWITCH_SESSION_TOP_CHEER_AMOUNT = "twitch_session_top_cheer_amount",
353
+ /** Top cheerer this session (by total bits). Use as {{twitch_session_top_cheerer}}. */
354
+ TWITCH_SESSION_TOP_CHEERER = "twitch_session_top_cheerer",
355
+ /** Total bits for TWITCH_SESSION_TOP_CHEERER. Use as {{twitch_session_top_cheerer_amount}}. */
356
+ TWITCH_SESSION_TOP_CHEERER_AMOUNT = "twitch_session_top_cheerer_amount",
357
+ /** Top cheerer for the current calendar week. Use as {{twitch_week_top_cheerer}}. */
358
+ TWITCH_WEEK_TOP_CHEERER = "twitch_week_top_cheerer",
359
+ /** Total bits for TWITCH_WEEK_TOP_CHEERER. Use as {{twitch_week_top_cheerer_amount}}. */
360
+ TWITCH_WEEK_TOP_CHEERER_AMOUNT = "twitch_week_top_cheerer_amount",
361
+ /** Top cheerer for the current calendar month. Use as {{twitch_month_top_cheerer}}. */
362
+ TWITCH_MONTH_TOP_CHEERER = "twitch_month_top_cheerer",
363
+ /** Total bits for TWITCH_MONTH_TOP_CHEERER. Use as {{twitch_month_top_cheerer_amount}}. */
364
+ TWITCH_MONTH_TOP_CHEERER_AMOUNT = "twitch_month_top_cheerer_amount",
365
+ /** Whether a hype train is currently active (true/false). Use as {{twitch_hypetrain_active}}. */
366
+ TWITCH_HYPETRAIN_ACTIVE = "twitch_hypetrain_active",
367
+ /** Current hype train level. Use as {{twitch_hypetrain_level}}. */
368
+ TWITCH_HYPETRAIN_LEVEL = "twitch_hypetrain_level",
369
+ /** Current hype train progress toward the next level. Use as {{twitch_hypetrain_progress}}. */
370
+ TWITCH_HYPETRAIN_PROGRESS = "twitch_hypetrain_progress",
371
+ /** Target value to reach the next hype train level. Use as {{twitch_hypetrain_level_goal}}. */
372
+ TWITCH_HYPETRAIN_LEVEL_GOAL = "twitch_hypetrain_level_goal",
373
+ /** Total contributions this hype train (running sum). Use as {{twitch_hypetrain_total}}. */
374
+ TWITCH_HYPETRAIN_TOTAL = "twitch_hypetrain_total",
375
+ /** Top contributor for the current hype train. Use as {{twitch_hypetrain_top_contributor}}. */
376
+ TWITCH_HYPETRAIN_TOP_CONTRIBUTOR = "twitch_hypetrain_top_contributor",
377
+ /** Amount contributed by TWITCH_HYPETRAIN_TOP_CONTRIBUTOR. Use as {{twitch_hypetrain_top_contributor_amount}}. */
378
+ TWITCH_HYPETRAIN_TOP_CONTRIBUTOR_AMOUNT = "twitch_hypetrain_top_contributor_amount",
379
+ /** All-time top cheerer (by total bits). Use as {{twitch_alltime_top_cheerer}}. */
380
+ TWITCH_ALLTIME_TOP_CHEERER = "twitch_alltime_top_cheerer",
381
+ /** Total bits for TWITCH_ALLTIME_TOP_CHEERER. Use as {{twitch_alltime_top_cheerer_amount}}. */
382
+ TWITCH_ALLTIME_TOP_CHEERER_AMOUNT = "twitch_alltime_top_cheerer_amount",
383
+ /** Top cheerers list (top 10, comma-separated usernames, sorted by total bits). Use as {{top_cheerer_list}}. */
384
+ TOP_CHEERER_LIST = "top_cheerer_list",
385
+ /** Total bits for TOP_CHEERER_LIST (parallel comma-separated). Use as {{top_cheerer_list_amount}}. */
386
+ TOP_CHEERER_LIST_AMOUNT = "top_cheerer_list_amount",
387
+ /** Top cheerers this week (top 10, comma-separated usernames). Use as {{week_top_cheerer_list}}. */
388
+ WEEK_TOP_CHEERER_LIST = "week_top_cheerer_list",
389
+ /** Total bits for WEEK_TOP_CHEERER_LIST (parallel comma-separated). Use as {{week_top_cheerer_list_amount}}. */
390
+ WEEK_TOP_CHEERER_LIST_AMOUNT = "week_top_cheerer_list_amount",
391
+ /** Top cheerers this month. Use as {{month_top_cheerer_list}}. */
392
+ MONTH_TOP_CHEERER_LIST = "month_top_cheerer_list",
393
+ /** Total bits for MONTH_TOP_CHEERER_LIST. Use as {{month_top_cheerer_list_amount}}. */
394
+ MONTH_TOP_CHEERER_LIST_AMOUNT = "month_top_cheerer_list_amount",
395
+ /** Top gifters list (top 10, comma-separated usernames, sorted by lifetime gifted subs). Use as {{top_gifter_list}}. */
396
+ TOP_GIFTER_LIST = "top_gifter_list",
397
+ /** Total gifts for TOP_GIFTER_LIST (parallel comma-separated). Use as {{top_gifter_list_amount}}. */
398
+ TOP_GIFTER_LIST_AMOUNT = "top_gifter_list_amount",
399
+ /** Top gifters this week. Use as {{week_top_gifter_list}}. */
400
+ WEEK_TOP_GIFTER_LIST = "week_top_gifter_list",
401
+ /** Total gifts for WEEK_TOP_GIFTER_LIST. Use as {{week_top_gifter_list_amount}}. */
402
+ WEEK_TOP_GIFTER_LIST_AMOUNT = "week_top_gifter_list_amount",
403
+ /** Top gifters this month. Use as {{month_top_gifter_list}}. */
404
+ MONTH_TOP_GIFTER_LIST = "month_top_gifter_list",
405
+ /** Total gifts for MONTH_TOP_GIFTER_LIST. Use as {{month_top_gifter_list_amount}}. */
406
+ MONTH_TOP_GIFTER_LIST_AMOUNT = "month_top_gifter_list_amount",
303
407
  /** Last clip ID. Use as {{twitch_last_clip_id}}. */
304
408
  TWITCH_LAST_CLIP_ID = "twitch_last_clip_id",
305
409
  /** Last clip URL. Use as {{twitch_last_clip_url}}. */
@@ -322,6 +426,10 @@ export declare enum SystemVariables {
322
426
  TWITCH_CURRENT_POLL_ID = "twitch_current_poll_id",
323
427
  /** Current prediction ID. Use as {{twitch_current_prediction_id}}. */
324
428
  TWITCH_CURRENT_PREDICTION_ID = "twitch_current_prediction_id",
429
+ /** Channel id. Use as {{youtube_channel_id}}. */
430
+ YOUTUBE_CHANNEL_ID = "youtube_channel_id",
431
+ /** Channel username (custom URL slug, falls back to channel title). Use as {{youtube_username}}. */
432
+ YOUTUBE_USERNAME = "youtube_username",
325
433
  /** Current viewer count. Use as {{youtube_current_viewer_count}}. */
326
434
  YOUTUBE_CURRENT_VIEWER_COUNT = "youtube_current_viewer_count",
327
435
  /** Total viewer count (stream). Use as {{youtube_total_viewer_count}}. */
@@ -346,6 +454,10 @@ export declare enum SystemVariables {
346
454
  YOUTUBE_LAST_CHATTER = "youtube_last_chatter",
347
455
  /** Session subscriber count. Use as {{youtube_session_subscriber_count}}. */
348
456
  YOUTUBE_SESSION_SUBSCRIBER_COUNT = "youtube_session_subscriber_count",
457
+ /** Subscribers for the current calendar week. Use as {{youtube_week_subscriber_count}}. */
458
+ YOUTUBE_WEEK_SUBSCRIBER_COUNT = "youtube_week_subscriber_count",
459
+ /** Subscribers for the current calendar month. Use as {{youtube_month_subscriber_count}}. */
460
+ YOUTUBE_MONTH_SUBSCRIBER_COUNT = "youtube_month_subscriber_count",
349
461
  /** Lifetime subscriber count. Use as {{youtube_total_subscriber_count}}. */
350
462
  YOUTUBE_TOTAL_SUBSCRIBER_COUNT = "youtube_total_subscriber_count",
351
463
  /** Session SuperChat count. Use as {{youtube_session_superchat_count}}. */
@@ -364,6 +476,10 @@ export declare enum SystemVariables {
364
476
  YOUTUBE_TOTAL_MEMBER_COUNT = "youtube_total_member_count",
365
477
  /** Session member count. Use as {{youtube_session_member_count}}. */
366
478
  YOUTUBE_SESSION_MEMBER_COUNT = "youtube_session_member_count",
479
+ /** Members for the current calendar week. Use as {{youtube_week_member_count}}. */
480
+ YOUTUBE_WEEK_MEMBER_COUNT = "youtube_week_member_count",
481
+ /** Members for the current calendar month. Use as {{youtube_month_member_count}}. */
482
+ YOUTUBE_MONTH_MEMBER_COUNT = "youtube_month_member_count",
367
483
  /** Last member. Use as {{youtube_last_member}}. */
368
484
  YOUTUBE_LAST_MEMBER = "youtube_last_member",
369
485
  /** Session members (list). Use as {{youtube_session_members}}. */
@@ -392,6 +508,10 @@ export declare enum SystemVariables {
392
508
  YOUTUBE_TOTAL_VIDEO_COUNT = "youtube_total_video_count",
393
509
  /** Total channel views. Use as {{youtube_total_view_count}}. */
394
510
  YOUTUBE_TOTAL_VIEW_COUNT = "youtube_total_view_count",
511
+ /** Page / user id. Use as {{facebook_user_id}}. */
512
+ FACEBOOK_USER_ID = "facebook_user_id",
513
+ /** Page / user username. Use as {{facebook_username}}. */
514
+ FACEBOOK_USERNAME = "facebook_username",
395
515
  /** Session chat count. Use as {{facebook_session_chat_count}}. */
396
516
  FACEBOOK_SESSION_CHAT_COUNT = "facebook_session_chat_count",
397
517
  /** Current first chatter. Use as {{facebook_current_first_chatter}}. */
@@ -408,10 +528,18 @@ export declare enum SystemVariables {
408
528
  FACEBOOK_TOTAL_FOLLOWER_COUNT = "facebook_total_follower_count",
409
529
  /** Session follower count. Use as {{facebook_session_follower_count}}. */
410
530
  FACEBOOK_SESSION_FOLLOWER_COUNT = "facebook_session_follower_count",
531
+ /** Followers for the current calendar week. Use as {{facebook_week_follower_count}}. */
532
+ FACEBOOK_WEEK_FOLLOWER_COUNT = "facebook_week_follower_count",
533
+ /** Followers for the current calendar month. Use as {{facebook_month_follower_count}}. */
534
+ FACEBOOK_MONTH_FOLLOWER_COUNT = "facebook_month_follower_count",
411
535
  /** Lifetime fan count. Use as {{facebook_total_fan_count}}. */
412
536
  FACEBOOK_TOTAL_FAN_COUNT = "facebook_total_fan_count",
413
537
  /** Session fan count. Use as {{facebook_session_fan_count}}. */
414
538
  FACEBOOK_SESSION_FAN_COUNT = "facebook_session_fan_count",
539
+ /** Fans for the current calendar week. Use as {{facebook_week_fan_count}}. */
540
+ FACEBOOK_WEEK_FAN_COUNT = "facebook_week_fan_count",
541
+ /** Fans for the current calendar month. Use as {{facebook_month_fan_count}}. */
542
+ FACEBOOK_MONTH_FAN_COUNT = "facebook_month_fan_count",
415
543
  /** Session reaction count. Use as {{facebook_reaction_count}}. */
416
544
  FACEBOOK_REACTION_COUNT = "facebook_reaction_count",
417
545
  /** Last Stars sender. Use as {{facebook_last_star}}. */
@@ -422,6 +550,10 @@ export declare enum SystemVariables {
422
550
  FACEBOOK_SESSION_STARS = "facebook_session_stars",
423
551
  /** Session Stars with amounts list. Use as {{facebook_session_stars_with_amount}}. */
424
552
  FACEBOOK_SESSION_STARS_WITH_AMOUNT = "facebook_session_stars_with_amount",
553
+ /** Channel user id. Use as {{tiktok_user_id}}. */
554
+ TIKTOK_USER_ID = "tiktok_user_id",
555
+ /** Channel username. Use as {{tiktok_username}}. */
556
+ TIKTOK_USERNAME = "tiktok_username",
425
557
  /** Session chat count. Use as {{tiktok_session_chat_count}}. */
426
558
  TIKTOK_SESSION_CHAT_COUNT = "tiktok_session_chat_count",
427
559
  /** Current first chatter. Use as {{tiktok_current_first_chatter}}. */
@@ -440,6 +572,10 @@ export declare enum SystemVariables {
440
572
  TIKTOK_TOTAL_FOLLOWER_COUNT = "tiktok_total_follower_count",
441
573
  /** Session follower count. Use as {{tiktok_session_follower_count}}. */
442
574
  TIKTOK_SESSION_FOLLOWER_COUNT = "tiktok_session_follower_count",
575
+ /** Followers for the current calendar week. Use as {{tiktok_week_follower_count}}. */
576
+ TIKTOK_WEEK_FOLLOWER_COUNT = "tiktok_week_follower_count",
577
+ /** Followers for the current calendar month. Use as {{tiktok_month_follower_count}}. */
578
+ TIKTOK_MONTH_FOLLOWER_COUNT = "tiktok_month_follower_count",
443
579
  /** Session super fan count. Use as {{tiktok_session_super_fan_count}}. */
444
580
  TIKTOK_SESSION_SUPER_FAN_COUNT = "tiktok_session_super_fan_count",
445
581
  /** Session share count. Use as {{tiktok_session_share_count}}. */
@@ -502,10 +638,18 @@ export declare enum SystemVariables {
502
638
  KICK_TOTAL_FOLLOWER_COUNT = "kick_total_follower_count",
503
639
  /** Session follower count. Use as {{kick_session_follower_count}}. */
504
640
  KICK_SESSION_FOLLOWER_COUNT = "kick_session_follower_count",
641
+ /** Followers for the current calendar week. Use as {{kick_week_follower_count}}. */
642
+ KICK_WEEK_FOLLOWER_COUNT = "kick_week_follower_count",
643
+ /** Followers for the current calendar month. Use as {{kick_month_follower_count}}. */
644
+ KICK_MONTH_FOLLOWER_COUNT = "kick_month_follower_count",
505
645
  /** Lifetime total subs. Use as {{kick_total_subscriber_count}}. */
506
646
  KICK_TOTAL_SUBSCRIBER_COUNT = "kick_total_subscriber_count",
507
647
  /** Session subs count. Use as {{kick_session_subscriber_count}}. */
508
648
  KICK_SESSION_SUBSCRIBER_COUNT = "kick_session_subscriber_count",
649
+ /** Subscribers for the current calendar week. Use as {{kick_week_subscriber_count}}. */
650
+ KICK_WEEK_SUBSCRIBER_COUNT = "kick_week_subscriber_count",
651
+ /** Subscribers for the current calendar month. Use as {{kick_month_subscriber_count}}. */
652
+ KICK_MONTH_SUBSCRIBER_COUNT = "kick_month_subscriber_count",
509
653
  /** Session gifts count. Use as {{kick_session_gifts_count}}. */
510
654
  KICK_SESSION_GIFTS_COUNT = "kick_session_gifts_count",
511
655
  /** Session subscribers list. Use as {{kick_session_subscribers}}. */