From 1a27973e6d8d66150e813c4c35030f6e3f642955 Mon Sep 17 00:00:00 2001 From: Niklas Date: Fri, 5 Nov 2021 00:13:52 +0100 Subject: [PATCH 1/5] Update nodecg-io-streamelements to emit test events --- .../streamelements-events/extension/index.ts | 4 +++ .../extension/StreamElements.ts | 35 ++++++++++++++----- .../extension/StreamElementsEvent.ts | 10 ++++++ .../extension/index.ts | 5 +-- .../nodecg-io-streamelements/package.json | 4 +-- .../streamelements-schema.json | 6 +++- 6 files changed, 50 insertions(+), 14 deletions(-) diff --git a/samples/streamelements-events/extension/index.ts b/samples/streamelements-events/extension/index.ts index 2975599ba..c82d2de08 100644 --- a/samples/streamelements-events/extension/index.ts +++ b/samples/streamelements-events/extension/index.ts @@ -58,6 +58,10 @@ module.exports = function (nodecg: NodeCG) { ); } }); + + client.onTest((data) => { + nodecg.log.info(JSON.stringify(data)); + }); }); streamElements?.onUnavailable(() => nodecg.log.info("SE client has been unset.")); diff --git a/services/nodecg-io-streamelements/extension/StreamElements.ts b/services/nodecg-io-streamelements/extension/StreamElements.ts index 6d526b89b..cf3ffb946 100644 --- a/services/nodecg-io-streamelements/extension/StreamElements.ts +++ b/services/nodecg-io-streamelements/extension/StreamElements.ts @@ -6,7 +6,7 @@ import { EventEmitter } from "events"; export class StreamElementsServiceClient extends EventEmitter { private socket: SocketIOClient.Socket; - constructor(private jwtToken: string) { + constructor(private jwtToken: string, private handleTestEvents: boolean) { super(); } @@ -30,6 +30,11 @@ export class StreamElementsServiceClient extends EventEmitter { } this.emit(data.type, data); }); + this.onTestEvent((data: StreamElementsEvent) => { + if (data.listener) { + this.emit("test", data); + } + }); } async connect(): Promise { @@ -77,7 +82,7 @@ export class StreamElementsServiceClient extends EventEmitter { this.socket.on("connect_error", handler); } - onEvent(handler: (data: StreamElementsEvent) => void): void { + private onEvent(handler: (data: StreamElementsEvent) => void): void { this.socket.on("event", (data: StreamElementsEvent) => { if (data) { handler(data); @@ -85,31 +90,43 @@ export class StreamElementsServiceClient extends EventEmitter { }); } - onSubscriber(handler: (data: StreamElementsEvent) => void): void { + private onTestEvent(handler: (data: StreamElementsEvent) => void): void { + this.socket.on("event:test", (data: StreamElementsEvent) => { + if (data) { + handler(data); + } + }); + } + + public onSubscriber(handler: (data: StreamElementsEvent) => void): void { this.on("subscriber", handler); } - onTip(handler: (data: StreamElementsEvent) => void): void { + public onTip(handler: (data: StreamElementsEvent) => void): void { this.on("tip", handler); } - onCheer(handler: (data: StreamElementsEvent) => void): void { + public onCheer(handler: (data: StreamElementsEvent) => void): void { this.on("cheer", handler); } - onGift(handler: (data: StreamElementsEvent) => void): void { + public onGift(handler: (data: StreamElementsEvent) => void): void { this.on("gift", handler); } - onFollow(handler: (data: StreamElementsEvent) => void): void { + public onFollow(handler: (data: StreamElementsEvent) => void): void { this.on("follow", handler); } - onRaid(handler: (data: StreamElementsEvent) => void): void { + public onRaid(handler: (data: StreamElementsEvent) => void): void { this.on("raid", handler); } - onHost(handler: (data: StreamElementsEvent) => void): void { + public onHost(handler: (data: StreamElementsEvent) => void): void { this.on("host", handler); } + + public onTest(handler: (data: StreamElementsEvent) => void): void { + this.on("test", handler); + } } diff --git a/services/nodecg-io-streamelements/extension/StreamElementsEvent.ts b/services/nodecg-io-streamelements/extension/StreamElementsEvent.ts index b7be72ae5..40dcc9392 100644 --- a/services/nodecg-io-streamelements/extension/StreamElementsEvent.ts +++ b/services/nodecg-io-streamelements/extension/StreamElementsEvent.ts @@ -85,5 +85,15 @@ export interface StreamElementsEvent { * Event update date and time */ updatedAt: string; + /** + * Listener property for test events + */ + listener?: string; + /** + * Event property for test events + */ + event?: { + [k: string]: unknown; + }; [k: string]: unknown; } diff --git a/services/nodecg-io-streamelements/extension/index.ts b/services/nodecg-io-streamelements/extension/index.ts index 2466da8af..d6193b19b 100644 --- a/services/nodecg-io-streamelements/extension/index.ts +++ b/services/nodecg-io-streamelements/extension/index.ts @@ -4,6 +4,7 @@ import { StreamElementsServiceClient } from "./StreamElements"; interface StreamElementsServiceConfig { jwtToken: string; + handleTestEvents: boolean; } export { StreamElementsServiceClient } from "./StreamElements"; @@ -15,12 +16,12 @@ module.exports = (nodecg: NodeCG) => { class StreamElementsService extends ServiceBundle { async validateConfig(config: StreamElementsServiceConfig) { - return new StreamElementsServiceClient(config.jwtToken).testConnection(); + return new StreamElementsServiceClient(config.jwtToken, config.handleTestEvents).testConnection(); } async createClient(config: StreamElementsServiceConfig, logger: Logger) { logger.info("Connecting to StreamElements socket server..."); - const client = new StreamElementsServiceClient(config.jwtToken); + const client = new StreamElementsServiceClient(config.jwtToken, config.handleTestEvents); await client.connect(); logger.info("Successfully connected to StreamElements socket server."); diff --git a/services/nodecg-io-streamelements/package.json b/services/nodecg-io-streamelements/package.json index fa6e9696c..132dba902 100644 --- a/services/nodecg-io-streamelements/package.json +++ b/services/nodecg-io-streamelements/package.json @@ -1,6 +1,6 @@ { "name": "nodecg-io-streamelements", - "version": "0.2.0", + "version": "0.2.1", "description": "Allows to connect to streamelements to e.g. react to donations.", "homepage": "https://nodecg.io/RELEASE", "author": { @@ -43,6 +43,6 @@ "dependencies": { "@types/socket.io-client": "^1.4.36", "nodecg-io-core": "^0.2.0", - "socket.io-client": "^4.3.2" + "socket.io-client": "^2.4.0" } } diff --git a/services/nodecg-io-streamelements/streamelements-schema.json b/services/nodecg-io-streamelements/streamelements-schema.json index f971af224..1751d977d 100644 --- a/services/nodecg-io-streamelements/streamelements-schema.json +++ b/services/nodecg-io-streamelements/streamelements-schema.json @@ -6,7 +6,11 @@ "jwtToken": { "type": "string", "description": "Your JWT token for streamelments." + }, + "handleTestEvents": { + "type": "boolean", + "description": "Whether test events should be handled." } }, - "required": ["jwtToken"] + "required": ["jwtToken", "handleTestEvents"] } From 163f89c85075db1de9e64655969931b4917d4725 Mon Sep 17 00:00:00 2001 From: Niklas Date: Fri, 5 Nov 2021 00:18:23 +0100 Subject: [PATCH 2/5] Bump sample version & dependency --- samples/streamelements-events/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/streamelements-events/package.json b/samples/streamelements-events/package.json index 9ac01e43c..fa0bbdb2a 100644 --- a/samples/streamelements-events/package.json +++ b/samples/streamelements-events/package.json @@ -1,6 +1,6 @@ { "name": "streamelements-events", - "version": "0.2.0", + "version": "0.2.1", "private": true, "nodecg": { "compatibleRange": "^1.1.1", @@ -13,7 +13,7 @@ "@types/node": "^16.11.6", "nodecg-types": "^1.8.3", "nodecg-io-core": "^0.2.0", - "nodecg-io-streamelements": "^0.2.0", + "nodecg-io-streamelements": "^0.2.1", "typescript": "^4.4.4" } } From 3c30413c765f0cee08cdee370d76a348ac3d0689 Mon Sep 17 00:00:00 2001 From: Niklas Date: Fri, 5 Nov 2021 00:22:11 +0100 Subject: [PATCH 3/5] actually check if the flag is set --- .../extension/StreamElements.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/nodecg-io-streamelements/extension/StreamElements.ts b/services/nodecg-io-streamelements/extension/StreamElements.ts index cf3ffb946..353dd91c2 100644 --- a/services/nodecg-io-streamelements/extension/StreamElements.ts +++ b/services/nodecg-io-streamelements/extension/StreamElements.ts @@ -30,11 +30,13 @@ export class StreamElementsServiceClient extends EventEmitter { } this.emit(data.type, data); }); - this.onTestEvent((data: StreamElementsEvent) => { - if (data.listener) { - this.emit("test", data); - } - }); + if (this.handleTestEvents) { + this.onTestEvent((data: StreamElementsEvent) => { + if (data.listener) { + this.emit("test", data); + } + }); + } } async connect(): Promise { From db7f24196f37375ef098d58847594b8efe60d24b Mon Sep 17 00:00:00 2001 From: Niklas Date: Fri, 5 Nov 2021 23:19:03 +0100 Subject: [PATCH 4/5] Revert version to 0.2.0 --- samples/streamelements-events/package.json | 4 ++-- services/nodecg-io-streamelements/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/streamelements-events/package.json b/samples/streamelements-events/package.json index fa0bbdb2a..9ac01e43c 100644 --- a/samples/streamelements-events/package.json +++ b/samples/streamelements-events/package.json @@ -1,6 +1,6 @@ { "name": "streamelements-events", - "version": "0.2.1", + "version": "0.2.0", "private": true, "nodecg": { "compatibleRange": "^1.1.1", @@ -13,7 +13,7 @@ "@types/node": "^16.11.6", "nodecg-types": "^1.8.3", "nodecg-io-core": "^0.2.0", - "nodecg-io-streamelements": "^0.2.1", + "nodecg-io-streamelements": "^0.2.0", "typescript": "^4.4.4" } } diff --git a/services/nodecg-io-streamelements/package.json b/services/nodecg-io-streamelements/package.json index 132dba902..cf4d418c0 100644 --- a/services/nodecg-io-streamelements/package.json +++ b/services/nodecg-io-streamelements/package.json @@ -1,6 +1,6 @@ { "name": "nodecg-io-streamelements", - "version": "0.2.1", + "version": "0.2.0", "description": "Allows to connect to streamelements to e.g. react to donations.", "homepage": "https://nodecg.io/RELEASE", "author": { From 6b2f81a5496122134b5a82fbc034c5942d4aed0c Mon Sep 17 00:00:00 2001 From: Niklas Date: Fri, 5 Nov 2021 23:29:38 +0100 Subject: [PATCH 5/5] Changed handleTestEvents to an optional property --- services/nodecg-io-streamelements/streamelements-schema.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/nodecg-io-streamelements/streamelements-schema.json b/services/nodecg-io-streamelements/streamelements-schema.json index 1751d977d..da56ed330 100644 --- a/services/nodecg-io-streamelements/streamelements-schema.json +++ b/services/nodecg-io-streamelements/streamelements-schema.json @@ -9,8 +9,9 @@ }, "handleTestEvents": { "type": "boolean", + "default": false, "description": "Whether test events should be handled." } }, - "required": ["jwtToken", "handleTestEvents"] + "required": ["jwtToken"] }