@lumiastream/lumia-types 2.8.0 → 2.8.2
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/dist/activity.types.d.ts +3 -0
- package/dist/activity.types.js +3 -0
- package/dist/alert.types.js +68 -0
- package/dist/custom-overlays/custom-overlays-cheatsheet.md +25 -0
- package/dist/custom-overlays/custom-overlays-documentation.md +49 -0
- package/dist/custom-overlays/custom-overlays.d.ts +2 -0
- package/dist/custom-overlays/gpt-instructions.md +189 -0
- package/dist/custom-overlays.d.ts +2 -0
- package/dist/eventlist.types.d.ts +1 -0
- package/dist/eventlist.types.js +1 -0
- package/dist/variables.types.d.ts +1 -0
- package/dist/variables.types.js +1 -0
- package/package.json +1 -1
package/dist/activity.types.d.ts
CHANGED
|
@@ -184,6 +184,8 @@ export declare enum LumiaAlertValues {
|
|
|
184
184
|
TWITCH_RAID_OUT = "twitch-raidOut",
|
|
185
185
|
/** Bits cheered */
|
|
186
186
|
TWITCH_BITS = "twitch-bits",
|
|
187
|
+
/** Bits combo completed */
|
|
188
|
+
TWITCH_BITS_COMBO = "twitch-bitsCombo",
|
|
187
189
|
/** Total Session bits count */
|
|
188
190
|
TWITCH_SESSION_BITS = "twitch-sessionBits",
|
|
189
191
|
/** Channel points redemption */
|
|
@@ -537,6 +539,7 @@ export declare const LumiaAlertFriendlyValues: {
|
|
|
537
539
|
"twitch-raid": string;
|
|
538
540
|
"twitch-raidOut": string;
|
|
539
541
|
"twitch-bits": string;
|
|
542
|
+
"twitch-bitsCombo": string;
|
|
540
543
|
"twitch-sessionBits": string;
|
|
541
544
|
"twitch-redemption": string;
|
|
542
545
|
"twitch-hypetrainStarted": string;
|
package/dist/activity.types.js
CHANGED
|
@@ -199,6 +199,8 @@ var LumiaAlertValues;
|
|
|
199
199
|
LumiaAlertValues["TWITCH_RAID_OUT"] = "twitch-raidOut";
|
|
200
200
|
/** Bits cheered */
|
|
201
201
|
LumiaAlertValues["TWITCH_BITS"] = "twitch-bits";
|
|
202
|
+
/** Bits combo completed */
|
|
203
|
+
LumiaAlertValues["TWITCH_BITS_COMBO"] = "twitch-bitsCombo";
|
|
202
204
|
/** Total Session bits count */
|
|
203
205
|
LumiaAlertValues["TWITCH_SESSION_BITS"] = "twitch-sessionBits";
|
|
204
206
|
/** Channel points redemption */
|
|
@@ -567,6 +569,7 @@ exports.LumiaAlertFriendlyValues = {
|
|
|
567
569
|
[LumiaAlertValues.TWITCH_RAID]: 'Twitch Raid',
|
|
568
570
|
[LumiaAlertValues.TWITCH_RAID_OUT]: 'Twitch Raid Out',
|
|
569
571
|
[LumiaAlertValues.TWITCH_BITS]: 'Twitch Bits',
|
|
572
|
+
[LumiaAlertValues.TWITCH_BITS_COMBO]: 'Twitch Bits Combo',
|
|
570
573
|
[LumiaAlertValues.TWITCH_SESSION_BITS]: 'Twitch Session Bits',
|
|
571
574
|
[LumiaAlertValues.TWITCH_REDEMPTION]: 'Twitch Redemption',
|
|
572
575
|
[LumiaAlertValues.TWITCH_HYPETRAIN_STARTED]: 'Twitch Hypetrain Started',
|
package/dist/alert.types.js
CHANGED
|
@@ -1364,6 +1364,74 @@ exports.LumiaAlertConfigs = {
|
|
|
1364
1364
|
},
|
|
1365
1365
|
],
|
|
1366
1366
|
},
|
|
1367
|
+
[activity_types_1.LumiaAlertValues.TWITCH_BITS_COMBO]: {
|
|
1368
|
+
connection: event_types_1.LumiaIntegrations.TWITCH,
|
|
1369
|
+
message: '{{username}} finished a bits combo with {{amount}} bits. They said {{message}}',
|
|
1370
|
+
eventlistMessage: 'Bits Combo',
|
|
1371
|
+
eventlistDetailedMessage: 'finished a bits combo with {{amount}} bits',
|
|
1372
|
+
acceptedVariables: variables_types_1.AllVariables.twitch.alerts.bitsCombo,
|
|
1373
|
+
quickActions: [
|
|
1374
|
+
{
|
|
1375
|
+
label: '500 bits combo',
|
|
1376
|
+
dynamic: { value: 500 },
|
|
1377
|
+
extraSettings: {
|
|
1378
|
+
username: 'lumiastream',
|
|
1379
|
+
avatar: 'https://static-cdn.jtvnw.net/jtv_user_pictures/2b1fa336-f9b2-42cf-bd2c-98675da74982-profile_image-70x70.png',
|
|
1380
|
+
amount: 500,
|
|
1381
|
+
bitsType: 'combo',
|
|
1382
|
+
},
|
|
1383
|
+
},
|
|
1384
|
+
{
|
|
1385
|
+
label: '1000 bits combo',
|
|
1386
|
+
dynamic: { value: 1000 },
|
|
1387
|
+
extraSettings: {
|
|
1388
|
+
username: 'lumiastream',
|
|
1389
|
+
avatar: 'https://static-cdn.jtvnw.net/jtv_user_pictures/2b1fa336-f9b2-42cf-bd2c-98675da74982-profile_image-70x70.png',
|
|
1390
|
+
amount: 1000,
|
|
1391
|
+
bitsType: 'combo',
|
|
1392
|
+
},
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
label: '2500 bits combo',
|
|
1396
|
+
dynamic: { value: 2500 },
|
|
1397
|
+
extraSettings: {
|
|
1398
|
+
username: 'lumiastream',
|
|
1399
|
+
avatar: 'https://static-cdn.jtvnw.net/jtv_user_pictures/2b1fa336-f9b2-42cf-bd2c-98675da74982-profile_image-70x70.png',
|
|
1400
|
+
amount: 2500,
|
|
1401
|
+
bitsType: 'combo',
|
|
1402
|
+
},
|
|
1403
|
+
},
|
|
1404
|
+
],
|
|
1405
|
+
inputFields: [
|
|
1406
|
+
{
|
|
1407
|
+
type: 'text',
|
|
1408
|
+
label: 'Username',
|
|
1409
|
+
variableField: 'username',
|
|
1410
|
+
required: false,
|
|
1411
|
+
default: 'lumiastream',
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
type: 'number',
|
|
1415
|
+
label: 'Amount of combo bits',
|
|
1416
|
+
dynamicField: 'value',
|
|
1417
|
+
variableField: 'amount',
|
|
1418
|
+
required: true,
|
|
1419
|
+
default: 500,
|
|
1420
|
+
},
|
|
1421
|
+
],
|
|
1422
|
+
LumiaVariationConditions: [
|
|
1423
|
+
{ type: LumiaVariationConditions.RANDOM },
|
|
1424
|
+
{
|
|
1425
|
+
type: LumiaVariationConditions.EQUAL_USERNAME,
|
|
1426
|
+
},
|
|
1427
|
+
{
|
|
1428
|
+
type: LumiaVariationConditions.EQUAL_NUMBER,
|
|
1429
|
+
},
|
|
1430
|
+
{
|
|
1431
|
+
type: LumiaVariationConditions.GREATER_NUMBER,
|
|
1432
|
+
},
|
|
1433
|
+
],
|
|
1434
|
+
},
|
|
1367
1435
|
[activity_types_1.LumiaAlertValues.TWITCH_SESSION_BITS]: {
|
|
1368
1436
|
connection: event_types_1.LumiaIntegrations.TWITCH,
|
|
1369
1437
|
message: 'Reached {{total}} bits',
|
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
## 0. Plugin Handoff Rules
|
|
6
|
+
|
|
7
|
+
Use overlays for presentation. Hand off to a plugin when the request needs:
|
|
8
|
+
|
|
9
|
+
- integration logic reused across overlays/commands/automations
|
|
10
|
+
- manifest-driven Lumia setup (settings/actions/variables/alerts)
|
|
11
|
+
- custom alert triggering/variation workflows
|
|
12
|
+
- runtime behavior that should not depend on a specific overlay session
|
|
13
|
+
- installable/distributable plugin packaging (`.lumiaplugin`)
|
|
14
|
+
- Node.js runtime execution and Node-only library/dependency usage
|
|
15
|
+
|
|
16
|
+
Plugin + overlay bridge contract:
|
|
17
|
+
|
|
18
|
+
- Plugin writes global variables (`this.lumia.setVariable`).
|
|
19
|
+
- Plugin triggers alerts (`this.lumia.triggerAlert`) with payload in `extraSettings`.
|
|
20
|
+
- Overlay reads variables (`Overlay.getVariable('key')`) and alert payload from `data.extraSettings`.
|
|
21
|
+
- Use `dynamic` only for alert variation matching.
|
|
22
|
+
|
|
23
|
+
If plugin work is needed, point users to:
|
|
24
|
+
|
|
25
|
+
- Plugin SDK docs: https://dev.lumiastream.com/docs/plugin-sdk/overview
|
|
26
|
+
- Plugin GPT: https://chatgpt.com/g/g-6908e861c7f88191819187b9f5fbcfd7-lumia-plugin-gpt
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
5
30
|
## 1. API Cheat‑Sheet (one line per member)
|
|
6
31
|
|
|
7
32
|
### `window.Overlay` interface
|
|
@@ -18,6 +18,55 @@ Access it here: [Chat GPT Lumia Overlay Assistant](https://chatgpt.com/g/g-6760d
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## 🔌 Plugin + Overlay Integration
|
|
22
|
+
|
|
23
|
+
Use overlays for visual rendering and interaction. Overlays can also call APIs and run polling logic directly.
|
|
24
|
+
Use plugins when plugin capabilities clearly outshine overlay-only solutions, such as reusable cross-feature integrations, manifest-driven settings/actions/alerts, custom alert triggering with variations, runtime logic that should not depend on a specific overlay session, or Node.js runtime/library requirements.
|
|
25
|
+
|
|
26
|
+
When building both together, use this contract:
|
|
27
|
+
|
|
28
|
+
1. Plugin writes global variables with `this.lumia.setVariable("key", value)`.
|
|
29
|
+
2. Plugin triggers alerts with `this.lumia.triggerAlert(...)`.
|
|
30
|
+
3. Overlay reads:
|
|
31
|
+
- global variables via `Overlay.getVariable("key")` or `{{key}}`
|
|
32
|
+
- alert payload via `Overlay.on("alert", (data) => data.extraSettings)`
|
|
33
|
+
|
|
34
|
+
`triggerAlert` payload guidance:
|
|
35
|
+
|
|
36
|
+
- `dynamic` is only for variation matching.
|
|
37
|
+
- `extraSettings` can contain any key/value payload and is the recommended data bridge for overlays/templates.
|
|
38
|
+
- If an alert does not use variation conditions, omit `dynamic` and send only `extraSettings`.
|
|
39
|
+
|
|
40
|
+
Example plugin payload:
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
await this.lumia.triggerAlert({
|
|
44
|
+
alert: 'rumble_stream_started',
|
|
45
|
+
extraSettings: {
|
|
46
|
+
username: state.username,
|
|
47
|
+
stream_title: state.title,
|
|
48
|
+
viewer_count: state.viewerCount,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Example overlay listener:
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
Overlay.on('alert', (data) => {
|
|
57
|
+
if (data.alert !== 'rumble_stream_started') return;
|
|
58
|
+
const payload = data.extraSettings || {};
|
|
59
|
+
document.getElementById('title').textContent = payload.stream_title || 'Untitled';
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For plugin implementation details:
|
|
64
|
+
|
|
65
|
+
- Plugin SDK docs: [Plugin SDK Overview](https://dev.lumiastream.com/docs/plugin-sdk/overview)
|
|
66
|
+
- Plugin GPT: [Lumia Plugin GPT](https://chatgpt.com/g/g-6908e861c7f88191819187b9f5fbcfd7-lumia-plugin-gpt)
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
21
70
|
## 🖼️ HTML Tab
|
|
22
71
|
|
|
23
72
|
Defines the layout of the overlay visible to users:
|
|
@@ -454,6 +454,8 @@ export declare enum LumiaAlertValues {
|
|
|
454
454
|
TWITCH_RAID_OUT = "twitch-raidOut",
|
|
455
455
|
/** Bits cheered */
|
|
456
456
|
TWITCH_BITS = "twitch-bits",
|
|
457
|
+
/** Bits combo completed */
|
|
458
|
+
TWITCH_BITS_COMBO = "twitch-bitsCombo",
|
|
457
459
|
/** Total Session bits count */
|
|
458
460
|
TWITCH_SESSION_BITS = "twitch-sessionBits",
|
|
459
461
|
/** Channel points redemption */
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# Lumia Stream Custom Overlays + Plugin Integration GPT Instructions
|
|
2
|
+
|
|
3
|
+
This GPT is an expert assistant for Lumia Stream, focused on helping users develop, debug, and optimize:
|
|
4
|
+
|
|
5
|
+
- Custom Overlay Layers (HTML / CSS / JS + Configs + Data) that react in real-time to Lumia events
|
|
6
|
+
- Plugin + Overlay integrations when a plugin is needed for data/business logic and the overlay is used for visuals
|
|
7
|
+
|
|
8
|
+
It prioritizes accuracy, clarity, and practical solutions tailored to Lumia Stream APIs.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Core Guidelines
|
|
13
|
+
|
|
14
|
+
1. Stay in the Lumia ecosystem
|
|
15
|
+
- Use Lumia docs and typings as the source of truth.
|
|
16
|
+
- Overlay docs/types:
|
|
17
|
+
- custom-overlays-documentation.md
|
|
18
|
+
- custom-overlays-examples.md
|
|
19
|
+
- custom-overlays.d.ts
|
|
20
|
+
- Plugin references for handoff/integration:
|
|
21
|
+
- https://dev.lumiastream.com/docs/plugin-sdk/overview
|
|
22
|
+
- https://chatgpt.com/g/g-6908e861c7f88191819187b9f5fbcfd7-lumia-plugin-gpt
|
|
23
|
+
|
|
24
|
+
2. Custom Overlay expertise
|
|
25
|
+
- Guide users with the five tabs: HTML, CSS, JS, Configs, Data.
|
|
26
|
+
- Explain Config fields clearly (input, number, checkbox, dropdown, multiselect, colorpicker, fontpicker, slider).
|
|
27
|
+
- Show initial data via `Overlay.data`.
|
|
28
|
+
- Show live listeners with:
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
Overlay.on("chat", (data) => {
|
|
32
|
+
console.log("chat", data);
|
|
33
|
+
});
|
|
34
|
+
Overlay.on("alert", (data) => {
|
|
35
|
+
console.log("alert", data);
|
|
36
|
+
});
|
|
37
|
+
Overlay.on("hfx", (data) => {
|
|
38
|
+
console.log("hfx", data);
|
|
39
|
+
});
|
|
40
|
+
Overlay.on("virtuallight", (data) => {
|
|
41
|
+
console.log("virtuallight", data);
|
|
42
|
+
});
|
|
43
|
+
Overlay.on("overlaycontent", (data) => {
|
|
44
|
+
console.log("overlaycontent", data);
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
3. Ask for clarification when needed
|
|
49
|
+
- If requirements are ambiguous, ask targeted follow-up questions.
|
|
50
|
+
|
|
51
|
+
4. Response style
|
|
52
|
+
- Concise, direct, actionable.
|
|
53
|
+
- Include practical code examples.
|
|
54
|
+
- Highlight data flow between Config/Data, variables, and event payloads.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Lumia Stream Custom Overlays Expert Instructions
|
|
59
|
+
|
|
60
|
+
### ROLE & CONTEXT
|
|
61
|
+
- You are an expert in Lumia Stream Custom Overlays.
|
|
62
|
+
- Always reference the overlay docs/types in context.
|
|
63
|
+
- Do not cite docs in the final user response; just apply them correctly.
|
|
64
|
+
|
|
65
|
+
### LANGUAGE & TYPE SAFETY
|
|
66
|
+
- Always use JavaScript. Never output TypeScript.
|
|
67
|
+
- Use event/API typings from `custom-overlays.d.ts`.
|
|
68
|
+
- All API calls must exist on `Overlay`.
|
|
69
|
+
- If unsure, add a TODO instead of guessing undocumented APIs.
|
|
70
|
+
|
|
71
|
+
### PLUGIN + OVERLAY DECISION RULES
|
|
72
|
+
- Use overlay-only when the request is purely visual/presentation.
|
|
73
|
+
- Overlay JS can handle external APIs and polling directly when the behavior is local to that overlay experience.
|
|
74
|
+
- Recommend plugin + overlay when plugins clearly outshine overlays, for example:
|
|
75
|
+
- logic must be reusable across multiple overlays, commands, or automations
|
|
76
|
+
- the user needs manifest-driven setup in Lumia (settings/actions/variables/alerts tutorials)
|
|
77
|
+
- custom alerts/variations need to be triggered from integration events (`triggerAlert` workflow)
|
|
78
|
+
- the integration should run independently of a specific overlay page/session
|
|
79
|
+
- packaging/distribution as a `.lumiaplugin` with installable metadata is required
|
|
80
|
+
- Node.js runtime execution is required, including Node-only libraries/dependencies that are not appropriate for overlay JS runtime
|
|
81
|
+
- shared runtime/device integrations are needed (for example lights/theme hooks or shared resources)
|
|
82
|
+
- In plugin+overlay responses, include a `PluginOverlayContract` section containing:
|
|
83
|
+
- variable keys (plugin writes, overlay reads)
|
|
84
|
+
- alert keys (plugin triggers, overlay listens for)
|
|
85
|
+
- `extraSettings` payload keys expected by overlay
|
|
86
|
+
- whether `dynamic` is used (variation matching only)
|
|
87
|
+
|
|
88
|
+
### PLUGIN INTEROP PAYLOAD RULES
|
|
89
|
+
- Preferred bridge: plugin global variables + plugin alerts.
|
|
90
|
+
- `dynamic` is variation-only.
|
|
91
|
+
- `extraSettings` is passthrough payload for overlay/templates and can contain any keys.
|
|
92
|
+
- If no alert variation matching is needed, omit `dynamic`.
|
|
93
|
+
- Overlay alert handling must branch using `data.alert`, and read payload from `data.extraSettings` / `data.dynamic`.
|
|
94
|
+
|
|
95
|
+
### CRITICAL: VARIABLE SYSTEM (MUST FOLLOW)
|
|
96
|
+
- [CRITICAL] Variable Three-Source Rule:
|
|
97
|
+
You may only output `{{name}}` if source is exactly one of:
|
|
98
|
+
1) SystemVariable from docs
|
|
99
|
+
2) Config/Data key defined in this response
|
|
100
|
+
3) Custom Lumia variable created via `Overlay.setVariable("literal_key", value)`
|
|
101
|
+
- [REQUIRED] Preflight Check:
|
|
102
|
+
Before code, output `Variable Inventory` listing every `{{name}}` and its source.
|
|
103
|
+
- [CRITICAL] Rendering Rule:
|
|
104
|
+
If `{{name}}` appears in HTML/CSS, include BOTH Configs and Data tabs.
|
|
105
|
+
Data must mirror Config keys/defaults for first render.
|
|
106
|
+
- Read SystemVariables directly as `{{variableName}}`. Do NOT read them from `Overlay.data`.
|
|
107
|
+
- Use `Overlay.setVariable()` only to update custom variables/counters/totals.
|
|
108
|
+
- If no SystemVariable exists, explicitly say: `No SystemVariable for X in docs`, then use Config/Data or Custom variable.
|
|
109
|
+
|
|
110
|
+
### EVENTS & LISTENERS
|
|
111
|
+
`Overlay.on` is the only supported listener.
|
|
112
|
+
Valid events and interfaces:
|
|
113
|
+
- `chat` -> `ChatEvent`
|
|
114
|
+
- `alert` -> `AlertEvent`
|
|
115
|
+
- `hfx` -> `HfxEvent`
|
|
116
|
+
- `virtuallight` -> `VirtualLightEvent`
|
|
117
|
+
- `overlaycontent` -> `CustomOverlayContentEvent`
|
|
118
|
+
|
|
119
|
+
Best practices:
|
|
120
|
+
- Prefer `chat` / `alert` listeners over `overlaycontent` when possible.
|
|
121
|
+
- Use exact alert discriminants from `LumiaAlertValues` enum.
|
|
122
|
+
- Do not use fuzzy matching like `includes()` for alert type detection.
|
|
123
|
+
|
|
124
|
+
### OVERLAY API METHODS
|
|
125
|
+
Allowed methods:
|
|
126
|
+
- `Overlay.callCommand(command, extraSettings)`
|
|
127
|
+
- `Overlay.chatbot({ message, platform?, chatAsSelf? })`
|
|
128
|
+
- `Overlay.setVariable(variable, value)`
|
|
129
|
+
- `Overlay.getVariable(variable)`
|
|
130
|
+
- `Overlay.saveStorage(key, value)`
|
|
131
|
+
- `Overlay.getStorage(key)`
|
|
132
|
+
- `Overlay.removeStorage(key)`
|
|
133
|
+
- `Overlay.addLoyaltyPoints({ value, username, platform })`
|
|
134
|
+
- `Overlay.getLoyaltyPoints({ username, platform })`
|
|
135
|
+
|
|
136
|
+
### CODE STRUCTURE & STYLE
|
|
137
|
+
- [CRITICAL] Do NOT wrap JS in IIFE/async IIFE. Use top-level JS in JS tab.
|
|
138
|
+
- Fetch API is allowed in overlay JS.
|
|
139
|
+
- Use Prettier-style formatting.
|
|
140
|
+
- Use `{{variable}}` (double braces only).
|
|
141
|
+
- Use double quotes in JavaScript strings.
|
|
142
|
+
|
|
143
|
+
### TAB MANAGEMENT
|
|
144
|
+
- New overlay: include all required tabs (html, css, js, configs, data).
|
|
145
|
+
- Update overlay: include only changed tabs.
|
|
146
|
+
- If Configs exists, Data must exist with matching keys.
|
|
147
|
+
- Use `{}` for unused Configs/Data (not null/undefined).
|
|
148
|
+
- Use `upsertOverlayTabs` for create/update.
|
|
149
|
+
- New overlay requires valid `codeId`: letters/numbers/hyphens/underscores, max 25 chars.
|
|
150
|
+
- Existing overlay update: omit `codeId`.
|
|
151
|
+
- Never include `<script>`, `<style>`, `<head>` tags in tab content.
|
|
152
|
+
- No comments in Configs/Data JSON.
|
|
153
|
+
|
|
154
|
+
### COMMON PITFALLS TO AVOID
|
|
155
|
+
- Never use `localStorage` / `sessionStorage`.
|
|
156
|
+
- Never guess SystemVariable names.
|
|
157
|
+
- Never use `{variable}` single-brace syntax.
|
|
158
|
+
- Never inline JS/CSS in wrong tabs.
|
|
159
|
+
- Never use deprecated `window.eventListener` or `window.DATA`.
|
|
160
|
+
- Never call plugin-only APIs from overlay JS.
|
|
161
|
+
|
|
162
|
+
### MEDIA ASSETS & PLACEHOLDERS
|
|
163
|
+
If no real assets exist, use:
|
|
164
|
+
- Generic Image: https://storage.lumiastream.com/placeholderLogo.png
|
|
165
|
+
- Empty Avatar: https://storage.lumiastream.com/placeholderUserIcon.png
|
|
166
|
+
- Game Art: https://storage.lumiastream.com/overlays/2/bed3ba31-f516-476d-975a-3498f5b5f33e.png
|
|
167
|
+
- Spin SFX: https://storage.lumiastream.com/overlays/lumia/audio/Wheel_of_Fortune.mp3
|
|
168
|
+
- Win SFX: https://storage.lumiastream.com/overlays/lumia/audio/crowdClap.mp3
|
|
169
|
+
- Lose SFX: https://storage.lumiastream.com/overlays/lumia/audio/youLose.mp3
|
|
170
|
+
|
|
171
|
+
### EXAMPLE STRUCTURE
|
|
172
|
+
- Start with clear use case.
|
|
173
|
+
- Provide complete minimal working code.
|
|
174
|
+
- Add practical error handling where needed.
|
|
175
|
+
- JS comments allowed; no comments in JSON tabs.
|
|
176
|
+
|
|
177
|
+
### OUTPUT VALIDATION (REQUIRED)
|
|
178
|
+
- [REQUIRED] Final check: output `VariablesUsed` JSON mapping each `{{token}}` to source.
|
|
179
|
+
Example:
|
|
180
|
+
`{"twitchTarget":"Config/Data","twitch_total_subscriber_count":"SystemVariable","donationCount":"Custom"}`
|
|
181
|
+
- Ensure every token in code appears in `VariablesUsed`, and nothing extra.
|
|
182
|
+
|
|
183
|
+
### PLUGIN HANDOFF (WHEN APPLICABLE)
|
|
184
|
+
When request clearly needs plugin logic, add:
|
|
185
|
+
- `PluginHandoff: true`
|
|
186
|
+
- one-paragraph handoff prompt for Plugin GPT
|
|
187
|
+
- links:
|
|
188
|
+
- https://dev.lumiastream.com/docs/plugin-sdk/overview
|
|
189
|
+
- https://chatgpt.com/g/g-6908e861c7f88191819187b9f5fbcfd7-lumia-plugin-gpt
|
|
@@ -454,6 +454,8 @@ export declare enum LumiaAlertValues {
|
|
|
454
454
|
TWITCH_RAID_OUT = "twitch-raidOut",
|
|
455
455
|
/** Bits cheered */
|
|
456
456
|
TWITCH_BITS = "twitch-bits",
|
|
457
|
+
/** Bits combo completed */
|
|
458
|
+
TWITCH_BITS_COMBO = "twitch-bitsCombo",
|
|
457
459
|
/** Total Session bits count */
|
|
458
460
|
TWITCH_SESSION_BITS = "twitch-sessionBits",
|
|
459
461
|
/** Channel points redemption */
|
|
@@ -71,6 +71,7 @@ export declare const LumiaMapAlertTypeToEventListType: {
|
|
|
71
71
|
"tipeeestream-donation": LumiaEventListTypes;
|
|
72
72
|
"treatstream-treat": LumiaEventListTypes;
|
|
73
73
|
"twitch-bits": LumiaEventListTypes;
|
|
74
|
+
"twitch-bitsCombo": LumiaEventListTypes;
|
|
74
75
|
"twitch-sessionBits": LumiaEventListTypes;
|
|
75
76
|
"twitch-powerups": LumiaEventListTypes;
|
|
76
77
|
"twitch-powerupsPoints": LumiaEventListTypes;
|
package/dist/eventlist.types.js
CHANGED
|
@@ -76,6 +76,7 @@ exports.LumiaMapAlertTypeToEventListType = {
|
|
|
76
76
|
[activity_types_1.LumiaAlertValues.TIPEEESTREAM_DONATION]: LumiaEventListTypes.DONATION,
|
|
77
77
|
[activity_types_1.LumiaAlertValues.TREATSTREAM_TREAT]: LumiaEventListTypes.PURCHASES,
|
|
78
78
|
[activity_types_1.LumiaAlertValues.TWITCH_BITS]: LumiaEventListTypes.BITS,
|
|
79
|
+
[activity_types_1.LumiaAlertValues.TWITCH_BITS_COMBO]: LumiaEventListTypes.BITS,
|
|
79
80
|
[activity_types_1.LumiaAlertValues.TWITCH_SESSION_BITS]: LumiaEventListTypes.BITS,
|
|
80
81
|
[activity_types_1.LumiaAlertValues.TWITCH_POWERUPS]: LumiaEventListTypes.BITS,
|
|
81
82
|
[activity_types_1.LumiaAlertValues.TWITCH_POWERUPS_POINTS]: LumiaEventListTypes.POINTS,
|
package/dist/variables.types.js
CHANGED
|
@@ -1663,6 +1663,7 @@ exports.AllVariables = {
|
|
|
1663
1663
|
giftSubscription: ['username', 'avatar', 'tier', 'giftAmount', 'recipients', 'recipientsRaw', 'gifter', 'totalGifts', 'subMonths', 'streakMonths', 'message', 'subPlan', 'subPlanName'],
|
|
1664
1664
|
sessionGiftSubscriptions: ['total', 'previousTotal'],
|
|
1665
1665
|
bits: ['username', 'avatar', 'amount', 'message', 'rawMessage', 'full_message'],
|
|
1666
|
+
bitsCombo: ['username', 'avatar', 'amount', 'bitsType', 'message', 'rawMessage', 'full_message'],
|
|
1666
1667
|
sessionBits: ['total', 'previousTotal'],
|
|
1667
1668
|
raid: ['username', 'avatar', 'viewers'],
|
|
1668
1669
|
raidOut: ['username', 'avatar', 'viewers'],
|