Skip to content

Commit d39744a

Browse files
steveseguinactions-user
authored andcommitted
feat: add event type testing support and improve P2P signaling peer tracking
- Add event type dropdown (with common events like new_follower, donation, etc.) and custom event input to test panels in actions/index.html and background.html - Implement `prefillTestEventFromCurrentFlow()` in EventFlowEditor.js to auto-select the event type based on the current flow's trigger node when the test panel opens - Include the selected or custom event type in test message construction during flow testing - Fix default volume property in playAudioClip node config to use nullish coalescing (`?? 1.0`) - Version bump from 3.50.1 to 3.50.2 - Introduce `signalingPeers` tracking in `p2pTransportState` (background.js) with functions `markSignalingPeerDiscovered`, `markSignalingPeerListing`, and `getSignalingPeerLabel` - Update `getDockTransportHealth` to expose signaling peer metrics, `canOfferServerFallback`, and other health indicators - Handle `room-peer-listing` and `room-peer-discovered` actions in the message event handler - Clear signaling peers on disconnect and reset transport state [auto-enhanced]
1 parent 16282f5 commit d39744a

6 files changed

Lines changed: 253 additions & 57 deletions

File tree

actions/EventFlowEditor.js

Lines changed: 80 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2303,11 +2303,11 @@ class EventFlowEditor {
23032303
return testResult;
23042304
}
23052305

2306-
initTestPanel() {
2307-
const testOverlay = document.getElementById('test-overlay');
2308-
const testPanel = document.getElementById('test-panel');
2309-
const openTestBtn = document.getElementById('open-test-panel');
2310-
const closeTestBtn = document.getElementById('close-test-btn');
2306+
initTestPanel() {
2307+
const testOverlay = document.getElementById('test-overlay');
2308+
const testPanel = document.getElementById('test-panel');
2309+
const openTestBtn = document.getElementById('open-test-panel');
2310+
const closeTestBtn = document.getElementById('close-test-btn');
23112311
const runTestBtn = document.getElementById('run-test-btn');
23122312
const donationCheckbox = document.getElementById('test-donation');
23132313
const donationAmountField = document.getElementById('donation-amount');
@@ -2331,11 +2331,14 @@ class EventFlowEditor {
23312331
});
23322332
}
23332333

2334-
// Open test panel
2335-
openTestBtn.addEventListener('click', function() {
2336-
testOverlay.style.display = 'block';
2337-
testPanel.style.display = 'flex';
2338-
});
2334+
// Open test panel
2335+
openTestBtn.addEventListener('click', function() {
2336+
testOverlay.style.display = 'block';
2337+
testPanel.style.display = 'flex';
2338+
});
2339+
openTestBtn.addEventListener('click', () => {
2340+
this.prefillTestEventFromCurrentFlow();
2341+
});
23392342

23402343
// Close test panel
23412344
closeTestBtn.addEventListener('click', function() {
@@ -2356,18 +2359,23 @@ class EventFlowEditor {
23562359
this.unsavedChanges ? 'block' : 'none';
23572360

23582361
// Create test message from form inputs
2359-
const testMessage = {
2360-
type: document.getElementById('test-source').value,
2361-
chatname: document.getElementById('test-username').value,
2362-
userid: document.getElementById('test-username').value.toLowerCase(),
2363-
chatmessage: document.getElementById('test-message').value,
2362+
const testMessage = {
2363+
type: document.getElementById('test-source').value,
2364+
chatname: document.getElementById('test-username').value,
2365+
userid: document.getElementById('test-username').value.toLowerCase(),
2366+
chatmessage: document.getElementById('test-message').value,
23642367
mod: document.getElementById('test-mod').checked,
23652368
vip: document.getElementById('test-vip').checked,
23662369
admin: document.getElementById('test-admin').checked,
23672370
hasDonation: document.getElementById('test-donation').checked,
23682371
// Add other required properties
2369-
timestamp: Date.now(),
2370-
};
2372+
timestamp: Date.now(),
2373+
};
2374+
2375+
const eventType = document.getElementById('test-event')?.value || document.getElementById('test-event-custom')?.value?.trim() || '';
2376+
if (eventType) {
2377+
testMessage.event = eventType;
2378+
}
23712379

23722380
// Apply first-time chatter flag
23732381
if (firstTimeCheckbox?.checked) {
@@ -2391,9 +2399,50 @@ class EventFlowEditor {
23912399
}
23922400

23932401
// Run the test
2394-
this.runTestFlow(testMessage);
2395-
});
2396-
}
2402+
this.runTestFlow(testMessage);
2403+
});
2404+
}
2405+
2406+
prefillTestEventFromCurrentFlow() {
2407+
const eventSelect = document.getElementById('test-event');
2408+
const customEventInput = document.getElementById('test-event-custom');
2409+
if (!eventSelect || eventSelect.value || customEventInput?.value || !this.currentFlow?.nodes) return;
2410+
2411+
const eventTrigger = this.currentFlow.nodes.find(node => node.type === 'trigger' && [
2412+
'eventNewFollower',
2413+
'eventNewSubscriber',
2414+
'eventResub',
2415+
'eventGiftSub',
2416+
'eventDonation',
2417+
'eventRaid',
2418+
'eventCheer',
2419+
'eventType',
2420+
'eventOther',
2421+
'eventCustom'
2422+
].includes(node.triggerType));
2423+
2424+
if (!eventTrigger) return;
2425+
2426+
const triggerToEvent = {
2427+
eventNewFollower: 'new_follower',
2428+
eventNewSubscriber: 'new_subscriber',
2429+
eventResub: 'resub',
2430+
eventGiftSub: 'subscription_gift',
2431+
eventDonation: 'donation',
2432+
eventRaid: 'raid',
2433+
eventCheer: 'cheer'
2434+
};
2435+
2436+
const eventValue = triggerToEvent[eventTrigger.triggerType] || eventTrigger.config?.eventType || '';
2437+
if (!eventValue) return;
2438+
2439+
const knownOption = Array.from(eventSelect.options).some(option => option.value === eventValue);
2440+
if (knownOption) {
2441+
eventSelect.value = eventValue;
2442+
} else if (customEventInput) {
2443+
customEventInput.value = eventValue;
2444+
}
2445+
}
23972446

23982447
displayTestResults(testResult, originalMessage = {}) {
23992448
const resultsEl = document.getElementById('test-results');
@@ -5233,19 +5282,19 @@ class EventFlowEditor {
52335282
</div>`;
52345283
break;
52355284

5236-
case 'playAudioClip':
5237-
html += `<div class="property-group">
5238-
<label class="property-label">Audio File URL</label>
5239-
<div style="display: flex; gap: 5px;">
5240-
<input type="url" class="property-input" id="prop-audioUrl" value="${node.config.audioUrl || ''}" style="flex: 1;">
5285+
case 'playAudioClip':
5286+
html += `<div class="property-group">
5287+
<label class="property-label">Audio File URL</label>
5288+
<div style="display: flex; gap: 5px;">
5289+
<input type="url" class="property-input" id="prop-audioUrl" value="${node.config.audioUrl || ''}" style="flex: 1;">
52415290
<button type="button" id="uploadAudioBtn" style="padding: 5px 10px; background: #667eea; color: white; border: none; border-radius: 4px; cursor: pointer;">Upload</button>
52425291
</div>
5243-
</div>
5244-
<div class="property-group">
5245-
<label class="property-label">Volume (0.0 to 1.0)</label>
5246-
<input type="number" class="property-input" id="prop-volume" value="${node.config.volume || 1.0}" min="0" max="1" step="0.1">
5247-
</div>`;
5248-
break;
5292+
</div>
5293+
<div class="property-group">
5294+
<label class="property-label">Volume (0.0 to 1.0)</label>
5295+
<input type="number" class="property-input" id="prop-volume" value="${node.config.volume ?? 1.0}" min="0" max="1" step="0.1">
5296+
</div>`;
5297+
break;
52495298

52505299
default:
52515300
html += `<p class="property-help">This node type (${node[subtypeField]}) has no specific configurable properties.</p>`;

actions/index.html

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,30 @@ <h3>Test Flow</h3>
6666
<input type="text" id="test-username" value="TestUser">
6767
</div>
6868

69-
<div class="test-group">
70-
<label for="test-message">Message:</label>
71-
<textarea id="test-message" rows="3">Hello, world!</textarea>
72-
</div>
73-
74-
<div class="test-options">
75-
<label class="test-checkbox">
76-
<input type="checkbox" id="test-mod">
69+
<div class="test-group">
70+
<label for="test-message">Message:</label>
71+
<textarea id="test-message" rows="3">Hello, world!</textarea>
72+
</div>
73+
74+
<div class="test-group">
75+
<label for="test-event">Event Type:</label>
76+
<select id="test-event">
77+
<option value="">None / chat message</option>
78+
<option value="new_follower">new_follower - Follow</option>
79+
<option value="new_subscriber">new_subscriber - New subscriber/member</option>
80+
<option value="resub">resub - Resub/renewal</option>
81+
<option value="subscription_gift">subscription_gift - Gift sub</option>
82+
<option value="donation">donation - Donation/Super Chat</option>
83+
<option value="cheer">cheer - Bits/Cheer</option>
84+
<option value="raid">raid - Raid</option>
85+
</select>
86+
<input type="text" id="test-event-custom" placeholder="Custom event, e.g. sponsorship" style="margin-top: 8px;">
87+
<p class="test-help" style="color: #a0a0a0; font-size: 13px; margin: 6px 0 0 0;">Use <code>new_follower</code> to test New Follower flows, or enter a custom event name.</p>
88+
</div>
89+
90+
<div class="test-options">
91+
<label class="test-checkbox">
92+
<input type="checkbox" id="test-mod">
7793
Moderator
7894
</label>
7995

background.html

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -786,14 +786,30 @@ <h3>Test Flow</h3>
786786
<input type="text" id="test-username" value="TestUser">
787787
</div>
788788

789-
<div class="test-group">
790-
<label for="test-message">Message:</label>
791-
<textarea id="test-message" rows="3">Hello, world!</textarea>
792-
</div>
793-
794-
<div class="test-options">
795-
<label class="test-checkbox">
796-
<input type="checkbox" id="test-mod">
789+
<div class="test-group">
790+
<label for="test-message">Message:</label>
791+
<textarea id="test-message" rows="3">Hello, world!</textarea>
792+
</div>
793+
794+
<div class="test-group">
795+
<label for="test-event">Event Type:</label>
796+
<select id="test-event">
797+
<option value="">None / chat message</option>
798+
<option value="new_follower">new_follower - Follow</option>
799+
<option value="new_subscriber">new_subscriber - New subscriber/member</option>
800+
<option value="resub">resub - Resub/renewal</option>
801+
<option value="subscription_gift">subscription_gift - Gift sub</option>
802+
<option value="donation">donation - Donation/Super Chat</option>
803+
<option value="cheer">cheer - Bits/Cheer</option>
804+
<option value="raid">raid - Raid</option>
805+
</select>
806+
<input type="text" id="test-event-custom" placeholder="Custom event, e.g. sponsorship" style="margin-top: 8px;">
807+
<p class="test-help" style="color: #a0a0a0; font-size: 13px; margin: 6px 0 0 0;">Use <code>new_follower</code> to test New Follower flows, or enter a custom event name.</p>
808+
</div>
809+
810+
<div class="test-options">
811+
<label class="test-checkbox">
812+
<input type="checkbox" id="test-mod">
797813
Moderator
798814
</label>
799815

0 commit comments

Comments
 (0)