@mercuryhq/n8n-nodes-twitch 1.9.0

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2025 Codely Enseña y Entretiene SL. https://codely.com
4
+ Copyright (c) 2026 NBDBatman//MercuryHQ
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,203 @@
1
+ # 🛠 Twitch node for n8n (fork)
2
+
3
+ Trigger workflows on stream start or stream end, search for Twitch streams details…
4
+
5
+ ## Credits
6
+
7
+ This project is a fork of the original CodelyTV Twitch node for n8n.
8
+ Thanks to CodelyTV for the foundation and ongoing open-source work.
9
+
10
+ Original project:
11
+ - Repository: `https://github.com/CodelyTV/n8n-nodes-twitch`
12
+ - Organization: `https://github.com/CodelyTV`
13
+
14
+ ## Differences From Upstream (CodelyTV)
15
+
16
+ - Expanded the Twitch node with a much larger set of actions and EventSub triggers (see `TWITCH_API_COVERAGE.md`).
17
+ - Switched credentials to OAuth2 with scopes and bearer tokens instead of app-only tokens.
18
+ - Added a `Run Once (Ignore Item Inputs)` toggle to prevent duplicate output when multiple input items exist.
19
+ - Enforced per-operation limits, including separate max limits for Polls (20) and Predictions (25).
20
+ - Removed deprecated/unused endpoints (e.g., Hype Train status, Drops entitlements, and stream tags).
21
+
22
+ # 👀 n8n Twitch node features
23
+
24
+ Once installed, you will be able to add Twitch triggers and actions to your n8n workflows.
25
+
26
+ 1. Search for Twitch node:
27
+
28
+ <img alt="Twitch node in the n8n nodes panel" src="/docs/node.png" width="336" height="180">
29
+
30
+ 2. Select the desired action or trigger:
31
+
32
+ <img alt="Twitch node triggers" src="/docs/node-actions-and-triggers.png" width="336" height="504">
33
+
34
+ 3. Parametrize it:
35
+
36
+ <img alt="Twitch node parameters" src="/docs/node-parameters.png" width="336" height="350">
37
+
38
+ # 🚀 Installation instructions
39
+
40
+ This node is in the process to be officially verified by n8n.
41
+ The installation process will be as simple as searching for "Twitch" in the nodes panel once we get that verification,
42
+ but in the meantime, you have several options that depend on how you use n8n.
43
+
44
+ We recommend checking out the [updated n8n instructions
45
+ on how to install community nodes](https://docs.n8n.io/integrations/community-nodes/installation/) for possible updates to this process.
46
+
47
+ ## a) n8n cloud instance
48
+
49
+ It is not possible to install unverified community nodes in n8n cloud ([documentation](https://docs.n8n.io/integrations/community-nodes/installation/)).
50
+ Once we get that verification, you will be able to install this node following [this step by step](https://docs.n8n.io/integrations/community-nodes/installation/verified-install/).
51
+
52
+ ## b) Self-hosted n8n instance
53
+
54
+ ### b.a) Not using queue mode: GUI installation
55
+
56
+ Follow [the official instructions](https://docs.n8n.io/integrations/community-nodes/installation/gui-install/)
57
+ specifying `@codelytv/n8n-nodes-twitch` as the node name to install:
58
+
59
+ <img alt="Twitch community node installation" src="/docs/node-installation.png" width="336" height="241">
60
+
61
+ ## b.b) Using queue mode
62
+
63
+ ### b.b.a) Install as npm package
64
+
65
+ This is the officially recommended way for self-hosted n8n instances running in queue mode ([documentation](https://docs.n8n.io/integrations/community-nodes/installation/manual-install/).
66
+
67
+ Go to the folder where n8n is installed (if you are using the standard Docker installation, it will probably be:
68
+ `/usr/local/lib/node_modules/n8n`) and install the package as any other npm package:
69
+
70
+ ```bash
71
+ npm i @codelytv/n8n-nodes-twitch
72
+ ```
73
+
74
+ ### b.b.b) Install as Custom Docker image
75
+
76
+ `Dockerfile` contents example for a custom image with this node added:
77
+
78
+ ```dockerfile
79
+ ARG N8N_VERSION
80
+ FROM n8nio/n8n:${N8N_VERSION}
81
+
82
+ RUN if [ -z "$N8N_VERSION" ]; then echo "💥 N8N_VERSION argument missing."; exit 1; fi && \
83
+ mkdir -p /home/node/.n8n/nodes && \
84
+ npm install --prefix /home/node/.n8n/nodes --production --silent @codelytv/n8n-nodes-twitch
85
+ ```
86
+
87
+ ### b.b.c) Install using Docker Compose / Docker Swarm with mapped volume
88
+
89
+ Take into account that this option has a considerable downside:
90
+ The workflows you create will contain `CUSTOM.twitchTrigger` as the node type reference instead of `@codelytv/n8n-nodes-twitch.twitchTrigger`. However, it could be the best approach if you want a faster feedback loop while developing.
91
+ Take into account that localhost will not be reachable from Twitch, so you `probably are interested into exposing it with a tunnel using something like `cloudflared`, or just expose a remote host to Twitch.
92
+
93
+ Docker Compose / Docker Swarm definition snippet:
94
+
95
+ ```yaml
96
+ volumes:
97
+ n8n_data:
98
+ name: '{{.Service.Name}}_{{.Task.Slot}}'
99
+
100
+ services:
101
+ n8n-main:
102
+ volumes:
103
+ - n8n_data:/home/node/.n8n
104
+ - /home/codely/n8n-custom-nodes:/home/node/.n8n/custom
105
+ ```
106
+
107
+ Deploy process:
108
+
109
+ ```bash
110
+ CUSTOM_NODES_DIR="$HOME/n8n-custom-nodes"
111
+
112
+ mkdir -p "$CUSTOM_NODES_DIR"
113
+
114
+ docker run --rm \
115
+ --user "$(id -u):$(id -g)" \
116
+ -v "$CUSTOM_NODES_DIR":/data \
117
+ -w /data \
118
+ node:22-alpine \
119
+ sh -c "npm install @codelytv/n8n-nodes-twitch --production --silent"
120
+
121
+ docker stack deploy -c n8n-swarm.yml n8n
122
+ ```
123
+
124
+ # 🔑 How to get Twitch credentials
125
+
126
+ You will need to create a new Twitch application to get Client ID and Client Secret following these steps:
127
+
128
+ 1. Go to the [Twitch Developer Console](https://dev.twitch.tv/console/apps).
129
+ 2. Log in using your Twitch account credentials.
130
+ 3. Click on the "+ Register Your Application" button.
131
+ 4. Fill out the form as follows and click "Create":
132
+ - Name: Name your app (e.g., “n8nTwitchBot”).
133
+ - OAuth Redirect URLs: Use a valid redirect URL.
134
+ Something like http://localhost:5678/rest/oauth2-credential/callback works.
135
+ We do not plan to display Twitch authentication to end users with Oauth.
136
+ We're only interested in getting the Client ID and Client Secret, so it's fine to specify a local URL.
137
+ - Category: Application Integration
138
+ - Client Type: Confidential
139
+ 5. Get your credentials:
140
+ - Click on "Manage"
141
+ - Client ID: Visible right away.
142
+ - Client Secret: Click "New Secret" to generate one. Be sure to store this securely (it won’t be shown again).
143
+
144
+ # 💻 Documentation for node contributors
145
+
146
+ How to locally test this node (based on [the official n8n guide](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/)):
147
+
148
+ 1. Clone and move to the node development folder
149
+ ```bash
150
+ cd ~/Code/work/codely/public/
151
+ git clone git@github.com:CodelyTV/n8n-nodes-twitch.git
152
+ cd n8n-nodes-twitch
153
+ ```
154
+ 2. Build the node
155
+ ```bash
156
+ npm run build
157
+ ```
158
+ 3. Create a npm global symlink to the locally installed package
159
+ ```bash
160
+ npm link
161
+ ```
162
+ 4. Install n8n locally:
163
+ ```bash
164
+ npm install n8n -g
165
+ ```
166
+ 5. Move to your n8n local installation
167
+ ```bash
168
+ cd ~/.n8n/
169
+ ```
170
+ 6. Create a custom nodes folder
171
+ ```bash
172
+ mkdir custom
173
+ cd custom
174
+ 7. Link the node package to the symlink previously created
175
+ ```bash
176
+ npm link @codelytv/n8n-nodes-twitch
177
+ ```
178
+ 8. Validate that the local n8n instance has the Twitch node pointing to the local folder
179
+ ```bash
180
+ tree -L 3 -d
181
+ ```
182
+ Expected output:
183
+ ```bash
184
+ .
185
+ └── node_modules
186
+ └── @codelytv
187
+ └── n8n-nodes-twitch -> ../../../../Code/work/codely/public/n8n-nodes-twitch
188
+ ```
189
+ 9. Run n8n
190
+ ```bash
191
+ n8n start
192
+ ```
193
+ 10. Enjoy!
194
+
195
+ # 👌 Code Quality Standards
196
+
197
+ Publishing this package we are committing ourselves to the following code quality standards:
198
+
199
+ - 🤝 Respect **Semantic Versioning**: No breaking changes in patch or minor versions
200
+ - 🤏 No surprises in transitive dependencies: Use the **bare minimum dependencies** needed to meet the purpose
201
+ - 🎯 **One specific purpose** to meet without having to carry a bunch of unnecessary other utilities
202
+ - 📖 **Well documented ReadMe** showing how to install and use
203
+ - ⚖️ **License favoring Open Source** and collaboration
@@ -0,0 +1,9 @@
1
+ import { ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class TwitchApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ extends: string[];
7
+ properties: INodeProperties[];
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,70 @@
1
+ export class TwitchApi {
2
+ constructor() {
3
+ this.name = 'twitchApi';
4
+ this.displayName = 'Twitch API';
5
+ this.documentationUrl = 'https://github.com/CodelyTV/n8n-nodes-twitch?tab=readme-ov-file#-how-to-get-twitch-credentials';
6
+ this.extends = ['oAuth2Api'];
7
+ this.properties = [
8
+ {
9
+ displayName: 'Grant Type',
10
+ name: 'grantType',
11
+ type: 'hidden',
12
+ default: 'authorizationCode',
13
+ },
14
+ {
15
+ displayName: 'Authorization URL',
16
+ name: 'authUrl',
17
+ type: 'string',
18
+ default: 'https://id.twitch.tv/oauth2/authorize',
19
+ },
20
+ {
21
+ displayName: 'Access Token URL',
22
+ name: 'accessTokenUrl',
23
+ type: 'string',
24
+ default: 'https://id.twitch.tv/oauth2/token',
25
+ },
26
+ {
27
+ displayName: 'Authentication',
28
+ name: 'authentication',
29
+ type: 'hidden',
30
+ default: 'body',
31
+ },
32
+ {
33
+ displayName: 'Client ID',
34
+ name: 'clientId',
35
+ type: 'string',
36
+ default: '',
37
+ },
38
+ {
39
+ displayName: 'Client Secret',
40
+ name: 'clientSecret',
41
+ type: 'string',
42
+ typeOptions: { password: true },
43
+ default: '',
44
+ },
45
+ {
46
+ displayName: 'Scope',
47
+ name: 'scope',
48
+ type: 'string',
49
+ default: 'analytics:read:extensions analytics:read:games bits:read channel:bot channel:edit:commercial channel:manage:ads channel:manage:broadcast channel:manage:clips channel:manage:extensions channel:manage:guest_star channel:manage:moderators channel:manage:polls channel:manage:predictions channel:manage:raids channel:manage:redemptions channel:manage:schedule channel:manage:videos channel:manage:vips channel:moderate channel:read:ads channel:read:charity channel:read:editors channel:read:goals channel:read:guest_star channel:read:hype_train channel:read:polls channel:read:predictions channel:read:redemptions channel:read:stream_key channel:read:subscriptions channel:read:vips clips:edit editor:manage:clips moderation:read moderator:manage:announcements moderator:manage:automod moderator:manage:automod_settings moderator:manage:banned_users moderator:manage:blocked_terms moderator:manage:chat_messages moderator:manage:chat_settings moderator:manage:guest_star moderator:manage:shield_mode moderator:manage:shoutouts moderator:manage:suspicious_users moderator:manage:unban_requests moderator:manage:warnings moderator:read:automod_settings moderator:read:banned_users moderator:read:blocked_terms moderator:read:chat_messages moderator:read:chat_settings moderator:read:chatters moderator:read:followers moderator:read:guest_star moderator:read:moderators moderator:read:shield_mode moderator:read:shoutouts moderator:read:suspicious_users moderator:read:unban_requests moderator:read:vips moderator:read:warnings user:bot user:edit user:edit:broadcast user:manage:blocked_users user:manage:chat_color user:manage:whispers user:read:blocked_users user:read:broadcast user:read:chat user:read:email user:read:emotes user:read:follows user:read:moderated_channels user:read:subscriptions user:read:whispers user:write:chat',
50
+ description: 'Space-separated list of scopes to request (add required scopes for the endpoints you use)',
51
+ },
52
+ ];
53
+ this.test = {
54
+ request: {
55
+ baseURL: 'https://id.twitch.tv',
56
+ url: '/oauth2/token',
57
+ method: 'POST',
58
+ headers: {
59
+ 'Content-Type': 'application/json',
60
+ },
61
+ qs: {
62
+ client_id: '={{$credentials.clientId}}',
63
+ client_secret: '={{$credentials.clientSecret}}',
64
+ grant_type: 'client_credentials',
65
+ },
66
+ },
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=TwitchApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwitchApi.credentials.js","sourceRoot":"","sources":["../../credentials/TwitchApi.credentials.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,SAAS;IAAtB;QACC,SAAI,GAAG,WAAW,CAAC;QACnB,gBAAW,GAAG,YAAY,CAAC;QAC3B,qBAAgB,GAAG,gGAAgG,CAAC;QACpH,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QACxB,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB;aAC5B;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,uCAAuC;aAChD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mCAAmC;aAC5C;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,qyDAAqyD;gBAC9yD,WAAW,EAAE,2FAA2F;aACxG;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,sBAAsB;gBAC/B,GAAG,EAAE,eAAe;gBACpB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACR,cAAc,EAAE,kBAAkB;iBAClC;gBACD,EAAE,EAAE;oBACH,SAAS,EAAE,4BAA4B;oBACvC,aAAa,EAAE,gCAAgC;oBAC/C,UAAU,EAAE,oBAAoB;iBAChC;aACD;SACD,CAAC;IACH,CAAC;CAAA"}
@@ -0,0 +1,3 @@
1
+ import { IDataObject, IExecuteFunctions, IHookFunctions, ILoadOptionsFunctions, INodePropertyOptions, IWebhookFunctions } from 'n8n-workflow';
2
+ export declare function twitchApiRequest(this: IExecuteFunctions | IWebhookFunctions | IHookFunctions | ILoadOptionsFunctions, method: string, resource: string, body?: any, query?: IDataObject, option?: IDataObject): Promise<any>;
3
+ export declare function getChannels(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
@@ -0,0 +1,60 @@
1
+ export async function twitchApiRequest(method, resource, body = {}, query = {}, option = {}) {
2
+ var _a;
3
+ const credentials = (await this.getCredentials('twitchApi'));
4
+ const clientId = credentials.clientId;
5
+ const endpoint = 'https://api.twitch.tv/helix';
6
+ const options = {
7
+ headers: {
8
+ 'Content-Type': 'application/json',
9
+ 'Client-Id': clientId,
10
+ },
11
+ method: method,
12
+ body,
13
+ qs: query,
14
+ url: `${endpoint}${resource}`,
15
+ json: true,
16
+ };
17
+ if (!Object.keys(body).length) {
18
+ delete options.body;
19
+ }
20
+ if (!Object.keys(query).length) {
21
+ delete options.qs;
22
+ }
23
+ const optionObj = option;
24
+ const optionHeaders = (_a = optionObj.headers) !== null && _a !== void 0 ? _a : {};
25
+ const requestOptions = {
26
+ ...options,
27
+ ...optionObj,
28
+ headers: {
29
+ ...(options.headers || {}),
30
+ ...optionHeaders,
31
+ },
32
+ };
33
+ try {
34
+ return await this.helpers.requestWithAuthentication.call(this, 'twitchApi', requestOptions);
35
+ }
36
+ catch (errorObject) {
37
+ if (errorObject.error) {
38
+ const errorMessage = errorObject.error.message;
39
+ throw new Error(`Twitch API error response [${errorObject.error.status}]: ${errorMessage}`);
40
+ }
41
+ throw errorObject;
42
+ }
43
+ }
44
+ export async function getChannels() {
45
+ const returnData = [];
46
+ const channels = await twitchApiRequest.call(this, 'GET', '/search/channels', {}, { query: this.getNodeParameter('userLogin', 0) });
47
+ if (channels.data === undefined) {
48
+ throw new Error('No channels found');
49
+ }
50
+ for (const channel of channels.data) {
51
+ const channelName = channel.display_name;
52
+ const channelId = channel.id;
53
+ returnData.push({
54
+ name: channelName,
55
+ value: channelId,
56
+ });
57
+ }
58
+ return returnData;
59
+ }
60
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Twitch/GenericFunctions.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAMrC,MAAc,EACd,QAAgB,EAChB,OAAY,EAAE,EACd,QAAqB,EAAE,EACvB,SAAsB,EAAE;;IAIxB,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAgB,CAAC;IAE5E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IAEtC,MAAM,QAAQ,GAAG,6BAA6B,CAAC;IAC/C,MAAM,OAAO,GAAwB;QACpC,OAAO,EAAE;YACR,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,QAAQ;SACrB;QACD,MAAM,EAAE,MAA6B;QACrC,IAAI;QACJ,EAAE,EAAE,KAAK;QACT,GAAG,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE;QAC7B,IAAI,EAAE,IAAI;KACV,CAAC;IACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,MAAqB,CAAC;IACxC,MAAM,aAAa,GAAG,MAAC,SAAS,CAAC,OAAmC,mCAAI,EAAE,CAAC;IAC3E,MAAM,cAAc,GAAwB;QAC3C,GAAG,OAAO;QACV,GAAG,SAAS;QACZ,OAAO,EAAE;YACR,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1B,GAAG,aAAa;SAChB;KACD,CAAC;IAEF,IAAI,CAAC;QACJ,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,WAAgB,EAAE,CAAC;QAC3B,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;YAC/C,MAAM,IAAI,KAAK,CACd,8BAA8B,WAAW,CAAC,KAAK,CAAC,MAAM,MAAM,YAAY,EAAE,CAC1E,CAAC;QACH,CAAC;QACD,MAAM,WAAW,CAAC;IACnB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAChC,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAW,EAAC,CAAC,CAAC;IAE7I,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAE7B,UAAU,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { IExecuteFunctions, INodeType, INodeTypeDescription } from "n8n-workflow";
2
+ export declare class Twitch implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<import("n8n-workflow").INodeExecutionData[][]>;
5
+ }