@basmilius/apple-devices 0.0.25 → 0.0.26

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.
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import { Proto } from "@basmilius/apple-airplay";
3
- import { type DiscoveryResult } from "@basmilius/apple-common";
3
+ import { type AccessoryCredentials, type DiscoveryResult } from "@basmilius/apple-common";
4
4
  import State from "./state";
5
5
  type EventMap = {
6
6
  connected: [];
@@ -15,4 +15,5 @@ export default class extends EventEmitter<EventMap> {
15
15
  sendButtonEvent(usagePage: number, usage: number, buttonDown: boolean): Promise<void>;
16
16
  sendCommand(command: Proto.Command, options?: Proto.CommandOptions): Promise<void>;
17
17
  setVolume(volume: number): Promise<void>;
18
+ setCredentials(credentials: AccessoryCredentials): Promise<void>;
18
19
  }
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{EventEmitter as d}from"node:events";import{Proto as n}from"@basmilius/apple-airplay";import{EventEmitter as x}from"node:events";import{AirPlay as f}from"@basmilius/apple-airplay";import{debug as k,waitFor as s}from"@basmilius/apple-common";var a=2000,i=Symbol("com.basmilius.airplay:protocol"),u=Symbol("com.basmilius.airplay-state:subscribe"),P=Symbol("com.basmilius.airplay-state:unsubscribe");import{EventEmitter as c}from"node:events";import{Proto as b}from"@basmilius/apple-airplay";class p{get bundleIdentifier(){return this.#o}get displayName(){return this.#P}get playbackQueue(){return this.#n}get playbackState(){return this.#u}get playbackStateTimestamp(){return this.#r}get supportedCommands(){return this.#i}#o;#P;#n=null;#u;#r;#i=[];constructor(o,t){this.#o=o,this.#P=t,this.#u=b.PlaybackState_Enum.Unknown,this.#i=[]}isCommandSupported(o){return this.#i.some((t)=>t.command===o)}setPlaybackQueue(o){this.#n=o}setPlaybackState(o,t){this.#u=o,this.#r=t}setSupportedCommands(o){this.#i=o}}class l extends c{get#o(){return this.#P.dataStream}get#P(){return this.#u[i]}get clients(){return this.#n}get nowPlayingClient(){return this.#r?this.#n[this.#r]??null:null}get nowPlayingClientBundleIdentifier(){return this.#r}get volume(){return this.#i}get volumeAvailable(){return this.#t}get volumeCapabilities(){return this.#p}#n={};#u;#r;#i;#t;#p;constructor(o){super();this.#u=o,this.#r=null,this.#i=0,this.onSetNowPlayingClient=this.onSetNowPlayingClient.bind(this),this.onSetState=this.onSetState.bind(this),this.onUpdateClient=this.onUpdateClient.bind(this),this.onVolumeControlAvailability=this.onVolumeControlAvailability.bind(this),this.onVolumeControlCapabilitiesDidChange=this.onVolumeControlCapabilitiesDidChange.bind(this),this.onVolumeDidChange=this.onVolumeDidChange.bind(this)}async[u](){this.#o.on("setNowPlayingClient",this.onSetNowPlayingClient),this.#o.on("setState",this.onSetState),this.#o.on("updateClient",this.onUpdateClient),this.#o.on("volumeControlAvailability",this.onVolumeControlAvailability),this.#o.on("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#o.on("volumeDidChange",this.onVolumeDidChange)}async[P](){this.#o.off("setNowPlayingClient",this.onSetNowPlayingClient),this.#o.off("setState",this.onSetState),this.#o.off("updateClient",this.onUpdateClient),this.#o.off("volumeControlAvailability",this.onVolumeControlAvailability),this.#o.off("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#o.off("volumeDidChange",this.onVolumeDidChange)}async onSetNowPlayingClient(o){this.#r=o.client.bundleIdentifier??null,this.emit("nowPlayingClient",this.#r)}async onSetState(o){let t=this.#y(o.playerPath.client.bundleIdentifier,o.displayName);if(o.playbackState)t.setPlaybackState(o.playbackState,o.playbackStateTimestamp);if(o.supportedCommands)t.setSupportedCommands(o.supportedCommands.supportedCommands);if(o.playbackQueue)t.setPlaybackQueue(o.playbackQueue);this.emit("setState",o)}async onUpdateClient(o){this.#y(o.client.bundleIdentifier,o.client.displayName),this.emit("clients",this.#n)}async onVolumeControlAvailability(o){this.#t=o.volumeControlAvailable,this.#p=o.volumeCapabilities,this.emit("volumeControlAvailability",o.volumeControlAvailable,o.volumeCapabilities)}async onVolumeControlCapabilitiesDidChange(o){this.#t=o.capabilities.volumeControlAvailable,this.#p=o.capabilities.volumeCapabilities,this.emit("volumeControlCapabilitiesDidChange",o.capabilities.volumeControlAvailable,o.capabilities.volumeCapabilities)}async onVolumeDidChange(o){this.#i=o.volume,this.emit("volumeDidChange",o.volume)}#y(o,t){if(o in this.#n)return this.#n[o];else{let r=new p(o,t);return this.#n[o]=r,this.emit("clients",this.#n),r}}}class m extends x{get[i](){return this.#t}get#o(){return this.#t.dataStream}get state(){return this.#n}#P;#n;#u=!1;#r;#i;#t;constructor(o){super();this.#P=o,this.#n=new l(this)}async connect(){this.#u=!1,this.#t=new f(this.#P),await this.#t.connect(),await this.#t.pairing.start(),this.#i=await this.#t.pairing.transient(),this.#t.rtsp.on("close",async()=>this.#y()),await this.#a(),this.emit("connected")}async disconnect(){this.#u=!0,clearInterval(this.#r),await this.#m(),await this.#t.disconnect(),this.emit("disconnected")}async sendButtonEvent(o,t,r){await this.#o.exchange(this.#o.messages.sendButtonEvent(o,t,r))}async sendCommand(o,t){await this.#o.exchange(this.#o.messages.sendCommand(o,t))}async setVolume(o){await this.#o.exchange(this.#o.messages.setVolume(o))}async#p(){try{await this.#t.feedback()}catch(o){k("Feedback error",o)}}async#y(){if(this.#u)return;clearInterval(this.#r),await this.#m(),await s(1e4),await this.connect()}async#a(){let o=this.#i;await this.#t.rtsp.enableEncryption(o.accessoryToControllerKey,o.controllerToAccessoryKey),await this.#t.setupEventStream(o.pairingId,o.sharedSecret),await this.#t.setupDataStream(o.sharedSecret),this.#r=setInterval(async()=>await this.#p(),a),await this.#o.exchange(this.#o.messages.deviceInfo(o.pairingId)),this.#o.on("deviceInfo",async()=>{await this.#l(),await this.#o.exchange(this.#o.messages.setConnectionState()),await this.#o.exchange(this.#o.messages.clientUpdatesConfig())})}async#l(){await this.#n[u]()}async#m(){await this.#n[P]()}}class y extends d{get airplay(){return this.#o}get bundleIdentifier(){return this.#o.state.nowPlayingClient?.bundleIdentifier??null}get displayName(){return this.#o.state.nowPlayingClient?.displayName??null}get playbackQueue(){return this.#o.state.nowPlayingClient?.playbackQueue??null}get playbackState(){return this.#o.state.nowPlayingClient?.playbackState??n.PlaybackState_Enum.Unknown}get playbackStateTimestamp(){return this.#o.state.nowPlayingClient?.playbackStateTimestamp??-1}get volume(){return this.#o.state.volume??0}#o;constructor(o){super();this.#o=new m(o)}async connect(){await this.#o.connect()}async pause(){await this.#o.sendCommand(n.Command.Pause)}async playPause(){await this.#o.sendCommand(n.Command.TogglePlayPause)}async play(){await this.#o.sendCommand(n.Command.Play)}async stop(){await this.#o.sendCommand(n.Command.Stop)}async next(){await this.#o.sendCommand(n.Command.NextInContext)}async previous(){await this.#o.sendCommand(n.Command.PreviousInContext)}async setVolume(o){await this.#o.setVolume(o)}async getCommandInfo(o){let t=this.#o.state.nowPlayingClient;if(!t)return null;return t.supportedCommands.find((r)=>r.command===o)??null}async isCommandSupported(o){let t=this.#o.state.nowPlayingClient;if(!t)return!1;return t.isCommandSupported(o)}}class h extends y{}class C extends y{}export{C as HomePodMini,h as HomePod};
1
+ import{EventEmitter as Q}from"node:events";import{Proto as r}from"@basmilius/apple-airplay";import{EventEmitter as c}from"node:events";import{AirPlay as f,Proto as k}from"@basmilius/apple-airplay";import{debug as w,waitFor as _}from"@basmilius/apple-common";var l=2000,i=Symbol("com.basmilius.airplay:protocol"),u=Symbol("com.basmilius.airplay-state:subscribe"),P=Symbol("com.basmilius.airplay-state:unsubscribe");import{EventEmitter as x}from"node:events";import{Proto as a}from"@basmilius/apple-airplay";class p{get bundleIdentifier(){return this.#o}get displayName(){return this.#P}get playbackQueue(){return this.#n}get playbackState(){return this.#u}get playbackStateTimestamp(){return this.#r}get supportedCommands(){return this.#i}#o;#P;#n=null;#u;#r;#i=[];constructor(o,t){this.#o=o,this.#P=t,this.#u=a.PlaybackState_Enum.Unknown,this.#i=[]}isCommandSupported(o){return this.#i.some((t)=>t.command===o)}setPlaybackQueue(o){this.#n=o}setPlaybackState(o,t){this.#u=o,this.#r=t}setSupportedCommands(o){this.#i=o}}class h extends x{get#o(){return this.#P.dataStream}get#P(){return this.#u[i]}get clients(){return this.#n}get nowPlayingClient(){return this.#r?this.#n[this.#r]??null:null}get nowPlayingClientBundleIdentifier(){return this.#r}get volume(){return this.#i}get volumeAvailable(){return this.#p}get volumeCapabilities(){return this.#t}#n={};#u;#r;#i;#p;#t;constructor(o){super();this.#u=o,this.#r=null,this.#i=0,this.onSetNowPlayingClient=this.onSetNowPlayingClient.bind(this),this.onSetState=this.onSetState.bind(this),this.onUpdateClient=this.onUpdateClient.bind(this),this.onVolumeControlAvailability=this.onVolumeControlAvailability.bind(this),this.onVolumeControlCapabilitiesDidChange=this.onVolumeControlCapabilitiesDidChange.bind(this),this.onVolumeDidChange=this.onVolumeDidChange.bind(this)}async[u](){this.#o.on("setNowPlayingClient",this.onSetNowPlayingClient),this.#o.on("setState",this.onSetState),this.#o.on("updateClient",this.onUpdateClient),this.#o.on("volumeControlAvailability",this.onVolumeControlAvailability),this.#o.on("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#o.on("volumeDidChange",this.onVolumeDidChange)}async[P](){this.#o.off("setNowPlayingClient",this.onSetNowPlayingClient),this.#o.off("setState",this.onSetState),this.#o.off("updateClient",this.onUpdateClient),this.#o.off("volumeControlAvailability",this.onVolumeControlAvailability),this.#o.off("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#o.off("volumeDidChange",this.onVolumeDidChange)}async onSetNowPlayingClient(o){this.#r=o.client.bundleIdentifier??null,this.emit("nowPlayingClient",this.#r)}async onSetState(o){let t=this.#y(o.playerPath.client.bundleIdentifier,o.displayName);if(o.playbackState)t.setPlaybackState(o.playbackState,o.playbackStateTimestamp);if(o.supportedCommands)t.setSupportedCommands(o.supportedCommands.supportedCommands);if(o.playbackQueue)t.setPlaybackQueue(o.playbackQueue);this.emit("setState",o)}async onUpdateClient(o){this.#y(o.client.bundleIdentifier,o.client.displayName),this.emit("clients",this.#n)}async onVolumeControlAvailability(o){this.#p=o.volumeControlAvailable,this.#t=o.volumeCapabilities,this.emit("volumeControlAvailability",o.volumeControlAvailable,o.volumeCapabilities)}async onVolumeControlCapabilitiesDidChange(o){this.#p=o.capabilities.volumeControlAvailable,this.#t=o.capabilities.volumeCapabilities,this.emit("volumeControlCapabilitiesDidChange",o.capabilities.volumeControlAvailable,o.capabilities.volumeCapabilities)}async onVolumeDidChange(o){this.#i=o.volume,this.emit("volumeDidChange",o.volume)}#y(o,t){if(o in this.#n)return this.#n[o];else{let n=new p(o,t);return this.#n[o]=n,this.emit("clients",this.#n),n}}}class m extends c{get[i](){return this.#t}get#o(){return this.#t.dataStream}get state(){return this.#n}#P;#n;#u;#r=!1;#i;#p;#t;constructor(o){super();this.#P=o,this.#n=new h(this)}async connect(){if(this.#r=!1,this.#t=new f(this.#P),await this.#t.connect(),this.#u)this.#p=await this.#t.verify.start(this.#u);else await this.#t.pairing.start(),this.#p=await this.#t.pairing.transient();this.#t.rtsp.on("close",async()=>this.#l()),await this.#h(),this.emit("connected")}async disconnect(){this.#r=!0,clearInterval(this.#i),await this.#m(),await this.#t.disconnect(),this.emit("disconnected")}async sendButtonEvent(o,t,n){await this.#o.exchange(this.#o.messages.sendButtonEvent(o,t,n))}async sendCommand(o,t){await this.#o.exchange(this.#o.messages.sendCommand(o,t))}async setVolume(o){await this.#o.exchange(this.#o.messages.setVolume(o))}async setCredentials(o){this.#u=o}async#y(){try{await this.#t.feedback(),await this.#o.exchange(this.#o.messages.protocol(k.ProtocolMessage_Type.UNKNOWN_MESSAGE))}catch(o){w("Feedback error",o)}}async#l(){if(this.#r)return;clearInterval(this.#i),await this.#m(),await _(1000),await this.connect()}async#h(){let o=this.#p;await this.#t.rtsp.enableEncryption(o.accessoryToControllerKey,o.controllerToAccessoryKey),await this.#t.setupEventStream(o.pairingId,o.sharedSecret),await this.#t.setupDataStream(o.sharedSecret),this.#i=setInterval(async()=>await this.#y(),l);let t=this.#P.packet.additionals.find((n)=>("rdata"in n)&&("gid"in n.rdata))?.rdata.gid;if(t)await this.#o.exchange(this.#o.messages.configureConnection(t));await this.#o.exchange(this.#o.messages.deviceInfo(o.pairingId)),this.#o.on("deviceInfo",async()=>{await this.#C(),await this.#o.exchange(this.#o.messages.setConnectionState()),await this.#o.exchange(this.#o.messages.clientUpdatesConfig())})}async#C(){await this.#n[u]()}async#m(){await this.#n[P]()}}class y extends Q{get airplay(){return this.#o}get bundleIdentifier(){return this.#o.state.nowPlayingClient?.bundleIdentifier??null}get displayName(){return this.#o.state.nowPlayingClient?.displayName??null}get playbackQueue(){return this.#o.state.nowPlayingClient?.playbackQueue??null}get playbackState(){return this.#o.state.nowPlayingClient?.playbackState??r.PlaybackState_Enum.Unknown}get playbackStateTimestamp(){return this.#o.state.nowPlayingClient?.playbackStateTimestamp??-1}get volume(){return this.#o.state.volume??0}#o;constructor(o){super();this.#o=new m(o)}async connect(){await this.#o.connect()}async pause(){await this.#o.sendCommand(r.Command.Pause)}async playPause(){await this.#o.sendCommand(r.Command.TogglePlayPause)}async play(){await this.#o.sendCommand(r.Command.Play)}async stop(){await this.#o.sendCommand(r.Command.Stop)}async next(){await this.#o.sendCommand(r.Command.NextInContext)}async previous(){await this.#o.sendCommand(r.Command.PreviousInContext)}async setVolume(o){await this.#o.setVolume(o)}async getCommandInfo(o){let t=this.#o.state.nowPlayingClient;if(!t)return null;return t.supportedCommands.find((n)=>n.command===o)??null}async isCommandSupported(o){let t=this.#o.state.nowPlayingClient;if(!t)return!1;return t.isCommandSupported(o)}}class C extends y{}class b extends y{}export{b as HomePodMini,C as HomePod};
2
2
 
3
- //# debugId=19B0D32C90037BE064756E2164756E21
3
+ //# debugId=6761EAE92958931A64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -3,14 +3,14 @@
3
3
  "sources": ["../src/model/homepod-base.ts", "../src/airplay/device.ts", "../src/airplay/const.ts", "../src/airplay/state.ts", "../src/airplay/client.ts", "../src/model/homepod.ts", "../src/model/homepod-mini.ts"],
4
4
  "sourcesContent": [
5
5
  "import { EventEmitter } from 'node:events';\nimport { Proto } from '@basmilius/apple-airplay';\nimport type { DiscoveryResult } from '@basmilius/apple-common';\nimport { AirPlayDevice } from '@/airplay';\n\nexport default abstract class extends EventEmitter {\n get airplay(): AirPlayDevice {\n return this.#airplay;\n }\n\n get bundleIdentifier(): string | null {\n return this.#airplay.state.nowPlayingClient?.bundleIdentifier ?? null;\n }\n\n get displayName(): string | null {\n return this.#airplay.state.nowPlayingClient?.displayName ?? null;\n }\n\n get playbackQueue(): Proto.PlaybackQueue | null {\n return this.#airplay.state.nowPlayingClient?.playbackQueue ?? null;\n }\n\n get playbackState(): Proto.PlaybackState_Enum {\n return this.#airplay.state.nowPlayingClient?.playbackState ?? Proto.PlaybackState_Enum.Unknown;\n }\n\n get playbackStateTimestamp(): number {\n return this.#airplay.state.nowPlayingClient?.playbackStateTimestamp ?? -1;\n }\n\n get volume(): number {\n return this.#airplay.state.volume ?? 0;\n }\n\n readonly #airplay: AirPlayDevice;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#airplay = new AirPlayDevice(discoveryResult);\n }\n\n async connect(): Promise<void> {\n await this.#airplay.connect();\n }\n\n async pause(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Pause);\n }\n\n async playPause(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.TogglePlayPause);\n }\n\n async play(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Play);\n }\n\n async stop(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Stop);\n }\n\n async next(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.NextInContext);\n }\n\n async previous(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.PreviousInContext);\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#airplay.setVolume(volume);\n }\n\n async getCommandInfo(command: Proto.Command): Promise<Proto.CommandInfo | null> {\n const client = this.#airplay.state.nowPlayingClient;\n\n if (!client) {\n return null;\n }\n\n return client.supportedCommands.find(c => c.command === command) ?? null;\n }\n\n async isCommandSupported(command: Proto.Command): Promise<boolean> {\n const client = this.#airplay.state.nowPlayingClient;\n\n if (!client) {\n return false;\n }\n\n return client.isCommandSupported(command);\n }\n}\n",
6
- "import { EventEmitter } from 'node:events';\nimport { AirPlay, type AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { type AccessoryKeys, debug, type DiscoveryResult, waitFor } from '@basmilius/apple-common';\nimport { AIRPLAY_FEEDBACK_INTERVAL, AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport State from './state';\n\ntype EventMap = {\n connected: [];\n disconnected: [];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get [AIRPLAY_PROTOCOL](): AirPlay {\n return this.#protocol;\n }\n\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get state(): State {\n return this.#state;\n }\n\n readonly #discoveryResult: DiscoveryResult;\n readonly #state: State;\n #disconnect: boolean = false;\n #feedbackInterval: NodeJS.Timeout;\n #keys: AccessoryKeys;\n #protocol!: AirPlay;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#discoveryResult = discoveryResult;\n this.#state = new State(this);\n }\n\n async connect(): Promise<void> {\n this.#disconnect = false;\n\n this.#protocol = new AirPlay(this.#discoveryResult);\n\n await this.#protocol.connect();\n await this.#protocol.pairing.start();\n this.#keys = await this.#protocol.pairing.transient();\n\n this.#protocol.rtsp.on('close', async () => this.#onClose());\n\n await this.#setup();\n\n this.emit('connected');\n }\n\n async disconnect(): Promise<void> {\n this.#disconnect = true;\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await this.#protocol.disconnect();\n\n this.emit('disconnected');\n }\n\n async sendButtonEvent(usagePage: number, usage: number, buttonDown: boolean): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendButtonEvent(usagePage, usage, buttonDown));\n }\n\n async sendCommand(command: Proto.Command, options?: Proto.CommandOptions): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendCommand(command, options));\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.setVolume(volume));\n }\n\n async #feedback(): Promise<void> {\n try {\n await this.#protocol.feedback();\n } catch (err) {\n debug('Feedback error', err);\n }\n }\n\n async #onClose(): Promise<void> {\n if (this.#disconnect) {\n return;\n }\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await waitFor(10000);\n await this.connect();\n }\n\n async #setup(): Promise<void> {\n const keys = this.#keys;\n\n await this.#protocol.rtsp.enableEncryption(\n keys.accessoryToControllerKey,\n keys.controllerToAccessoryKey\n );\n\n await this.#protocol.setupEventStream(keys.pairingId, keys.sharedSecret);\n await this.#protocol.setupDataStream(keys.sharedSecret);\n\n this.#feedbackInterval = setInterval(async () => await this.#feedback(), AIRPLAY_FEEDBACK_INTERVAL);\n\n await this.#dataStream.exchange(this.#dataStream.messages.deviceInfo(keys.pairingId));\n\n this.#dataStream.on('deviceInfo', async () => {\n await this.#subscribe();\n await this.#dataStream.exchange(this.#dataStream.messages.setConnectionState());\n await this.#dataStream.exchange(this.#dataStream.messages.clientUpdatesConfig());\n });\n }\n\n async #subscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_SUBSCRIBE_SYMBOL]();\n }\n\n async #unsubscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL]();\n }\n}\n",
6
+ "import { EventEmitter } from 'node:events';\nimport { AirPlay, type AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { type AccessoryCredentials, type AccessoryKeys, debug, type DiscoveryResult, waitFor } from '@basmilius/apple-common';\nimport { AIRPLAY_FEEDBACK_INTERVAL, AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport State from './state';\n\ntype EventMap = {\n connected: [];\n disconnected: [];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get [AIRPLAY_PROTOCOL](): AirPlay {\n return this.#protocol;\n }\n\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get state(): State {\n return this.#state;\n }\n\n readonly #discoveryResult: DiscoveryResult;\n readonly #state: State;\n #credentials?: AccessoryCredentials;\n #disconnect: boolean = false;\n #feedbackInterval: NodeJS.Timeout;\n #keys: AccessoryKeys;\n #protocol!: AirPlay;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#discoveryResult = discoveryResult;\n this.#state = new State(this);\n }\n\n async connect(): Promise<void> {\n this.#disconnect = false;\n\n this.#protocol = new AirPlay(this.#discoveryResult);\n\n await this.#protocol.connect();\n\n if (this.#credentials) {\n this.#keys = await this.#protocol.verify.start(this.#credentials);\n } else {\n await this.#protocol.pairing.start();\n this.#keys = await this.#protocol.pairing.transient();\n }\n\n this.#protocol.rtsp.on('close', async () => this.#onClose());\n\n await this.#setup();\n\n this.emit('connected');\n }\n\n async disconnect(): Promise<void> {\n this.#disconnect = true;\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await this.#protocol.disconnect();\n\n this.emit('disconnected');\n }\n\n async sendButtonEvent(usagePage: number, usage: number, buttonDown: boolean): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendButtonEvent(usagePage, usage, buttonDown));\n }\n\n async sendCommand(command: Proto.Command, options?: Proto.CommandOptions): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendCommand(command, options));\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.setVolume(volume));\n }\n\n async setCredentials(credentials: AccessoryCredentials): Promise<void> {\n this.#credentials = credentials;\n }\n\n async #feedback(): Promise<void> {\n try {\n await this.#protocol.feedback();\n await this.#dataStream.exchange(this.#dataStream.messages.protocol(Proto.ProtocolMessage_Type.UNKNOWN_MESSAGE));\n } catch (err) {\n debug('Feedback error', err);\n }\n }\n\n async #onClose(): Promise<void> {\n if (this.#disconnect) {\n return;\n }\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await waitFor(1000);\n await this.connect();\n }\n\n async #setup(): Promise<void> {\n const keys = this.#keys;\n\n await this.#protocol.rtsp.enableEncryption(\n keys.accessoryToControllerKey,\n keys.controllerToAccessoryKey\n );\n\n await this.#protocol.setupEventStream(keys.pairingId, keys.sharedSecret);\n await this.#protocol.setupDataStream(keys.sharedSecret);\n\n this.#feedbackInterval = setInterval(async () => await this.#feedback(), AIRPLAY_FEEDBACK_INTERVAL);\n\n const gid = this.#discoveryResult.packet.additionals.find(a => 'rdata' in a && 'gid' in a['rdata'])?.['rdata']['gid'] as string;\n\n if (gid) {\n await this.#dataStream.exchange(this.#dataStream.messages.configureConnection(gid));\n }\n\n await this.#dataStream.exchange(this.#dataStream.messages.deviceInfo(keys.pairingId));\n\n this.#dataStream.on('deviceInfo', async () => {\n await this.#subscribe();\n await this.#dataStream.exchange(this.#dataStream.messages.setConnectionState());\n await this.#dataStream.exchange(this.#dataStream.messages.clientUpdatesConfig());\n });\n }\n\n async #subscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_SUBSCRIBE_SYMBOL]();\n }\n\n async #unsubscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL]();\n }\n}\n",
7
7
  "export const AIRPLAY_FEEDBACK_INTERVAL = 2000;\n\nexport const AIRPLAY_PROTOCOL = Symbol('com.basmilius.airplay:protocol');\nexport const AIRPLAY_STATE_SUBSCRIBE_SYMBOL = Symbol('com.basmilius.airplay-state:subscribe');\nexport const AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL = Symbol('com.basmilius.airplay-state:unsubscribe');\n",
8
8
  "import { EventEmitter } from 'node:events';\nimport type { AirPlay, AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport Client from './client';\nimport type Device from './device';\n\ntype EventMap = {\n readonly clients: [Record<string, Client>];\n readonly nowPlayingClient: [string | null];\n readonly setState: [Proto.SetStateMessage];\n readonly volumeControlAvailability: [boolean, Proto.VolumeCapabilities_Enum];\n readonly volumeControlCapabilitiesDidChange: [boolean, Proto.VolumeCapabilities_Enum];\n readonly volumeDidChange: [number];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get #protocol(): AirPlay {\n return this.#device[AIRPLAY_PROTOCOL];\n }\n\n get clients(): Record<string, Client> {\n return this.#clients;\n }\n\n get nowPlayingClient(): Client | null {\n return this.#nowPlayingClientBundleIdentifier ? this.#clients[this.#nowPlayingClientBundleIdentifier] ?? null : null;\n }\n\n get nowPlayingClientBundleIdentifier(): string | null {\n return this.#nowPlayingClientBundleIdentifier;\n }\n\n get volume(): number {\n return this.#volume;\n }\n\n get volumeAvailable(): boolean {\n return this.#volumeAvailable;\n }\n\n get volumeCapabilities(): Proto.VolumeCapabilities_Enum {\n return this.#volumeCapabilities;\n }\n\n readonly #clients: Record<string, Client> = {};\n readonly #device: Device;\n #nowPlayingClientBundleIdentifier: string;\n #volume: number;\n #volumeAvailable: boolean;\n #volumeCapabilities: Proto.VolumeCapabilities_Enum;\n\n constructor(device: Device) {\n super();\n\n this.#device = device;\n this.#nowPlayingClientBundleIdentifier = null;\n this.#volume = 0;\n\n this.onSetNowPlayingClient = this.onSetNowPlayingClient.bind(this);\n this.onSetState = this.onSetState.bind(this);\n this.onUpdateClient = this.onUpdateClient.bind(this);\n this.onVolumeControlAvailability = this.onVolumeControlAvailability.bind(this);\n this.onVolumeControlCapabilitiesDidChange = this.onVolumeControlCapabilitiesDidChange.bind(this);\n this.onVolumeDidChange = this.onVolumeDidChange.bind(this);\n }\n\n async [AIRPLAY_STATE_SUBSCRIBE_SYMBOL](): Promise<void> {\n this.#dataStream.on('setNowPlayingClient', this.onSetNowPlayingClient);\n this.#dataStream.on('setState', this.onSetState);\n this.#dataStream.on('updateClient', this.onUpdateClient);\n this.#dataStream.on('volumeControlAvailability', this.onVolumeControlAvailability);\n this.#dataStream.on('volumeControlCapabilitiesDidChange', this.onVolumeControlCapabilitiesDidChange);\n this.#dataStream.on('volumeDidChange', this.onVolumeDidChange);\n }\n\n async [AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL](): Promise<void> {\n this.#dataStream.off('setNowPlayingClient', this.onSetNowPlayingClient);\n this.#dataStream.off('setState', this.onSetState);\n this.#dataStream.off('updateClient', this.onUpdateClient);\n this.#dataStream.off('volumeControlAvailability', this.onVolumeControlAvailability);\n this.#dataStream.off('volumeControlCapabilitiesDidChange', this.onVolumeControlCapabilitiesDidChange);\n this.#dataStream.off('volumeDidChange', this.onVolumeDidChange);\n }\n\n async onSetNowPlayingClient(message: Proto.SetNowPlayingClientMessage): Promise<void> {\n this.#nowPlayingClientBundleIdentifier = message.client.bundleIdentifier ?? null;\n\n this.emit('nowPlayingClient', this.#nowPlayingClientBundleIdentifier);\n }\n\n async onSetState(message: Proto.SetStateMessage): Promise<void> {\n const client = this.#client(message.playerPath.client.bundleIdentifier, message.displayName);\n\n if (message.playbackState) {\n client.setPlaybackState(message.playbackState, message.playbackStateTimestamp);\n }\n\n if (message.supportedCommands) {\n client.setSupportedCommands(message.supportedCommands.supportedCommands);\n }\n\n if (message.playbackQueue) {\n client.setPlaybackQueue(message.playbackQueue);\n }\n\n this.emit('setState', message);\n }\n\n async onUpdateClient(message: Proto.UpdateClientMessage): Promise<void> {\n this.#client(message.client.bundleIdentifier, message.client.displayName);\n\n this.emit('clients', this.#clients);\n }\n\n async onVolumeControlAvailability(message: Proto.VolumeControlAvailabilityMessage): Promise<void> {\n this.#volumeAvailable = message.volumeControlAvailable;\n this.#volumeCapabilities = message.volumeCapabilities;\n\n this.emit('volumeControlAvailability', message.volumeControlAvailable, message.volumeCapabilities);\n }\n\n async onVolumeControlCapabilitiesDidChange(message: Proto.VolumeControlCapabilitiesDidChangeMessage): Promise<void> {\n this.#volumeAvailable = message.capabilities.volumeControlAvailable;\n this.#volumeCapabilities = message.capabilities.volumeCapabilities;\n\n this.emit('volumeControlCapabilitiesDidChange', message.capabilities.volumeControlAvailable, message.capabilities.volumeCapabilities);\n }\n\n async onVolumeDidChange(message: Proto.VolumeDidChangeMessage): Promise<void> {\n this.#volume = message.volume;\n\n this.emit('volumeDidChange', message.volume);\n }\n\n #client(bundleIdentifier: string, displayName: string): Client {\n if (bundleIdentifier in this.#clients) {\n return this.#clients[bundleIdentifier];\n } else {\n const client = new Client(bundleIdentifier, displayName);\n this.#clients[bundleIdentifier] = client;\n\n this.emit('clients', this.#clients);\n\n return client;\n }\n }\n}\n",
9
9
  "import { Proto } from '@basmilius/apple-airplay';\n\nexport default class Client {\n get bundleIdentifier(): string {\n return this.#bundleIdentifier;\n }\n\n get displayName(): string {\n return this.#displayName;\n }\n\n get playbackQueue(): Proto.PlaybackQueue | null {\n return this.#playbackQueue;\n }\n\n get playbackState(): Proto.PlaybackState_Enum {\n return this.#playbackState;\n }\n\n get playbackStateTimestamp(): number {\n return this.#playbackStateTimestamp;\n }\n\n get supportedCommands(): Proto.CommandInfo[] {\n return this.#supportedCommands;\n }\n\n readonly #bundleIdentifier: string;\n readonly #displayName: string;\n #playbackQueue: Proto.PlaybackQueue | null = null;\n #playbackState: Proto.PlaybackState_Enum;\n #playbackStateTimestamp: number;\n #supportedCommands: Proto.CommandInfo[] = [];\n\n constructor(bundleIdentifier: string, displayName: string) {\n this.#bundleIdentifier = bundleIdentifier;\n this.#displayName = displayName;\n this.#playbackState = Proto.PlaybackState_Enum.Unknown;\n this.#supportedCommands = [];\n }\n\n isCommandSupported(command: Proto.Command): boolean {\n return this.#supportedCommands.some(c => c.command === command);\n }\n\n setPlaybackQueue(playbackQueue: Proto.PlaybackQueue): void {\n this.#playbackQueue = playbackQueue;\n }\n\n setPlaybackState(playbackState: Proto.PlaybackState_Enum, playbackStateTimestamp: number): void {\n this.#playbackState = playbackState;\n this.#playbackStateTimestamp = playbackStateTimestamp;\n }\n\n setSupportedCommands(supportedCommands: Proto.CommandInfo[]): void {\n this.#supportedCommands = supportedCommands;\n }\n}\n",
10
10
  "import HomePodBase from './homepod-base';\n\nexport default class extends HomePodBase {}\n",
11
11
  "import HomePodBase from './homepod-base';\n\nexport default class extends HomePodBase {}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "19B0D32C90037BE064756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "6761EAE92958931A64756E2164756E21",
15
15
  "names": []
16
16
  }
package/dist/test.js CHANGED
@@ -1,4 +1,4 @@
1
- import{Proto as r}from"@basmilius/apple-airplay";import{Discovery as _,enableDebug as N}from"@basmilius/apple-common";import{EventEmitter as f}from"node:events";import{Proto as a}from"@basmilius/apple-airplay";import{EventEmitter as d}from"node:events";import{AirPlay as h}from"@basmilius/apple-airplay";import{debug as C,waitFor as w}from"@basmilius/apple-common";var e=2000,i=Symbol("com.basmilius.airplay:protocol"),l=Symbol("com.basmilius.airplay-state:subscribe"),u=Symbol("com.basmilius.airplay-state:unsubscribe");import{EventEmitter as k}from"node:events";import{Proto as b}from"@basmilius/apple-airplay";class m{get bundleIdentifier(){return this.#t}get displayName(){return this.#l}get playbackQueue(){return this.#a}get playbackState(){return this.#i}get playbackStateTimestamp(){return this.#n}get supportedCommands(){return this.#r}#t;#l;#a=null;#i;#n;#r=[];constructor(t,o){this.#t=t,this.#l=o,this.#i=b.PlaybackState_Enum.Unknown,this.#r=[]}isCommandSupported(t){return this.#r.some((o)=>o.command===t)}setPlaybackQueue(t){this.#a=t}setPlaybackState(t,o){this.#i=t,this.#n=o}setSupportedCommands(t){this.#r=t}}class s extends k{get#t(){return this.#l.dataStream}get#l(){return this.#i[i]}get clients(){return this.#a}get nowPlayingClient(){return this.#n?this.#a[this.#n]??null:null}get nowPlayingClientBundleIdentifier(){return this.#n}get volume(){return this.#r}get volumeAvailable(){return this.#o}get volumeCapabilities(){return this.#u}#a={};#i;#n;#r;#o;#u;constructor(t){super();this.#i=t,this.#n=null,this.#r=0,this.onSetNowPlayingClient=this.onSetNowPlayingClient.bind(this),this.onSetState=this.onSetState.bind(this),this.onUpdateClient=this.onUpdateClient.bind(this),this.onVolumeControlAvailability=this.onVolumeControlAvailability.bind(this),this.onVolumeControlCapabilitiesDidChange=this.onVolumeControlCapabilitiesDidChange.bind(this),this.onVolumeDidChange=this.onVolumeDidChange.bind(this)}async[l](){this.#t.on("setNowPlayingClient",this.onSetNowPlayingClient),this.#t.on("setState",this.onSetState),this.#t.on("updateClient",this.onUpdateClient),this.#t.on("volumeControlAvailability",this.onVolumeControlAvailability),this.#t.on("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#t.on("volumeDidChange",this.onVolumeDidChange)}async[u](){this.#t.off("setNowPlayingClient",this.onSetNowPlayingClient),this.#t.off("setState",this.onSetState),this.#t.off("updateClient",this.onUpdateClient),this.#t.off("volumeControlAvailability",this.onVolumeControlAvailability),this.#t.off("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#t.off("volumeDidChange",this.onVolumeDidChange)}async onSetNowPlayingClient(t){this.#n=t.client.bundleIdentifier??null,this.emit("nowPlayingClient",this.#n)}async onSetState(t){let o=this.#m(t.playerPath.client.bundleIdentifier,t.displayName);if(t.playbackState)o.setPlaybackState(t.playbackState,t.playbackStateTimestamp);if(t.supportedCommands)o.setSupportedCommands(t.supportedCommands.supportedCommands);if(t.playbackQueue)o.setPlaybackQueue(t.playbackQueue);this.emit("setState",t)}async onUpdateClient(t){this.#m(t.client.bundleIdentifier,t.client.displayName),this.emit("clients",this.#a)}async onVolumeControlAvailability(t){this.#o=t.volumeControlAvailable,this.#u=t.volumeCapabilities,this.emit("volumeControlAvailability",t.volumeControlAvailable,t.volumeCapabilities)}async onVolumeControlCapabilitiesDidChange(t){this.#o=t.capabilities.volumeControlAvailable,this.#u=t.capabilities.volumeCapabilities,this.emit("volumeControlCapabilitiesDidChange",t.capabilities.volumeControlAvailable,t.capabilities.volumeCapabilities)}async onVolumeDidChange(t){this.#r=t.volume,this.emit("volumeDidChange",t.volume)}#m(t,o){if(t in this.#a)return this.#a[t];else{let n=new m(t,o);return this.#a[t]=n,this.emit("clients",this.#a),n}}}class y extends d{get[i](){return this.#o}get#t(){return this.#o.dataStream}get state(){return this.#a}#l;#a;#i=!1;#n;#r;#o;constructor(t){super();this.#l=t,this.#a=new s(this)}async connect(){this.#i=!1,this.#o=new h(this.#l),await this.#o.connect(),await this.#o.pairing.start(),this.#r=await this.#o.pairing.transient(),this.#o.rtsp.on("close",async()=>this.#m()),await this.#y(),this.emit("connected")}async disconnect(){this.#i=!0,clearInterval(this.#n),await this.#p(),await this.#o.disconnect(),this.emit("disconnected")}async sendButtonEvent(t,o,n){await this.#t.exchange(this.#t.messages.sendButtonEvent(t,o,n))}async sendCommand(t,o){await this.#t.exchange(this.#t.messages.sendCommand(t,o))}async setVolume(t){await this.#t.exchange(this.#t.messages.setVolume(t))}async#u(){try{await this.#o.feedback()}catch(t){C("Feedback error",t)}}async#m(){if(this.#i)return;clearInterval(this.#n),await this.#p(),await w(1e4),await this.connect()}async#y(){let t=this.#r;await this.#o.rtsp.enableEncryption(t.accessoryToControllerKey,t.controllerToAccessoryKey),await this.#o.setupEventStream(t.pairingId,t.sharedSecret),await this.#o.setupDataStream(t.sharedSecret),this.#n=setInterval(async()=>await this.#u(),e),await this.#t.exchange(this.#t.messages.deviceInfo(t.pairingId)),this.#t.on("deviceInfo",async()=>{await this.#P(),await this.#t.exchange(this.#t.messages.setConnectionState()),await this.#t.exchange(this.#t.messages.clientUpdatesConfig())})}async#P(){await this.#a[l]()}async#p(){await this.#a[u]()}}class p extends f{get airplay(){return this.#t}get bundleIdentifier(){return this.#t.state.nowPlayingClient?.bundleIdentifier??null}get displayName(){return this.#t.state.nowPlayingClient?.displayName??null}get playbackQueue(){return this.#t.state.nowPlayingClient?.playbackQueue??null}get playbackState(){return this.#t.state.nowPlayingClient?.playbackState??a.PlaybackState_Enum.Unknown}get playbackStateTimestamp(){return this.#t.state.nowPlayingClient?.playbackStateTimestamp??-1}get volume(){return this.#t.state.volume??0}#t;constructor(t){super();this.#t=new y(t)}async connect(){await this.#t.connect()}async pause(){await this.#t.sendCommand(a.Command.Pause)}async playPause(){await this.#t.sendCommand(a.Command.TogglePlayPause)}async play(){await this.#t.sendCommand(a.Command.Play)}async stop(){await this.#t.sendCommand(a.Command.Stop)}async next(){await this.#t.sendCommand(a.Command.NextInContext)}async previous(){await this.#t.sendCommand(a.Command.PreviousInContext)}async setVolume(t){await this.#t.setVolume(t)}async getCommandInfo(t){let o=this.#t.state.nowPlayingClient;if(!o)return null;return o.supportedCommands.find((n)=>n.command===t)??null}async isCommandSupported(t){let o=this.#t.state.nowPlayingClient;if(!o)return!1;return o.isCommandSupported(t)}}class x extends p{}class P extends p{}N();var E=_.airplay(),S=await E.findUntil("Slaapkamer HomePod._airplay._tcp.local"),c=new P(S);await c.connect();c.airplay.state.on("setState",()=>{let t=c.airplay.state.nowPlayingClient;if(!t){console.log("No app playing.");return}let o=t.playbackQueue?.contentItems?.[0]??null;if(!o){console.log(`No item in queue of ${t.bundleIdentifier} (${t.displayName}).`);return}switch(t.playbackState){case r.PlaybackState_Enum.Unknown:console.log("Unknown client state.");break;case r.PlaybackState_Enum.Playing:console.log(`Now playing: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case r.PlaybackState_Enum.Paused:console.log(`Now paused: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case r.PlaybackState_Enum.Stopped:console.log(`Now stopped: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case r.PlaybackState_Enum.Interrupted:console.log(`Now interrupted: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case r.PlaybackState_Enum.Seeking:console.log(`Seeking: ${o.metadata.title} (${o.metadata.trackArtistName})`);break}});
1
+ import{Proto as i}from"@basmilius/apple-airplay";import{Discovery as N,enableDebug as E}from"@basmilius/apple-common";import{EventEmitter as x}from"node:events";import{Proto as a}from"@basmilius/apple-airplay";import{EventEmitter as h}from"node:events";import{AirPlay as C,Proto as d}from"@basmilius/apple-airplay";import{debug as w,waitFor as f}from"@basmilius/apple-common";var s=2000,r=Symbol("com.basmilius.airplay:protocol"),l=Symbol("com.basmilius.airplay-state:subscribe"),u=Symbol("com.basmilius.airplay-state:unsubscribe");import{EventEmitter as k}from"node:events";import{Proto as e}from"@basmilius/apple-airplay";class m{get bundleIdentifier(){return this.#t}get displayName(){return this.#l}get playbackQueue(){return this.#n}get playbackState(){return this.#r}get playbackStateTimestamp(){return this.#a}get supportedCommands(){return this.#i}#t;#l;#n=null;#r;#a;#i=[];constructor(t,o){this.#t=t,this.#l=o,this.#r=e.PlaybackState_Enum.Unknown,this.#i=[]}isCommandSupported(t){return this.#i.some((o)=>o.command===t)}setPlaybackQueue(t){this.#n=t}setPlaybackState(t,o){this.#r=t,this.#a=o}setSupportedCommands(t){this.#i=t}}class b extends k{get#t(){return this.#l.dataStream}get#l(){return this.#r[r]}get clients(){return this.#n}get nowPlayingClient(){return this.#a?this.#n[this.#a]??null:null}get nowPlayingClientBundleIdentifier(){return this.#a}get volume(){return this.#i}get volumeAvailable(){return this.#u}get volumeCapabilities(){return this.#o}#n={};#r;#a;#i;#u;#o;constructor(t){super();this.#r=t,this.#a=null,this.#i=0,this.onSetNowPlayingClient=this.onSetNowPlayingClient.bind(this),this.onSetState=this.onSetState.bind(this),this.onUpdateClient=this.onUpdateClient.bind(this),this.onVolumeControlAvailability=this.onVolumeControlAvailability.bind(this),this.onVolumeControlCapabilitiesDidChange=this.onVolumeControlCapabilitiesDidChange.bind(this),this.onVolumeDidChange=this.onVolumeDidChange.bind(this)}async[l](){this.#t.on("setNowPlayingClient",this.onSetNowPlayingClient),this.#t.on("setState",this.onSetState),this.#t.on("updateClient",this.onUpdateClient),this.#t.on("volumeControlAvailability",this.onVolumeControlAvailability),this.#t.on("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#t.on("volumeDidChange",this.onVolumeDidChange)}async[u](){this.#t.off("setNowPlayingClient",this.onSetNowPlayingClient),this.#t.off("setState",this.onSetState),this.#t.off("updateClient",this.onUpdateClient),this.#t.off("volumeControlAvailability",this.onVolumeControlAvailability),this.#t.off("volumeControlCapabilitiesDidChange",this.onVolumeControlCapabilitiesDidChange),this.#t.off("volumeDidChange",this.onVolumeDidChange)}async onSetNowPlayingClient(t){this.#a=t.client.bundleIdentifier??null,this.emit("nowPlayingClient",this.#a)}async onSetState(t){let o=this.#m(t.playerPath.client.bundleIdentifier,t.displayName);if(t.playbackState)o.setPlaybackState(t.playbackState,t.playbackStateTimestamp);if(t.supportedCommands)o.setSupportedCommands(t.supportedCommands.supportedCommands);if(t.playbackQueue)o.setPlaybackQueue(t.playbackQueue);this.emit("setState",t)}async onUpdateClient(t){this.#m(t.client.bundleIdentifier,t.client.displayName),this.emit("clients",this.#n)}async onVolumeControlAvailability(t){this.#u=t.volumeControlAvailable,this.#o=t.volumeCapabilities,this.emit("volumeControlAvailability",t.volumeControlAvailable,t.volumeCapabilities)}async onVolumeControlCapabilitiesDidChange(t){this.#u=t.capabilities.volumeControlAvailable,this.#o=t.capabilities.volumeCapabilities,this.emit("volumeControlCapabilitiesDidChange",t.capabilities.volumeControlAvailable,t.capabilities.volumeCapabilities)}async onVolumeDidChange(t){this.#i=t.volume,this.emit("volumeDidChange",t.volume)}#m(t,o){if(t in this.#n)return this.#n[t];else{let n=new m(t,o);return this.#n[t]=n,this.emit("clients",this.#n),n}}}class P extends h{get[r](){return this.#o}get#t(){return this.#o.dataStream}get state(){return this.#n}#l;#n;#r;#a=!1;#i;#u;#o;constructor(t){super();this.#l=t,this.#n=new b(this)}async connect(){if(this.#a=!1,this.#o=new C(this.#l),await this.#o.connect(),this.#r)this.#u=await this.#o.verify.start(this.#r);else await this.#o.pairing.start(),this.#u=await this.#o.pairing.transient();this.#o.rtsp.on("close",async()=>this.#P()),await this.#y(),this.emit("connected")}async disconnect(){this.#a=!0,clearInterval(this.#i),await this.#p(),await this.#o.disconnect(),this.emit("disconnected")}async sendButtonEvent(t,o,n){await this.#t.exchange(this.#t.messages.sendButtonEvent(t,o,n))}async sendCommand(t,o){await this.#t.exchange(this.#t.messages.sendCommand(t,o))}async setVolume(t){await this.#t.exchange(this.#t.messages.setVolume(t))}async setCredentials(t){this.#r=t}async#m(){try{await this.#o.feedback(),await this.#t.exchange(this.#t.messages.protocol(d.ProtocolMessage_Type.UNKNOWN_MESSAGE))}catch(t){w("Feedback error",t)}}async#P(){if(this.#a)return;clearInterval(this.#i),await this.#p(),await f(1000),await this.connect()}async#y(){let t=this.#u;await this.#o.rtsp.enableEncryption(t.accessoryToControllerKey,t.controllerToAccessoryKey),await this.#o.setupEventStream(t.pairingId,t.sharedSecret),await this.#o.setupDataStream(t.sharedSecret),this.#i=setInterval(async()=>await this.#m(),s);let o=this.#l.packet.additionals.find((n)=>("rdata"in n)&&("gid"in n.rdata))?.rdata.gid;if(o)await this.#t.exchange(this.#t.messages.configureConnection(o));await this.#t.exchange(this.#t.messages.deviceInfo(t.pairingId)),this.#t.on("deviceInfo",async()=>{await this.#c(),await this.#t.exchange(this.#t.messages.setConnectionState()),await this.#t.exchange(this.#t.messages.clientUpdatesConfig())})}async#c(){await this.#n[l]()}async#p(){await this.#n[u]()}}class p extends x{get airplay(){return this.#t}get bundleIdentifier(){return this.#t.state.nowPlayingClient?.bundleIdentifier??null}get displayName(){return this.#t.state.nowPlayingClient?.displayName??null}get playbackQueue(){return this.#t.state.nowPlayingClient?.playbackQueue??null}get playbackState(){return this.#t.state.nowPlayingClient?.playbackState??a.PlaybackState_Enum.Unknown}get playbackStateTimestamp(){return this.#t.state.nowPlayingClient?.playbackStateTimestamp??-1}get volume(){return this.#t.state.volume??0}#t;constructor(t){super();this.#t=new P(t)}async connect(){await this.#t.connect()}async pause(){await this.#t.sendCommand(a.Command.Pause)}async playPause(){await this.#t.sendCommand(a.Command.TogglePlayPause)}async play(){await this.#t.sendCommand(a.Command.Play)}async stop(){await this.#t.sendCommand(a.Command.Stop)}async next(){await this.#t.sendCommand(a.Command.NextInContext)}async previous(){await this.#t.sendCommand(a.Command.PreviousInContext)}async setVolume(t){await this.#t.setVolume(t)}async getCommandInfo(t){let o=this.#t.state.nowPlayingClient;if(!o)return null;return o.supportedCommands.find((n)=>n.command===t)??null}async isCommandSupported(t){let o=this.#t.state.nowPlayingClient;if(!o)return!1;return o.isCommandSupported(t)}}class _ extends p{}class y extends p{}E();var $=N.airplay(),A=await $.findUntil("Slaapkamer HomePod._airplay._tcp.local"),c=new y(A);await c.connect();c.airplay.state.on("setState",()=>{let t=c.airplay.state.nowPlayingClient;if(!t){console.log("No app playing.");return}let o=t.playbackQueue?.contentItems?.[0]??null;if(!o){console.log(`No item in queue of ${t.bundleIdentifier} (${t.displayName}).`);return}switch(t.playbackState){case i.PlaybackState_Enum.Unknown:console.log("Unknown client state.");break;case i.PlaybackState_Enum.Playing:console.log(`Now playing: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case i.PlaybackState_Enum.Paused:console.log(`Now paused: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case i.PlaybackState_Enum.Stopped:console.log(`Now stopped: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case i.PlaybackState_Enum.Interrupted:console.log(`Now interrupted: ${o.metadata.title} (${o.metadata.trackArtistName})`);break;case i.PlaybackState_Enum.Seeking:console.log(`Seeking: ${o.metadata.title} (${o.metadata.trackArtistName})`);break}});
2
2
 
3
- //# debugId=9FB5A901D26282B864756E2164756E21
3
+ //# debugId=E1697F765627B93764756E2164756E21
4
4
  //# sourceMappingURL=test.js.map
package/dist/test.js.map CHANGED
@@ -4,14 +4,14 @@
4
4
  "sourcesContent": [
5
5
  "import { Proto } from '@basmilius/apple-airplay';\nimport { Discovery, enableDebug } from '@basmilius/apple-common';\nimport { HomePodMini } from '@/model';\n\nenableDebug();\n\nconst discovery = Discovery.airplay();\nconst discoveryResult = await discovery.findUntil('Slaapkamer HomePod._airplay._tcp.local');\n\nconst device = new HomePodMini(discoveryResult);\nawait device.connect();\n\ndevice.airplay.state.on('setState', () => {\n const client = device.airplay.state.nowPlayingClient;\n\n if (!client) {\n console.log('No app playing.');\n return;\n }\n\n const item = client.playbackQueue?.contentItems?.[0] ?? null;\n\n if (!item) {\n console.log(`No item in queue of ${client.bundleIdentifier} (${client.displayName}).`);\n return;\n }\n\n switch (client.playbackState) {\n case Proto.PlaybackState_Enum.Unknown:\n console.log('Unknown client state.');\n break;\n\n case Proto.PlaybackState_Enum.Playing:\n console.log(`Now playing: ${item.metadata.title} (${item.metadata.trackArtistName})`);\n break;\n\n case Proto.PlaybackState_Enum.Paused:\n console.log(`Now paused: ${item.metadata.title} (${item.metadata.trackArtistName})`);\n break;\n\n case Proto.PlaybackState_Enum.Stopped:\n console.log(`Now stopped: ${item.metadata.title} (${item.metadata.trackArtistName})`);\n break;\n\n case Proto.PlaybackState_Enum.Interrupted:\n console.log(`Now interrupted: ${item.metadata.title} (${item.metadata.trackArtistName})`);\n break;\n\n case Proto.PlaybackState_Enum.Seeking:\n console.log(`Seeking: ${item.metadata.title} (${item.metadata.trackArtistName})`);\n break;\n }\n});\n",
6
6
  "import { EventEmitter } from 'node:events';\nimport { Proto } from '@basmilius/apple-airplay';\nimport type { DiscoveryResult } from '@basmilius/apple-common';\nimport { AirPlayDevice } from '@/airplay';\n\nexport default abstract class extends EventEmitter {\n get airplay(): AirPlayDevice {\n return this.#airplay;\n }\n\n get bundleIdentifier(): string | null {\n return this.#airplay.state.nowPlayingClient?.bundleIdentifier ?? null;\n }\n\n get displayName(): string | null {\n return this.#airplay.state.nowPlayingClient?.displayName ?? null;\n }\n\n get playbackQueue(): Proto.PlaybackQueue | null {\n return this.#airplay.state.nowPlayingClient?.playbackQueue ?? null;\n }\n\n get playbackState(): Proto.PlaybackState_Enum {\n return this.#airplay.state.nowPlayingClient?.playbackState ?? Proto.PlaybackState_Enum.Unknown;\n }\n\n get playbackStateTimestamp(): number {\n return this.#airplay.state.nowPlayingClient?.playbackStateTimestamp ?? -1;\n }\n\n get volume(): number {\n return this.#airplay.state.volume ?? 0;\n }\n\n readonly #airplay: AirPlayDevice;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#airplay = new AirPlayDevice(discoveryResult);\n }\n\n async connect(): Promise<void> {\n await this.#airplay.connect();\n }\n\n async pause(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Pause);\n }\n\n async playPause(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.TogglePlayPause);\n }\n\n async play(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Play);\n }\n\n async stop(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.Stop);\n }\n\n async next(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.NextInContext);\n }\n\n async previous(): Promise<void> {\n await this.#airplay.sendCommand(Proto.Command.PreviousInContext);\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#airplay.setVolume(volume);\n }\n\n async getCommandInfo(command: Proto.Command): Promise<Proto.CommandInfo | null> {\n const client = this.#airplay.state.nowPlayingClient;\n\n if (!client) {\n return null;\n }\n\n return client.supportedCommands.find(c => c.command === command) ?? null;\n }\n\n async isCommandSupported(command: Proto.Command): Promise<boolean> {\n const client = this.#airplay.state.nowPlayingClient;\n\n if (!client) {\n return false;\n }\n\n return client.isCommandSupported(command);\n }\n}\n",
7
- "import { EventEmitter } from 'node:events';\nimport { AirPlay, type AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { type AccessoryKeys, debug, type DiscoveryResult, waitFor } from '@basmilius/apple-common';\nimport { AIRPLAY_FEEDBACK_INTERVAL, AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport State from './state';\n\ntype EventMap = {\n connected: [];\n disconnected: [];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get [AIRPLAY_PROTOCOL](): AirPlay {\n return this.#protocol;\n }\n\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get state(): State {\n return this.#state;\n }\n\n readonly #discoveryResult: DiscoveryResult;\n readonly #state: State;\n #disconnect: boolean = false;\n #feedbackInterval: NodeJS.Timeout;\n #keys: AccessoryKeys;\n #protocol!: AirPlay;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#discoveryResult = discoveryResult;\n this.#state = new State(this);\n }\n\n async connect(): Promise<void> {\n this.#disconnect = false;\n\n this.#protocol = new AirPlay(this.#discoveryResult);\n\n await this.#protocol.connect();\n await this.#protocol.pairing.start();\n this.#keys = await this.#protocol.pairing.transient();\n\n this.#protocol.rtsp.on('close', async () => this.#onClose());\n\n await this.#setup();\n\n this.emit('connected');\n }\n\n async disconnect(): Promise<void> {\n this.#disconnect = true;\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await this.#protocol.disconnect();\n\n this.emit('disconnected');\n }\n\n async sendButtonEvent(usagePage: number, usage: number, buttonDown: boolean): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendButtonEvent(usagePage, usage, buttonDown));\n }\n\n async sendCommand(command: Proto.Command, options?: Proto.CommandOptions): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendCommand(command, options));\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.setVolume(volume));\n }\n\n async #feedback(): Promise<void> {\n try {\n await this.#protocol.feedback();\n } catch (err) {\n debug('Feedback error', err);\n }\n }\n\n async #onClose(): Promise<void> {\n if (this.#disconnect) {\n return;\n }\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await waitFor(10000);\n await this.connect();\n }\n\n async #setup(): Promise<void> {\n const keys = this.#keys;\n\n await this.#protocol.rtsp.enableEncryption(\n keys.accessoryToControllerKey,\n keys.controllerToAccessoryKey\n );\n\n await this.#protocol.setupEventStream(keys.pairingId, keys.sharedSecret);\n await this.#protocol.setupDataStream(keys.sharedSecret);\n\n this.#feedbackInterval = setInterval(async () => await this.#feedback(), AIRPLAY_FEEDBACK_INTERVAL);\n\n await this.#dataStream.exchange(this.#dataStream.messages.deviceInfo(keys.pairingId));\n\n this.#dataStream.on('deviceInfo', async () => {\n await this.#subscribe();\n await this.#dataStream.exchange(this.#dataStream.messages.setConnectionState());\n await this.#dataStream.exchange(this.#dataStream.messages.clientUpdatesConfig());\n });\n }\n\n async #subscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_SUBSCRIBE_SYMBOL]();\n }\n\n async #unsubscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL]();\n }\n}\n",
7
+ "import { EventEmitter } from 'node:events';\nimport { AirPlay, type AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { type AccessoryCredentials, type AccessoryKeys, debug, type DiscoveryResult, waitFor } from '@basmilius/apple-common';\nimport { AIRPLAY_FEEDBACK_INTERVAL, AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport State from './state';\n\ntype EventMap = {\n connected: [];\n disconnected: [];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get [AIRPLAY_PROTOCOL](): AirPlay {\n return this.#protocol;\n }\n\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get state(): State {\n return this.#state;\n }\n\n readonly #discoveryResult: DiscoveryResult;\n readonly #state: State;\n #credentials?: AccessoryCredentials;\n #disconnect: boolean = false;\n #feedbackInterval: NodeJS.Timeout;\n #keys: AccessoryKeys;\n #protocol!: AirPlay;\n\n constructor(discoveryResult: DiscoveryResult) {\n super();\n\n this.#discoveryResult = discoveryResult;\n this.#state = new State(this);\n }\n\n async connect(): Promise<void> {\n this.#disconnect = false;\n\n this.#protocol = new AirPlay(this.#discoveryResult);\n\n await this.#protocol.connect();\n\n if (this.#credentials) {\n this.#keys = await this.#protocol.verify.start(this.#credentials);\n } else {\n await this.#protocol.pairing.start();\n this.#keys = await this.#protocol.pairing.transient();\n }\n\n this.#protocol.rtsp.on('close', async () => this.#onClose());\n\n await this.#setup();\n\n this.emit('connected');\n }\n\n async disconnect(): Promise<void> {\n this.#disconnect = true;\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await this.#protocol.disconnect();\n\n this.emit('disconnected');\n }\n\n async sendButtonEvent(usagePage: number, usage: number, buttonDown: boolean): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendButtonEvent(usagePage, usage, buttonDown));\n }\n\n async sendCommand(command: Proto.Command, options?: Proto.CommandOptions): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.sendCommand(command, options));\n }\n\n async setVolume(volume: number): Promise<void> {\n await this.#dataStream.exchange(this.#dataStream.messages.setVolume(volume));\n }\n\n async setCredentials(credentials: AccessoryCredentials): Promise<void> {\n this.#credentials = credentials;\n }\n\n async #feedback(): Promise<void> {\n try {\n await this.#protocol.feedback();\n await this.#dataStream.exchange(this.#dataStream.messages.protocol(Proto.ProtocolMessage_Type.UNKNOWN_MESSAGE));\n } catch (err) {\n debug('Feedback error', err);\n }\n }\n\n async #onClose(): Promise<void> {\n if (this.#disconnect) {\n return;\n }\n\n clearInterval(this.#feedbackInterval);\n\n await this.#unsubscribe();\n await waitFor(1000);\n await this.connect();\n }\n\n async #setup(): Promise<void> {\n const keys = this.#keys;\n\n await this.#protocol.rtsp.enableEncryption(\n keys.accessoryToControllerKey,\n keys.controllerToAccessoryKey\n );\n\n await this.#protocol.setupEventStream(keys.pairingId, keys.sharedSecret);\n await this.#protocol.setupDataStream(keys.sharedSecret);\n\n this.#feedbackInterval = setInterval(async () => await this.#feedback(), AIRPLAY_FEEDBACK_INTERVAL);\n\n const gid = this.#discoveryResult.packet.additionals.find(a => 'rdata' in a && 'gid' in a['rdata'])?.['rdata']['gid'] as string;\n\n if (gid) {\n await this.#dataStream.exchange(this.#dataStream.messages.configureConnection(gid));\n }\n\n await this.#dataStream.exchange(this.#dataStream.messages.deviceInfo(keys.pairingId));\n\n this.#dataStream.on('deviceInfo', async () => {\n await this.#subscribe();\n await this.#dataStream.exchange(this.#dataStream.messages.setConnectionState());\n await this.#dataStream.exchange(this.#dataStream.messages.clientUpdatesConfig());\n });\n }\n\n async #subscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_SUBSCRIBE_SYMBOL]();\n }\n\n async #unsubscribe(): Promise<void> {\n await this.#state[AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL]();\n }\n}\n",
8
8
  "export const AIRPLAY_FEEDBACK_INTERVAL = 2000;\n\nexport const AIRPLAY_PROTOCOL = Symbol('com.basmilius.airplay:protocol');\nexport const AIRPLAY_STATE_SUBSCRIBE_SYMBOL = Symbol('com.basmilius.airplay-state:subscribe');\nexport const AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL = Symbol('com.basmilius.airplay-state:unsubscribe');\n",
9
9
  "import { EventEmitter } from 'node:events';\nimport type { AirPlay, AirPlayDataStream, Proto } from '@basmilius/apple-airplay';\nimport { AIRPLAY_PROTOCOL, AIRPLAY_STATE_SUBSCRIBE_SYMBOL, AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL } from './const';\nimport Client from './client';\nimport type Device from './device';\n\ntype EventMap = {\n readonly clients: [Record<string, Client>];\n readonly nowPlayingClient: [string | null];\n readonly setState: [Proto.SetStateMessage];\n readonly volumeControlAvailability: [boolean, Proto.VolumeCapabilities_Enum];\n readonly volumeControlCapabilitiesDidChange: [boolean, Proto.VolumeCapabilities_Enum];\n readonly volumeDidChange: [number];\n};\n\nexport default class extends EventEmitter<EventMap> {\n get #dataStream(): AirPlayDataStream {\n return this.#protocol.dataStream;\n }\n\n get #protocol(): AirPlay {\n return this.#device[AIRPLAY_PROTOCOL];\n }\n\n get clients(): Record<string, Client> {\n return this.#clients;\n }\n\n get nowPlayingClient(): Client | null {\n return this.#nowPlayingClientBundleIdentifier ? this.#clients[this.#nowPlayingClientBundleIdentifier] ?? null : null;\n }\n\n get nowPlayingClientBundleIdentifier(): string | null {\n return this.#nowPlayingClientBundleIdentifier;\n }\n\n get volume(): number {\n return this.#volume;\n }\n\n get volumeAvailable(): boolean {\n return this.#volumeAvailable;\n }\n\n get volumeCapabilities(): Proto.VolumeCapabilities_Enum {\n return this.#volumeCapabilities;\n }\n\n readonly #clients: Record<string, Client> = {};\n readonly #device: Device;\n #nowPlayingClientBundleIdentifier: string;\n #volume: number;\n #volumeAvailable: boolean;\n #volumeCapabilities: Proto.VolumeCapabilities_Enum;\n\n constructor(device: Device) {\n super();\n\n this.#device = device;\n this.#nowPlayingClientBundleIdentifier = null;\n this.#volume = 0;\n\n this.onSetNowPlayingClient = this.onSetNowPlayingClient.bind(this);\n this.onSetState = this.onSetState.bind(this);\n this.onUpdateClient = this.onUpdateClient.bind(this);\n this.onVolumeControlAvailability = this.onVolumeControlAvailability.bind(this);\n this.onVolumeControlCapabilitiesDidChange = this.onVolumeControlCapabilitiesDidChange.bind(this);\n this.onVolumeDidChange = this.onVolumeDidChange.bind(this);\n }\n\n async [AIRPLAY_STATE_SUBSCRIBE_SYMBOL](): Promise<void> {\n this.#dataStream.on('setNowPlayingClient', this.onSetNowPlayingClient);\n this.#dataStream.on('setState', this.onSetState);\n this.#dataStream.on('updateClient', this.onUpdateClient);\n this.#dataStream.on('volumeControlAvailability', this.onVolumeControlAvailability);\n this.#dataStream.on('volumeControlCapabilitiesDidChange', this.onVolumeControlCapabilitiesDidChange);\n this.#dataStream.on('volumeDidChange', this.onVolumeDidChange);\n }\n\n async [AIRPLAY_STATE_UNSUBSCRIBE_SYMBOL](): Promise<void> {\n this.#dataStream.off('setNowPlayingClient', this.onSetNowPlayingClient);\n this.#dataStream.off('setState', this.onSetState);\n this.#dataStream.off('updateClient', this.onUpdateClient);\n this.#dataStream.off('volumeControlAvailability', this.onVolumeControlAvailability);\n this.#dataStream.off('volumeControlCapabilitiesDidChange', this.onVolumeControlCapabilitiesDidChange);\n this.#dataStream.off('volumeDidChange', this.onVolumeDidChange);\n }\n\n async onSetNowPlayingClient(message: Proto.SetNowPlayingClientMessage): Promise<void> {\n this.#nowPlayingClientBundleIdentifier = message.client.bundleIdentifier ?? null;\n\n this.emit('nowPlayingClient', this.#nowPlayingClientBundleIdentifier);\n }\n\n async onSetState(message: Proto.SetStateMessage): Promise<void> {\n const client = this.#client(message.playerPath.client.bundleIdentifier, message.displayName);\n\n if (message.playbackState) {\n client.setPlaybackState(message.playbackState, message.playbackStateTimestamp);\n }\n\n if (message.supportedCommands) {\n client.setSupportedCommands(message.supportedCommands.supportedCommands);\n }\n\n if (message.playbackQueue) {\n client.setPlaybackQueue(message.playbackQueue);\n }\n\n this.emit('setState', message);\n }\n\n async onUpdateClient(message: Proto.UpdateClientMessage): Promise<void> {\n this.#client(message.client.bundleIdentifier, message.client.displayName);\n\n this.emit('clients', this.#clients);\n }\n\n async onVolumeControlAvailability(message: Proto.VolumeControlAvailabilityMessage): Promise<void> {\n this.#volumeAvailable = message.volumeControlAvailable;\n this.#volumeCapabilities = message.volumeCapabilities;\n\n this.emit('volumeControlAvailability', message.volumeControlAvailable, message.volumeCapabilities);\n }\n\n async onVolumeControlCapabilitiesDidChange(message: Proto.VolumeControlCapabilitiesDidChangeMessage): Promise<void> {\n this.#volumeAvailable = message.capabilities.volumeControlAvailable;\n this.#volumeCapabilities = message.capabilities.volumeCapabilities;\n\n this.emit('volumeControlCapabilitiesDidChange', message.capabilities.volumeControlAvailable, message.capabilities.volumeCapabilities);\n }\n\n async onVolumeDidChange(message: Proto.VolumeDidChangeMessage): Promise<void> {\n this.#volume = message.volume;\n\n this.emit('volumeDidChange', message.volume);\n }\n\n #client(bundleIdentifier: string, displayName: string): Client {\n if (bundleIdentifier in this.#clients) {\n return this.#clients[bundleIdentifier];\n } else {\n const client = new Client(bundleIdentifier, displayName);\n this.#clients[bundleIdentifier] = client;\n\n this.emit('clients', this.#clients);\n\n return client;\n }\n }\n}\n",
10
10
  "import { Proto } from '@basmilius/apple-airplay';\n\nexport default class Client {\n get bundleIdentifier(): string {\n return this.#bundleIdentifier;\n }\n\n get displayName(): string {\n return this.#displayName;\n }\n\n get playbackQueue(): Proto.PlaybackQueue | null {\n return this.#playbackQueue;\n }\n\n get playbackState(): Proto.PlaybackState_Enum {\n return this.#playbackState;\n }\n\n get playbackStateTimestamp(): number {\n return this.#playbackStateTimestamp;\n }\n\n get supportedCommands(): Proto.CommandInfo[] {\n return this.#supportedCommands;\n }\n\n readonly #bundleIdentifier: string;\n readonly #displayName: string;\n #playbackQueue: Proto.PlaybackQueue | null = null;\n #playbackState: Proto.PlaybackState_Enum;\n #playbackStateTimestamp: number;\n #supportedCommands: Proto.CommandInfo[] = [];\n\n constructor(bundleIdentifier: string, displayName: string) {\n this.#bundleIdentifier = bundleIdentifier;\n this.#displayName = displayName;\n this.#playbackState = Proto.PlaybackState_Enum.Unknown;\n this.#supportedCommands = [];\n }\n\n isCommandSupported(command: Proto.Command): boolean {\n return this.#supportedCommands.some(c => c.command === command);\n }\n\n setPlaybackQueue(playbackQueue: Proto.PlaybackQueue): void {\n this.#playbackQueue = playbackQueue;\n }\n\n setPlaybackState(playbackState: Proto.PlaybackState_Enum, playbackStateTimestamp: number): void {\n this.#playbackState = playbackState;\n this.#playbackStateTimestamp = playbackStateTimestamp;\n }\n\n setSupportedCommands(supportedCommands: Proto.CommandInfo[]): void {\n this.#supportedCommands = supportedCommands;\n }\n}\n",
11
11
  "import HomePodBase from './homepod-base';\n\nexport default class extends HomePodBase {}\n",
12
12
  "import HomePodBase from './homepod-base';\n\nexport default class extends HomePodBase {}\n"
13
13
  ],
14
- "mappings": "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",
15
- "debugId": "9FB5A901D26282B864756E2164756E21",
14
+ "mappings": "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",
15
+ "debugId": "E1697F765627B93764756E2164756E21",
16
16
  "names": []
17
17
  }
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.0.25",
4
+ "version": "0.0.26",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "author": {
@@ -42,9 +42,9 @@
42
42
  }
43
43
  },
44
44
  "dependencies": {
45
- "@basmilius/apple-airplay": "0.0.25",
46
- "@basmilius/apple-common": "0.0.25",
47
- "@basmilius/apple-companion-link": "0.0.25"
45
+ "@basmilius/apple-airplay": "0.0.26",
46
+ "@basmilius/apple-common": "0.0.26",
47
+ "@basmilius/apple-companion-link": "0.0.26"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@basmilius/tools": "^2.13.0",