@lumiastream/lumia-types 2.6.6 → 2.6.8

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.
@@ -153,6 +153,8 @@ export declare enum LumiaAlertValues {
153
153
  LUMIASTREAM_VIEWERQUEUE_STARTED = "lumiastream-viewerqueueStarted",
154
154
  /** Viewer queue ended */
155
155
  LUMIASTREAM_VIEWERQUEUE_ENDED = "lumiastream-viewerqueueEnded",
156
+ /** Viewer achievement unlocked */
157
+ LUMIASTREAM_VIEWER_ACHIEVEMENT = "lumiastream-viewerAchievement",
156
158
  /** Roulette winner selected */
157
159
  LUMIASTREAM_ROULETTE_WINNER = "lumiastream-rouletteWinner",
158
160
  /** Slots winner */
@@ -541,6 +543,7 @@ export declare const LumiaAlertFriendlyValues: {
541
543
  "lumiastream-pollEnded": string;
542
544
  "lumiastream-viewerqueueStarted": string;
543
545
  "lumiastream-viewerqueueEnded": string;
546
+ "lumiastream-viewerAchievement": string;
544
547
  "lumiastream-rouletteWinner": string;
545
548
  "lumiastream-slotsWinner": string;
546
549
  "twitch-extension": string;
@@ -168,6 +168,8 @@ var LumiaAlertValues;
168
168
  LumiaAlertValues["LUMIASTREAM_VIEWERQUEUE_STARTED"] = "lumiastream-viewerqueueStarted";
169
169
  /** Viewer queue ended */
170
170
  LumiaAlertValues["LUMIASTREAM_VIEWERQUEUE_ENDED"] = "lumiastream-viewerqueueEnded";
171
+ /** Viewer achievement unlocked */
172
+ LumiaAlertValues["LUMIASTREAM_VIEWER_ACHIEVEMENT"] = "lumiastream-viewerAchievement";
171
173
  /** Roulette winner selected */
172
174
  LumiaAlertValues["LUMIASTREAM_ROULETTE_WINNER"] = "lumiastream-rouletteWinner";
173
175
  /** Slots winner */
@@ -573,6 +575,7 @@ exports.LumiaAlertFriendlyValues = {
573
575
  [LumiaAlertValues.LUMIASTREAM_POLL_ENDED]: 'Poll Ended',
574
576
  [LumiaAlertValues.LUMIASTREAM_VIEWERQUEUE_STARTED]: 'Viewer Queue Started',
575
577
  [LumiaAlertValues.LUMIASTREAM_VIEWERQUEUE_ENDED]: 'Viewer Queue Ended',
578
+ [LumiaAlertValues.LUMIASTREAM_VIEWER_ACHIEVEMENT]: 'Viewer Achievement',
576
579
  [LumiaAlertValues.LUMIASTREAM_ROULETTE_WINNER]: 'Roulette Winner',
577
580
  [LumiaAlertValues.LUMIASTREAM_SLOTS_WINNER]: 'Slots Winner',
578
581
  [LumiaAlertValues.TWITCH_EXTENSION]: 'Twitch Extension',
@@ -5,6 +5,7 @@ const activity_types_1 = require("./activity.types");
5
5
  const event_types_1 = require("./event.types");
6
6
  const variables_types_1 = require("./variables.types");
7
7
  const youtube_superstickers_1 = require("./youtube_superstickers");
8
+ const viewer_profile_achievements_1 = require("./viewer_profile_achievements");
8
9
  var LumiaVariationConditions;
9
10
  (function (LumiaVariationConditions) {
10
11
  LumiaVariationConditions["RANDOM"] = "RANDOM";
@@ -555,6 +556,24 @@ exports.LumiaAlertConfigs = {
555
556
  inputFields: [],
556
557
  LumiaVariationConditions: [{ type: LumiaVariationConditions.RANDOM }],
557
558
  },
559
+ [activity_types_1.LumiaAlertValues.LUMIASTREAM_VIEWER_ACHIEVEMENT]: {
560
+ connection: event_types_1.LumiaIntegrations.LUMIASTREAM,
561
+ message: '{{username}} unlocked the {{achievement_name}} achievement!',
562
+ eventlistSpecialUsername: 'lumiastream',
563
+ eventlistMessage: 'Viewer Achievement',
564
+ eventlistDetailedMessage: '{{username}} unlocked the {{achievement_name}} achievement!',
565
+ acceptedVariables: variables_types_1.AllVariables.lumiastream.alerts.viewerAchievement,
566
+ quickActions: [],
567
+ inputFields: [],
568
+ LumiaVariationConditions: [
569
+ { type: LumiaVariationConditions.RANDOM },
570
+ {
571
+ type: LumiaVariationConditions.EQUAL_SELECTION,
572
+ description: 'Achievement Name',
573
+ selections: viewer_profile_achievements_1.VIEWER_PROFILE_ACHIEVEMENTS.map((achievement) => ({ label: achievement.label, value: achievement.label })),
574
+ },
575
+ ],
576
+ },
558
577
  [activity_types_1.LumiaAlertValues.LUMIASTREAM_ROULETTE_WINNER]: {
559
578
  connection: event_types_1.LumiaIntegrations.LUMIASTREAM,
560
579
  message: 'Congratulations {{username}}! The ball landed on {{ball_position}}. You win {{outcome_amount}} {{loyalty_currency_name}}! Well played! 🎉',
@@ -416,6 +416,8 @@ export declare enum LumiaAlertValues {
416
416
  LUMIASTREAM_VIEWERQUEUE_STARTED = "lumiastream-viewerqueueStarted",
417
417
  /** Viewer queue ended */
418
418
  LUMIASTREAM_VIEWERQUEUE_ENDED = "lumiastream-viewerqueueEnded",
419
+ /** Viewer achievement unlocked */
420
+ LUMIASTREAM_VIEWER_ACHIEVEMENT = "lumiastream-viewerAchievement",
419
421
  /** Roulette winner selected */
420
422
  LUMIASTREAM_ROULETTE_WINNER = "lumiastream-rouletteWinner",
421
423
  /** Slots winner */
@@ -959,6 +961,18 @@ export declare enum SystemVariables {
959
961
  VIEWERQUEUE_ENTRIES_COUNT = "viewerqueue_entries_count",
960
962
  /** Viewer queue max entries limit. Use as {{viewerqueue_queue_limit}}. */
961
963
  VIEWERQUEUE_QUEUE_LIMIT = "viewerqueue_queue_limit",
964
+ /** Achievement id. Use as {{achievement_id}}. */
965
+ ACHIEVEMENT_ID = "achievement_id",
966
+ /** Achievement name. Use as {{achievement_name}}. */
967
+ ACHIEVEMENT_NAME = "achievement_name",
968
+ /** Achievement description. Use as {{achievement_description}}. */
969
+ ACHIEVEMENT_DESCRIPTION = "achievement_description",
970
+ /** Achievements completed count. Use as {{achievements_completed}}. */
971
+ ACHIEVEMENTS_COMPLETED = "achievements_completed",
972
+ /** Achievements total count. Use as {{achievements_total}}. */
973
+ ACHIEVEMENTS_TOTAL = "achievements_total",
974
+ /** Achievement completion percent. Use as {{achievements_percent}}. */
975
+ ACHIEVEMENTS_PERCENT = "achievements_percent",
962
976
  /** Response from most recent API Action (JSON stringified). Use as {{api_action_global_response}}. */
963
977
  API_ACTION_GLOBAL_RESPONSE = "api_action_global_response",
964
978
  /** Last RANDOM_INPUT selection. Use as {{last_random_input}}. */
@@ -416,6 +416,8 @@ export declare enum LumiaAlertValues {
416
416
  LUMIASTREAM_VIEWERQUEUE_STARTED = "lumiastream-viewerqueueStarted",
417
417
  /** Viewer queue ended */
418
418
  LUMIASTREAM_VIEWERQUEUE_ENDED = "lumiastream-viewerqueueEnded",
419
+ /** Viewer achievement unlocked */
420
+ LUMIASTREAM_VIEWER_ACHIEVEMENT = "lumiastream-viewerAchievement",
419
421
  /** Roulette winner selected */
420
422
  LUMIASTREAM_ROULETTE_WINNER = "lumiastream-rouletteWinner",
421
423
  /** Slots winner */
@@ -959,6 +961,18 @@ export declare enum SystemVariables {
959
961
  VIEWERQUEUE_ENTRIES_COUNT = "viewerqueue_entries_count",
960
962
  /** Viewer queue max entries limit. Use as {{viewerqueue_queue_limit}}. */
961
963
  VIEWERQUEUE_QUEUE_LIMIT = "viewerqueue_queue_limit",
964
+ /** Achievement id. Use as {{achievement_id}}. */
965
+ ACHIEVEMENT_ID = "achievement_id",
966
+ /** Achievement name. Use as {{achievement_name}}. */
967
+ ACHIEVEMENT_NAME = "achievement_name",
968
+ /** Achievement description. Use as {{achievement_description}}. */
969
+ ACHIEVEMENT_DESCRIPTION = "achievement_description",
970
+ /** Achievements completed count. Use as {{achievements_completed}}. */
971
+ ACHIEVEMENTS_COMPLETED = "achievements_completed",
972
+ /** Achievements total count. Use as {{achievements_total}}. */
973
+ ACHIEVEMENTS_TOTAL = "achievements_total",
974
+ /** Achievement completion percent. Use as {{achievements_percent}}. */
975
+ ACHIEVEMENTS_PERCENT = "achievements_percent",
962
976
  /** Response from most recent API Action (JSON stringified). Use as {{api_action_global_response}}. */
963
977
  API_ACTION_GLOBAL_RESPONSE = "api_action_global_response",
964
978
  /** Last RANDOM_INPUT selection. Use as {{last_random_input}}. */
package/dist/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export { ILumiaSendPack, ILumiaEvent, ILumiaEventChatCommandBody, ILumiaEventCha
4
4
  export { LumiaEventListTypes, LumiaMapAlertTypeToEventListType } from './eventlist.types';
5
5
  export { SystemVariables, ReservedVariables, AllVariables } from './variables.types';
6
6
  export { formatCondition } from './helpers';
7
+ export { VIEWER_PROFILE_ACHIEVEMENTS, type ViewerProfileAchievementDefinition, type ViewerProfileAchievementMetric } from './viewer_profile_achievements';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatCondition = exports.AllVariables = exports.ReservedVariables = exports.SystemVariables = exports.LumiaMapAlertTypeToEventListType = exports.LumiaEventListTypes = exports.LumiaEventTypes = exports.LumiaIntegrations = exports.LumiaAlertConfigs = exports.VariationCurrencySymbol = exports.LumiaVariationCurrency = exports.LumiaVariationConditions = exports.LumiaActivityTestType = exports.LumiaActivityNoValueTypes = exports.LumiaActivityApiValueType = exports.LumiaActivityOriginTypes = exports.LumiaAlertFriendlyValues = exports.LumiaAlertValues = exports.LumiaExternalActivityCommandTypes = exports.LumiaActivityCommandTypes = exports.LumiaStreamingSites = void 0;
3
+ exports.VIEWER_PROFILE_ACHIEVEMENTS = exports.formatCondition = exports.AllVariables = exports.ReservedVariables = exports.SystemVariables = exports.LumiaMapAlertTypeToEventListType = exports.LumiaEventListTypes = exports.LumiaEventTypes = exports.LumiaIntegrations = exports.LumiaAlertConfigs = exports.VariationCurrencySymbol = exports.LumiaVariationCurrency = exports.LumiaVariationConditions = exports.LumiaActivityTestType = exports.LumiaActivityNoValueTypes = exports.LumiaActivityApiValueType = exports.LumiaActivityOriginTypes = exports.LumiaAlertFriendlyValues = exports.LumiaAlertValues = exports.LumiaExternalActivityCommandTypes = exports.LumiaActivityCommandTypes = exports.LumiaStreamingSites = void 0;
4
4
  var activity_types_1 = require("./activity.types");
5
5
  Object.defineProperty(exports, "LumiaStreamingSites", { enumerable: true, get: function () { return activity_types_1.LumiaStreamingSites; } });
6
6
  Object.defineProperty(exports, "LumiaActivityCommandTypes", { enumerable: true, get: function () { return activity_types_1.LumiaActivityCommandTypes; } });
@@ -28,3 +28,5 @@ Object.defineProperty(exports, "ReservedVariables", { enumerable: true, get: fun
28
28
  Object.defineProperty(exports, "AllVariables", { enumerable: true, get: function () { return variables_types_1.AllVariables; } });
29
29
  var helpers_1 = require("./helpers");
30
30
  Object.defineProperty(exports, "formatCondition", { enumerable: true, get: function () { return helpers_1.formatCondition; } });
31
+ var viewer_profile_achievements_1 = require("./viewer_profile_achievements");
32
+ Object.defineProperty(exports, "VIEWER_PROFILE_ACHIEVEMENTS", { enumerable: true, get: function () { return viewer_profile_achievements_1.VIEWER_PROFILE_ACHIEVEMENTS; } });
@@ -159,6 +159,18 @@ export declare enum SystemVariables {
159
159
  VIEWERQUEUE_ENTRIES_COUNT = "viewerqueue_entries_count",
160
160
  /** Viewer queue max entries limit. Use as {{viewerqueue_queue_limit}}. */
161
161
  VIEWERQUEUE_QUEUE_LIMIT = "viewerqueue_queue_limit",
162
+ /** Achievement id. Use as {{achievement_id}}. */
163
+ ACHIEVEMENT_ID = "achievement_id",
164
+ /** Achievement name. Use as {{achievement_name}}. */
165
+ ACHIEVEMENT_NAME = "achievement_name",
166
+ /** Achievement description. Use as {{achievement_description}}. */
167
+ ACHIEVEMENT_DESCRIPTION = "achievement_description",
168
+ /** Achievements completed count. Use as {{achievements_completed}}. */
169
+ ACHIEVEMENTS_COMPLETED = "achievements_completed",
170
+ /** Achievements total count. Use as {{achievements_total}}. */
171
+ ACHIEVEMENTS_TOTAL = "achievements_total",
172
+ /** Achievement completion percent. Use as {{achievements_percent}}. */
173
+ ACHIEVEMENTS_PERCENT = "achievements_percent",
162
174
  /** Response from most recent API Action (JSON stringified). Use as {{api_action_global_response}}. */
163
175
  API_ACTION_GLOBAL_RESPONSE = "api_action_global_response",
164
176
  /** Last RANDOM_INPUT selection. Use as {{last_random_input}}. */
@@ -687,6 +699,7 @@ export declare const AllVariables: {
687
699
  pollEnded: string[];
688
700
  viewerqueueStarted: string[];
689
701
  viewerqueueEnded: string[];
702
+ viewerAchievement: string[];
690
703
  rouletteWinner: string[];
691
704
  slotsWinner: string[];
692
705
  };
@@ -171,6 +171,18 @@ var SystemVariables;
171
171
  SystemVariables["VIEWERQUEUE_ENTRIES_COUNT"] = "viewerqueue_entries_count";
172
172
  /** Viewer queue max entries limit. Use as {{viewerqueue_queue_limit}}. */
173
173
  SystemVariables["VIEWERQUEUE_QUEUE_LIMIT"] = "viewerqueue_queue_limit";
174
+ /** Achievement id. Use as {{achievement_id}}. */
175
+ SystemVariables["ACHIEVEMENT_ID"] = "achievement_id";
176
+ /** Achievement name. Use as {{achievement_name}}. */
177
+ SystemVariables["ACHIEVEMENT_NAME"] = "achievement_name";
178
+ /** Achievement description. Use as {{achievement_description}}. */
179
+ SystemVariables["ACHIEVEMENT_DESCRIPTION"] = "achievement_description";
180
+ /** Achievements completed count. Use as {{achievements_completed}}. */
181
+ SystemVariables["ACHIEVEMENTS_COMPLETED"] = "achievements_completed";
182
+ /** Achievements total count. Use as {{achievements_total}}. */
183
+ SystemVariables["ACHIEVEMENTS_TOTAL"] = "achievements_total";
184
+ /** Achievement completion percent. Use as {{achievements_percent}}. */
185
+ SystemVariables["ACHIEVEMENTS_PERCENT"] = "achievements_percent";
174
186
  /** Response from most recent API Action (JSON stringified). Use as {{api_action_global_response}}. */
175
187
  SystemVariables["API_ACTION_GLOBAL_RESPONSE"] = "api_action_global_response";
176
188
  /** Last RANDOM_INPUT selection. Use as {{last_random_input}}. */
@@ -1311,6 +1323,18 @@ exports.AllVariables = {
1311
1323
  pollEnded: ['poll_id', 'poll_title', 'poll_choices', 'poll_winning_title', 'poll_winning_id', 'poll_winning_votes', 'poll_total_votes'],
1312
1324
  viewerqueueStarted: ['viewerqueue_title', 'viewerqueue_entry_command', 'viewerqueue_entries', 'viewerqueue_players', 'viewerqueue_entries_count'],
1313
1325
  viewerqueueEnded: ['viewerqueue_title', 'viewerqueue_entry_command', 'viewerqueue_entries', 'viewerqueue_players', 'viewerqueue_entries_count'],
1326
+ viewerAchievement: [
1327
+ 'username',
1328
+ 'displayname',
1329
+ 'avatar',
1330
+ 'platform',
1331
+ 'achievement_id',
1332
+ 'achievement_name',
1333
+ 'achievement_description',
1334
+ 'achievements_completed',
1335
+ 'achievements_total',
1336
+ 'achievements_percent',
1337
+ ],
1314
1338
  rouletteWinner: ['username', 'outcome_amount', 'ball_position'],
1315
1339
  slotsWinner: ['username', 'outcome_amount', 'slots_combo'],
1316
1340
  },
@@ -0,0 +1,10 @@
1
+ export type ViewerProfileAchievementMetric = 'totalCommands' | 'uniqueCommands' | 'totalChatbotCommands' | 'totalPointsCommands' | 'totalPointsSpent' | 'totalTwitchExtensionsCommands' | 'totalBitsSpent' | 'totalKicksSpent' | 'totalMoneySpent' | 'totalAlerts' | 'uniqueAlerts' | 'totalCommandsAndAlerts' | 'daysActive' | 'allRounder';
2
+ export type ViewerProfileAchievementDefinition = {
3
+ id: string;
4
+ label: string;
5
+ description: string;
6
+ metric: ViewerProfileAchievementMetric;
7
+ threshold: number;
8
+ connectionKeys?: string[];
9
+ };
10
+ export declare const VIEWER_PROFILE_ACHIEVEMENTS: ViewerProfileAchievementDefinition[];
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VIEWER_PROFILE_ACHIEVEMENTS = void 0;
4
+ exports.VIEWER_PROFILE_ACHIEVEMENTS = [
5
+ // ───────── Command Usage ─────────
6
+ {
7
+ id: 'commands-regular',
8
+ label: 'Commands Regular',
9
+ description: 'Triggered 25 commands.',
10
+ metric: 'totalCommands',
11
+ threshold: 25,
12
+ },
13
+ {
14
+ id: 'commands-runner',
15
+ label: 'Commands Runner',
16
+ description: 'Triggered 50 commands.',
17
+ metric: 'totalCommands',
18
+ threshold: 50,
19
+ },
20
+ {
21
+ id: 'commands-overdrive',
22
+ label: 'Commands Overdrive',
23
+ description: 'Triggered 100 commands.',
24
+ metric: 'totalCommands',
25
+ threshold: 100,
26
+ },
27
+ {
28
+ id: 'commands-speedster',
29
+ label: 'Commands Speedster',
30
+ description: 'Triggered 250 commands.',
31
+ metric: 'totalCommands',
32
+ threshold: 250,
33
+ },
34
+ {
35
+ id: 'commands-blazer',
36
+ label: 'Commands Blazer',
37
+ description: 'Triggered 500 commands.',
38
+ metric: 'totalCommands',
39
+ threshold: 500,
40
+ },
41
+ {
42
+ id: 'commands-veteran',
43
+ label: 'Commands Veteran',
44
+ description: 'Triggered 1,000 commands.',
45
+ metric: 'totalCommands',
46
+ threshold: 1000,
47
+ },
48
+ {
49
+ id: 'commands-legend',
50
+ label: 'Commands Legend',
51
+ description: 'Triggered 5,000 commands.',
52
+ metric: 'totalCommands',
53
+ threshold: 5000,
54
+ },
55
+ // ───────── Unique Commands ─────────
56
+ {
57
+ id: 'commands-unique-expolorer',
58
+ label: 'Commands Explorer',
59
+ description: 'Used 10 different commands.',
60
+ metric: 'uniqueCommands',
61
+ threshold: 10,
62
+ },
63
+ {
64
+ id: 'commands-unique-adventurer',
65
+ label: 'Commands Adventurer',
66
+ description: 'Used 20 different commands.',
67
+ metric: 'uniqueCommands',
68
+ threshold: 20,
69
+ },
70
+ // ───────── Channel Points ─────────
71
+ {
72
+ id: 'twitch-points-spark',
73
+ label: 'Points Starter',
74
+ description: 'Triggered 50 channel point commands.',
75
+ metric: 'totalPointsCommands',
76
+ threshold: 50,
77
+ connectionKeys: ['twitch'],
78
+ },
79
+ {
80
+ id: 'twitch-points-regular',
81
+ label: 'Points Regular',
82
+ description: 'Triggered 200 channel point commands.',
83
+ metric: 'totalPointsCommands',
84
+ threshold: 200,
85
+ connectionKeys: ['twitch'],
86
+ },
87
+ {
88
+ id: 'twitch-points-glow',
89
+ label: 'Points Spender',
90
+ description: 'Spent 5,000 channel points.',
91
+ metric: 'totalPointsSpent',
92
+ threshold: 5000,
93
+ connectionKeys: ['twitch'],
94
+ },
95
+ {
96
+ id: 'twitch-points-beacon',
97
+ label: 'Points Beacon',
98
+ description: 'Spent 25,000 channel points.',
99
+ metric: 'totalPointsSpent',
100
+ threshold: 25000,
101
+ connectionKeys: ['twitch'],
102
+ },
103
+ {
104
+ id: 'twitch-points-tycoon',
105
+ label: 'Points Tycoon',
106
+ description: 'Spent 100,000 channel points.',
107
+ metric: 'totalPointsSpent',
108
+ threshold: 100000,
109
+ connectionKeys: ['twitch'],
110
+ },
111
+ // ───────── Twitch Extensions ─────────
112
+ {
113
+ id: 'twitch-extension-explorer',
114
+ label: 'Twitch Extension Explorer',
115
+ description: 'Used 5 extension commands.',
116
+ metric: 'totalTwitchExtensionsCommands',
117
+ threshold: 5,
118
+ connectionKeys: ['twitch'],
119
+ },
120
+ {
121
+ id: 'twitch-extension-adventurer-ii',
122
+ label: 'Twitch Extension Adventurer II',
123
+ description: 'Used 10 extension commands.',
124
+ metric: 'totalTwitchExtensionsCommands',
125
+ threshold: 10,
126
+ connectionKeys: ['twitch'],
127
+ },
128
+ {
129
+ id: 'twitch-extension-adventurer',
130
+ label: 'Twitch Extension Adventurer',
131
+ description: 'Used 25 extension commands.',
132
+ metric: 'totalTwitchExtensionsCommands',
133
+ threshold: 25,
134
+ connectionKeys: ['twitch'],
135
+ },
136
+ {
137
+ id: 'twitch-extension-operator',
138
+ label: 'Twitch Extension Operator',
139
+ description: 'Used 100 extension commands.',
140
+ metric: 'totalTwitchExtensionsCommands',
141
+ threshold: 100,
142
+ connectionKeys: ['twitch'],
143
+ },
144
+ // ───────── Bits ─────────
145
+ {
146
+ id: 'bits-spark',
147
+ label: 'Bits Spark',
148
+ description: 'Spent 100 bits.',
149
+ metric: 'totalBitsSpent',
150
+ threshold: 100,
151
+ connectionKeys: ['twitch'],
152
+ },
153
+ {
154
+ id: 'bits-beam',
155
+ label: 'Bits Beam',
156
+ description: 'Spent 500 bits.',
157
+ metric: 'totalBitsSpent',
158
+ threshold: 500,
159
+ connectionKeys: ['twitch'],
160
+ },
161
+ {
162
+ id: 'bits-glow',
163
+ label: 'Bits Glow',
164
+ description: 'Spent 1,000 bits.',
165
+ metric: 'totalBitsSpent',
166
+ threshold: 1000,
167
+ connectionKeys: ['twitch'],
168
+ },
169
+ {
170
+ id: 'bits-supernova',
171
+ label: 'Bits Supernova',
172
+ description: 'Spent 5,000 bits.',
173
+ metric: 'totalBitsSpent',
174
+ threshold: 5000,
175
+ connectionKeys: ['twitch'],
176
+ },
177
+ // ───────── Kick ─────────
178
+ {
179
+ id: 'kick-spark',
180
+ label: 'Kicks Starter',
181
+ description: 'Spent 50 kicks.',
182
+ metric: 'totalKicksSpent',
183
+ threshold: 50,
184
+ connectionKeys: ['kick'],
185
+ },
186
+ {
187
+ id: 'kick-glow',
188
+ label: 'Kicks Supporter',
189
+ description: 'Spent 100 kicks.',
190
+ metric: 'totalKicksSpent',
191
+ threshold: 100,
192
+ connectionKeys: ['kick'],
193
+ },
194
+ {
195
+ id: 'kick-beam',
196
+ label: 'Kick Power User',
197
+ description: 'Spent 500 kicks.',
198
+ metric: 'totalKicksSpent',
199
+ threshold: 500,
200
+ connectionKeys: ['kick'],
201
+ },
202
+ {
203
+ id: 'kick-supernova',
204
+ label: 'Kick Superstar',
205
+ description: 'Spent 1,000 kicks.',
206
+ metric: 'totalKicksSpent',
207
+ threshold: 1000,
208
+ connectionKeys: ['kick'],
209
+ },
210
+ // ───────── Donations ─────────
211
+ {
212
+ id: 'light-supporter',
213
+ label: 'Supporter',
214
+ description: 'Donated 5 in your default currency.',
215
+ metric: 'totalMoneySpent',
216
+ threshold: 5,
217
+ },
218
+ {
219
+ id: 'light-backer',
220
+ label: 'Backer',
221
+ description: 'Donated 25 in your default currency.',
222
+ metric: 'totalMoneySpent',
223
+ threshold: 25,
224
+ },
225
+ {
226
+ id: 'light-advocate',
227
+ label: 'Advocate',
228
+ description: 'Donated 50 in your default currency.',
229
+ metric: 'totalMoneySpent',
230
+ threshold: 50,
231
+ },
232
+ {
233
+ id: 'light-hero',
234
+ label: 'Hero',
235
+ description: 'Donated 100 in your default currency.',
236
+ metric: 'totalMoneySpent',
237
+ threshold: 100,
238
+ },
239
+ {
240
+ id: 'light-patron',
241
+ label: 'Patron',
242
+ description: 'Donated 100 in your default currency.',
243
+ metric: 'totalMoneySpent',
244
+ threshold: 100,
245
+ },
246
+ // ───────── Alerts ─────────
247
+ {
248
+ id: 'alert-storm',
249
+ label: 'Alert Storm',
250
+ description: 'Triggered 10 alerts.',
251
+ metric: 'totalAlerts',
252
+ threshold: 10,
253
+ },
254
+ {
255
+ id: 'alert-enthusiast',
256
+ label: 'Alert Enthusiast',
257
+ description: 'Triggered 50 alerts.',
258
+ metric: 'totalAlerts',
259
+ threshold: 50,
260
+ },
261
+ {
262
+ id: 'alert-curator',
263
+ label: 'Alert Explorer',
264
+ description: 'Triggered 10 different alerts.',
265
+ metric: 'uniqueAlerts',
266
+ threshold: 10,
267
+ },
268
+ {
269
+ id: 'alert-historian',
270
+ label: 'Alert Historian',
271
+ description: 'Triggered 25 different alerts.',
272
+ metric: 'uniqueAlerts',
273
+ threshold: 25,
274
+ },
275
+ {
276
+ id: 'alert-archivist',
277
+ label: 'Alert Archivist',
278
+ description: 'Triggered 50 different alerts.',
279
+ metric: 'uniqueAlerts',
280
+ threshold: 50,
281
+ },
282
+ // ───────── Overall Engagement ─────────
283
+ {
284
+ id: 'livewire-operator',
285
+ label: 'Livewire',
286
+ description: 'Triggered 500 commands or alerts.',
287
+ metric: 'totalCommandsAndAlerts',
288
+ threshold: 500,
289
+ },
290
+ {
291
+ id: 'on-air-regular',
292
+ label: 'On-Air Regular',
293
+ description: 'Active for 60 days or more.',
294
+ metric: 'daysActive',
295
+ threshold: 60,
296
+ },
297
+ {
298
+ id: 'yearlong-viewer',
299
+ label: 'Year-Long Viewer',
300
+ description: 'Active for 365 days or more.',
301
+ metric: 'daysActive',
302
+ threshold: 365,
303
+ },
304
+ // ───────── Ultimate ─────────
305
+ {
306
+ id: 'lumia-luminary',
307
+ label: 'Lumia Luminary',
308
+ description: 'Reached major milestones across commands, alerts, extensions, and support.',
309
+ metric: 'allRounder',
310
+ threshold: 1,
311
+ },
312
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumiastream/lumia-types",
3
- "version": "2.6.6",
3
+ "version": "2.6.8",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "files": [