@basmilius/apple-devices 0.9.12 → 0.9.14
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/index.d.mts +20 -19
- package/dist/index.mjs +47 -4
- package/package.json +5 -5
package/dist/index.d.mts
CHANGED
|
@@ -91,7 +91,7 @@ declare const STATE_SUBSCRIBE_SYMBOL: unique symbol;
|
|
|
91
91
|
declare const STATE_UNSUBSCRIBE_SYMBOL: unique symbol;
|
|
92
92
|
//#endregion
|
|
93
93
|
//#region src/airplay/remote.d.ts
|
|
94
|
-
declare class export_default$
|
|
94
|
+
declare class export_default$1 {
|
|
95
95
|
#private;
|
|
96
96
|
constructor(device: export_default);
|
|
97
97
|
up(): Promise<void>;
|
|
@@ -140,6 +140,7 @@ type EventMap$4 = {
|
|
|
140
140
|
readonly clients: [Record<string, Client>];
|
|
141
141
|
readonly deviceInfo: [Proto.DeviceInfoMessage];
|
|
142
142
|
readonly deviceInfoUpdate: [Proto.DeviceInfoMessage];
|
|
143
|
+
readonly nowPlayingChanged: [client: Client | null, player: Player | null];
|
|
143
144
|
readonly originClientProperties: [Proto.OriginClientPropertiesMessage];
|
|
144
145
|
readonly playerClientProperties: [Proto.PlayerClientPropertiesMessage];
|
|
145
146
|
readonly removeClient: [Proto.RemoveClientMessage];
|
|
@@ -159,7 +160,7 @@ type EventMap$4 = {
|
|
|
159
160
|
readonly volumeControlCapabilitiesDidChange: [boolean, Proto.VolumeCapabilities_Enum];
|
|
160
161
|
readonly volumeDidChange: [number];
|
|
161
162
|
};
|
|
162
|
-
declare class export_default$
|
|
163
|
+
declare class export_default$2 extends EventEmitter<EventMap$4> {
|
|
163
164
|
#private;
|
|
164
165
|
get clients(): Record<string, Client>;
|
|
165
166
|
get nowPlayingClient(): Client | null;
|
|
@@ -195,7 +196,7 @@ declare class export_default$7 extends EventEmitter<EventMap$4> {
|
|
|
195
196
|
}
|
|
196
197
|
//#endregion
|
|
197
198
|
//#region src/airplay/volume.d.ts
|
|
198
|
-
declare class export_default$
|
|
199
|
+
declare class export_default$3 {
|
|
199
200
|
#private;
|
|
200
201
|
constructor(device: export_default);
|
|
201
202
|
down(): Promise<void>;
|
|
@@ -215,9 +216,9 @@ declare class export_default extends EventEmitter<EventMap$3> {
|
|
|
215
216
|
get discoveryResult(): DiscoveryResult;
|
|
216
217
|
set discoveryResult(discoveryResult: DiscoveryResult);
|
|
217
218
|
get isConnected(): boolean;
|
|
218
|
-
get remote(): export_default$
|
|
219
|
-
get state(): export_default$
|
|
220
|
-
get volume(): export_default$
|
|
219
|
+
get remote(): export_default$1;
|
|
220
|
+
get state(): export_default$2;
|
|
221
|
+
get volume(): export_default$3;
|
|
221
222
|
get timingServer(): TimingServer | undefined;
|
|
222
223
|
set timingServer(timingServer: TimingServer | undefined);
|
|
223
224
|
constructor(discoveryResult: DiscoveryResult);
|
|
@@ -242,7 +243,7 @@ type EventMap$2 = {
|
|
|
242
243
|
disconnected: [unexpected: boolean];
|
|
243
244
|
power: [AttentionState];
|
|
244
245
|
};
|
|
245
|
-
declare class export_default$
|
|
246
|
+
declare class export_default$5 extends EventEmitter<EventMap$2> {
|
|
246
247
|
#private;
|
|
247
248
|
get [PROTOCOL$1](): Protocol$1;
|
|
248
249
|
get discoveryResult(): DiscoveryResult;
|
|
@@ -275,13 +276,13 @@ type EventMap$1 = {
|
|
|
275
276
|
disconnected: [unexpected: boolean];
|
|
276
277
|
power: [AttentionState];
|
|
277
278
|
};
|
|
278
|
-
declare class export_default$
|
|
279
|
+
declare class export_default$4 extends EventEmitter<EventMap$1> {
|
|
279
280
|
#private;
|
|
280
281
|
get airplay(): export_default;
|
|
281
|
-
get companionLink(): export_default$
|
|
282
|
-
get remote(): export_default$
|
|
283
|
-
get state(): export_default$
|
|
284
|
-
get volumeControl(): export_default$
|
|
282
|
+
get companionLink(): export_default$5;
|
|
283
|
+
get remote(): export_default$1;
|
|
284
|
+
get state(): export_default$2;
|
|
285
|
+
get volumeControl(): export_default$3;
|
|
285
286
|
get bundleIdentifier(): string | null;
|
|
286
287
|
get displayName(): string | null;
|
|
287
288
|
get isConnected(): boolean;
|
|
@@ -323,12 +324,12 @@ type EventMap = {
|
|
|
323
324
|
connected: [];
|
|
324
325
|
disconnected: [unexpected: boolean];
|
|
325
326
|
};
|
|
326
|
-
declare abstract class export_default$
|
|
327
|
+
declare abstract class export_default$8 extends EventEmitter<EventMap> {
|
|
327
328
|
#private;
|
|
328
329
|
get airplay(): export_default;
|
|
329
|
-
get remote(): export_default$
|
|
330
|
-
get state(): export_default$
|
|
331
|
-
get volumeControl(): export_default$
|
|
330
|
+
get remote(): export_default$1;
|
|
331
|
+
get state(): export_default$2;
|
|
332
|
+
get volumeControl(): export_default$3;
|
|
332
333
|
get bundleIdentifier(): string | null;
|
|
333
334
|
get displayName(): string | null;
|
|
334
335
|
get isConnected(): boolean;
|
|
@@ -357,9 +358,9 @@ declare abstract class export_default$5 extends EventEmitter<EventMap> {
|
|
|
357
358
|
}
|
|
358
359
|
//#endregion
|
|
359
360
|
//#region src/model/homepod.d.ts
|
|
360
|
-
declare class export_default$
|
|
361
|
+
declare class export_default$6 extends export_default$8 {}
|
|
361
362
|
//#endregion
|
|
362
363
|
//#region src/model/homepod-mini.d.ts
|
|
363
|
-
declare class export_default$
|
|
364
|
+
declare class export_default$7 extends export_default$8 {}
|
|
364
365
|
//#endregion
|
|
365
|
-
export { PROTOCOL as AIRPLAY, export_default as AirPlayDevice, export_default$1 as AppleTV, PROTOCOL$1 as COMPANION_LINK, export_default$
|
|
366
|
+
export { PROTOCOL as AIRPLAY, Client as AirPlayClient, export_default as AirPlayDevice, Player as AirPlayPlayer, export_default$1 as AirPlayRemote, export_default$2 as AirPlayState, export_default$3 as AirPlayVolume, export_default$4 as AppleTV, PROTOCOL$1 as COMPANION_LINK, export_default$5 as CompanionLinkDevice, export_default$6 as HomePod, export_default$7 as HomePodMini };
|
package/dist/index.mjs
CHANGED
|
@@ -482,6 +482,7 @@ var state_default = class extends EventEmitter {
|
|
|
482
482
|
#device;
|
|
483
483
|
#clients;
|
|
484
484
|
#nowPlayingClientBundleIdentifier;
|
|
485
|
+
#nowPlayingSnapshot;
|
|
485
486
|
#outputDeviceUID;
|
|
486
487
|
#outputDevices = [];
|
|
487
488
|
#volume;
|
|
@@ -561,6 +562,7 @@ var state_default = class extends EventEmitter {
|
|
|
561
562
|
clear() {
|
|
562
563
|
this.#clients = {};
|
|
563
564
|
this.#nowPlayingClientBundleIdentifier = null;
|
|
565
|
+
this.#nowPlayingSnapshot = null;
|
|
564
566
|
this.#outputDeviceUID = null;
|
|
565
567
|
this.#outputDevices = [];
|
|
566
568
|
this.#volume = 0;
|
|
@@ -587,10 +589,12 @@ var state_default = class extends EventEmitter {
|
|
|
587
589
|
}
|
|
588
590
|
onRemoveClient(message) {
|
|
589
591
|
if (!(message.client.bundleIdentifier in this.#clients)) return;
|
|
592
|
+
const wasActive = this.#nowPlayingClientBundleIdentifier === message.client.bundleIdentifier;
|
|
590
593
|
delete this.#clients[message.client.bundleIdentifier];
|
|
591
|
-
if (
|
|
594
|
+
if (wasActive) this.#nowPlayingClientBundleIdentifier = null;
|
|
592
595
|
this.emit("removeClient", message);
|
|
593
596
|
this.emit("clients", this.#clients);
|
|
597
|
+
if (wasActive) this.#emitNowPlayingChangedIfNeeded();
|
|
594
598
|
}
|
|
595
599
|
onSendCommandResult(message) {
|
|
596
600
|
this.emit("sendCommandResult", message);
|
|
@@ -605,6 +609,7 @@ var state_default = class extends EventEmitter {
|
|
|
605
609
|
onSetNowPlayingClient(message) {
|
|
606
610
|
this.#nowPlayingClientBundleIdentifier = message.client?.bundleIdentifier ?? null;
|
|
607
611
|
this.emit("setNowPlayingClient", message);
|
|
612
|
+
this.#emitNowPlayingChangedIfNeeded();
|
|
608
613
|
}
|
|
609
614
|
onSetNowPlayingPlayer(message) {
|
|
610
615
|
if (message.playerPath?.client?.bundleIdentifier && message.playerPath?.player?.identifier) {
|
|
@@ -613,9 +618,11 @@ var state_default = class extends EventEmitter {
|
|
|
613
618
|
client.setActivePlayer(message.playerPath.player.identifier);
|
|
614
619
|
}
|
|
615
620
|
this.emit("setNowPlayingPlayer", message);
|
|
621
|
+
this.#emitNowPlayingChangedIfNeeded();
|
|
616
622
|
}
|
|
617
623
|
onSetState(message) {
|
|
618
|
-
const
|
|
624
|
+
const bundleIdentifier = message.playerPath.client.bundleIdentifier;
|
|
625
|
+
const client = this.#client(bundleIdentifier, message.displayName);
|
|
619
626
|
const playerIdentifier = message.playerPath?.player?.identifier || "MediaRemote-DefaultPlayer";
|
|
620
627
|
const player = client.getOrCreatePlayer(playerIdentifier, message.playerPath?.player?.displayName);
|
|
621
628
|
if (message.nowPlayingInfo) player.setNowPlayingInfo(message.nowPlayingInfo);
|
|
@@ -623,13 +630,16 @@ var state_default = class extends EventEmitter {
|
|
|
623
630
|
if (message.supportedCommands) player.setSupportedCommands(message.supportedCommands.supportedCommands);
|
|
624
631
|
if (message.playbackQueue) player.setPlaybackQueue(message.playbackQueue);
|
|
625
632
|
this.emit("setState", message);
|
|
633
|
+
if (bundleIdentifier === this.#nowPlayingClientBundleIdentifier) this.#emitNowPlayingChangedIfNeeded();
|
|
626
634
|
}
|
|
627
635
|
onUpdateContentItem(message) {
|
|
628
|
-
const
|
|
636
|
+
const bundleIdentifier = message.playerPath.client.bundleIdentifier;
|
|
637
|
+
const client = this.#client(bundleIdentifier, message.playerPath.client.displayName);
|
|
629
638
|
const playerIdentifier = message.playerPath?.player?.identifier || "MediaRemote-DefaultPlayer";
|
|
630
639
|
const player = client.getOrCreatePlayer(playerIdentifier, message.playerPath?.player?.displayName);
|
|
631
640
|
for (const item of message.contentItems) player.updateContentItem(item);
|
|
632
641
|
this.emit("updateContentItem", message);
|
|
642
|
+
if (bundleIdentifier === this.#nowPlayingClientBundleIdentifier) this.#emitNowPlayingChangedIfNeeded();
|
|
633
643
|
}
|
|
634
644
|
onUpdateContentItemArtwork(message) {
|
|
635
645
|
this.emit("updateContentItemArtwork", message);
|
|
@@ -644,6 +654,7 @@ var state_default = class extends EventEmitter {
|
|
|
644
654
|
if (client) client.removePlayer(message.playerPath.player.identifier);
|
|
645
655
|
}
|
|
646
656
|
this.emit("removePlayer", message);
|
|
657
|
+
if (message.playerPath?.client?.bundleIdentifier === this.#nowPlayingClientBundleIdentifier) this.#emitNowPlayingChangedIfNeeded();
|
|
647
658
|
}
|
|
648
659
|
onUpdateClient(message) {
|
|
649
660
|
this.#client(message.client.bundleIdentifier, message.client.displayName);
|
|
@@ -676,6 +687,38 @@ var state_default = class extends EventEmitter {
|
|
|
676
687
|
return client;
|
|
677
688
|
}
|
|
678
689
|
}
|
|
690
|
+
#createNowPlayingSnapshot() {
|
|
691
|
+
const client = this.nowPlayingClient;
|
|
692
|
+
const player = client?.activePlayer ?? null;
|
|
693
|
+
return {
|
|
694
|
+
bundleIdentifier: client?.bundleIdentifier ?? null,
|
|
695
|
+
playerIdentifier: player?.identifier ?? null,
|
|
696
|
+
playbackState: player?.playbackState ?? Proto.PlaybackState_Enum.Unknown,
|
|
697
|
+
title: player?.title ?? "",
|
|
698
|
+
artist: player?.artist ?? "",
|
|
699
|
+
album: player?.album ?? "",
|
|
700
|
+
genre: player?.genre ?? "",
|
|
701
|
+
duration: player?.duration ?? 0,
|
|
702
|
+
shuffleMode: player?.shuffleMode ?? Proto.ShuffleMode_Enum.Unknown,
|
|
703
|
+
repeatMode: player?.repeatMode ?? Proto.RepeatMode_Enum.Unknown,
|
|
704
|
+
mediaType: player?.mediaType ?? Proto.ContentItemMetadata_MediaType.UnknownMediaType,
|
|
705
|
+
seriesName: player?.seriesName ?? "",
|
|
706
|
+
seasonNumber: player?.seasonNumber ?? 0,
|
|
707
|
+
episodeNumber: player?.episodeNumber ?? 0,
|
|
708
|
+
contentIdentifier: player?.contentIdentifier ?? ""
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
#emitNowPlayingChangedIfNeeded() {
|
|
712
|
+
const snapshot = this.#createNowPlayingSnapshot();
|
|
713
|
+
const previous = this.#nowPlayingSnapshot;
|
|
714
|
+
if (previous && this.#snapshotsEqual(previous, snapshot)) return;
|
|
715
|
+
this.#nowPlayingSnapshot = snapshot;
|
|
716
|
+
const client = this.nowPlayingClient;
|
|
717
|
+
this.emit("nowPlayingChanged", client, client?.activePlayer ?? null);
|
|
718
|
+
}
|
|
719
|
+
#snapshotsEqual(a, b) {
|
|
720
|
+
return a.bundleIdentifier === b.bundleIdentifier && a.playerIdentifier === b.playerIdentifier && a.playbackState === b.playbackState && a.title === b.title && a.artist === b.artist && a.album === b.album && a.genre === b.genre && a.duration === b.duration && a.shuffleMode === b.shuffleMode && a.repeatMode === b.repeatMode && a.mediaType === b.mediaType && a.seriesName === b.seriesName && a.seasonNumber === b.seasonNumber && a.episodeNumber === b.episodeNumber && a.contentIdentifier === b.contentIdentifier;
|
|
721
|
+
}
|
|
679
722
|
};
|
|
680
723
|
|
|
681
724
|
//#endregion
|
|
@@ -1311,4 +1354,4 @@ var homepod_default = class extends homepod_base_default {};
|
|
|
1311
1354
|
var homepod_mini_default = class extends homepod_base_default {};
|
|
1312
1355
|
|
|
1313
1356
|
//#endregion
|
|
1314
|
-
export { PROTOCOL as AIRPLAY, device_default as AirPlayDevice, apple_tv_default as AppleTV, PROTOCOL$1 as COMPANION_LINK, device_default$1 as CompanionLinkDevice, homepod_default as HomePod, homepod_mini_default as HomePodMini };
|
|
1357
|
+
export { PROTOCOL as AIRPLAY, Client as AirPlayClient, device_default as AirPlayDevice, Player as AirPlayPlayer, remote_default as AirPlayRemote, state_default as AirPlayState, volume_default as AirPlayVolume, apple_tv_default as AppleTV, PROTOCOL$1 as COMPANION_LINK, device_default$1 as CompanionLinkDevice, homepod_default as HomePod, homepod_mini_default as HomePodMini };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basmilius/apple-devices",
|
|
3
3
|
"description": "Exposes various Apple devices to connect with either AirPlay or Companion Link.",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.14",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": {
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@basmilius/apple-airplay": "0.9.
|
|
53
|
-
"@basmilius/apple-common": "0.9.
|
|
54
|
-
"@basmilius/apple-companion-link": "0.9.
|
|
55
|
-
"@basmilius/apple-encoding": "0.9.
|
|
52
|
+
"@basmilius/apple-airplay": "0.9.14",
|
|
53
|
+
"@basmilius/apple-common": "0.9.14",
|
|
54
|
+
"@basmilius/apple-companion-link": "0.9.14",
|
|
55
|
+
"@basmilius/apple-encoding": "0.9.14"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/bun": "^1.3.9",
|