@raphiiko/wavelink-ts 1.0.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/dist/client.js ADDED
@@ -0,0 +1,462 @@
1
+ import { createWebSocket, WebSocketState, } from "./websocket-adapter.js";
2
+ /**
3
+ * Wave Link API Client
4
+ *
5
+ * Provides a typed interface for controlling Elgato Wave Link 3.0.
6
+ */
7
+ export class WaveLinkClient {
8
+ ws = null;
9
+ requestId = 0;
10
+ pendingRequests = new Map();
11
+ eventHandlers = new Map();
12
+ reconnectAttempts = 0;
13
+ reconnectTimer = null;
14
+ isManuallyDisconnected = false;
15
+ options;
16
+ currentPort = 1884;
17
+ minPort = 1884;
18
+ maxPort = 1893;
19
+ portAttempts = 0;
20
+ maxPortAttempts = 60;
21
+ constructor(options = {}) {
22
+ this.options = {
23
+ host: options.host || "127.0.0.1",
24
+ autoReconnect: options.autoReconnect ?? true,
25
+ reconnectDelay: options.reconnectDelay || 2000,
26
+ maxReconnectAttempts: options.maxReconnectAttempts || 10,
27
+ origin: options.origin || "streamdeck://",
28
+ };
29
+ }
30
+ /**
31
+ * Connect to Wave Link
32
+ * Automatically tries ports 1884-1893 until a connection is established
33
+ */
34
+ async connect() {
35
+ this.isManuallyDisconnected = false;
36
+ // Reset port attempts on new connection attempt
37
+ if (this.portAttempts === 0) {
38
+ this.currentPort = this.minPort;
39
+ }
40
+ return this.tryConnect();
41
+ }
42
+ async tryConnect() {
43
+ if (this.portAttempts >= this.maxPortAttempts) {
44
+ const error = new Error(`Failed to connect to Wave Link after ${this.maxPortAttempts} attempts. ` +
45
+ `Tried ports ${this.minPort}-${this.maxPort}. ` +
46
+ `Make sure Wave Link is running.`);
47
+ this.emit("error", error);
48
+ throw error;
49
+ }
50
+ const url = `ws://${this.options.host}:${this.currentPort}`;
51
+ try {
52
+ this.ws = await createWebSocket(url, {
53
+ origin: this.options.origin,
54
+ });
55
+ // Connection successful!
56
+ this.reconnectAttempts = 0;
57
+ this.portAttempts = 0;
58
+ // Set up event handlers
59
+ this.ws.addEventListener("message", (event) => {
60
+ const data = event.data || event;
61
+ this.handleMessage(typeof data === "string" ? data : data.toString());
62
+ });
63
+ this.ws.addEventListener("close", () => {
64
+ this.handleDisconnect();
65
+ });
66
+ this.ws.addEventListener("error", (error) => {
67
+ this.emit("error", error instanceof Error ? error : new Error(String(error)));
68
+ });
69
+ this.emit("connected");
70
+ }
71
+ catch (error) {
72
+ // Connection failed, try next port
73
+ this.portAttempts++;
74
+ // Move to next port
75
+ if (this.currentPort >= this.maxPort) {
76
+ this.currentPort = this.minPort;
77
+ }
78
+ else {
79
+ this.currentPort++;
80
+ }
81
+ // If we've cycled back to the starting port, emit an error
82
+ if (this.currentPort === this.minPort && this.portAttempts > 0) {
83
+ const cycleError = new Error(`Failed to connect on ports ${this.minPort}-${this.maxPort}. ` +
84
+ `Attempt ${Math.floor(this.portAttempts / (this.maxPort - this.minPort + 1)) + 1}. ` +
85
+ `Retrying...`);
86
+ this.emit("error", cycleError);
87
+ }
88
+ // Try the next port
89
+ return this.tryConnect();
90
+ }
91
+ }
92
+ /**
93
+ * Disconnect from Wave Link
94
+ */
95
+ disconnect() {
96
+ this.isManuallyDisconnected = true;
97
+ if (this.reconnectTimer) {
98
+ clearTimeout(this.reconnectTimer);
99
+ this.reconnectTimer = null;
100
+ }
101
+ if (this.ws) {
102
+ this.ws.close();
103
+ this.ws = null;
104
+ }
105
+ }
106
+ /**
107
+ * Check if connected
108
+ */
109
+ isConnected() {
110
+ return this.ws !== null && this.ws.readyState === WebSocketState.OPEN;
111
+ }
112
+ /**
113
+ * Add event listener
114
+ */
115
+ on(event, callback) {
116
+ if (!this.eventHandlers.has(event)) {
117
+ this.eventHandlers.set(event, new Set());
118
+ }
119
+ this.eventHandlers.get(event).add(callback);
120
+ }
121
+ /**
122
+ * Remove event listener
123
+ */
124
+ off(event, callback) {
125
+ const handlers = this.eventHandlers.get(event);
126
+ if (handlers) {
127
+ handlers.delete(callback);
128
+ }
129
+ }
130
+ /**
131
+ * Remove all event listeners for an event
132
+ */
133
+ removeAllListeners(event) {
134
+ if (event) {
135
+ this.eventHandlers.delete(event);
136
+ }
137
+ else {
138
+ this.eventHandlers.clear();
139
+ }
140
+ }
141
+ emit(event, ...args) {
142
+ const handlers = this.eventHandlers.get(event);
143
+ if (handlers) {
144
+ handlers.forEach((handler) => {
145
+ try {
146
+ handler(...args);
147
+ }
148
+ catch (error) {
149
+ console.error(`Error in ${event} handler:`, error);
150
+ }
151
+ });
152
+ }
153
+ }
154
+ handleDisconnect() {
155
+ this.ws = null;
156
+ this.emit("disconnected");
157
+ // Reject all pending requests
158
+ this.pendingRequests.forEach(({ reject }) => {
159
+ reject(new Error("Connection closed"));
160
+ });
161
+ this.pendingRequests.clear();
162
+ // Auto-reconnect if enabled
163
+ if (this.options.autoReconnect &&
164
+ !this.isManuallyDisconnected &&
165
+ this.reconnectAttempts < this.options.maxReconnectAttempts) {
166
+ this.reconnectTimer = setTimeout(() => {
167
+ this.reconnectAttempts++;
168
+ this.connect().catch((error) => {
169
+ this.emit("error", error);
170
+ });
171
+ }, this.options.reconnectDelay);
172
+ }
173
+ }
174
+ handleMessage(data) {
175
+ try {
176
+ const message = JSON.parse(data);
177
+ // Check if it's a response or notification
178
+ if ("id" in message) {
179
+ // Response
180
+ this.handleResponse(message);
181
+ }
182
+ else {
183
+ // Notification
184
+ this.handleNotification(message);
185
+ }
186
+ }
187
+ catch (error) {
188
+ this.emit("error", error instanceof Error ? error : new Error(String(error)));
189
+ }
190
+ }
191
+ handleResponse(response) {
192
+ const pending = this.pendingRequests.get(response.id);
193
+ if (pending) {
194
+ this.pendingRequests.delete(response.id);
195
+ if (response.error) {
196
+ pending.reject(new Error(response.error.message));
197
+ }
198
+ else {
199
+ pending.resolve(response.result);
200
+ }
201
+ }
202
+ }
203
+ handleNotification(notification) {
204
+ const { method, params } = notification;
205
+ // Emit specific event
206
+ switch (method) {
207
+ case "inputDevicesChanged":
208
+ this.emit("inputDevicesChanged", params);
209
+ break;
210
+ case "inputDeviceChanged":
211
+ this.emit("inputDeviceChanged", params);
212
+ break;
213
+ case "outputDevicesChanged":
214
+ if (Array.isArray(params)) {
215
+ this.emit("outputDevicesChanged", {
216
+ mainOutput: params[0],
217
+ outputDevices: params[1],
218
+ });
219
+ }
220
+ break;
221
+ case "outputDeviceChanged":
222
+ this.emit("outputDeviceChanged", params);
223
+ break;
224
+ case "channelsChanged":
225
+ this.emit("channelsChanged", params);
226
+ break;
227
+ case "channelChanged":
228
+ this.emit("channelChanged", params);
229
+ break;
230
+ case "mixesChanged":
231
+ this.emit("mixesChanged", params);
232
+ break;
233
+ case "mixChanged":
234
+ this.emit("mixChanged", params);
235
+ break;
236
+ case "levelMeterChanged":
237
+ if (Array.isArray(params)) {
238
+ this.emit("levelMeterChanged", {
239
+ inputs: params[0],
240
+ outputs: params[1],
241
+ channels: params[2],
242
+ mixes: params[3],
243
+ });
244
+ }
245
+ break;
246
+ case "focusedAppChanged":
247
+ if (Array.isArray(params)) {
248
+ this.emit("focusedAppChanged", {
249
+ appId: params[0],
250
+ appName: params[1],
251
+ channel: params[2],
252
+ });
253
+ }
254
+ break;
255
+ }
256
+ // Emit generic notification event
257
+ this.emit("notification", method, params);
258
+ }
259
+ async call(method, params = null) {
260
+ if (!this.isConnected()) {
261
+ throw new Error("Not connected to Wave Link");
262
+ }
263
+ const id = ++this.requestId;
264
+ const request = {
265
+ id,
266
+ jsonrpc: "2.0",
267
+ method,
268
+ params,
269
+ };
270
+ return new Promise((resolve, reject) => {
271
+ this.pendingRequests.set(id, { resolve, reject });
272
+ this.ws.send(JSON.stringify(request));
273
+ });
274
+ }
275
+ // API Methods
276
+ /**
277
+ * Get application information
278
+ */
279
+ async getApplicationInfo() {
280
+ return this.call("getApplicationInfo", null);
281
+ }
282
+ /**
283
+ * Get all input devices
284
+ */
285
+ async getInputDevices() {
286
+ return this.call("getInputDevices", null);
287
+ }
288
+ /**
289
+ * Get all output devices
290
+ */
291
+ async getOutputDevices() {
292
+ return this.call("getOutputDevices", null);
293
+ }
294
+ /**
295
+ * Get all channels
296
+ */
297
+ async getChannels() {
298
+ return this.call("getChannels", null);
299
+ }
300
+ /**
301
+ * Get all mixes
302
+ */
303
+ async getMixes() {
304
+ return this.call("getMixes", null);
305
+ }
306
+ /**
307
+ * Set input device properties
308
+ */
309
+ async setInputDevice(params) {
310
+ await this.call("setInputDevice", params);
311
+ }
312
+ /**
313
+ * Set output device properties
314
+ */
315
+ async setOutputDevice(params) {
316
+ await this.call("setOutputDevice", params);
317
+ }
318
+ /**
319
+ * Set channel properties
320
+ */
321
+ async setChannel(params) {
322
+ await this.call("setChannel", params);
323
+ }
324
+ /**
325
+ * Set mix properties
326
+ */
327
+ async setMix(params) {
328
+ await this.call("setMix", params);
329
+ }
330
+ /**
331
+ * Add application to channel
332
+ */
333
+ async addToChannel(params) {
334
+ await this.call("addToChannel", params);
335
+ }
336
+ /**
337
+ * Subscribe to notifications
338
+ */
339
+ async setSubscription(params) {
340
+ return this.call("setSubscription", params);
341
+ }
342
+ // Convenience Methods
343
+ /**
344
+ * Mute or unmute a channel
345
+ */
346
+ async setChannelMute(channelId, isMuted) {
347
+ await this.setChannel({ id: channelId, isMuted });
348
+ }
349
+ /**
350
+ * Set channel volume (0.0 - 1.0)
351
+ */
352
+ async setChannelVolume(channelId, level) {
353
+ await this.setChannel({ id: channelId, level });
354
+ }
355
+ /**
356
+ * Set channel volume for specific mix
357
+ */
358
+ async setChannelMixVolume(channelId, mixId, level) {
359
+ await this.setChannel({
360
+ id: channelId,
361
+ mixes: [{ id: mixId, level }],
362
+ });
363
+ }
364
+ /**
365
+ * Mute or unmute a channel in specific mix
366
+ */
367
+ async setChannelMixMute(channelId, mixId, isMuted) {
368
+ await this.setChannel({
369
+ id: channelId,
370
+ mixes: [{ id: mixId, isMuted }],
371
+ });
372
+ }
373
+ /**
374
+ * Toggle channel mute
375
+ */
376
+ async toggleChannelMute(channelId) {
377
+ const { channels } = await this.getChannels();
378
+ const channel = channels.find((c) => c.id === channelId);
379
+ if (channel) {
380
+ await this.setChannelMute(channelId, !channel.isMuted);
381
+ }
382
+ }
383
+ /**
384
+ * Set mix master volume (0.0 - 1.0)
385
+ */
386
+ async setMixVolume(mixId, level) {
387
+ await this.setMix({ id: mixId, level });
388
+ }
389
+ /**
390
+ * Mute or unmute a mix
391
+ */
392
+ async setMixMute(mixId, isMuted) {
393
+ await this.setMix({ id: mixId, isMuted });
394
+ }
395
+ /**
396
+ * Toggle mix mute
397
+ */
398
+ async toggleMixMute(mixId) {
399
+ const { mixes } = await this.getMixes();
400
+ const mix = mixes.find((m) => m.id === mixId);
401
+ if (mix) {
402
+ await this.setMixMute(mixId, !mix.isMuted);
403
+ }
404
+ }
405
+ /**
406
+ * Set input device gain (0.0 - 1.0)
407
+ */
408
+ async setInputGain(deviceId, inputId, value) {
409
+ await this.setInputDevice({
410
+ id: deviceId,
411
+ inputs: [{ id: inputId, gain: { value, maxRange: 0 } }],
412
+ });
413
+ }
414
+ /**
415
+ * Mute or unmute input device
416
+ */
417
+ async setInputMute(deviceId, inputId, isMuted) {
418
+ await this.setInputDevice({
419
+ id: deviceId,
420
+ inputs: [{ id: inputId, isMuted }],
421
+ });
422
+ }
423
+ /**
424
+ * Set output device volume (0.0 - 1.0)
425
+ */
426
+ async setOutputVolume(deviceId, outputId, level) {
427
+ await this.setOutputDevice({
428
+ outputDevice: {
429
+ id: deviceId,
430
+ outputs: [{ id: outputId, level }],
431
+ },
432
+ });
433
+ }
434
+ /**
435
+ * Switch output to different mix
436
+ */
437
+ async switchOutputMix(deviceId, outputId, mixId) {
438
+ await this.setOutputDevice({
439
+ outputDevice: {
440
+ id: deviceId,
441
+ outputs: [{ id: outputId, mixId }],
442
+ },
443
+ });
444
+ }
445
+ /**
446
+ * Subscribe to focused app changes
447
+ */
448
+ async subscribeFocusedApp(enabled = true) {
449
+ await this.setSubscription({
450
+ focusedAppChanged: { isEnabled: enabled },
451
+ });
452
+ }
453
+ /**
454
+ * Subscribe to level meter changes
455
+ */
456
+ async subscribeLevelMeter(type, id, enabled = true) {
457
+ await this.setSubscription({
458
+ levelMeterChanged: { type, id, isEnabled: enabled },
459
+ });
460
+ }
461
+ }
462
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Wave Link API - TypeScript client for Elgato Wave Link 3.0
3
+ */
4
+ export { WaveLinkClient } from "./client.js";
5
+ export type * from "./types.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Wave Link API - TypeScript client for Elgato Wave Link 3.0
3
+ */
4
+ export { WaveLinkClient } from "./client.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Elgato Wave Link 3.0 API Types
3
+ */
4
+ export interface JsonRpcRequest {
5
+ id: number;
6
+ jsonrpc: "2.0";
7
+ method: string;
8
+ params: unknown;
9
+ }
10
+ export interface JsonRpcResponse<T = unknown> {
11
+ jsonrpc: "2.0";
12
+ id: number;
13
+ result?: T;
14
+ error?: JsonRpcError;
15
+ }
16
+ export interface JsonRpcNotification {
17
+ jsonrpc: "2.0";
18
+ method: string;
19
+ params: unknown;
20
+ }
21
+ export interface JsonRpcError {
22
+ code: number;
23
+ message: string;
24
+ data?: unknown;
25
+ }
26
+ export interface ApplicationInfo {
27
+ appID: string;
28
+ name: string;
29
+ interfaceRevision: number;
30
+ }
31
+ export interface InputDevice {
32
+ id: string;
33
+ isWaveDevice: boolean;
34
+ inputs: Input[];
35
+ }
36
+ export interface Input {
37
+ id: string;
38
+ isMuted: boolean;
39
+ gain: {
40
+ value: number;
41
+ maxRange: number;
42
+ };
43
+ micPcMix: {
44
+ value: number;
45
+ };
46
+ effects?: Effect[];
47
+ dspEffects?: Effect[];
48
+ }
49
+ export interface Effect {
50
+ id: string;
51
+ isEnabled: boolean;
52
+ }
53
+ export interface InputDevicesResult {
54
+ inputDevices: InputDevice[];
55
+ }
56
+ export interface OutputDevice {
57
+ id: string;
58
+ outputs: Output[];
59
+ }
60
+ export interface Output {
61
+ id: string;
62
+ level: number;
63
+ isMuted: boolean;
64
+ mixId: string;
65
+ }
66
+ export interface OutputDevicesResult {
67
+ mainOutput: string;
68
+ outputDevices: OutputDevice[];
69
+ }
70
+ export interface Channel {
71
+ id: string;
72
+ type: "Software" | "Hardware";
73
+ isMuted: boolean;
74
+ level: number;
75
+ image: {
76
+ name: string;
77
+ imgData?: string;
78
+ };
79
+ apps: App[];
80
+ effects?: Effect[];
81
+ mixes: ChannelMix[];
82
+ }
83
+ export interface App {
84
+ id: string;
85
+ name: string;
86
+ }
87
+ export interface ChannelMix {
88
+ id: string;
89
+ level: number;
90
+ isMuted: boolean;
91
+ }
92
+ export interface ChannelsResult {
93
+ channels: Channel[];
94
+ }
95
+ export interface Mix {
96
+ id: string;
97
+ name: string;
98
+ level: number;
99
+ isMuted: boolean;
100
+ image: {
101
+ name: string;
102
+ };
103
+ }
104
+ export interface MixesResult {
105
+ mixes: Mix[];
106
+ }
107
+ export interface SetInputDeviceParams {
108
+ id: string;
109
+ inputs: Partial<Input>[];
110
+ }
111
+ export interface SetOutputDeviceParams {
112
+ outputDevice: {
113
+ id: string;
114
+ outputs: Partial<Output>[];
115
+ };
116
+ }
117
+ export interface SetChannelParams {
118
+ id: string;
119
+ isMuted?: boolean;
120
+ level?: number;
121
+ mixes?: Partial<ChannelMix>[];
122
+ effects?: Effect[];
123
+ }
124
+ export interface SetMixParams {
125
+ id: string;
126
+ level?: number;
127
+ isMuted?: boolean;
128
+ mixId?: string;
129
+ }
130
+ export interface AddToChannelParams {
131
+ appId: string;
132
+ channelId: string;
133
+ }
134
+ export interface SetSubscriptionParams {
135
+ focusedAppChanged?: {
136
+ isEnabled: boolean;
137
+ };
138
+ levelMeterChanged?: {
139
+ type: "input" | "output" | "channel" | "mix";
140
+ id: string;
141
+ subId?: string;
142
+ isEnabled: boolean;
143
+ };
144
+ }
145
+ export type NotificationCallback = (method: string, params: unknown) => void;
146
+ export interface FocusedAppChangedParams {
147
+ appId: string;
148
+ appName: string;
149
+ channel: {
150
+ id: string;
151
+ };
152
+ }
153
+ export interface LevelMeterChangedParams {
154
+ inputs: unknown[];
155
+ outputs: unknown[];
156
+ channels: unknown[];
157
+ mixes: unknown[];
158
+ }
159
+ export interface WaveLinkClientOptions {
160
+ host?: string;
161
+ autoReconnect?: boolean;
162
+ reconnectDelay?: number;
163
+ maxReconnectAttempts?: number;
164
+ origin?: string;
165
+ }
166
+ export type WaveLinkEventMap = {
167
+ connected: [];
168
+ disconnected: [];
169
+ error: [Error];
170
+ inputDevicesChanged: [InputDevicesResult];
171
+ inputDeviceChanged: [Partial<InputDevice>];
172
+ outputDevicesChanged: [{
173
+ mainOutput: string;
174
+ outputDevices: OutputDevice[];
175
+ }];
176
+ outputDeviceChanged: [Partial<OutputDevice>];
177
+ channelsChanged: [ChannelsResult];
178
+ channelChanged: [Partial<Channel>];
179
+ mixesChanged: [MixesResult];
180
+ mixChanged: [Partial<Mix>];
181
+ levelMeterChanged: [LevelMeterChangedParams];
182
+ focusedAppChanged: [FocusedAppChangedParams];
183
+ notification: [string, unknown];
184
+ };
185
+ export type EventName = keyof WaveLinkEventMap;
186
+ export type EventCallback<E extends EventName> = (...args: WaveLinkEventMap[E]) => void;
187
+ //# sourceMappingURL=types.d.ts.map